diff --git a/classes/jsp/css/main.css b/classes/jsp/css/main.css index f7d63fc..4e5b098 100644 --- a/classes/jsp/css/main.css +++ b/classes/jsp/css/main.css @@ -35,6 +35,14 @@ h1 { letter-spacing: -0.05em; } +.converse-container { + height: 100vh; + } + +.conversejs converse-chats.converse-embedded .chatbox, .conversejs converse-chats.converse-overlayed .chatbox { + width: 100%; +} + #controls { font-family:arial; font-size:24px; @@ -48,7 +56,7 @@ h1 { } -#chordpro, #lyrics { +#chordpro, #lyrics, #chatview { border:none; margin:0; padding:0; diff --git a/classes/jsp/dist/converse.css b/classes/jsp/dist/converse.css new file mode 100644 index 0000000..9260c27 --- /dev/null +++ b/classes/jsp/dist/converse.css @@ -0,0 +1,15864 @@ +/*!*****************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/styles/index.scss ***! + \*****************************************************************************************************************************************************************************************************************************************************/ +@charset "UTF-8"; +/*! + * Converse.js (Web-based XMPP instant messaging client) + * https://conversejs.org + * + * Copyright (c) 2013-2021, JC Brand + * Licensed under the Mozilla Public License + */ +:root, +[data-bs-theme=light] { + --converse-blue: #0d6efd; + --converse-indigo: #6610f2; + --converse-purple: #6f42c1; + --converse-pink: #d63384; + --converse-red: #dc3545; + --converse-orange: #fd7e14; + --converse-yellow: #ffc107; + --converse-green: #198754; + --converse-teal: #20c997; + --converse-cyan: #0dcaf0; + --converse-black: #000; + --converse-white: #fff; + --converse-gray: #6c757d; + --converse-gray-dark: #343a40; + --converse-gray-100: #f8f9fa; + --converse-gray-200: #e9ecef; + --converse-gray-300: #dee2e6; + --converse-gray-400: #ced4da; + --converse-gray-500: #adb5bd; + --converse-gray-600: #6c757d; + --converse-gray-700: #495057; + --converse-gray-800: #343a40; + --converse-gray-900: #212529; + --converse-primary: #0d6efd; + --converse-secondary: #6c757d; + --converse-success: #198754; + --converse-info: #0dcaf0; + --converse-warning: #ffc107; + --converse-danger: #dc3545; + --converse-light: #f8f9fa; + --converse-dark: #212529; + --converse-primary-rgb: 13, 110, 253; + --converse-secondary-rgb: 108, 117, 125; + --converse-success-rgb: 25, 135, 84; + --converse-info-rgb: 13, 202, 240; + --converse-warning-rgb: 255, 193, 7; + --converse-danger-rgb: 220, 53, 69; + --converse-light-rgb: 248, 249, 250; + --converse-dark-rgb: 33, 37, 41; + --converse-primary-text-emphasis: #052c65; + --converse-secondary-text-emphasis: #2b2f32; + --converse-success-text-emphasis: #0a3622; + --converse-info-text-emphasis: #055160; + --converse-warning-text-emphasis: #664d03; + --converse-danger-text-emphasis: #58151c; + --converse-light-text-emphasis: #495057; + --converse-dark-text-emphasis: #495057; + --converse-primary-bg-subtle: #cfe2ff; + --converse-secondary-bg-subtle: #e2e3e5; + --converse-success-bg-subtle: #d1e7dd; + --converse-info-bg-subtle: #cff4fc; + --converse-warning-bg-subtle: #fff3cd; + --converse-danger-bg-subtle: #f8d7da; + --converse-light-bg-subtle: #fcfcfd; + --converse-dark-bg-subtle: #ced4da; + --converse-primary-border-subtle: #9ec5fe; + --converse-secondary-border-subtle: #c4c8cb; + --converse-success-border-subtle: #a3cfbb; + --converse-info-border-subtle: #9eeaf9; + --converse-warning-border-subtle: #ffe69c; + --converse-danger-border-subtle: #f1aeb5; + --converse-light-border-subtle: #e9ecef; + --converse-dark-border-subtle: #adb5bd; + --converse-white-rgb: 255, 255, 255; + --converse-black-rgb: 0, 0, 0; + --converse-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --converse-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --converse-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --converse-body-font-family: var(--converse-font-sans-serif); + --converse-body-font-size: 1rem; + --converse-body-font-weight: 400; + --converse-body-line-height: 1.5; + --converse-body-color: #212529; + --converse-body-color-rgb: 33, 37, 41; + --converse-body-bg: #fff; + --converse-body-bg-rgb: 255, 255, 255; + --converse-emphasis-color: #000; + --converse-emphasis-color-rgb: 0, 0, 0; + --converse-secondary-color: rgba(33, 37, 41, 0.75); + --converse-secondary-color-rgb: 33, 37, 41; + --converse-secondary-bg: #e9ecef; + --converse-secondary-bg-rgb: 233, 236, 239; + --converse-tertiary-color: rgba(33, 37, 41, 0.5); + --converse-tertiary-color-rgb: 33, 37, 41; + --converse-tertiary-bg: #f8f9fa; + --converse-tertiary-bg-rgb: 248, 249, 250; + --converse-heading-color: inherit; + --converse-link-color: #0d6efd; + --converse-link-color-rgb: 13, 110, 253; + --converse-link-decoration: underline; + --converse-link-hover-color: #0a58ca; + --converse-link-hover-color-rgb: 10, 88, 202; + --converse-code-color: #d63384; + --converse-highlight-color: #212529; + --converse-highlight-bg: #fff3cd; + --converse-border-width: 1px; + --converse-border-style: solid; + --converse-border-color: #dee2e6; + --converse-border-color-translucent: rgba(0, 0, 0, 0.175); + --converse-border-radius: 0.375rem; + --converse-border-radius-sm: 0.25rem; + --converse-border-radius-lg: 0.5rem; + --converse-border-radius-xl: 1rem; + --converse-border-radius-xxl: 2rem; + --converse-border-radius-2xl: var(--converse-border-radius-xxl); + --converse-border-radius-pill: 50rem; + --converse-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --converse-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --converse-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); + --converse-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --converse-focus-ring-width: 0.25rem; + --converse-focus-ring-opacity: 0.25; + --converse-focus-ring-color: rgba(13, 110, 253, 0.25); + --converse-form-valid-color: #198754; + --converse-form-valid-border-color: #198754; + --converse-form-invalid-color: #dc3545; + --converse-form-invalid-border-color: #dc3545; +} + +[data-bs-theme=dark] { + color-scheme: dark; + --converse-body-color: #dee2e6; + --converse-body-color-rgb: 222, 226, 230; + --converse-body-bg: #212529; + --converse-body-bg-rgb: 33, 37, 41; + --converse-emphasis-color: #fff; + --converse-emphasis-color-rgb: 255, 255, 255; + --converse-secondary-color: rgba(222, 226, 230, 0.75); + --converse-secondary-color-rgb: 222, 226, 230; + --converse-secondary-bg: #343a40; + --converse-secondary-bg-rgb: 52, 58, 64; + --converse-tertiary-color: rgba(222, 226, 230, 0.5); + --converse-tertiary-color-rgb: 222, 226, 230; + --converse-tertiary-bg: #2b3035; + --converse-tertiary-bg-rgb: 43, 48, 53; + --converse-primary-text-emphasis: #6ea8fe; + --converse-secondary-text-emphasis: #a7acb1; + --converse-success-text-emphasis: #75b798; + --converse-info-text-emphasis: #6edff6; + --converse-warning-text-emphasis: #ffda6a; + --converse-danger-text-emphasis: #ea868f; + --converse-light-text-emphasis: #f8f9fa; + --converse-dark-text-emphasis: #dee2e6; + --converse-primary-bg-subtle: #031633; + --converse-secondary-bg-subtle: #161719; + --converse-success-bg-subtle: #051b11; + --converse-info-bg-subtle: #032830; + --converse-warning-bg-subtle: #332701; + --converse-danger-bg-subtle: #2c0b0e; + --converse-light-bg-subtle: #343a40; + --converse-dark-bg-subtle: #1a1d20; + --converse-primary-border-subtle: #084298; + --converse-secondary-border-subtle: #41464b; + --converse-success-border-subtle: #0f5132; + --converse-info-border-subtle: #087990; + --converse-warning-border-subtle: #997404; + --converse-danger-border-subtle: #842029; + --converse-light-border-subtle: #495057; + --converse-dark-border-subtle: #343a40; + --converse-heading-color: inherit; + --converse-link-color: #6ea8fe; + --converse-link-hover-color: #8bb9fe; + --converse-link-color-rgb: 110, 168, 254; + --converse-link-hover-color-rgb: 139, 185, 254; + --converse-code-color: #e685b5; + --converse-highlight-color: #dee2e6; + --converse-highlight-bg: #664d03; + --converse-border-color: #495057; + --converse-border-color-translucent: rgba(255, 255, 255, 0.15); + --converse-form-valid-color: #75b798; + --converse-form-valid-border-color: #75b798; + --converse-form-invalid-color: #ea868f; + --converse-form-invalid-border-color: #ea868f; +} + +.conversejs, converse-bg { + /* rtl:raw: + [type="tel"], + [type="url"], + [type="email"], + [type="number"] { + direction: ltr; + } + */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:ignore */ + /* rtl:end:ignore */ + /* rtl:begin:remove */ + /* rtl:end:remove */ +} +.conversejs *, +.conversejs *::before, +.conversejs *::after, converse-bg *, +converse-bg *::before, +converse-bg *::after { + box-sizing: border-box; +} +@media (prefers-reduced-motion: no-preference) { + .conversejs :root, converse-bg :root { + scroll-behavior: smooth; + } +} +.conversejs body, converse-bg body { + margin: 0; + font-family: var(--converse-body-font-family); + font-size: var(--converse-body-font-size); + font-weight: var(--converse-body-font-weight); + line-height: var(--converse-body-line-height); + color: var(--converse-body-color); + text-align: var(--converse-body-text-align); + background-color: var(--converse-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +.conversejs hr, converse-bg hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: var(--converse-border-width) solid; + opacity: 0.25; +} +.conversejs h6, .conversejs .h6, .conversejs h5, .conversejs .h5, .conversejs h4, .conversejs .h4, .conversejs h3, .conversejs .h3, .conversejs h2, .conversejs .h2, .conversejs h1, .conversejs .h1, converse-bg h6, converse-bg .h6, converse-bg h5, converse-bg .h5, converse-bg h4, converse-bg .h4, converse-bg h3, converse-bg .h3, converse-bg h2, converse-bg .h2, converse-bg h1, converse-bg .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--converse-heading-color); +} +.conversejs h1, .conversejs .h1, converse-bg h1, converse-bg .h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + .conversejs h1, .conversejs .h1, converse-bg h1, converse-bg .h1 { + font-size: 2.5rem; + } +} +.conversejs h2, .conversejs .h2, converse-bg h2, converse-bg .h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + .conversejs h2, .conversejs .h2, converse-bg h2, converse-bg .h2 { + font-size: 2rem; + } +} +.conversejs h3, .conversejs .h3, converse-bg h3, converse-bg .h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + .conversejs h3, .conversejs .h3, converse-bg h3, converse-bg .h3 { + font-size: 1.75rem; + } +} +.conversejs h4, .conversejs .h4, converse-bg h4, converse-bg .h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + .conversejs h4, .conversejs .h4, converse-bg h4, converse-bg .h4 { + font-size: 1.5rem; + } +} +.conversejs h5, .conversejs .h5, converse-bg h5, converse-bg .h5 { + font-size: 1.25rem; +} +.conversejs h6, .conversejs .h6, converse-bg h6, converse-bg .h6 { + font-size: 1rem; +} +.conversejs p, converse-bg p { + margin-top: 0; + margin-bottom: 1rem; +} +.conversejs abbr[title], converse-bg abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} +.conversejs address, converse-bg address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} +.conversejs ol, +.conversejs ul, converse-bg ol, +converse-bg ul { + padding-left: 2rem; +} +.conversejs ol, +.conversejs ul, +.conversejs dl, converse-bg ol, +converse-bg ul, +converse-bg dl { + margin-top: 0; + margin-bottom: 1rem; +} +.conversejs ol ol, +.conversejs ul ul, +.conversejs ol ul, +.conversejs ul ol, converse-bg ol ol, +converse-bg ul ul, +converse-bg ol ul, +converse-bg ul ol { + margin-bottom: 0; +} +.conversejs dt, converse-bg dt { + font-weight: 700; +} +.conversejs dd, converse-bg dd { + margin-bottom: 0.5rem; + margin-left: 0; +} +.conversejs blockquote, converse-bg blockquote { + margin: 0 0 1rem; +} +.conversejs b, +.conversejs strong, converse-bg b, +converse-bg strong { + font-weight: bolder; +} +.conversejs small, .conversejs .small, converse-bg small, converse-bg .small { + font-size: 0.875em; +} +.conversejs mark, .conversejs .mark, converse-bg mark, converse-bg .mark { + padding: 0.1875em; + color: var(--converse-highlight-color); + background-color: var(--converse-highlight-bg); +} +.conversejs sub, +.conversejs sup, converse-bg sub, +converse-bg sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} +.conversejs sub, converse-bg sub { + bottom: -0.25em; +} +.conversejs sup, converse-bg sup { + top: -0.5em; +} +.conversejs a, converse-bg a { + color: rgba(var(--converse-link-color-rgb), var(--converse-link-opacity, 1)); + text-decoration: underline; +} +.conversejs a:hover, converse-bg a:hover { + --converse-link-color-rgb: var(--converse-link-hover-color-rgb); +} +.conversejs a:not([href]):not([class]), .conversejs a:not([href]):not([class]):hover, converse-bg a:not([href]):not([class]), converse-bg a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} +.conversejs pre, +.conversejs code, +.conversejs kbd, +.conversejs samp, converse-bg pre, +converse-bg code, +converse-bg kbd, +converse-bg samp { + font-family: var(--converse-font-monospace); + font-size: 1em; +} +.conversejs pre, converse-bg pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +.conversejs pre code, converse-bg pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} +.conversejs code, converse-bg code { + font-size: 0.875em; + color: var(--converse-code-color); + word-wrap: break-word; +} +a > .conversejs code, a > converse-bg code { + color: inherit; +} +.conversejs kbd, converse-bg kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--converse-body-bg); + background-color: var(--converse-body-color); + border-radius: 0.25rem; +} +.conversejs kbd kbd, converse-bg kbd kbd { + padding: 0; + font-size: 1em; +} +.conversejs figure, converse-bg figure { + margin: 0 0 1rem; +} +.conversejs img, +.conversejs svg, converse-bg img, +converse-bg svg { + vertical-align: middle; +} +.conversejs table, converse-bg table { + caption-side: bottom; + border-collapse: collapse; +} +.conversejs caption, converse-bg caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--converse-secondary-color); + text-align: left; +} +.conversejs th, converse-bg th { + text-align: inherit; + text-align: -webkit-match-parent; +} +.conversejs thead, +.conversejs tbody, +.conversejs tfoot, +.conversejs tr, +.conversejs td, +.conversejs th, converse-bg thead, +converse-bg tbody, +converse-bg tfoot, +converse-bg tr, +converse-bg td, +converse-bg th { + border-color: inherit; + border-style: solid; + border-width: 0; +} +.conversejs label, converse-bg label { + display: inline-block; +} +.conversejs button, converse-bg button { + border-radius: 0; +} +.conversejs button:focus:not(:focus-visible), converse-bg button:focus:not(:focus-visible) { + outline: 0; +} +.conversejs input, +.conversejs button, +.conversejs select, +.conversejs optgroup, +.conversejs textarea, converse-bg input, +converse-bg button, +converse-bg select, +converse-bg optgroup, +converse-bg textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +.conversejs button, +.conversejs select, converse-bg button, +converse-bg select { + text-transform: none; +} +.conversejs [role=button], converse-bg [role=button] { + cursor: pointer; +} +.conversejs select, converse-bg select { + word-wrap: normal; +} +.conversejs select:disabled, converse-bg select:disabled { + opacity: 1; +} +.conversejs [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator, converse-bg [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} +.conversejs button, +.conversejs [type=button], +.conversejs [type=reset], +.conversejs [type=submit], converse-bg button, +converse-bg [type=button], +converse-bg [type=reset], +converse-bg [type=submit] { + -webkit-appearance: button; +} +.conversejs button:not(:disabled), +.conversejs [type=button]:not(:disabled), +.conversejs [type=reset]:not(:disabled), +.conversejs [type=submit]:not(:disabled), converse-bg button:not(:disabled), +converse-bg [type=button]:not(:disabled), +converse-bg [type=reset]:not(:disabled), +converse-bg [type=submit]:not(:disabled) { + cursor: pointer; +} +.conversejs ::-moz-focus-inner, converse-bg ::-moz-focus-inner { + padding: 0; + border-style: none; +} +.conversejs textarea, converse-bg textarea { + resize: vertical; +} +.conversejs fieldset, converse-bg fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +.conversejs legend, converse-bg legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + .conversejs legend, converse-bg legend { + font-size: 1.5rem; + } +} +.conversejs legend + *, converse-bg legend + * { + clear: left; +} +.conversejs ::-webkit-datetime-edit-fields-wrapper, +.conversejs ::-webkit-datetime-edit-text, +.conversejs ::-webkit-datetime-edit-minute, +.conversejs ::-webkit-datetime-edit-hour-field, +.conversejs ::-webkit-datetime-edit-day-field, +.conversejs ::-webkit-datetime-edit-month-field, +.conversejs ::-webkit-datetime-edit-year-field, converse-bg ::-webkit-datetime-edit-fields-wrapper, +converse-bg ::-webkit-datetime-edit-text, +converse-bg ::-webkit-datetime-edit-minute, +converse-bg ::-webkit-datetime-edit-hour-field, +converse-bg ::-webkit-datetime-edit-day-field, +converse-bg ::-webkit-datetime-edit-month-field, +converse-bg ::-webkit-datetime-edit-year-field { + padding: 0; +} +.conversejs ::-webkit-inner-spin-button, converse-bg ::-webkit-inner-spin-button { + height: auto; +} +.conversejs [type=search], converse-bg [type=search] { + -webkit-appearance: textfield; + outline-offset: -2px; +} +.conversejs ::-webkit-search-decoration, converse-bg ::-webkit-search-decoration { + -webkit-appearance: none; +} +.conversejs ::-webkit-color-swatch-wrapper, converse-bg ::-webkit-color-swatch-wrapper { + padding: 0; +} +.conversejs ::file-selector-button, converse-bg ::file-selector-button { + font: inherit; + -webkit-appearance: button; +} +.conversejs output, converse-bg output { + display: inline-block; +} +.conversejs iframe, converse-bg iframe { + border: 0; +} +.conversejs summary, converse-bg summary { + display: list-item; + cursor: pointer; +} +.conversejs progress, converse-bg progress { + vertical-align: baseline; +} +.conversejs [hidden], converse-bg [hidden] { + display: none !important; +} +.conversejs .lead, converse-bg .lead { + font-size: 1.25rem; + font-weight: 300; +} +.conversejs .display-1, converse-bg .display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .conversejs .display-1, converse-bg .display-1 { + font-size: 5rem; + } +} +.conversejs .display-2, converse-bg .display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .conversejs .display-2, converse-bg .display-2 { + font-size: 4.5rem; + } +} +.conversejs .display-3, converse-bg .display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .conversejs .display-3, converse-bg .display-3 { + font-size: 4rem; + } +} +.conversejs .display-4, converse-bg .display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .conversejs .display-4, converse-bg .display-4 { + font-size: 3.5rem; + } +} +.conversejs .display-5, converse-bg .display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .conversejs .display-5, converse-bg .display-5 { + font-size: 3rem; + } +} +.conversejs .display-6, converse-bg .display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .conversejs .display-6, converse-bg .display-6 { + font-size: 2.5rem; + } +} +.conversejs .list-unstyled, converse-bg .list-unstyled { + padding-left: 0; + list-style: none; +} +.conversejs .list-inline, converse-bg .list-inline { + padding-left: 0; + list-style: none; +} +.conversejs .list-inline-item, converse-bg .list-inline-item { + display: inline-block; +} +.conversejs .list-inline-item:not(:last-child), converse-bg .list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} +.conversejs .initialism, converse-bg .initialism { + font-size: 0.875em; + text-transform: uppercase; +} +.conversejs .blockquote, converse-bg .blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.conversejs .blockquote > :last-child, converse-bg .blockquote > :last-child { + margin-bottom: 0; +} +.conversejs .blockquote-footer, converse-bg .blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} +.conversejs .blockquote-footer::before, converse-bg .blockquote-footer::before { + content: "— "; +} +.conversejs .img-fluid, converse-bg .img-fluid { + max-width: 100%; + height: auto; +} +.conversejs .img-thumbnail, converse-bg .img-thumbnail { + padding: 0.25rem; + background-color: var(--converse-body-bg); + border: var(--converse-border-width) solid var(--converse-border-color); + border-radius: var(--converse-border-radius); + max-width: 100%; + height: auto; +} +.conversejs .figure, converse-bg .figure { + display: inline-block; +} +.conversejs .figure-img, converse-bg .figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} +.conversejs .figure-caption, converse-bg .figure-caption { + font-size: 0.875em; + color: var(--converse-secondary-color); +} +.conversejs .container, +.conversejs .container-fluid, +.conversejs .container-xxl, +.conversejs .container-xl, +.conversejs .container-lg, +.conversejs .container-md, +.conversejs .container-sm, converse-bg .container, +converse-bg .container-fluid, +converse-bg .container-xxl, +converse-bg .container-xl, +converse-bg .container-lg, +converse-bg .container-md, +converse-bg .container-sm { + --converse-gutter-x: 1.5rem; + --converse-gutter-y: 0; + width: 100%; + padding-right: calc(var(--converse-gutter-x) * 0.5); + padding-left: calc(var(--converse-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} +@media (min-width: 576px) { + .conversejs .container-sm, .conversejs .container, converse-bg .container-sm, converse-bg .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .conversejs .container-md, .conversejs .container-sm, .conversejs .container, converse-bg .container-md, converse-bg .container-sm, converse-bg .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .conversejs .container-lg, .conversejs .container-md, .conversejs .container-sm, .conversejs .container, converse-bg .container-lg, converse-bg .container-md, converse-bg .container-sm, converse-bg .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .conversejs .container-xl, .conversejs .container-lg, .conversejs .container-md, .conversejs .container-sm, .conversejs .container, converse-bg .container-xl, converse-bg .container-lg, converse-bg .container-md, converse-bg .container-sm, converse-bg .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .conversejs .container-xxl, .conversejs .container-xl, .conversejs .container-lg, .conversejs .container-md, .conversejs .container-sm, .conversejs .container, converse-bg .container-xxl, converse-bg .container-xl, converse-bg .container-lg, converse-bg .container-md, converse-bg .container-sm, converse-bg .container { + max-width: 1320px; + } +} +.conversejs :root, converse-bg :root { + --converse-breakpoint-xs: 0; + --converse-breakpoint-sm: 576px; + --converse-breakpoint-md: 768px; + --converse-breakpoint-lg: 992px; + --converse-breakpoint-xl: 1200px; + --converse-breakpoint-xxl: 1400px; +} +.conversejs .row, converse-bg .row { + --converse-gutter-x: 1.5rem; + --converse-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--converse-gutter-y)); + margin-right: calc(-0.5 * var(--converse-gutter-x)); + margin-left: calc(-0.5 * var(--converse-gutter-x)); +} +.conversejs .row > *, converse-bg .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--converse-gutter-x) * 0.5); + padding-left: calc(var(--converse-gutter-x) * 0.5); + margin-top: var(--converse-gutter-y); +} +.conversejs .col, converse-bg .col { + flex: 1 0 0%; +} +.conversejs .row-cols-auto > *, converse-bg .row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} +.conversejs .row-cols-1 > *, converse-bg .row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} +.conversejs .row-cols-2 > *, converse-bg .row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} +.conversejs .row-cols-3 > *, converse-bg .row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333333%; +} +.conversejs .row-cols-4 > *, converse-bg .row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} +.conversejs .row-cols-5 > *, converse-bg .row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} +.conversejs .row-cols-6 > *, converse-bg .row-cols-6 > * { + flex: 0 0 auto; + width: 16.66666667%; +} +.conversejs .col-auto, converse-bg .col-auto { + flex: 0 0 auto; + width: auto; +} +.conversejs .col-1, converse-bg .col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} +.conversejs .col-2, converse-bg .col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} +.conversejs .col-3, converse-bg .col-3 { + flex: 0 0 auto; + width: 25%; +} +.conversejs .col-4, converse-bg .col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} +.conversejs .col-5, converse-bg .col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} +.conversejs .col-6, converse-bg .col-6 { + flex: 0 0 auto; + width: 50%; +} +.conversejs .col-7, converse-bg .col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} +.conversejs .col-8, converse-bg .col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} +.conversejs .col-9, converse-bg .col-9 { + flex: 0 0 auto; + width: 75%; +} +.conversejs .col-10, converse-bg .col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} +.conversejs .col-11, converse-bg .col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} +.conversejs .col-12, converse-bg .col-12 { + flex: 0 0 auto; + width: 100%; +} +.conversejs .offset-1, converse-bg .offset-1 { + margin-left: 8.33333333%; +} +.conversejs .offset-2, converse-bg .offset-2 { + margin-left: 16.66666667%; +} +.conversejs .offset-3, converse-bg .offset-3 { + margin-left: 25%; +} +.conversejs .offset-4, converse-bg .offset-4 { + margin-left: 33.33333333%; +} +.conversejs .offset-5, converse-bg .offset-5 { + margin-left: 41.66666667%; +} +.conversejs .offset-6, converse-bg .offset-6 { + margin-left: 50%; +} +.conversejs .offset-7, converse-bg .offset-7 { + margin-left: 58.33333333%; +} +.conversejs .offset-8, converse-bg .offset-8 { + margin-left: 66.66666667%; +} +.conversejs .offset-9, converse-bg .offset-9 { + margin-left: 75%; +} +.conversejs .offset-10, converse-bg .offset-10 { + margin-left: 83.33333333%; +} +.conversejs .offset-11, converse-bg .offset-11 { + margin-left: 91.66666667%; +} +.conversejs .g-0, +.conversejs .gx-0, converse-bg .g-0, +converse-bg .gx-0 { + --converse-gutter-x: 0; +} +.conversejs .g-0, +.conversejs .gy-0, converse-bg .g-0, +converse-bg .gy-0 { + --converse-gutter-y: 0; +} +.conversejs .g-1, +.conversejs .gx-1, converse-bg .g-1, +converse-bg .gx-1 { + --converse-gutter-x: 0.25rem; +} +.conversejs .g-1, +.conversejs .gy-1, converse-bg .g-1, +converse-bg .gy-1 { + --converse-gutter-y: 0.25rem; +} +.conversejs .g-2, +.conversejs .gx-2, converse-bg .g-2, +converse-bg .gx-2 { + --converse-gutter-x: 0.5rem; +} +.conversejs .g-2, +.conversejs .gy-2, converse-bg .g-2, +converse-bg .gy-2 { + --converse-gutter-y: 0.5rem; +} +.conversejs .g-3, +.conversejs .gx-3, converse-bg .g-3, +converse-bg .gx-3 { + --converse-gutter-x: 1rem; +} +.conversejs .g-3, +.conversejs .gy-3, converse-bg .g-3, +converse-bg .gy-3 { + --converse-gutter-y: 1rem; +} +.conversejs .g-4, +.conversejs .gx-4, converse-bg .g-4, +converse-bg .gx-4 { + --converse-gutter-x: 1.5rem; +} +.conversejs .g-4, +.conversejs .gy-4, converse-bg .g-4, +converse-bg .gy-4 { + --converse-gutter-y: 1.5rem; +} +.conversejs .g-5, +.conversejs .gx-5, converse-bg .g-5, +converse-bg .gx-5 { + --converse-gutter-x: 3rem; +} +.conversejs .g-5, +.conversejs .gy-5, converse-bg .g-5, +converse-bg .gy-5 { + --converse-gutter-y: 3rem; +} +@media (min-width: 576px) { + .conversejs .col-sm, converse-bg .col-sm { + flex: 1 0 0%; + } + .conversejs .row-cols-sm-auto > *, converse-bg .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .conversejs .row-cols-sm-1 > *, converse-bg .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .conversejs .row-cols-sm-2 > *, converse-bg .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .conversejs .row-cols-sm-3 > *, converse-bg .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .row-cols-sm-4 > *, converse-bg .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .conversejs .row-cols-sm-5 > *, converse-bg .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .conversejs .row-cols-sm-6 > *, converse-bg .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-sm-auto, converse-bg .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .conversejs .col-sm-1, converse-bg .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .conversejs .col-sm-2, converse-bg .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-sm-3, converse-bg .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .conversejs .col-sm-4, converse-bg .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .col-sm-5, converse-bg .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .conversejs .col-sm-6, converse-bg .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .conversejs .col-sm-7, converse-bg .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .conversejs .col-sm-8, converse-bg .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .conversejs .col-sm-9, converse-bg .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .conversejs .col-sm-10, converse-bg .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .conversejs .col-sm-11, converse-bg .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .conversejs .col-sm-12, converse-bg .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .conversejs .offset-sm-0, converse-bg .offset-sm-0 { + margin-left: 0; + } + .conversejs .offset-sm-1, converse-bg .offset-sm-1 { + margin-left: 8.33333333%; + } + .conversejs .offset-sm-2, converse-bg .offset-sm-2 { + margin-left: 16.66666667%; + } + .conversejs .offset-sm-3, converse-bg .offset-sm-3 { + margin-left: 25%; + } + .conversejs .offset-sm-4, converse-bg .offset-sm-4 { + margin-left: 33.33333333%; + } + .conversejs .offset-sm-5, converse-bg .offset-sm-5 { + margin-left: 41.66666667%; + } + .conversejs .offset-sm-6, converse-bg .offset-sm-6 { + margin-left: 50%; + } + .conversejs .offset-sm-7, converse-bg .offset-sm-7 { + margin-left: 58.33333333%; + } + .conversejs .offset-sm-8, converse-bg .offset-sm-8 { + margin-left: 66.66666667%; + } + .conversejs .offset-sm-9, converse-bg .offset-sm-9 { + margin-left: 75%; + } + .conversejs .offset-sm-10, converse-bg .offset-sm-10 { + margin-left: 83.33333333%; + } + .conversejs .offset-sm-11, converse-bg .offset-sm-11 { + margin-left: 91.66666667%; + } + .conversejs .g-sm-0, + .conversejs .gx-sm-0, converse-bg .g-sm-0, + converse-bg .gx-sm-0 { + --converse-gutter-x: 0; + } + .conversejs .g-sm-0, + .conversejs .gy-sm-0, converse-bg .g-sm-0, + converse-bg .gy-sm-0 { + --converse-gutter-y: 0; + } + .conversejs .g-sm-1, + .conversejs .gx-sm-1, converse-bg .g-sm-1, + converse-bg .gx-sm-1 { + --converse-gutter-x: 0.25rem; + } + .conversejs .g-sm-1, + .conversejs .gy-sm-1, converse-bg .g-sm-1, + converse-bg .gy-sm-1 { + --converse-gutter-y: 0.25rem; + } + .conversejs .g-sm-2, + .conversejs .gx-sm-2, converse-bg .g-sm-2, + converse-bg .gx-sm-2 { + --converse-gutter-x: 0.5rem; + } + .conversejs .g-sm-2, + .conversejs .gy-sm-2, converse-bg .g-sm-2, + converse-bg .gy-sm-2 { + --converse-gutter-y: 0.5rem; + } + .conversejs .g-sm-3, + .conversejs .gx-sm-3, converse-bg .g-sm-3, + converse-bg .gx-sm-3 { + --converse-gutter-x: 1rem; + } + .conversejs .g-sm-3, + .conversejs .gy-sm-3, converse-bg .g-sm-3, + converse-bg .gy-sm-3 { + --converse-gutter-y: 1rem; + } + .conversejs .g-sm-4, + .conversejs .gx-sm-4, converse-bg .g-sm-4, + converse-bg .gx-sm-4 { + --converse-gutter-x: 1.5rem; + } + .conversejs .g-sm-4, + .conversejs .gy-sm-4, converse-bg .g-sm-4, + converse-bg .gy-sm-4 { + --converse-gutter-y: 1.5rem; + } + .conversejs .g-sm-5, + .conversejs .gx-sm-5, converse-bg .g-sm-5, + converse-bg .gx-sm-5 { + --converse-gutter-x: 3rem; + } + .conversejs .g-sm-5, + .conversejs .gy-sm-5, converse-bg .g-sm-5, + converse-bg .gy-sm-5 { + --converse-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .conversejs .col-md, converse-bg .col-md { + flex: 1 0 0%; + } + .conversejs .row-cols-md-auto > *, converse-bg .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .conversejs .row-cols-md-1 > *, converse-bg .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .conversejs .row-cols-md-2 > *, converse-bg .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .conversejs .row-cols-md-3 > *, converse-bg .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .row-cols-md-4 > *, converse-bg .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .conversejs .row-cols-md-5 > *, converse-bg .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .conversejs .row-cols-md-6 > *, converse-bg .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-md-auto, converse-bg .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .conversejs .col-md-1, converse-bg .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .conversejs .col-md-2, converse-bg .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-md-3, converse-bg .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .conversejs .col-md-4, converse-bg .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .col-md-5, converse-bg .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .conversejs .col-md-6, converse-bg .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .conversejs .col-md-7, converse-bg .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .conversejs .col-md-8, converse-bg .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .conversejs .col-md-9, converse-bg .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .conversejs .col-md-10, converse-bg .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .conversejs .col-md-11, converse-bg .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .conversejs .col-md-12, converse-bg .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .conversejs .offset-md-0, converse-bg .offset-md-0 { + margin-left: 0; + } + .conversejs .offset-md-1, converse-bg .offset-md-1 { + margin-left: 8.33333333%; + } + .conversejs .offset-md-2, converse-bg .offset-md-2 { + margin-left: 16.66666667%; + } + .conversejs .offset-md-3, converse-bg .offset-md-3 { + margin-left: 25%; + } + .conversejs .offset-md-4, converse-bg .offset-md-4 { + margin-left: 33.33333333%; + } + .conversejs .offset-md-5, converse-bg .offset-md-5 { + margin-left: 41.66666667%; + } + .conversejs .offset-md-6, converse-bg .offset-md-6 { + margin-left: 50%; + } + .conversejs .offset-md-7, converse-bg .offset-md-7 { + margin-left: 58.33333333%; + } + .conversejs .offset-md-8, converse-bg .offset-md-8 { + margin-left: 66.66666667%; + } + .conversejs .offset-md-9, converse-bg .offset-md-9 { + margin-left: 75%; + } + .conversejs .offset-md-10, converse-bg .offset-md-10 { + margin-left: 83.33333333%; + } + .conversejs .offset-md-11, converse-bg .offset-md-11 { + margin-left: 91.66666667%; + } + .conversejs .g-md-0, + .conversejs .gx-md-0, converse-bg .g-md-0, + converse-bg .gx-md-0 { + --converse-gutter-x: 0; + } + .conversejs .g-md-0, + .conversejs .gy-md-0, converse-bg .g-md-0, + converse-bg .gy-md-0 { + --converse-gutter-y: 0; + } + .conversejs .g-md-1, + .conversejs .gx-md-1, converse-bg .g-md-1, + converse-bg .gx-md-1 { + --converse-gutter-x: 0.25rem; + } + .conversejs .g-md-1, + .conversejs .gy-md-1, converse-bg .g-md-1, + converse-bg .gy-md-1 { + --converse-gutter-y: 0.25rem; + } + .conversejs .g-md-2, + .conversejs .gx-md-2, converse-bg .g-md-2, + converse-bg .gx-md-2 { + --converse-gutter-x: 0.5rem; + } + .conversejs .g-md-2, + .conversejs .gy-md-2, converse-bg .g-md-2, + converse-bg .gy-md-2 { + --converse-gutter-y: 0.5rem; + } + .conversejs .g-md-3, + .conversejs .gx-md-3, converse-bg .g-md-3, + converse-bg .gx-md-3 { + --converse-gutter-x: 1rem; + } + .conversejs .g-md-3, + .conversejs .gy-md-3, converse-bg .g-md-3, + converse-bg .gy-md-3 { + --converse-gutter-y: 1rem; + } + .conversejs .g-md-4, + .conversejs .gx-md-4, converse-bg .g-md-4, + converse-bg .gx-md-4 { + --converse-gutter-x: 1.5rem; + } + .conversejs .g-md-4, + .conversejs .gy-md-4, converse-bg .g-md-4, + converse-bg .gy-md-4 { + --converse-gutter-y: 1.5rem; + } + .conversejs .g-md-5, + .conversejs .gx-md-5, converse-bg .g-md-5, + converse-bg .gx-md-5 { + --converse-gutter-x: 3rem; + } + .conversejs .g-md-5, + .conversejs .gy-md-5, converse-bg .g-md-5, + converse-bg .gy-md-5 { + --converse-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .conversejs .col-lg, converse-bg .col-lg { + flex: 1 0 0%; + } + .conversejs .row-cols-lg-auto > *, converse-bg .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .conversejs .row-cols-lg-1 > *, converse-bg .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .conversejs .row-cols-lg-2 > *, converse-bg .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .conversejs .row-cols-lg-3 > *, converse-bg .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .row-cols-lg-4 > *, converse-bg .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .conversejs .row-cols-lg-5 > *, converse-bg .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .conversejs .row-cols-lg-6 > *, converse-bg .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-lg-auto, converse-bg .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .conversejs .col-lg-1, converse-bg .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .conversejs .col-lg-2, converse-bg .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-lg-3, converse-bg .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .conversejs .col-lg-4, converse-bg .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .col-lg-5, converse-bg .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .conversejs .col-lg-6, converse-bg .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .conversejs .col-lg-7, converse-bg .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .conversejs .col-lg-8, converse-bg .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .conversejs .col-lg-9, converse-bg .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .conversejs .col-lg-10, converse-bg .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .conversejs .col-lg-11, converse-bg .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .conversejs .col-lg-12, converse-bg .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .conversejs .offset-lg-0, converse-bg .offset-lg-0 { + margin-left: 0; + } + .conversejs .offset-lg-1, converse-bg .offset-lg-1 { + margin-left: 8.33333333%; + } + .conversejs .offset-lg-2, converse-bg .offset-lg-2 { + margin-left: 16.66666667%; + } + .conversejs .offset-lg-3, converse-bg .offset-lg-3 { + margin-left: 25%; + } + .conversejs .offset-lg-4, converse-bg .offset-lg-4 { + margin-left: 33.33333333%; + } + .conversejs .offset-lg-5, converse-bg .offset-lg-5 { + margin-left: 41.66666667%; + } + .conversejs .offset-lg-6, converse-bg .offset-lg-6 { + margin-left: 50%; + } + .conversejs .offset-lg-7, converse-bg .offset-lg-7 { + margin-left: 58.33333333%; + } + .conversejs .offset-lg-8, converse-bg .offset-lg-8 { + margin-left: 66.66666667%; + } + .conversejs .offset-lg-9, converse-bg .offset-lg-9 { + margin-left: 75%; + } + .conversejs .offset-lg-10, converse-bg .offset-lg-10 { + margin-left: 83.33333333%; + } + .conversejs .offset-lg-11, converse-bg .offset-lg-11 { + margin-left: 91.66666667%; + } + .conversejs .g-lg-0, + .conversejs .gx-lg-0, converse-bg .g-lg-0, + converse-bg .gx-lg-0 { + --converse-gutter-x: 0; + } + .conversejs .g-lg-0, + .conversejs .gy-lg-0, converse-bg .g-lg-0, + converse-bg .gy-lg-0 { + --converse-gutter-y: 0; + } + .conversejs .g-lg-1, + .conversejs .gx-lg-1, converse-bg .g-lg-1, + converse-bg .gx-lg-1 { + --converse-gutter-x: 0.25rem; + } + .conversejs .g-lg-1, + .conversejs .gy-lg-1, converse-bg .g-lg-1, + converse-bg .gy-lg-1 { + --converse-gutter-y: 0.25rem; + } + .conversejs .g-lg-2, + .conversejs .gx-lg-2, converse-bg .g-lg-2, + converse-bg .gx-lg-2 { + --converse-gutter-x: 0.5rem; + } + .conversejs .g-lg-2, + .conversejs .gy-lg-2, converse-bg .g-lg-2, + converse-bg .gy-lg-2 { + --converse-gutter-y: 0.5rem; + } + .conversejs .g-lg-3, + .conversejs .gx-lg-3, converse-bg .g-lg-3, + converse-bg .gx-lg-3 { + --converse-gutter-x: 1rem; + } + .conversejs .g-lg-3, + .conversejs .gy-lg-3, converse-bg .g-lg-3, + converse-bg .gy-lg-3 { + --converse-gutter-y: 1rem; + } + .conversejs .g-lg-4, + .conversejs .gx-lg-4, converse-bg .g-lg-4, + converse-bg .gx-lg-4 { + --converse-gutter-x: 1.5rem; + } + .conversejs .g-lg-4, + .conversejs .gy-lg-4, converse-bg .g-lg-4, + converse-bg .gy-lg-4 { + --converse-gutter-y: 1.5rem; + } + .conversejs .g-lg-5, + .conversejs .gx-lg-5, converse-bg .g-lg-5, + converse-bg .gx-lg-5 { + --converse-gutter-x: 3rem; + } + .conversejs .g-lg-5, + .conversejs .gy-lg-5, converse-bg .g-lg-5, + converse-bg .gy-lg-5 { + --converse-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .conversejs .col-xl, converse-bg .col-xl { + flex: 1 0 0%; + } + .conversejs .row-cols-xl-auto > *, converse-bg .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .conversejs .row-cols-xl-1 > *, converse-bg .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .conversejs .row-cols-xl-2 > *, converse-bg .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .conversejs .row-cols-xl-3 > *, converse-bg .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .row-cols-xl-4 > *, converse-bg .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .conversejs .row-cols-xl-5 > *, converse-bg .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .conversejs .row-cols-xl-6 > *, converse-bg .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-xl-auto, converse-bg .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .conversejs .col-xl-1, converse-bg .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .conversejs .col-xl-2, converse-bg .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-xl-3, converse-bg .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .conversejs .col-xl-4, converse-bg .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .col-xl-5, converse-bg .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .conversejs .col-xl-6, converse-bg .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .conversejs .col-xl-7, converse-bg .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .conversejs .col-xl-8, converse-bg .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .conversejs .col-xl-9, converse-bg .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .conversejs .col-xl-10, converse-bg .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .conversejs .col-xl-11, converse-bg .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .conversejs .col-xl-12, converse-bg .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .conversejs .offset-xl-0, converse-bg .offset-xl-0 { + margin-left: 0; + } + .conversejs .offset-xl-1, converse-bg .offset-xl-1 { + margin-left: 8.33333333%; + } + .conversejs .offset-xl-2, converse-bg .offset-xl-2 { + margin-left: 16.66666667%; + } + .conversejs .offset-xl-3, converse-bg .offset-xl-3 { + margin-left: 25%; + } + .conversejs .offset-xl-4, converse-bg .offset-xl-4 { + margin-left: 33.33333333%; + } + .conversejs .offset-xl-5, converse-bg .offset-xl-5 { + margin-left: 41.66666667%; + } + .conversejs .offset-xl-6, converse-bg .offset-xl-6 { + margin-left: 50%; + } + .conversejs .offset-xl-7, converse-bg .offset-xl-7 { + margin-left: 58.33333333%; + } + .conversejs .offset-xl-8, converse-bg .offset-xl-8 { + margin-left: 66.66666667%; + } + .conversejs .offset-xl-9, converse-bg .offset-xl-9 { + margin-left: 75%; + } + .conversejs .offset-xl-10, converse-bg .offset-xl-10 { + margin-left: 83.33333333%; + } + .conversejs .offset-xl-11, converse-bg .offset-xl-11 { + margin-left: 91.66666667%; + } + .conversejs .g-xl-0, + .conversejs .gx-xl-0, converse-bg .g-xl-0, + converse-bg .gx-xl-0 { + --converse-gutter-x: 0; + } + .conversejs .g-xl-0, + .conversejs .gy-xl-0, converse-bg .g-xl-0, + converse-bg .gy-xl-0 { + --converse-gutter-y: 0; + } + .conversejs .g-xl-1, + .conversejs .gx-xl-1, converse-bg .g-xl-1, + converse-bg .gx-xl-1 { + --converse-gutter-x: 0.25rem; + } + .conversejs .g-xl-1, + .conversejs .gy-xl-1, converse-bg .g-xl-1, + converse-bg .gy-xl-1 { + --converse-gutter-y: 0.25rem; + } + .conversejs .g-xl-2, + .conversejs .gx-xl-2, converse-bg .g-xl-2, + converse-bg .gx-xl-2 { + --converse-gutter-x: 0.5rem; + } + .conversejs .g-xl-2, + .conversejs .gy-xl-2, converse-bg .g-xl-2, + converse-bg .gy-xl-2 { + --converse-gutter-y: 0.5rem; + } + .conversejs .g-xl-3, + .conversejs .gx-xl-3, converse-bg .g-xl-3, + converse-bg .gx-xl-3 { + --converse-gutter-x: 1rem; + } + .conversejs .g-xl-3, + .conversejs .gy-xl-3, converse-bg .g-xl-3, + converse-bg .gy-xl-3 { + --converse-gutter-y: 1rem; + } + .conversejs .g-xl-4, + .conversejs .gx-xl-4, converse-bg .g-xl-4, + converse-bg .gx-xl-4 { + --converse-gutter-x: 1.5rem; + } + .conversejs .g-xl-4, + .conversejs .gy-xl-4, converse-bg .g-xl-4, + converse-bg .gy-xl-4 { + --converse-gutter-y: 1.5rem; + } + .conversejs .g-xl-5, + .conversejs .gx-xl-5, converse-bg .g-xl-5, + converse-bg .gx-xl-5 { + --converse-gutter-x: 3rem; + } + .conversejs .g-xl-5, + .conversejs .gy-xl-5, converse-bg .g-xl-5, + converse-bg .gy-xl-5 { + --converse-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .conversejs .col-xxl, converse-bg .col-xxl { + flex: 1 0 0%; + } + .conversejs .row-cols-xxl-auto > *, converse-bg .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .conversejs .row-cols-xxl-1 > *, converse-bg .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .conversejs .row-cols-xxl-2 > *, converse-bg .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .conversejs .row-cols-xxl-3 > *, converse-bg .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .row-cols-xxl-4 > *, converse-bg .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .conversejs .row-cols-xxl-5 > *, converse-bg .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .conversejs .row-cols-xxl-6 > *, converse-bg .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-xxl-auto, converse-bg .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .conversejs .col-xxl-1, converse-bg .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .conversejs .col-xxl-2, converse-bg .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .conversejs .col-xxl-3, converse-bg .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .conversejs .col-xxl-4, converse-bg .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .conversejs .col-xxl-5, converse-bg .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .conversejs .col-xxl-6, converse-bg .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .conversejs .col-xxl-7, converse-bg .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .conversejs .col-xxl-8, converse-bg .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .conversejs .col-xxl-9, converse-bg .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .conversejs .col-xxl-10, converse-bg .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .conversejs .col-xxl-11, converse-bg .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .conversejs .col-xxl-12, converse-bg .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .conversejs .offset-xxl-0, converse-bg .offset-xxl-0 { + margin-left: 0; + } + .conversejs .offset-xxl-1, converse-bg .offset-xxl-1 { + margin-left: 8.33333333%; + } + .conversejs .offset-xxl-2, converse-bg .offset-xxl-2 { + margin-left: 16.66666667%; + } + .conversejs .offset-xxl-3, converse-bg .offset-xxl-3 { + margin-left: 25%; + } + .conversejs .offset-xxl-4, converse-bg .offset-xxl-4 { + margin-left: 33.33333333%; + } + .conversejs .offset-xxl-5, converse-bg .offset-xxl-5 { + margin-left: 41.66666667%; + } + .conversejs .offset-xxl-6, converse-bg .offset-xxl-6 { + margin-left: 50%; + } + .conversejs .offset-xxl-7, converse-bg .offset-xxl-7 { + margin-left: 58.33333333%; + } + .conversejs .offset-xxl-8, converse-bg .offset-xxl-8 { + margin-left: 66.66666667%; + } + .conversejs .offset-xxl-9, converse-bg .offset-xxl-9 { + margin-left: 75%; + } + .conversejs .offset-xxl-10, converse-bg .offset-xxl-10 { + margin-left: 83.33333333%; + } + .conversejs .offset-xxl-11, converse-bg .offset-xxl-11 { + margin-left: 91.66666667%; + } + .conversejs .g-xxl-0, + .conversejs .gx-xxl-0, converse-bg .g-xxl-0, + converse-bg .gx-xxl-0 { + --converse-gutter-x: 0; + } + .conversejs .g-xxl-0, + .conversejs .gy-xxl-0, converse-bg .g-xxl-0, + converse-bg .gy-xxl-0 { + --converse-gutter-y: 0; + } + .conversejs .g-xxl-1, + .conversejs .gx-xxl-1, converse-bg .g-xxl-1, + converse-bg .gx-xxl-1 { + --converse-gutter-x: 0.25rem; + } + .conversejs .g-xxl-1, + .conversejs .gy-xxl-1, converse-bg .g-xxl-1, + converse-bg .gy-xxl-1 { + --converse-gutter-y: 0.25rem; + } + .conversejs .g-xxl-2, + .conversejs .gx-xxl-2, converse-bg .g-xxl-2, + converse-bg .gx-xxl-2 { + --converse-gutter-x: 0.5rem; + } + .conversejs .g-xxl-2, + .conversejs .gy-xxl-2, converse-bg .g-xxl-2, + converse-bg .gy-xxl-2 { + --converse-gutter-y: 0.5rem; + } + .conversejs .g-xxl-3, + .conversejs .gx-xxl-3, converse-bg .g-xxl-3, + converse-bg .gx-xxl-3 { + --converse-gutter-x: 1rem; + } + .conversejs .g-xxl-3, + .conversejs .gy-xxl-3, converse-bg .g-xxl-3, + converse-bg .gy-xxl-3 { + --converse-gutter-y: 1rem; + } + .conversejs .g-xxl-4, + .conversejs .gx-xxl-4, converse-bg .g-xxl-4, + converse-bg .gx-xxl-4 { + --converse-gutter-x: 1.5rem; + } + .conversejs .g-xxl-4, + .conversejs .gy-xxl-4, converse-bg .g-xxl-4, + converse-bg .gy-xxl-4 { + --converse-gutter-y: 1.5rem; + } + .conversejs .g-xxl-5, + .conversejs .gx-xxl-5, converse-bg .g-xxl-5, + converse-bg .gx-xxl-5 { + --converse-gutter-x: 3rem; + } + .conversejs .g-xxl-5, + .conversejs .gy-xxl-5, converse-bg .g-xxl-5, + converse-bg .gy-xxl-5 { + --converse-gutter-y: 3rem; + } +} +.conversejs .table, converse-bg .table { + --converse-table-color-type: initial; + --converse-table-bg-type: initial; + --converse-table-color-state: initial; + --converse-table-bg-state: initial; + --converse-table-color: var(--converse-emphasis-color); + --converse-table-bg: var(--converse-body-bg); + --converse-table-border-color: var(--converse-border-color); + --converse-table-accent-bg: transparent; + --converse-table-striped-color: var(--converse-emphasis-color); + --converse-table-striped-bg: rgba(var(--converse-emphasis-color-rgb), 0.05); + --converse-table-active-color: var(--converse-emphasis-color); + --converse-table-active-bg: rgba(var(--converse-emphasis-color-rgb), 0.1); + --converse-table-hover-color: var(--converse-emphasis-color); + --converse-table-hover-bg: rgba(var(--converse-emphasis-color-rgb), 0.075); + width: 100%; + margin-bottom: 1rem; + vertical-align: top; + border-color: var(--converse-table-border-color); +} +.conversejs .table > :not(caption) > * > *, converse-bg .table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + color: var(--converse-table-color-state, var(--converse-table-color-type, var(--converse-table-color))); + background-color: var(--converse-table-bg); + border-bottom-width: var(--converse-border-width); + box-shadow: inset 0 0 0 9999px var(--converse-table-bg-state, var(--converse-table-bg-type, var(--converse-table-accent-bg))); +} +.conversejs .table > tbody, converse-bg .table > tbody { + vertical-align: inherit; +} +.conversejs .table > thead, converse-bg .table > thead { + vertical-align: bottom; +} +.conversejs .table-group-divider, converse-bg .table-group-divider { + border-top: calc(var(--converse-border-width) * 2) solid currentcolor; +} +.conversejs .caption-top, converse-bg .caption-top { + caption-side: top; +} +.conversejs .table-sm > :not(caption) > * > *, converse-bg .table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} +.conversejs .table-bordered > :not(caption) > *, converse-bg .table-bordered > :not(caption) > * { + border-width: var(--converse-border-width) 0; +} +.conversejs .table-bordered > :not(caption) > * > *, converse-bg .table-bordered > :not(caption) > * > * { + border-width: 0 var(--converse-border-width); +} +.conversejs .table-borderless > :not(caption) > * > *, converse-bg .table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} +.conversejs .table-borderless > :not(:first-child), converse-bg .table-borderless > :not(:first-child) { + border-top-width: 0; +} +.conversejs .table-striped > tbody > tr:nth-of-type(odd) > *, converse-bg .table-striped > tbody > tr:nth-of-type(odd) > * { + --converse-table-color-type: var(--converse-table-striped-color); + --converse-table-bg-type: var(--converse-table-striped-bg); +} +.conversejs .table-striped-columns > :not(caption) > tr > :nth-child(even), converse-bg .table-striped-columns > :not(caption) > tr > :nth-child(even) { + --converse-table-color-type: var(--converse-table-striped-color); + --converse-table-bg-type: var(--converse-table-striped-bg); +} +.conversejs .table-active, converse-bg .table-active { + --converse-table-color-state: var(--converse-table-active-color); + --converse-table-bg-state: var(--converse-table-active-bg); +} +.conversejs .table-hover > tbody > tr:hover > *, converse-bg .table-hover > tbody > tr:hover > * { + --converse-table-color-state: var(--converse-table-hover-color); + --converse-table-bg-state: var(--converse-table-hover-bg); +} +.conversejs .table-primary, converse-bg .table-primary { + --converse-table-color: #000; + --converse-table-bg: #cfe2ff; + --converse-table-border-color: #a6b5cc; + --converse-table-striped-bg: #c5d7f2; + --converse-table-striped-color: #000; + --converse-table-active-bg: #bacbe6; + --converse-table-active-color: #000; + --converse-table-hover-bg: #bfd1ec; + --converse-table-hover-color: #000; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-secondary, converse-bg .table-secondary { + --converse-table-color: #000; + --converse-table-bg: #e2e3e5; + --converse-table-border-color: #b5b6b7; + --converse-table-striped-bg: #d7d8da; + --converse-table-striped-color: #000; + --converse-table-active-bg: #cbccce; + --converse-table-active-color: #000; + --converse-table-hover-bg: #d1d2d4; + --converse-table-hover-color: #000; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-success, converse-bg .table-success { + --converse-table-color: #000; + --converse-table-bg: #d1e7dd; + --converse-table-border-color: #a7b9b1; + --converse-table-striped-bg: #c7dbd2; + --converse-table-striped-color: #000; + --converse-table-active-bg: #bcd0c7; + --converse-table-active-color: #000; + --converse-table-hover-bg: #c1d6cc; + --converse-table-hover-color: #000; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-info, converse-bg .table-info { + --converse-table-color: #000; + --converse-table-bg: #cff4fc; + --converse-table-border-color: #a6c3ca; + --converse-table-striped-bg: #c5e8ef; + --converse-table-striped-color: #000; + --converse-table-active-bg: #badce3; + --converse-table-active-color: #000; + --converse-table-hover-bg: #bfe2e9; + --converse-table-hover-color: #000; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-warning, converse-bg .table-warning { + --converse-table-color: #000; + --converse-table-bg: #fff3cd; + --converse-table-border-color: #ccc2a4; + --converse-table-striped-bg: #f2e7c3; + --converse-table-striped-color: #000; + --converse-table-active-bg: #e6dbb9; + --converse-table-active-color: #000; + --converse-table-hover-bg: #ece1be; + --converse-table-hover-color: #000; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-danger, converse-bg .table-danger { + --converse-table-color: #000; + --converse-table-bg: #f8d7da; + --converse-table-border-color: #c6acae; + --converse-table-striped-bg: #eccccf; + --converse-table-striped-color: #000; + --converse-table-active-bg: #dfc2c4; + --converse-table-active-color: #000; + --converse-table-hover-bg: #e5c7ca; + --converse-table-hover-color: #000; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-light, converse-bg .table-light { + --converse-table-color: #000; + --converse-table-bg: #f8f9fa; + --converse-table-border-color: #c6c7c8; + --converse-table-striped-bg: #ecedee; + --converse-table-striped-color: #000; + --converse-table-active-bg: #dfe0e1; + --converse-table-active-color: #000; + --converse-table-hover-bg: #e5e6e7; + --converse-table-hover-color: #000; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-dark, converse-bg .table-dark { + --converse-table-color: #fff; + --converse-table-bg: #212529; + --converse-table-border-color: #4d5154; + --converse-table-striped-bg: #2c3034; + --converse-table-striped-color: #fff; + --converse-table-active-bg: #373b3e; + --converse-table-active-color: #fff; + --converse-table-hover-bg: #323539; + --converse-table-hover-color: #fff; + color: var(--converse-table-color); + border-color: var(--converse-table-border-color); +} +.conversejs .table-responsive, converse-bg .table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +@media (max-width: 575.98px) { + .conversejs .table-responsive-sm, converse-bg .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .conversejs .table-responsive-md, converse-bg .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .conversejs .table-responsive-lg, converse-bg .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .conversejs .table-responsive-xl, converse-bg .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .conversejs .table-responsive-xxl, converse-bg .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.conversejs .form-label, converse-bg .form-label { + margin-bottom: 0.5rem; +} +.conversejs .col-form-label, converse-bg .col-form-label { + padding-top: calc(0.375rem + var(--converse-border-width)); + padding-bottom: calc(0.375rem + var(--converse-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} +.conversejs .col-form-label-lg, converse-bg .col-form-label-lg { + padding-top: calc(0.5rem + var(--converse-border-width)); + padding-bottom: calc(0.5rem + var(--converse-border-width)); + font-size: 1.25rem; +} +.conversejs .col-form-label-sm, converse-bg .col-form-label-sm { + padding-top: calc(0.25rem + var(--converse-border-width)); + padding-bottom: calc(0.25rem + var(--converse-border-width)); + font-size: 0.875rem; +} +.conversejs .form-text, converse-bg .form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--converse-secondary-color); +} +.conversejs .form-control, converse-bg .form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--converse-body-color); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: var(--converse-body-bg); + background-clip: padding-box; + border: var(--converse-border-width) solid var(--converse-border-color); + border-radius: var(--converse-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .form-control, converse-bg .form-control { + transition: none; + } +} +.conversejs .form-control[type=file], converse-bg .form-control[type=file] { + overflow: hidden; +} +.conversejs .form-control[type=file]:not(:disabled):not([readonly]), converse-bg .form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} +.conversejs .form-control:focus, converse-bg .form-control:focus { + color: var(--converse-body-color); + background-color: var(--converse-body-bg); + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.conversejs .form-control::-webkit-date-and-time-value, converse-bg .form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; +} +.conversejs .form-control::-webkit-datetime-edit, converse-bg .form-control::-webkit-datetime-edit { + display: block; + padding: 0; +} +.conversejs .form-control::-moz-placeholder, converse-bg .form-control::-moz-placeholder { + color: var(--converse-secondary-color); + opacity: 1; +} +.conversejs .form-control::placeholder, converse-bg .form-control::placeholder { + color: var(--converse-secondary-color); + opacity: 1; +} +.conversejs .form-control:disabled, converse-bg .form-control:disabled { + background-color: var(--converse-secondary-bg); + opacity: 1; +} +.conversejs .form-control::file-selector-button, converse-bg .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + margin-inline-end: 0.75rem; + color: var(--converse-body-color); + background-color: var(--converse-tertiary-bg); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--converse-border-width); + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .form-control::file-selector-button, converse-bg .form-control::file-selector-button { + transition: none; + } +} +.conversejs .form-control:hover:not(:disabled):not([readonly])::file-selector-button, converse-bg .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--converse-secondary-bg); +} +.conversejs .form-control-plaintext, converse-bg .form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: var(--converse-body-color); + background-color: transparent; + border: solid transparent; + border-width: var(--converse-border-width) 0; +} +.conversejs .form-control-plaintext:focus, converse-bg .form-control-plaintext:focus { + outline: 0; +} +.conversejs .form-control-plaintext.form-control-sm, .conversejs .form-control-plaintext.form-control-lg, converse-bg .form-control-plaintext.form-control-sm, converse-bg .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} +.conversejs .form-control-sm, converse-bg .form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--converse-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--converse-border-radius-sm); +} +.conversejs .form-control-sm::file-selector-button, converse-bg .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + margin-inline-end: 0.5rem; +} +.conversejs .form-control-lg, converse-bg .form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--converse-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--converse-border-radius-lg); +} +.conversejs .form-control-lg::file-selector-button, converse-bg .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + margin-inline-end: 1rem; +} +.conversejs textarea.form-control, converse-bg textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--converse-border-width) * 2)); +} +.conversejs textarea.form-control-sm, converse-bg textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--converse-border-width) * 2)); +} +.conversejs textarea.form-control-lg, converse-bg textarea.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--converse-border-width) * 2)); +} +.conversejs .form-control-color, converse-bg .form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + calc(var(--converse-border-width) * 2)); + padding: 0.375rem; +} +.conversejs .form-control-color:not(:disabled):not([readonly]), converse-bg .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.conversejs .form-control-color::-moz-color-swatch, converse-bg .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: var(--converse-border-radius); +} +.conversejs .form-control-color::-webkit-color-swatch, converse-bg .form-control-color::-webkit-color-swatch { + border: 0 !important; + border-radius: var(--converse-border-radius); +} +.conversejs .form-control-color.form-control-sm, converse-bg .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + calc(var(--converse-border-width) * 2)); +} +.conversejs .form-control-color.form-control-lg, converse-bg .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + calc(var(--converse-border-width) * 2)); +} +.conversejs .form-select, converse-bg .form-select { + --converse-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--converse-body-color); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: var(--converse-body-bg); + background-image: var(--converse-form-select-bg-img), var(--converse-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: var(--converse-border-width) solid var(--converse-border-color); + border-radius: var(--converse-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .form-select, converse-bg .form-select { + transition: none; + } +} +.conversejs .form-select:focus, converse-bg .form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.conversejs .form-select[multiple], .conversejs .form-select[size]:not([size="1"]), converse-bg .form-select[multiple], converse-bg .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} +.conversejs .form-select:disabled, converse-bg .form-select:disabled { + background-color: var(--converse-secondary-bg); +} +.conversejs .form-select:-moz-focusring, converse-bg .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--converse-body-color); +} +.conversejs .form-select-sm, converse-bg .form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--converse-border-radius-sm); +} +.conversejs .form-select-lg, converse-bg .form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: var(--converse-border-radius-lg); +} +.conversejs [data-bs-theme=dark] .form-select, converse-bg [data-bs-theme=dark] .form-select { + --converse-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); +} +.conversejs .form-check, converse-bg .form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.conversejs .form-check .form-check-input, converse-bg .form-check .form-check-input { + float: left; + margin-left: -1.5em; +} +.conversejs .form-check-reverse, converse-bg .form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} +.conversejs .form-check-reverse .form-check-input, converse-bg .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} +.conversejs .form-check-input, converse-bg .form-check-input { + --converse-form-check-bg: var(--converse-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: var(--converse-form-check-bg); + background-image: var(--converse-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--converse-border-width) solid var(--converse-border-color); + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} +.conversejs .form-check-input[type=checkbox], converse-bg .form-check-input[type=checkbox] { + border-radius: 0.25em; +} +.conversejs .form-check-input[type=radio], converse-bg .form-check-input[type=radio] { + border-radius: 50%; +} +.conversejs .form-check-input:active, converse-bg .form-check-input:active { + filter: brightness(90%); +} +.conversejs .form-check-input:focus, converse-bg .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.conversejs .form-check-input:checked, converse-bg .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} +.conversejs .form-check-input:checked[type=checkbox], converse-bg .form-check-input:checked[type=checkbox] { + --converse-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} +.conversejs .form-check-input:checked[type=radio], converse-bg .form-check-input:checked[type=radio] { + --converse-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.conversejs .form-check-input[type=checkbox]:indeterminate, converse-bg .form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + --converse-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.conversejs .form-check-input:disabled, converse-bg .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} +.conversejs .form-check-input[disabled] ~ .form-check-label, .conversejs .form-check-input:disabled ~ .form-check-label, converse-bg .form-check-input[disabled] ~ .form-check-label, converse-bg .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} +.conversejs .form-switch, converse-bg .form-switch { + padding-left: 2.5em; +} +.conversejs .form-switch .form-check-input, converse-bg .form-switch .form-check-input { + --converse-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + width: 2em; + margin-left: -2.5em; + background-image: var(--converse-form-switch-bg); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .form-switch .form-check-input, converse-bg .form-switch .form-check-input { + transition: none; + } +} +.conversejs .form-switch .form-check-input:focus, converse-bg .form-switch .form-check-input:focus { + --converse-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} +.conversejs .form-switch .form-check-input:checked, converse-bg .form-switch .form-check-input:checked { + background-position: right center; + --converse-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} +.conversejs .form-switch.form-check-reverse, converse-bg .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} +.conversejs .form-switch.form-check-reverse .form-check-input, converse-bg .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} +.conversejs .form-check-inline, converse-bg .form-check-inline { + display: inline-block; + margin-right: 1rem; +} +.conversejs .btn-check, converse-bg .btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.conversejs .btn-check[disabled] + .btn, .conversejs .btn-check:disabled + .btn, converse-bg .btn-check[disabled] + .btn, converse-bg .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} +.conversejs [data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus), converse-bg [data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) { + --converse-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); +} +.conversejs .form-range, converse-bg .form-range { + width: 100%; + height: 1.5rem; + padding: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: transparent; +} +.conversejs .form-range:focus, converse-bg .form-range:focus { + outline: 0; +} +.conversejs .form-range:focus::-webkit-slider-thumb, converse-bg .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.conversejs .form-range:focus::-moz-range-thumb, converse-bg .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.conversejs .form-range::-moz-focus-outer, converse-bg .form-range::-moz-focus-outer { + border: 0; +} +.conversejs .form-range::-webkit-slider-thumb, converse-bg .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + -webkit-appearance: none; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .form-range::-webkit-slider-thumb, converse-bg .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} +.conversejs .form-range::-webkit-slider-thumb:active, converse-bg .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} +.conversejs .form-range::-webkit-slider-runnable-track, converse-bg .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--converse-secondary-bg); + border-color: transparent; + border-radius: 1rem; +} +.conversejs .form-range::-moz-range-thumb, converse-bg .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + -moz-appearance: none; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .form-range::-moz-range-thumb, converse-bg .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} +.conversejs .form-range::-moz-range-thumb:active, converse-bg .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} +.conversejs .form-range::-moz-range-track, converse-bg .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--converse-secondary-bg); + border-color: transparent; + border-radius: 1rem; +} +.conversejs .form-range:disabled, converse-bg .form-range:disabled { + pointer-events: none; +} +.conversejs .form-range:disabled::-webkit-slider-thumb, converse-bg .form-range:disabled::-webkit-slider-thumb { + background-color: var(--converse-secondary-color); +} +.conversejs .form-range:disabled::-moz-range-thumb, converse-bg .form-range:disabled::-moz-range-thumb { + background-color: var(--converse-secondary-color); +} +.conversejs .form-floating, converse-bg .form-floating { + position: relative; +} +.conversejs .form-floating > .form-control, +.conversejs .form-floating > .form-control-plaintext, +.conversejs .form-floating > .form-select, converse-bg .form-floating > .form-control, +converse-bg .form-floating > .form-control-plaintext, +converse-bg .form-floating > .form-select { + height: calc(3.5rem + calc(var(--converse-border-width) * 2)); + min-height: calc(3.5rem + calc(var(--converse-border-width) * 2)); + line-height: 1.25; +} +.conversejs .form-floating > label, converse-bg .form-floating > label { + position: absolute; + top: 0; + left: 0; + z-index: 2; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: var(--converse-border-width) solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .form-floating > label, converse-bg .form-floating > label { + transition: none; + } +} +.conversejs .form-floating > .form-control, +.conversejs .form-floating > .form-control-plaintext, converse-bg .form-floating > .form-control, +converse-bg .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} +.conversejs .form-floating > .form-control::-moz-placeholder, .conversejs .form-floating > .form-control-plaintext::-moz-placeholder, converse-bg .form-floating > .form-control::-moz-placeholder, converse-bg .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} +.conversejs .form-floating > .form-control::placeholder, +.conversejs .form-floating > .form-control-plaintext::placeholder, converse-bg .form-floating > .form-control::placeholder, +converse-bg .form-floating > .form-control-plaintext::placeholder { + color: transparent; +} +.conversejs .form-floating > .form-control:not(:-moz-placeholder-shown), .conversejs .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown), converse-bg .form-floating > .form-control:not(:-moz-placeholder-shown), converse-bg .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.conversejs .form-floating > .form-control:focus, .conversejs .form-floating > .form-control:not(:placeholder-shown), +.conversejs .form-floating > .form-control-plaintext:focus, +.conversejs .form-floating > .form-control-plaintext:not(:placeholder-shown), converse-bg .form-floating > .form-control:focus, converse-bg .form-floating > .form-control:not(:placeholder-shown), +converse-bg .form-floating > .form-control-plaintext:focus, +converse-bg .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.conversejs .form-floating > .form-control:-webkit-autofill, +.conversejs .form-floating > .form-control-plaintext:-webkit-autofill, converse-bg .form-floating > .form-control:-webkit-autofill, +converse-bg .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.conversejs .form-floating > .form-select, converse-bg .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.conversejs .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label, converse-bg .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + color: rgba(var(--converse-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.conversejs .form-floating > .form-control:focus ~ label, +.conversejs .form-floating > .form-control:not(:placeholder-shown) ~ label, +.conversejs .form-floating > .form-control-plaintext ~ label, +.conversejs .form-floating > .form-select ~ label, converse-bg .form-floating > .form-control:focus ~ label, +converse-bg .form-floating > .form-control:not(:placeholder-shown) ~ label, +converse-bg .form-floating > .form-control-plaintext ~ label, +converse-bg .form-floating > .form-select ~ label { + color: rgba(var(--converse-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.conversejs .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after, converse-bg .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--converse-body-bg); + border-radius: var(--converse-border-radius); +} +.conversejs .form-floating > .form-control:focus ~ label::after, +.conversejs .form-floating > .form-control:not(:placeholder-shown) ~ label::after, +.conversejs .form-floating > .form-control-plaintext ~ label::after, +.conversejs .form-floating > .form-select ~ label::after, converse-bg .form-floating > .form-control:focus ~ label::after, +converse-bg .form-floating > .form-control:not(:placeholder-shown) ~ label::after, +converse-bg .form-floating > .form-control-plaintext ~ label::after, +converse-bg .form-floating > .form-select ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--converse-body-bg); + border-radius: var(--converse-border-radius); +} +.conversejs .form-floating > .form-control:-webkit-autofill ~ label, converse-bg .form-floating > .form-control:-webkit-autofill ~ label { + color: rgba(var(--converse-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.conversejs .form-floating > .form-control-plaintext ~ label, converse-bg .form-floating > .form-control-plaintext ~ label { + border-width: var(--converse-border-width) 0; +} +.conversejs .form-floating > :disabled ~ label, +.conversejs .form-floating > .form-control:disabled ~ label, converse-bg .form-floating > :disabled ~ label, +converse-bg .form-floating > .form-control:disabled ~ label { + color: #6c757d; +} +.conversejs .form-floating > :disabled ~ label::after, +.conversejs .form-floating > .form-control:disabled ~ label::after, converse-bg .form-floating > :disabled ~ label::after, +converse-bg .form-floating > .form-control:disabled ~ label::after { + background-color: var(--converse-secondary-bg); +} +.conversejs .input-group, converse-bg .input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.conversejs .input-group > .form-control, +.conversejs .input-group > .form-select, +.conversejs .input-group > .form-floating, converse-bg .input-group > .form-control, +converse-bg .input-group > .form-select, +converse-bg .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.conversejs .input-group > .form-control:focus, +.conversejs .input-group > .form-select:focus, +.conversejs .input-group > .form-floating:focus-within, converse-bg .input-group > .form-control:focus, +converse-bg .input-group > .form-select:focus, +converse-bg .input-group > .form-floating:focus-within { + z-index: 5; +} +.conversejs .input-group .btn, converse-bg .input-group .btn { + position: relative; + z-index: 2; +} +.conversejs .input-group .btn:focus, converse-bg .input-group .btn:focus { + z-index: 5; +} +.conversejs .input-group-text, converse-bg .input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--converse-body-color); + text-align: center; + white-space: nowrap; + background-color: var(--converse-tertiary-bg); + border: var(--converse-border-width) solid var(--converse-border-color); + border-radius: var(--converse-border-radius); +} +.conversejs .input-group-lg > .form-control, +.conversejs .input-group-lg > .form-select, +.conversejs .input-group-lg > .input-group-text, +.conversejs .input-group-lg > .btn, converse-bg .input-group-lg > .form-control, +converse-bg .input-group-lg > .form-select, +converse-bg .input-group-lg > .input-group-text, +converse-bg .input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--converse-border-radius-lg); +} +.conversejs .input-group-sm > .form-control, +.conversejs .input-group-sm > .form-select, +.conversejs .input-group-sm > .input-group-text, +.conversejs .input-group-sm > .btn, converse-bg .input-group-sm > .form-control, +converse-bg .input-group-sm > .form-select, +converse-bg .input-group-sm > .input-group-text, +converse-bg .input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--converse-border-radius-sm); +} +.conversejs .input-group-lg > .form-select, +.conversejs .input-group-sm > .form-select, converse-bg .input-group-lg > .form-select, +converse-bg .input-group-sm > .form-select { + padding-right: 3rem; +} +.conversejs .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.conversejs .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), +.conversejs .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.conversejs .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select, converse-bg .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +converse-bg .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), +converse-bg .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +converse-bg .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.conversejs .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.conversejs .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), +.conversejs .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, +.conversejs .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select, converse-bg .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +converse-bg .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), +converse-bg .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, +converse-bg .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.conversejs .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback), converse-bg .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: calc(var(--converse-border-width) * -1); + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.conversejs .input-group > .form-floating:not(:first-child) > .form-control, +.conversejs .input-group > .form-floating:not(:first-child) > .form-select, converse-bg .input-group > .form-floating:not(:first-child) > .form-control, +converse-bg .input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.conversejs .valid-feedback, converse-bg .valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--converse-form-valid-color); +} +.conversejs .valid-tooltip, converse-bg .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--converse-success); + border-radius: var(--converse-border-radius); +} +.was-validated .conversejs:valid ~ .valid-feedback, +.was-validated .conversejs:valid ~ .valid-tooltip, .conversejs.is-valid ~ .valid-feedback, +.conversejs.is-valid ~ .valid-tooltip, .was-validated converse-bg:valid ~ .valid-feedback, +.was-validated converse-bg:valid ~ .valid-tooltip, converse-bg.is-valid ~ .valid-feedback, +converse-bg.is-valid ~ .valid-tooltip { + display: block; +} +.was-validated .conversejs .form-control:valid, .conversejs .form-control.is-valid, .was-validated converse-bg .form-control:valid, converse-bg .form-control.is-valid { + border-color: var(--converse-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.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(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .conversejs .form-control:valid:focus, .conversejs .form-control.is-valid:focus, .was-validated converse-bg .form-control:valid:focus, converse-bg .form-control.is-valid:focus { + border-color: var(--converse-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--converse-success-rgb), 0.25); +} +.was-validated .conversejs textarea.form-control:valid, .conversejs textarea.form-control.is-valid, .was-validated converse-bg textarea.form-control:valid, converse-bg textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} +.was-validated .conversejs .form-select:valid, .conversejs .form-select.is-valid, .was-validated converse-bg .form-select:valid, converse-bg .form-select.is-valid { + border-color: var(--converse-form-valid-border-color); +} +.was-validated .conversejs .form-select:valid:not([multiple]):not([size]), .was-validated .conversejs .form-select:valid:not([multiple])[size="1"], .conversejs .form-select.is-valid:not([multiple]):not([size]), .conversejs .form-select.is-valid:not([multiple])[size="1"], .was-validated converse-bg .form-select:valid:not([multiple]):not([size]), .was-validated converse-bg .form-select:valid:not([multiple])[size="1"], converse-bg .form-select.is-valid:not([multiple]):not([size]), converse-bg .form-select.is-valid:not([multiple])[size="1"] { + --converse-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.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"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .conversejs .form-select:valid:focus, .conversejs .form-select.is-valid:focus, .was-validated converse-bg .form-select:valid:focus, converse-bg .form-select.is-valid:focus { + border-color: var(--converse-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--converse-success-rgb), 0.25); +} +.was-validated .conversejs .form-control-color:valid, .conversejs .form-control-color.is-valid, .was-validated converse-bg .form-control-color:valid, converse-bg .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} +.was-validated .conversejs .form-check-input:valid, .conversejs .form-check-input.is-valid, .was-validated converse-bg .form-check-input:valid, converse-bg .form-check-input.is-valid { + border-color: var(--converse-form-valid-border-color); +} +.was-validated .conversejs .form-check-input:valid:checked, .conversejs .form-check-input.is-valid:checked, .was-validated converse-bg .form-check-input:valid:checked, converse-bg .form-check-input.is-valid:checked { + background-color: var(--converse-form-valid-color); +} +.was-validated .conversejs .form-check-input:valid:focus, .conversejs .form-check-input.is-valid:focus, .was-validated converse-bg .form-check-input:valid:focus, converse-bg .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--converse-success-rgb), 0.25); +} +.was-validated .conversejs .form-check-input:valid ~ .form-check-label, .conversejs .form-check-input.is-valid ~ .form-check-label, .was-validated converse-bg .form-check-input:valid ~ .form-check-label, converse-bg .form-check-input.is-valid ~ .form-check-label { + color: var(--converse-form-valid-color); +} +.conversejs .form-check-inline .form-check-input ~ .valid-feedback, converse-bg .form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} +.was-validated .conversejs .input-group > .form-control:not(:focus):valid, .conversejs .input-group > .form-control:not(:focus).is-valid, +.was-validated .conversejs .input-group > .form-select:not(:focus):valid, +.conversejs .input-group > .form-select:not(:focus).is-valid, +.was-validated .conversejs .input-group > .form-floating:not(:focus-within):valid, +.conversejs .input-group > .form-floating:not(:focus-within).is-valid, .was-validated converse-bg .input-group > .form-control:not(:focus):valid, converse-bg .input-group > .form-control:not(:focus).is-valid, +.was-validated converse-bg .input-group > .form-select:not(:focus):valid, +converse-bg .input-group > .form-select:not(:focus).is-valid, +.was-validated converse-bg .input-group > .form-floating:not(:focus-within):valid, +converse-bg .input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} +.conversejs .invalid-feedback, converse-bg .invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--converse-form-invalid-color); +} +.conversejs .invalid-tooltip, converse-bg .invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--converse-danger); + border-radius: var(--converse-border-radius); +} +.was-validated .conversejs:invalid ~ .invalid-feedback, +.was-validated .conversejs:invalid ~ .invalid-tooltip, .conversejs.is-invalid ~ .invalid-feedback, +.conversejs.is-invalid ~ .invalid-tooltip, .was-validated converse-bg:invalid ~ .invalid-feedback, +.was-validated converse-bg:invalid ~ .invalid-tooltip, converse-bg.is-invalid ~ .invalid-feedback, +converse-bg.is-invalid ~ .invalid-tooltip { + display: block; +} +.was-validated .conversejs .form-control:invalid, .conversejs .form-control.is-invalid, .was-validated converse-bg .form-control:invalid, converse-bg .form-control.is-invalid { + border-color: var(--converse-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%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(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .conversejs .form-control:invalid:focus, .conversejs .form-control.is-invalid:focus, .was-validated converse-bg .form-control:invalid:focus, converse-bg .form-control.is-invalid:focus { + border-color: var(--converse-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--converse-danger-rgb), 0.25); +} +.was-validated .conversejs textarea.form-control:invalid, .conversejs textarea.form-control.is-invalid, .was-validated converse-bg textarea.form-control:invalid, converse-bg textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} +.was-validated .conversejs .form-select:invalid, .conversejs .form-select.is-invalid, .was-validated converse-bg .form-select:invalid, converse-bg .form-select.is-invalid { + border-color: var(--converse-form-invalid-border-color); +} +.was-validated .conversejs .form-select:invalid:not([multiple]):not([size]), .was-validated .conversejs .form-select:invalid:not([multiple])[size="1"], .conversejs .form-select.is-invalid:not([multiple]):not([size]), .conversejs .form-select.is-invalid:not([multiple])[size="1"], .was-validated converse-bg .form-select:invalid:not([multiple]):not([size]), .was-validated converse-bg .form-select:invalid:not([multiple])[size="1"], converse-bg .form-select.is-invalid:not([multiple]):not([size]), converse-bg .form-select.is-invalid:not([multiple])[size="1"] { + --converse-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%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"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .conversejs .form-select:invalid:focus, .conversejs .form-select.is-invalid:focus, .was-validated converse-bg .form-select:invalid:focus, converse-bg .form-select.is-invalid:focus { + border-color: var(--converse-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--converse-danger-rgb), 0.25); +} +.was-validated .conversejs .form-control-color:invalid, .conversejs .form-control-color.is-invalid, .was-validated converse-bg .form-control-color:invalid, converse-bg .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} +.was-validated .conversejs .form-check-input:invalid, .conversejs .form-check-input.is-invalid, .was-validated converse-bg .form-check-input:invalid, converse-bg .form-check-input.is-invalid { + border-color: var(--converse-form-invalid-border-color); +} +.was-validated .conversejs .form-check-input:invalid:checked, .conversejs .form-check-input.is-invalid:checked, .was-validated converse-bg .form-check-input:invalid:checked, converse-bg .form-check-input.is-invalid:checked { + background-color: var(--converse-form-invalid-color); +} +.was-validated .conversejs .form-check-input:invalid:focus, .conversejs .form-check-input.is-invalid:focus, .was-validated converse-bg .form-check-input:invalid:focus, converse-bg .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--converse-danger-rgb), 0.25); +} +.was-validated .conversejs .form-check-input:invalid ~ .form-check-label, .conversejs .form-check-input.is-invalid ~ .form-check-label, .was-validated converse-bg .form-check-input:invalid ~ .form-check-label, converse-bg .form-check-input.is-invalid ~ .form-check-label { + color: var(--converse-form-invalid-color); +} +.conversejs .form-check-inline .form-check-input ~ .invalid-feedback, converse-bg .form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} +.was-validated .conversejs .input-group > .form-control:not(:focus):invalid, .conversejs .input-group > .form-control:not(:focus).is-invalid, +.was-validated .conversejs .input-group > .form-select:not(:focus):invalid, +.conversejs .input-group > .form-select:not(:focus).is-invalid, +.was-validated .conversejs .input-group > .form-floating:not(:focus-within):invalid, +.conversejs .input-group > .form-floating:not(:focus-within).is-invalid, .was-validated converse-bg .input-group > .form-control:not(:focus):invalid, converse-bg .input-group > .form-control:not(:focus).is-invalid, +.was-validated converse-bg .input-group > .form-select:not(:focus):invalid, +converse-bg .input-group > .form-select:not(:focus).is-invalid, +.was-validated converse-bg .input-group > .form-floating:not(:focus-within):invalid, +converse-bg .input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} +.conversejs .btn, converse-bg .btn { + --converse-btn-padding-x: 0.75rem; + --converse-btn-padding-y: 0.375rem; + --converse-btn-font-family: ; + --converse-btn-font-size: 1rem; + --converse-btn-font-weight: 400; + --converse-btn-line-height: 1.5; + --converse-btn-color: var(--converse-body-color); + --converse-btn-bg: transparent; + --converse-btn-border-width: var(--converse-border-width); + --converse-btn-border-color: transparent; + --converse-btn-border-radius: var(--converse-border-radius); + --converse-btn-hover-border-color: transparent; + --converse-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --converse-btn-disabled-opacity: 0.65; + --converse-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--converse-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--converse-btn-padding-y) var(--converse-btn-padding-x); + font-family: var(--converse-btn-font-family); + font-size: var(--converse-btn-font-size); + font-weight: var(--converse-btn-font-weight); + line-height: var(--converse-btn-line-height); + color: var(--converse-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--converse-btn-border-width) solid var(--converse-btn-border-color); + border-radius: var(--converse-btn-border-radius); + background-color: var(--converse-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .btn, converse-bg .btn { + transition: none; + } +} +.conversejs .btn:hover, converse-bg .btn:hover { + color: var(--converse-btn-hover-color); + background-color: var(--converse-btn-hover-bg); + border-color: var(--converse-btn-hover-border-color); +} +.btn-check + .conversejs .btn:hover, .btn-check + converse-bg .btn:hover { + color: var(--converse-btn-color); + background-color: var(--converse-btn-bg); + border-color: var(--converse-btn-border-color); +} +.conversejs .btn:focus-visible, converse-bg .btn:focus-visible { + color: var(--converse-btn-hover-color); + background-color: var(--converse-btn-hover-bg); + border-color: var(--converse-btn-hover-border-color); + outline: 0; + box-shadow: var(--converse-btn-focus-box-shadow); +} +.btn-check:focus-visible + .conversejs .btn, .btn-check:focus-visible + converse-bg .btn { + border-color: var(--converse-btn-hover-border-color); + outline: 0; + box-shadow: var(--converse-btn-focus-box-shadow); +} +.btn-check:checked + .conversejs .btn, :not(.btn-check) + .conversejs .btn:active, .conversejs .btn:first-child:active, .conversejs .btn.active, .conversejs .btn.show, .btn-check:checked + converse-bg .btn, :not(.btn-check) + converse-bg .btn:active, converse-bg .btn:first-child:active, converse-bg .btn.active, converse-bg .btn.show { + color: var(--converse-btn-active-color); + background-color: var(--converse-btn-active-bg); + border-color: var(--converse-btn-active-border-color); +} +.btn-check:checked + .conversejs .btn:focus-visible, :not(.btn-check) + .conversejs .btn:active:focus-visible, .conversejs .btn:first-child:active:focus-visible, .conversejs .btn.active:focus-visible, .conversejs .btn.show:focus-visible, .btn-check:checked + converse-bg .btn:focus-visible, :not(.btn-check) + converse-bg .btn:active:focus-visible, converse-bg .btn:first-child:active:focus-visible, converse-bg .btn.active:focus-visible, converse-bg .btn.show:focus-visible { + box-shadow: var(--converse-btn-focus-box-shadow); +} +.btn-check:checked:focus-visible + .conversejs .btn, .btn-check:checked:focus-visible + converse-bg .btn { + box-shadow: var(--converse-btn-focus-box-shadow); +} +.conversejs .btn:disabled, .conversejs .btn.disabled, fieldset:disabled .conversejs .btn, converse-bg .btn:disabled, converse-bg .btn.disabled, fieldset:disabled converse-bg .btn { + color: var(--converse-btn-disabled-color); + pointer-events: none; + background-color: var(--converse-btn-disabled-bg); + border-color: var(--converse-btn-disabled-border-color); + opacity: var(--converse-btn-disabled-opacity); +} +.conversejs .btn-primary, converse-bg .btn-primary { + --converse-btn-color: #fff; + --converse-btn-bg: #0d6efd; + --converse-btn-border-color: #0d6efd; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #0b5ed7; + --converse-btn-hover-border-color: #0a58ca; + --converse-btn-focus-shadow-rgb: 49, 132, 253; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #0a58ca; + --converse-btn-active-border-color: #0a53be; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #fff; + --converse-btn-disabled-bg: #0d6efd; + --converse-btn-disabled-border-color: #0d6efd; +} +.conversejs .btn-secondary, converse-bg .btn-secondary { + --converse-btn-color: #fff; + --converse-btn-bg: #6c757d; + --converse-btn-border-color: #6c757d; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #5c636a; + --converse-btn-hover-border-color: #565e64; + --converse-btn-focus-shadow-rgb: 130, 138, 145; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #565e64; + --converse-btn-active-border-color: #51585e; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #fff; + --converse-btn-disabled-bg: #6c757d; + --converse-btn-disabled-border-color: #6c757d; +} +.conversejs .btn-success, converse-bg .btn-success { + --converse-btn-color: #fff; + --converse-btn-bg: #198754; + --converse-btn-border-color: #198754; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #157347; + --converse-btn-hover-border-color: #146c43; + --converse-btn-focus-shadow-rgb: 60, 153, 110; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #146c43; + --converse-btn-active-border-color: #13653f; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #fff; + --converse-btn-disabled-bg: #198754; + --converse-btn-disabled-border-color: #198754; +} +.conversejs .btn-info, converse-bg .btn-info { + --converse-btn-color: #000; + --converse-btn-bg: #0dcaf0; + --converse-btn-border-color: #0dcaf0; + --converse-btn-hover-color: #000; + --converse-btn-hover-bg: #31d2f2; + --converse-btn-hover-border-color: #25cff2; + --converse-btn-focus-shadow-rgb: 11, 172, 204; + --converse-btn-active-color: #000; + --converse-btn-active-bg: #3dd5f3; + --converse-btn-active-border-color: #25cff2; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #000; + --converse-btn-disabled-bg: #0dcaf0; + --converse-btn-disabled-border-color: #0dcaf0; +} +.conversejs .btn-warning, converse-bg .btn-warning { + --converse-btn-color: #000; + --converse-btn-bg: #ffc107; + --converse-btn-border-color: #ffc107; + --converse-btn-hover-color: #000; + --converse-btn-hover-bg: #ffca2c; + --converse-btn-hover-border-color: #ffc720; + --converse-btn-focus-shadow-rgb: 217, 164, 6; + --converse-btn-active-color: #000; + --converse-btn-active-bg: #ffcd39; + --converse-btn-active-border-color: #ffc720; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #000; + --converse-btn-disabled-bg: #ffc107; + --converse-btn-disabled-border-color: #ffc107; +} +.conversejs .btn-danger, converse-bg .btn-danger { + --converse-btn-color: #fff; + --converse-btn-bg: #dc3545; + --converse-btn-border-color: #dc3545; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #bb2d3b; + --converse-btn-hover-border-color: #b02a37; + --converse-btn-focus-shadow-rgb: 225, 83, 97; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #b02a37; + --converse-btn-active-border-color: #a52834; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #fff; + --converse-btn-disabled-bg: #dc3545; + --converse-btn-disabled-border-color: #dc3545; +} +.conversejs .btn-light, converse-bg .btn-light { + --converse-btn-color: #000; + --converse-btn-bg: #f8f9fa; + --converse-btn-border-color: #f8f9fa; + --converse-btn-hover-color: #000; + --converse-btn-hover-bg: #d3d4d5; + --converse-btn-hover-border-color: #c6c7c8; + --converse-btn-focus-shadow-rgb: 211, 212, 213; + --converse-btn-active-color: #000; + --converse-btn-active-bg: #c6c7c8; + --converse-btn-active-border-color: #babbbc; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #000; + --converse-btn-disabled-bg: #f8f9fa; + --converse-btn-disabled-border-color: #f8f9fa; +} +.conversejs .btn-dark, converse-bg .btn-dark { + --converse-btn-color: #fff; + --converse-btn-bg: #212529; + --converse-btn-border-color: #212529; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #424649; + --converse-btn-hover-border-color: #373b3e; + --converse-btn-focus-shadow-rgb: 66, 70, 73; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #4d5154; + --converse-btn-active-border-color: #373b3e; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #fff; + --converse-btn-disabled-bg: #212529; + --converse-btn-disabled-border-color: #212529; +} +.conversejs .btn-outline-primary, converse-bg .btn-outline-primary { + --converse-btn-color: #0d6efd; + --converse-btn-border-color: #0d6efd; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #0d6efd; + --converse-btn-hover-border-color: #0d6efd; + --converse-btn-focus-shadow-rgb: 13, 110, 253; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #0d6efd; + --converse-btn-active-border-color: #0d6efd; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #0d6efd; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #0d6efd; + --converse-gradient: none; +} +.conversejs .btn-outline-secondary, converse-bg .btn-outline-secondary { + --converse-btn-color: #6c757d; + --converse-btn-border-color: #6c757d; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #6c757d; + --converse-btn-hover-border-color: #6c757d; + --converse-btn-focus-shadow-rgb: 108, 117, 125; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #6c757d; + --converse-btn-active-border-color: #6c757d; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #6c757d; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #6c757d; + --converse-gradient: none; +} +.conversejs .btn-outline-success, converse-bg .btn-outline-success { + --converse-btn-color: #198754; + --converse-btn-border-color: #198754; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #198754; + --converse-btn-hover-border-color: #198754; + --converse-btn-focus-shadow-rgb: 25, 135, 84; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #198754; + --converse-btn-active-border-color: #198754; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #198754; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #198754; + --converse-gradient: none; +} +.conversejs .btn-outline-info, converse-bg .btn-outline-info { + --converse-btn-color: #0dcaf0; + --converse-btn-border-color: #0dcaf0; + --converse-btn-hover-color: #000; + --converse-btn-hover-bg: #0dcaf0; + --converse-btn-hover-border-color: #0dcaf0; + --converse-btn-focus-shadow-rgb: 13, 202, 240; + --converse-btn-active-color: #000; + --converse-btn-active-bg: #0dcaf0; + --converse-btn-active-border-color: #0dcaf0; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #0dcaf0; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #0dcaf0; + --converse-gradient: none; +} +.conversejs .btn-outline-warning, converse-bg .btn-outline-warning { + --converse-btn-color: #ffc107; + --converse-btn-border-color: #ffc107; + --converse-btn-hover-color: #000; + --converse-btn-hover-bg: #ffc107; + --converse-btn-hover-border-color: #ffc107; + --converse-btn-focus-shadow-rgb: 255, 193, 7; + --converse-btn-active-color: #000; + --converse-btn-active-bg: #ffc107; + --converse-btn-active-border-color: #ffc107; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #ffc107; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #ffc107; + --converse-gradient: none; +} +.conversejs .btn-outline-danger, converse-bg .btn-outline-danger { + --converse-btn-color: #dc3545; + --converse-btn-border-color: #dc3545; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #dc3545; + --converse-btn-hover-border-color: #dc3545; + --converse-btn-focus-shadow-rgb: 220, 53, 69; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #dc3545; + --converse-btn-active-border-color: #dc3545; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #dc3545; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #dc3545; + --converse-gradient: none; +} +.conversejs .btn-outline-light, converse-bg .btn-outline-light { + --converse-btn-color: #f8f9fa; + --converse-btn-border-color: #f8f9fa; + --converse-btn-hover-color: #000; + --converse-btn-hover-bg: #f8f9fa; + --converse-btn-hover-border-color: #f8f9fa; + --converse-btn-focus-shadow-rgb: 248, 249, 250; + --converse-btn-active-color: #000; + --converse-btn-active-bg: #f8f9fa; + --converse-btn-active-border-color: #f8f9fa; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #f8f9fa; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #f8f9fa; + --converse-gradient: none; +} +.conversejs .btn-outline-dark, converse-bg .btn-outline-dark { + --converse-btn-color: #212529; + --converse-btn-border-color: #212529; + --converse-btn-hover-color: #fff; + --converse-btn-hover-bg: #212529; + --converse-btn-hover-border-color: #212529; + --converse-btn-focus-shadow-rgb: 33, 37, 41; + --converse-btn-active-color: #fff; + --converse-btn-active-bg: #212529; + --converse-btn-active-border-color: #212529; + --converse-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --converse-btn-disabled-color: #212529; + --converse-btn-disabled-bg: transparent; + --converse-btn-disabled-border-color: #212529; + --converse-gradient: none; +} +.conversejs .btn-link, converse-bg .btn-link { + --converse-btn-font-weight: 400; + --converse-btn-color: var(--converse-link-color); + --converse-btn-bg: transparent; + --converse-btn-border-color: transparent; + --converse-btn-hover-color: var(--converse-link-hover-color); + --converse-btn-hover-border-color: transparent; + --converse-btn-active-color: var(--converse-link-hover-color); + --converse-btn-active-border-color: transparent; + --converse-btn-disabled-color: #6c757d; + --converse-btn-disabled-border-color: transparent; + --converse-btn-box-shadow: 0 0 0 #000; + --converse-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} +.conversejs .btn-link:focus-visible, converse-bg .btn-link:focus-visible { + color: var(--converse-btn-color); +} +.conversejs .btn-link:hover, converse-bg .btn-link:hover { + color: var(--converse-btn-hover-color); +} +.conversejs .btn-lg, .conversejs .btn-group-lg > .btn, converse-bg .btn-lg, converse-bg .btn-group-lg > .btn { + --converse-btn-padding-y: 0.5rem; + --converse-btn-padding-x: 1rem; + --converse-btn-font-size: 1.25rem; + --converse-btn-border-radius: var(--converse-border-radius-lg); +} +.conversejs .btn-sm, .conversejs .btn-group-sm > .btn, converse-bg .btn-sm, converse-bg .btn-group-sm > .btn { + --converse-btn-padding-y: 0.25rem; + --converse-btn-padding-x: 0.5rem; + --converse-btn-font-size: 0.875rem; + --converse-btn-border-radius: var(--converse-border-radius-sm); +} +.conversejs .fade, converse-bg .fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .fade, converse-bg .fade { + transition: none; + } +} +.conversejs .fade:not(.show), converse-bg .fade:not(.show) { + opacity: 0; +} +.conversejs .collapse:not(.show), converse-bg .collapse:not(.show) { + display: none; +} +.conversejs .collapsing, converse-bg .collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .collapsing, converse-bg .collapsing { + transition: none; + } +} +.conversejs .collapsing.collapse-horizontal, converse-bg .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .collapsing.collapse-horizontal, converse-bg .collapsing.collapse-horizontal { + transition: none; + } +} +.conversejs .dropup, +.conversejs .dropend, +.conversejs .dropdown, +.conversejs .dropstart, +.conversejs .dropup-center, +.conversejs .dropdown-center, converse-bg .dropup, +converse-bg .dropend, +converse-bg .dropdown, +converse-bg .dropstart, +converse-bg .dropup-center, +converse-bg .dropdown-center { + position: relative; +} +.conversejs .dropdown-toggle, converse-bg .dropdown-toggle { + white-space: nowrap; +} +.conversejs .dropdown-toggle::after, converse-bg .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.conversejs .dropdown-toggle:empty::after, converse-bg .dropdown-toggle:empty::after { + margin-left: 0; +} +.conversejs .dropdown-menu, converse-bg .dropdown-menu { + --converse-dropdown-zindex: 1000; + --converse-dropdown-min-width: 10rem; + --converse-dropdown-padding-x: 0; + --converse-dropdown-padding-y: 0.5rem; + --converse-dropdown-spacer: 0.125rem; + --converse-dropdown-font-size: 1rem; + --converse-dropdown-color: var(--converse-body-color); + --converse-dropdown-bg: var(--converse-body-bg); + --converse-dropdown-border-color: var(--converse-border-color-translucent); + --converse-dropdown-border-radius: var(--converse-border-radius); + --converse-dropdown-border-width: var(--converse-border-width); + --converse-dropdown-inner-border-radius: calc(var(--converse-border-radius) - var(--converse-border-width)); + --converse-dropdown-divider-bg: var(--converse-border-color-translucent); + --converse-dropdown-divider-margin-y: 0.5rem; + --converse-dropdown-box-shadow: var(--converse-box-shadow); + --converse-dropdown-link-color: var(--converse-body-color); + --converse-dropdown-link-hover-color: var(--converse-body-color); + --converse-dropdown-link-hover-bg: var(--converse-tertiary-bg); + --converse-dropdown-link-active-color: #fff; + --converse-dropdown-link-active-bg: #0d6efd; + --converse-dropdown-link-disabled-color: var(--converse-tertiary-color); + --converse-dropdown-item-padding-x: 1rem; + --converse-dropdown-item-padding-y: 0.25rem; + --converse-dropdown-header-color: #6c757d; + --converse-dropdown-header-padding-x: 1rem; + --converse-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--converse-dropdown-zindex); + display: none; + min-width: var(--converse-dropdown-min-width); + padding: var(--converse-dropdown-padding-y) var(--converse-dropdown-padding-x); + margin: 0; + font-size: var(--converse-dropdown-font-size); + color: var(--converse-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--converse-dropdown-bg); + background-clip: padding-box; + border: var(--converse-dropdown-border-width) solid var(--converse-dropdown-border-color); + border-radius: var(--converse-dropdown-border-radius); +} +.conversejs .dropdown-menu[data-bs-popper], converse-bg .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--converse-dropdown-spacer); +} +.conversejs .dropdown-menu-start, converse-bg .dropdown-menu-start { + --bs-position: start; +} +.conversejs .dropdown-menu-start[data-bs-popper], converse-bg .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} +.conversejs .dropdown-menu-end, converse-bg .dropdown-menu-end { + --bs-position: end; +} +.conversejs .dropdown-menu-end[data-bs-popper], converse-bg .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} +@media (min-width: 576px) { + .conversejs .dropdown-menu-sm-start, converse-bg .dropdown-menu-sm-start { + --bs-position: start; + } + .conversejs .dropdown-menu-sm-start[data-bs-popper], converse-bg .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .conversejs .dropdown-menu-sm-end, converse-bg .dropdown-menu-sm-end { + --bs-position: end; + } + .conversejs .dropdown-menu-sm-end[data-bs-popper], converse-bg .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .conversejs .dropdown-menu-md-start, converse-bg .dropdown-menu-md-start { + --bs-position: start; + } + .conversejs .dropdown-menu-md-start[data-bs-popper], converse-bg .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .conversejs .dropdown-menu-md-end, converse-bg .dropdown-menu-md-end { + --bs-position: end; + } + .conversejs .dropdown-menu-md-end[data-bs-popper], converse-bg .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .conversejs .dropdown-menu-lg-start, converse-bg .dropdown-menu-lg-start { + --bs-position: start; + } + .conversejs .dropdown-menu-lg-start[data-bs-popper], converse-bg .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .conversejs .dropdown-menu-lg-end, converse-bg .dropdown-menu-lg-end { + --bs-position: end; + } + .conversejs .dropdown-menu-lg-end[data-bs-popper], converse-bg .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .conversejs .dropdown-menu-xl-start, converse-bg .dropdown-menu-xl-start { + --bs-position: start; + } + .conversejs .dropdown-menu-xl-start[data-bs-popper], converse-bg .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .conversejs .dropdown-menu-xl-end, converse-bg .dropdown-menu-xl-end { + --bs-position: end; + } + .conversejs .dropdown-menu-xl-end[data-bs-popper], converse-bg .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .conversejs .dropdown-menu-xxl-start, converse-bg .dropdown-menu-xxl-start { + --bs-position: start; + } + .conversejs .dropdown-menu-xxl-start[data-bs-popper], converse-bg .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .conversejs .dropdown-menu-xxl-end, converse-bg .dropdown-menu-xxl-end { + --bs-position: end; + } + .conversejs .dropdown-menu-xxl-end[data-bs-popper], converse-bg .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.conversejs .dropup .dropdown-menu[data-bs-popper], converse-bg .dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--converse-dropdown-spacer); +} +.conversejs .dropup .dropdown-toggle::after, converse-bg .dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.conversejs .dropup .dropdown-toggle:empty::after, converse-bg .dropup .dropdown-toggle:empty::after { + margin-left: 0; +} +.conversejs .dropend .dropdown-menu[data-bs-popper], converse-bg .dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--converse-dropdown-spacer); +} +.conversejs .dropend .dropdown-toggle::after, converse-bg .dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.conversejs .dropend .dropdown-toggle:empty::after, converse-bg .dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.conversejs .dropend .dropdown-toggle::after, converse-bg .dropend .dropdown-toggle::after { + vertical-align: 0; +} +.conversejs .dropstart .dropdown-menu[data-bs-popper], converse-bg .dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--converse-dropdown-spacer); +} +.conversejs .dropstart .dropdown-toggle::after, converse-bg .dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.conversejs .dropstart .dropdown-toggle::after, converse-bg .dropstart .dropdown-toggle::after { + display: none; +} +.conversejs .dropstart .dropdown-toggle::before, converse-bg .dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.conversejs .dropstart .dropdown-toggle:empty::after, converse-bg .dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.conversejs .dropstart .dropdown-toggle::before, converse-bg .dropstart .dropdown-toggle::before { + vertical-align: 0; +} +.conversejs .dropdown-divider, converse-bg .dropdown-divider { + height: 0; + margin: var(--converse-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--converse-dropdown-divider-bg); + opacity: 1; +} +.conversejs .dropdown-item, converse-bg .dropdown-item { + display: block; + width: 100%; + padding: var(--converse-dropdown-item-padding-y) var(--converse-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--converse-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--converse-dropdown-item-border-radius, 0); +} +.conversejs .dropdown-item:hover, .conversejs .dropdown-item:focus, converse-bg .dropdown-item:hover, converse-bg .dropdown-item:focus { + color: var(--converse-dropdown-link-hover-color); + background-color: var(--converse-dropdown-link-hover-bg); +} +.conversejs .dropdown-item.active, .conversejs .dropdown-item:active, converse-bg .dropdown-item.active, converse-bg .dropdown-item:active { + color: var(--converse-dropdown-link-active-color); + text-decoration: none; + background-color: var(--converse-dropdown-link-active-bg); +} +.conversejs .dropdown-item.disabled, .conversejs .dropdown-item:disabled, converse-bg .dropdown-item.disabled, converse-bg .dropdown-item:disabled { + color: var(--converse-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} +.conversejs .dropdown-menu.show, converse-bg .dropdown-menu.show { + display: block; +} +.conversejs .dropdown-header, converse-bg .dropdown-header { + display: block; + padding: var(--converse-dropdown-header-padding-y) var(--converse-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--converse-dropdown-header-color); + white-space: nowrap; +} +.conversejs .dropdown-item-text, converse-bg .dropdown-item-text { + display: block; + padding: var(--converse-dropdown-item-padding-y) var(--converse-dropdown-item-padding-x); + color: var(--converse-dropdown-link-color); +} +.conversejs .dropdown-menu-dark, converse-bg .dropdown-menu-dark { + --converse-dropdown-color: #dee2e6; + --converse-dropdown-bg: #343a40; + --converse-dropdown-border-color: var(--converse-border-color-translucent); + --converse-dropdown-box-shadow: ; + --converse-dropdown-link-color: #dee2e6; + --converse-dropdown-link-hover-color: #fff; + --converse-dropdown-divider-bg: var(--converse-border-color-translucent); + --converse-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --converse-dropdown-link-active-color: #fff; + --converse-dropdown-link-active-bg: #0d6efd; + --converse-dropdown-link-disabled-color: #adb5bd; + --converse-dropdown-header-color: #adb5bd; +} +.conversejs .btn-group, +.conversejs .btn-group-vertical, converse-bg .btn-group, +converse-bg .btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.conversejs .btn-group > .btn, +.conversejs .btn-group-vertical > .btn, converse-bg .btn-group > .btn, +converse-bg .btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.conversejs .btn-group > .btn-check:checked + .btn, +.conversejs .btn-group > .btn-check:focus + .btn, +.conversejs .btn-group > .btn:hover, +.conversejs .btn-group > .btn:focus, +.conversejs .btn-group > .btn:active, +.conversejs .btn-group > .btn.active, +.conversejs .btn-group-vertical > .btn-check:checked + .btn, +.conversejs .btn-group-vertical > .btn-check:focus + .btn, +.conversejs .btn-group-vertical > .btn:hover, +.conversejs .btn-group-vertical > .btn:focus, +.conversejs .btn-group-vertical > .btn:active, +.conversejs .btn-group-vertical > .btn.active, converse-bg .btn-group > .btn-check:checked + .btn, +converse-bg .btn-group > .btn-check:focus + .btn, +converse-bg .btn-group > .btn:hover, +converse-bg .btn-group > .btn:focus, +converse-bg .btn-group > .btn:active, +converse-bg .btn-group > .btn.active, +converse-bg .btn-group-vertical > .btn-check:checked + .btn, +converse-bg .btn-group-vertical > .btn-check:focus + .btn, +converse-bg .btn-group-vertical > .btn:hover, +converse-bg .btn-group-vertical > .btn:focus, +converse-bg .btn-group-vertical > .btn:active, +converse-bg .btn-group-vertical > .btn.active { + z-index: 1; +} +.conversejs .btn-toolbar, converse-bg .btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.conversejs .btn-toolbar .input-group, converse-bg .btn-toolbar .input-group { + width: auto; +} +.conversejs .btn-group, converse-bg .btn-group { + border-radius: var(--converse-border-radius); +} +.conversejs .btn-group > :not(.btn-check:first-child) + .btn, +.conversejs .btn-group > .btn-group:not(:first-child), converse-bg .btn-group > :not(.btn-check:first-child) + .btn, +converse-bg .btn-group > .btn-group:not(:first-child) { + margin-left: calc(var(--converse-border-width) * -1); +} +.conversejs .btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.conversejs .btn-group > .btn.dropdown-toggle-split:first-child, +.conversejs .btn-group > .btn-group:not(:last-child) > .btn, converse-bg .btn-group > .btn:not(:last-child):not(.dropdown-toggle), +converse-bg .btn-group > .btn.dropdown-toggle-split:first-child, +converse-bg .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.conversejs .btn-group > .btn:nth-child(n+3), +.conversejs .btn-group > :not(.btn-check) + .btn, +.conversejs .btn-group > .btn-group:not(:first-child) > .btn, converse-bg .btn-group > .btn:nth-child(n+3), +converse-bg .btn-group > :not(.btn-check) + .btn, +converse-bg .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.conversejs .dropdown-toggle-split, converse-bg .dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.conversejs .dropdown-toggle-split::after, .dropup .conversejs .dropdown-toggle-split::after, .dropend .conversejs .dropdown-toggle-split::after, converse-bg .dropdown-toggle-split::after, .dropup converse-bg .dropdown-toggle-split::after, .dropend converse-bg .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .conversejs .dropdown-toggle-split::before, .dropstart converse-bg .dropdown-toggle-split::before { + margin-right: 0; +} +.conversejs .btn-sm + .dropdown-toggle-split, .conversejs .btn-group-sm > .btn + .dropdown-toggle-split, converse-bg .btn-sm + .dropdown-toggle-split, converse-bg .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} +.conversejs .btn-lg + .dropdown-toggle-split, .conversejs .btn-group-lg > .btn + .dropdown-toggle-split, converse-bg .btn-lg + .dropdown-toggle-split, converse-bg .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} +.conversejs .btn-group-vertical, converse-bg .btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.conversejs .btn-group-vertical > .btn, +.conversejs .btn-group-vertical > .btn-group, converse-bg .btn-group-vertical > .btn, +converse-bg .btn-group-vertical > .btn-group { + width: 100%; +} +.conversejs .btn-group-vertical > .btn:not(:first-child), +.conversejs .btn-group-vertical > .btn-group:not(:first-child), converse-bg .btn-group-vertical > .btn:not(:first-child), +converse-bg .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: calc(var(--converse-border-width) * -1); +} +.conversejs .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.conversejs .btn-group-vertical > .btn-group:not(:last-child) > .btn, converse-bg .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +converse-bg .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.conversejs .btn-group-vertical > .btn ~ .btn, +.conversejs .btn-group-vertical > .btn-group:not(:first-child) > .btn, converse-bg .btn-group-vertical > .btn ~ .btn, +converse-bg .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.conversejs .nav, converse-bg .nav { + --converse-nav-link-padding-x: 1rem; + --converse-nav-link-padding-y: 0.5rem; + --converse-nav-link-font-weight: ; + --converse-nav-link-color: var(--converse-link-color); + --converse-nav-link-hover-color: var(--converse-link-hover-color); + --converse-nav-link-disabled-color: var(--converse-secondary-color); + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.conversejs .nav-link, converse-bg .nav-link { + display: block; + padding: var(--converse-nav-link-padding-y) var(--converse-nav-link-padding-x); + font-size: var(--converse-nav-link-font-size); + font-weight: var(--converse-nav-link-font-weight); + color: var(--converse-nav-link-color); + text-decoration: none; + background: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .nav-link, converse-bg .nav-link { + transition: none; + } +} +.conversejs .nav-link:hover, .conversejs .nav-link:focus, converse-bg .nav-link:hover, converse-bg .nav-link:focus { + color: var(--converse-nav-link-hover-color); +} +.conversejs .nav-link:focus-visible, converse-bg .nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.conversejs .nav-link.disabled, .conversejs .nav-link:disabled, converse-bg .nav-link.disabled, converse-bg .nav-link:disabled { + color: var(--converse-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} +.conversejs .nav-tabs, converse-bg .nav-tabs { + --converse-nav-tabs-border-width: var(--converse-border-width); + --converse-nav-tabs-border-color: var(--converse-border-color); + --converse-nav-tabs-border-radius: var(--converse-border-radius); + --converse-nav-tabs-link-hover-border-color: var(--converse-secondary-bg) var(--converse-secondary-bg) var(--converse-border-color); + --converse-nav-tabs-link-active-color: var(--converse-emphasis-color); + --converse-nav-tabs-link-active-bg: var(--converse-body-bg); + --converse-nav-tabs-link-active-border-color: var(--converse-border-color) var(--converse-border-color) var(--converse-body-bg); + border-bottom: var(--converse-nav-tabs-border-width) solid var(--converse-nav-tabs-border-color); +} +.conversejs .nav-tabs .nav-link, converse-bg .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--converse-nav-tabs-border-width)); + border: var(--converse-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--converse-nav-tabs-border-radius); + border-top-right-radius: var(--converse-nav-tabs-border-radius); +} +.conversejs .nav-tabs .nav-link:hover, .conversejs .nav-tabs .nav-link:focus, converse-bg .nav-tabs .nav-link:hover, converse-bg .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--converse-nav-tabs-link-hover-border-color); +} +.conversejs .nav-tabs .nav-link.active, +.conversejs .nav-tabs .nav-item.show .nav-link, converse-bg .nav-tabs .nav-link.active, +converse-bg .nav-tabs .nav-item.show .nav-link { + color: var(--converse-nav-tabs-link-active-color); + background-color: var(--converse-nav-tabs-link-active-bg); + border-color: var(--converse-nav-tabs-link-active-border-color); +} +.conversejs .nav-tabs .dropdown-menu, converse-bg .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--converse-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.conversejs .nav-pills, converse-bg .nav-pills { + --converse-nav-pills-border-radius: var(--converse-border-radius); + --converse-nav-pills-link-active-color: #fff; + --converse-nav-pills-link-active-bg: #0d6efd; +} +.conversejs .nav-pills .nav-link, converse-bg .nav-pills .nav-link { + border-radius: var(--converse-nav-pills-border-radius); +} +.conversejs .nav-pills .nav-link.active, +.conversejs .nav-pills .show > .nav-link, converse-bg .nav-pills .nav-link.active, +converse-bg .nav-pills .show > .nav-link { + color: var(--converse-nav-pills-link-active-color); + background-color: var(--converse-nav-pills-link-active-bg); +} +.conversejs .nav-underline, converse-bg .nav-underline { + --converse-nav-underline-gap: 1rem; + --converse-nav-underline-border-width: 0.125rem; + --converse-nav-underline-link-active-color: var(--converse-emphasis-color); + gap: var(--converse-nav-underline-gap); +} +.conversejs .nav-underline .nav-link, converse-bg .nav-underline .nav-link { + padding-right: 0; + padding-left: 0; + border-bottom: var(--converse-nav-underline-border-width) solid transparent; +} +.conversejs .nav-underline .nav-link:hover, .conversejs .nav-underline .nav-link:focus, converse-bg .nav-underline .nav-link:hover, converse-bg .nav-underline .nav-link:focus { + border-bottom-color: currentcolor; +} +.conversejs .nav-underline .nav-link.active, +.conversejs .nav-underline .show > .nav-link, converse-bg .nav-underline .nav-link.active, +converse-bg .nav-underline .show > .nav-link { + font-weight: 700; + color: var(--converse-nav-underline-link-active-color); + border-bottom-color: currentcolor; +} +.conversejs .nav-fill > .nav-link, +.conversejs .nav-fill .nav-item, converse-bg .nav-fill > .nav-link, +converse-bg .nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} +.conversejs .nav-justified > .nav-link, +.conversejs .nav-justified .nav-item, converse-bg .nav-justified > .nav-link, +converse-bg .nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} +.conversejs .nav-fill .nav-item .nav-link, +.conversejs .nav-justified .nav-item .nav-link, converse-bg .nav-fill .nav-item .nav-link, +converse-bg .nav-justified .nav-item .nav-link { + width: 100%; +} +.conversejs .tab-content > .tab-pane, converse-bg .tab-content > .tab-pane { + display: none; +} +.conversejs .tab-content > .active, converse-bg .tab-content > .active { + display: block; +} +.conversejs .navbar, converse-bg .navbar { + --converse-navbar-padding-x: 0; + --converse-navbar-padding-y: 0.5rem; + --converse-navbar-color: rgba(var(--converse-emphasis-color-rgb), 0.65); + --converse-navbar-hover-color: rgba(var(--converse-emphasis-color-rgb), 0.8); + --converse-navbar-disabled-color: rgba(var(--converse-emphasis-color-rgb), 0.3); + --converse-navbar-active-color: rgba(var(--converse-emphasis-color-rgb), 1); + --converse-navbar-brand-padding-y: 0.3125rem; + --converse-navbar-brand-margin-end: 1rem; + --converse-navbar-brand-font-size: 1.25rem; + --converse-navbar-brand-color: rgba(var(--converse-emphasis-color-rgb), 1); + --converse-navbar-brand-hover-color: rgba(var(--converse-emphasis-color-rgb), 1); + --converse-navbar-nav-link-padding-x: 0.5rem; + --converse-navbar-toggler-padding-y: 0.25rem; + --converse-navbar-toggler-padding-x: 0.75rem; + --converse-navbar-toggler-font-size: 1.25rem; + --converse-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --converse-navbar-toggler-border-color: rgba(var(--converse-emphasis-color-rgb), 0.15); + --converse-navbar-toggler-border-radius: var(--converse-border-radius); + --converse-navbar-toggler-focus-width: 0.25rem; + --converse-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--converse-navbar-padding-y) var(--converse-navbar-padding-x); +} +.conversejs .navbar > .container, +.conversejs .navbar > .container-fluid, +.conversejs .navbar > .container-sm, +.conversejs .navbar > .container-md, +.conversejs .navbar > .container-lg, +.conversejs .navbar > .container-xl, +.conversejs .navbar > .container-xxl, converse-bg .navbar > .container, +converse-bg .navbar > .container-fluid, +converse-bg .navbar > .container-sm, +converse-bg .navbar > .container-md, +converse-bg .navbar > .container-lg, +converse-bg .navbar > .container-xl, +converse-bg .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} +.conversejs .navbar-brand, converse-bg .navbar-brand { + padding-top: var(--converse-navbar-brand-padding-y); + padding-bottom: var(--converse-navbar-brand-padding-y); + margin-right: var(--converse-navbar-brand-margin-end); + font-size: var(--converse-navbar-brand-font-size); + color: var(--converse-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} +.conversejs .navbar-brand:hover, .conversejs .navbar-brand:focus, converse-bg .navbar-brand:hover, converse-bg .navbar-brand:focus { + color: var(--converse-navbar-brand-hover-color); +} +.conversejs .navbar-nav, converse-bg .navbar-nav { + --converse-nav-link-padding-x: 0; + --converse-nav-link-padding-y: 0.5rem; + --converse-nav-link-font-weight: ; + --converse-nav-link-color: var(--converse-navbar-color); + --converse-nav-link-hover-color: var(--converse-navbar-hover-color); + --converse-nav-link-disabled-color: var(--converse-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.conversejs .navbar-nav .nav-link.active, .conversejs .navbar-nav .nav-link.show, converse-bg .navbar-nav .nav-link.active, converse-bg .navbar-nav .nav-link.show { + color: var(--converse-navbar-active-color); +} +.conversejs .navbar-nav .dropdown-menu, converse-bg .navbar-nav .dropdown-menu { + position: static; +} +.conversejs .navbar-text, converse-bg .navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--converse-navbar-color); +} +.conversejs .navbar-text a, +.conversejs .navbar-text a:hover, +.conversejs .navbar-text a:focus, converse-bg .navbar-text a, +converse-bg .navbar-text a:hover, +converse-bg .navbar-text a:focus { + color: var(--converse-navbar-active-color); +} +.conversejs .navbar-collapse, converse-bg .navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} +.conversejs .navbar-toggler, converse-bg .navbar-toggler { + padding: var(--converse-navbar-toggler-padding-y) var(--converse-navbar-toggler-padding-x); + font-size: var(--converse-navbar-toggler-font-size); + line-height: 1; + color: var(--converse-navbar-color); + background-color: transparent; + border: var(--converse-border-width) solid var(--converse-navbar-toggler-border-color); + border-radius: var(--converse-navbar-toggler-border-radius); + transition: var(--converse-navbar-toggler-transition); +} +@media (prefers-reduced-motion: reduce) { + .conversejs .navbar-toggler, converse-bg .navbar-toggler { + transition: none; + } +} +.conversejs .navbar-toggler:hover, converse-bg .navbar-toggler:hover { + text-decoration: none; +} +.conversejs .navbar-toggler:focus, converse-bg .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--converse-navbar-toggler-focus-width); +} +.conversejs .navbar-toggler-icon, converse-bg .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--converse-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} +.conversejs .navbar-nav-scroll, converse-bg .navbar-nav-scroll { + max-height: var(--converse-scroll-height, 75vh); + overflow-y: auto; +} +@media (min-width: 576px) { + .conversejs .navbar-expand-sm, converse-bg .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .conversejs .navbar-expand-sm .navbar-nav, converse-bg .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .conversejs .navbar-expand-sm .navbar-nav .dropdown-menu, converse-bg .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .conversejs .navbar-expand-sm .navbar-nav .nav-link, converse-bg .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--converse-navbar-nav-link-padding-x); + padding-left: var(--converse-navbar-nav-link-padding-x); + } + .conversejs .navbar-expand-sm .navbar-nav-scroll, converse-bg .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .conversejs .navbar-expand-sm .navbar-collapse, converse-bg .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .conversejs .navbar-expand-sm .navbar-toggler, converse-bg .navbar-expand-sm .navbar-toggler { + display: none; + } + .conversejs .navbar-expand-sm .offcanvas, converse-bg .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .conversejs .navbar-expand-sm .offcanvas .offcanvas-header, converse-bg .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + .conversejs .navbar-expand-sm .offcanvas .offcanvas-body, converse-bg .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 768px) { + .conversejs .navbar-expand-md, converse-bg .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .conversejs .navbar-expand-md .navbar-nav, converse-bg .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .conversejs .navbar-expand-md .navbar-nav .dropdown-menu, converse-bg .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .conversejs .navbar-expand-md .navbar-nav .nav-link, converse-bg .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--converse-navbar-nav-link-padding-x); + padding-left: var(--converse-navbar-nav-link-padding-x); + } + .conversejs .navbar-expand-md .navbar-nav-scroll, converse-bg .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .conversejs .navbar-expand-md .navbar-collapse, converse-bg .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .conversejs .navbar-expand-md .navbar-toggler, converse-bg .navbar-expand-md .navbar-toggler { + display: none; + } + .conversejs .navbar-expand-md .offcanvas, converse-bg .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .conversejs .navbar-expand-md .offcanvas .offcanvas-header, converse-bg .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + .conversejs .navbar-expand-md .offcanvas .offcanvas-body, converse-bg .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 992px) { + .conversejs .navbar-expand-lg, converse-bg .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .conversejs .navbar-expand-lg .navbar-nav, converse-bg .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .conversejs .navbar-expand-lg .navbar-nav .dropdown-menu, converse-bg .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .conversejs .navbar-expand-lg .navbar-nav .nav-link, converse-bg .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--converse-navbar-nav-link-padding-x); + padding-left: var(--converse-navbar-nav-link-padding-x); + } + .conversejs .navbar-expand-lg .navbar-nav-scroll, converse-bg .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .conversejs .navbar-expand-lg .navbar-collapse, converse-bg .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .conversejs .navbar-expand-lg .navbar-toggler, converse-bg .navbar-expand-lg .navbar-toggler { + display: none; + } + .conversejs .navbar-expand-lg .offcanvas, converse-bg .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .conversejs .navbar-expand-lg .offcanvas .offcanvas-header, converse-bg .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + .conversejs .navbar-expand-lg .offcanvas .offcanvas-body, converse-bg .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1200px) { + .conversejs .navbar-expand-xl, converse-bg .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .conversejs .navbar-expand-xl .navbar-nav, converse-bg .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .conversejs .navbar-expand-xl .navbar-nav .dropdown-menu, converse-bg .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .conversejs .navbar-expand-xl .navbar-nav .nav-link, converse-bg .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--converse-navbar-nav-link-padding-x); + padding-left: var(--converse-navbar-nav-link-padding-x); + } + .conversejs .navbar-expand-xl .navbar-nav-scroll, converse-bg .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .conversejs .navbar-expand-xl .navbar-collapse, converse-bg .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .conversejs .navbar-expand-xl .navbar-toggler, converse-bg .navbar-expand-xl .navbar-toggler { + display: none; + } + .conversejs .navbar-expand-xl .offcanvas, converse-bg .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .conversejs .navbar-expand-xl .offcanvas .offcanvas-header, converse-bg .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + .conversejs .navbar-expand-xl .offcanvas .offcanvas-body, converse-bg .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1400px) { + .conversejs .navbar-expand-xxl, converse-bg .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .conversejs .navbar-expand-xxl .navbar-nav, converse-bg .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .conversejs .navbar-expand-xxl .navbar-nav .dropdown-menu, converse-bg .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .conversejs .navbar-expand-xxl .navbar-nav .nav-link, converse-bg .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--converse-navbar-nav-link-padding-x); + padding-left: var(--converse-navbar-nav-link-padding-x); + } + .conversejs .navbar-expand-xxl .navbar-nav-scroll, converse-bg .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .conversejs .navbar-expand-xxl .navbar-collapse, converse-bg .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .conversejs .navbar-expand-xxl .navbar-toggler, converse-bg .navbar-expand-xxl .navbar-toggler { + display: none; + } + .conversejs .navbar-expand-xxl .offcanvas, converse-bg .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .conversejs .navbar-expand-xxl .offcanvas .offcanvas-header, converse-bg .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + .conversejs .navbar-expand-xxl .offcanvas .offcanvas-body, converse-bg .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +.conversejs .navbar-expand, converse-bg .navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} +.conversejs .navbar-expand .navbar-nav, converse-bg .navbar-expand .navbar-nav { + flex-direction: row; +} +.conversejs .navbar-expand .navbar-nav .dropdown-menu, converse-bg .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.conversejs .navbar-expand .navbar-nav .nav-link, converse-bg .navbar-expand .navbar-nav .nav-link { + padding-right: var(--converse-navbar-nav-link-padding-x); + padding-left: var(--converse-navbar-nav-link-padding-x); +} +.conversejs .navbar-expand .navbar-nav-scroll, converse-bg .navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.conversejs .navbar-expand .navbar-collapse, converse-bg .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.conversejs .navbar-expand .navbar-toggler, converse-bg .navbar-expand .navbar-toggler { + display: none; +} +.conversejs .navbar-expand .offcanvas, converse-bg .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} +.conversejs .navbar-expand .offcanvas .offcanvas-header, converse-bg .navbar-expand .offcanvas .offcanvas-header { + display: none; +} +.conversejs .navbar-expand .offcanvas .offcanvas-body, converse-bg .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} +.conversejs .navbar-dark, +.conversejs .navbar[data-bs-theme=dark], converse-bg .navbar-dark, +converse-bg .navbar[data-bs-theme=dark] { + --converse-navbar-color: rgba(255, 255, 255, 0.55); + --converse-navbar-hover-color: rgba(255, 255, 255, 0.75); + --converse-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --converse-navbar-active-color: #fff; + --converse-navbar-brand-color: #fff; + --converse-navbar-brand-hover-color: #fff; + --converse-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --converse-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.conversejs [data-bs-theme=dark] .navbar-toggler-icon, converse-bg [data-bs-theme=dark] .navbar-toggler-icon { + --converse-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.conversejs .card, converse-bg .card { + --converse-card-spacer-y: 1rem; + --converse-card-spacer-x: 1rem; + --converse-card-title-spacer-y: 0.5rem; + --converse-card-title-color: ; + --converse-card-subtitle-color: ; + --converse-card-border-width: var(--converse-border-width); + --converse-card-border-color: var(--converse-border-color-translucent); + --converse-card-border-radius: var(--converse-border-radius); + --converse-card-box-shadow: ; + --converse-card-inner-border-radius: calc(var(--converse-border-radius) - (var(--converse-border-width))); + --converse-card-cap-padding-y: 0.5rem; + --converse-card-cap-padding-x: 1rem; + --converse-card-cap-bg: rgba(var(--converse-body-color-rgb), 0.03); + --converse-card-cap-color: ; + --converse-card-height: ; + --converse-card-color: ; + --converse-card-bg: var(--converse-body-bg); + --converse-card-img-overlay-padding: 1rem; + --converse-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--converse-card-height); + color: var(--converse-body-color); + word-wrap: break-word; + background-color: var(--converse-card-bg); + background-clip: border-box; + border: var(--converse-card-border-width) solid var(--converse-card-border-color); + border-radius: var(--converse-card-border-radius); +} +.conversejs .card > hr, converse-bg .card > hr { + margin-right: 0; + margin-left: 0; +} +.conversejs .card > .list-group, converse-bg .card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.conversejs .card > .list-group:first-child, converse-bg .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--converse-card-inner-border-radius); + border-top-right-radius: var(--converse-card-inner-border-radius); +} +.conversejs .card > .list-group:last-child, converse-bg .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--converse-card-inner-border-radius); + border-bottom-left-radius: var(--converse-card-inner-border-radius); +} +.conversejs .card > .card-header + .list-group, +.conversejs .card > .list-group + .card-footer, converse-bg .card > .card-header + .list-group, +converse-bg .card > .list-group + .card-footer { + border-top: 0; +} +.conversejs .card-body, converse-bg .card-body { + flex: 1 1 auto; + padding: var(--converse-card-spacer-y) var(--converse-card-spacer-x); + color: var(--converse-card-color); +} +.conversejs .card-title, converse-bg .card-title { + margin-bottom: var(--converse-card-title-spacer-y); + color: var(--converse-card-title-color); +} +.conversejs .card-subtitle, converse-bg .card-subtitle { + margin-top: calc(-0.5 * var(--converse-card-title-spacer-y)); + margin-bottom: 0; + color: var(--converse-card-subtitle-color); +} +.conversejs .card-text:last-child, converse-bg .card-text:last-child { + margin-bottom: 0; +} +.conversejs .card-link + .card-link, converse-bg .card-link + .card-link { + margin-left: var(--converse-card-spacer-x); +} +.conversejs .card-header, converse-bg .card-header { + padding: var(--converse-card-cap-padding-y) var(--converse-card-cap-padding-x); + margin-bottom: 0; + color: var(--converse-card-cap-color); + background-color: var(--converse-card-cap-bg); + border-bottom: var(--converse-card-border-width) solid var(--converse-card-border-color); +} +.conversejs .card-header:first-child, converse-bg .card-header:first-child { + border-radius: var(--converse-card-inner-border-radius) var(--converse-card-inner-border-radius) 0 0; +} +.conversejs .card-footer, converse-bg .card-footer { + padding: var(--converse-card-cap-padding-y) var(--converse-card-cap-padding-x); + color: var(--converse-card-cap-color); + background-color: var(--converse-card-cap-bg); + border-top: var(--converse-card-border-width) solid var(--converse-card-border-color); +} +.conversejs .card-footer:last-child, converse-bg .card-footer:last-child { + border-radius: 0 0 var(--converse-card-inner-border-radius) var(--converse-card-inner-border-radius); +} +.conversejs .card-header-tabs, converse-bg .card-header-tabs { + margin-right: calc(-0.5 * var(--converse-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--converse-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--converse-card-cap-padding-x)); + border-bottom: 0; +} +.conversejs .card-header-tabs .nav-link.active, converse-bg .card-header-tabs .nav-link.active { + background-color: var(--converse-card-bg); + border-bottom-color: var(--converse-card-bg); +} +.conversejs .card-header-pills, converse-bg .card-header-pills { + margin-right: calc(-0.5 * var(--converse-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--converse-card-cap-padding-x)); +} +.conversejs .card-img-overlay, converse-bg .card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--converse-card-img-overlay-padding); + border-radius: var(--converse-card-inner-border-radius); +} +.conversejs .card-img, +.conversejs .card-img-top, +.conversejs .card-img-bottom, converse-bg .card-img, +converse-bg .card-img-top, +converse-bg .card-img-bottom { + width: 100%; +} +.conversejs .card-img, +.conversejs .card-img-top, converse-bg .card-img, +converse-bg .card-img-top { + border-top-left-radius: var(--converse-card-inner-border-radius); + border-top-right-radius: var(--converse-card-inner-border-radius); +} +.conversejs .card-img, +.conversejs .card-img-bottom, converse-bg .card-img, +converse-bg .card-img-bottom { + border-bottom-right-radius: var(--converse-card-inner-border-radius); + border-bottom-left-radius: var(--converse-card-inner-border-radius); +} +.conversejs .card-group > .card, converse-bg .card-group > .card { + margin-bottom: var(--converse-card-group-margin); +} +@media (min-width: 576px) { + .conversejs .card-group, converse-bg .card-group { + display: flex; + flex-flow: row wrap; + } + .conversejs .card-group > .card, converse-bg .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .conversejs .card-group > .card + .card, converse-bg .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .conversejs .card-group > .card:not(:last-child), converse-bg .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .conversejs .card-group > .card:not(:last-child) .card-img-top, + .conversejs .card-group > .card:not(:last-child) .card-header, converse-bg .card-group > .card:not(:last-child) .card-img-top, + converse-bg .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .conversejs .card-group > .card:not(:last-child) .card-img-bottom, + .conversejs .card-group > .card:not(:last-child) .card-footer, converse-bg .card-group > .card:not(:last-child) .card-img-bottom, + converse-bg .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .conversejs .card-group > .card:not(:first-child), converse-bg .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .conversejs .card-group > .card:not(:first-child) .card-img-top, + .conversejs .card-group > .card:not(:first-child) .card-header, converse-bg .card-group > .card:not(:first-child) .card-img-top, + converse-bg .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .conversejs .card-group > .card:not(:first-child) .card-img-bottom, + .conversejs .card-group > .card:not(:first-child) .card-footer, converse-bg .card-group > .card:not(:first-child) .card-img-bottom, + converse-bg .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} +.conversejs .badge, converse-bg .badge { + --converse-badge-padding-x: 0.65em; + --converse-badge-padding-y: 0.35em; + --converse-badge-font-size: 0.75em; + --converse-badge-font-weight: 700; + --converse-badge-color: #fff; + --converse-badge-border-radius: var(--converse-border-radius); + display: inline-block; + padding: var(--converse-badge-padding-y) var(--converse-badge-padding-x); + font-size: var(--converse-badge-font-size); + font-weight: var(--converse-badge-font-weight); + line-height: 1; + color: var(--converse-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--converse-badge-border-radius); +} +.conversejs .badge:empty, converse-bg .badge:empty { + display: none; +} +.conversejs .btn .badge, converse-bg .btn .badge { + position: relative; + top: -1px; +} +.conversejs .alert, converse-bg .alert { + --converse-alert-bg: transparent; + --converse-alert-padding-x: 1rem; + --converse-alert-padding-y: 1rem; + --converse-alert-margin-bottom: 1rem; + --converse-alert-color: inherit; + --converse-alert-border-color: transparent; + --converse-alert-border: var(--converse-border-width) solid var(--converse-alert-border-color); + --converse-alert-border-radius: var(--converse-border-radius); + --converse-alert-link-color: inherit; + position: relative; + padding: var(--converse-alert-padding-y) var(--converse-alert-padding-x); + margin-bottom: var(--converse-alert-margin-bottom); + color: var(--converse-alert-color); + background-color: var(--converse-alert-bg); + border: var(--converse-alert-border); + border-radius: var(--converse-alert-border-radius); +} +.conversejs .alert-heading, converse-bg .alert-heading { + color: inherit; +} +.conversejs .alert-link, converse-bg .alert-link { + font-weight: 700; + color: var(--converse-alert-link-color); +} +.conversejs .alert-dismissible, converse-bg .alert-dismissible { + padding-right: 3rem; +} +.conversejs .alert-dismissible .btn-close, converse-bg .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} +.conversejs .alert-primary, converse-bg .alert-primary { + --converse-alert-color: var(--converse-primary-text-emphasis); + --converse-alert-bg: var(--converse-primary-bg-subtle); + --converse-alert-border-color: var(--converse-primary-border-subtle); + --converse-alert-link-color: var(--converse-primary-text-emphasis); +} +.conversejs .alert-secondary, converse-bg .alert-secondary { + --converse-alert-color: var(--converse-secondary-text-emphasis); + --converse-alert-bg: var(--converse-secondary-bg-subtle); + --converse-alert-border-color: var(--converse-secondary-border-subtle); + --converse-alert-link-color: var(--converse-secondary-text-emphasis); +} +.conversejs .alert-success, converse-bg .alert-success { + --converse-alert-color: var(--converse-success-text-emphasis); + --converse-alert-bg: var(--converse-success-bg-subtle); + --converse-alert-border-color: var(--converse-success-border-subtle); + --converse-alert-link-color: var(--converse-success-text-emphasis); +} +.conversejs .alert-info, converse-bg .alert-info { + --converse-alert-color: var(--converse-info-text-emphasis); + --converse-alert-bg: var(--converse-info-bg-subtle); + --converse-alert-border-color: var(--converse-info-border-subtle); + --converse-alert-link-color: var(--converse-info-text-emphasis); +} +.conversejs .alert-warning, converse-bg .alert-warning { + --converse-alert-color: var(--converse-warning-text-emphasis); + --converse-alert-bg: var(--converse-warning-bg-subtle); + --converse-alert-border-color: var(--converse-warning-border-subtle); + --converse-alert-link-color: var(--converse-warning-text-emphasis); +} +.conversejs .alert-danger, converse-bg .alert-danger { + --converse-alert-color: var(--converse-danger-text-emphasis); + --converse-alert-bg: var(--converse-danger-bg-subtle); + --converse-alert-border-color: var(--converse-danger-border-subtle); + --converse-alert-link-color: var(--converse-danger-text-emphasis); +} +.conversejs .alert-light, converse-bg .alert-light { + --converse-alert-color: var(--converse-light-text-emphasis); + --converse-alert-bg: var(--converse-light-bg-subtle); + --converse-alert-border-color: var(--converse-light-border-subtle); + --converse-alert-link-color: var(--converse-light-text-emphasis); +} +.conversejs .alert-dark, converse-bg .alert-dark { + --converse-alert-color: var(--converse-dark-text-emphasis); + --converse-alert-bg: var(--converse-dark-bg-subtle); + --converse-alert-border-color: var(--converse-dark-border-subtle); + --converse-alert-link-color: var(--converse-dark-text-emphasis); +} +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.conversejs .progress, +.conversejs .progress-stacked, converse-bg .progress, +converse-bg .progress-stacked { + --converse-progress-height: 1rem; + --converse-progress-font-size: 0.75rem; + --converse-progress-bg: var(--converse-secondary-bg); + --converse-progress-border-radius: var(--converse-border-radius); + --converse-progress-box-shadow: var(--converse-box-shadow-inset); + --converse-progress-bar-color: #fff; + --converse-progress-bar-bg: #0d6efd; + --converse-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--converse-progress-height); + overflow: hidden; + font-size: var(--converse-progress-font-size); + background-color: var(--converse-progress-bg); + border-radius: var(--converse-progress-border-radius); +} +.conversejs .progress-bar, converse-bg .progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--converse-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--converse-progress-bar-bg); + transition: var(--converse-progress-bar-transition); +} +@media (prefers-reduced-motion: reduce) { + .conversejs .progress-bar, converse-bg .progress-bar { + transition: none; + } +} +.conversejs .progress-bar-striped, converse-bg .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--converse-progress-height) var(--converse-progress-height); +} +.conversejs .progress-stacked > .progress, converse-bg .progress-stacked > .progress { + overflow: visible; +} +.conversejs .progress-stacked > .progress > .progress-bar, converse-bg .progress-stacked > .progress > .progress-bar { + width: 100%; +} +.conversejs .progress-bar-animated, converse-bg .progress-bar-animated { + animation: 1s linear infinite progress-bar-stripes; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .progress-bar-animated, converse-bg .progress-bar-animated { + animation: none; + } +} +.conversejs .list-group, converse-bg .list-group { + --converse-list-group-color: var(--converse-body-color); + --converse-list-group-bg: var(--converse-body-bg); + --converse-list-group-border-color: var(--converse-border-color); + --converse-list-group-border-width: var(--converse-border-width); + --converse-list-group-border-radius: var(--converse-border-radius); + --converse-list-group-item-padding-x: 1rem; + --converse-list-group-item-padding-y: 0.5rem; + --converse-list-group-action-color: var(--converse-secondary-color); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-tertiary-bg); + --converse-list-group-action-active-color: var(--converse-body-color); + --converse-list-group-action-active-bg: var(--converse-secondary-bg); + --converse-list-group-disabled-color: var(--converse-secondary-color); + --converse-list-group-disabled-bg: var(--converse-body-bg); + --converse-list-group-active-color: #fff; + --converse-list-group-active-bg: #0d6efd; + --converse-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--converse-list-group-border-radius); +} +.conversejs .list-group-numbered, converse-bg .list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.conversejs .list-group-numbered > .list-group-item::before, converse-bg .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} +.conversejs .list-group-item-action, converse-bg .list-group-item-action { + width: 100%; + color: var(--converse-list-group-action-color); + text-align: inherit; +} +.conversejs .list-group-item-action:hover, .conversejs .list-group-item-action:focus, converse-bg .list-group-item-action:hover, converse-bg .list-group-item-action:focus { + z-index: 1; + color: var(--converse-list-group-action-hover-color); + text-decoration: none; + background-color: var(--converse-list-group-action-hover-bg); +} +.conversejs .list-group-item-action:active, converse-bg .list-group-item-action:active { + color: var(--converse-list-group-action-active-color); + background-color: var(--converse-list-group-action-active-bg); +} +.conversejs .list-group-item, converse-bg .list-group-item { + position: relative; + display: block; + padding: var(--converse-list-group-item-padding-y) var(--converse-list-group-item-padding-x); + color: var(--converse-list-group-color); + text-decoration: none; + background-color: var(--converse-list-group-bg); + border: var(--converse-list-group-border-width) solid var(--converse-list-group-border-color); +} +.conversejs .list-group-item:first-child, converse-bg .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.conversejs .list-group-item:last-child, converse-bg .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, converse-bg .list-group-item.disabled, converse-bg .list-group-item:disabled { + color: var(--converse-list-group-disabled-color); + pointer-events: none; + background-color: var(--converse-list-group-disabled-bg); +} +.conversejs .list-group-item.active, converse-bg .list-group-item.active { + z-index: 2; + color: var(--converse-list-group-active-color); + background-color: var(--converse-list-group-active-bg); + border-color: var(--converse-list-group-active-border-color); +} +.conversejs .list-group-item + .list-group-item, converse-bg .list-group-item + .list-group-item { + border-top-width: 0; +} +.conversejs .list-group-item + .list-group-item.active, converse-bg .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--converse-list-group-border-width)); + border-top-width: var(--converse-list-group-border-width); +} +.conversejs .list-group-horizontal, converse-bg .list-group-horizontal { + flex-direction: row; +} +.conversejs .list-group-horizontal > .list-group-item:first-child:not(:last-child), converse-bg .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; +} +.conversejs .list-group-horizontal > .list-group-item:last-child:not(:first-child), converse-bg .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + border-bottom-left-radius: 0; +} +.conversejs .list-group-horizontal > .list-group-item.active, converse-bg .list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.conversejs .list-group-horizontal > .list-group-item + .list-group-item, converse-bg .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--converse-list-group-border-width); + border-left-width: 0; +} +.conversejs .list-group-horizontal > .list-group-item + .list-group-item.active, converse-bg .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); +} +@media (min-width: 576px) { + .conversejs .list-group-horizontal-sm, converse-bg .list-group-horizontal-sm { + flex-direction: row; + } + .conversejs .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child), converse-bg .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child), converse-bg .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + border-bottom-left-radius: 0; + } + .conversejs .list-group-horizontal-sm > .list-group-item.active, converse-bg .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .conversejs .list-group-horizontal-sm > .list-group-item + .list-group-item, converse-bg .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-sm > .list-group-item + .list-group-item.active, converse-bg .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 768px) { + .conversejs .list-group-horizontal-md, converse-bg .list-group-horizontal-md { + flex-direction: row; + } + .conversejs .list-group-horizontal-md > .list-group-item:first-child:not(:last-child), converse-bg .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-md > .list-group-item:last-child:not(:first-child), converse-bg .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + border-bottom-left-radius: 0; + } + .conversejs .list-group-horizontal-md > .list-group-item.active, converse-bg .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .conversejs .list-group-horizontal-md > .list-group-item + .list-group-item, converse-bg .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-md > .list-group-item + .list-group-item.active, converse-bg .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 992px) { + .conversejs .list-group-horizontal-lg, converse-bg .list-group-horizontal-lg { + flex-direction: row; + } + .conversejs .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child), converse-bg .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child), converse-bg .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + border-bottom-left-radius: 0; + } + .conversejs .list-group-horizontal-lg > .list-group-item.active, converse-bg .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .conversejs .list-group-horizontal-lg > .list-group-item + .list-group-item, converse-bg .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-lg > .list-group-item + .list-group-item.active, converse-bg .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 1200px) { + .conversejs .list-group-horizontal-xl, converse-bg .list-group-horizontal-xl { + flex-direction: row; + } + .conversejs .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child), converse-bg .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child), converse-bg .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + border-bottom-left-radius: 0; + } + .conversejs .list-group-horizontal-xl > .list-group-item.active, converse-bg .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .conversejs .list-group-horizontal-xl > .list-group-item + .list-group-item, converse-bg .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-xl > .list-group-item + .list-group-item.active, converse-bg .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 1400px) { + .conversejs .list-group-horizontal-xxl, converse-bg .list-group-horizontal-xxl { + flex-direction: row; + } + .conversejs .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child), converse-bg .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child), converse-bg .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + border-bottom-left-radius: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item.active, converse-bg .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item + .list-group-item, converse-bg .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item + .list-group-item.active, converse-bg .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +.conversejs .list-group-flush, converse-bg .list-group-flush { + border-radius: 0; +} +.conversejs .list-group-flush > .list-group-item, converse-bg .list-group-flush > .list-group-item { + border-width: 0 0 var(--converse-list-group-border-width); +} +.conversejs .list-group-flush > .list-group-item:last-child, converse-bg .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} +.conversejs .list-group-item-primary, converse-bg .list-group-item-primary { + --converse-list-group-color: var(--converse-primary-text-emphasis); + --converse-list-group-bg: var(--converse-primary-bg-subtle); + --converse-list-group-border-color: var(--converse-primary-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-primary-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-primary-border-subtle); + --converse-list-group-active-color: var(--converse-primary-bg-subtle); + --converse-list-group-active-bg: var(--converse-primary-text-emphasis); + --converse-list-group-active-border-color: var(--converse-primary-text-emphasis); +} +.conversejs .list-group-item-secondary, converse-bg .list-group-item-secondary { + --converse-list-group-color: var(--converse-secondary-text-emphasis); + --converse-list-group-bg: var(--converse-secondary-bg-subtle); + --converse-list-group-border-color: var(--converse-secondary-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-secondary-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-secondary-border-subtle); + --converse-list-group-active-color: var(--converse-secondary-bg-subtle); + --converse-list-group-active-bg: var(--converse-secondary-text-emphasis); + --converse-list-group-active-border-color: var(--converse-secondary-text-emphasis); +} +.conversejs .list-group-item-success, converse-bg .list-group-item-success { + --converse-list-group-color: var(--converse-success-text-emphasis); + --converse-list-group-bg: var(--converse-success-bg-subtle); + --converse-list-group-border-color: var(--converse-success-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-success-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-success-border-subtle); + --converse-list-group-active-color: var(--converse-success-bg-subtle); + --converse-list-group-active-bg: var(--converse-success-text-emphasis); + --converse-list-group-active-border-color: var(--converse-success-text-emphasis); +} +.conversejs .list-group-item-info, converse-bg .list-group-item-info { + --converse-list-group-color: var(--converse-info-text-emphasis); + --converse-list-group-bg: var(--converse-info-bg-subtle); + --converse-list-group-border-color: var(--converse-info-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-info-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-info-border-subtle); + --converse-list-group-active-color: var(--converse-info-bg-subtle); + --converse-list-group-active-bg: var(--converse-info-text-emphasis); + --converse-list-group-active-border-color: var(--converse-info-text-emphasis); +} +.conversejs .list-group-item-warning, converse-bg .list-group-item-warning { + --converse-list-group-color: var(--converse-warning-text-emphasis); + --converse-list-group-bg: var(--converse-warning-bg-subtle); + --converse-list-group-border-color: var(--converse-warning-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-warning-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-warning-border-subtle); + --converse-list-group-active-color: var(--converse-warning-bg-subtle); + --converse-list-group-active-bg: var(--converse-warning-text-emphasis); + --converse-list-group-active-border-color: var(--converse-warning-text-emphasis); +} +.conversejs .list-group-item-danger, converse-bg .list-group-item-danger { + --converse-list-group-color: var(--converse-danger-text-emphasis); + --converse-list-group-bg: var(--converse-danger-bg-subtle); + --converse-list-group-border-color: var(--converse-danger-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-danger-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-danger-border-subtle); + --converse-list-group-active-color: var(--converse-danger-bg-subtle); + --converse-list-group-active-bg: var(--converse-danger-text-emphasis); + --converse-list-group-active-border-color: var(--converse-danger-text-emphasis); +} +.conversejs .list-group-item-light, converse-bg .list-group-item-light { + --converse-list-group-color: var(--converse-light-text-emphasis); + --converse-list-group-bg: var(--converse-light-bg-subtle); + --converse-list-group-border-color: var(--converse-light-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-light-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-light-border-subtle); + --converse-list-group-active-color: var(--converse-light-bg-subtle); + --converse-list-group-active-bg: var(--converse-light-text-emphasis); + --converse-list-group-active-border-color: var(--converse-light-text-emphasis); +} +.conversejs .list-group-item-dark, converse-bg .list-group-item-dark { + --converse-list-group-color: var(--converse-dark-text-emphasis); + --converse-list-group-bg: var(--converse-dark-bg-subtle); + --converse-list-group-border-color: var(--converse-dark-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-dark-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-dark-border-subtle); + --converse-list-group-active-color: var(--converse-dark-bg-subtle); + --converse-list-group-active-bg: var(--converse-dark-text-emphasis); + --converse-list-group-active-border-color: var(--converse-dark-text-emphasis); +} +.conversejs .btn-close, converse-bg .btn-close { + --converse-btn-close-color: #000; + --converse-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + --converse-btn-close-opacity: 0.5; + --converse-btn-close-hover-opacity: 0.75; + --converse-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --converse-btn-close-focus-opacity: 1; + --converse-btn-close-disabled-opacity: 0.25; + --converse-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--converse-btn-close-color); + background: transparent var(--converse-btn-close-bg) center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: var(--converse-btn-close-opacity); +} +.conversejs .btn-close:hover, converse-bg .btn-close:hover { + color: var(--converse-btn-close-color); + text-decoration: none; + opacity: var(--converse-btn-close-hover-opacity); +} +.conversejs .btn-close:focus, converse-bg .btn-close:focus { + outline: 0; + box-shadow: var(--converse-btn-close-focus-shadow); + opacity: var(--converse-btn-close-focus-opacity); +} +.conversejs .btn-close:disabled, .conversejs .btn-close.disabled, converse-bg .btn-close:disabled, converse-bg .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: var(--converse-btn-close-disabled-opacity); +} +.conversejs .btn-close-white, converse-bg .btn-close-white { + filter: var(--converse-btn-close-white-filter); +} +.conversejs [data-bs-theme=dark] .btn-close, converse-bg [data-bs-theme=dark] .btn-close { + filter: var(--converse-btn-close-white-filter); +} +.conversejs .modal, converse-bg .modal { + --converse-modal-zindex: 1055; + --converse-modal-width: 500px; + --converse-modal-padding: 1rem; + --converse-modal-margin: 0.5rem; + --converse-modal-color: ; + --converse-modal-bg: var(--converse-body-bg); + --converse-modal-border-color: var(--converse-border-color-translucent); + --converse-modal-border-width: var(--converse-border-width); + --converse-modal-border-radius: var(--converse-border-radius-lg); + --converse-modal-box-shadow: var(--converse-box-shadow-sm); + --converse-modal-inner-border-radius: calc(var(--converse-border-radius-lg) - (var(--converse-border-width))); + --converse-modal-header-padding-x: 1rem; + --converse-modal-header-padding-y: 1rem; + --converse-modal-header-padding: 1rem 1rem; + --converse-modal-header-border-color: var(--converse-border-color); + --converse-modal-header-border-width: var(--converse-border-width); + --converse-modal-title-line-height: 1.5; + --converse-modal-footer-gap: 0.5rem; + --converse-modal-footer-bg: ; + --converse-modal-footer-border-color: var(--converse-border-color); + --converse-modal-footer-border-width: var(--converse-border-width); + position: fixed; + top: 0; + left: 0; + z-index: var(--converse-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} +.conversejs .modal-dialog, converse-bg .modal-dialog { + position: relative; + width: auto; + margin: var(--converse-modal-margin); + pointer-events: none; +} +.modal.fade .conversejs .modal-dialog, .modal.fade converse-bg .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .conversejs .modal-dialog, .modal.fade converse-bg .modal-dialog { + transition: none; + } +} +.modal.show .conversejs .modal-dialog, .modal.show converse-bg .modal-dialog { + transform: none; +} +.modal.modal-static .conversejs .modal-dialog, .modal.modal-static converse-bg .modal-dialog { + transform: scale(1.02); +} +.conversejs .modal-dialog-scrollable, converse-bg .modal-dialog-scrollable { + height: calc(100% - var(--converse-modal-margin) * 2); +} +.conversejs .modal-dialog-scrollable .modal-content, converse-bg .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.conversejs .modal-dialog-scrollable .modal-body, converse-bg .modal-dialog-scrollable .modal-body { + overflow-y: auto; +} +.conversejs .modal-dialog-centered, converse-bg .modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--converse-modal-margin) * 2); +} +.conversejs .modal-content, converse-bg .modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--converse-modal-color); + pointer-events: auto; + background-color: var(--converse-modal-bg); + background-clip: padding-box; + border: var(--converse-modal-border-width) solid var(--converse-modal-border-color); + border-radius: var(--converse-modal-border-radius); + outline: 0; +} +.conversejs .modal-backdrop, converse-bg .modal-backdrop { + --converse-backdrop-zindex: 1050; + --converse-backdrop-bg: #000; + --converse-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--converse-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--converse-backdrop-bg); +} +.conversejs .modal-backdrop.fade, converse-bg .modal-backdrop.fade { + opacity: 0; +} +.conversejs .modal-backdrop.show, converse-bg .modal-backdrop.show { + opacity: var(--converse-backdrop-opacity); +} +.conversejs .modal-header, converse-bg .modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + padding: var(--converse-modal-header-padding); + border-bottom: var(--converse-modal-header-border-width) solid var(--converse-modal-header-border-color); + border-top-left-radius: var(--converse-modal-inner-border-radius); + border-top-right-radius: var(--converse-modal-inner-border-radius); +} +.conversejs .modal-header .btn-close, converse-bg .modal-header .btn-close { + padding: calc(var(--converse-modal-header-padding-y) * 0.5) calc(var(--converse-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--converse-modal-header-padding-y)) calc(-0.5 * var(--converse-modal-header-padding-x)) calc(-0.5 * var(--converse-modal-header-padding-y)) auto; +} +.conversejs .modal-title, converse-bg .modal-title { + margin-bottom: 0; + line-height: var(--converse-modal-title-line-height); +} +.conversejs .modal-body, converse-bg .modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--converse-modal-padding); +} +.conversejs .modal-footer, converse-bg .modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--converse-modal-padding) - var(--converse-modal-footer-gap) * 0.5); + background-color: var(--converse-modal-footer-bg); + border-top: var(--converse-modal-footer-border-width) solid var(--converse-modal-footer-border-color); + border-bottom-right-radius: var(--converse-modal-inner-border-radius); + border-bottom-left-radius: var(--converse-modal-inner-border-radius); +} +.conversejs .modal-footer > *, converse-bg .modal-footer > * { + margin: calc(var(--converse-modal-footer-gap) * 0.5); +} +@media (min-width: 576px) { + .conversejs .modal, converse-bg .modal { + --converse-modal-margin: 1.75rem; + --converse-modal-box-shadow: var(--converse-box-shadow); + } + .conversejs .modal-dialog, converse-bg .modal-dialog { + max-width: var(--converse-modal-width); + margin-right: auto; + margin-left: auto; + } + .conversejs .modal-sm, converse-bg .modal-sm { + --converse-modal-width: 300px; + } +} +@media (min-width: 992px) { + .conversejs .modal-lg, + .conversejs .modal-xl, converse-bg .modal-lg, + converse-bg .modal-xl { + --converse-modal-width: 800px; + } +} +@media (min-width: 1200px) { + .conversejs .modal-xl, converse-bg .modal-xl { + --converse-modal-width: 1140px; + } +} +.conversejs .modal-fullscreen, converse-bg .modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.conversejs .modal-fullscreen .modal-content, converse-bg .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.conversejs .modal-fullscreen .modal-header, +.conversejs .modal-fullscreen .modal-footer, converse-bg .modal-fullscreen .modal-header, +converse-bg .modal-fullscreen .modal-footer { + border-radius: 0; +} +.conversejs .modal-fullscreen .modal-body, converse-bg .modal-fullscreen .modal-body { + overflow-y: auto; +} +@media (max-width: 575.98px) { + .conversejs .modal-fullscreen-sm-down, converse-bg .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .conversejs .modal-fullscreen-sm-down .modal-content, converse-bg .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .conversejs .modal-fullscreen-sm-down .modal-header, + .conversejs .modal-fullscreen-sm-down .modal-footer, converse-bg .modal-fullscreen-sm-down .modal-header, + converse-bg .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + .conversejs .modal-fullscreen-sm-down .modal-body, converse-bg .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 767.98px) { + .conversejs .modal-fullscreen-md-down, converse-bg .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .conversejs .modal-fullscreen-md-down .modal-content, converse-bg .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .conversejs .modal-fullscreen-md-down .modal-header, + .conversejs .modal-fullscreen-md-down .modal-footer, converse-bg .modal-fullscreen-md-down .modal-header, + converse-bg .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + .conversejs .modal-fullscreen-md-down .modal-body, converse-bg .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 991.98px) { + .conversejs .modal-fullscreen-lg-down, converse-bg .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .conversejs .modal-fullscreen-lg-down .modal-content, converse-bg .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .conversejs .modal-fullscreen-lg-down .modal-header, + .conversejs .modal-fullscreen-lg-down .modal-footer, converse-bg .modal-fullscreen-lg-down .modal-header, + converse-bg .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + .conversejs .modal-fullscreen-lg-down .modal-body, converse-bg .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1199.98px) { + .conversejs .modal-fullscreen-xl-down, converse-bg .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .conversejs .modal-fullscreen-xl-down .modal-content, converse-bg .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .conversejs .modal-fullscreen-xl-down .modal-header, + .conversejs .modal-fullscreen-xl-down .modal-footer, converse-bg .modal-fullscreen-xl-down .modal-header, + converse-bg .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + .conversejs .modal-fullscreen-xl-down .modal-body, converse-bg .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1399.98px) { + .conversejs .modal-fullscreen-xxl-down, converse-bg .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .conversejs .modal-fullscreen-xxl-down .modal-content, converse-bg .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .conversejs .modal-fullscreen-xxl-down .modal-header, + .conversejs .modal-fullscreen-xxl-down .modal-footer, converse-bg .modal-fullscreen-xxl-down .modal-header, + converse-bg .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + .conversejs .modal-fullscreen-xxl-down .modal-body, converse-bg .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} +.conversejs .tooltip, converse-bg .tooltip { + --converse-tooltip-zindex: 1080; + --converse-tooltip-max-width: 200px; + --converse-tooltip-padding-x: 0.5rem; + --converse-tooltip-padding-y: 0.25rem; + --converse-tooltip-margin: ; + --converse-tooltip-font-size: 0.875rem; + --converse-tooltip-color: var(--converse-body-bg); + --converse-tooltip-bg: var(--converse-emphasis-color); + --converse-tooltip-border-radius: var(--converse-border-radius); + --converse-tooltip-opacity: 0.9; + --converse-tooltip-arrow-width: 0.8rem; + --converse-tooltip-arrow-height: 0.4rem; + z-index: var(--converse-tooltip-zindex); + display: block; + margin: var(--converse-tooltip-margin); + font-family: var(--converse-font-sans-serif); + 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; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--converse-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} +.conversejs .tooltip.show, converse-bg .tooltip.show { + opacity: var(--converse-tooltip-opacity); +} +.conversejs .tooltip .tooltip-arrow, converse-bg .tooltip .tooltip-arrow { + display: block; + width: var(--converse-tooltip-arrow-width); + height: var(--converse-tooltip-arrow-height); +} +.conversejs .tooltip .tooltip-arrow::before, converse-bg .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} +.conversejs .bs-tooltip-top .tooltip-arrow, .conversejs .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow, converse-bg .bs-tooltip-top .tooltip-arrow, converse-bg .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: calc(-1 * var(--converse-tooltip-arrow-height)); +} +.conversejs .bs-tooltip-top .tooltip-arrow::before, .conversejs .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before, converse-bg .bs-tooltip-top .tooltip-arrow::before, converse-bg .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--converse-tooltip-arrow-height) calc(var(--converse-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--converse-tooltip-bg); +} +.conversejs .bs-tooltip-end .tooltip-arrow, .conversejs .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow, converse-bg .bs-tooltip-end .tooltip-arrow, converse-bg .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: calc(-1 * var(--converse-tooltip-arrow-height)); + width: var(--converse-tooltip-arrow-height); + height: var(--converse-tooltip-arrow-width); +} +.conversejs .bs-tooltip-end .tooltip-arrow::before, .conversejs .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before, converse-bg .bs-tooltip-end .tooltip-arrow::before, converse-bg .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--converse-tooltip-arrow-width) * 0.5) var(--converse-tooltip-arrow-height) calc(var(--converse-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--converse-tooltip-bg); +} +.conversejs .bs-tooltip-bottom .tooltip-arrow, .conversejs .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow, converse-bg .bs-tooltip-bottom .tooltip-arrow, converse-bg .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: calc(-1 * var(--converse-tooltip-arrow-height)); +} +.conversejs .bs-tooltip-bottom .tooltip-arrow::before, .conversejs .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before, converse-bg .bs-tooltip-bottom .tooltip-arrow::before, converse-bg .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--converse-tooltip-arrow-width) * 0.5) var(--converse-tooltip-arrow-height); + border-bottom-color: var(--converse-tooltip-bg); +} +.conversejs .bs-tooltip-start .tooltip-arrow, .conversejs .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow, converse-bg .bs-tooltip-start .tooltip-arrow, converse-bg .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: calc(-1 * var(--converse-tooltip-arrow-height)); + width: var(--converse-tooltip-arrow-height); + height: var(--converse-tooltip-arrow-width); +} +.conversejs .bs-tooltip-start .tooltip-arrow::before, .conversejs .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before, converse-bg .bs-tooltip-start .tooltip-arrow::before, converse-bg .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--converse-tooltip-arrow-width) * 0.5) 0 calc(var(--converse-tooltip-arrow-width) * 0.5) var(--converse-tooltip-arrow-height); + border-left-color: var(--converse-tooltip-bg); +} +.conversejs .tooltip-inner, converse-bg .tooltip-inner { + max-width: var(--converse-tooltip-max-width); + padding: var(--converse-tooltip-padding-y) var(--converse-tooltip-padding-x); + color: var(--converse-tooltip-color); + text-align: center; + background-color: var(--converse-tooltip-bg); + border-radius: var(--converse-tooltip-border-radius); +} +.conversejs .popover, converse-bg .popover { + --converse-popover-zindex: 1070; + --converse-popover-max-width: 276px; + --converse-popover-font-size: 0.875rem; + --converse-popover-bg: var(--converse-body-bg); + --converse-popover-border-width: var(--converse-border-width); + --converse-popover-border-color: var(--converse-border-color-translucent); + --converse-popover-border-radius: var(--converse-border-radius-lg); + --converse-popover-inner-border-radius: calc(var(--converse-border-radius-lg) - var(--converse-border-width)); + --converse-popover-box-shadow: var(--converse-box-shadow); + --converse-popover-header-padding-x: 1rem; + --converse-popover-header-padding-y: 0.5rem; + --converse-popover-header-font-size: 1rem; + --converse-popover-header-color: inherit; + --converse-popover-header-bg: var(--converse-secondary-bg); + --converse-popover-body-padding-x: 1rem; + --converse-popover-body-padding-y: 1rem; + --converse-popover-body-color: var(--converse-body-color); + --converse-popover-arrow-width: 1rem; + --converse-popover-arrow-height: 0.5rem; + --converse-popover-arrow-border: var(--converse-popover-border-color); + z-index: var(--converse-popover-zindex); + display: block; + max-width: var(--converse-popover-max-width); + font-family: var(--converse-font-sans-serif); + 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; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--converse-popover-font-size); + word-wrap: break-word; + background-color: var(--converse-popover-bg); + background-clip: padding-box; + border: var(--converse-popover-border-width) solid var(--converse-popover-border-color); + border-radius: var(--converse-popover-border-radius); +} +.conversejs .popover .popover-arrow, converse-bg .popover .popover-arrow { + display: block; + width: var(--converse-popover-arrow-width); + height: var(--converse-popover-arrow-height); +} +.conversejs .popover .popover-arrow::before, .conversejs .popover .popover-arrow::after, converse-bg .popover .popover-arrow::before, converse-bg .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} +.conversejs .bs-popover-top > .popover-arrow, .conversejs .bs-popover-auto[data-popper-placement^=top] > .popover-arrow, converse-bg .bs-popover-top > .popover-arrow, converse-bg .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--converse-popover-arrow-height)) - var(--converse-popover-border-width)); +} +.conversejs .bs-popover-top > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .conversejs .bs-popover-top > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after, converse-bg .bs-popover-top > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, converse-bg .bs-popover-top > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--converse-popover-arrow-height) calc(var(--converse-popover-arrow-width) * 0.5) 0; +} +.conversejs .bs-popover-top > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, converse-bg .bs-popover-top > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--converse-popover-arrow-border); +} +.conversejs .bs-popover-top > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after, converse-bg .bs-popover-top > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--converse-popover-border-width); + border-top-color: var(--converse-popover-bg); +} +.conversejs .bs-popover-end > .popover-arrow, .conversejs .bs-popover-auto[data-popper-placement^=right] > .popover-arrow, converse-bg .bs-popover-end > .popover-arrow, converse-bg .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--converse-popover-arrow-height)) - var(--converse-popover-border-width)); + width: var(--converse-popover-arrow-height); + height: var(--converse-popover-arrow-width); +} +.conversejs .bs-popover-end > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .conversejs .bs-popover-end > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after, converse-bg .bs-popover-end > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, converse-bg .bs-popover-end > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--converse-popover-arrow-width) * 0.5) var(--converse-popover-arrow-height) calc(var(--converse-popover-arrow-width) * 0.5) 0; +} +.conversejs .bs-popover-end > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, converse-bg .bs-popover-end > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--converse-popover-arrow-border); +} +.conversejs .bs-popover-end > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after, converse-bg .bs-popover-end > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--converse-popover-border-width); + border-right-color: var(--converse-popover-bg); +} +.conversejs .bs-popover-bottom > .popover-arrow, .conversejs .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow, converse-bg .bs-popover-bottom > .popover-arrow, converse-bg .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--converse-popover-arrow-height)) - var(--converse-popover-border-width)); +} +.conversejs .bs-popover-bottom > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .conversejs .bs-popover-bottom > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after, converse-bg .bs-popover-bottom > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, converse-bg .bs-popover-bottom > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--converse-popover-arrow-width) * 0.5) var(--converse-popover-arrow-height); +} +.conversejs .bs-popover-bottom > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, converse-bg .bs-popover-bottom > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--converse-popover-arrow-border); +} +.conversejs .bs-popover-bottom > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after, converse-bg .bs-popover-bottom > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--converse-popover-border-width); + border-bottom-color: var(--converse-popover-bg); +} +.conversejs .bs-popover-bottom .popover-header::before, .conversejs .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before, converse-bg .bs-popover-bottom .popover-header::before, converse-bg .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--converse-popover-arrow-width); + margin-left: calc(-0.5 * var(--converse-popover-arrow-width)); + content: ""; + border-bottom: var(--converse-popover-border-width) solid var(--converse-popover-header-bg); +} +.conversejs .bs-popover-start > .popover-arrow, .conversejs .bs-popover-auto[data-popper-placement^=left] > .popover-arrow, converse-bg .bs-popover-start > .popover-arrow, converse-bg .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--converse-popover-arrow-height)) - var(--converse-popover-border-width)); + width: var(--converse-popover-arrow-height); + height: var(--converse-popover-arrow-width); +} +.conversejs .bs-popover-start > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .conversejs .bs-popover-start > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after, converse-bg .bs-popover-start > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, converse-bg .bs-popover-start > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--converse-popover-arrow-width) * 0.5) 0 calc(var(--converse-popover-arrow-width) * 0.5) var(--converse-popover-arrow-height); +} +.conversejs .bs-popover-start > .popover-arrow::before, .conversejs .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, converse-bg .bs-popover-start > .popover-arrow::before, converse-bg .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--converse-popover-arrow-border); +} +.conversejs .bs-popover-start > .popover-arrow::after, .conversejs .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after, converse-bg .bs-popover-start > .popover-arrow::after, converse-bg .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--converse-popover-border-width); + border-left-color: var(--converse-popover-bg); +} +.conversejs .popover-header, converse-bg .popover-header { + padding: var(--converse-popover-header-padding-y) var(--converse-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--converse-popover-header-font-size); + color: var(--converse-popover-header-color); + background-color: var(--converse-popover-header-bg); + border-bottom: var(--converse-popover-border-width) solid var(--converse-popover-border-color); + border-top-left-radius: var(--converse-popover-inner-border-radius); + border-top-right-radius: var(--converse-popover-inner-border-radius); +} +.conversejs .popover-header:empty, converse-bg .popover-header:empty { + display: none; +} +.conversejs .popover-body, converse-bg .popover-body { + padding: var(--converse-popover-body-padding-y) var(--converse-popover-body-padding-x); + color: var(--converse-popover-body-color); +} +.conversejs .spinner-grow, +.conversejs .spinner-border, converse-bg .spinner-grow, +converse-bg .spinner-border { + display: inline-block; + width: var(--converse-spinner-width); + height: var(--converse-spinner-height); + vertical-align: var(--converse-spinner-vertical-align); + border-radius: 50%; + animation: var(--converse-spinner-animation-speed) linear infinite var(--converse-spinner-animation-name); +} +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} +.conversejs .spinner-border, converse-bg .spinner-border { + --converse-spinner-width: 2rem; + --converse-spinner-height: 2rem; + --converse-spinner-vertical-align: -0.125em; + --converse-spinner-border-width: 0.25em; + --converse-spinner-animation-speed: 0.75s; + --converse-spinner-animation-name: spinner-border; + border: var(--converse-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} +.conversejs .spinner-border-sm, converse-bg .spinner-border-sm { + --converse-spinner-width: 1rem; + --converse-spinner-height: 1rem; + --converse-spinner-border-width: 0.2em; +} +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} +.conversejs .spinner-grow, converse-bg .spinner-grow { + --converse-spinner-width: 2rem; + --converse-spinner-height: 2rem; + --converse-spinner-vertical-align: -0.125em; + --converse-spinner-animation-speed: 0.75s; + --converse-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} +.conversejs .spinner-grow-sm, converse-bg .spinner-grow-sm { + --converse-spinner-width: 1rem; + --converse-spinner-height: 1rem; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .spinner-border, + .conversejs .spinner-grow, converse-bg .spinner-border, + converse-bg .spinner-grow { + --converse-spinner-animation-speed: 1.5s; + } +} +.conversejs .placeholder, converse-bg .placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} +.conversejs .placeholder.btn::before, converse-bg .placeholder.btn::before { + display: inline-block; + content: ""; +} +.conversejs .placeholder-xs, converse-bg .placeholder-xs { + min-height: 0.6em; +} +.conversejs .placeholder-sm, converse-bg .placeholder-sm { + min-height: 0.8em; +} +.conversejs .placeholder-lg, converse-bg .placeholder-lg { + min-height: 1.2em; +} +.conversejs .placeholder-glow .placeholder, converse-bg .placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; +} +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.conversejs .placeholder-wave, converse-bg .placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; +} +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} +.conversejs .clearfix::after, converse-bg .clearfix::after { + display: block; + clear: both; + content: ""; +} +.conversejs .text-bg-primary, converse-bg .text-bg-primary { + color: #fff !important; + background-color: RGBA(var(--converse-primary-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .text-bg-secondary, converse-bg .text-bg-secondary { + color: #fff !important; + background-color: RGBA(var(--converse-secondary-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .text-bg-success, converse-bg .text-bg-success { + color: #fff !important; + background-color: RGBA(var(--converse-success-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .text-bg-info, converse-bg .text-bg-info { + color: #000 !important; + background-color: RGBA(var(--converse-info-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .text-bg-warning, converse-bg .text-bg-warning { + color: #000 !important; + background-color: RGBA(var(--converse-warning-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .text-bg-danger, converse-bg .text-bg-danger { + color: #fff !important; + background-color: RGBA(var(--converse-danger-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .text-bg-light, converse-bg .text-bg-light { + color: #000 !important; + background-color: RGBA(var(--converse-light-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .text-bg-dark, converse-bg .text-bg-dark { + color: #fff !important; + background-color: RGBA(var(--converse-dark-rgb), var(--converse-bg-opacity, 1)) !important; +} +.conversejs .link-primary, converse-bg .link-primary { + color: RGBA(var(--converse-primary-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-primary-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-primary:hover, .conversejs .link-primary:focus, converse-bg .link-primary:hover, converse-bg .link-primary:focus { + color: RGBA(10, 88, 202, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(10, 88, 202, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-secondary, converse-bg .link-secondary { + color: RGBA(var(--converse-secondary-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-secondary-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-secondary:hover, .conversejs .link-secondary:focus, converse-bg .link-secondary:hover, converse-bg .link-secondary:focus { + color: RGBA(86, 94, 100, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(86, 94, 100, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-success, converse-bg .link-success { + color: RGBA(var(--converse-success-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-success-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-success:hover, .conversejs .link-success:focus, converse-bg .link-success:hover, converse-bg .link-success:focus { + color: RGBA(20, 108, 67, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(20, 108, 67, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-info, converse-bg .link-info { + color: RGBA(var(--converse-info-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-info-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-info:hover, .conversejs .link-info:focus, converse-bg .link-info:hover, converse-bg .link-info:focus { + color: RGBA(61, 213, 243, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(61, 213, 243, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-warning, converse-bg .link-warning { + color: RGBA(var(--converse-warning-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-warning-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-warning:hover, .conversejs .link-warning:focus, converse-bg .link-warning:hover, converse-bg .link-warning:focus { + color: RGBA(255, 205, 57, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 205, 57, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-danger, converse-bg .link-danger { + color: RGBA(var(--converse-danger-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-danger-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-danger:hover, .conversejs .link-danger:focus, converse-bg .link-danger:hover, converse-bg .link-danger:focus { + color: RGBA(176, 42, 55, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(176, 42, 55, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-light, converse-bg .link-light { + color: RGBA(var(--converse-light-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-light-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-light:hover, .conversejs .link-light:focus, converse-bg .link-light:hover, converse-bg .link-light:focus { + color: RGBA(249, 250, 251, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(249, 250, 251, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-dark, converse-bg .link-dark { + color: RGBA(var(--converse-dark-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-dark-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-dark:hover, .conversejs .link-dark:focus, converse-bg .link-dark:hover, converse-bg .link-dark:focus { + color: RGBA(26, 30, 33, var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(26, 30, 33, var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-body-emphasis, converse-bg .link-body-emphasis { + color: RGBA(var(--converse-emphasis-color-rgb), var(--converse-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--converse-emphasis-color-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-body-emphasis:hover, .conversejs .link-body-emphasis:focus, converse-bg .link-body-emphasis:hover, converse-bg .link-body-emphasis:focus { + color: RGBA(var(--converse-emphasis-color-rgb), var(--converse-link-opacity, 0.75)) !important; + text-decoration-color: RGBA(var(--converse-emphasis-color-rgb), var(--converse-link-underline-opacity, 0.75)) !important; +} +.conversejs .focus-ring:focus, converse-bg .focus-ring:focus { + outline: 0; + box-shadow: var(--converse-focus-ring-x, 0) var(--converse-focus-ring-y, 0) var(--converse-focus-ring-blur, 0) var(--converse-focus-ring-width) var(--converse-focus-ring-color); +} +.conversejs .icon-link, converse-bg .icon-link { + display: inline-flex; + gap: 0.375rem; + align-items: center; + text-decoration-color: rgba(var(--converse-link-color-rgb), var(--converse-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; +} +.conversejs .icon-link > .bi, converse-bg .icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; +} +@media (prefers-reduced-motion: reduce) { + .conversejs .icon-link > .bi, converse-bg .icon-link > .bi { + transition: none; + } +} +.conversejs .icon-link-hover:hover > .bi, .conversejs .icon-link-hover:focus-visible > .bi, converse-bg .icon-link-hover:hover > .bi, converse-bg .icon-link-hover:focus-visible > .bi { + transform: var(--converse-icon-link-transform, translate3d(0.25em, 0, 0)); +} +.conversejs .ratio, converse-bg .ratio { + position: relative; + width: 100%; +} +.conversejs .ratio::before, converse-bg .ratio::before { + display: block; + padding-top: var(--converse-aspect-ratio); + content: ""; +} +.conversejs .ratio > *, converse-bg .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.conversejs .ratio-1x1, converse-bg .ratio-1x1 { + --converse-aspect-ratio: 100%; +} +.conversejs .ratio-4x3, converse-bg .ratio-4x3 { + --converse-aspect-ratio: 75%; +} +.conversejs .ratio-16x9, converse-bg .ratio-16x9 { + --converse-aspect-ratio: 56.25%; +} +.conversejs .ratio-21x9, converse-bg .ratio-21x9 { + --converse-aspect-ratio: 42.8571428571%; +} +.conversejs .fixed-top, converse-bg .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} +.conversejs .fixed-bottom, converse-bg .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} +.conversejs .sticky-top, converse-bg .sticky-top { + position: sticky; + top: 0; + z-index: 1020; +} +.conversejs .sticky-bottom, converse-bg .sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; +} +@media (min-width: 576px) { + .conversejs .sticky-sm-top, converse-bg .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; + } + .conversejs .sticky-sm-bottom, converse-bg .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .conversejs .sticky-md-top, converse-bg .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; + } + .conversejs .sticky-md-bottom, converse-bg .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .conversejs .sticky-lg-top, converse-bg .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; + } + .conversejs .sticky-lg-bottom, converse-bg .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .conversejs .sticky-xl-top, converse-bg .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; + } + .conversejs .sticky-xl-bottom, converse-bg .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .conversejs .sticky-xxl-top, converse-bg .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; + } + .conversejs .sticky-xxl-bottom, converse-bg .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +.conversejs .hstack, converse-bg .hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} +.conversejs .vstack, converse-bg .vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} +.conversejs .visually-hidden, +.conversejs .visually-hidden-focusable:not(:focus):not(:focus-within), converse-bg .visually-hidden, +converse-bg .visually-hidden-focusable:not(:focus):not(:focus-within) { + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} +.conversejs .visually-hidden:not(caption), +.conversejs .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption), converse-bg .visually-hidden:not(caption), +converse-bg .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { + position: absolute !important; +} +.conversejs .stretched-link::after, converse-bg .stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} +.conversejs .text-truncate, converse-bg .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.conversejs .vr, converse-bg .vr { + display: inline-block; + align-self: stretch; + width: var(--converse-border-width); + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} +.conversejs .align-baseline, converse-bg .align-baseline { + vertical-align: baseline !important; +} +.conversejs .align-top, converse-bg .align-top { + vertical-align: top !important; +} +.conversejs .align-middle, converse-bg .align-middle { + vertical-align: middle !important; +} +.conversejs .align-bottom, converse-bg .align-bottom { + vertical-align: bottom !important; +} +.conversejs .align-text-bottom, converse-bg .align-text-bottom { + vertical-align: text-bottom !important; +} +.conversejs .align-text-top, converse-bg .align-text-top { + vertical-align: text-top !important; +} +.conversejs .float-start, converse-bg .float-start { + float: left !important; +} +.conversejs .float-end, converse-bg .float-end { + float: right !important; +} +.conversejs .float-none, converse-bg .float-none { + float: none !important; +} +.conversejs .object-fit-contain, converse-bg .object-fit-contain { + -o-object-fit: contain !important; + object-fit: contain !important; +} +.conversejs .object-fit-cover, converse-bg .object-fit-cover { + -o-object-fit: cover !important; + object-fit: cover !important; +} +.conversejs .object-fit-fill, converse-bg .object-fit-fill { + -o-object-fit: fill !important; + object-fit: fill !important; +} +.conversejs .object-fit-scale, converse-bg .object-fit-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; +} +.conversejs .object-fit-none, converse-bg .object-fit-none { + -o-object-fit: none !important; + object-fit: none !important; +} +.conversejs .opacity-0, converse-bg .opacity-0 { + opacity: 0 !important; +} +.conversejs .opacity-25, converse-bg .opacity-25 { + opacity: 0.25 !important; +} +.conversejs .opacity-50, converse-bg .opacity-50 { + opacity: 0.5 !important; +} +.conversejs .opacity-75, converse-bg .opacity-75 { + opacity: 0.75 !important; +} +.conversejs .opacity-100, converse-bg .opacity-100 { + opacity: 1 !important; +} +.conversejs .overflow-auto, converse-bg .overflow-auto { + overflow: auto !important; +} +.conversejs .overflow-hidden, converse-bg .overflow-hidden { + overflow: hidden !important; +} +.conversejs .overflow-visible, converse-bg .overflow-visible { + overflow: visible !important; +} +.conversejs .overflow-scroll, converse-bg .overflow-scroll { + overflow: scroll !important; +} +.conversejs .overflow-x-auto, converse-bg .overflow-x-auto { + overflow-x: auto !important; +} +.conversejs .overflow-x-hidden, converse-bg .overflow-x-hidden { + overflow-x: hidden !important; +} +.conversejs .overflow-x-visible, converse-bg .overflow-x-visible { + overflow-x: visible !important; +} +.conversejs .overflow-x-scroll, converse-bg .overflow-x-scroll { + overflow-x: scroll !important; +} +.conversejs .overflow-y-auto, converse-bg .overflow-y-auto { + overflow-y: auto !important; +} +.conversejs .overflow-y-hidden, converse-bg .overflow-y-hidden { + overflow-y: hidden !important; +} +.conversejs .overflow-y-visible, converse-bg .overflow-y-visible { + overflow-y: visible !important; +} +.conversejs .overflow-y-scroll, converse-bg .overflow-y-scroll { + overflow-y: scroll !important; +} +.conversejs .d-inline, converse-bg .d-inline { + display: inline !important; +} +.conversejs .d-inline-block, converse-bg .d-inline-block { + display: inline-block !important; +} +.conversejs .d-block, converse-bg .d-block { + display: block !important; +} +.conversejs .d-grid, converse-bg .d-grid { + display: grid !important; +} +.conversejs .d-inline-grid, converse-bg .d-inline-grid { + display: inline-grid !important; +} +.conversejs .d-table, converse-bg .d-table { + display: table !important; +} +.conversejs .d-table-row, converse-bg .d-table-row { + display: table-row !important; +} +.conversejs .d-table-cell, converse-bg .d-table-cell { + display: table-cell !important; +} +.conversejs .d-flex, converse-bg .d-flex { + display: flex !important; +} +.conversejs .d-inline-flex, converse-bg .d-inline-flex { + display: inline-flex !important; +} +.conversejs .d-none, converse-bg .d-none { + display: none !important; +} +.conversejs .shadow, converse-bg .shadow { + box-shadow: var(--converse-box-shadow) !important; +} +.conversejs .shadow-sm, converse-bg .shadow-sm { + box-shadow: var(--converse-box-shadow-sm) !important; +} +.conversejs .shadow-lg, converse-bg .shadow-lg { + box-shadow: var(--converse-box-shadow-lg) !important; +} +.conversejs .shadow-none, converse-bg .shadow-none { + box-shadow: none !important; +} +.conversejs .focus-ring-primary, converse-bg .focus-ring-primary { + --converse-focus-ring-color: rgba(var(--converse-primary-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .focus-ring-secondary, converse-bg .focus-ring-secondary { + --converse-focus-ring-color: rgba(var(--converse-secondary-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .focus-ring-success, converse-bg .focus-ring-success { + --converse-focus-ring-color: rgba(var(--converse-success-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .focus-ring-info, converse-bg .focus-ring-info { + --converse-focus-ring-color: rgba(var(--converse-info-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .focus-ring-warning, converse-bg .focus-ring-warning { + --converse-focus-ring-color: rgba(var(--converse-warning-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .focus-ring-danger, converse-bg .focus-ring-danger { + --converse-focus-ring-color: rgba(var(--converse-danger-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .focus-ring-light, converse-bg .focus-ring-light { + --converse-focus-ring-color: rgba(var(--converse-light-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .focus-ring-dark, converse-bg .focus-ring-dark { + --converse-focus-ring-color: rgba(var(--converse-dark-rgb), var(--converse-focus-ring-opacity)); +} +.conversejs .position-static, converse-bg .position-static { + position: static !important; +} +.conversejs .position-relative, converse-bg .position-relative { + position: relative !important; +} +.conversejs .position-absolute, converse-bg .position-absolute { + position: absolute !important; +} +.conversejs .position-fixed, converse-bg .position-fixed { + position: fixed !important; +} +.conversejs .position-sticky, converse-bg .position-sticky { + position: sticky !important; +} +.conversejs .top-0, converse-bg .top-0 { + top: 0 !important; +} +.conversejs .top-50, converse-bg .top-50 { + top: 50% !important; +} +.conversejs .top-100, converse-bg .top-100 { + top: 100% !important; +} +.conversejs .bottom-0, converse-bg .bottom-0 { + bottom: 0 !important; +} +.conversejs .bottom-50, converse-bg .bottom-50 { + bottom: 50% !important; +} +.conversejs .bottom-100, converse-bg .bottom-100 { + bottom: 100% !important; +} +.conversejs .start-0, converse-bg .start-0 { + left: 0 !important; +} +.conversejs .start-50, converse-bg .start-50 { + left: 50% !important; +} +.conversejs .start-100, converse-bg .start-100 { + left: 100% !important; +} +.conversejs .end-0, converse-bg .end-0 { + right: 0 !important; +} +.conversejs .end-50, converse-bg .end-50 { + right: 50% !important; +} +.conversejs .end-100, converse-bg .end-100 { + right: 100% !important; +} +.conversejs .translate-middle, converse-bg .translate-middle { + transform: translate(-50%, -50%) !important; +} +.conversejs .translate-middle-x, converse-bg .translate-middle-x { + transform: translateX(-50%) !important; +} +.conversejs .translate-middle-y, converse-bg .translate-middle-y { + transform: translateY(-50%) !important; +} +.conversejs .border, converse-bg .border { + border: var(--converse-border-width) var(--converse-border-style) var(--converse-border-color) !important; +} +.conversejs .border-0, converse-bg .border-0 { + border: 0 !important; +} +.conversejs .border-top, converse-bg .border-top { + border-top: var(--converse-border-width) var(--converse-border-style) var(--converse-border-color) !important; +} +.conversejs .border-top-0, converse-bg .border-top-0 { + border-top: 0 !important; +} +.conversejs .border-end, converse-bg .border-end { + border-right: var(--converse-border-width) var(--converse-border-style) var(--converse-border-color) !important; +} +.conversejs .border-end-0, converse-bg .border-end-0 { + border-right: 0 !important; +} +.conversejs .border-bottom, converse-bg .border-bottom { + border-bottom: var(--converse-border-width) var(--converse-border-style) var(--converse-border-color) !important; +} +.conversejs .border-bottom-0, converse-bg .border-bottom-0 { + border-bottom: 0 !important; +} +.conversejs .border-start, converse-bg .border-start { + border-left: var(--converse-border-width) var(--converse-border-style) var(--converse-border-color) !important; +} +.conversejs .border-start-0, converse-bg .border-start-0 { + border-left: 0 !important; +} +.conversejs .border-primary, converse-bg .border-primary { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-primary-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-secondary, converse-bg .border-secondary { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-secondary-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-success, converse-bg .border-success { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-success-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-info, converse-bg .border-info { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-info-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-warning, converse-bg .border-warning { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-warning-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-danger, converse-bg .border-danger { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-danger-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-light, converse-bg .border-light { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-light-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-dark, converse-bg .border-dark { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-dark-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-black, converse-bg .border-black { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-black-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-white, converse-bg .border-white { + --converse-border-opacity: 1; + border-color: rgba(var(--converse-white-rgb), var(--converse-border-opacity)) !important; +} +.conversejs .border-primary-subtle, converse-bg .border-primary-subtle { + border-color: var(--converse-primary-border-subtle) !important; +} +.conversejs .border-secondary-subtle, converse-bg .border-secondary-subtle { + border-color: var(--converse-secondary-border-subtle) !important; +} +.conversejs .border-success-subtle, converse-bg .border-success-subtle { + border-color: var(--converse-success-border-subtle) !important; +} +.conversejs .border-info-subtle, converse-bg .border-info-subtle { + border-color: var(--converse-info-border-subtle) !important; +} +.conversejs .border-warning-subtle, converse-bg .border-warning-subtle { + border-color: var(--converse-warning-border-subtle) !important; +} +.conversejs .border-danger-subtle, converse-bg .border-danger-subtle { + border-color: var(--converse-danger-border-subtle) !important; +} +.conversejs .border-light-subtle, converse-bg .border-light-subtle { + border-color: var(--converse-light-border-subtle) !important; +} +.conversejs .border-dark-subtle, converse-bg .border-dark-subtle { + border-color: var(--converse-dark-border-subtle) !important; +} +.conversejs .border-1, converse-bg .border-1 { + border-width: 1px !important; +} +.conversejs .border-2, converse-bg .border-2 { + border-width: 2px !important; +} +.conversejs .border-3, converse-bg .border-3 { + border-width: 3px !important; +} +.conversejs .border-4, converse-bg .border-4 { + border-width: 4px !important; +} +.conversejs .border-5, converse-bg .border-5 { + border-width: 5px !important; +} +.conversejs .border-opacity-10, converse-bg .border-opacity-10 { + --converse-border-opacity: 0.1; +} +.conversejs .border-opacity-25, converse-bg .border-opacity-25 { + --converse-border-opacity: 0.25; +} +.conversejs .border-opacity-50, converse-bg .border-opacity-50 { + --converse-border-opacity: 0.5; +} +.conversejs .border-opacity-75, converse-bg .border-opacity-75 { + --converse-border-opacity: 0.75; +} +.conversejs .border-opacity-100, converse-bg .border-opacity-100 { + --converse-border-opacity: 1; +} +.conversejs .w-25, converse-bg .w-25 { + width: 25% !important; +} +.conversejs .w-50, converse-bg .w-50 { + width: 50% !important; +} +.conversejs .w-75, converse-bg .w-75 { + width: 75% !important; +} +.conversejs .w-100, converse-bg .w-100 { + width: 100% !important; +} +.conversejs .w-auto, converse-bg .w-auto { + width: auto !important; +} +.conversejs .mw-100, converse-bg .mw-100 { + max-width: 100% !important; +} +.conversejs .vw-100, converse-bg .vw-100 { + width: 100vw !important; +} +.conversejs .min-vw-100, converse-bg .min-vw-100 { + min-width: 100vw !important; +} +.conversejs .h-25, converse-bg .h-25 { + height: 25% !important; +} +.conversejs .h-50, converse-bg .h-50 { + height: 50% !important; +} +.conversejs .h-75, converse-bg .h-75 { + height: 75% !important; +} +.conversejs .h-100, converse-bg .h-100 { + height: 100% !important; +} +.conversejs .h-auto, converse-bg .h-auto { + height: auto !important; +} +.conversejs .mh-100, converse-bg .mh-100 { + max-height: 100% !important; +} +.conversejs .vh-100, converse-bg .vh-100 { + height: 100vh !important; +} +.conversejs .min-vh-100, converse-bg .min-vh-100 { + min-height: 100vh !important; +} +.conversejs .flex-fill, converse-bg .flex-fill { + flex: 1 1 auto !important; +} +.conversejs .flex-row, converse-bg .flex-row { + flex-direction: row !important; +} +.conversejs .flex-column, converse-bg .flex-column { + flex-direction: column !important; +} +.conversejs .flex-row-reverse, converse-bg .flex-row-reverse { + flex-direction: row-reverse !important; +} +.conversejs .flex-column-reverse, converse-bg .flex-column-reverse { + flex-direction: column-reverse !important; +} +.conversejs .flex-grow-0, converse-bg .flex-grow-0 { + flex-grow: 0 !important; +} +.conversejs .flex-grow-1, converse-bg .flex-grow-1 { + flex-grow: 1 !important; +} +.conversejs .flex-shrink-0, converse-bg .flex-shrink-0 { + flex-shrink: 0 !important; +} +.conversejs .flex-shrink-1, converse-bg .flex-shrink-1 { + flex-shrink: 1 !important; +} +.conversejs .flex-wrap, converse-bg .flex-wrap { + flex-wrap: wrap !important; +} +.conversejs .flex-nowrap, converse-bg .flex-nowrap { + flex-wrap: nowrap !important; +} +.conversejs .flex-wrap-reverse, converse-bg .flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} +.conversejs .justify-content-start, converse-bg .justify-content-start { + justify-content: flex-start !important; +} +.conversejs .justify-content-end, converse-bg .justify-content-end { + justify-content: flex-end !important; +} +.conversejs .justify-content-center, converse-bg .justify-content-center { + justify-content: center !important; +} +.conversejs .justify-content-between, converse-bg .justify-content-between { + justify-content: space-between !important; +} +.conversejs .justify-content-around, converse-bg .justify-content-around { + justify-content: space-around !important; +} +.conversejs .justify-content-evenly, converse-bg .justify-content-evenly { + justify-content: space-evenly !important; +} +.conversejs .align-items-start, converse-bg .align-items-start { + align-items: flex-start !important; +} +.conversejs .align-items-end, converse-bg .align-items-end { + align-items: flex-end !important; +} +.conversejs .align-items-center, converse-bg .align-items-center { + align-items: center !important; +} +.conversejs .align-items-baseline, converse-bg .align-items-baseline { + align-items: baseline !important; +} +.conversejs .align-items-stretch, converse-bg .align-items-stretch { + align-items: stretch !important; +} +.conversejs .align-content-start, converse-bg .align-content-start { + align-content: flex-start !important; +} +.conversejs .align-content-end, converse-bg .align-content-end { + align-content: flex-end !important; +} +.conversejs .align-content-center, converse-bg .align-content-center { + align-content: center !important; +} +.conversejs .align-content-between, converse-bg .align-content-between { + align-content: space-between !important; +} +.conversejs .align-content-around, converse-bg .align-content-around { + align-content: space-around !important; +} +.conversejs .align-content-stretch, converse-bg .align-content-stretch { + align-content: stretch !important; +} +.conversejs .align-self-auto, converse-bg .align-self-auto { + align-self: auto !important; +} +.conversejs .align-self-start, converse-bg .align-self-start { + align-self: flex-start !important; +} +.conversejs .align-self-end, converse-bg .align-self-end { + align-self: flex-end !important; +} +.conversejs .align-self-center, converse-bg .align-self-center { + align-self: center !important; +} +.conversejs .align-self-baseline, converse-bg .align-self-baseline { + align-self: baseline !important; +} +.conversejs .align-self-stretch, converse-bg .align-self-stretch { + align-self: stretch !important; +} +.conversejs .order-first, converse-bg .order-first { + order: -1 !important; +} +.conversejs .order-0, converse-bg .order-0 { + order: 0 !important; +} +.conversejs .order-1, converse-bg .order-1 { + order: 1 !important; +} +.conversejs .order-2, converse-bg .order-2 { + order: 2 !important; +} +.conversejs .order-3, converse-bg .order-3 { + order: 3 !important; +} +.conversejs .order-4, converse-bg .order-4 { + order: 4 !important; +} +.conversejs .order-5, converse-bg .order-5 { + order: 5 !important; +} +.conversejs .order-last, converse-bg .order-last { + order: 6 !important; +} +.conversejs .m-0, converse-bg .m-0 { + margin: 0 !important; +} +.conversejs .m-1, converse-bg .m-1 { + margin: 0.25rem !important; +} +.conversejs .m-2, converse-bg .m-2 { + margin: 0.5rem !important; +} +.conversejs .m-3, converse-bg .m-3 { + margin: 1rem !important; +} +.conversejs .m-4, converse-bg .m-4 { + margin: 1.5rem !important; +} +.conversejs .m-5, converse-bg .m-5 { + margin: 3rem !important; +} +.conversejs .m-auto, converse-bg .m-auto { + margin: auto !important; +} +.conversejs .mx-0, converse-bg .mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} +.conversejs .mx-1, converse-bg .mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} +.conversejs .mx-2, converse-bg .mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} +.conversejs .mx-3, converse-bg .mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} +.conversejs .mx-4, converse-bg .mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} +.conversejs .mx-5, converse-bg .mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} +.conversejs .mx-auto, converse-bg .mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} +.conversejs .my-0, converse-bg .my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.conversejs .my-1, converse-bg .my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} +.conversejs .my-2, converse-bg .my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} +.conversejs .my-3, converse-bg .my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} +.conversejs .my-4, converse-bg .my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} +.conversejs .my-5, converse-bg .my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} +.conversejs .my-auto, converse-bg .my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} +.conversejs .mt-0, converse-bg .mt-0 { + margin-top: 0 !important; +} +.conversejs .mt-1, converse-bg .mt-1 { + margin-top: 0.25rem !important; +} +.conversejs .mt-2, converse-bg .mt-2 { + margin-top: 0.5rem !important; +} +.conversejs .mt-3, converse-bg .mt-3 { + margin-top: 1rem !important; +} +.conversejs .mt-4, converse-bg .mt-4 { + margin-top: 1.5rem !important; +} +.conversejs .mt-5, converse-bg .mt-5 { + margin-top: 3rem !important; +} +.conversejs .mt-auto, converse-bg .mt-auto { + margin-top: auto !important; +} +.conversejs .me-0, converse-bg .me-0 { + margin-right: 0 !important; +} +.conversejs .me-1, converse-bg .me-1 { + margin-right: 0.25rem !important; +} +.conversejs .me-2, converse-bg .me-2 { + margin-right: 0.5rem !important; +} +.conversejs .me-3, converse-bg .me-3 { + margin-right: 1rem !important; +} +.conversejs .me-4, converse-bg .me-4 { + margin-right: 1.5rem !important; +} +.conversejs .me-5, converse-bg .me-5 { + margin-right: 3rem !important; +} +.conversejs .me-auto, converse-bg .me-auto { + margin-right: auto !important; +} +.conversejs .mb-0, converse-bg .mb-0 { + margin-bottom: 0 !important; +} +.conversejs .mb-1, converse-bg .mb-1 { + margin-bottom: 0.25rem !important; +} +.conversejs .mb-2, converse-bg .mb-2 { + margin-bottom: 0.5rem !important; +} +.conversejs .mb-3, converse-bg .mb-3 { + margin-bottom: 1rem !important; +} +.conversejs .mb-4, converse-bg .mb-4 { + margin-bottom: 1.5rem !important; +} +.conversejs .mb-5, converse-bg .mb-5 { + margin-bottom: 3rem !important; +} +.conversejs .mb-auto, converse-bg .mb-auto { + margin-bottom: auto !important; +} +.conversejs .ms-0, converse-bg .ms-0 { + margin-left: 0 !important; +} +.conversejs .ms-1, converse-bg .ms-1 { + margin-left: 0.25rem !important; +} +.conversejs .ms-2, converse-bg .ms-2 { + margin-left: 0.5rem !important; +} +.conversejs .ms-3, converse-bg .ms-3 { + margin-left: 1rem !important; +} +.conversejs .ms-4, converse-bg .ms-4 { + margin-left: 1.5rem !important; +} +.conversejs .ms-5, converse-bg .ms-5 { + margin-left: 3rem !important; +} +.conversejs .ms-auto, converse-bg .ms-auto { + margin-left: auto !important; +} +.conversejs .p-0, converse-bg .p-0 { + padding: 0 !important; +} +.conversejs .p-1, converse-bg .p-1 { + padding: 0.25rem !important; +} +.conversejs .p-2, converse-bg .p-2 { + padding: 0.5rem !important; +} +.conversejs .p-3, converse-bg .p-3 { + padding: 1rem !important; +} +.conversejs .p-4, converse-bg .p-4 { + padding: 1.5rem !important; +} +.conversejs .p-5, converse-bg .p-5 { + padding: 3rem !important; +} +.conversejs .px-0, converse-bg .px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} +.conversejs .px-1, converse-bg .px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} +.conversejs .px-2, converse-bg .px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} +.conversejs .px-3, converse-bg .px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} +.conversejs .px-4, converse-bg .px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} +.conversejs .px-5, converse-bg .px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} +.conversejs .py-0, converse-bg .py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.conversejs .py-1, converse-bg .py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} +.conversejs .py-2, converse-bg .py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} +.conversejs .py-3, converse-bg .py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} +.conversejs .py-4, converse-bg .py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} +.conversejs .py-5, converse-bg .py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} +.conversejs .pt-0, converse-bg .pt-0 { + padding-top: 0 !important; +} +.conversejs .pt-1, converse-bg .pt-1 { + padding-top: 0.25rem !important; +} +.conversejs .pt-2, converse-bg .pt-2 { + padding-top: 0.5rem !important; +} +.conversejs .pt-3, converse-bg .pt-3 { + padding-top: 1rem !important; +} +.conversejs .pt-4, converse-bg .pt-4 { + padding-top: 1.5rem !important; +} +.conversejs .pt-5, converse-bg .pt-5 { + padding-top: 3rem !important; +} +.conversejs .pe-0, converse-bg .pe-0 { + padding-right: 0 !important; +} +.conversejs .pe-1, converse-bg .pe-1 { + padding-right: 0.25rem !important; +} +.conversejs .pe-2, converse-bg .pe-2 { + padding-right: 0.5rem !important; +} +.conversejs .pe-3, converse-bg .pe-3 { + padding-right: 1rem !important; +} +.conversejs .pe-4, converse-bg .pe-4 { + padding-right: 1.5rem !important; +} +.conversejs .pe-5, converse-bg .pe-5 { + padding-right: 3rem !important; +} +.conversejs .pb-0, converse-bg .pb-0 { + padding-bottom: 0 !important; +} +.conversejs .pb-1, converse-bg .pb-1 { + padding-bottom: 0.25rem !important; +} +.conversejs .pb-2, converse-bg .pb-2 { + padding-bottom: 0.5rem !important; +} +.conversejs .pb-3, converse-bg .pb-3 { + padding-bottom: 1rem !important; +} +.conversejs .pb-4, converse-bg .pb-4 { + padding-bottom: 1.5rem !important; +} +.conversejs .pb-5, converse-bg .pb-5 { + padding-bottom: 3rem !important; +} +.conversejs .ps-0, converse-bg .ps-0 { + padding-left: 0 !important; +} +.conversejs .ps-1, converse-bg .ps-1 { + padding-left: 0.25rem !important; +} +.conversejs .ps-2, converse-bg .ps-2 { + padding-left: 0.5rem !important; +} +.conversejs .ps-3, converse-bg .ps-3 { + padding-left: 1rem !important; +} +.conversejs .ps-4, converse-bg .ps-4 { + padding-left: 1.5rem !important; +} +.conversejs .ps-5, converse-bg .ps-5 { + padding-left: 3rem !important; +} +.conversejs .gap-0, converse-bg .gap-0 { + gap: 0 !important; +} +.conversejs .gap-1, converse-bg .gap-1 { + gap: 0.25rem !important; +} +.conversejs .gap-2, converse-bg .gap-2 { + gap: 0.5rem !important; +} +.conversejs .gap-3, converse-bg .gap-3 { + gap: 1rem !important; +} +.conversejs .gap-4, converse-bg .gap-4 { + gap: 1.5rem !important; +} +.conversejs .gap-5, converse-bg .gap-5 { + gap: 3rem !important; +} +.conversejs .row-gap-0, converse-bg .row-gap-0 { + row-gap: 0 !important; +} +.conversejs .row-gap-1, converse-bg .row-gap-1 { + row-gap: 0.25rem !important; +} +.conversejs .row-gap-2, converse-bg .row-gap-2 { + row-gap: 0.5rem !important; +} +.conversejs .row-gap-3, converse-bg .row-gap-3 { + row-gap: 1rem !important; +} +.conversejs .row-gap-4, converse-bg .row-gap-4 { + row-gap: 1.5rem !important; +} +.conversejs .row-gap-5, converse-bg .row-gap-5 { + row-gap: 3rem !important; +} +.conversejs .column-gap-0, converse-bg .column-gap-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; +} +.conversejs .column-gap-1, converse-bg .column-gap-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; +} +.conversejs .column-gap-2, converse-bg .column-gap-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; +} +.conversejs .column-gap-3, converse-bg .column-gap-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; +} +.conversejs .column-gap-4, converse-bg .column-gap-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; +} +.conversejs .column-gap-5, converse-bg .column-gap-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; +} +.conversejs .font-monospace, converse-bg .font-monospace { + font-family: var(--converse-font-monospace) !important; +} +.conversejs .fs-1, converse-bg .fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} +.conversejs .fs-2, converse-bg .fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} +.conversejs .fs-3, converse-bg .fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} +.conversejs .fs-4, converse-bg .fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} +.conversejs .fs-5, converse-bg .fs-5 { + font-size: 1.25rem !important; +} +.conversejs .fs-6, converse-bg .fs-6 { + font-size: 1rem !important; +} +.conversejs .fst-italic, converse-bg .fst-italic { + font-style: italic !important; +} +.conversejs .fst-normal, converse-bg .fst-normal { + font-style: normal !important; +} +.conversejs .fw-lighter, converse-bg .fw-lighter { + font-weight: lighter !important; +} +.conversejs .fw-light, converse-bg .fw-light { + font-weight: 300 !important; +} +.conversejs .fw-normal, converse-bg .fw-normal { + font-weight: 400 !important; +} +.conversejs .fw-medium, converse-bg .fw-medium { + font-weight: 500 !important; +} +.conversejs .fw-semibold, converse-bg .fw-semibold { + font-weight: 600 !important; +} +.conversejs .fw-bold, converse-bg .fw-bold { + font-weight: 700 !important; +} +.conversejs .fw-bolder, converse-bg .fw-bolder { + font-weight: bolder !important; +} +.conversejs .lh-1, converse-bg .lh-1 { + line-height: 1 !important; +} +.conversejs .lh-sm, converse-bg .lh-sm { + line-height: 1.25 !important; +} +.conversejs .lh-base, converse-bg .lh-base { + line-height: 1.5 !important; +} +.conversejs .lh-lg, converse-bg .lh-lg { + line-height: 2 !important; +} +.conversejs .text-start, converse-bg .text-start { + text-align: left !important; +} +.conversejs .text-end, converse-bg .text-end { + text-align: right !important; +} +.conversejs .text-center, converse-bg .text-center { + text-align: center !important; +} +.conversejs .text-decoration-none, converse-bg .text-decoration-none { + text-decoration: none !important; +} +.conversejs .text-decoration-underline, converse-bg .text-decoration-underline { + text-decoration: underline !important; +} +.conversejs .text-decoration-line-through, converse-bg .text-decoration-line-through { + text-decoration: line-through !important; +} +.conversejs .text-lowercase, converse-bg .text-lowercase { + text-transform: lowercase !important; +} +.conversejs .text-uppercase, converse-bg .text-uppercase { + text-transform: uppercase !important; +} +.conversejs .text-capitalize, converse-bg .text-capitalize { + text-transform: capitalize !important; +} +.conversejs .text-wrap, converse-bg .text-wrap { + white-space: normal !important; +} +.conversejs .text-nowrap, converse-bg .text-nowrap { + white-space: nowrap !important; +} +.conversejs .text-break, converse-bg .text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} +.conversejs .text-primary, converse-bg .text-primary { + --converse-text-opacity: 1; + color: rgba(var(--converse-primary-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-secondary, converse-bg .text-secondary { + --converse-text-opacity: 1; + color: rgba(var(--converse-secondary-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-success, converse-bg .text-success { + --converse-text-opacity: 1; + color: rgba(var(--converse-success-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-info, converse-bg .text-info { + --converse-text-opacity: 1; + color: rgba(var(--converse-info-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-warning, converse-bg .text-warning { + --converse-text-opacity: 1; + color: rgba(var(--converse-warning-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-danger, converse-bg .text-danger { + --converse-text-opacity: 1; + color: rgba(var(--converse-danger-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-light, converse-bg .text-light { + --converse-text-opacity: 1; + color: rgba(var(--converse-light-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-dark, converse-bg .text-dark { + --converse-text-opacity: 1; + color: rgba(var(--converse-dark-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-black, converse-bg .text-black { + --converse-text-opacity: 1; + color: rgba(var(--converse-black-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-white, converse-bg .text-white { + --converse-text-opacity: 1; + color: rgba(var(--converse-white-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-body, converse-bg .text-body { + --converse-text-opacity: 1; + color: rgba(var(--converse-body-color-rgb), var(--converse-text-opacity)) !important; +} +.conversejs .text-muted, converse-bg .text-muted { + --converse-text-opacity: 1; + color: var(--converse-secondary-color) !important; +} +.conversejs .text-black-50, converse-bg .text-black-50 { + --converse-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} +.conversejs .text-white-50, converse-bg .text-white-50 { + --converse-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} +.conversejs .text-body-secondary, converse-bg .text-body-secondary { + --converse-text-opacity: 1; + color: var(--converse-secondary-color) !important; +} +.conversejs .text-body-tertiary, converse-bg .text-body-tertiary { + --converse-text-opacity: 1; + color: var(--converse-tertiary-color) !important; +} +.conversejs .text-body-emphasis, converse-bg .text-body-emphasis { + --converse-text-opacity: 1; + color: var(--converse-emphasis-color) !important; +} +.conversejs .text-reset, converse-bg .text-reset { + --converse-text-opacity: 1; + color: inherit !important; +} +.conversejs .text-opacity-25, converse-bg .text-opacity-25 { + --converse-text-opacity: 0.25; +} +.conversejs .text-opacity-50, converse-bg .text-opacity-50 { + --converse-text-opacity: 0.5; +} +.conversejs .text-opacity-75, converse-bg .text-opacity-75 { + --converse-text-opacity: 0.75; +} +.conversejs .text-opacity-100, converse-bg .text-opacity-100 { + --converse-text-opacity: 1; +} +.conversejs .text-primary-emphasis, converse-bg .text-primary-emphasis { + color: var(--converse-primary-text-emphasis) !important; +} +.conversejs .text-secondary-emphasis, converse-bg .text-secondary-emphasis { + color: var(--converse-secondary-text-emphasis) !important; +} +.conversejs .text-success-emphasis, converse-bg .text-success-emphasis { + color: var(--converse-success-text-emphasis) !important; +} +.conversejs .text-info-emphasis, converse-bg .text-info-emphasis { + color: var(--converse-info-text-emphasis) !important; +} +.conversejs .text-warning-emphasis, converse-bg .text-warning-emphasis { + color: var(--converse-warning-text-emphasis) !important; +} +.conversejs .text-danger-emphasis, converse-bg .text-danger-emphasis { + color: var(--converse-danger-text-emphasis) !important; +} +.conversejs .text-light-emphasis, converse-bg .text-light-emphasis { + color: var(--converse-light-text-emphasis) !important; +} +.conversejs .text-dark-emphasis, converse-bg .text-dark-emphasis { + color: var(--converse-dark-text-emphasis) !important; +} +.conversejs .link-opacity-10, converse-bg .link-opacity-10 { + --converse-link-opacity: 0.1; +} +.conversejs .link-opacity-10-hover:hover, converse-bg .link-opacity-10-hover:hover { + --converse-link-opacity: 0.1; +} +.conversejs .link-opacity-25, converse-bg .link-opacity-25 { + --converse-link-opacity: 0.25; +} +.conversejs .link-opacity-25-hover:hover, converse-bg .link-opacity-25-hover:hover { + --converse-link-opacity: 0.25; +} +.conversejs .link-opacity-50, converse-bg .link-opacity-50 { + --converse-link-opacity: 0.5; +} +.conversejs .link-opacity-50-hover:hover, converse-bg .link-opacity-50-hover:hover { + --converse-link-opacity: 0.5; +} +.conversejs .link-opacity-75, converse-bg .link-opacity-75 { + --converse-link-opacity: 0.75; +} +.conversejs .link-opacity-75-hover:hover, converse-bg .link-opacity-75-hover:hover { + --converse-link-opacity: 0.75; +} +.conversejs .link-opacity-100, converse-bg .link-opacity-100 { + --converse-link-opacity: 1; +} +.conversejs .link-opacity-100-hover:hover, converse-bg .link-opacity-100-hover:hover { + --converse-link-opacity: 1; +} +.conversejs .link-offset-1, converse-bg .link-offset-1 { + text-underline-offset: 0.125em !important; +} +.conversejs .link-offset-1-hover:hover, converse-bg .link-offset-1-hover:hover { + text-underline-offset: 0.125em !important; +} +.conversejs .link-offset-2, converse-bg .link-offset-2 { + text-underline-offset: 0.25em !important; +} +.conversejs .link-offset-2-hover:hover, converse-bg .link-offset-2-hover:hover { + text-underline-offset: 0.25em !important; +} +.conversejs .link-offset-3, converse-bg .link-offset-3 { + text-underline-offset: 0.375em !important; +} +.conversejs .link-offset-3-hover:hover, converse-bg .link-offset-3-hover:hover { + text-underline-offset: 0.375em !important; +} +.conversejs .link-underline-primary, converse-bg .link-underline-primary { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-primary-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline-secondary, converse-bg .link-underline-secondary { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-secondary-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline-success, converse-bg .link-underline-success { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-success-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline-info, converse-bg .link-underline-info { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-info-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline-warning, converse-bg .link-underline-warning { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-warning-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline-danger, converse-bg .link-underline-danger { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-danger-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline-light, converse-bg .link-underline-light { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-light-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline-dark, converse-bg .link-underline-dark { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-dark-rgb), var(--converse-link-underline-opacity)) !important; +} +.conversejs .link-underline, converse-bg .link-underline { + --converse-link-underline-opacity: 1; + text-decoration-color: rgba(var(--converse-link-color-rgb), var(--converse-link-underline-opacity, 1)) !important; +} +.conversejs .link-underline-opacity-0, converse-bg .link-underline-opacity-0 { + --converse-link-underline-opacity: 0; +} +.conversejs .link-underline-opacity-0-hover:hover, converse-bg .link-underline-opacity-0-hover:hover { + --converse-link-underline-opacity: 0; +} +.conversejs .link-underline-opacity-10, converse-bg .link-underline-opacity-10 { + --converse-link-underline-opacity: 0.1; +} +.conversejs .link-underline-opacity-10-hover:hover, converse-bg .link-underline-opacity-10-hover:hover { + --converse-link-underline-opacity: 0.1; +} +.conversejs .link-underline-opacity-25, converse-bg .link-underline-opacity-25 { + --converse-link-underline-opacity: 0.25; +} +.conversejs .link-underline-opacity-25-hover:hover, converse-bg .link-underline-opacity-25-hover:hover { + --converse-link-underline-opacity: 0.25; +} +.conversejs .link-underline-opacity-50, converse-bg .link-underline-opacity-50 { + --converse-link-underline-opacity: 0.5; +} +.conversejs .link-underline-opacity-50-hover:hover, converse-bg .link-underline-opacity-50-hover:hover { + --converse-link-underline-opacity: 0.5; +} +.conversejs .link-underline-opacity-75, converse-bg .link-underline-opacity-75 { + --converse-link-underline-opacity: 0.75; +} +.conversejs .link-underline-opacity-75-hover:hover, converse-bg .link-underline-opacity-75-hover:hover { + --converse-link-underline-opacity: 0.75; +} +.conversejs .link-underline-opacity-100, converse-bg .link-underline-opacity-100 { + --converse-link-underline-opacity: 1; +} +.conversejs .link-underline-opacity-100-hover:hover, converse-bg .link-underline-opacity-100-hover:hover { + --converse-link-underline-opacity: 1; +} +.conversejs .bg-primary, converse-bg .bg-primary { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-primary-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-secondary, converse-bg .bg-secondary { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-secondary-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-success, converse-bg .bg-success { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-success-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-info, converse-bg .bg-info { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-info-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-warning, converse-bg .bg-warning { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-warning-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-danger, converse-bg .bg-danger { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-danger-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-light, converse-bg .bg-light { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-light-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-dark, converse-bg .bg-dark { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-dark-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-black, converse-bg .bg-black { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-black-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-white, converse-bg .bg-white { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-white-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-body, converse-bg .bg-body { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-body-bg-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-transparent, converse-bg .bg-transparent { + --converse-bg-opacity: 1; + background-color: transparent !important; +} +.conversejs .bg-body-secondary, converse-bg .bg-body-secondary { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-secondary-bg-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-body-tertiary, converse-bg .bg-body-tertiary { + --converse-bg-opacity: 1; + background-color: rgba(var(--converse-tertiary-bg-rgb), var(--converse-bg-opacity)) !important; +} +.conversejs .bg-opacity-10, converse-bg .bg-opacity-10 { + --converse-bg-opacity: 0.1; +} +.conversejs .bg-opacity-25, converse-bg .bg-opacity-25 { + --converse-bg-opacity: 0.25; +} +.conversejs .bg-opacity-50, converse-bg .bg-opacity-50 { + --converse-bg-opacity: 0.5; +} +.conversejs .bg-opacity-75, converse-bg .bg-opacity-75 { + --converse-bg-opacity: 0.75; +} +.conversejs .bg-opacity-100, converse-bg .bg-opacity-100 { + --converse-bg-opacity: 1; +} +.conversejs .bg-primary-subtle, converse-bg .bg-primary-subtle { + background-color: var(--converse-primary-bg-subtle) !important; +} +.conversejs .bg-secondary-subtle, converse-bg .bg-secondary-subtle { + background-color: var(--converse-secondary-bg-subtle) !important; +} +.conversejs .bg-success-subtle, converse-bg .bg-success-subtle { + background-color: var(--converse-success-bg-subtle) !important; +} +.conversejs .bg-info-subtle, converse-bg .bg-info-subtle { + background-color: var(--converse-info-bg-subtle) !important; +} +.conversejs .bg-warning-subtle, converse-bg .bg-warning-subtle { + background-color: var(--converse-warning-bg-subtle) !important; +} +.conversejs .bg-danger-subtle, converse-bg .bg-danger-subtle { + background-color: var(--converse-danger-bg-subtle) !important; +} +.conversejs .bg-light-subtle, converse-bg .bg-light-subtle { + background-color: var(--converse-light-bg-subtle) !important; +} +.conversejs .bg-dark-subtle, converse-bg .bg-dark-subtle { + background-color: var(--converse-dark-bg-subtle) !important; +} +.conversejs .bg-gradient, converse-bg .bg-gradient { + background-image: var(--converse-gradient) !important; +} +.conversejs .user-select-all, converse-bg .user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} +.conversejs .user-select-auto, converse-bg .user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} +.conversejs .user-select-none, converse-bg .user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} +.conversejs .pe-none, converse-bg .pe-none { + pointer-events: none !important; +} +.conversejs .pe-auto, converse-bg .pe-auto { + pointer-events: auto !important; +} +.conversejs .rounded, converse-bg .rounded { + border-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-0, converse-bg .rounded-0 { + border-radius: 0 !important; +} +.conversejs .rounded-1, converse-bg .rounded-1 { + border-radius: var(--converse-border-radius-sm) !important; +} +.conversejs .rounded-2, converse-bg .rounded-2 { + border-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-3, converse-bg .rounded-3 { + border-radius: var(--converse-border-radius-lg) !important; +} +.conversejs .rounded-4, converse-bg .rounded-4 { + border-radius: var(--converse-border-radius-xl) !important; +} +.conversejs .rounded-5, converse-bg .rounded-5 { + border-radius: var(--converse-border-radius-xxl) !important; +} +.conversejs .rounded-circle, converse-bg .rounded-circle { + border-radius: 50% !important; +} +.conversejs .rounded-pill, converse-bg .rounded-pill { + border-radius: var(--converse-border-radius-pill) !important; +} +.conversejs .rounded-top, converse-bg .rounded-top { + border-top-left-radius: var(--converse-border-radius) !important; + border-top-right-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-top-0, converse-bg .rounded-top-0 { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; +} +.conversejs .rounded-top-1, converse-bg .rounded-top-1 { + border-top-left-radius: var(--converse-border-radius-sm) !important; + border-top-right-radius: var(--converse-border-radius-sm) !important; +} +.conversejs .rounded-top-2, converse-bg .rounded-top-2 { + border-top-left-radius: var(--converse-border-radius) !important; + border-top-right-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-top-3, converse-bg .rounded-top-3 { + border-top-left-radius: var(--converse-border-radius-lg) !important; + border-top-right-radius: var(--converse-border-radius-lg) !important; +} +.conversejs .rounded-top-4, converse-bg .rounded-top-4 { + border-top-left-radius: var(--converse-border-radius-xl) !important; + border-top-right-radius: var(--converse-border-radius-xl) !important; +} +.conversejs .rounded-top-5, converse-bg .rounded-top-5 { + border-top-left-radius: var(--converse-border-radius-xxl) !important; + border-top-right-radius: var(--converse-border-radius-xxl) !important; +} +.conversejs .rounded-top-circle, converse-bg .rounded-top-circle { + border-top-left-radius: 50% !important; + border-top-right-radius: 50% !important; +} +.conversejs .rounded-top-pill, converse-bg .rounded-top-pill { + border-top-left-radius: var(--converse-border-radius-pill) !important; + border-top-right-radius: var(--converse-border-radius-pill) !important; +} +.conversejs .rounded-end, converse-bg .rounded-end { + border-top-right-radius: var(--converse-border-radius) !important; + border-bottom-right-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-end-0, converse-bg .rounded-end-0 { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} +.conversejs .rounded-end-1, converse-bg .rounded-end-1 { + border-top-right-radius: var(--converse-border-radius-sm) !important; + border-bottom-right-radius: var(--converse-border-radius-sm) !important; +} +.conversejs .rounded-end-2, converse-bg .rounded-end-2 { + border-top-right-radius: var(--converse-border-radius) !important; + border-bottom-right-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-end-3, converse-bg .rounded-end-3 { + border-top-right-radius: var(--converse-border-radius-lg) !important; + border-bottom-right-radius: var(--converse-border-radius-lg) !important; +} +.conversejs .rounded-end-4, converse-bg .rounded-end-4 { + border-top-right-radius: var(--converse-border-radius-xl) !important; + border-bottom-right-radius: var(--converse-border-radius-xl) !important; +} +.conversejs .rounded-end-5, converse-bg .rounded-end-5 { + border-top-right-radius: var(--converse-border-radius-xxl) !important; + border-bottom-right-radius: var(--converse-border-radius-xxl) !important; +} +.conversejs .rounded-end-circle, converse-bg .rounded-end-circle { + border-top-right-radius: 50% !important; + border-bottom-right-radius: 50% !important; +} +.conversejs .rounded-end-pill, converse-bg .rounded-end-pill { + border-top-right-radius: var(--converse-border-radius-pill) !important; + border-bottom-right-radius: var(--converse-border-radius-pill) !important; +} +.conversejs .rounded-bottom, converse-bg .rounded-bottom { + border-bottom-right-radius: var(--converse-border-radius) !important; + border-bottom-left-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-bottom-0, converse-bg .rounded-bottom-0 { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} +.conversejs .rounded-bottom-1, converse-bg .rounded-bottom-1 { + border-bottom-right-radius: var(--converse-border-radius-sm) !important; + border-bottom-left-radius: var(--converse-border-radius-sm) !important; +} +.conversejs .rounded-bottom-2, converse-bg .rounded-bottom-2 { + border-bottom-right-radius: var(--converse-border-radius) !important; + border-bottom-left-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-bottom-3, converse-bg .rounded-bottom-3 { + border-bottom-right-radius: var(--converse-border-radius-lg) !important; + border-bottom-left-radius: var(--converse-border-radius-lg) !important; +} +.conversejs .rounded-bottom-4, converse-bg .rounded-bottom-4 { + border-bottom-right-radius: var(--converse-border-radius-xl) !important; + border-bottom-left-radius: var(--converse-border-radius-xl) !important; +} +.conversejs .rounded-bottom-5, converse-bg .rounded-bottom-5 { + border-bottom-right-radius: var(--converse-border-radius-xxl) !important; + border-bottom-left-radius: var(--converse-border-radius-xxl) !important; +} +.conversejs .rounded-bottom-circle, converse-bg .rounded-bottom-circle { + border-bottom-right-radius: 50% !important; + border-bottom-left-radius: 50% !important; +} +.conversejs .rounded-bottom-pill, converse-bg .rounded-bottom-pill { + border-bottom-right-radius: var(--converse-border-radius-pill) !important; + border-bottom-left-radius: var(--converse-border-radius-pill) !important; +} +.conversejs .rounded-start, converse-bg .rounded-start { + border-bottom-left-radius: var(--converse-border-radius) !important; + border-top-left-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-start-0, converse-bg .rounded-start-0 { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; +} +.conversejs .rounded-start-1, converse-bg .rounded-start-1 { + border-bottom-left-radius: var(--converse-border-radius-sm) !important; + border-top-left-radius: var(--converse-border-radius-sm) !important; +} +.conversejs .rounded-start-2, converse-bg .rounded-start-2 { + border-bottom-left-radius: var(--converse-border-radius) !important; + border-top-left-radius: var(--converse-border-radius) !important; +} +.conversejs .rounded-start-3, converse-bg .rounded-start-3 { + border-bottom-left-radius: var(--converse-border-radius-lg) !important; + border-top-left-radius: var(--converse-border-radius-lg) !important; +} +.conversejs .rounded-start-4, converse-bg .rounded-start-4 { + border-bottom-left-radius: var(--converse-border-radius-xl) !important; + border-top-left-radius: var(--converse-border-radius-xl) !important; +} +.conversejs .rounded-start-5, converse-bg .rounded-start-5 { + border-bottom-left-radius: var(--converse-border-radius-xxl) !important; + border-top-left-radius: var(--converse-border-radius-xxl) !important; +} +.conversejs .rounded-start-circle, converse-bg .rounded-start-circle { + border-bottom-left-radius: 50% !important; + border-top-left-radius: 50% !important; +} +.conversejs .rounded-start-pill, converse-bg .rounded-start-pill { + border-bottom-left-radius: var(--converse-border-radius-pill) !important; + border-top-left-radius: var(--converse-border-radius-pill) !important; +} +.conversejs .visible, converse-bg .visible { + visibility: visible !important; +} +.conversejs .invisible, converse-bg .invisible { + visibility: hidden !important; +} +.conversejs .z-n1, converse-bg .z-n1 { + z-index: -1 !important; +} +.conversejs .z-0, converse-bg .z-0 { + z-index: 0 !important; +} +.conversejs .z-1, converse-bg .z-1 { + z-index: 1 !important; +} +.conversejs .z-2, converse-bg .z-2 { + z-index: 2 !important; +} +.conversejs .z-3, converse-bg .z-3 { + z-index: 3 !important; +} +@media (min-width: 576px) { + .conversejs .float-sm-start, converse-bg .float-sm-start { + float: left !important; + } + .conversejs .float-sm-end, converse-bg .float-sm-end { + float: right !important; + } + .conversejs .float-sm-none, converse-bg .float-sm-none { + float: none !important; + } + .conversejs .object-fit-sm-contain, converse-bg .object-fit-sm-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .conversejs .object-fit-sm-cover, converse-bg .object-fit-sm-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .conversejs .object-fit-sm-fill, converse-bg .object-fit-sm-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .conversejs .object-fit-sm-scale, converse-bg .object-fit-sm-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .conversejs .object-fit-sm-none, converse-bg .object-fit-sm-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .conversejs .d-sm-inline, converse-bg .d-sm-inline { + display: inline !important; + } + .conversejs .d-sm-inline-block, converse-bg .d-sm-inline-block { + display: inline-block !important; + } + .conversejs .d-sm-block, converse-bg .d-sm-block { + display: block !important; + } + .conversejs .d-sm-grid, converse-bg .d-sm-grid { + display: grid !important; + } + .conversejs .d-sm-inline-grid, converse-bg .d-sm-inline-grid { + display: inline-grid !important; + } + .conversejs .d-sm-table, converse-bg .d-sm-table { + display: table !important; + } + .conversejs .d-sm-table-row, converse-bg .d-sm-table-row { + display: table-row !important; + } + .conversejs .d-sm-table-cell, converse-bg .d-sm-table-cell { + display: table-cell !important; + } + .conversejs .d-sm-flex, converse-bg .d-sm-flex { + display: flex !important; + } + .conversejs .d-sm-inline-flex, converse-bg .d-sm-inline-flex { + display: inline-flex !important; + } + .conversejs .d-sm-none, converse-bg .d-sm-none { + display: none !important; + } + .conversejs .flex-sm-fill, converse-bg .flex-sm-fill { + flex: 1 1 auto !important; + } + .conversejs .flex-sm-row, converse-bg .flex-sm-row { + flex-direction: row !important; + } + .conversejs .flex-sm-column, converse-bg .flex-sm-column { + flex-direction: column !important; + } + .conversejs .flex-sm-row-reverse, converse-bg .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .conversejs .flex-sm-column-reverse, converse-bg .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .conversejs .flex-sm-grow-0, converse-bg .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .conversejs .flex-sm-grow-1, converse-bg .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .conversejs .flex-sm-shrink-0, converse-bg .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .conversejs .flex-sm-shrink-1, converse-bg .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .conversejs .flex-sm-wrap, converse-bg .flex-sm-wrap { + flex-wrap: wrap !important; + } + .conversejs .flex-sm-nowrap, converse-bg .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .conversejs .flex-sm-wrap-reverse, converse-bg .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .conversejs .justify-content-sm-start, converse-bg .justify-content-sm-start { + justify-content: flex-start !important; + } + .conversejs .justify-content-sm-end, converse-bg .justify-content-sm-end { + justify-content: flex-end !important; + } + .conversejs .justify-content-sm-center, converse-bg .justify-content-sm-center { + justify-content: center !important; + } + .conversejs .justify-content-sm-between, converse-bg .justify-content-sm-between { + justify-content: space-between !important; + } + .conversejs .justify-content-sm-around, converse-bg .justify-content-sm-around { + justify-content: space-around !important; + } + .conversejs .justify-content-sm-evenly, converse-bg .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .conversejs .align-items-sm-start, converse-bg .align-items-sm-start { + align-items: flex-start !important; + } + .conversejs .align-items-sm-end, converse-bg .align-items-sm-end { + align-items: flex-end !important; + } + .conversejs .align-items-sm-center, converse-bg .align-items-sm-center { + align-items: center !important; + } + .conversejs .align-items-sm-baseline, converse-bg .align-items-sm-baseline { + align-items: baseline !important; + } + .conversejs .align-items-sm-stretch, converse-bg .align-items-sm-stretch { + align-items: stretch !important; + } + .conversejs .align-content-sm-start, converse-bg .align-content-sm-start { + align-content: flex-start !important; + } + .conversejs .align-content-sm-end, converse-bg .align-content-sm-end { + align-content: flex-end !important; + } + .conversejs .align-content-sm-center, converse-bg .align-content-sm-center { + align-content: center !important; + } + .conversejs .align-content-sm-between, converse-bg .align-content-sm-between { + align-content: space-between !important; + } + .conversejs .align-content-sm-around, converse-bg .align-content-sm-around { + align-content: space-around !important; + } + .conversejs .align-content-sm-stretch, converse-bg .align-content-sm-stretch { + align-content: stretch !important; + } + .conversejs .align-self-sm-auto, converse-bg .align-self-sm-auto { + align-self: auto !important; + } + .conversejs .align-self-sm-start, converse-bg .align-self-sm-start { + align-self: flex-start !important; + } + .conversejs .align-self-sm-end, converse-bg .align-self-sm-end { + align-self: flex-end !important; + } + .conversejs .align-self-sm-center, converse-bg .align-self-sm-center { + align-self: center !important; + } + .conversejs .align-self-sm-baseline, converse-bg .align-self-sm-baseline { + align-self: baseline !important; + } + .conversejs .align-self-sm-stretch, converse-bg .align-self-sm-stretch { + align-self: stretch !important; + } + .conversejs .order-sm-first, converse-bg .order-sm-first { + order: -1 !important; + } + .conversejs .order-sm-0, converse-bg .order-sm-0 { + order: 0 !important; + } + .conversejs .order-sm-1, converse-bg .order-sm-1 { + order: 1 !important; + } + .conversejs .order-sm-2, converse-bg .order-sm-2 { + order: 2 !important; + } + .conversejs .order-sm-3, converse-bg .order-sm-3 { + order: 3 !important; + } + .conversejs .order-sm-4, converse-bg .order-sm-4 { + order: 4 !important; + } + .conversejs .order-sm-5, converse-bg .order-sm-5 { + order: 5 !important; + } + .conversejs .order-sm-last, converse-bg .order-sm-last { + order: 6 !important; + } + .conversejs .m-sm-0, converse-bg .m-sm-0 { + margin: 0 !important; + } + .conversejs .m-sm-1, converse-bg .m-sm-1 { + margin: 0.25rem !important; + } + .conversejs .m-sm-2, converse-bg .m-sm-2 { + margin: 0.5rem !important; + } + .conversejs .m-sm-3, converse-bg .m-sm-3 { + margin: 1rem !important; + } + .conversejs .m-sm-4, converse-bg .m-sm-4 { + margin: 1.5rem !important; + } + .conversejs .m-sm-5, converse-bg .m-sm-5 { + margin: 3rem !important; + } + .conversejs .m-sm-auto, converse-bg .m-sm-auto { + margin: auto !important; + } + .conversejs .mx-sm-0, converse-bg .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .conversejs .mx-sm-1, converse-bg .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .conversejs .mx-sm-2, converse-bg .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .conversejs .mx-sm-3, converse-bg .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .conversejs .mx-sm-4, converse-bg .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .conversejs .mx-sm-5, converse-bg .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .conversejs .mx-sm-auto, converse-bg .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .conversejs .my-sm-0, converse-bg .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .conversejs .my-sm-1, converse-bg .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .conversejs .my-sm-2, converse-bg .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .conversejs .my-sm-3, converse-bg .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .conversejs .my-sm-4, converse-bg .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .conversejs .my-sm-5, converse-bg .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .conversejs .my-sm-auto, converse-bg .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .conversejs .mt-sm-0, converse-bg .mt-sm-0 { + margin-top: 0 !important; + } + .conversejs .mt-sm-1, converse-bg .mt-sm-1 { + margin-top: 0.25rem !important; + } + .conversejs .mt-sm-2, converse-bg .mt-sm-2 { + margin-top: 0.5rem !important; + } + .conversejs .mt-sm-3, converse-bg .mt-sm-3 { + margin-top: 1rem !important; + } + .conversejs .mt-sm-4, converse-bg .mt-sm-4 { + margin-top: 1.5rem !important; + } + .conversejs .mt-sm-5, converse-bg .mt-sm-5 { + margin-top: 3rem !important; + } + .conversejs .mt-sm-auto, converse-bg .mt-sm-auto { + margin-top: auto !important; + } + .conversejs .me-sm-0, converse-bg .me-sm-0 { + margin-right: 0 !important; + } + .conversejs .me-sm-1, converse-bg .me-sm-1 { + margin-right: 0.25rem !important; + } + .conversejs .me-sm-2, converse-bg .me-sm-2 { + margin-right: 0.5rem !important; + } + .conversejs .me-sm-3, converse-bg .me-sm-3 { + margin-right: 1rem !important; + } + .conversejs .me-sm-4, converse-bg .me-sm-4 { + margin-right: 1.5rem !important; + } + .conversejs .me-sm-5, converse-bg .me-sm-5 { + margin-right: 3rem !important; + } + .conversejs .me-sm-auto, converse-bg .me-sm-auto { + margin-right: auto !important; + } + .conversejs .mb-sm-0, converse-bg .mb-sm-0 { + margin-bottom: 0 !important; + } + .conversejs .mb-sm-1, converse-bg .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .conversejs .mb-sm-2, converse-bg .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .conversejs .mb-sm-3, converse-bg .mb-sm-3 { + margin-bottom: 1rem !important; + } + .conversejs .mb-sm-4, converse-bg .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .conversejs .mb-sm-5, converse-bg .mb-sm-5 { + margin-bottom: 3rem !important; + } + .conversejs .mb-sm-auto, converse-bg .mb-sm-auto { + margin-bottom: auto !important; + } + .conversejs .ms-sm-0, converse-bg .ms-sm-0 { + margin-left: 0 !important; + } + .conversejs .ms-sm-1, converse-bg .ms-sm-1 { + margin-left: 0.25rem !important; + } + .conversejs .ms-sm-2, converse-bg .ms-sm-2 { + margin-left: 0.5rem !important; + } + .conversejs .ms-sm-3, converse-bg .ms-sm-3 { + margin-left: 1rem !important; + } + .conversejs .ms-sm-4, converse-bg .ms-sm-4 { + margin-left: 1.5rem !important; + } + .conversejs .ms-sm-5, converse-bg .ms-sm-5 { + margin-left: 3rem !important; + } + .conversejs .ms-sm-auto, converse-bg .ms-sm-auto { + margin-left: auto !important; + } + .conversejs .p-sm-0, converse-bg .p-sm-0 { + padding: 0 !important; + } + .conversejs .p-sm-1, converse-bg .p-sm-1 { + padding: 0.25rem !important; + } + .conversejs .p-sm-2, converse-bg .p-sm-2 { + padding: 0.5rem !important; + } + .conversejs .p-sm-3, converse-bg .p-sm-3 { + padding: 1rem !important; + } + .conversejs .p-sm-4, converse-bg .p-sm-4 { + padding: 1.5rem !important; + } + .conversejs .p-sm-5, converse-bg .p-sm-5 { + padding: 3rem !important; + } + .conversejs .px-sm-0, converse-bg .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .conversejs .px-sm-1, converse-bg .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .conversejs .px-sm-2, converse-bg .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .conversejs .px-sm-3, converse-bg .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .conversejs .px-sm-4, converse-bg .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .conversejs .px-sm-5, converse-bg .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .conversejs .py-sm-0, converse-bg .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .conversejs .py-sm-1, converse-bg .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .conversejs .py-sm-2, converse-bg .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .conversejs .py-sm-3, converse-bg .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .conversejs .py-sm-4, converse-bg .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .conversejs .py-sm-5, converse-bg .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .conversejs .pt-sm-0, converse-bg .pt-sm-0 { + padding-top: 0 !important; + } + .conversejs .pt-sm-1, converse-bg .pt-sm-1 { + padding-top: 0.25rem !important; + } + .conversejs .pt-sm-2, converse-bg .pt-sm-2 { + padding-top: 0.5rem !important; + } + .conversejs .pt-sm-3, converse-bg .pt-sm-3 { + padding-top: 1rem !important; + } + .conversejs .pt-sm-4, converse-bg .pt-sm-4 { + padding-top: 1.5rem !important; + } + .conversejs .pt-sm-5, converse-bg .pt-sm-5 { + padding-top: 3rem !important; + } + .conversejs .pe-sm-0, converse-bg .pe-sm-0 { + padding-right: 0 !important; + } + .conversejs .pe-sm-1, converse-bg .pe-sm-1 { + padding-right: 0.25rem !important; + } + .conversejs .pe-sm-2, converse-bg .pe-sm-2 { + padding-right: 0.5rem !important; + } + .conversejs .pe-sm-3, converse-bg .pe-sm-3 { + padding-right: 1rem !important; + } + .conversejs .pe-sm-4, converse-bg .pe-sm-4 { + padding-right: 1.5rem !important; + } + .conversejs .pe-sm-5, converse-bg .pe-sm-5 { + padding-right: 3rem !important; + } + .conversejs .pb-sm-0, converse-bg .pb-sm-0 { + padding-bottom: 0 !important; + } + .conversejs .pb-sm-1, converse-bg .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .conversejs .pb-sm-2, converse-bg .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .conversejs .pb-sm-3, converse-bg .pb-sm-3 { + padding-bottom: 1rem !important; + } + .conversejs .pb-sm-4, converse-bg .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .conversejs .pb-sm-5, converse-bg .pb-sm-5 { + padding-bottom: 3rem !important; + } + .conversejs .ps-sm-0, converse-bg .ps-sm-0 { + padding-left: 0 !important; + } + .conversejs .ps-sm-1, converse-bg .ps-sm-1 { + padding-left: 0.25rem !important; + } + .conversejs .ps-sm-2, converse-bg .ps-sm-2 { + padding-left: 0.5rem !important; + } + .conversejs .ps-sm-3, converse-bg .ps-sm-3 { + padding-left: 1rem !important; + } + .conversejs .ps-sm-4, converse-bg .ps-sm-4 { + padding-left: 1.5rem !important; + } + .conversejs .ps-sm-5, converse-bg .ps-sm-5 { + padding-left: 3rem !important; + } + .conversejs .gap-sm-0, converse-bg .gap-sm-0 { + gap: 0 !important; + } + .conversejs .gap-sm-1, converse-bg .gap-sm-1 { + gap: 0.25rem !important; + } + .conversejs .gap-sm-2, converse-bg .gap-sm-2 { + gap: 0.5rem !important; + } + .conversejs .gap-sm-3, converse-bg .gap-sm-3 { + gap: 1rem !important; + } + .conversejs .gap-sm-4, converse-bg .gap-sm-4 { + gap: 1.5rem !important; + } + .conversejs .gap-sm-5, converse-bg .gap-sm-5 { + gap: 3rem !important; + } + .conversejs .row-gap-sm-0, converse-bg .row-gap-sm-0 { + row-gap: 0 !important; + } + .conversejs .row-gap-sm-1, converse-bg .row-gap-sm-1 { + row-gap: 0.25rem !important; + } + .conversejs .row-gap-sm-2, converse-bg .row-gap-sm-2 { + row-gap: 0.5rem !important; + } + .conversejs .row-gap-sm-3, converse-bg .row-gap-sm-3 { + row-gap: 1rem !important; + } + .conversejs .row-gap-sm-4, converse-bg .row-gap-sm-4 { + row-gap: 1.5rem !important; + } + .conversejs .row-gap-sm-5, converse-bg .row-gap-sm-5 { + row-gap: 3rem !important; + } + .conversejs .column-gap-sm-0, converse-bg .column-gap-sm-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .conversejs .column-gap-sm-1, converse-bg .column-gap-sm-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .conversejs .column-gap-sm-2, converse-bg .column-gap-sm-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .conversejs .column-gap-sm-3, converse-bg .column-gap-sm-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .conversejs .column-gap-sm-4, converse-bg .column-gap-sm-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .conversejs .column-gap-sm-5, converse-bg .column-gap-sm-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .conversejs .text-sm-start, converse-bg .text-sm-start { + text-align: left !important; + } + .conversejs .text-sm-end, converse-bg .text-sm-end { + text-align: right !important; + } + .conversejs .text-sm-center, converse-bg .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .conversejs .float-md-start, converse-bg .float-md-start { + float: left !important; + } + .conversejs .float-md-end, converse-bg .float-md-end { + float: right !important; + } + .conversejs .float-md-none, converse-bg .float-md-none { + float: none !important; + } + .conversejs .object-fit-md-contain, converse-bg .object-fit-md-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .conversejs .object-fit-md-cover, converse-bg .object-fit-md-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .conversejs .object-fit-md-fill, converse-bg .object-fit-md-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .conversejs .object-fit-md-scale, converse-bg .object-fit-md-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .conversejs .object-fit-md-none, converse-bg .object-fit-md-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .conversejs .d-md-inline, converse-bg .d-md-inline { + display: inline !important; + } + .conversejs .d-md-inline-block, converse-bg .d-md-inline-block { + display: inline-block !important; + } + .conversejs .d-md-block, converse-bg .d-md-block { + display: block !important; + } + .conversejs .d-md-grid, converse-bg .d-md-grid { + display: grid !important; + } + .conversejs .d-md-inline-grid, converse-bg .d-md-inline-grid { + display: inline-grid !important; + } + .conversejs .d-md-table, converse-bg .d-md-table { + display: table !important; + } + .conversejs .d-md-table-row, converse-bg .d-md-table-row { + display: table-row !important; + } + .conversejs .d-md-table-cell, converse-bg .d-md-table-cell { + display: table-cell !important; + } + .conversejs .d-md-flex, converse-bg .d-md-flex { + display: flex !important; + } + .conversejs .d-md-inline-flex, converse-bg .d-md-inline-flex { + display: inline-flex !important; + } + .conversejs .d-md-none, converse-bg .d-md-none { + display: none !important; + } + .conversejs .flex-md-fill, converse-bg .flex-md-fill { + flex: 1 1 auto !important; + } + .conversejs .flex-md-row, converse-bg .flex-md-row { + flex-direction: row !important; + } + .conversejs .flex-md-column, converse-bg .flex-md-column { + flex-direction: column !important; + } + .conversejs .flex-md-row-reverse, converse-bg .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .conversejs .flex-md-column-reverse, converse-bg .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .conversejs .flex-md-grow-0, converse-bg .flex-md-grow-0 { + flex-grow: 0 !important; + } + .conversejs .flex-md-grow-1, converse-bg .flex-md-grow-1 { + flex-grow: 1 !important; + } + .conversejs .flex-md-shrink-0, converse-bg .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .conversejs .flex-md-shrink-1, converse-bg .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .conversejs .flex-md-wrap, converse-bg .flex-md-wrap { + flex-wrap: wrap !important; + } + .conversejs .flex-md-nowrap, converse-bg .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .conversejs .flex-md-wrap-reverse, converse-bg .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .conversejs .justify-content-md-start, converse-bg .justify-content-md-start { + justify-content: flex-start !important; + } + .conversejs .justify-content-md-end, converse-bg .justify-content-md-end { + justify-content: flex-end !important; + } + .conversejs .justify-content-md-center, converse-bg .justify-content-md-center { + justify-content: center !important; + } + .conversejs .justify-content-md-between, converse-bg .justify-content-md-between { + justify-content: space-between !important; + } + .conversejs .justify-content-md-around, converse-bg .justify-content-md-around { + justify-content: space-around !important; + } + .conversejs .justify-content-md-evenly, converse-bg .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .conversejs .align-items-md-start, converse-bg .align-items-md-start { + align-items: flex-start !important; + } + .conversejs .align-items-md-end, converse-bg .align-items-md-end { + align-items: flex-end !important; + } + .conversejs .align-items-md-center, converse-bg .align-items-md-center { + align-items: center !important; + } + .conversejs .align-items-md-baseline, converse-bg .align-items-md-baseline { + align-items: baseline !important; + } + .conversejs .align-items-md-stretch, converse-bg .align-items-md-stretch { + align-items: stretch !important; + } + .conversejs .align-content-md-start, converse-bg .align-content-md-start { + align-content: flex-start !important; + } + .conversejs .align-content-md-end, converse-bg .align-content-md-end { + align-content: flex-end !important; + } + .conversejs .align-content-md-center, converse-bg .align-content-md-center { + align-content: center !important; + } + .conversejs .align-content-md-between, converse-bg .align-content-md-between { + align-content: space-between !important; + } + .conversejs .align-content-md-around, converse-bg .align-content-md-around { + align-content: space-around !important; + } + .conversejs .align-content-md-stretch, converse-bg .align-content-md-stretch { + align-content: stretch !important; + } + .conversejs .align-self-md-auto, converse-bg .align-self-md-auto { + align-self: auto !important; + } + .conversejs .align-self-md-start, converse-bg .align-self-md-start { + align-self: flex-start !important; + } + .conversejs .align-self-md-end, converse-bg .align-self-md-end { + align-self: flex-end !important; + } + .conversejs .align-self-md-center, converse-bg .align-self-md-center { + align-self: center !important; + } + .conversejs .align-self-md-baseline, converse-bg .align-self-md-baseline { + align-self: baseline !important; + } + .conversejs .align-self-md-stretch, converse-bg .align-self-md-stretch { + align-self: stretch !important; + } + .conversejs .order-md-first, converse-bg .order-md-first { + order: -1 !important; + } + .conversejs .order-md-0, converse-bg .order-md-0 { + order: 0 !important; + } + .conversejs .order-md-1, converse-bg .order-md-1 { + order: 1 !important; + } + .conversejs .order-md-2, converse-bg .order-md-2 { + order: 2 !important; + } + .conversejs .order-md-3, converse-bg .order-md-3 { + order: 3 !important; + } + .conversejs .order-md-4, converse-bg .order-md-4 { + order: 4 !important; + } + .conversejs .order-md-5, converse-bg .order-md-5 { + order: 5 !important; + } + .conversejs .order-md-last, converse-bg .order-md-last { + order: 6 !important; + } + .conversejs .m-md-0, converse-bg .m-md-0 { + margin: 0 !important; + } + .conversejs .m-md-1, converse-bg .m-md-1 { + margin: 0.25rem !important; + } + .conversejs .m-md-2, converse-bg .m-md-2 { + margin: 0.5rem !important; + } + .conversejs .m-md-3, converse-bg .m-md-3 { + margin: 1rem !important; + } + .conversejs .m-md-4, converse-bg .m-md-4 { + margin: 1.5rem !important; + } + .conversejs .m-md-5, converse-bg .m-md-5 { + margin: 3rem !important; + } + .conversejs .m-md-auto, converse-bg .m-md-auto { + margin: auto !important; + } + .conversejs .mx-md-0, converse-bg .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .conversejs .mx-md-1, converse-bg .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .conversejs .mx-md-2, converse-bg .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .conversejs .mx-md-3, converse-bg .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .conversejs .mx-md-4, converse-bg .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .conversejs .mx-md-5, converse-bg .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .conversejs .mx-md-auto, converse-bg .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .conversejs .my-md-0, converse-bg .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .conversejs .my-md-1, converse-bg .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .conversejs .my-md-2, converse-bg .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .conversejs .my-md-3, converse-bg .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .conversejs .my-md-4, converse-bg .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .conversejs .my-md-5, converse-bg .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .conversejs .my-md-auto, converse-bg .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .conversejs .mt-md-0, converse-bg .mt-md-0 { + margin-top: 0 !important; + } + .conversejs .mt-md-1, converse-bg .mt-md-1 { + margin-top: 0.25rem !important; + } + .conversejs .mt-md-2, converse-bg .mt-md-2 { + margin-top: 0.5rem !important; + } + .conversejs .mt-md-3, converse-bg .mt-md-3 { + margin-top: 1rem !important; + } + .conversejs .mt-md-4, converse-bg .mt-md-4 { + margin-top: 1.5rem !important; + } + .conversejs .mt-md-5, converse-bg .mt-md-5 { + margin-top: 3rem !important; + } + .conversejs .mt-md-auto, converse-bg .mt-md-auto { + margin-top: auto !important; + } + .conversejs .me-md-0, converse-bg .me-md-0 { + margin-right: 0 !important; + } + .conversejs .me-md-1, converse-bg .me-md-1 { + margin-right: 0.25rem !important; + } + .conversejs .me-md-2, converse-bg .me-md-2 { + margin-right: 0.5rem !important; + } + .conversejs .me-md-3, converse-bg .me-md-3 { + margin-right: 1rem !important; + } + .conversejs .me-md-4, converse-bg .me-md-4 { + margin-right: 1.5rem !important; + } + .conversejs .me-md-5, converse-bg .me-md-5 { + margin-right: 3rem !important; + } + .conversejs .me-md-auto, converse-bg .me-md-auto { + margin-right: auto !important; + } + .conversejs .mb-md-0, converse-bg .mb-md-0 { + margin-bottom: 0 !important; + } + .conversejs .mb-md-1, converse-bg .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .conversejs .mb-md-2, converse-bg .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .conversejs .mb-md-3, converse-bg .mb-md-3 { + margin-bottom: 1rem !important; + } + .conversejs .mb-md-4, converse-bg .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .conversejs .mb-md-5, converse-bg .mb-md-5 { + margin-bottom: 3rem !important; + } + .conversejs .mb-md-auto, converse-bg .mb-md-auto { + margin-bottom: auto !important; + } + .conversejs .ms-md-0, converse-bg .ms-md-0 { + margin-left: 0 !important; + } + .conversejs .ms-md-1, converse-bg .ms-md-1 { + margin-left: 0.25rem !important; + } + .conversejs .ms-md-2, converse-bg .ms-md-2 { + margin-left: 0.5rem !important; + } + .conversejs .ms-md-3, converse-bg .ms-md-3 { + margin-left: 1rem !important; + } + .conversejs .ms-md-4, converse-bg .ms-md-4 { + margin-left: 1.5rem !important; + } + .conversejs .ms-md-5, converse-bg .ms-md-5 { + margin-left: 3rem !important; + } + .conversejs .ms-md-auto, converse-bg .ms-md-auto { + margin-left: auto !important; + } + .conversejs .p-md-0, converse-bg .p-md-0 { + padding: 0 !important; + } + .conversejs .p-md-1, converse-bg .p-md-1 { + padding: 0.25rem !important; + } + .conversejs .p-md-2, converse-bg .p-md-2 { + padding: 0.5rem !important; + } + .conversejs .p-md-3, converse-bg .p-md-3 { + padding: 1rem !important; + } + .conversejs .p-md-4, converse-bg .p-md-4 { + padding: 1.5rem !important; + } + .conversejs .p-md-5, converse-bg .p-md-5 { + padding: 3rem !important; + } + .conversejs .px-md-0, converse-bg .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .conversejs .px-md-1, converse-bg .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .conversejs .px-md-2, converse-bg .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .conversejs .px-md-3, converse-bg .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .conversejs .px-md-4, converse-bg .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .conversejs .px-md-5, converse-bg .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .conversejs .py-md-0, converse-bg .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .conversejs .py-md-1, converse-bg .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .conversejs .py-md-2, converse-bg .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .conversejs .py-md-3, converse-bg .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .conversejs .py-md-4, converse-bg .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .conversejs .py-md-5, converse-bg .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .conversejs .pt-md-0, converse-bg .pt-md-0 { + padding-top: 0 !important; + } + .conversejs .pt-md-1, converse-bg .pt-md-1 { + padding-top: 0.25rem !important; + } + .conversejs .pt-md-2, converse-bg .pt-md-2 { + padding-top: 0.5rem !important; + } + .conversejs .pt-md-3, converse-bg .pt-md-3 { + padding-top: 1rem !important; + } + .conversejs .pt-md-4, converse-bg .pt-md-4 { + padding-top: 1.5rem !important; + } + .conversejs .pt-md-5, converse-bg .pt-md-5 { + padding-top: 3rem !important; + } + .conversejs .pe-md-0, converse-bg .pe-md-0 { + padding-right: 0 !important; + } + .conversejs .pe-md-1, converse-bg .pe-md-1 { + padding-right: 0.25rem !important; + } + .conversejs .pe-md-2, converse-bg .pe-md-2 { + padding-right: 0.5rem !important; + } + .conversejs .pe-md-3, converse-bg .pe-md-3 { + padding-right: 1rem !important; + } + .conversejs .pe-md-4, converse-bg .pe-md-4 { + padding-right: 1.5rem !important; + } + .conversejs .pe-md-5, converse-bg .pe-md-5 { + padding-right: 3rem !important; + } + .conversejs .pb-md-0, converse-bg .pb-md-0 { + padding-bottom: 0 !important; + } + .conversejs .pb-md-1, converse-bg .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .conversejs .pb-md-2, converse-bg .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .conversejs .pb-md-3, converse-bg .pb-md-3 { + padding-bottom: 1rem !important; + } + .conversejs .pb-md-4, converse-bg .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .conversejs .pb-md-5, converse-bg .pb-md-5 { + padding-bottom: 3rem !important; + } + .conversejs .ps-md-0, converse-bg .ps-md-0 { + padding-left: 0 !important; + } + .conversejs .ps-md-1, converse-bg .ps-md-1 { + padding-left: 0.25rem !important; + } + .conversejs .ps-md-2, converse-bg .ps-md-2 { + padding-left: 0.5rem !important; + } + .conversejs .ps-md-3, converse-bg .ps-md-3 { + padding-left: 1rem !important; + } + .conversejs .ps-md-4, converse-bg .ps-md-4 { + padding-left: 1.5rem !important; + } + .conversejs .ps-md-5, converse-bg .ps-md-5 { + padding-left: 3rem !important; + } + .conversejs .gap-md-0, converse-bg .gap-md-0 { + gap: 0 !important; + } + .conversejs .gap-md-1, converse-bg .gap-md-1 { + gap: 0.25rem !important; + } + .conversejs .gap-md-2, converse-bg .gap-md-2 { + gap: 0.5rem !important; + } + .conversejs .gap-md-3, converse-bg .gap-md-3 { + gap: 1rem !important; + } + .conversejs .gap-md-4, converse-bg .gap-md-4 { + gap: 1.5rem !important; + } + .conversejs .gap-md-5, converse-bg .gap-md-5 { + gap: 3rem !important; + } + .conversejs .row-gap-md-0, converse-bg .row-gap-md-0 { + row-gap: 0 !important; + } + .conversejs .row-gap-md-1, converse-bg .row-gap-md-1 { + row-gap: 0.25rem !important; + } + .conversejs .row-gap-md-2, converse-bg .row-gap-md-2 { + row-gap: 0.5rem !important; + } + .conversejs .row-gap-md-3, converse-bg .row-gap-md-3 { + row-gap: 1rem !important; + } + .conversejs .row-gap-md-4, converse-bg .row-gap-md-4 { + row-gap: 1.5rem !important; + } + .conversejs .row-gap-md-5, converse-bg .row-gap-md-5 { + row-gap: 3rem !important; + } + .conversejs .column-gap-md-0, converse-bg .column-gap-md-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .conversejs .column-gap-md-1, converse-bg .column-gap-md-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .conversejs .column-gap-md-2, converse-bg .column-gap-md-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .conversejs .column-gap-md-3, converse-bg .column-gap-md-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .conversejs .column-gap-md-4, converse-bg .column-gap-md-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .conversejs .column-gap-md-5, converse-bg .column-gap-md-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .conversejs .text-md-start, converse-bg .text-md-start { + text-align: left !important; + } + .conversejs .text-md-end, converse-bg .text-md-end { + text-align: right !important; + } + .conversejs .text-md-center, converse-bg .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .conversejs .float-lg-start, converse-bg .float-lg-start { + float: left !important; + } + .conversejs .float-lg-end, converse-bg .float-lg-end { + float: right !important; + } + .conversejs .float-lg-none, converse-bg .float-lg-none { + float: none !important; + } + .conversejs .object-fit-lg-contain, converse-bg .object-fit-lg-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .conversejs .object-fit-lg-cover, converse-bg .object-fit-lg-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .conversejs .object-fit-lg-fill, converse-bg .object-fit-lg-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .conversejs .object-fit-lg-scale, converse-bg .object-fit-lg-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .conversejs .object-fit-lg-none, converse-bg .object-fit-lg-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .conversejs .d-lg-inline, converse-bg .d-lg-inline { + display: inline !important; + } + .conversejs .d-lg-inline-block, converse-bg .d-lg-inline-block { + display: inline-block !important; + } + .conversejs .d-lg-block, converse-bg .d-lg-block { + display: block !important; + } + .conversejs .d-lg-grid, converse-bg .d-lg-grid { + display: grid !important; + } + .conversejs .d-lg-inline-grid, converse-bg .d-lg-inline-grid { + display: inline-grid !important; + } + .conversejs .d-lg-table, converse-bg .d-lg-table { + display: table !important; + } + .conversejs .d-lg-table-row, converse-bg .d-lg-table-row { + display: table-row !important; + } + .conversejs .d-lg-table-cell, converse-bg .d-lg-table-cell { + display: table-cell !important; + } + .conversejs .d-lg-flex, converse-bg .d-lg-flex { + display: flex !important; + } + .conversejs .d-lg-inline-flex, converse-bg .d-lg-inline-flex { + display: inline-flex !important; + } + .conversejs .d-lg-none, converse-bg .d-lg-none { + display: none !important; + } + .conversejs .flex-lg-fill, converse-bg .flex-lg-fill { + flex: 1 1 auto !important; + } + .conversejs .flex-lg-row, converse-bg .flex-lg-row { + flex-direction: row !important; + } + .conversejs .flex-lg-column, converse-bg .flex-lg-column { + flex-direction: column !important; + } + .conversejs .flex-lg-row-reverse, converse-bg .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .conversejs .flex-lg-column-reverse, converse-bg .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .conversejs .flex-lg-grow-0, converse-bg .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .conversejs .flex-lg-grow-1, converse-bg .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .conversejs .flex-lg-shrink-0, converse-bg .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .conversejs .flex-lg-shrink-1, converse-bg .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .conversejs .flex-lg-wrap, converse-bg .flex-lg-wrap { + flex-wrap: wrap !important; + } + .conversejs .flex-lg-nowrap, converse-bg .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .conversejs .flex-lg-wrap-reverse, converse-bg .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .conversejs .justify-content-lg-start, converse-bg .justify-content-lg-start { + justify-content: flex-start !important; + } + .conversejs .justify-content-lg-end, converse-bg .justify-content-lg-end { + justify-content: flex-end !important; + } + .conversejs .justify-content-lg-center, converse-bg .justify-content-lg-center { + justify-content: center !important; + } + .conversejs .justify-content-lg-between, converse-bg .justify-content-lg-between { + justify-content: space-between !important; + } + .conversejs .justify-content-lg-around, converse-bg .justify-content-lg-around { + justify-content: space-around !important; + } + .conversejs .justify-content-lg-evenly, converse-bg .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .conversejs .align-items-lg-start, converse-bg .align-items-lg-start { + align-items: flex-start !important; + } + .conversejs .align-items-lg-end, converse-bg .align-items-lg-end { + align-items: flex-end !important; + } + .conversejs .align-items-lg-center, converse-bg .align-items-lg-center { + align-items: center !important; + } + .conversejs .align-items-lg-baseline, converse-bg .align-items-lg-baseline { + align-items: baseline !important; + } + .conversejs .align-items-lg-stretch, converse-bg .align-items-lg-stretch { + align-items: stretch !important; + } + .conversejs .align-content-lg-start, converse-bg .align-content-lg-start { + align-content: flex-start !important; + } + .conversejs .align-content-lg-end, converse-bg .align-content-lg-end { + align-content: flex-end !important; + } + .conversejs .align-content-lg-center, converse-bg .align-content-lg-center { + align-content: center !important; + } + .conversejs .align-content-lg-between, converse-bg .align-content-lg-between { + align-content: space-between !important; + } + .conversejs .align-content-lg-around, converse-bg .align-content-lg-around { + align-content: space-around !important; + } + .conversejs .align-content-lg-stretch, converse-bg .align-content-lg-stretch { + align-content: stretch !important; + } + .conversejs .align-self-lg-auto, converse-bg .align-self-lg-auto { + align-self: auto !important; + } + .conversejs .align-self-lg-start, converse-bg .align-self-lg-start { + align-self: flex-start !important; + } + .conversejs .align-self-lg-end, converse-bg .align-self-lg-end { + align-self: flex-end !important; + } + .conversejs .align-self-lg-center, converse-bg .align-self-lg-center { + align-self: center !important; + } + .conversejs .align-self-lg-baseline, converse-bg .align-self-lg-baseline { + align-self: baseline !important; + } + .conversejs .align-self-lg-stretch, converse-bg .align-self-lg-stretch { + align-self: stretch !important; + } + .conversejs .order-lg-first, converse-bg .order-lg-first { + order: -1 !important; + } + .conversejs .order-lg-0, converse-bg .order-lg-0 { + order: 0 !important; + } + .conversejs .order-lg-1, converse-bg .order-lg-1 { + order: 1 !important; + } + .conversejs .order-lg-2, converse-bg .order-lg-2 { + order: 2 !important; + } + .conversejs .order-lg-3, converse-bg .order-lg-3 { + order: 3 !important; + } + .conversejs .order-lg-4, converse-bg .order-lg-4 { + order: 4 !important; + } + .conversejs .order-lg-5, converse-bg .order-lg-5 { + order: 5 !important; + } + .conversejs .order-lg-last, converse-bg .order-lg-last { + order: 6 !important; + } + .conversejs .m-lg-0, converse-bg .m-lg-0 { + margin: 0 !important; + } + .conversejs .m-lg-1, converse-bg .m-lg-1 { + margin: 0.25rem !important; + } + .conversejs .m-lg-2, converse-bg .m-lg-2 { + margin: 0.5rem !important; + } + .conversejs .m-lg-3, converse-bg .m-lg-3 { + margin: 1rem !important; + } + .conversejs .m-lg-4, converse-bg .m-lg-4 { + margin: 1.5rem !important; + } + .conversejs .m-lg-5, converse-bg .m-lg-5 { + margin: 3rem !important; + } + .conversejs .m-lg-auto, converse-bg .m-lg-auto { + margin: auto !important; + } + .conversejs .mx-lg-0, converse-bg .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .conversejs .mx-lg-1, converse-bg .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .conversejs .mx-lg-2, converse-bg .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .conversejs .mx-lg-3, converse-bg .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .conversejs .mx-lg-4, converse-bg .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .conversejs .mx-lg-5, converse-bg .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .conversejs .mx-lg-auto, converse-bg .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .conversejs .my-lg-0, converse-bg .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .conversejs .my-lg-1, converse-bg .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .conversejs .my-lg-2, converse-bg .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .conversejs .my-lg-3, converse-bg .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .conversejs .my-lg-4, converse-bg .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .conversejs .my-lg-5, converse-bg .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .conversejs .my-lg-auto, converse-bg .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .conversejs .mt-lg-0, converse-bg .mt-lg-0 { + margin-top: 0 !important; + } + .conversejs .mt-lg-1, converse-bg .mt-lg-1 { + margin-top: 0.25rem !important; + } + .conversejs .mt-lg-2, converse-bg .mt-lg-2 { + margin-top: 0.5rem !important; + } + .conversejs .mt-lg-3, converse-bg .mt-lg-3 { + margin-top: 1rem !important; + } + .conversejs .mt-lg-4, converse-bg .mt-lg-4 { + margin-top: 1.5rem !important; + } + .conversejs .mt-lg-5, converse-bg .mt-lg-5 { + margin-top: 3rem !important; + } + .conversejs .mt-lg-auto, converse-bg .mt-lg-auto { + margin-top: auto !important; + } + .conversejs .me-lg-0, converse-bg .me-lg-0 { + margin-right: 0 !important; + } + .conversejs .me-lg-1, converse-bg .me-lg-1 { + margin-right: 0.25rem !important; + } + .conversejs .me-lg-2, converse-bg .me-lg-2 { + margin-right: 0.5rem !important; + } + .conversejs .me-lg-3, converse-bg .me-lg-3 { + margin-right: 1rem !important; + } + .conversejs .me-lg-4, converse-bg .me-lg-4 { + margin-right: 1.5rem !important; + } + .conversejs .me-lg-5, converse-bg .me-lg-5 { + margin-right: 3rem !important; + } + .conversejs .me-lg-auto, converse-bg .me-lg-auto { + margin-right: auto !important; + } + .conversejs .mb-lg-0, converse-bg .mb-lg-0 { + margin-bottom: 0 !important; + } + .conversejs .mb-lg-1, converse-bg .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .conversejs .mb-lg-2, converse-bg .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .conversejs .mb-lg-3, converse-bg .mb-lg-3 { + margin-bottom: 1rem !important; + } + .conversejs .mb-lg-4, converse-bg .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .conversejs .mb-lg-5, converse-bg .mb-lg-5 { + margin-bottom: 3rem !important; + } + .conversejs .mb-lg-auto, converse-bg .mb-lg-auto { + margin-bottom: auto !important; + } + .conversejs .ms-lg-0, converse-bg .ms-lg-0 { + margin-left: 0 !important; + } + .conversejs .ms-lg-1, converse-bg .ms-lg-1 { + margin-left: 0.25rem !important; + } + .conversejs .ms-lg-2, converse-bg .ms-lg-2 { + margin-left: 0.5rem !important; + } + .conversejs .ms-lg-3, converse-bg .ms-lg-3 { + margin-left: 1rem !important; + } + .conversejs .ms-lg-4, converse-bg .ms-lg-4 { + margin-left: 1.5rem !important; + } + .conversejs .ms-lg-5, converse-bg .ms-lg-5 { + margin-left: 3rem !important; + } + .conversejs .ms-lg-auto, converse-bg .ms-lg-auto { + margin-left: auto !important; + } + .conversejs .p-lg-0, converse-bg .p-lg-0 { + padding: 0 !important; + } + .conversejs .p-lg-1, converse-bg .p-lg-1 { + padding: 0.25rem !important; + } + .conversejs .p-lg-2, converse-bg .p-lg-2 { + padding: 0.5rem !important; + } + .conversejs .p-lg-3, converse-bg .p-lg-3 { + padding: 1rem !important; + } + .conversejs .p-lg-4, converse-bg .p-lg-4 { + padding: 1.5rem !important; + } + .conversejs .p-lg-5, converse-bg .p-lg-5 { + padding: 3rem !important; + } + .conversejs .px-lg-0, converse-bg .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .conversejs .px-lg-1, converse-bg .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .conversejs .px-lg-2, converse-bg .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .conversejs .px-lg-3, converse-bg .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .conversejs .px-lg-4, converse-bg .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .conversejs .px-lg-5, converse-bg .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .conversejs .py-lg-0, converse-bg .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .conversejs .py-lg-1, converse-bg .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .conversejs .py-lg-2, converse-bg .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .conversejs .py-lg-3, converse-bg .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .conversejs .py-lg-4, converse-bg .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .conversejs .py-lg-5, converse-bg .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .conversejs .pt-lg-0, converse-bg .pt-lg-0 { + padding-top: 0 !important; + } + .conversejs .pt-lg-1, converse-bg .pt-lg-1 { + padding-top: 0.25rem !important; + } + .conversejs .pt-lg-2, converse-bg .pt-lg-2 { + padding-top: 0.5rem !important; + } + .conversejs .pt-lg-3, converse-bg .pt-lg-3 { + padding-top: 1rem !important; + } + .conversejs .pt-lg-4, converse-bg .pt-lg-4 { + padding-top: 1.5rem !important; + } + .conversejs .pt-lg-5, converse-bg .pt-lg-5 { + padding-top: 3rem !important; + } + .conversejs .pe-lg-0, converse-bg .pe-lg-0 { + padding-right: 0 !important; + } + .conversejs .pe-lg-1, converse-bg .pe-lg-1 { + padding-right: 0.25rem !important; + } + .conversejs .pe-lg-2, converse-bg .pe-lg-2 { + padding-right: 0.5rem !important; + } + .conversejs .pe-lg-3, converse-bg .pe-lg-3 { + padding-right: 1rem !important; + } + .conversejs .pe-lg-4, converse-bg .pe-lg-4 { + padding-right: 1.5rem !important; + } + .conversejs .pe-lg-5, converse-bg .pe-lg-5 { + padding-right: 3rem !important; + } + .conversejs .pb-lg-0, converse-bg .pb-lg-0 { + padding-bottom: 0 !important; + } + .conversejs .pb-lg-1, converse-bg .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .conversejs .pb-lg-2, converse-bg .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .conversejs .pb-lg-3, converse-bg .pb-lg-3 { + padding-bottom: 1rem !important; + } + .conversejs .pb-lg-4, converse-bg .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .conversejs .pb-lg-5, converse-bg .pb-lg-5 { + padding-bottom: 3rem !important; + } + .conversejs .ps-lg-0, converse-bg .ps-lg-0 { + padding-left: 0 !important; + } + .conversejs .ps-lg-1, converse-bg .ps-lg-1 { + padding-left: 0.25rem !important; + } + .conversejs .ps-lg-2, converse-bg .ps-lg-2 { + padding-left: 0.5rem !important; + } + .conversejs .ps-lg-3, converse-bg .ps-lg-3 { + padding-left: 1rem !important; + } + .conversejs .ps-lg-4, converse-bg .ps-lg-4 { + padding-left: 1.5rem !important; + } + .conversejs .ps-lg-5, converse-bg .ps-lg-5 { + padding-left: 3rem !important; + } + .conversejs .gap-lg-0, converse-bg .gap-lg-0 { + gap: 0 !important; + } + .conversejs .gap-lg-1, converse-bg .gap-lg-1 { + gap: 0.25rem !important; + } + .conversejs .gap-lg-2, converse-bg .gap-lg-2 { + gap: 0.5rem !important; + } + .conversejs .gap-lg-3, converse-bg .gap-lg-3 { + gap: 1rem !important; + } + .conversejs .gap-lg-4, converse-bg .gap-lg-4 { + gap: 1.5rem !important; + } + .conversejs .gap-lg-5, converse-bg .gap-lg-5 { + gap: 3rem !important; + } + .conversejs .row-gap-lg-0, converse-bg .row-gap-lg-0 { + row-gap: 0 !important; + } + .conversejs .row-gap-lg-1, converse-bg .row-gap-lg-1 { + row-gap: 0.25rem !important; + } + .conversejs .row-gap-lg-2, converse-bg .row-gap-lg-2 { + row-gap: 0.5rem !important; + } + .conversejs .row-gap-lg-3, converse-bg .row-gap-lg-3 { + row-gap: 1rem !important; + } + .conversejs .row-gap-lg-4, converse-bg .row-gap-lg-4 { + row-gap: 1.5rem !important; + } + .conversejs .row-gap-lg-5, converse-bg .row-gap-lg-5 { + row-gap: 3rem !important; + } + .conversejs .column-gap-lg-0, converse-bg .column-gap-lg-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .conversejs .column-gap-lg-1, converse-bg .column-gap-lg-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .conversejs .column-gap-lg-2, converse-bg .column-gap-lg-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .conversejs .column-gap-lg-3, converse-bg .column-gap-lg-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .conversejs .column-gap-lg-4, converse-bg .column-gap-lg-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .conversejs .column-gap-lg-5, converse-bg .column-gap-lg-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .conversejs .text-lg-start, converse-bg .text-lg-start { + text-align: left !important; + } + .conversejs .text-lg-end, converse-bg .text-lg-end { + text-align: right !important; + } + .conversejs .text-lg-center, converse-bg .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .conversejs .float-xl-start, converse-bg .float-xl-start { + float: left !important; + } + .conversejs .float-xl-end, converse-bg .float-xl-end { + float: right !important; + } + .conversejs .float-xl-none, converse-bg .float-xl-none { + float: none !important; + } + .conversejs .object-fit-xl-contain, converse-bg .object-fit-xl-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .conversejs .object-fit-xl-cover, converse-bg .object-fit-xl-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .conversejs .object-fit-xl-fill, converse-bg .object-fit-xl-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .conversejs .object-fit-xl-scale, converse-bg .object-fit-xl-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .conversejs .object-fit-xl-none, converse-bg .object-fit-xl-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .conversejs .d-xl-inline, converse-bg .d-xl-inline { + display: inline !important; + } + .conversejs .d-xl-inline-block, converse-bg .d-xl-inline-block { + display: inline-block !important; + } + .conversejs .d-xl-block, converse-bg .d-xl-block { + display: block !important; + } + .conversejs .d-xl-grid, converse-bg .d-xl-grid { + display: grid !important; + } + .conversejs .d-xl-inline-grid, converse-bg .d-xl-inline-grid { + display: inline-grid !important; + } + .conversejs .d-xl-table, converse-bg .d-xl-table { + display: table !important; + } + .conversejs .d-xl-table-row, converse-bg .d-xl-table-row { + display: table-row !important; + } + .conversejs .d-xl-table-cell, converse-bg .d-xl-table-cell { + display: table-cell !important; + } + .conversejs .d-xl-flex, converse-bg .d-xl-flex { + display: flex !important; + } + .conversejs .d-xl-inline-flex, converse-bg .d-xl-inline-flex { + display: inline-flex !important; + } + .conversejs .d-xl-none, converse-bg .d-xl-none { + display: none !important; + } + .conversejs .flex-xl-fill, converse-bg .flex-xl-fill { + flex: 1 1 auto !important; + } + .conversejs .flex-xl-row, converse-bg .flex-xl-row { + flex-direction: row !important; + } + .conversejs .flex-xl-column, converse-bg .flex-xl-column { + flex-direction: column !important; + } + .conversejs .flex-xl-row-reverse, converse-bg .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .conversejs .flex-xl-column-reverse, converse-bg .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .conversejs .flex-xl-grow-0, converse-bg .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .conversejs .flex-xl-grow-1, converse-bg .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .conversejs .flex-xl-shrink-0, converse-bg .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .conversejs .flex-xl-shrink-1, converse-bg .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .conversejs .flex-xl-wrap, converse-bg .flex-xl-wrap { + flex-wrap: wrap !important; + } + .conversejs .flex-xl-nowrap, converse-bg .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .conversejs .flex-xl-wrap-reverse, converse-bg .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .conversejs .justify-content-xl-start, converse-bg .justify-content-xl-start { + justify-content: flex-start !important; + } + .conversejs .justify-content-xl-end, converse-bg .justify-content-xl-end { + justify-content: flex-end !important; + } + .conversejs .justify-content-xl-center, converse-bg .justify-content-xl-center { + justify-content: center !important; + } + .conversejs .justify-content-xl-between, converse-bg .justify-content-xl-between { + justify-content: space-between !important; + } + .conversejs .justify-content-xl-around, converse-bg .justify-content-xl-around { + justify-content: space-around !important; + } + .conversejs .justify-content-xl-evenly, converse-bg .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .conversejs .align-items-xl-start, converse-bg .align-items-xl-start { + align-items: flex-start !important; + } + .conversejs .align-items-xl-end, converse-bg .align-items-xl-end { + align-items: flex-end !important; + } + .conversejs .align-items-xl-center, converse-bg .align-items-xl-center { + align-items: center !important; + } + .conversejs .align-items-xl-baseline, converse-bg .align-items-xl-baseline { + align-items: baseline !important; + } + .conversejs .align-items-xl-stretch, converse-bg .align-items-xl-stretch { + align-items: stretch !important; + } + .conversejs .align-content-xl-start, converse-bg .align-content-xl-start { + align-content: flex-start !important; + } + .conversejs .align-content-xl-end, converse-bg .align-content-xl-end { + align-content: flex-end !important; + } + .conversejs .align-content-xl-center, converse-bg .align-content-xl-center { + align-content: center !important; + } + .conversejs .align-content-xl-between, converse-bg .align-content-xl-between { + align-content: space-between !important; + } + .conversejs .align-content-xl-around, converse-bg .align-content-xl-around { + align-content: space-around !important; + } + .conversejs .align-content-xl-stretch, converse-bg .align-content-xl-stretch { + align-content: stretch !important; + } + .conversejs .align-self-xl-auto, converse-bg .align-self-xl-auto { + align-self: auto !important; + } + .conversejs .align-self-xl-start, converse-bg .align-self-xl-start { + align-self: flex-start !important; + } + .conversejs .align-self-xl-end, converse-bg .align-self-xl-end { + align-self: flex-end !important; + } + .conversejs .align-self-xl-center, converse-bg .align-self-xl-center { + align-self: center !important; + } + .conversejs .align-self-xl-baseline, converse-bg .align-self-xl-baseline { + align-self: baseline !important; + } + .conversejs .align-self-xl-stretch, converse-bg .align-self-xl-stretch { + align-self: stretch !important; + } + .conversejs .order-xl-first, converse-bg .order-xl-first { + order: -1 !important; + } + .conversejs .order-xl-0, converse-bg .order-xl-0 { + order: 0 !important; + } + .conversejs .order-xl-1, converse-bg .order-xl-1 { + order: 1 !important; + } + .conversejs .order-xl-2, converse-bg .order-xl-2 { + order: 2 !important; + } + .conversejs .order-xl-3, converse-bg .order-xl-3 { + order: 3 !important; + } + .conversejs .order-xl-4, converse-bg .order-xl-4 { + order: 4 !important; + } + .conversejs .order-xl-5, converse-bg .order-xl-5 { + order: 5 !important; + } + .conversejs .order-xl-last, converse-bg .order-xl-last { + order: 6 !important; + } + .conversejs .m-xl-0, converse-bg .m-xl-0 { + margin: 0 !important; + } + .conversejs .m-xl-1, converse-bg .m-xl-1 { + margin: 0.25rem !important; + } + .conversejs .m-xl-2, converse-bg .m-xl-2 { + margin: 0.5rem !important; + } + .conversejs .m-xl-3, converse-bg .m-xl-3 { + margin: 1rem !important; + } + .conversejs .m-xl-4, converse-bg .m-xl-4 { + margin: 1.5rem !important; + } + .conversejs .m-xl-5, converse-bg .m-xl-5 { + margin: 3rem !important; + } + .conversejs .m-xl-auto, converse-bg .m-xl-auto { + margin: auto !important; + } + .conversejs .mx-xl-0, converse-bg .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .conversejs .mx-xl-1, converse-bg .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .conversejs .mx-xl-2, converse-bg .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .conversejs .mx-xl-3, converse-bg .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .conversejs .mx-xl-4, converse-bg .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .conversejs .mx-xl-5, converse-bg .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .conversejs .mx-xl-auto, converse-bg .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .conversejs .my-xl-0, converse-bg .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .conversejs .my-xl-1, converse-bg .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .conversejs .my-xl-2, converse-bg .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .conversejs .my-xl-3, converse-bg .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .conversejs .my-xl-4, converse-bg .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .conversejs .my-xl-5, converse-bg .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .conversejs .my-xl-auto, converse-bg .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .conversejs .mt-xl-0, converse-bg .mt-xl-0 { + margin-top: 0 !important; + } + .conversejs .mt-xl-1, converse-bg .mt-xl-1 { + margin-top: 0.25rem !important; + } + .conversejs .mt-xl-2, converse-bg .mt-xl-2 { + margin-top: 0.5rem !important; + } + .conversejs .mt-xl-3, converse-bg .mt-xl-3 { + margin-top: 1rem !important; + } + .conversejs .mt-xl-4, converse-bg .mt-xl-4 { + margin-top: 1.5rem !important; + } + .conversejs .mt-xl-5, converse-bg .mt-xl-5 { + margin-top: 3rem !important; + } + .conversejs .mt-xl-auto, converse-bg .mt-xl-auto { + margin-top: auto !important; + } + .conversejs .me-xl-0, converse-bg .me-xl-0 { + margin-right: 0 !important; + } + .conversejs .me-xl-1, converse-bg .me-xl-1 { + margin-right: 0.25rem !important; + } + .conversejs .me-xl-2, converse-bg .me-xl-2 { + margin-right: 0.5rem !important; + } + .conversejs .me-xl-3, converse-bg .me-xl-3 { + margin-right: 1rem !important; + } + .conversejs .me-xl-4, converse-bg .me-xl-4 { + margin-right: 1.5rem !important; + } + .conversejs .me-xl-5, converse-bg .me-xl-5 { + margin-right: 3rem !important; + } + .conversejs .me-xl-auto, converse-bg .me-xl-auto { + margin-right: auto !important; + } + .conversejs .mb-xl-0, converse-bg .mb-xl-0 { + margin-bottom: 0 !important; + } + .conversejs .mb-xl-1, converse-bg .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .conversejs .mb-xl-2, converse-bg .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .conversejs .mb-xl-3, converse-bg .mb-xl-3 { + margin-bottom: 1rem !important; + } + .conversejs .mb-xl-4, converse-bg .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .conversejs .mb-xl-5, converse-bg .mb-xl-5 { + margin-bottom: 3rem !important; + } + .conversejs .mb-xl-auto, converse-bg .mb-xl-auto { + margin-bottom: auto !important; + } + .conversejs .ms-xl-0, converse-bg .ms-xl-0 { + margin-left: 0 !important; + } + .conversejs .ms-xl-1, converse-bg .ms-xl-1 { + margin-left: 0.25rem !important; + } + .conversejs .ms-xl-2, converse-bg .ms-xl-2 { + margin-left: 0.5rem !important; + } + .conversejs .ms-xl-3, converse-bg .ms-xl-3 { + margin-left: 1rem !important; + } + .conversejs .ms-xl-4, converse-bg .ms-xl-4 { + margin-left: 1.5rem !important; + } + .conversejs .ms-xl-5, converse-bg .ms-xl-5 { + margin-left: 3rem !important; + } + .conversejs .ms-xl-auto, converse-bg .ms-xl-auto { + margin-left: auto !important; + } + .conversejs .p-xl-0, converse-bg .p-xl-0 { + padding: 0 !important; + } + .conversejs .p-xl-1, converse-bg .p-xl-1 { + padding: 0.25rem !important; + } + .conversejs .p-xl-2, converse-bg .p-xl-2 { + padding: 0.5rem !important; + } + .conversejs .p-xl-3, converse-bg .p-xl-3 { + padding: 1rem !important; + } + .conversejs .p-xl-4, converse-bg .p-xl-4 { + padding: 1.5rem !important; + } + .conversejs .p-xl-5, converse-bg .p-xl-5 { + padding: 3rem !important; + } + .conversejs .px-xl-0, converse-bg .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .conversejs .px-xl-1, converse-bg .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .conversejs .px-xl-2, converse-bg .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .conversejs .px-xl-3, converse-bg .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .conversejs .px-xl-4, converse-bg .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .conversejs .px-xl-5, converse-bg .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .conversejs .py-xl-0, converse-bg .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .conversejs .py-xl-1, converse-bg .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .conversejs .py-xl-2, converse-bg .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .conversejs .py-xl-3, converse-bg .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .conversejs .py-xl-4, converse-bg .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .conversejs .py-xl-5, converse-bg .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .conversejs .pt-xl-0, converse-bg .pt-xl-0 { + padding-top: 0 !important; + } + .conversejs .pt-xl-1, converse-bg .pt-xl-1 { + padding-top: 0.25rem !important; + } + .conversejs .pt-xl-2, converse-bg .pt-xl-2 { + padding-top: 0.5rem !important; + } + .conversejs .pt-xl-3, converse-bg .pt-xl-3 { + padding-top: 1rem !important; + } + .conversejs .pt-xl-4, converse-bg .pt-xl-4 { + padding-top: 1.5rem !important; + } + .conversejs .pt-xl-5, converse-bg .pt-xl-5 { + padding-top: 3rem !important; + } + .conversejs .pe-xl-0, converse-bg .pe-xl-0 { + padding-right: 0 !important; + } + .conversejs .pe-xl-1, converse-bg .pe-xl-1 { + padding-right: 0.25rem !important; + } + .conversejs .pe-xl-2, converse-bg .pe-xl-2 { + padding-right: 0.5rem !important; + } + .conversejs .pe-xl-3, converse-bg .pe-xl-3 { + padding-right: 1rem !important; + } + .conversejs .pe-xl-4, converse-bg .pe-xl-4 { + padding-right: 1.5rem !important; + } + .conversejs .pe-xl-5, converse-bg .pe-xl-5 { + padding-right: 3rem !important; + } + .conversejs .pb-xl-0, converse-bg .pb-xl-0 { + padding-bottom: 0 !important; + } + .conversejs .pb-xl-1, converse-bg .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .conversejs .pb-xl-2, converse-bg .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .conversejs .pb-xl-3, converse-bg .pb-xl-3 { + padding-bottom: 1rem !important; + } + .conversejs .pb-xl-4, converse-bg .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .conversejs .pb-xl-5, converse-bg .pb-xl-5 { + padding-bottom: 3rem !important; + } + .conversejs .ps-xl-0, converse-bg .ps-xl-0 { + padding-left: 0 !important; + } + .conversejs .ps-xl-1, converse-bg .ps-xl-1 { + padding-left: 0.25rem !important; + } + .conversejs .ps-xl-2, converse-bg .ps-xl-2 { + padding-left: 0.5rem !important; + } + .conversejs .ps-xl-3, converse-bg .ps-xl-3 { + padding-left: 1rem !important; + } + .conversejs .ps-xl-4, converse-bg .ps-xl-4 { + padding-left: 1.5rem !important; + } + .conversejs .ps-xl-5, converse-bg .ps-xl-5 { + padding-left: 3rem !important; + } + .conversejs .gap-xl-0, converse-bg .gap-xl-0 { + gap: 0 !important; + } + .conversejs .gap-xl-1, converse-bg .gap-xl-1 { + gap: 0.25rem !important; + } + .conversejs .gap-xl-2, converse-bg .gap-xl-2 { + gap: 0.5rem !important; + } + .conversejs .gap-xl-3, converse-bg .gap-xl-3 { + gap: 1rem !important; + } + .conversejs .gap-xl-4, converse-bg .gap-xl-4 { + gap: 1.5rem !important; + } + .conversejs .gap-xl-5, converse-bg .gap-xl-5 { + gap: 3rem !important; + } + .conversejs .row-gap-xl-0, converse-bg .row-gap-xl-0 { + row-gap: 0 !important; + } + .conversejs .row-gap-xl-1, converse-bg .row-gap-xl-1 { + row-gap: 0.25rem !important; + } + .conversejs .row-gap-xl-2, converse-bg .row-gap-xl-2 { + row-gap: 0.5rem !important; + } + .conversejs .row-gap-xl-3, converse-bg .row-gap-xl-3 { + row-gap: 1rem !important; + } + .conversejs .row-gap-xl-4, converse-bg .row-gap-xl-4 { + row-gap: 1.5rem !important; + } + .conversejs .row-gap-xl-5, converse-bg .row-gap-xl-5 { + row-gap: 3rem !important; + } + .conversejs .column-gap-xl-0, converse-bg .column-gap-xl-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .conversejs .column-gap-xl-1, converse-bg .column-gap-xl-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .conversejs .column-gap-xl-2, converse-bg .column-gap-xl-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .conversejs .column-gap-xl-3, converse-bg .column-gap-xl-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .conversejs .column-gap-xl-4, converse-bg .column-gap-xl-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .conversejs .column-gap-xl-5, converse-bg .column-gap-xl-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .conversejs .text-xl-start, converse-bg .text-xl-start { + text-align: left !important; + } + .conversejs .text-xl-end, converse-bg .text-xl-end { + text-align: right !important; + } + .conversejs .text-xl-center, converse-bg .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1400px) { + .conversejs .float-xxl-start, converse-bg .float-xxl-start { + float: left !important; + } + .conversejs .float-xxl-end, converse-bg .float-xxl-end { + float: right !important; + } + .conversejs .float-xxl-none, converse-bg .float-xxl-none { + float: none !important; + } + .conversejs .object-fit-xxl-contain, converse-bg .object-fit-xxl-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .conversejs .object-fit-xxl-cover, converse-bg .object-fit-xxl-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .conversejs .object-fit-xxl-fill, converse-bg .object-fit-xxl-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .conversejs .object-fit-xxl-scale, converse-bg .object-fit-xxl-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .conversejs .object-fit-xxl-none, converse-bg .object-fit-xxl-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .conversejs .d-xxl-inline, converse-bg .d-xxl-inline { + display: inline !important; + } + .conversejs .d-xxl-inline-block, converse-bg .d-xxl-inline-block { + display: inline-block !important; + } + .conversejs .d-xxl-block, converse-bg .d-xxl-block { + display: block !important; + } + .conversejs .d-xxl-grid, converse-bg .d-xxl-grid { + display: grid !important; + } + .conversejs .d-xxl-inline-grid, converse-bg .d-xxl-inline-grid { + display: inline-grid !important; + } + .conversejs .d-xxl-table, converse-bg .d-xxl-table { + display: table !important; + } + .conversejs .d-xxl-table-row, converse-bg .d-xxl-table-row { + display: table-row !important; + } + .conversejs .d-xxl-table-cell, converse-bg .d-xxl-table-cell { + display: table-cell !important; + } + .conversejs .d-xxl-flex, converse-bg .d-xxl-flex { + display: flex !important; + } + .conversejs .d-xxl-inline-flex, converse-bg .d-xxl-inline-flex { + display: inline-flex !important; + } + .conversejs .d-xxl-none, converse-bg .d-xxl-none { + display: none !important; + } + .conversejs .flex-xxl-fill, converse-bg .flex-xxl-fill { + flex: 1 1 auto !important; + } + .conversejs .flex-xxl-row, converse-bg .flex-xxl-row { + flex-direction: row !important; + } + .conversejs .flex-xxl-column, converse-bg .flex-xxl-column { + flex-direction: column !important; + } + .conversejs .flex-xxl-row-reverse, converse-bg .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .conversejs .flex-xxl-column-reverse, converse-bg .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .conversejs .flex-xxl-grow-0, converse-bg .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .conversejs .flex-xxl-grow-1, converse-bg .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .conversejs .flex-xxl-shrink-0, converse-bg .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .conversejs .flex-xxl-shrink-1, converse-bg .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .conversejs .flex-xxl-wrap, converse-bg .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .conversejs .flex-xxl-nowrap, converse-bg .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .conversejs .flex-xxl-wrap-reverse, converse-bg .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .conversejs .justify-content-xxl-start, converse-bg .justify-content-xxl-start { + justify-content: flex-start !important; + } + .conversejs .justify-content-xxl-end, converse-bg .justify-content-xxl-end { + justify-content: flex-end !important; + } + .conversejs .justify-content-xxl-center, converse-bg .justify-content-xxl-center { + justify-content: center !important; + } + .conversejs .justify-content-xxl-between, converse-bg .justify-content-xxl-between { + justify-content: space-between !important; + } + .conversejs .justify-content-xxl-around, converse-bg .justify-content-xxl-around { + justify-content: space-around !important; + } + .conversejs .justify-content-xxl-evenly, converse-bg .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .conversejs .align-items-xxl-start, converse-bg .align-items-xxl-start { + align-items: flex-start !important; + } + .conversejs .align-items-xxl-end, converse-bg .align-items-xxl-end { + align-items: flex-end !important; + } + .conversejs .align-items-xxl-center, converse-bg .align-items-xxl-center { + align-items: center !important; + } + .conversejs .align-items-xxl-baseline, converse-bg .align-items-xxl-baseline { + align-items: baseline !important; + } + .conversejs .align-items-xxl-stretch, converse-bg .align-items-xxl-stretch { + align-items: stretch !important; + } + .conversejs .align-content-xxl-start, converse-bg .align-content-xxl-start { + align-content: flex-start !important; + } + .conversejs .align-content-xxl-end, converse-bg .align-content-xxl-end { + align-content: flex-end !important; + } + .conversejs .align-content-xxl-center, converse-bg .align-content-xxl-center { + align-content: center !important; + } + .conversejs .align-content-xxl-between, converse-bg .align-content-xxl-between { + align-content: space-between !important; + } + .conversejs .align-content-xxl-around, converse-bg .align-content-xxl-around { + align-content: space-around !important; + } + .conversejs .align-content-xxl-stretch, converse-bg .align-content-xxl-stretch { + align-content: stretch !important; + } + .conversejs .align-self-xxl-auto, converse-bg .align-self-xxl-auto { + align-self: auto !important; + } + .conversejs .align-self-xxl-start, converse-bg .align-self-xxl-start { + align-self: flex-start !important; + } + .conversejs .align-self-xxl-end, converse-bg .align-self-xxl-end { + align-self: flex-end !important; + } + .conversejs .align-self-xxl-center, converse-bg .align-self-xxl-center { + align-self: center !important; + } + .conversejs .align-self-xxl-baseline, converse-bg .align-self-xxl-baseline { + align-self: baseline !important; + } + .conversejs .align-self-xxl-stretch, converse-bg .align-self-xxl-stretch { + align-self: stretch !important; + } + .conversejs .order-xxl-first, converse-bg .order-xxl-first { + order: -1 !important; + } + .conversejs .order-xxl-0, converse-bg .order-xxl-0 { + order: 0 !important; + } + .conversejs .order-xxl-1, converse-bg .order-xxl-1 { + order: 1 !important; + } + .conversejs .order-xxl-2, converse-bg .order-xxl-2 { + order: 2 !important; + } + .conversejs .order-xxl-3, converse-bg .order-xxl-3 { + order: 3 !important; + } + .conversejs .order-xxl-4, converse-bg .order-xxl-4 { + order: 4 !important; + } + .conversejs .order-xxl-5, converse-bg .order-xxl-5 { + order: 5 !important; + } + .conversejs .order-xxl-last, converse-bg .order-xxl-last { + order: 6 !important; + } + .conversejs .m-xxl-0, converse-bg .m-xxl-0 { + margin: 0 !important; + } + .conversejs .m-xxl-1, converse-bg .m-xxl-1 { + margin: 0.25rem !important; + } + .conversejs .m-xxl-2, converse-bg .m-xxl-2 { + margin: 0.5rem !important; + } + .conversejs .m-xxl-3, converse-bg .m-xxl-3 { + margin: 1rem !important; + } + .conversejs .m-xxl-4, converse-bg .m-xxl-4 { + margin: 1.5rem !important; + } + .conversejs .m-xxl-5, converse-bg .m-xxl-5 { + margin: 3rem !important; + } + .conversejs .m-xxl-auto, converse-bg .m-xxl-auto { + margin: auto !important; + } + .conversejs .mx-xxl-0, converse-bg .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .conversejs .mx-xxl-1, converse-bg .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .conversejs .mx-xxl-2, converse-bg .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .conversejs .mx-xxl-3, converse-bg .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .conversejs .mx-xxl-4, converse-bg .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .conversejs .mx-xxl-5, converse-bg .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .conversejs .mx-xxl-auto, converse-bg .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .conversejs .my-xxl-0, converse-bg .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .conversejs .my-xxl-1, converse-bg .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .conversejs .my-xxl-2, converse-bg .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .conversejs .my-xxl-3, converse-bg .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .conversejs .my-xxl-4, converse-bg .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .conversejs .my-xxl-5, converse-bg .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .conversejs .my-xxl-auto, converse-bg .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .conversejs .mt-xxl-0, converse-bg .mt-xxl-0 { + margin-top: 0 !important; + } + .conversejs .mt-xxl-1, converse-bg .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .conversejs .mt-xxl-2, converse-bg .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .conversejs .mt-xxl-3, converse-bg .mt-xxl-3 { + margin-top: 1rem !important; + } + .conversejs .mt-xxl-4, converse-bg .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .conversejs .mt-xxl-5, converse-bg .mt-xxl-5 { + margin-top: 3rem !important; + } + .conversejs .mt-xxl-auto, converse-bg .mt-xxl-auto { + margin-top: auto !important; + } + .conversejs .me-xxl-0, converse-bg .me-xxl-0 { + margin-right: 0 !important; + } + .conversejs .me-xxl-1, converse-bg .me-xxl-1 { + margin-right: 0.25rem !important; + } + .conversejs .me-xxl-2, converse-bg .me-xxl-2 { + margin-right: 0.5rem !important; + } + .conversejs .me-xxl-3, converse-bg .me-xxl-3 { + margin-right: 1rem !important; + } + .conversejs .me-xxl-4, converse-bg .me-xxl-4 { + margin-right: 1.5rem !important; + } + .conversejs .me-xxl-5, converse-bg .me-xxl-5 { + margin-right: 3rem !important; + } + .conversejs .me-xxl-auto, converse-bg .me-xxl-auto { + margin-right: auto !important; + } + .conversejs .mb-xxl-0, converse-bg .mb-xxl-0 { + margin-bottom: 0 !important; + } + .conversejs .mb-xxl-1, converse-bg .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .conversejs .mb-xxl-2, converse-bg .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .conversejs .mb-xxl-3, converse-bg .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .conversejs .mb-xxl-4, converse-bg .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .conversejs .mb-xxl-5, converse-bg .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .conversejs .mb-xxl-auto, converse-bg .mb-xxl-auto { + margin-bottom: auto !important; + } + .conversejs .ms-xxl-0, converse-bg .ms-xxl-0 { + margin-left: 0 !important; + } + .conversejs .ms-xxl-1, converse-bg .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .conversejs .ms-xxl-2, converse-bg .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .conversejs .ms-xxl-3, converse-bg .ms-xxl-3 { + margin-left: 1rem !important; + } + .conversejs .ms-xxl-4, converse-bg .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .conversejs .ms-xxl-5, converse-bg .ms-xxl-5 { + margin-left: 3rem !important; + } + .conversejs .ms-xxl-auto, converse-bg .ms-xxl-auto { + margin-left: auto !important; + } + .conversejs .p-xxl-0, converse-bg .p-xxl-0 { + padding: 0 !important; + } + .conversejs .p-xxl-1, converse-bg .p-xxl-1 { + padding: 0.25rem !important; + } + .conversejs .p-xxl-2, converse-bg .p-xxl-2 { + padding: 0.5rem !important; + } + .conversejs .p-xxl-3, converse-bg .p-xxl-3 { + padding: 1rem !important; + } + .conversejs .p-xxl-4, converse-bg .p-xxl-4 { + padding: 1.5rem !important; + } + .conversejs .p-xxl-5, converse-bg .p-xxl-5 { + padding: 3rem !important; + } + .conversejs .px-xxl-0, converse-bg .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .conversejs .px-xxl-1, converse-bg .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .conversejs .px-xxl-2, converse-bg .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .conversejs .px-xxl-3, converse-bg .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .conversejs .px-xxl-4, converse-bg .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .conversejs .px-xxl-5, converse-bg .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .conversejs .py-xxl-0, converse-bg .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .conversejs .py-xxl-1, converse-bg .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .conversejs .py-xxl-2, converse-bg .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .conversejs .py-xxl-3, converse-bg .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .conversejs .py-xxl-4, converse-bg .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .conversejs .py-xxl-5, converse-bg .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .conversejs .pt-xxl-0, converse-bg .pt-xxl-0 { + padding-top: 0 !important; + } + .conversejs .pt-xxl-1, converse-bg .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .conversejs .pt-xxl-2, converse-bg .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .conversejs .pt-xxl-3, converse-bg .pt-xxl-3 { + padding-top: 1rem !important; + } + .conversejs .pt-xxl-4, converse-bg .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .conversejs .pt-xxl-5, converse-bg .pt-xxl-5 { + padding-top: 3rem !important; + } + .conversejs .pe-xxl-0, converse-bg .pe-xxl-0 { + padding-right: 0 !important; + } + .conversejs .pe-xxl-1, converse-bg .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .conversejs .pe-xxl-2, converse-bg .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .conversejs .pe-xxl-3, converse-bg .pe-xxl-3 { + padding-right: 1rem !important; + } + .conversejs .pe-xxl-4, converse-bg .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .conversejs .pe-xxl-5, converse-bg .pe-xxl-5 { + padding-right: 3rem !important; + } + .conversejs .pb-xxl-0, converse-bg .pb-xxl-0 { + padding-bottom: 0 !important; + } + .conversejs .pb-xxl-1, converse-bg .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .conversejs .pb-xxl-2, converse-bg .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .conversejs .pb-xxl-3, converse-bg .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .conversejs .pb-xxl-4, converse-bg .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .conversejs .pb-xxl-5, converse-bg .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .conversejs .ps-xxl-0, converse-bg .ps-xxl-0 { + padding-left: 0 !important; + } + .conversejs .ps-xxl-1, converse-bg .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .conversejs .ps-xxl-2, converse-bg .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .conversejs .ps-xxl-3, converse-bg .ps-xxl-3 { + padding-left: 1rem !important; + } + .conversejs .ps-xxl-4, converse-bg .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .conversejs .ps-xxl-5, converse-bg .ps-xxl-5 { + padding-left: 3rem !important; + } + .conversejs .gap-xxl-0, converse-bg .gap-xxl-0 { + gap: 0 !important; + } + .conversejs .gap-xxl-1, converse-bg .gap-xxl-1 { + gap: 0.25rem !important; + } + .conversejs .gap-xxl-2, converse-bg .gap-xxl-2 { + gap: 0.5rem !important; + } + .conversejs .gap-xxl-3, converse-bg .gap-xxl-3 { + gap: 1rem !important; + } + .conversejs .gap-xxl-4, converse-bg .gap-xxl-4 { + gap: 1.5rem !important; + } + .conversejs .gap-xxl-5, converse-bg .gap-xxl-5 { + gap: 3rem !important; + } + .conversejs .row-gap-xxl-0, converse-bg .row-gap-xxl-0 { + row-gap: 0 !important; + } + .conversejs .row-gap-xxl-1, converse-bg .row-gap-xxl-1 { + row-gap: 0.25rem !important; + } + .conversejs .row-gap-xxl-2, converse-bg .row-gap-xxl-2 { + row-gap: 0.5rem !important; + } + .conversejs .row-gap-xxl-3, converse-bg .row-gap-xxl-3 { + row-gap: 1rem !important; + } + .conversejs .row-gap-xxl-4, converse-bg .row-gap-xxl-4 { + row-gap: 1.5rem !important; + } + .conversejs .row-gap-xxl-5, converse-bg .row-gap-xxl-5 { + row-gap: 3rem !important; + } + .conversejs .column-gap-xxl-0, converse-bg .column-gap-xxl-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .conversejs .column-gap-xxl-1, converse-bg .column-gap-xxl-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .conversejs .column-gap-xxl-2, converse-bg .column-gap-xxl-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .conversejs .column-gap-xxl-3, converse-bg .column-gap-xxl-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .conversejs .column-gap-xxl-4, converse-bg .column-gap-xxl-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .conversejs .column-gap-xxl-5, converse-bg .column-gap-xxl-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .conversejs .text-xxl-start, converse-bg .text-xxl-start { + text-align: left !important; + } + .conversejs .text-xxl-end, converse-bg .text-xxl-end { + text-align: right !important; + } + .conversejs .text-xxl-center, converse-bg .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .conversejs .fs-1, converse-bg .fs-1 { + font-size: 2.5rem !important; + } + .conversejs .fs-2, converse-bg .fs-2 { + font-size: 2rem !important; + } + .conversejs .fs-3, converse-bg .fs-3 { + font-size: 1.75rem !important; + } + .conversejs .fs-4, converse-bg .fs-4 { + font-size: 1.5rem !important; + } +} +@media print { + .conversejs .d-print-inline, converse-bg .d-print-inline { + display: inline !important; + } + .conversejs .d-print-inline-block, converse-bg .d-print-inline-block { + display: inline-block !important; + } + .conversejs .d-print-block, converse-bg .d-print-block { + display: block !important; + } + .conversejs .d-print-grid, converse-bg .d-print-grid { + display: grid !important; + } + .conversejs .d-print-inline-grid, converse-bg .d-print-inline-grid { + display: inline-grid !important; + } + .conversejs .d-print-table, converse-bg .d-print-table { + display: table !important; + } + .conversejs .d-print-table-row, converse-bg .d-print-table-row { + display: table-row !important; + } + .conversejs .d-print-table-cell, converse-bg .d-print-table-cell { + display: table-cell !important; + } + .conversejs .d-print-flex, converse-bg .d-print-flex { + display: flex !important; + } + .conversejs .d-print-inline-flex, converse-bg .d-print-inline-flex { + display: inline-flex !important; + } + .conversejs .d-print-none, converse-bg .d-print-none { + display: none !important; + } +} + +.conversejs, .conversejs-bg, #conversejs-bg, body.converse-fullscreen { + --avatar-border-radius: 10%; + --message-avatar-width: 36px; + --message-avatar-height: 36px; + --controlbox-width: 250px; + --chatroom-width: 500px; + --chat-textarea-height: 60px; + --chat-separator-border-bottom: 2px solid var(--chat-color); + --chatbox-button-size: 14px; + --raised-el-shadow: 1px 1px 10px black; + --fullpage-chat-height: calc(var(--vh, 1vh) * 100); + --fullpage-chat-width: 100%; + --fullpage-chatbox-button-size: 16px; + --fullpage-emoji-picker-height: 300px; + --fullpage-max-chat-textarea-height: 15em; + --send-button-height: 27px; + --send-button-margin: 3px; + --inline-action-margin: 0.75em; + --button-border-radius: 5px; + --chatbox-border-radius: 4px; + --normal-font: "Helvetica", "Arial", sans-serif; + --heading-font: "Muli", normal; + --branding-font: "Baumans", cursive; + --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); + --line-height-small: 14px; + --line-height: 16px; + --line-height-large: 20px; + --line-height-huge: 27px; + --embedded-emoji-picker-height: 300px; + --minimized-chats-width: 130px; + --mobile-chat-width: 100%; + --mobile-chat-height: 400px; + --overlayed-chat-gutter: 1em; + --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; + --list-toggle-font-weight: normal; + --separator-text-color: var(--message-text-color); + --text-color: var(--foreground-color); +} + +.conversejs.converse-overlayed { + --message-font-size: var(--font-size-small); +} + +.conversejs[data-converse-theme=nord], .conversejs[data-bs-theme=nord], converse-bg[data-converse-theme=nord], converse-bg[data-bs-theme=nord] { + --polar-night-1: #2e3440; + --polar-night-2: #3b4252; + --polar-night-3: #434c5e; + --polar-night-4: #4c566a; + --snow-storm-1: #d8dee9; + --snow-storm-2: #e5e9f0; + --snow-storm-3: #eceff4; + --frost-1: #8fbcbb; + --frost-2: #88c0d0; + --frost-3: #81a1c1; + --frost-4: #5e81ac; + --green: #a3be8c; + --dark-green: #5f8341; + --orange: #d08770; + --purple: #b48ead; + --red: #bf616a; + --yellow: #ebcb8b; + --background-color: var(--snow-storm-2); + --foreground-color: var(--polar-night-2); + --primary-color: var(--frost-1) !important; + --secondary-color: var(--frost-3) !important; + --success-color: var(--green); + --danger-color: var(--red); + --warning-color: var(--orange); + --info-color: var(--purple); + --converse-highlight-color: var(--red); + --chat-status-away: var(--orange); + --chat-status-busy: var(--red); + --chat-status-offline: gray; + --chat-status-online: var(--dark-green); + --controlbox-color: var(--purple); + --disabled-color: var(--secondary-color); + --error-color: var(--red); + --focus-color: var(--secondary-color); + --heading-color: var(--purple); + --headlines-color: var(--yellow); + --link-color: var(--frost-4); + --selection-color: var(--frost-1); + --highlight-color: var(--snow-storm-2); + --highlight-color-hover: var(--snow-storm-1); + --chat-color: var(--dark-green); + --chat-header-fg-color: var(--background-color); + --chat-header-bg-color: var(--green); + --muc-color: var(--orange); + --muc-header-fg-color: var(--background-color); + --muc-header-bg-color: var(--muc-color); + --brand-heading-color: var(--frost-4); + --chat-color-hover: var(--chat-color); + --danger-color-hover: var(--danger-color); + --global-background-color: var(--background-color); + --link-color-hover: var(--link-color); + --muc-color-hover: var(--muc-color); + --primary-color-hover: var(--purple); + --secondary-color-hover: var(--snow-storm-1); + --success-color-hover: var(--success); + --warning-color-hover: var(--orange); +} +.conversejs[data-converse-theme=classic], .conversejs[data-bs-theme=classic], converse-bg[data-converse-theme=classic], converse-bg[data-bs-theme=classic] { + --blue: #387592; + --dark-blue: #397491; + --dark-green: #1e9652; + --dark-red: #d24e2b; + --gray: #818479; + --green: #3aa569; + --light-blue: #578ea9; + --lighter-blue: #eff4f7; + --orange: #e7a151; + --redder-orange: #e77051; + --foreground-color: #666; + --background-color: #efefef; + --primary-color: var(--blue) !important; + --secondary-color: var(--light-blue) !important; + --success-color: var(--green); + --danger-color: var(--dark-red); + --warning-color: var(--orange); + --info-color: var(--light-blue); + --converse-highlight-color: var(--dark-red); + --chat-status-away: var(--orange); + --chat-status-busy: var(--red); + --chat-status-offline: gray; + --chat-status-online: var(--green); + --controlbox-color: var(--light-blue); + --disabled-color: gray; + --error-color: var(--dark-red); + --focus-color: #aaa; + --heading-color: var(--background-color); + --headlines-color: var(--orange); + --link-color: var(--dark-blue); + --selection-color: black; + --highlight-color: var(--lighter-blue); + --highlight-color-hover: var(--lighter-blue); + --chat-color: var(--dark-green); + --chat-header-fg-color: var(--background-color); + --chat-header-bg-color: var(--chat-color); + --muc-color: var(--redder-orange); + --muc-header-fg-color: var(--background-color); + --muc-header-bg-color: var(--muc-color); + --brand-heading-color: var(--blue); + --chat-color-hover: var(--chat-color); + --danger-color-hover: var(--danger-color); + --global-background-color: var(--dark-blue); + --link-color-hover: var(--link-color); + --muc-color-hover: var(--muc-color); + --primary-color-hover: var(--dark-blue); + --secondary-color-hover: #ddd; + --success-color-hover: var(--success); + --warning-color-hover: #d2842b; +} +.conversejs[data-converse-theme=dracula], .conversejs[data-bs-theme=dracula], converse-bg[data-converse-theme=dracula], converse-bg[data-bs-theme=dracula] { + --cyan: #8be9fd; + --green: #50fa7b; + --orange: #ffb86c; + --pink: #ff79c6; + --purple: #bd93f9; + --red: #ff5555; + --yellow: #f1fa8c; + --gray: #6272a4; + --darkgray: #212529; + --background-color: #282a36; + --foreground-color: #f8f8f2; + --primary-color: var(--purple) !important; + --secondary-color: var(--pink) !important; + --success-color: var(--green); + --danger-color: var(--pink); + --warning-color: var(--orange); + --info-color: var(--yellow); + --converse-highlight-color: var(--yellow); + --chat-status-away: var(--orange); + --chat-status-busy: var(--red); + --chat-status-offline: var(--gray); + --chat-status-online: var(--green); + --controlbox-color: var(--purple); + --disabled-color: var(--gray); + --error-color: var(--red); + --focus-color: var(--pink); + --heading-color: var(--purple); + --headlines-color: var(--pink); + --link-color: var(--cyan); + --selection-color: black; + --highlight-color: var(--gray); + --highlight-color-hover: var(--darkgray); + --chat-color: var(--green); + --chat-header-fg-color: var(--chat-color); + --chat-header-bg-color: var(--background-color); + --muc-color: var(--orange); + --muc-header-fg-color: var(--muc-color); + --muc-header-bg-color: var(--background-color); + --brand-heading-color: var(--cyan); + --chat-color-hover: var(--chat-color); + --danger-color-hover: var(--danger-color); + --global-background-color: var(--background-color); + --link-color-hover: var(--link-color); + --muc-color-hover: var(--muc-color); + --primary-color-hover: var(--purple); + --secondary-color-hover: var(--secondary-color); + --success-color-hover: var(--success); + --warning-color-hover: var(--orange); +} +.conversejs[data-converse-theme=cyberpunk], .conversejs[data-bs-theme=cyberpunk], converse-bg[data-converse-theme=cyberpunk], converse-bg[data-bs-theme=cyberpunk] { + --blue: #1ba2f6; + --cyan: #32fbe2; + --green: #3cf281; + --indigo: #6610f2; + --orange: #f1b633; + --pink: #ea39b8; + --purple: #6f42c1; + --red: #e44c55; + --teal: #3f81a2; + --white: #efefef; + --yellow: #ffc107; + --background-color: #1a0933; + --background-color-lighter: #2C174C; + --foreground-color: var(--white); + --primary-color: var(--purple) !important; + --secondary-color: var(--indigo) !important; + --success-color: var(--green); + --danger-color: var(--red); + --warning-color: var(--orange); + --info-color: var(--yellow); + --converse-highlight-color: var(--yellow); + --chat-status-away: var(--orange); + --chat-status-busy: var(--red); + --chat-status-offline: gray; + --chat-status-online: var(--green); + --controlbox-color: var(--purple); + --disabled-color: gray; + --error-color: var(--red); + --focus-color: var(--secondary-color); + --heading-color: var(--purple); + --headlines-color: var(--pink); + --link-color: var(--cyan); + --selection-color: black; + --highlight-color: var(--purple); + --highlight-color-hover: var(--background-color-lighter); + --chat-color: var(--green); + --chat-header-fg-color: var(--chat-color); + --chat-header-bg-color: var(--background-color); + --muc-color: var(--orange); + --muc-header-fg-color: var(--muc-color); + --muc-header-bg-color: var(--background-color); + --brand-heading-color: var(--cyan); + --chat-color-hover: var(--chat-color); + --danger-color-hover: var(--danger-color); + --global-background-color: var(--background-color); + --link-color-hover: var(--link-color); + --muc-color-hover: var(--muc-color); + --primary-color-hover: var(--purple); + --secondary-color-hover: var(--secondary-color); + --success-color-hover: var(--success); + --warning-color-hover: var(--orange); +} +.conversejs[data-converse-theme=cyberpunk] #controlbox .flyout, .conversejs[data-bs-theme=cyberpunk] #controlbox .flyout, converse-bg[data-converse-theme=cyberpunk] #controlbox .flyout, converse-bg[data-bs-theme=cyberpunk] #controlbox .flyout { + box-shadow: 0 0 1rem 0rem rgba(234, 57, 184, 0.5) inset, 0 0 2rem 0rem rgba(234, 57, 184, 0.2) inset, 0 0 4rem 2rem rgba(234, 57, 184, 0.1) inset !important; +} +.conversejs[data-converse-theme=cyberpunk] .modal-header .btn-close, .conversejs[data-bs-theme=cyberpunk] .modal-header .btn-close, converse-bg[data-converse-theme=cyberpunk] .modal-header .btn-close, converse-bg[data-bs-theme=cyberpunk] .modal-header .btn-close { + background-color: var(--header-color); +} +.conversejs[data-converse-theme=cyberpunk] .message .separator-text, .conversejs[data-bs-theme=cyberpunk] .message .separator-text, converse-bg[data-converse-theme=cyberpunk] .message .separator-text, converse-bg[data-bs-theme=cyberpunk] .message .separator-text { + border-radius: 50px; + box-shadow: 0 0 0.25rem rgba(60, 242, 129, 0.8), 0 0 1rem rgba(60, 242, 129, 0.2), 0 0 4rem rgba(60, 242, 129, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .card, .conversejs[data-bs-theme=cyberpunk] .card, converse-bg[data-converse-theme=cyberpunk] .card, converse-bg[data-bs-theme=cyberpunk] .card { + box-shadow: inset 0 0 0.5rem rgba(234, 57, 184, 0.8), inset 0 0 1rem rgba(234, 57, 184, 0.4), inset 0 0 2rem rgba(234, 57, 184, 0.3), inset 0 0 4rem rgba(234, 57, 184, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .chat-toolbar, .conversejs[data-bs-theme=cyberpunk] .chat-toolbar, converse-bg[data-converse-theme=cyberpunk] .chat-toolbar, converse-bg[data-bs-theme=cyberpunk] .chat-toolbar { + box-shadow: 0 0 0.5rem rgba(60, 242, 129, 0.4), 0 0 2rem rgba(60, 242, 129, 0.2), 0 0 4rem rgba(60, 242, 129, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .chat-head-chatbox, .conversejs[data-bs-theme=cyberpunk] .chat-head-chatbox, converse-bg[data-converse-theme=cyberpunk] .chat-head-chatbox, converse-bg[data-bs-theme=cyberpunk] .chat-head-chatbox { + box-shadow: 0 0 1rem 0rem rgba(60, 242, 129, 0.5) inset, 0 0 2rem 0rem rgba(60, 242, 129, 0.4) inset, 0 0 4rem 2rem rgba(60, 242, 129, 0.2) inset, 0 0 1rem 0rem rgba(60, 242, 129, 0.4), 0 0 2rem 0rem rgba(60, 242, 129, 0.2), 0 0 4rem 0rem rgba(60, 242, 129, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .chatroom .message .separator-text, .conversejs[data-bs-theme=cyberpunk] .chatroom .message .separator-text, converse-bg[data-converse-theme=cyberpunk] .chatroom .message .separator-text, converse-bg[data-bs-theme=cyberpunk] .chatroom .message .separator-text { + border-radius: 50px; + box-shadow: 0 0 0.25rem rgba(255, 193, 7, 0.8), 0 0 1rem rgba(255, 193, 7, 0.2), 0 0 4rem rgba(255, 193, 7, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .chatroom .chat-head-chatroom, .conversejs[data-bs-theme=cyberpunk] .chatroom .chat-head-chatroom, converse-bg[data-converse-theme=cyberpunk] .chatroom .chat-head-chatroom, converse-bg[data-bs-theme=cyberpunk] .chatroom .chat-head-chatroom { + box-shadow: 0 0 1rem 0rem rgba(255, 193, 7, 0.5) inset, 0 0 2rem 0rem rgba(255, 193, 7, 0.4) inset, 0 0 4rem 2rem rgba(255, 193, 7, 0.2) inset, 0 0 1rem 0rem rgba(255, 193, 7, 0.4), 0 0 2rem 0rem rgba(255, 193, 7, 0.2), 0 0 4rem 0rem rgba(255, 193, 7, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .chatroom converse-muc-sidebar, .conversejs[data-bs-theme=cyberpunk] .chatroom converse-muc-sidebar, converse-bg[data-converse-theme=cyberpunk] .chatroom converse-muc-sidebar, converse-bg[data-bs-theme=cyberpunk] .chatroom converse-muc-sidebar { + box-shadow: 0 0 1rem 1rem rgba(255, 193, 7, 0.1) inset !important; +} +.conversejs[data-converse-theme=cyberpunk] .chatroom .chat-toolbar, .conversejs[data-bs-theme=cyberpunk] .chatroom .chat-toolbar, converse-bg[data-converse-theme=cyberpunk] .chatroom .chat-toolbar, converse-bg[data-bs-theme=cyberpunk] .chatroom .chat-toolbar { + box-shadow: 0 0 0.5rem rgba(255, 193, 7, 0.4), 0 0 2rem rgba(255, 193, 7, 0.2), 0 0 4rem rgba(255, 193, 7, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .moving-grid, .conversejs[data-bs-theme=cyberpunk] .moving-grid, converse-bg[data-converse-theme=cyberpunk] .moving-grid, converse-bg[data-bs-theme=cyberpunk] .moving-grid { + position: absolute; + top: 42%; + left: 0; + width: 100%; + height: 70%; + perspective: 1000px; +} +.conversejs[data-converse-theme=cyberpunk] .moving-grid:before, .conversejs[data-bs-theme=cyberpunk] .moving-grid:before, converse-bg[data-converse-theme=cyberpunk] .moving-grid:before, converse-bg[data-bs-theme=cyberpunk] .moving-grid:before { + content: ""; + position: absolute; + top: 4rem; + width: 100%; + height: 0; + box-shadow: 0 0 1rem 0.5rem rgba(255, 255, 255, 0.5), 0 0 2rem 0rem rgba(234, 57, 184, 0.3), 0 0 4rem 2rem rgba(234, 57, 184, 0.1) !important; +} +.conversejs[data-converse-theme=cyberpunk] .moving-grid .container, .conversejs[data-bs-theme=cyberpunk] .moving-grid .container, converse-bg[data-converse-theme=cyberpunk] .moving-grid .container, converse-bg[data-bs-theme=cyberpunk] .moving-grid .container { + position: relative; + width: 100%; + height: 300%; + border: 2px solid pink; + box-sizing: border-box; + transform-origin: top; + transform: rotateX(57deg) translateY(10%); + overflow: hidden; +} +.conversejs[data-converse-theme=cyberpunk] .moving-grid .container .static-lines, .conversejs[data-bs-theme=cyberpunk] .moving-grid .container .static-lines, converse-bg[data-converse-theme=cyberpunk] .moving-grid .container .static-lines, converse-bg[data-bs-theme=cyberpunk] .moving-grid .container .static-lines { + display: inline-block; + width: 100%; + height: 100%; +} +.conversejs[data-converse-theme=cyberpunk] .moving-grid .container .static-lines .vert, .conversejs[data-bs-theme=cyberpunk] .moving-grid .container .static-lines .vert, converse-bg[data-converse-theme=cyberpunk] .moving-grid .container .static-lines .vert, converse-bg[data-bs-theme=cyberpunk] .moving-grid .container .static-lines .vert { + display: inline-block; + height: 100%; + width: 2px; + background-color: pink; + margin-inline-start: 4.5%; + box-shadow: 0 2px 21px pink; +} +.conversejs[data-converse-theme=cyberpunk] .moving-grid .container .moving-lines, .conversejs[data-bs-theme=cyberpunk] .moving-grid .container .moving-lines, converse-bg[data-converse-theme=cyberpunk] .moving-grid .container .moving-lines, converse-bg[data-bs-theme=cyberpunk] .moving-grid .container .moving-lines { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 300%; +} +.conversejs[data-converse-theme=cyberpunk] .moving-grid .container .moving-lines .horz, .conversejs[data-bs-theme=cyberpunk] .moving-grid .container .moving-lines .horz, converse-bg[data-converse-theme=cyberpunk] .moving-grid .container .moving-lines .horz, converse-bg[data-bs-theme=cyberpunk] .moving-grid .container .moving-lines .horz { + display: inline-block; + width: 100%; + height: 3px; + margin-top: 4.8%; + background-color: pink; + box-shadow: 2px 0 21px pink; + animation: lines 15000ms linear infinite; +} +@keyframes lines { + from { + transform: translateY(-65px); + } + to { + transform: translateY(65px); + } +} + +.conversejs { + color: var(--text-color); + font-family: var(--normal-font); + font-size: var(--font-size); +} +.conversejs .flyout { + position: absolute; +} +.conversejs .img-thumbnail { + background-color: var(--highlight-color); + border: 1px solid black; +} +.conversejs textarea:disabled { + background-color: var(--disabled) !important; +} +.conversejs .subdued { + opacity: 0.35; +} +.conversejs .close { + color: var(--foreground-color); + text-shadow: none; +} +.conversejs .close:hover { + color: var(--primary-color); +} +.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); +} +.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: -0.25em; +} +.conversejs .brand-heading .brand-name .byline { + font-family: var(--heading-font); + font-size: 0.3em; + margin-bottom: 0.75em; + margin-inline-start: -2.7em; + opacity: 0.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-inline-end: 0.25em; + margin-bottom: -0.25em; +} +.conversejs .brand-heading .converse-svg-logo .cls-1 { + isolation: isolate; +} +.conversejs .brand-heading .converse-svg-logo .cls-2 { + opacity: 0.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: 0em; + margin-top: -0.2em; +} +.conversejs .brand-heading--inverse .byline { + margin: 0; + font-family: var(--heading-font); + font-size: 0.25em; + opacity: 0.55; + margin-inline-start: -7em; + word-spacing: 5px; +} +.conversejs ::-moz-placeholder { + color: var(--secondary-color); +} +.conversejs ::placeholder { + color: var(--secondary-color); +} +.conversejs ::-moz-selection { + background-color: var(--selection-color); +} +.conversejs ::selection { + background-color: var(--selection-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 h1, .conversejs .h1, +.conversejs h2, +.conversejs .h2, +.conversejs h3, +.conversejs .h3, +.conversejs h4, +.conversejs .h4, +.conversejs h5, +.conversejs .h5, +.conversejs h6, +.conversejs .h6 { + color: var(--heading-color); +} +.conversejs ul li { + height: auto; +} +.conversejs textarea, +.conversejs input[type=submit], +.conversejs input[type=button], +.conversejs input[type=text], +.conversejs input[type=password], +.conversejs button { + 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 ul, +.conversejs ol, +.conversejs dl { + font: inherit; + margin: 0; +} +.conversejs a { + cursor: pointer; +} +.conversejs a, +.conversejs a:visited, +.conversejs a:not([href]):not([tabindex]), +.conversejs .clickable { + text-decoration: none; + color: var(--link-color); + text-shadow: none; + cursor: pointer; +} +.conversejs a:hover, +.conversejs a:visited:hover, +.conversejs a:not([href]):not([tabindex]):hover, +.conversejs .clickable:hover { + color: var(--link-color-hover); + text-decoration: none; + text-shadow: none; +} +.conversejs a.fa, .conversejs a.far, .conversejs a.fas, +.conversejs a:visited.fa, +.conversejs a:visited.far, +.conversejs a:visited.fas, +.conversejs a:not([href]):not([tabindex]).fa, +.conversejs a:not([href]):not([tabindex]).far, +.conversejs a:not([href]):not([tabindex]).fas, +.conversejs .clickable.fa, +.conversejs .clickable.far, +.conversejs .clickable.fas { + color: var(--secondary-color); +} +.conversejs a.fa:hover, .conversejs a.far:hover, .conversejs a.fas:hover, +.conversejs a:visited.fa:hover, +.conversejs a:visited.far:hover, +.conversejs a:visited.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 .clickable.fa:hover, +.conversejs .clickable.far:hover, +.conversejs .clickable.fas:hover { + color: var(--icon-hover-color); +} +.conversejs .clickable:hover { + cursor: pointer; +} +.conversejs svg { + border-radius: var(--chatbox-border-radius); +} +.conversejs .fa, +.conversejs .far, +.conversejs .fas { + color: var(--secondary-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(--secondary-color); +} +.conversejs .selected { + color: var(--link-color) !important; +} +.conversejs .selected svg { + fill: var(--link-color); +} +.conversejs .no-text-select { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +@keyframes colorchange-chatmessage { + 0% { + background-color: rgb(141, 216, 174); + } + 25% { + background-color: rgba(141, 216, 174, 0.75); + } + 50% { + background-color: rgba(141, 216, 174, 0.5); + } + 75% { + background-color: rgba(141, 216, 174, 0.25); + } + 100% { + background-color: transparent; + } +} +@keyframes colorchange-chatmessage-muc { + 0% { + background-color: rgb(255, 181, 162); + } + 25% { + background-color: rgba(255, 181, 162, 0.75); + } + 50% { + background-color: rgba(255, 181, 162, 0.5); + } + 75% { + background-color: rgba(255, 181, 162, 0.25); + } + 100% { + background-color: transparent; + } +} +@keyframes fadein { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + visibility: visible; + } + 100% { + opacity: 0; + visibility: hidden; + } +} +.conversejs .fade-in { + opacity: 0; /* make things invisible upon start */ + animation-name: fadein; + animation-fill-mode: forwards; + animation-duration: 0.5s; + animation-timing-function: ease; +} +.conversejs .visible { + opacity: 0; /* make things invisible upon start */ + animation-name: fadein; + animation-fill-mode: forwards; + animation-duration: 500ms; + animation-timing-function: ease; +} +.conversejs .hidden { + opacity: 0 !important; + display: none !important; +} +.conversejs .fade-out { + animation-duration: 0.5s; + animation-fill-mode: forwards; + animation-name: fadeOut; + animation-timing-function: ease-in-out; +} +.conversejs .collapsed { + height: 0 !important; + overflow: hidden !important; + padding: 0 !important; +} +.conversejs .locked { + padding-inline-end: 22px; +} +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(359deg); + } +} +.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 .reg-feedback, +.conversejs #converse-login .conn-feedback { + display: block; + text-align: center; + width: 100%; +} +.conversejs .avatar-autocomplete { + margin-inline-end: 0.5em; + vertical-align: middle; +} +.conversejs .activated { + display: block !important; +} +.conversejs .form-help { + color: var(--secondary-color); + font-size: 90%; +} +.conversejs .nav { + --converse-nav-link-color: var(--primary-color); + --converse-nav-link-hover-color: var(--focus-color); +} +.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-inline-start: 16.666667%; + } +} +@media screen and (min-width: 768px) { + .conversejs .offset-md-2 { + margin-inline-start: 16.666667%; + } + .conversejs .offset-md-3 { + margin-inline-start: 25%; + } +} +@media screen and (min-width: 992px) { + .conversejs .offset-lg-2 { + margin-inline-start: 16.666667%; + } + .conversejs .offset-lg-3 { + margin-inline-start: 25%; + } +} +@media screen and (min-width: 1200px) { + .conversejs .offset-xl-2 { + margin-inline-start: 16.666667%; + } +} +@media screen and (max-height: 450px) { + .conversejs { + left: 0; + } +} +.conversejs .alert-info h3, .conversejs .alert-info .h3, .conversejs .alert-danger h3, .conversejs .alert-danger .h3 { + color: var(--background-color); + font-size: large; +} +.conversejs .alert-info .modal-title, .conversejs .alert-danger .modal-title { + font-size: 110%; +} +.conversejs .alert-info .close, .conversejs .alert-danger .close { + color: var(--background-color); +} +.conversejs .alert-info { + color: var(--background-color); + background-color: var(--info-color); + border-color: var(--info-dark); +} +.conversejs .alert-danger { + color: var(--background-color); + border-color: var(--danger-color-dark); + background-color: var(--danger-color); +} +.conversejs .alert-danger .disconnect-msg { + color: var(--background-color) !important; +} + +.conversejs { + --button-text-color: var(--background-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-inline-end: 0.5em; +} +.conversejs .btn i.fa.only-icon, .conversejs .btn i.far.only-icon, .conversejs .btn i.fas.only-icon { + margin-inline-end: 0; +} +.conversejs .btn converse-icon { + display: inline-block; + margin-inline-end: 0; +} +.conversejs .btn converse-icon svg { + color: var(--button-text-color); +} +.conversejs .btn-primary, +.conversejs .btn-outline-primary { + --converse-btn-color: var(--button-text-color); + --converse-btn-bg: var(--primary-color); + --converse-btn-disabled-bg: var(--disabled-color); + --converse-btn-border-color: var(--primary-color); + --converse-btn-hover-bg: var(--primary-color); + --converse-btn-hover-border-color: var(--primary-color-hover); + --converse-btn-active-bg: var(--primary-color); + --converse-btn-active-border-color: var(--primary-color); + --converse-btn-disabled-color: var(--primary-color); + --converse-btn-disabled-border-color: var(--primary-color); +} +.conversejs .btn-secondary, +.conversejs .btn-outline-secondary { + --converse-btn-color: var(--button-text-color); + --converse-btn-bg: var(--secondary-color); + --converse-btn-disabled-bg: var(--disabled-color); + --converse-btn-border-color: var(--secondary-color); + --converse-btn-hover-bg: var(--secondary-color); + --converse-btn-hover-border-color: var(--secondary-color-hover); + --converse-btn-active-bg: var(--secondary-color); + --converse-btn-active-border-color: var(--secondary-color); + --converse-btn-disabled-color: var(--secondary-color); + --converse-btn-disabled-border-color: var(--secondary-color); +} +.conversejs .btn-success, +.conversejs .btn-outline-success { + --converse-btn-color: var(--button-text-color); + --converse-btn-bg: var(--success-color); + --converse-btn-disabled-bg: var(--disabled-color); + --converse-btn-border-color: var(--success-color); + --converse-btn-hover-bg: var(--success-color-hover); + --converse-btn-hover-border-color: var(--success-color-hover); + --converse-btn-active-bg: var(--success-color); + --converse-btn-active-border-color: var(--success-color); + --converse-btn-disabled-color: var(--success-color); + --converse-btn-disabled-border-color: var(--success-color); +} +.conversejs .btn-warning, +.conversejs .btn-outline-warning { + --converse-btn-color: var(--button-text-color); + --converse-btn-bg: var(--warning-color); + --converse-btn-disabled-bg: var(--disabled-color); + --converse-btn-border-color: var(--warning-color); + --converse-btn-hover-bg: var(--warning-color-hover); + --converse-btn-hover-border-color: var(--warning-color-hover); + --converse-btn-active-bg: var(--warning-color); + --converse-btn-active-border-color: var(--warning-color); + --converse-btn-disabled-color: var(--warning-color); + --converse-btn-disabled-border-color: var(--warning-color); +} +.conversejs .btn-danger, +.conversejs .btn-outline-danger { + --converse-btn-color: var(--button-text-color); + --converse-btn-bg: var(--danger-color); + --converse-btn-disabled-bg: var(--disabled-color); + --converse-btn-border-color: var(--danger-color); + --converse-btn-hover-bg: var(--danger-color-hover); + --converse-btn-hover-border-color: var(--danger-color-hover); + --converse-btn-active-bg: var(--danger-color); + --converse-btn-active-border-color: var(--danger-color); + --converse-btn-disabled-color: var(--danger-color); + --converse-btn-disabled-border-color: var(--danger-color); +} +.conversejs .btn-info, +.conversejs .btn-outline-info { + --converse-btn-color: var(--button-text-color); + --converse-btn-bg: var(--info-color); + --converse-btn-disabled-bg: var(--disabled-color); + --converse-btn-border-color: var(--info-color); + --converse-btn-hover-bg: var(--info-color-dark); + --converse-btn-hover-border-color: var(--info-color-dark); + --converse-btn-active-bg: var(--info-color); + --converse-btn-active-border-color: var(--info-color); + --converse-btn-disabled-color: var(--info-color); + --converse-btn-disabled-border-color: var(--info-color); +} +.conversejs .btn--transparent { + background: transparent; + border: none; +} +.conversejs .btn-circle { + width: 30px; + height: 30px; + text-align: center; + padding: 0.5em 0; + font-size: var(--font-size-small); + line-height: 1.428571429; + border-radius: 50%; +} + +.conversejs .badge { + --converse-badge-padding-x: 0.65em; + --converse-badge-padding-y: 0.35em; + --converse-badge-font-size: 0.75em; + --converse-badge-font-weight: 700; + --converse-badge-color: #fff; + --converse-badge-border-radius: var(--converse-border-radius); + display: inline-block; + padding: var(--converse-badge-padding-y) var(--converse-badge-padding-x); + font-size: var(--converse-badge-font-size); + font-weight: var(--converse-badge-font-weight); + line-height: 1; + color: var(--converse-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--converse-badge-border-radius); +} +.conversejs .badge:empty { + display: none; +} +.conversejs .btn .badge { + position: relative; + top: -1px; +} +.conversejs .badge { + color: var(--background-color); + font-size: 90%; + font-weight: normal; + 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:focus, .conversejs .badge-primary:hover, .conversejs .badge-primary:active { + background-color: var(--primary-color-hover) !important; + border-color: transparent !important; +} +.conversejs .badge-info { + background-color: var(--primary-color); +} +.conversejs .badge-info:hover { + background-color: var(--primary-color-hover); +} +.conversejs .badge-secondary { + background-color: var(--secondary-color-color); + border-color: var(--secondary-color-color); +} +.conversejs .badge-secondary:hover { + background-color: var(--secondary-color-color-dark); + border-color: var(--secondary-color-color-dark); +} + +.conversejs .card { + --converse-card-border-color: var(--secondary-color); +} + +.conversejs .btn--small { + font-size: 80%; + font-weight: normal; +} +.conversejs form .form-instructions { + color: var(--text-color); + margin-bottom: 1em; +} +.conversejs form .hidden-username { + opacity: 0 !important; + height: 0 !important; + padding: 0 !important; +} +.conversejs form .error-feedback { + margin-bottom: 0.5em; +} +.conversejs form .form-control[readonly] { + color: var(--disabled-color); +} +.conversejs form .form-control { + color: var(--text-color); + background-color: var(--background-color); +} +.conversejs form .form-control:focus { + color: var(--text-color); + background-color: var(--background-color); +} +.conversejs form .form-control::-moz-placeholder { /* Firefox 19+ */ + color: var(--secondary-color); +} +.conversejs form .form-control::placeholder { + color: var(--secondary-color); +} +.conversejs form .form-control--labeled { + margin-top: 0.5em; +} +.conversejs form .btn-group .clear-input { + margin-top: 0.5em; + margin-bottom: 0.5em; + position: absolute; + right: 0.2em; + cursor: pointer; + font-size: var(--font-size); +} +.conversejs form#converse-register, .conversejs form#converse-login { + background: var(--background-color); +} +.conversejs form#converse-register legend, .conversejs form#converse-login legend { + width: 100%; + text-align: center; + margin: 0 auto 0.5em auto; +} +.conversejs form#converse-register fieldset.buttons, .conversejs form#converse-login fieldset.buttons { + text-align: center; +} +.conversejs form#converse-register .login-anon, .conversejs form#converse-login .login-anon { + height: auto; + white-space: normal; +} +.conversejs form#converse-register .save-submit, .conversejs form#converse-login .save-submit { + color: var(--success-color); +} +.conversejs form#converse-register .form-url, .conversejs form#converse-login .form-url { + display: block; + font-weight: normal; + 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 fieldset { + margin-bottom: 1.5em; +} +.conversejs form.converse-form select, +.conversejs form.converse-form input[type=password], +.conversejs form.converse-form input[type=number], +.conversejs form.converse-form input[type=text] { + min-width: 50%; +} +.conversejs form.converse-form input.error { + border: 1px solid var(--error-color); + color: var(--text-color); +} +.conversejs form.converse-form .text-muted { + color: var(--secondary-color) !important; + font-size: 85%; + padding-top: 0.5em; +} +.conversejs form.converse-form .text-muted a { + color: var(--link-color); +} +.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 { + --converse-list-group-color: var(--converse-body-color); + --converse-list-group-bg: var(--converse-body-bg); + --converse-list-group-border-color: var(--converse-border-color); + --converse-list-group-border-width: var(--converse-border-width); + --converse-list-group-border-radius: var(--converse-border-radius); + --converse-list-group-item-padding-x: 1rem; + --converse-list-group-item-padding-y: 0.5rem; + --converse-list-group-action-color: var(--converse-secondary-color); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-tertiary-bg); + --converse-list-group-action-active-color: var(--converse-body-color); + --converse-list-group-action-active-bg: var(--converse-secondary-bg); + --converse-list-group-disabled-color: var(--converse-secondary-color); + --converse-list-group-disabled-bg: var(--converse-body-bg); + --converse-list-group-active-color: #fff; + --converse-list-group-active-bg: #0d6efd; + --converse-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--converse-list-group-border-radius); +} +.conversejs .list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.conversejs .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} +.conversejs .list-group-item-action { + width: 100%; + color: var(--converse-list-group-action-color); + text-align: inherit; +} +.conversejs .list-group-item-action:hover, .conversejs .list-group-item-action:focus { + z-index: 1; + color: var(--converse-list-group-action-hover-color); + text-decoration: none; + background-color: var(--converse-list-group-action-hover-bg); +} +.conversejs .list-group-item-action:active { + color: var(--converse-list-group-action-active-color); + background-color: var(--converse-list-group-action-active-bg); +} +.conversejs .list-group-item { + position: relative; + display: block; + padding: var(--converse-list-group-item-padding-y) var(--converse-list-group-item-padding-x); + color: var(--converse-list-group-color); + text-decoration: none; + background-color: var(--converse-list-group-bg); + border: var(--converse-list-group-border-width) solid var(--converse-list-group-border-color); +} +.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: var(--converse-list-group-disabled-color); + pointer-events: none; + background-color: var(--converse-list-group-disabled-bg); +} +.conversejs .list-group-item.active { + z-index: 2; + color: var(--converse-list-group-active-color); + background-color: var(--converse-list-group-active-bg); + border-color: var(--converse-list-group-active-border-color); +} +.conversejs .list-group-item + .list-group-item { + border-top-width: 0; +} +.conversejs .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--converse-list-group-border-width)); + border-top-width: var(--converse-list-group-border-width); +} +.conversejs .list-group-horizontal { + flex-direction: row; +} +.conversejs .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; +} +.conversejs .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + 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: var(--converse-list-group-border-width); + border-left-width: 0; +} +.conversejs .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); +} +@media (min-width: 576px) { + .conversejs .list-group-horizontal-sm { + flex-direction: row; + } + .conversejs .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + 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: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 768px) { + .conversejs .list-group-horizontal-md { + flex-direction: row; + } + .conversejs .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + 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: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 992px) { + .conversejs .list-group-horizontal-lg { + flex-direction: row; + } + .conversejs .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + 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: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 1200px) { + .conversejs .list-group-horizontal-xl { + flex-direction: row; + } + .conversejs .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + 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: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +@media (min-width: 1400px) { + .conversejs .list-group-horizontal-xxl { + flex-direction: row; + } + .conversejs .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--converse-list-group-border-radius); + border-top-right-radius: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--converse-list-group-border-radius); + border-bottom-left-radius: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--converse-list-group-border-width); + border-left-width: 0; + } + .conversejs .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--converse-list-group-border-width)); + border-left-width: var(--converse-list-group-border-width); + } +} +.conversejs .list-group-flush { + border-radius: 0; +} +.conversejs .list-group-flush > .list-group-item { + border-width: 0 0 var(--converse-list-group-border-width); +} +.conversejs .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} +.conversejs .list-group-item-primary { + --converse-list-group-color: var(--converse-primary-text-emphasis); + --converse-list-group-bg: var(--converse-primary-bg-subtle); + --converse-list-group-border-color: var(--converse-primary-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-primary-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-primary-border-subtle); + --converse-list-group-active-color: var(--converse-primary-bg-subtle); + --converse-list-group-active-bg: var(--converse-primary-text-emphasis); + --converse-list-group-active-border-color: var(--converse-primary-text-emphasis); +} +.conversejs .list-group-item-secondary { + --converse-list-group-color: var(--converse-secondary-text-emphasis); + --converse-list-group-bg: var(--converse-secondary-bg-subtle); + --converse-list-group-border-color: var(--converse-secondary-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-secondary-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-secondary-border-subtle); + --converse-list-group-active-color: var(--converse-secondary-bg-subtle); + --converse-list-group-active-bg: var(--converse-secondary-text-emphasis); + --converse-list-group-active-border-color: var(--converse-secondary-text-emphasis); +} +.conversejs .list-group-item-success { + --converse-list-group-color: var(--converse-success-text-emphasis); + --converse-list-group-bg: var(--converse-success-bg-subtle); + --converse-list-group-border-color: var(--converse-success-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-success-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-success-border-subtle); + --converse-list-group-active-color: var(--converse-success-bg-subtle); + --converse-list-group-active-bg: var(--converse-success-text-emphasis); + --converse-list-group-active-border-color: var(--converse-success-text-emphasis); +} +.conversejs .list-group-item-info { + --converse-list-group-color: var(--converse-info-text-emphasis); + --converse-list-group-bg: var(--converse-info-bg-subtle); + --converse-list-group-border-color: var(--converse-info-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-info-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-info-border-subtle); + --converse-list-group-active-color: var(--converse-info-bg-subtle); + --converse-list-group-active-bg: var(--converse-info-text-emphasis); + --converse-list-group-active-border-color: var(--converse-info-text-emphasis); +} +.conversejs .list-group-item-warning { + --converse-list-group-color: var(--converse-warning-text-emphasis); + --converse-list-group-bg: var(--converse-warning-bg-subtle); + --converse-list-group-border-color: var(--converse-warning-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-warning-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-warning-border-subtle); + --converse-list-group-active-color: var(--converse-warning-bg-subtle); + --converse-list-group-active-bg: var(--converse-warning-text-emphasis); + --converse-list-group-active-border-color: var(--converse-warning-text-emphasis); +} +.conversejs .list-group-item-danger { + --converse-list-group-color: var(--converse-danger-text-emphasis); + --converse-list-group-bg: var(--converse-danger-bg-subtle); + --converse-list-group-border-color: var(--converse-danger-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-danger-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-danger-border-subtle); + --converse-list-group-active-color: var(--converse-danger-bg-subtle); + --converse-list-group-active-bg: var(--converse-danger-text-emphasis); + --converse-list-group-active-border-color: var(--converse-danger-text-emphasis); +} +.conversejs .list-group-item-light { + --converse-list-group-color: var(--converse-light-text-emphasis); + --converse-list-group-bg: var(--converse-light-bg-subtle); + --converse-list-group-border-color: var(--converse-light-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-light-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-light-border-subtle); + --converse-list-group-active-color: var(--converse-light-bg-subtle); + --converse-list-group-active-bg: var(--converse-light-text-emphasis); + --converse-list-group-active-border-color: var(--converse-light-text-emphasis); +} +.conversejs .list-group-item-dark { + --converse-list-group-color: var(--converse-dark-text-emphasis); + --converse-list-group-bg: var(--converse-dark-bg-subtle); + --converse-list-group-border-color: var(--converse-dark-border-subtle); + --converse-list-group-action-hover-color: var(--converse-emphasis-color); + --converse-list-group-action-hover-bg: var(--converse-dark-border-subtle); + --converse-list-group-action-active-color: var(--converse-emphasis-color); + --converse-list-group-action-active-bg: var(--converse-dark-border-subtle); + --converse-list-group-active-color: var(--converse-dark-bg-subtle); + --converse-list-group-active-bg: var(--converse-dark-text-emphasis); + --converse-list-group-active-border-color: var(--converse-dark-text-emphasis); +} +.conversejs .list-group-item { + background-color: var(--background-color); +} +.conversejs .list-group-item.active { + background-color: var(--primary-color); + border-color: var(--primary-color-hover); +} +.conversejs .list-container { + text-align: start; + padding: 0.3em 0; +} +.conversejs .list-container .list-toggle { + font-family: var(--heading-font); + font-weight: var(--list-toggle-font-weight); + display: block; + color: var(--secondary-color); + padding: 0 0 0.5rem 0; +} +.conversejs .items-list { + padding-inline-end: 0; + padding-inline-start: 0; + text-align: start; +} +.conversejs .items-list .list-item { + border: none; + clear: both; + color: var(--text-color); + overflow: hidden; + padding: 0.5em 0; + word-wrap: break-word; + height: 2.5em; +} +.conversejs .items-list .list-item.unread-msgs { + font-weight: bold; +} +.conversejs .items-list .list-item:hover .list-item-link { + color: var(--foreground-color) !important; +} +.conversejs .items-list .list-item .list-item-link { + color: var(--foreground-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(--foreground-color) !important; +} +.conversejs .items-list .list-item .list-item-badge { + opacity: 1; + border-radius: 25%; + color: var(--background-color); + 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: 0.3em 0 0 0; + margin: 0 0 0 var(--inline-action-margin); + width: 2em; + height: 2em; + color: var(--secondary-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(--foreground-color); +} +.conversejs .items-list .list-item .list-item-action.button-on:hover { + color: var(--link-color-hover); +} +.conversejs .items-list .list-item .list-item-action:hover { + color: var(--secondary-color); + opacity: 1; +} +.conversejs .items-list .list-item .list-item-action:focus { + opacity: 1; +} +.conversejs .items-list .list-item .list-item-action--visible { + opacity: 1 !important; +} +.conversejs .items-list .list-item.open { + background-color: var(--highlight-color); +} +.conversejs .items-list .list-item.open:hover { + background-color: var(--highlight-color-hover); +} +.conversejs .items-list .list-item.open:hover .list-item-link { + color: var(--foreground-color); +} +.conversejs .items-list .list-item.open a { + color: var(--foreground-color); +} +.conversejs .items-list .list-item.open .list-item-action { + color: var(--secondary-color); +} +.conversejs .items-list .list-item.open .list-item-action:hover { + color: var(--primary-color); +} +.conversejs .items-list .list-item:hover { + background-color: var(--highlight-color-hover); +} +.conversejs .items-list .list-item:hover .list-item-action { + opacity: 1; +} +.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(--secondary-color); +} +.conversejs .msgs-indicator { + color: var(--background-color); + background-color: var(--chat-color); +} +.conversejs .message .show-msg-author-modal { + align-self: flex-start; + color: var(--link-color) !important; +} +.conversejs .message blockquote { + border-inline-start: 0.3em solid var(--info-color); + color: var(--info-color); + display: inline-block; + margin-bottom: 0.25em; + margin-inline-start: 0; + padding-inline-end: 1em; + padding-inline-start: 0.5em; +} +.conversejs .message code { + font-family: monospace; +} +.conversejs .message .mention { + font-weight: bold; +} +.conversejs .message .mention--self { + font-weight: normal; +} +.conversejs .message.date-separator, .conversejs .message.separator { + height: 2em; + margin: 0.5em 0 0 0; + position: relative; + text-align: center; + z-index: 0; +} +.conversejs .message.date-separator .separator, .conversejs .message.separator .separator { + border-top: 0px; + 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: var(--background-color); + bottom: 1px; + color: var(--foreground-color); + display: inline-block; + line-height: 2em; + padding: 0 1em; + position: relative; + z-index: 5; +} +.conversejs .message.chat-info { + color: var(--info-color); + font-size: var(--message-font-size); + line-height: var(--line-height-small); + font-size: 90%; + padding: 0.17rem 1rem; +} +.conversejs .message.chat-info.badge { + color: var(--chat-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: bold; +} +.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-inline-end: 0.2em; +} +.conversejs .message.chat-msg { + display: inline-flex; + width: 100%; + flex-direction: row; + padding: 0.25em 1rem; +} +.conversejs .message.chat-msg.onload { + animation: colorchange-chatmessage 1s; + -webkit-animation: colorchange-chatmessage 1s; +} +.conversejs .message.chat-msg:hover { + background-color: var(--highlight-color-hover); +} +.conversejs .message.chat-msg.correcting { + background-color: var(--highlight-color); +} +.conversejs .message.chat-msg .spoiler { + margin-top: 0.5em; +} +.conversejs .message.chat-msg .spoiler-hint { + margin-bottom: 0.5em; +} +.conversejs .message.chat-msg .spoiler-toggle { + color: var(--background-color); +} +.conversejs .message.chat-msg .spoiler-toggle i { + color: var(--background-color); + padding-inline-end: 0.5em; +} +.conversejs .message.chat-msg .spoiler-toggle:before { + padding-inline-end: 0.25em; + white-space: nowrap; +} +.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat .chat-msg__text { + color: var(--secondary-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(--foreground-color); +} +.conversejs .message.chat-msg .chat-msg__content--action { + width: 100%; + margin-inline-start: 0; +} +.conversejs .message.chat-msg .chat-msg__message { + line-height: 1.65em; + display: inline-flex; + flex-direction: column; + width: 100%; + overflow-wrap: break-word; +} +.conversejs .message.chat-msg .chat-msg__message .chat-msg__body--wrapper { + display: flex; +} +.conversejs .message.chat-msg .chat-msg__message .chat-msg__body--wrapper .chat-msg__text { + color: var(--foreground-color); + padding: 0; + white-space: pre-wrap; + word-wrap: break-word; + word-break: break-word; +} +.conversejs .message.chat-msg .chat-msg__message .chat-msg__body--wrapper .chat-msg__text a { + word-wrap: break-word; + word-break: break-all; + display: inline; +} +.conversejs .message.chat-msg .chat-msg__message .chat-msg__body--wrapper .chat-msg__text a.chat-image__link { + width: -moz-fit-content; + width: fit-content; + display: block; +} +.conversejs .message.chat-msg .chat-msg__message .chat-msg__body--wrapper .chat-msg__text img.emoji { + height: 1.5em; + width: 1.5em; + margin: 0 0.05em 0 0.1em; + vertical-align: -0.1em; +} +.conversejs .message.chat-msg .chat-msg__message .chat-msg__body--wrapper .chat-msg__text .emojione { + margin-bottom: -6px; +} +.conversejs .message.chat-msg .chat-msg__message .chat-msg__body--wrapper.error .chat-msg__text { + color: var(--disabled-color); +} +.conversejs .message.chat-msg .chat-msg__edit-modal { + cursor: pointer; + padding-inline-end: 0.5em; +} +.conversejs .message.chat-msg .chat-msg__subject { + font-weight: bold; + clear: right; +} +.conversejs .message.chat-msg .chat-msg__text--larger { + font-size: 1.6em; + padding-top: 0.25em; + padding-bottom: 0.25em; +} +.conversejs .message.chat-msg .chat-msg__error { + color: var(--error-color); +} +.conversejs .message.chat-msg .chat-msg__media { + margin-top: 0.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__author { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-family: var(--heading-font); + font-size: 115%; + font-weight: bold; + padding-bottom: 1px; +} +.conversejs .message.chat-msg .chat-msg__heading { + width: 100%; + padding-inline-end: 0.25rem; +} +.conversejs .message.chat-msg .chat-msg__heading .badge { + margin-inline-start: 0.5em; + font-family: var(--normal_font); +} +.conversejs .message.chat-msg .chat-msg__heading .chat-msg__time { + padding-inline-start: 0.25em; + padding-inline-end: 0.25em; + color: var(--secondary-color); +} +.conversejs .message.chat-msg .chat-msg__heading .fa-lock svg { + padding-bottom: 2px; +} +.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-inline-start: 0.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-inline-start: 0; +} +.conversejs .message.chat-msg .chat-msg__content { + width: calc(100% - var(--message-avatar-width)); +} +.conversejs .message.chat-msg.chat-msg--followup .chat-msg__heading, +.conversejs .message.chat-msg.chat-msg--followup .show-msg-author-modal { + display: none; +} +.conversejs .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content { + margin-inline-start: 2.75rem; + width: 100%; +} +.conversejs .message.chat-msg .chat-msg__receipt { + margin-inline-start: 0.5em; + margin-inline-end: 0.5em; + color: var(--success-color); +} +.conversejs .message .chat-msg__content { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: stretch; + margin-inline-start: 0.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: 0px; + border-bottom: 0.15em solid var(--muc-color); +} +.conversejs converse-chats.converse-overlayed .message.chat-msg.chat-msg--followup .chat-msg__content { + margin-inline-start: 0; +} + +@media screen and (max-width: 767px) { + converse-chats:not(.converse-embedded) .message.chat-msg .chat-msg__author { + white-space: normal; + } +} +@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"); +} +.conversejs, .converse-website { + /* Apparent font-awesome bug? The circle has some kind of bottom margin */ +} +.conversejs converse-icon:before, .converse-website converse-icon:before { + content: none !important; +} +.conversejs .fa-info-circle, .converse-website .fa-info-circle { + height: 1em; +} +/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/modal/styles/_modal.scss ***! + \*************************************************************************************************************************************************************************************************************************************************************/ +.conversejs .modal-header { + background-color: var(--primary-color); + border-bottom: none; + display: flex; + justify-content: space-between; +} +.conversejs .modal-header.alert-danger { + background-color: var(--error-color); +} +.conversejs .modal-header .modal-title { + color: var(--background-color); +} +.conversejs .modal-header .btn-close { + margin: 0; +} +.conversejs .modal-header .close { + color: var(--background-color); +} +.conversejs .modal-content { + background-color: var(--background-color); +} +.conversejs .modal-body .row { + margin-inline-start: 0; + margin-inline-end: 0; +} +.conversejs .occupant-details li { + margin-bottom: 1em; +} +.conversejs #converse-modals .modal .nav-item { + margin: 0.25em; +} +.conversejs #converse-modals .modal .nav-item .nav-link.active { + color: var(--background-color); +} +.conversejs #converse-modals .modal .nav-item:hover .nav-link { + color: var(--focus-color); + background-color: var(--background-color); +} +.conversejs #converse-modals .modal .nav-item:hover .nav-link.active { + color: var(--background-color); + background-color: var(--primary-color); +} +.conversejs #converse-modals .modal .modal-content { + box-shadow: var(--raised-el-shadow); +} +.conversejs #converse-modals .modal .modal-body { + overflow-y: auto; + max-height: 75vh; + margin-bottom: 2em; +} +.conversejs #converse-modals .modal .modal-body p { + padding: 0.25rem 0; +} +.conversejs #converse-modals .modal .modal-body p.form-help { + padding: 0; + margin-bottom: 0.5em; +} +.conversejs #converse-modals .modal .modal-body .confirm .form-group p:first-child { + font-size: 110%; + font-weight: bold; +} +.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-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 .role-form, .conversejs #converse-modals .affiliation-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: 0.25em; +} +.conversejs #converse-modals #omemo-tabpanel { + margin-top: 1em; +} +.conversejs #converse-modals .btn { + font-weight: normal; +} +/*!**************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/autocomplete/styles/_autocomplete.scss ***! + \**************************************************************************************************************************************************************************************************************************************************************************/ +.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: 0.3em; + border: 0.15em solid var(--muc-color); + box-shadow: 0.05em 0.2em 0.6em rgba(0, 0, 0, 0.1); + box-sizing: border-box; + left: 0; + list-style: none; + margin: 0.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: -0.43em; + left: 1em; + width: 0; + height: 0; + padding: 0.4em; + background: var(--background-color); + border: inherit; + border-inline-end: 0; + border-bottom: 0; + transform: rotate(45deg); + z-index: -1; +} +.conversejs .suggestion-box .suggestion-box__results > li, +.conversejs .suggestion-box > ul > li { + background: var(--background-color); + color: var(--text-color); + cursor: pointer; + display: flex; + overflow-x: hidden; + padding: 1em; + position: relative; + text-overflow: ellipsis; +} +.conversejs .suggestion-box .suggestion-box__results > li:hover mark, +.conversejs .suggestion-box > ul > li:hover mark { + background-color: unset; + color: var(--converse-highlight-color); +} +.conversejs .suggestion-box .suggestion-box__results > li mark, +.conversejs .suggestion-box > ul > li mark { + padding: 0; +} +.conversejs .suggestion-box .suggestion-box__results--below { + top: 3em; +} +.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: -0.43em; + left: 1em; + width: 0; + height: 0; + padding: 0.4em; + background: var(--background-color); + border: inherit; + border-inline-start: 0; + border-top: 0; + transform: rotate(45deg); +} +.conversejs .suggestion-box > ul[hidden], +.conversejs .suggestion-box > ul:empty { + display: none; +} +@supports (transform: scale(0)) { + .conversejs .suggestion-box > ul { + transition: 0.3s cubic-bezier(0.4, 0.2, 0.5, 1.4); + transform-origin: 1.43em -0.43em; + } + .conversejs .suggestion-box > ul[hidden], + .conversejs .suggestion-box > ul:empty { + opacity: 0; + transform: scale(0); + display: block; + transition-timing-function: ease; + } +} +.conversejs .suggestion-box > ul > li[aria-selected=true] { + background: var(--primary-color); + color: var(--foreground-color); +} +.conversejs .suggestion-box li:hover mark { + background: var(--secondary-color); + color: var(--link-color); +} +.conversejs .suggestion-box li[aria-selected=true] mark { + background: var(--muc-color); + color: inherit; +} + +.conversejs.converse-fullscreen .suggestion-box__results--above { + bottom: 4.5em; +} + +.conversejs.converse-overlayed .suggestion-box__results--above { + bottom: 3.5em; +} +/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/templates/styles/spinner.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************/ +.vertically-centered > .spinner-grow { + margin-top: 30%; +} +/*!******************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/avatar/avatar.scss ***! + \******************************************************************************************************************************************************************************************************************************************************/ +converse-avatar { + border: 0; + background: transparent; +} +converse-avatar.avatar-muc { + margin-inline-end: 0.5em; +} +converse-avatar.modal-avatar { + display: flex; + margin-bottom: 1em; +} +converse-avatar .avatar { + border-radius: var(--avatar-border-radius); +} +converse-avatar .avatar-initials { + color: white; + border-radius: var(--avatar-border-radius); + text-align: center; + display: inline-block; +} +/*!**************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/moderator-tools.scss ***! + \**************************************************************************************************************************************************************************************************************************************************************************/ +converse-modtools converse-icon svg { + fill: var(--link-color); +} +/*!*************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/bookmark-views/styles/bookmarks.scss ***! + \*************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs #controlbox .bookmarks-toggle, .conversejs #controlbox .bookmarks-toggle .fa { + color: var(--muc-color) !important; +} +.conversejs #controlbox .bookmarks-toggle:hover, .conversejs #controlbox .bookmarks-toggle .fa:hover { + color: var(--muc-color-hover) !important; +} + +converse-bookmarks .list-item-link { + padding: 0 1em; +} +converse-bookmarks .available-chatroom:hover .list-item-action { + opacity: 1 !important; +} +converse-bookmarks .available-chatroom:hover .list-item-action converse-icon svg { + fill: var(--muc-color); +} +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/chatboxviews/styles/chats.scss ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-chats.converse-overlayed > .row { + flex-direction: row-reverse; +} +.conversejs converse-chats.converse-overlayed.converse-chatboxes { + z-index: 1031; + position: fixed; + bottom: 0; + right: 0; + left: 1em; +} +.conversejs converse-chats.converse-fullscreen { + flex-wrap: nowrap; +} +.conversejs converse-chats.converse-fullscreen.converse-chatboxes { + position: fixed; + bottom: 0; + right: 0; + left: 0; +} +.conversejs converse-chats.converse-embedded { + bottom: auto; + height: 100%; + position: relative; + right: auto; + width: 100%; +} +.conversejs converse-chats.converse-embedded.converse-chatboxes { + z-index: 1031; + position: inherit; + flex-wrap: nowrap; + bottom: auto; + height: 100%; + width: 100%; +} +/*!********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/chat/styles/message-actions.scss ***! + \********************************************************************************************************************************************************************************************************************************************************************/ +converse-message-actions { + margin-inline-start: 0.5em; +} +converse-message-actions .chat-msg__actions .dropdown-menu { + min-width: 5rem; +} +converse-message-actions .chat-msg__actions i { + color: var(--foreground-color); + font-size: 70%; +} +converse-message-actions .chat-msg__actions button { + border: none; + background: transparent; + color: var(--foreground-color); + padding: 0 0.25em; +} +converse-message-actions .chat-msg__actions .btn--standalone { + opacity: 0; + margin-top: -0.2em; +} +converse-message-actions .chat-msg__actions .btn--standalone:focus { + opacity: 1; +} +converse-message-actions .chat-msg__actions .chat-msg__action { + width: 100%; + padding: 0.5em 1em; + text-align: start; + white-space: nowrap; +} +converse-message-actions .chat-msg__actions .chat-msg__action converse-icon { + margin-inline-end: 0.25em; +} +converse-message-actions .chat-msg__actions .chat-msg__action:hover { + color: var(--text-color); + background-color: var(--secondary-color); +} +/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/modals/styles/image.scss ***! + \************************************************************************************************************************************************************************************************************************************************************/ +converse-image-modal .chat-image--modal { + max-height: 99%; + max-width: 100%; +} +/*!**************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/components/styles/gif.scss ***! + \**************************************************************************************************************************************************************************************************************************************************************/ +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 0.25s ease-in-out; + z-index: 100; + display: contents; + position: relative; +} +.gifcontrol:after { + transition: background 0.25s ease-in-out; + position: absolute; + content: ""; + display: block; + left: calc(50% - 25px); + top: calc(50% - 25px); +} +.gifcontrol.loading { + background: rgba(255, 255, 255, 0.75); +} +.gifcontrol.loading:after { + background: #FFF; + width: 50px; + height: 50px; + border-radius: 50px; +} +.gifcontrol.playing { + /* Only show the 'stop' button on hover */ +} +.gifcontrol.playing:after { + opacity: 0; + transition: opacity 0.25s ease-in-out; + border-inline-start: 20px solid #FFF; + border-inline-end: 20px solid #FFF; + width: 50px; + height: 50px; +} +.gifcontrol.playing:hover:after { + opacity: 1; +} +.gifcontrol.paused { + background: rgba(255, 255, 255, 0.5); +} +.gifcontrol.paused:after { + width: 0; + height: 0; + border-style: solid; + border-width: 25px 0 25px 50px; + border-color: transparent transparent transparent #fff; +} +/*!*****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/chat/styles/message-body.scss ***! + \*****************************************************************************************************************************************************************************************************************************************************************/ +converse-chat-message-body { + margin-inline-end: 0.5em; + overflow-y: hidden; +} +converse-chat-message-body audio { + display: block; + max-width: 95%; +} +converse-chat-message-body video { + display: block; + max-height: 25em; +} +@media (max-width: 575.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%; +} +/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/components/styles/icon.scss ***! + \***************************************************************************************************************************************************************************************************************************************************************/ +converse-icon { + display: inline-block; + padding: 0; + margin: 0; +} +converse-icon svg { + fill: var(--secondary-color); +} +converse-icon.clickable:hover svg { + fill: var(--link-color); +} + +a converse-icon:hover svg, .clickable converse-icon:hover svg { + fill: var(--link-color); +} +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/components/styles/dropdown.scss ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-emoji-dropdown.dropup.dropup--left .dropdown-menu, +.conversejs converse-dropdown.dropup.dropup--left .dropdown-menu { + right: 100%; + left: auto; +} +.conversejs converse-emoji-dropdown .btn--standalone, +.conversejs converse-dropdown .btn--standalone { + padding: 0 0.2em; + margin: 0; +} +.conversejs converse-emoji-dropdown .dropdown-toggle--no-caret:before, .conversejs converse-emoji-dropdown .dropdown-toggle--no-caret:after, +.conversejs converse-dropdown .dropdown-toggle--no-caret:before, +.conversejs converse-dropdown .dropdown-toggle--no-caret:after { + display: none !important; +} +.conversejs converse-emoji-dropdown .dropdown-menu, +.conversejs converse-dropdown .dropdown-menu { + background: var(--background-color); + margin-top: -0.2em !important; + box-shadow: var(--raised-el-shadow); +} +.conversejs converse-emoji-dropdown .dropdown-item, +.conversejs converse-dropdown .dropdown-item { + text-align: start; + color: var(--text-color) !important; + font-size: var(--font-size); + padding: 0.5rem 1rem; +} +.conversejs converse-emoji-dropdown .dropdown-item converse-icon, +.conversejs converse-dropdown .dropdown-item converse-icon { + margin-top: -0.1em; + width: 1.25em; + margin-inline-end: 0.25rem; + margin-inline-start: 0.25rem; +} +.conversejs converse-emoji-dropdown .dropdown-item:active, .conversejs converse-emoji-dropdown .dropdown-item.selected, +.conversejs converse-dropdown .dropdown-item:active, +.conversejs converse-dropdown .dropdown-item.selected { + background-color: var(--highlight-color); +} +.conversejs converse-emoji-dropdown .dropdown-item:hover, +.conversejs converse-dropdown .dropdown-item:hover { + background-color: var(--highlight-color-hover); +} +/*!***************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/components/styles/message-versions.scss ***! + \***************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-message-versions time { + font-weight: bold; +} +/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/chat/styles/unfurl.scss ***! + \***********************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-message-unfurl .card { + background-color: var(--background-color); +} +.conversejs converse-message-unfurl .card.card--unfurl .card-body .card-title { + font-size: 95%; + font-weight: bold; +} +.conversejs converse-message-unfurl .card.card--unfurl .card-text converse-rich-text { + font-size: 90%; +} +.conversejs converse-chats.converse-embedded .message .card--unfurl, .conversejs converse-chats.converse-fullscreen .message .card--unfurl { + margin: 0.5em 0; +} +@media (max-width: 575.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: 60%; + } +} +@media (min-width: 1200px) { + .conversejs converse-chats.converse-embedded .message .card--unfurl, .conversejs converse-chats.converse-fullscreen .message .card--unfurl { + max-width: 30%; + } +} +.conversejs converse-chats.converse-overlayed .message .card--unfurl { + margin: 0.5em 0; + max-width: 95%; +} +/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/chat/styles/retraction.scss ***! + \***************************************************************************************************************************************************************************************************************************************************************/ +converse-chat-message .message.chat-msg--retracted .chat-msg__message { + color: var(--secondary-color); +} +/*!*****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/chat/styles/chat-content.scss ***! + \*****************************************************************************************************************************************************************************************************************************************************************/ +converse-chat-content { + display: flex; + flex-direction: column-reverse; + height: 100%; + justify-content: space-between; + overflow: auto; +} +/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/chat/styles/emoji.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************/ +.conversejs .chatbox img.emoji { + height: 1.2em; + width: 1.2em; + margin: 0 0.05em 0 0.1em; + vertical-align: -0.1em; +} +.conversejs .chatbox .chat-message-form .toggle-smiley a.toggle-smiley { + padding: 0; +} +.conversejs .chatbox converse-emoji-dropdown { + display: inline-block; +} +.conversejs .chatbox converse-emoji-dropdown .dropdown-menu { + padding: 0; + width: auto !important; +} +.conversejs .chatbox converse-emoji-picker { + width: 100%; + padding-top: 0; + padding-bottom: 0; + background-color: var(--background-color); + overflow-y: hidden; +} +.conversejs .chatbox converse-emoji-picker converse-emoji-picker-content { + width: 100%; +} +.conversejs .chatbox converse-emoji-picker converse-emoji-picker-content .emoji-picker__lists { + background-color: var(--background-color); + display: flex; + flex-direction: column; + height: 8em; + overflow-y: auto; + width: 100%; +} +.conversejs .chatbox converse-emoji-picker converse-emoji-picker-content .emoji-picker__lists .emoji-category__heading { + clear: both; + color: var(--secondary-color); + cursor: auto; + display: block; + font-size: var(--font-size); + margin: 0; + padding: 0.75em 0 0 0.5em; +} +.conversejs .chatbox converse-emoji-picker converse-emoji-picker-content .emoji-picker__lists .emoji-lists__container { + background-color: var(--background-color); + overflow-x: hidden; +} +.conversejs .chatbox converse-emoji-picker converse-emoji-picker-content .emoji-picker__lists .emoji-picker li { + float: left; +} +.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker { + display: flex; + padding: 0.5em 0 0.5em 0.5em; + color: var(--secondary-color); + background-color: var(--background-color); + width: 100%; + font-size: var(--font-size); +} +.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul { + display: flex; + flex-direction: row; + flex-wrap: wrap; + padding-inline-start: 0; +} +.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul li { + padding: 0 0.25em; +} +.conversejs .chatbox converse-emoji-picker .emoji-picker { + background-color: var(--background-color); + padding: 0.5em 0 0 0.5em; +} +.conversejs .chatbox converse-emoji-picker .emoji-picker:last-child { + padding-bottom: 0.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-inline-start: 0; + list-style: none; + position: relative; +} +.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji { + text-align: center; +} +.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a { + background-color: var(--secondary-color); +} +.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 { + 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(--secondary-color); +} +.conversejs .chatbox converse-emoji-picker .emoji-picker__header { + width: 100%; + display: flex; + flex-direction: column; + padding: 0.1em 0; + background-color: var(--background-color); +} +.conversejs .chatbox converse-emoji-picker .emoji-picker__header .emoji-search { + width: auto; + margin: 1em 0.25em 0.5em; + height: 2em; + font-size: var(--font-size-small); +} +.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul { + display: flex; + flex-direction: row; + padding-inline-start: 0; +} +.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category { + padding: 0.25em 0; + font-size: var(--font-size-huge); +} +.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked a { + background-color: var(--heading-color); +} +.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(--secondary-color); +} +.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a { + padding: 0.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(--background-color); +} +.conversejs .chatroom converse-emoji-picker .emoji-skintone-picker { + background-color: var(--background-color); +} +.conversejs .chatroom converse-emoji-picker .emoji-picker__header { + background-color: var(--background-color); +} + +.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 .chatbox converse-emoji-dropdown .dropdown-menu { + min-width: 12em; +} +.conversejs converse-chats.converse-fullscreen .chatbox converse-emoji-dropdown converse-emoji-picker .emoji-picker__lists { + height: 12em; +} + +.conversejs .chatbox converse-emoji-picker { + max-width: 40em; +} +/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/chat/styles/toolbar.scss ***! + \************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-chat-toolbar.btn-toolbar { + background-color: var(--background-color); + box-sizing: border-box; + width: 100%; + justify-content: space-between; + margin-bottom: 1px; +} +.conversejs converse-chat-toolbar.btn-toolbar .toolbar-buttons .message-limit { + padding: 0.5em; + font-weight: bold; +} +.conversejs converse-chat-toolbar.btn-toolbar .btn { + padding: 0.25em 0.5em !important; +} +.conversejs converse-chat-toolbar.btn-toolbar .send-button { + color: var(--background-color); + border-radius: 0; +} +.conversejs converse-chat-toolbar.btn-toolbar .fa, .conversejs converse-chat-toolbar.btn-toolbar .fa:hover, +.conversejs converse-chat-toolbar.btn-toolbar .far, .conversejs converse-chat-toolbar.btn-toolbar .far:hover, +.conversejs converse-chat-toolbar.btn-toolbar .fas, .conversejs converse-chat-toolbar.btn-toolbar .fas:hover { + color: var(--background-color); + font-size: var(--font-size-large); +} +.conversejs converse-chat-toolbar.btn-toolbar .fa svg, .conversejs converse-chat-toolbar.btn-toolbar .fa:hover svg, +.conversejs converse-chat-toolbar.btn-toolbar .far svg, .conversejs converse-chat-toolbar.btn-toolbar .far:hover svg, +.conversejs converse-chat-toolbar.btn-toolbar .fas svg, .conversejs converse-chat-toolbar.btn-toolbar .fas:hover svg { + fill: var(--background-color); +} +.conversejs converse-chat-toolbar.btn-toolbar .unencrypted a, +.conversejs converse-chat-toolbar.btn-toolbar .unencrypted { + color: var(--text-color); +} +.conversejs .chatbox .send-button { + background-color: var(--chat-color); +} +.conversejs .chatroom .send-button { + background-color: var(--muc-color); +} +.conversejs .chatbox converse-chat-toolbar { + color: var(--chat-color); + background-color: var(--background-color); +} +.conversejs .chatbox converse-chat-toolbar .fas, .conversejs .chatbox converse-chat-toolbar .fas:hover, +.conversejs .chatbox converse-chat-toolbar .far, .conversejs .chatbox converse-chat-toolbar .far:hover, +.conversejs .chatbox converse-chat-toolbar .fa, .conversejs .chatbox converse-chat-toolbar .fa:hover { + color: var(--chat-color); +} +.conversejs .chatbox converse-chat-toolbar .fas svg, .conversejs .chatbox converse-chat-toolbar .fas svg:hover, .conversejs .chatbox converse-chat-toolbar .fas:hover svg, .conversejs .chatbox converse-chat-toolbar .fas:hover svg:hover, +.conversejs .chatbox converse-chat-toolbar .far svg, +.conversejs .chatbox converse-chat-toolbar .far svg:hover, .conversejs .chatbox converse-chat-toolbar .far:hover svg, .conversejs .chatbox converse-chat-toolbar .far:hover svg:hover, +.conversejs .chatbox converse-chat-toolbar .fa svg, +.conversejs .chatbox converse-chat-toolbar .fa svg:hover, .conversejs .chatbox converse-chat-toolbar .fa:hover svg, .conversejs .chatbox converse-chat-toolbar .fa:hover svg:hover { + fill: var(--chat-color); +} +.conversejs .chatbox converse-chat-toolbar button:focus { + outline-color: var(--chat-color) !important; +} +.conversejs .chatbox converse-chat-toolbar button:disabled .fa { + color: var(--disabled-color); +} +.conversejs .chatbox converse-chat-toolbar button:disabled .fa:hover { + color: var(--disabled-color); +} +.conversejs .chatbox converse-chat-toolbar button:disabled .fa svg, .conversejs .chatbox converse-chat-toolbar button:disabled .fa svg:hover { + fill: var(--disabled-color); +} +.conversejs .chatroom converse-chat-toolbar { + color: var(--muc-color); +} +.conversejs .chatroom converse-chat-toolbar .fas, .conversejs .chatroom converse-chat-toolbar .fas:hover, +.conversejs .chatroom converse-chat-toolbar .far, .conversejs .chatroom converse-chat-toolbar .far:hover, +.conversejs .chatroom converse-chat-toolbar .fa, .conversejs .chatroom converse-chat-toolbar .fa:hover { + color: var(--muc-color); + font-size: var(--font-size-large); +} +.conversejs .chatroom converse-chat-toolbar .fas svg, .conversejs .chatroom converse-chat-toolbar .fas:hover svg, +.conversejs .chatroom converse-chat-toolbar .far svg, .conversejs .chatroom converse-chat-toolbar .far:hover svg, +.conversejs .chatroom converse-chat-toolbar .fa svg, .conversejs .chatroom converse-chat-toolbar .fa:hover svg { + fill: var(--muc-color); +} +.conversejs .chatroom converse-chat-toolbar button:focus { + outline-color: var(--muc-color) !important; +} +.conversejs .chatroom converse-chat-toolbar button:disabled .fa { + color: var(--disabled-color); +} +.conversejs .chatroom converse-chat-toolbar button:disabled .fa:hover { + color: var(--disabled-color); +} +.conversejs .chatroom converse-chat-toolbar button:disabled .fa svg, .conversejs .chatroom converse-chat-toolbar button:disabled .fa svg:hover { + fill: var(--disabled-color); +} +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/chatview/styles/chat-head.scss ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +.conversejs .chatbox .chat-head { + display: flex; + flex-direction: row; + color: #ffffff; + font-size: 100%; + margin: 0; + padding: 0; + position: relative; +} +.conversejs .chatbox .chat-head.chat-head-chatbox { + background-color: var(--chat-header-bg-color); + border-bottom: 0.15em solid var(--chat-header-bg-color); +} +.conversejs .chatbox .chat-head .avatar { + margin-inline-end: 0.5em; +} +.conversejs .chatbox .chat-head .show-msg-author-modal { + color: var(--chat-header-fg-color) !important; +} +.conversejs .chatbox .chat-head .chat-head__desc { + color: var(--chat-header-bg-color); + font-size: var(--font-size-small); + margin: 0; + overflow: hidden; + padding: 0.5rem 1rem 0.5rem 1rem; + text-overflow: ellipsis; + width: 100%; +} +.conversejs .chatbox .chat-head .chatbox-title { + padding: 0.75rem 1rem 0 1rem; + display: flex; + flex-direction: row; + justify-content: space-between; + width: 100%; +} +.conversejs .chatbox .chat-head .chatbox-title--no-desc { + padding: 0.75rem 1rem; +} +.conversejs .chatbox .chat-head .chatbox-title--row { + display: flex; + flex-direction: row; + overflow: hidden; + width: 100%; +} +.conversejs .chatbox .chat-head .chatbox-title__text { + color: var(--chat-header-bg-color); + overflow: hidden; + text-overflow: ellipsis; +} +.conversejs .chatbox .chat-head .chatbox-title__buttons { + flex-direction: row-reverse; + flex-wrap: nowrap; +} +.conversejs .chatbox .chat-head .chatbox-btn { + color: white; +} +.conversejs .chatbox .chat-head .chatbox-btn:active { + position: relative; + top: 1px; +} +.conversejs .chatbox .chat-head converse-dropdown .dropdown-menu converse-icon svg { + fill: var(--chat-color); +} +.conversejs .chatbox .chat-head .chatbox-btn converse-icon svg { + fill: var(--chat-header-fg-color); +} +/*!***************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/chatview/styles/chat-bottom-panel.scss ***! + \***************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs, .conversejs-bg, #conversejs-bg, body.converse-fullscreen { + --avatar-border-radius: 10%; + --message-avatar-width: 36px; + --message-avatar-height: 36px; + --controlbox-width: 250px; + --chatroom-width: 500px; + --chat-textarea-height: 60px; + --chat-separator-border-bottom: 2px solid var(--chat-color); + --chatbox-button-size: 14px; + --raised-el-shadow: 1px 1px 10px black; + --fullpage-chat-height: calc(var(--vh, 1vh) * 100); + --fullpage-chat-width: 100%; + --fullpage-chatbox-button-size: 16px; + --fullpage-emoji-picker-height: 300px; + --fullpage-max-chat-textarea-height: 15em; + --send-button-height: 27px; + --send-button-margin: 3px; + --inline-action-margin: 0.75em; + --button-border-radius: 5px; + --chatbox-border-radius: 4px; + --normal-font: "Helvetica", "Arial", sans-serif; + --heading-font: "Muli", normal; + --branding-font: "Baumans", cursive; + --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); + --line-height-small: 14px; + --line-height: 16px; + --line-height-large: 20px; + --line-height-huge: 27px; + --embedded-emoji-picker-height: 300px; + --minimized-chats-width: 130px; + --mobile-chat-width: 100%; + --mobile-chat-height: 400px; + --overlayed-chat-gutter: 1em; + --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; + --list-toggle-font-weight: normal; + --separator-text-color: var(--message-text-color); + --text-color: var(--foreground-color); +} + +.conversejs.converse-overlayed { + --message-font-size: var(--font-size-small); +} + +.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 .chat-message-form { + border-bottom: 0; + border-inline-start: 0; + border-top: 0.25em solid var(--chat-color); + border-inline-end: 0.25em solid var(--chat-color); + border-bottom-radius: var(--chatbox-border-radius); + background-clip: padding-box; + background-color: var(--background-color); + margin: 0; + padding: 0; +} +@media screen and (max-height: 450px) { + .conversejs .chatbox .bottom-panel .chat-message-form { + width: 100%; + } +} +@media screen and (max-width: 480px) { + .conversejs .chatbox .bottom-panel .chat-message-form { + width: 100%; + } +} +.conversejs .chatbox .bottom-panel .chat-message-form .suggestion-box__results:after { + display: none; +} +.conversejs .chatbox .bottom-panel .chat-message-form .spoiler-hint { + width: 100%; + color: var(--foreground-color); + background-color: var(--background-color); +} +.conversejs .chatbox .bottom-panel .chat-message-form .chat-textarea, .conversejs .chatbox .bottom-panel .chat-message-form input { + outline: 1px solid var(--background-color); +} +.conversejs .chatbox .bottom-panel .chat-message-form .chat-textarea:active, .conversejs .chatbox .bottom-panel .chat-message-form .chat-textarea:focus, .conversejs .chatbox .bottom-panel .chat-message-form input:active, .conversejs .chatbox .bottom-panel .chat-message-form input:focus { + outline-width: 2px; +} +.conversejs .chatbox .bottom-panel .chat-message-form .chat-textarea.correcting, .conversejs .chatbox .bottom-panel .chat-message-form input.correcting { + background-color: var(--chat-correcting-color); +} +.conversejs .chatbox .bottom-panel .chat-message-form .chat-textarea { + color: var(--foreground-color); + background-color: var(--background-color); + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-radius: var(--chatbox-border-radius); + field-sizing: content; + padding: 0.5em; + width: 100%; + border: none; + min-height: var(--chat-textarea-height); + margin-bottom: -4px; + resize: none; +} +.conversejs .chatbox .bottom-panel .chat-message-form .chat-textarea.spoiler { + height: 42px; +} +/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/chatview/styles/index.scss ***! + \***************************************************************************************************************************************************************************************************************************************************************/ +.conversejs, .conversejs-bg, #conversejs-bg, body.converse-fullscreen { + --avatar-border-radius: 10%; + --message-avatar-width: 36px; + --message-avatar-height: 36px; + --controlbox-width: 250px; + --chatroom-width: 500px; + --chat-textarea-height: 60px; + --chat-separator-border-bottom: 2px solid var(--chat-color); + --chatbox-button-size: 14px; + --raised-el-shadow: 1px 1px 10px black; + --fullpage-chat-height: calc(var(--vh, 1vh) * 100); + --fullpage-chat-width: 100%; + --fullpage-chatbox-button-size: 16px; + --fullpage-emoji-picker-height: 300px; + --fullpage-max-chat-textarea-height: 15em; + --send-button-height: 27px; + --send-button-margin: 3px; + --inline-action-margin: 0.75em; + --button-border-radius: 5px; + --chatbox-border-radius: 4px; + --normal-font: "Helvetica", "Arial", sans-serif; + --heading-font: "Muli", normal; + --branding-font: "Baumans", cursive; + --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); + --line-height-small: 14px; + --line-height: 16px; + --line-height-large: 20px; + --line-height-huge: 27px; + --embedded-emoji-picker-height: 300px; + --minimized-chats-width: 130px; + --mobile-chat-width: 100%; + --mobile-chat-height: 400px; + --overlayed-chat-gutter: 1em; + --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; + --list-toggle-font-weight: normal; + --separator-text-color: var(--message-text-color); + --text-color: var(--foreground-color); +} + +.conversejs.converse-overlayed { + --message-font-size: var(--font-size-small); +} + +.conversejs converse-chats.converse-overlayed .chatbox { + margin: 0 var(--overlayed-chat-gutter); +} + +.conversejs .chatbox { + text-align: start; +} +@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 0.2em; + padding: 0 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, 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: block; + 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-inline-end: 0; +} +.conversejs .chatbox .chat-title a { + color: var(--chat-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; + height: 100%; + width: 100%; + overflow: hidden; +} +@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: 0.25em; +} +.conversejs .chatbox .new-msgs-indicator { + position: relative; + width: 100%; + cursor: pointer; + background-color: var(--background-color); + color: var(--background-color); + padding: 0.5em; + font-size: 0.9em; + text-align: center; + z-index: 20; + white-space: nowrap; + margin-bottom: 0.25em; +} +.conversejs .chatbox .chat-content { + background-color: var(--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 .chat-content__help { + max-height: 100%; +} +.conversejs .chatbox .chat-content .chat-content__help converse-chat-help { + border-top: 1px solid var(--background-color); + display: block; + height: 100%; + overflow-y: auto; + padding: 0.5em 0; +} +.conversejs .chatbox .chat-content .chat-content__help .close-chat-help { + float: right; + padding-inline-end: 1em; + cursor: pointer; + color: var(--background-color); +} +.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg { + fill: var(--background-color); +} +.conversejs .chatbox .chat-content .chat-content__messages { + overflow-x: hidden; + overflow-y: auto; + height: 100%; +} +.conversejs .chatbox .chat-content .chat-content__notifications { + display: block; + white-space: pre; + background-color: var(--background-color); + color: var(--secondary-color); + font-size: 90%; + font-style: italic; + line-height: var(--line-height-small); + padding: 0 1em 0.3em; +} +.conversejs .chatbox .chat-content .chat-content__notifications:before { + content: " "; +} +.conversejs .chatbox .chat-content progress { + margin: 0.5em 0; + width: 100%; +} +.conversejs .chatbox .dragresize { + background: transparent; + 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; +} + +/* ******************* Overlay and embedded styles *************************** */ +.conversejs converse-chats.converse-embedded .controlbox-head, +.conversejs converse-chats.converse-overlayed .controlbox-head { + padding: 0.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 .chat-head, .conversejs converse-chats.converse-overlayed .box-flyout { + 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 .chat-head, .conversejs converse-chats.converse-overlayed .box-flyout { + border-top-left-radius: 0; + border-top-right-radius: 0; + } +} +@media screen and (max-width: 480px) { + .conversejs converse-chats.converse-overlayed .chat-head, .conversejs converse-chats.converse-overlayed .box-flyout { + 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: 0.5rem 0.75rem 0 0.75rem; +} +.conversejs converse-chats.converse-overlayed .chatbox .chatbox-title--no-desc { + padding: 0.5rem 0.75rem; +} + +@media (max-width: 575.98px) { + .conversejs.converse-overlayed > .row { + flex-direction: column; + } +} +.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 .box-flyout, +.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout { + box-shadow: none; + overflow: hidden; +} +@media (min-width: 768px) { + .conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox { + flex: 0 0 auto; + width: 66.66666667%; + } +} +@media (min-width: 992px) { + .conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox { + flex: 0 0 auto; + width: 75%; + } +} +@media (min-width: 1200px) { + .conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox { + flex: 0 0 auto; + width: 83.33333333%; + } +} +@media (min-width: 768px) { + .conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout { + flex: 0 0 auto; + width: 66.66666667%; + } +} +@media (min-width: 992px) { + .conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout { + flex: 0 0 auto; + width: 75%; + } +} +@media (min-width: 1200px) { + .conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout { + flex: 0 0 auto; + width: 83.33333333%; + } +} +.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); +} + +/* ******************* Fullpage styles *************************** */ +.conversejs converse-chats.converse-fullscreen .chatbox-btn { + font-size: var(--fullpage-chatbox-button-size); +} +.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(--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 .chat-message-form ul { + width: 100%; +} + +@media (max-width: 575.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-overlayed .chat-head converse-controlbox-navback, + .conversejs converse-chats.converse-fullscreen .chat-head converse-controlbox-navback { + margin: auto 0; + margin-inline-end: 1em; + display: flex; + } + .conversejs converse-chats.converse-overlayed .chat-head converse-controlbox-navback .fa-arrow-left svg, + .conversejs converse-chats.converse-fullscreen .chat-head converse-controlbox-navback .fa-arrow-left svg { + fill: var(--chat-color); + } +} +/*!*********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/controlbox/styles/loginform.scss ***! + \*********************************************************************************************************************************************************************************************************************************************************************/ +.conversejs #controlbox #converse-login-panel { + padding-top: 0; + padding-bottom: 0; + flex-direction: row; +} +.conversejs #controlbox .toggle-register-login { + font-weight: bold; +} +.conversejs #controlbox .controlbox-pane .switch-form { + text-align: center; + padding: 0.5em 0; +} + +.conversejs converse-chats.converse-overlayed #controlbox converse-login-form fieldset { + margin-bottom: 0.5em; +} +.conversejs converse-chats.converse-overlayed #controlbox .login-trusted { + white-space: nowrap; + font-size: 90%; + margin: 1em 0; +} +.conversejs converse-chats.converse-overlayed #controlbox #converse-login-panel { + height: 100%; +} +.conversejs converse-chats.converse-overlayed #controlbox #converse-login-trusted { + margin-top: 0.5em; +} +.conversejs converse-chats.converse-overlayed #controlbox #converse-register, .conversejs converse-chats.converse-overlayed #controlbox #converse-login { + flex: 0 0 auto; + width: 100%; + padding-bottom: 0; +} +.conversejs converse-chats.converse-overlayed #controlbox #converse-register .button-cancel { + font-size: 90%; +} +.conversejs converse-chats.converse-embedded #controlbox .toggle-register-login, .conversejs converse-chats.converse-fullscreen #controlbox .toggle-register-login { + line-height: var(--line-height-huge); +} +.conversejs converse-chats.converse-embedded #controlbox #converse-register, .conversejs converse-chats.converse-embedded #controlbox #converse-login, .conversejs converse-chats.converse-fullscreen #controlbox #converse-register, .conversejs converse-chats.converse-fullscreen #controlbox #converse-login { + margin: auto; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); + flex: 0 0 auto; + width: 66.66666667%; +} +@media (min-width: 576px) { + .conversejs converse-chats.converse-embedded #controlbox #converse-register, .conversejs converse-chats.converse-embedded #controlbox #converse-login, .conversejs converse-chats.converse-fullscreen #controlbox #converse-register, .conversejs converse-chats.converse-fullscreen #controlbox #converse-login { + flex: 0 0 auto; + width: 66.66666667%; + } +} +@media (min-width: 768px) { + .conversejs converse-chats.converse-embedded #controlbox #converse-register, .conversejs converse-chats.converse-embedded #controlbox #converse-login, .conversejs converse-chats.converse-fullscreen #controlbox #converse-register, .conversejs converse-chats.converse-fullscreen #controlbox #converse-login { + flex: 0 0 auto; + width: 66.66666667%; + } +} +@media (min-width: 992px) { + .conversejs converse-chats.converse-embedded #controlbox #converse-register, .conversejs converse-chats.converse-embedded #controlbox #converse-login, .conversejs converse-chats.converse-fullscreen #controlbox #converse-register, .conversejs converse-chats.converse-fullscreen #controlbox #converse-login { + flex: 0 0 auto; + width: 50%; + } +} +.conversejs converse-chats.converse-embedded #controlbox #converse-register .title, .conversejs converse-chats.converse-embedded #controlbox #converse-register .instructions, .conversejs converse-chats.converse-embedded #controlbox #converse-login .title, .conversejs converse-chats.converse-embedded #controlbox #converse-login .instructions, .conversejs converse-chats.converse-fullscreen #controlbox #converse-register .title, .conversejs converse-chats.converse-fullscreen #controlbox #converse-register .instructions, .conversejs converse-chats.converse-fullscreen #controlbox #converse-login .title, .conversejs converse-chats.converse-fullscreen #controlbox #converse-login .instructions { + margin: 1em 0; +} +.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=submit], +.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=button], .conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=submit], +.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=button], .conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=submit], +.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=button], .conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=submit], +.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=button] { + width: auto; +} +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/controlbox/styles/buttons.scss ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-controlbox-buttons { + text-align: right; + width: 100%; +} +.conversejs converse-controlbox-buttons .btn-toolbar { + justify-content: flex-end; +} +.conversejs converse-controlbox-buttons .btn-toolbar .controlbox-heading__btn { + cursor: pointer; + padding: 0 0 0 1em; + font-size: 1em; + margin: 0.75em 0 var(--inline-action-margin) 0; + text-align: center; +} +.conversejs converse-controlbox-buttons .btn-toolbar .controlbox-heading__btn converse-icon svg { + fill: var(--controlbox-color); +} +/*!***********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/controlbox/styles/_controlbox.scss ***! + \***********************************************************************************************************************************************************************************************************************************************************************/ +.conversejs, .conversejs-bg, #conversejs-bg, body.converse-fullscreen { + --avatar-border-radius: 10%; + --message-avatar-width: 36px; + --message-avatar-height: 36px; + --controlbox-width: 250px; + --chatroom-width: 500px; + --chat-textarea-height: 60px; + --chat-separator-border-bottom: 2px solid var(--chat-color); + --chatbox-button-size: 14px; + --raised-el-shadow: 1px 1px 10px black; + --fullpage-chat-height: calc(var(--vh, 1vh) * 100); + --fullpage-chat-width: 100%; + --fullpage-chatbox-button-size: 16px; + --fullpage-emoji-picker-height: 300px; + --fullpage-max-chat-textarea-height: 15em; + --send-button-height: 27px; + --send-button-margin: 3px; + --inline-action-margin: 0.75em; + --button-border-radius: 5px; + --chatbox-border-radius: 4px; + --normal-font: "Helvetica", "Arial", sans-serif; + --heading-font: "Muli", normal; + --branding-font: "Baumans", cursive; + --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); + --line-height-small: 14px; + --line-height: 16px; + --line-height-large: 20px; + --line-height-huge: 27px; + --embedded-emoji-picker-height: 300px; + --minimized-chats-width: 130px; + --mobile-chat-width: 100%; + --mobile-chat-height: 400px; + --overlayed-chat-gutter: 1em; + --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; + --list-toggle-font-weight: normal; + --separator-text-color: var(--message-text-color); + --text-color: var(--foreground-color); +} + +.conversejs.converse-overlayed { + --message-font-size: var(--font-size-small); +} + +.conversejs .room-info { + font-size: var(--font-size-small); + font-style: normal; + font-weight: normal; +} +.conversejs .room-info li.room-info { + display: block; + margin-inline-start: 5px; +} +.conversejs .room-info p.room-info { + line-height: var(--line-height); + margin: 0; + display: block; + white-space: normal; +} +.conversejs div.room-info { + padding: 0.3em 0; + clear: left; + width: 100%; +} +.conversejs #controlbox { + order: -1; + color: var(--foreground-color); +} +.conversejs #controlbox .chat-status--avatar { + border: 1px solid var(--background-color); + background: var(--background-color); +} +.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%; + padding-inline-end: 0.5em; +} +.conversejs #controlbox .brand-name-wrapper--fullscreen { + font-size: 100%; +} +.conversejs #controlbox .box-flyout { + background-color: var(--background-color); +} +.conversejs #controlbox.logged-out .box-flyout .controlbox-pane { + overflow-y: auto; +} +.conversejs #controlbox form.search-xmpp-contact { + margin: 0; + padding-inline-start: 5px; + padding: 0 0 5px 5px; +} +.conversejs #controlbox form.search-xmpp-contact input { + width: 8em; +} +.conversejs #controlbox .msgs-indicator { + margin-inline-end: 0.5em; +} +.conversejs #controlbox a.subscribe-to-user { + padding-inline-start: 2em; + font-weight: bold; +} +.conversejs #controlbox .conn-feedback { + color: var(--controlbox-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: bold; +} +.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: bold; + padding: 0; + font-size: 1.1em; + line-height: 1.1em; + text-transform: uppercase; +} +.conversejs #controlbox .controlbox-section .controlbox-heading--groupchats { + color: var(--muc-color); +} +.conversejs #controlbox .controlbox-section .controlbox-heading--contacts { + color: var(--background-color); +} +.conversejs #controlbox .controlbox-section .controlbox-heading--headline { + color: var(--headlines-head-color); +} +.conversejs #controlbox .controlbox-padded { + padding: 0 1em; + align-items: center; + line-height: normal; +} +.conversejs #controlbox .controlbox-pane { + border: 0; + font-size: var(--font-size); + height: 100%; + left: 0; + overflow-x: hidden; + overflow-y: auto; + padding: 0; + text-align: start; +} +.conversejs #controlbox .controlbox-pane .add-converse-contact { + margin: 0 0 0.75em 0; +} +.conversejs #controlbox .controlbox-pane .chatbox-btn { + margin: 0; +} +.conversejs #controlbox .add-xmpp-contact { + padding: 1em 0.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 { + background-color: var(--controlbox-color); + color: var(--button-text-color); + float: right; + margin: 0 var(--overlayed-chat-gutter); + order: -2; + text-align: center; +} +.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 .brand-heading { + padding-inline-start: 1em; + width: 100%; +} +.conversejs converse-chats.converse-overlayed .converse-svg-logo { + height: 1em; +} +.conversejs converse-chats.converse-embedded #controlbox .flyout, .conversejs converse-chats.converse-fullscreen #controlbox .flyout { + border-inline-end: 0.2rem solid var(--controlbox-color); +} +.conversejs converse-chats.converse-embedded .toggle-controlbox, .conversejs converse-chats.converse-fullscreen .toggle-controlbox { + display: none; +} +.conversejs converse-chats.converse-overlayed .flyout { + border: 0; +} +.conversejs converse-chats.converse-embedded #controlbox, .conversejs converse-chats.converse-fullscreen #controlbox { + margin: 0; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} +@media (min-width: 768px) { + .conversejs converse-chats.converse-embedded #controlbox, .conversejs converse-chats.converse-fullscreen #controlbox { + flex: 0 0 auto; + width: 33.33333333%; + } +} +@media (min-width: 992px) { + .conversejs converse-chats.converse-embedded #controlbox, .conversejs converse-chats.converse-fullscreen #controlbox { + flex: 0 0 auto; + width: 25%; + } +} +@media (min-width: 1200px) { + .conversejs converse-chats.converse-embedded #controlbox, .conversejs converse-chats.converse-fullscreen #controlbox { + flex: 0 0 auto; + width: 16.66666667%; + } +} +.conversejs converse-chats.converse-embedded #controlbox.logged-out, .conversejs converse-chats.converse-fullscreen #controlbox.logged-out { + flex: 0 0 auto; + width: 100%; + opacity: 0; /* make things invisible upon start */ + animation-name: fadein; + animation-fill-mode: forwards; + animation-duration: 0.5s; + 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 { + width: 100%; +} +.conversejs converse-chats.converse-embedded #controlbox .flyout, .conversejs converse-chats.converse-fullscreen #controlbox .flyout { + border-radius: 0; + width: 100%; + z-index: 1; +} +.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo, .conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo { + flex: 0 0 auto; + 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 { + width: 100%; + font-size: 500%; + padding: 0.7em 0 0 0; + opacity: 0.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 { + font-size: 90%; + padding: 0.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 { + font-size: 300%; + } +} +@media screen and (max-width: 480px) { + .conversejs converse-chats.converse-fullscreen #controlbox { + margin-inline-start: 0; + } +} +@media (max-width: 575.98px) { + .conversejs converse-chats.converse-fullscreen #controlbox { + margin-inline-start: 0; + } +} +@media (min-width: 768px) { + .conversejs converse-chats.converse-fullscreen #controlbox .box-flyout { + flex: 0 0 auto; + width: 33.33333333%; + } +} +@media (min-width: 992px) { + .conversejs converse-chats.converse-fullscreen #controlbox .box-flyout { + flex: 0 0 auto; + width: 25%; + } +} +@media (min-width: 1200px) { + .conversejs converse-chats.converse-fullscreen #controlbox .box-flyout { + flex: 0 0 auto; + width: 16.66666667%; + } +} +.conversejs converse-chats.converse-fullscreen .controlbox-pane { + padding-top: 2em; + padding-bottom: 1em; +} + +@media (max-width: 575.98px) { + .conversejs.converse-overlayed .converse-chatboxes .chatbox .box-flyout { + margin-left: -1em !important; + } + .conversejs.converse-fullscreen, .conversejs.converse-overlayed { + left: 0; + right: 0; + padding-inline-start: env(safe-area-inset-left); + padding-inline-end: env(safe-area-inset-right); + } + .conversejs.converse-fullscreen .converse-chatboxes, .conversejs.converse-overlayed .converse-chatboxes { + margin: 0 !important; + flex-direction: row !important; + justify-content: space-between; + } + .conversejs.converse-fullscreen .converse-chatboxes .converse-chatroom, .conversejs.converse-overlayed .converse-chatboxes .converse-chatroom { + font-size: 14px; + } + .conversejs.converse-fullscreen .converse-chatboxes .chatbox .box-flyout, .conversejs.converse-overlayed .converse-chatboxes .chatbox .box-flyout { + left: 0; + bottom: 0; + border-radius: 0; + width: 100vw !important; + height: var(--fullpage-chat-height); + } + .conversejs.converse-fullscreen .converse-chatboxes #controlbox, .conversejs.converse-overlayed .converse-chatboxes #controlbox { + margin-inline-start: 0; + width: 100vw !important; + } + .conversejs.converse-fullscreen .converse-chatboxes #controlbox .box-flyout, .conversejs.converse-overlayed .converse-chatboxes #controlbox .box-flyout { + width: 100vw !important; + height: var(--fullpage-chat-height); + } + .conversejs.converse-fullscreen .converse-chatboxes #controlbox .sidebar, .conversejs.converse-overlayed .converse-chatboxes #controlbox .sidebar { + display: block; + } + .conversejs.converse-fullscreen .converse-chatboxes.sidebar-open .chatbox:not(#controlbox), .conversejs.converse-overlayed .converse-chatboxes.sidebar-open .chatbox:not(#controlbox) { + display: none; + } + .conversejs.converse-fullscreen .converse-chatboxes.sidebar-open #controlbox .controlbox-pane, .conversejs.converse-overlayed .converse-chatboxes.sidebar-open #controlbox .controlbox-pane { + display: block; + } +} +/*!*************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/headlines-view/styles/headlines.scss ***! + \*************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs .chatbox.headlines .chat-body { + background-color: var(--background-color); +} +.conversejs .chatbox.headlines .chat-body .chat-message { + color: var(--headlines-color); +} +.conversejs .chatbox.headlines .chat-body hr { + border-bottom: 2px solid var(--headlines-color); +} +.conversejs .chatbox.headlines .chat-content { + height: 100%; +} +.conversejs .message.chat-msg.headline .chat-msg__body { + margin-inline-start: 0; +} +.conversejs #controlbox .controlbox-section .controlbox-heading--headline { + color: var(--headlines-color); +} +.conversejs converse-chats.converse-fullscreen .chatbox.headlines .box-flyout { + background-color: var(--headlines-color); +} +.conversejs converse-chats.converse-fullscreen .chatbox.headlines .flyout { + border-color: var(--headlines-color); +} +/*!******************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/headlines-view/styles/headlines-head.scss ***! + \******************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs .chatbox.headlines converse-headlines-heading.chat-head { + background-color: var(--background-color); +} +.conversejs .chatbox.headlines converse-headlines-heading.chat-head .chatbox-title--no-desc { + padding: 0.75rem 1rem; +} +.conversejs .chatbox.headlines converse-headlines-heading.chat-head.chat-head-chatbox { + background-color: var(--background-color); + border-bottom: 0.15em solid var(--headlines-color); +} +.conversejs .chatbox.headlines converse-headlines-heading.chat-head .chatbox-title__text { + color: var(--headlines-color) !important; +} +.conversejs .chatbox.headlines converse-headlines-heading.chat-head converse-dropdown .dropdown-menu converse-icon svg { + fill: var(--headlines-color); +} +.conversejs .chatbox.headlines converse-headlines-heading.chat-head .chatbox-btn converse-icon svg { + fill: var(--headlines-color); +} +.conversejs .chatbox.headlines converse-chats.converse-fullscreen .chatbox.headlines .chat-head.chat-head-chatbox { + background-color: var(--background-color); +} +/*!**********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/mam-views/styles/placeholder.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************/ +converse-mam-placeholder .mam-placeholder { + position: relative; + height: 2em; + margin: 0.5em 0; +} +converse-mam-placeholder .mam-placeholder:before, converse-mam-placeholder .mam-placeholder:after { + content: ""; + display: block; + position: absolute; + left: 0; + right: 0; +} +converse-mam-placeholder .mam-placeholder:before { + height: 1em; + top: 1em; + background: linear-gradient(-135deg, lightgray 0.5em, transparent 0) 0 0.5em, linear-gradient(135deg, lightgray 0.5em, transparent 0) 0 0.5em; + background-position: top left; + background-repeat: repeat-x; + background-size: 1em 1em; +} +converse-mam-placeholder .mam-placeholder:after { + height: 1em; + top: 0.75em; + background: linear-gradient(-135deg, var(--background-color) 0.5em, transparent 0) 0 0.5em, linear-gradient(135deg, var(--background-color) 0.5em, transparent 0) 0 0.5em; + background-position: top left; + background-repeat: repeat-x; + background-size: 1em 1em; +} +/*!***********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/components/styles/split-resize.scss ***! + \***********************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-split-resize { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg=="); + background-position: 50%; + background-repeat: no-repeat; + cursor: col-resize; + width: 0.25em !important; +} +/*!************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/nickname-form.scss ***! + \************************************************************************************************************************************************************************************************************************************************************************/ +converse-muc-nickname-form { + width: 100%; +} +/*!***************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/muc-bottom-panel.scss ***! + \***************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-muc .muc-bottom-panel, +.conversejs converse-muc converse-muc-bottom-panel { + display: contents; + padding: 0.5em; + text-align: center; + font-size: var(--font-size-small); + background-color: var(--background-color); + color: white; +} +.conversejs converse-muc .muc-bottom-panel.muc-bottom-panel--muted, +.conversejs converse-muc converse-muc-bottom-panel.muc-bottom-panel--muted { + height: 4em; + width: 100%; +} +.conversejs converse-muc .muc-bottom-panel.muc-bottom-panel--nickname, +.conversejs converse-muc converse-muc-bottom-panel.muc-bottom-panel--nickname { + padding: 0; + height: 16em; +} +.conversejs converse-muc .muc-bottom-panel.muc-bottom-panel--nickname .muc-form-container .chatroom-form, +.conversejs converse-muc converse-muc-bottom-panel.muc-bottom-panel--nickname .muc-form-container .chatroom-form { + padding-top: 2em; + padding-bottom: 0; +} +.conversejs converse-muc .muc-bottom-panel { + height: 3em; +} +.conversejs converse-muc converse-muc-bottom-panel .chat-message-form { + border-top: 0.25em solid var(--muc-color) !important; + border-inline-end: 0 !important; +} +.conversejs converse-muc converse-muc-bottom-panel .chat-message-form .suggestion-box__results--above { + bottom: 4.5em; +} +.conversejs converse-muc converse-muc-bottom-panel .chat-message-form .chat-textarea, .conversejs converse-muc converse-muc-bottom-panel .chat-message-form input { + outline: 1px solid var(--background-color) !important; +} +.conversejs converse-muc converse-muc-bottom-panel .chat-message-form .chat-textarea:active, .conversejs converse-muc converse-muc-bottom-panel .chat-message-form .chat-textarea:focus, .conversejs converse-muc converse-muc-bottom-panel .chat-message-form input:active, .conversejs converse-muc converse-muc-bottom-panel .chat-message-form input:focus { + outline-width: 2px !important; +} +.conversejs converse-muc converse-muc-bottom-panel .chat-message-form .chat-textarea.correcting, .conversejs converse-muc converse-muc-bottom-panel .chat-message-form input.correcting { + background-color: var(--chatroom-correcting-color); +} +.conversejs converse-muc converse-muc-bottom-panel .chat-message-form .chat-textarea { + width: 100%; + border: none; + border-bottom-right-radius: 0; + field-sizing: content; +} +/*!**********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/components/styles/list-filter.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************/ +converse-list-filter { + display: block; + margin-bottom: 1em; +} +converse-list-filter .items-filter-form { + width: 100%; +} +converse-list-filter .items-filter-form .button-group { + padding: 0.2em; +} +converse-list-filter .items-filter-form converse-icon { + padding: 0.25em; +} +converse-list-filter .items-filter-form .items-filter { + width: 100%; + margin: 0.2em; + font-size: calc(var(--font-size) - 2px); +} +converse-list-filter .items-filter-form .items-filter.form-control { + width: 100%; +} +converse-list-filter .items-filter-form select.state-type { + font-size: calc(var(--font-size) - 2px); + width: 100% !important; +} + +.converse-overlayed .items-filter-form .button-group { + padding: 0.1em; +} +.converse-overlayed .items-filter-form converse-icon { + padding: 0.15em; +} +.converse-overlayed .items-filter-form .items-filter { + width: 100%; + margin: 0.1em; + font-size: calc(var(--font-size) - 4px); +} +.converse-overlayed .items-filter-form select.state-type { + font-size: calc(var(--font-size) - 4px); + width: 100% !important; +} +/*!********************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/occupant-bottom-panel.scss ***! + \********************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-occupant-bottom-panel .bottom-panel--muted { + padding: 1em; + padding-top: 0; + border-top: 0.2em solid var(--secondary-color); +} +.conversejs converse-occupant-bottom-panel .bottom-panel--muted .bottom-panel--muted__msg { + padding: 0.5em 0 !important; +} +.conversejs converse-occupant-bottom-panel .bottom-panel--muted .btn-primary, .conversejs converse-occupant-bottom-panel .bottom-panel--muted .btn-secondary { + margin-top: 0.25em; +} +/*!***********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/muc-occupant.scss ***! + \***********************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-muc-occupant { + width: 100%; +} +.conversejs converse-muc-occupant .sidebar-occupant { + display: flex; + flex-direction: column; + height: 100%; +} +.conversejs converse-muc-occupant .sidebar-occupant .sidebar-heading { + display: flex; + justify-content: space-between; + padding: 0.5em; + padding-top: 0.4em; +} +.conversejs converse-muc-occupant .sidebar-occupant .sidebar-heading a, .conversejs converse-muc-occupant .sidebar-occupant .sidebar-heading a:hover { + color: var(--muc-color); +} +.conversejs converse-muc-occupant .sidebar-occupant .sidebar-heading .back-button { + font-size: 0.75em; + padding: 0.5em; + padding-top: 0.2em; +} +.conversejs converse-muc-occupant .sidebar-occupant .occupant-details { + padding-inline-start: 0.3em; + padding-bottom: 1em; + border-bottom: 0.05em solid var(--secondary-color); +} +.conversejs converse-muc-occupant .sidebar-occupant .occupant-details li { + display: flex; + justify-content: center; + margin-bottom: 0.5em; +} +.conversejs converse-muc-occupant .sidebar-occupant .occupant-details .row { + padding-inline-start: 1em; +} +.conversejs converse-muc-occupant .sidebar-occupant .occupant-details .occupant-details-nickname { + font-size: var(--font-size-huge); +} +.conversejs converse-muc-occupant .sidebar-occupant .occupant-details .occupant-details-jid { + font-size: var(--font-size-small); +} +.conversejs converse-muc-occupant .sidebar-occupant .occupant-details .badge { + margin: 0.1em; +} +.conversejs converse-muc-occupant .sidebar-occupant .bottom-panel .chat-message-form { + border-inline-end: none; + border-top: 0.2em solid var(--secondary-color); +} +.conversejs converse-muc-occupant .sidebar-occupant .bottom-panel .chat-message-form .send-button { + background-color: var(--secondary-color); +} +.conversejs converse-muc-occupant .sidebar-occupant .bottom-panel .chat-message-form .toolbar-buttons converse-icon svg { + fill: var(--secondary-color) !important; +} +.conversejs converse-muc-occupant .sidebar-occupant .bottom-panel .emoji-picker__header ul { + flex-wrap: wrap; +} +/*!******************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/styles/status.scss ***! + \******************************************************************************************************************************************************************************************************************************************************/ +.conversejs .chat-status { + vertical-align: middle; + margin-inline-end: 0; + border-radius: 50%; + font-size: 1em; +} +.conversejs .chat-status.chat-status--avatar { + font-size: 0.6rem; + margin-inline-start: -0.7em; + margin-bottom: -1.9em; + border-radius: 50%; +} +.conversejs .chat-status--offline { + margin-inline-end: 0.8em; +} +.conversejs .chat-status--online { + color: var(--chat-status-online); +} +.conversejs .chat-status--online svg { + fill: var(--chat-status-online); +} +.conversejs .chat-status--busy { + color: var(--chat-status-busy); +} +.conversejs .chat-status--busy svg { + fill: var(--chat-status-busy); +} +.conversejs .chat-status--away { + color: var(--chat-status-away); +} +.conversejs .chat-status--away svg { + fill: var(--chat-status-away); +} +.conversejs .chat-status--offline { + display: none; +} +/*!************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/muc-occupants.scss ***! + \************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-muc-occupants { + width: 100%; +} +.conversejs converse-muc-occupants .occupants { + display: flex; + height: 100%; + width: 100%; + flex-direction: column; + justify-content: space-between; + overflow-y: visible; + overflow-x: auto; +} +.conversejs converse-muc-occupants .occupants .occupants-header--title { + display: flex; + flex-direction: row; + padding: 0.5em; +} +.conversejs converse-muc-occupants .occupants .occupants-header--title .hide-occupants { + align-self: flex-end; + cursor: pointer; + font-size: var(--font-size-small); +} +.conversejs converse-muc-occupants .occupants .suggestion-box ul { + padding: 0; +} +.conversejs converse-muc-occupants .occupants .suggestion-box ul li { + padding: 0.5em; +} +.conversejs converse-muc-occupants .occupants .items-list { + padding: 0; + margin-bottom: 0.5em; + overflow-x: hidden; + overflow-y: auto; + list-style: none; +} +.conversejs converse-muc-occupants .occupants .items-list.occupant-list { + padding: 0.5em; + overflow-y: auto; + flex-basis: 0; + flex-grow: 1; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item { + height: auto; + cursor: default; + font-size: var(--font-size-small); + padding: 0.25em 0.25em 0.25em 0; + text-overflow: ellipsis; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item .fa { + margin-inline-end: 0.5em; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.feature { + font-size: var(--font-size-tiny); +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant { + cursor: pointer; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant .msgs-indicator { + margin-inline-start: -3em; + margin-inline-end: 0.5em; + margin-top: -0.25em; + position: absolute; + font-size: xx-small; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant .occupant-nick-badge { + display: flex; + justify-content: space-between; + flex-wrap: nowrap; + align-items: center; + gap: 0.25rem; + overflow-x: hidden; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant .occupant-nick-badge .occupant-nick { + flex-grow: 2; + overflow-x: hidden; + text-overflow: ellipsis; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant .occupant-nick-badge .occupant-badges { + display: flex; + justify-content: flex-end; + flex-wrap: wrap; + flex-direction: row; + flex-shrink: 1; + gap: 0.25rem; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant .occupant-nick-badge .occupant-badges span { + height: 1.6em; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant .occupant-nick-badge .occupant-actions { + position: static; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant div.row.g-0 { + flex-wrap: nowrap; + min-height: 1.5em; +} +.conversejs converse-muc-occupants .occupants .items-list .list-item.occupant .badge { + margin-bottom: 0.125rem; +} +.conversejs converse-chats.converse-overlayed converse-muc-occupants .occupants .occupant-list { + border-bottom: none; +} +.conversejs converse-chats.converse-overlayed converse-muc-occupants .occupants ul .occupant .occupant-nick-badge .occupant-badges { + display: none; +} +.conversejs converse-chats.converse-embedded converse-muc-occupants .occupants ul.occupant-list li, .conversejs converse-chats.converse-fullscreen converse-muc-occupants .occupants ul.occupant-list li { + font-size: var(--font-size-small); +} +.conversejs converse-chats.converse-embedded converse-muc-occupants .occupants .occupant-list { + padding-inline-start: 0.3em; +} +/*!**********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/muc-sidebar.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-muc-sidebar { + display: flex; + height: 100%; + flex-direction: row; + overflow: visible; + background-color: var(--background-color); +} +.conversejs converse-muc-sidebar .sidebar-heading { + width: 100%; + font-family: var(--heading-font); + color: var(--muc-color); + padding-inline-start: 0; + margin-inline-end: 0.5em; +} +.conversejs converse-chats.converse-overlayed converse-muc-sidebar .sidebar-heading { + padding: 0; +} +.conversejs converse-chats.converse-fullscreen converse-muc-sidebar .sidebar-heading { + font-size: var(--font-size-large); +} +.conversejs converse-chats.converse-embedded converse-muc-sidebar .sidebar-heading { + font-size: 120%; +} +/*!***************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/muc-chat-content.scss ***! + \***************************************************************************************************************************************************************************************************************************************************************************/ +converse-muc-chat-content { + display: flex; + flex-direction: column-reverse; + height: 100%; + justify-content: space-between; + overflow: auto; +} +/*!************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/modals/styles/config.scss ***! + \************************************************************************************************************************************************************************************************************************************************************************/ +converse-muc-config-modal converse-image-picker { + padding-top: 1em; +} +/*!****************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/muc-details-modal.scss ***! + \****************************************************************************************************************************************************************************************************************************************************************************/ +converse-muc-details-modal .features-list { + margin-inline-start: 1em; +} +converse-muc-details-modal .room-info converse-avatar { + display: block; + margin-bottom: 0.5em; + margin-inline-end: 1em; + float: left; +} +converse-muc-details-modal .room-info strong { + color: var(--muc-color); +} +converse-muc-details-modal .chatroom-features { + width: 100%; +} +converse-muc-details-modal .chatroom-features .features-list { + padding-top: 0; +} +converse-muc-details-modal .chatroom-features .features-list .feature { + width: 100%; + margin-inline-end: 0.5em; + padding-inline-end: 0; + font-size: 1em; + cursor: help; +} +converse-muc-details-modal .chatroom-features .features-list .feature converse-icon { + margin-inline-end: 0.5em; +} +/*!********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/shared/components/styles/rich-text.scss ***! + \********************************************************************************************************************************************************************************************************************************************************************/ +converse-rich-text { + display: block; +} + +.reason converse-rich-text { + display: inline-block; +} +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/muc-head.scss ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-muc.chatroom .chat-head-chatroom { + color: var(--muc-header-fg-color); + background-color: var(--muc-header-bg-color); + border-bottom: 0.15em solid var(--muc-color); +} +.conversejs converse-muc.chatroom .chat-head-chatroom converse-controlbox-navback .fa-arrow-left svg { + fill: var(--muc-header-fg-color); +} +.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc { + color: var(--muc-header-fg-color); + display: block; +} +.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc a { + color: var(--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(--muc-header-fg-color); +} +.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked { + margin-inline-start: 0.5em; +} +.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa, .conversejs converse-muc.chatroom .chat-head-chatroom a:visited.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 { + color: var(--muc-header-fg-color); +} +.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa.button-on:before, .conversejs converse-muc.chatroom .chat-head-chatroom a:visited.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 { + color: var(--muc-header-fg-color); +} +.conversejs converse-muc.chatroom .chat-head-chatroom converse-dropdown .dropdown-menu converse-icon svg { + fill: var(--muc-color); +} +.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-btn converse-icon svg { + fill: var(--muc-header-fg-color); +} +.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text { + color: var(--muc-header-fg-color); + display: block; + font-weight: normal; + margin: auto 0; + padding-inline-end: 0; + white-space: nowrap; +} +.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text .chatroom-jid { + font-size: var(--font-size-small); +} +/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/index.scss ***! + \****************************************************************************************************************************************************************************************************************************************************************/ +.conversejs, .conversejs-bg, #conversejs-bg, body.converse-fullscreen { + --avatar-border-radius: 10%; + --message-avatar-width: 36px; + --message-avatar-height: 36px; + --controlbox-width: 250px; + --chatroom-width: 500px; + --chat-textarea-height: 60px; + --chat-separator-border-bottom: 2px solid var(--chat-color); + --chatbox-button-size: 14px; + --raised-el-shadow: 1px 1px 10px black; + --fullpage-chat-height: calc(var(--vh, 1vh) * 100); + --fullpage-chat-width: 100%; + --fullpage-chatbox-button-size: 16px; + --fullpage-emoji-picker-height: 300px; + --fullpage-max-chat-textarea-height: 15em; + --send-button-height: 27px; + --send-button-margin: 3px; + --inline-action-margin: 0.75em; + --button-border-radius: 5px; + --chatbox-border-radius: 4px; + --normal-font: "Helvetica", "Arial", sans-serif; + --heading-font: "Muli", normal; + --branding-font: "Baumans", cursive; + --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); + --line-height-small: 14px; + --line-height: 16px; + --line-height-large: 20px; + --line-height-huge: 27px; + --embedded-emoji-picker-height: 300px; + --minimized-chats-width: 130px; + --mobile-chat-width: 100%; + --mobile-chat-height: 400px; + --overlayed-chat-gutter: 1em; + --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; + --list-toggle-font-weight: normal; + --separator-text-color: var(--message-text-color); + --text-color: var(--foreground-color); +} + +.conversejs.converse-overlayed { + --message-font-size: var(--font-size-small); +} + +.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 .open-rooms-toggle, .conversejs #controlbox .open-rooms-toggle converse-icon { + color: var(--muc-color) !important; +} +.conversejs #controlbox .open-rooms-toggle:hover, .conversejs #controlbox .open-rooms-toggle converse-icon:hover { + color: var(--muc-color-hover) !important; +} +.conversejs #controlbox .open-rooms-toggle { + white-space: nowrap; +} +.conversejs #controlbox .open-rooms-toggle converse-icon { + margin-inline-start: 0.25em; + padding-bottom: 0.1em; +} + +.conversejs, .conversejs-bg, #conversejs-bg, body.converse-fullscreen { + --avatar-border-radius: 10%; + --message-avatar-width: 36px; + --message-avatar-height: 36px; + --controlbox-width: 250px; + --chatroom-width: 500px; + --chat-textarea-height: 60px; + --chat-separator-border-bottom: 2px solid var(--chat-color); + --chatbox-button-size: 14px; + --raised-el-shadow: 1px 1px 10px black; + --fullpage-chat-height: calc(var(--vh, 1vh) * 100); + --fullpage-chat-width: 100%; + --fullpage-chatbox-button-size: 16px; + --fullpage-emoji-picker-height: 300px; + --fullpage-max-chat-textarea-height: 15em; + --send-button-height: 27px; + --send-button-margin: 3px; + --inline-action-margin: 0.75em; + --button-border-radius: 5px; + --chatbox-border-radius: 4px; + --normal-font: "Helvetica", "Arial", sans-serif; + --heading-font: "Muli", normal; + --branding-font: "Baumans", cursive; + --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); + --line-height-small: 14px; + --line-height: 16px; + --line-height-large: 20px; + --line-height-huge: 27px; + --embedded-emoji-picker-height: 300px; + --minimized-chats-width: 130px; + --mobile-chat-width: 100%; + --mobile-chat-height: 400px; + --overlayed-chat-gutter: 1em; + --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; + --list-toggle-font-weight: normal; + --separator-text-color: var(--message-text-color); + --text-color: var(--foreground-color); +} + +.conversejs.converse-overlayed { + --message-font-size: var(--font-size-small); +} + +.conversejs converse-chats.converse-overlayed .chatbox { + margin: 0 var(--overlayed-chat-gutter); +} + +.conversejs .chatbox { + text-align: start; +} +@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 0.2em; + padding: 0 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, 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: block; + 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-inline-end: 0; +} +.conversejs .chatbox .chat-title a { + color: var(--chat-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; + height: 100%; + width: 100%; + overflow: hidden; +} +@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: 0.25em; +} +.conversejs .chatbox .new-msgs-indicator { + position: relative; + width: 100%; + cursor: pointer; + background-color: var(--background-color); + color: var(--background-color); + padding: 0.5em; + font-size: 0.9em; + text-align: center; + z-index: 20; + white-space: nowrap; + margin-bottom: 0.25em; +} +.conversejs .chatbox .chat-content { + background-color: var(--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 .chat-content__help { + max-height: 100%; +} +.conversejs .chatbox .chat-content .chat-content__help converse-chat-help { + border-top: 1px solid var(--background-color); + display: block; + height: 100%; + overflow-y: auto; + padding: 0.5em 0; +} +.conversejs .chatbox .chat-content .chat-content__help .close-chat-help { + float: right; + padding-inline-end: 1em; + cursor: pointer; + color: var(--background-color); +} +.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg { + fill: var(--background-color); +} +.conversejs .chatbox .chat-content .chat-content__messages { + overflow-x: hidden; + overflow-y: auto; + height: 100%; +} +.conversejs .chatbox .chat-content .chat-content__notifications { + display: block; + white-space: pre; + background-color: var(--background-color); + color: var(--secondary-color); + font-size: 90%; + font-style: italic; + line-height: var(--line-height-small); + padding: 0 1em 0.3em; +} +.conversejs .chatbox .chat-content .chat-content__notifications:before { + content: " "; +} +.conversejs .chatbox .chat-content progress { + margin: 0.5em 0; + width: 100%; +} +.conversejs .chatbox .dragresize { + background: transparent; + 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 .chatroom .box-flyout .muc-form-container { + background-color: var(--background-color); + 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 0.5em; +} +.conversejs .chatroom .box-flyout .muc-form-container .button-primary { + background-color: var(--muc-color); +} +.conversejs .chatroom .box-flyout .chatroom-form { + display: flex; + flex-direction: column; + justify-content: center; +} + +.conversejs converse-muc.chatroom { + width: var(--chatroom-width); +} +@media screen and (max-height: 450px) { + .conversejs converse-muc.chatroom { + width: var(--mobile-chat-width); + } +} +@media screen and (max-width: 480px) { + .conversejs converse-muc.chatroom { + width: var(--mobile-chat-width); + } +} +.conversejs converse-muc.chatroom converse-icon svg { + fill: var(--muc-color); +} +.conversejs converse-muc.chatroom converse-split-resize { + background-color: var(--muc-color); +} +.conversejs converse-muc.chatroom .chat-status--avatar { + background: var(--background-color); + border: 2px solid var(--background-color); + font-size: 0.6rem; + margin-bottom: -2em; + margin-inline-start: -0.3em; + margin-top: 0; + padding: 0.1em; + position: relative; +} +.conversejs converse-muc.chatroom .chat-status--avatar svg { + display: flex; +} +.conversejs converse-muc.chatroom .badge-groupchat { + background-color: var(--muc-color); +} +.conversejs converse-muc.chatroom .box-flyout { + background-color: var(--background-color); + overflow-y: hidden; + width: var(--chatroom-width); +} +@media screen and (max-height: 450px) { + .conversejs converse-muc.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 converse-muc.chatroom .box-flyout { + height: var(--mobile-chat-height); + width: var(--mobile-chat-width); + height: var(--fullpage-chat-height); + } +} +.conversejs converse-muc.chatroom .box-flyout .empty-history-feedback { + position: relative; +} +.conversejs converse-muc.chatroom .box-flyout .empty-history-feedback span { + width: 100%; + text-align: center; + position: absolute; + margin-top: 50%; +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body { + flex-direction: row; + flex-flow: nowrap; + background-color: var(--background-color); + border-top: 0; + height: 100%; + width: 100%; + overflow: hidden; +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body converse-muc-chatarea { + width: 100%; + display: flex; + flex-direction: row; + flex-flow: nowrap; +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .row { + flex-direction: row; +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-topic { + font-weight: bold; + color: var(--background-color); +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-info { + color: var(--info-color); + line-height: normal; +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-info.badge { + color: var(--muc-color); +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted { + color: var(--secondary-color); +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-area { + display: flex; + flex-direction: column; + flex: 1 1 100%; + justify-content: flex-end; + word-wrap: break-word; +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator { + background-color: var(--muc-color); +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-area .chat-content { + height: 100%; +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-area .chat-content__help converse-chat-help { + border-top: 1px solid var(--muc-color); +} +.conversejs converse-muc.chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg { + fill: var(--muc-color); +} +.conversejs converse-muc.chatroom .room-invite .invited-contact { + margin: -1px 0 0 -1px; + width: 100%; + border: 1px solid #999; +} + +converse-muc-disconnected, +converse-muc-destroyed { + padding: 2em; + width: 100%; + height: 100%; +} + +.conversejs.converse-embedded .badge--muc, +.conversejs .badge--muc { + background-color: var(--muc-color); +} +.conversejs.converse-embedded .add-chatroom input[type=submit], +.conversejs.converse-embedded .add-chatroom input[type=button], +.conversejs .add-chatroom input[type=submit], +.conversejs .add-chatroom input[type=button] { + margin: 0.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 auto; + width: 83.33333333%; +} +.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__buttons { + flex: 0 0 auto; + width: 16.66666667%; +} +.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 .chat-area { + min-width: var(--overlayed-chat-width); +} +.conversejs converse-chats.converse-embedded .chatroom .box-flyout, .conversejs converse-chats.converse-fullscreen .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 { + max-width: 100%; +} +.conversejs converse-chats.converse-embedded .chatroom .room-invite span .invited-contact, .conversejs converse-chats.converse-fullscreen .chatroom .room-invite span .invited-contact { + margin: 0 0 0.5em -1px; +} +.conversejs converse-chats.converse-embedded .chatroom { + margin: 0; + width: 100%; +} +.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chat-content .chat-message { + margin: 0.5em; + font-size: 120%; +} +.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chat-message-form .chat-textarea { + padding: 0.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; +} +/*!******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/minimize/styles/minimize.scss ***! + \******************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-chats.converse-overlayed converse-minimized-chats { + order: 100; +} +.conversejs converse-chats.converse-overlayed #minimized-chats { + min-width: var(--minimized-chats-width); + color: var(--chat-color); +} +.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat { + cursor: pointer; + padding: 1px 0 1px 5px; + color: var(--chat-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-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 { + flex-shrink: 1; + min-height: 0; + padding: 0.3em; + border-radius: var(--chatbox-border-radius); + height: 35px; + margin-bottom: 0.2em; + width: 100%; + flex-wrap: nowrap; + background-color: var(--background-color); +} +.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head-chatroom { + background-color: var(--background-color); +} +.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head-chatroom a.restore-chat { + color: var(--muc-color); +} +.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head-headline { + background-color: var(--background-color); +} +.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head-headline a.restore-chat { + color: var(--headlines-color); +} +.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout.minimized { + height: auto; +} +/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/profile/modals/styles/chat-status-modal.scss ***! + \*********************************************************************************************************************************************************************************************************************************************************************************/ +.conversejs .set-xmpp-status .chat-status--online { + color: var(--chat-status-online); +} +.conversejs .set-xmpp-status .chat-status--busy { + color: var(--chat-status-busy); +} +.conversejs .set-xmpp-status .chat-status--away { + color: var(--chat-status-away); +} +.conversejs .set-xmpp-status .far.fa-circle, +.conversejs .set-xmpp-status .fa-times-circle { + color: var(--secondary-color); +} +.conversejs .set-xmpp-status .chat-status { + padding-inline-end: 0.5em; +} +/*!***********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/profile/modals/styles/profile.scss ***! + \***********************************************************************************************************************************************************************************************************************************************************************/ +.conversejs converse-profile-modal .fingerprint { + color: var(--text-color); +} +.conversejs converse-profile-modal .fingerprint-removal-item label { + font-weight: normal; + color: var(--text-color); +} +.conversejs converse-profile-modal .list-group-item { + font-size: 95%; + border-color: var(--primary-color); +} +.conversejs converse-profile-modal .list-group-item input[type=checkbox] { + margin-inline-end: 1em; +} +.conversejs converse-profile-modal .fingerprints { + width: 100%; + margin-bottom: 1em; +} +.conversejs converse-profile-modal .fingerprint-trust { + display: flex; + justify-content: space-between; + font-size: 95%; +} +.conversejs converse-profile-modal .fingerprint-trust .fingerprint { + margin-inline-start: 1em; +} +/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/profile/styles/profile.scss ***! + \****************************************************************************************************************************************************************************************************************************************************************/ +converse-user-profile { + padding: 0.5em 1em; +} +converse-user-profile .change-status { + min-width: 25px; + text-align: center; +} +converse-user-profile .change-status converse-icon { + padding-inline-end: 0.5em; +} +converse-user-profile .userinfo .xmpp-status__msg { + margin-inline-end: 0.5em; +} +converse-user-profile .userinfo .username { + margin-inline-end: 0.5em; + margin-inline-start: 0.5em; + overflow: hidden; + text-overflow: ellipsis; +} +converse-user-profile .userinfo .profile { + margin-bottom: 0.75em; +} +converse-user-profile .xmpp-status .chat-status--online { + color: var(--chat-status-online); +} +converse-user-profile .xmpp-status .chat-status--busy { + color: var(--chat-status-busy); +} +converse-user-profile .xmpp-status .chat-status--away { + color: var(--chat-status-away); +} +converse-user-profile .xmpp-status .far.fa-circle, +converse-user-profile .xmpp-status .fa-times-circle { + color: var(--secondary-color); +} +/*!******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/register/styles/register.scss ***! + \******************************************************************************************************************************************************************************************************************************************************************/ +converse-register-panel { + padding-top: 0; + padding-bottom: 0; +} +converse-register-panel .alert { + margin: auto; + max-width: 50vw; +} +converse-register-panel #converse-register { + opacity: 0; /* make things invisible upon start */ + animation-name: fadein; + animation-fill-mode: forwards; + animation-duration: 0.5s; + animation-timing-function: ease; + padding-top: 0; + background-color: var(--background-color); +} +converse-register-panel #converse-register .title { + font-weight: bold; +} +converse-register-panel #converse-register .input-group input { + height: auto; +} +converse-register-panel #converse-register .input-group .input-group-text { + color: var(--text-color); + background-color: var(--background-color); +} +converse-register-panel #converse-register .form-errors { + color: var(--error-color); + margin: 1em 0; +} +converse-register-panel #converse-register .form-help .url { + font-weight: bold; + color: var(--link-color); +} +converse-register-panel #converse-register .instructions { + color: gray; + font-size: 85%; +} +converse-register-panel #converse-register .instructions:hover { + color: var(--foreground-color); +} +/*!************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/muc-views/styles/add-muc-modal.scss ***! + \************************************************************************************************************************************************************************************************************************************************************************/ +converse-add-muc-modal .add-chatroom converse-autocomplete .suggestion-box__results--below { + height: 10em; + overflow: auto; +} +converse-add-muc-modal .add-chatroom converse-autocomplete .suggestion-box ul li { + display: block; +} +/*!**********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/roomslist/styles/roomsgroups.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************/ +.conversejs #chatrooms .muc-domain-group-toggle { + margin: 0.75em 0 0.25em 0; +} +.conversejs #chatrooms .muc-domain-group-toggle, .conversejs #chatrooms .muc-domain-group-toggle .fa { + color: var(--muc-color); +} +.conversejs #chatrooms .muc-domain-group-toggle:hover, .conversejs #chatrooms .muc-domain-group-toggle .fa:hover { + color: var(--muc-color-hover); +} +.conversejs #chatrooms converse-rooms-list { + display: block; +} +.conversejs #chatrooms converse-rooms-list svg { + fill: var(--muc-color); +} +.conversejs #chatrooms converse-rooms-list .list-item .open-room { + display: flex; + flex-direction: row; +} +.conversejs #chatrooms converse-rooms-list .list-item .open-room span { + padding-top: 0.5em; + padding-inline-end: 0.5em; +} +/*!**************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/rootview/styles/root.scss ***! + \**************************************************************************************************************************************************************************************************************************************************************/ +converse-root.converse-fullscreen, converse-root.converse-overlayed { + bottom: 0; + left: 0; + padding-inline-start: env(safe-area-inset-left); + padding-inline-end: env(safe-area-inset-right); + position: fixed; + z-index: 1031; +} +converse-root.converse-fullscreen { + height: 100vh; + width: 100vw; +} +converse-root.converse-embedded { + position: relative; +} +/*!********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/rootview/styles/background.scss ***! + \********************************************************************************************************************************************************************************************************************************************************************/ +converse-bg { + display: inline-block; + height: 100vh; + width: 100vw; + background-color: var(--global-background-color); +} +converse-bg.theme-cyberpunk { + background: linear-gradient(#121212, #212938, #304468, #ab38bc, #121212); +} +converse-bg .subdued { + opacity: 0.35; +} +converse-bg .converse-brand { + margin-top: 20vh; + display: flex; + justify-content: space-between; + animation-name: fadein; + animation-fill-mode: forwards; + animation-duration: 5s; + animation-timing-function: ease; +} +converse-bg .converse-brand__text { + color: var(--foreground-color); + font-family: var(--branding-font); + font-weight: normal; + text-align: center; + font-size: 140%; + margin-inline-start: 0.2em; +} +converse-bg .converse-brand__text .byline { + margin: 0; + font-family: var(--heading-font); + font-size: 0.3em; + opacity: 0.55; + margin-bottom: 2em; + margin-inline-start: -2.7em; + word-spacing: 5px; +} +@media (max-width: 575.98px) { + converse-bg .converse-brand { + display: none; + } +} +converse-bg .converse-brand__heading { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); + padding: 0; + padding-top: 15%; + display: flex; + justify-content: center; + margin: auto; +} +@media (min-width: 768px) { + converse-bg .converse-brand__heading { + font-size: 4em; + flex: 0 0 auto; + width: 66.66666667%; + } +} +@media (min-width: 992px) { + converse-bg .converse-brand__heading { + font-size: 5em; + flex: 0 0 auto; + width: 75%; + } +} +@media (min-width: 1200px) { + converse-bg .converse-brand__heading { + font-size: 6em; + flex: 0 0 auto; + width: 83.33333333%; + } +} +converse-bg .converse-brand__heading svg { + margin-top: 0.4em; +} +/*!******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/rosterview/styles/roster.scss ***! + \******************************************************************************************************************************************************************************************************************************************************************/ +.conversejs #controlbox .open-contacts-toggle, .conversejs #controlbox .open-contacts-toggle .fa { + color: var(--chat-color) !important; +} +.conversejs #controlbox .open-contacts-toggle:hover, .conversejs #controlbox .open-contacts-toggle .fa:hover { + color: var(--chat-color) !important; +} +.conversejs #controlbox .open-contacts-toggle { + white-space: nowrap; +} +.conversejs #controlbox .open-contacts-toggle converse-icon { + margin-inline-start: 0.25em; + padding-bottom: 0.1em; +} +.conversejs #converse-roster { + text-align: start; + width: 100%; + margin: 0; + padding: 0; +} +.conversejs #converse-roster svg { + fill: var(--chat-color) !important; +} +.conversejs #converse-roster .roster-contacts { + padding: 0; + margin: 0 0 0.2em 0; + color: var(--text-color); + display: contents; +} +.conversejs #converse-roster .roster-contacts .roster-group-contacts .list-item:hover .list-item-action { + opacity: 1; +} +.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 converse-roster-contact .list-item-action { + line-height: 2em; +} +.conversejs #converse-roster .roster-contacts converse-roster-contact:hover .list-item-action { + opacity: 1; +} +.conversejs #converse-roster .roster-contacts .group-toggle { + font-family: var(--heading-font); + display: block; + width: 100%; + margin: 0.75em 0 0.25em 0; +} +.conversejs #converse-roster .roster-contacts .group-toggle, .conversejs #converse-roster .roster-contacts .group-toggle .fa { + color: var(--chat-color) !important; +} +.conversejs #converse-roster .roster-contacts .group-toggle:hover, .conversejs #converse-roster .roster-contacts .group-toggle .fa:hover { + color: var(--chat-color-hover) !important; +} +.conversejs #converse-roster .roster-contacts .current-xmpp-contact { + margin: 0.25em 0; +} +.conversejs #converse-roster .roster-contacts .list-item.requesting-xmpp-contact a { + line-height: var(--line-height); +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat { + margin: 0; + padding: 0; +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat converse-icon.chat-status { + position: relative; + border: 2px solid var(--background-color); +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat converse-icon.chat-status svg { + display: flex; +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat.unread-msgs { + font-weight: bold; + color: var(--info-color); +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat.unread-msgs .contact-name { + width: 70%; +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat .contact-name { + padding: 0; + margin: 0; + max-width: 85%; + float: none; + height: 100%; +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat .contact-name.unread-msgs { + max-width: 60%; +} +.conversejs #converse-roster .roster-contacts .list-item .open-chat .contact-name.contact-name--offline { + margin-inline-start: 0.25em; +} +.conversejs #converse-roster .roster-contacts .list-item.odd { + background-color: #DCEAC5; + /* Make this difference */ +} +.conversejs #converse-roster .roster-contacts .list-item a, .conversejs #converse-roster .roster-contacts .list-item span { + white-space: nowrap; + text-overflow: ellipsis; +} +.conversejs #converse-roster .roster-contacts .list-item .span { + display: inline-block; +} +.conversejs #converse-roster .roster-contacts .list-item .decline-xmpp-request { + margin-inline-start: 1em; +} +.conversejs #converse-roster .roster-contacts .list-item:hover { + background-color: var(--highlight-color-hover); +} +.conversejs #converse-roster span.pending-contact-name { + line-height: var(--line-height); + width: 100%; +} +/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/singleton/singleton.scss ***! + \*************************************************************************************************************************************************************************************************************************************************************/ +.conversejs, .conversejs-bg, #conversejs-bg, body.converse-fullscreen { + --avatar-border-radius: 10%; + --message-avatar-width: 36px; + --message-avatar-height: 36px; + --controlbox-width: 250px; + --chatroom-width: 500px; + --chat-textarea-height: 60px; + --chat-separator-border-bottom: 2px solid var(--chat-color); + --chatbox-button-size: 14px; + --raised-el-shadow: 1px 1px 10px black; + --fullpage-chat-height: calc(var(--vh, 1vh) * 100); + --fullpage-chat-width: 100%; + --fullpage-chatbox-button-size: 16px; + --fullpage-emoji-picker-height: 300px; + --fullpage-max-chat-textarea-height: 15em; + --send-button-height: 27px; + --send-button-margin: 3px; + --inline-action-margin: 0.75em; + --button-border-radius: 5px; + --chatbox-border-radius: 4px; + --normal-font: "Helvetica", "Arial", sans-serif; + --heading-font: "Muli", normal; + --branding-font: "Baumans", cursive; + --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); + --line-height-small: 14px; + --line-height: 16px; + --line-height-large: 20px; + --line-height-huge: 27px; + --embedded-emoji-picker-height: 300px; + --minimized-chats-width: 130px; + --mobile-chat-width: 100%; + --mobile-chat-height: 400px; + --overlayed-chat-gutter: 1em; + --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; + --list-toggle-font-weight: normal; + --separator-text-color: var(--message-text-color); + --text-color: var(--foreground-color); +} + +.conversejs.converse-overlayed { + --message-font-size: var(--font-size-small); +} + +.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: 0.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 { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} +@media (min-width: 768px) { + .conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox { + flex: 0 0 auto; + width: 100%; + } +} +@media (min-width: 992px) { + .conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox { + flex: 0 0 auto; + width: 100%; + } +} +@media (min-width: 1200px) { + .conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox { + flex: 0 0 auto; + width: 100%; + } +} +/*!**********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[3]!./src/plugins/fullscreen/styles/fullscreen.scss ***! + \**********************************************************************************************************************************************************************************************************************************************************************/ +body.converse-fullscreen { + margin: 0; + overflow: hidden; +} + +/*# sourceMappingURL=converse.css.map*/ \ No newline at end of file diff --git a/classes/jsp/dist/converse.css.map b/classes/jsp/dist/converse.css.map new file mode 100644 index 0000000..7ffb4d4 --- /dev/null +++ b/classes/jsp/dist/converse.css.map @@ -0,0 +1 @@ +{"version":3,"file":"../dist/converse.css","mappings":";;;AAAA,gBAAgB;AAAhB;;;;;;EAAA;ACAA;;EASI;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAGF;EACA;EAMA;EACA;EACA;EAOA;EC2OI,+BALI;EDpOR;EACA;EAKA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAGA;EAEA;EACA;EACA;EAEA;EACA;EAMA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAIA;EACA;EACA;EAIA;EACA;EACA;EACA;ADAF;;AGhHI;EFsHA;EAGA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAGE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAGF;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;ADAJ;;AAnKA;EI2gBA;;;;;;;GAAA;ECxeA;EAaA;EAYA;EAaA;EChBA;EAwBA;EAmCA;EAwBA;EC5GQ;EAwCA;APgHR;AI7LA;;;;;EAGE;AJiMF;AIlLI;EANJ;IAOM;EJqLJ;AACF;AIxKA;EACE;EACA;EF6OI,yCALI;EEtOR;EACA;EACA;EACA;EACA;EACA;EACA;AJ0KF;AIjKA;EACE;EACA,cImnB4B;EJlnB5B;EACA;EACA,aIynB4B;ARtd9B;AIzJA;EACE;EACA,qBIwjB4B;EJrjB5B,gBIwjB4B;EJvjB5B,gBIwjB4B;EJvjB5B;AJyJF;AItJA;EFuMQ;AF9CR;AE9GI;EE3CJ;IF8MQ;EFjDN;AACF;AIzJA;EFkMQ;AFtCR;AEtHI;EEtCJ;IFyMQ;EFzCN;AACF;AI5JA;EF6LQ;AF9BR;AE9HI;EEjCJ;IFoMQ;EFjCN;AACF;AI/JA;EFwLQ;AFtBR;AEtII;EE5BJ;IF+LQ;EFzBN;AACF;AIlKA;EF+KM,kBALI;AFLV;AIhKA;EF0KM,eALI;AFFV;AIxJA;EACE;EACA,mBIwV0B;AR9L5B;AIhJA;EACE;UAAA;EACA;EACA;UAAA;AJkJF;AI5IA;EACE;EACA;EACA;AJ8IF;AIxIA;;;EAEE;AJ2IF;AIxIA;;;;;EAGE;EACA;AJ4IF;AIzIA;;;;;;;EAIE;AJ8IF;AI3IA;EACE,gBI6b4B;ARhT9B;AIxIA;EACE;EACA;AJ0IF;AIpIA;EACE;AJsIF;AI9HA;;;EAEE,mBIsa4B;ARrS9B;AIzHA;EF6EM,kBALI;AFoDV;AIrHA;EACE,iBIqf4B;EJpf5B;EACA;AJuHF;AI9GA;;;EAEE;EFwDI,iBALI;EEjDR;EACA;AJiHF;AI9GA;EAAM;AJiHN;AIhHA;EAAM;AJmHN;AI9GA;EACE;EACA,0BIgNwC;ARhG1C;AI9GE;EACE;AJgHJ;AIrGE;EAEE;EACA;AJsGJ;AI/FA;;;;;;;EAIE,2CIgV4B;ENlUxB,cALI;AF4FV;AI7FA;EACE;EACA;EACA;EACA;EFEI,kBALI;AFmGV;AI3FE;EFHI,kBALI;EEUN;EACA;AJ6FJ;AIzFA;EFVM,kBALI;EEiBR;EACA;AJ2FF;AIxFE;EACE;AJ0FJ;AItFA;EACE;EFtBI,kBALI;EE6BR,8BIy5CkC;EJx5ClC,4CIy5CkC;EC9rDhC;AT8XJ;AItFE;EACE;EF7BE,cALI;AF2HV;AI9EA;EACE;AJgFF;AI1EA;;;EAEE;AJ6EF;AIrEA;EACE;EACA;AJuEF;AIpEA;EACE,mBI4X4B;EJ3X5B,sBI2X4B;EJ1X5B,sCI4Z4B;EJ3Z5B;AJsEF;AI/DA;EAEE;EACA;AJgEF;AI7DA;;;;;;;;;;;EAME;EACA;EACA;AJoEF;AI5DA;EACE;AJ8DF;AIxDA;EAEE;AJyDF;AIjDA;EACE;AJmDF;AI9CA;;;;;;;;;EAKE;EACA;EF5HI,kBALI;EEmIR;AJoDF;AIhDA;;;EAEE;AJmDF;AI9CA;EACE;AJgDF;AI7CA;EAGE;AJ6CF;AI1CE;EACE;AJ4CJ;AIrCA;EACE;AJuCF;AI/BA;;;;;;;EAIE;AJoCF;AIjCI;;;;;;;EACE;AJyCN;AIlCA;EACE;EACA;AJoCF;AI/BA;EACE;AJiCF;AIvBA;EACE;EACA;EACA;EACA;AJyBF;AIjBA;EACE;EACA;EACA;EACA,qBImN4B;ENpatB;EEoNN;AJkBF;AElYI;EEyWJ;IFtMQ;EFmON;AACF;AIrBE;EACE;AJuBJ;AIhBA;;;;;;;;;;;;;EAOE;AJwBF;AIrBA;EACE;AJuBF;AIdA;EACE;EACA;AJgBF;AIGA;EACE;AJDF;AIMA;EACE;AJJF;AIWA;EACE;EACA;AJTF;AIcA;EACE;AJZF;AIiBA;EACE;AJfF;AIsBA;EACE;EACA;AJpBF;AI4BA;EACE;AJ1BF;AIkCA;EACE;AJhCF;AUriBA;ERmQM,kBALI;EQ5PR,gBFwoB4B;ARjG9B;AUliBE;ERgQM;EQ5PJ,gBFynBkB;EExnBlB,gBFwmB0B;ARtE9B;AEncI;EQpGF;IRuQM;EFoSN;AACF;AU5iBE;ERgQM;EQ5PJ,gBFynBkB;EExnBlB,gBFwmB0B;AR5D9B;AE7cI;EQpGF;IRuQM;EF8SN;AACF;AUtjBE;ERgQM;EQ5PJ,gBFynBkB;EExnBlB,gBFwmB0B;ARlD9B;AEvdI;EQpGF;IRuQM;EFwTN;AACF;AUhkBE;ERgQM;EQ5PJ,gBFynBkB;EExnBlB,gBFwmB0B;ARxC9B;AEjeI;EQpGF;IRuQM;EFkUN;AACF;AU1kBE;ERgQM;EQ5PJ,gBFynBkB;EExnBlB,gBFwmB0B;AR9B9B;AE3eI;EQpGF;IRuQM;EF4UN;AACF;AUplBE;ERgQM;EQ5PJ,gBFynBkB;EExnBlB,gBFwmB0B;ARpB9B;AErfI;EQpGF;IRuQM;EFsVN;AACF;AUtkBA;ECvDE;EACA;AXgoBF;AUrkBA;EC5DE;EACA;AXooBF;AUtkBA;EACE;AVwkBF;AUtkBE;EACE,oBFsoB0B;AR9D9B;AU9jBA;ER8MM,kBALI;EQvMR;AVgkBF;AU5jBA;EACE,mBFiUO;EN1HH,kBALI;AF6XV;AU5jBE;EACE;AV8jBJ;AU1jBA;EACE;EACA,mBFuTO;EN1HH,kBALI;EQtLR,cFtFS;ARkpBX;AU1jBE;EACE;AV4jBJ;AY5pBA;ECIE;EAGA;AbypBF;AY1pBA;EACE,gBJ+jDkC;EI9jDlC,yCJ+jDkC;EI9jDlC;EHGE;EIRF;EAGA;AbiqBF;AYnpBA;EAEE;AZopBF;AYjpBA;EACE;EACA;AZmpBF;AYhpBA;EVyPM,kBALI;EUlPR,sCJkjDkC;ARh6BpC;AcprBE;;;;;;;;;;;;;ECHA;EACA;EACA;EACA;EACA;EACA;EACA;AfssBF;AgBhpBI;EF5CE;IACE,gBNkee;ER6NrB;AACF;AgBrpBI;EF5CE;IACE,gBNkee;ERkOrB;AACF;AgB1pBI;EF5CE;IACE,gBNkee;ERuOrB;AACF;AgB/pBI;EF5CE;IACE,iBNkee;ER4OrB;AACF;AgBpqBI;EF5CE;IACE,iBNkee;ERiPrB;AACF;AiBpuBA;EAEI;EAAA;EAAA;EAAA;EAAA;EAAA;AjB0uBJ;AiBruBE;ECNA;EACA;EACA;EACA;EAEA;EACA;EACA;AlB6uBF;AiB3uBI;ECOF;EACA;EACA;EACA;EACA;EACA;AlBuuBF;AkBxrBM;EACE;AlB0rBR;AkBvrBM;EApCJ;EACA;AlB8tBF;AkBhtBE;EACE;EACA;AlBktBJ;AkBptBE;EACE;EACA;AlBstBJ;AkBxtBE;EACE;EACA;AlB0tBJ;AkB5tBE;EACE;EACA;AlB8tBJ;AkBhuBE;EACE;EACA;AlBkuBJ;AkBpuBE;EACE;EACA;AlBsuBJ;AkBvsBM;EAhDJ;EACA;AlB0vBF;AkBrsBU;EAhEN;EACA;AlBwwBJ;AkBzsBU;EAhEN;EACA;AlB4wBJ;AkB7sBU;EAhEN;EACA;AlBgxBJ;AkBjtBU;EAhEN;EACA;AlBoxBJ;AkBrtBU;EAhEN;EACA;AlBwxBJ;AkBztBU;EAhEN;EACA;AlB4xBJ;AkB7tBU;EAhEN;EACA;AlBgyBJ;AkBjuBU;EAhEN;EACA;AlBoyBJ;AkBruBU;EAhEN;EACA;AlBwyBJ;AkBzuBU;EAhEN;EACA;AlB4yBJ;AkB7uBU;EAhEN;EACA;AlBgzBJ;AkBjvBU;EAhEN;EACA;AlBozBJ;AkB7uBY;EAxDV;AlBwyBF;AkBhvBY;EAxDV;AlB2yBF;AkBnvBY;EAxDV;AlB8yBF;AkBtvBY;EAxDV;AlBizBF;AkBzvBY;EAxDV;AlBozBF;AkB5vBY;EAxDV;AlBuzBF;AkB/vBY;EAxDV;AlB0zBF;AkBlwBY;EAxDV;AlB6zBF;AkBrwBY;EAxDV;AlBg0BF;AkBxwBY;EAxDV;AlBm0BF;AkB3wBY;EAxDV;AlBs0BF;AkBnwBQ;;;EAEE;AlBswBV;AkBnwBQ;;;EAEE;AlBswBV;AkB7wBQ;;;EAEE;AlBgxBV;AkB7wBQ;;;EAEE;AlBgxBV;AkBvxBQ;;;EAEE;AlB0xBV;AkBvxBQ;;;EAEE;AlB0xBV;AkBjyBQ;;;EAEE;AlBoyBV;AkBjyBQ;;;EAEE;AlBoyBV;AkB3yBQ;;;EAEE;AlB8yBV;AkB3yBQ;;;EAEE;AlB8yBV;AkBrzBQ;;;EAEE;AlBwzBV;AkBrzBQ;;;EAEE;AlBwzBV;AgBl3BI;EEUE;IACE;ElB22BN;EkBx2BI;IApCJ;IACA;ElB+4BA;EkBj4BA;IACE;IACA;ElBm4BF;EkBr4BA;IACE;IACA;ElBu4BF;EkBz4BA;IACE;IACA;ElB24BF;EkB74BA;IACE;IACA;ElB+4BF;EkBj5BA;IACE;IACA;ElBm5BF;EkBr5BA;IACE;IACA;ElBu5BF;EkBx3BI;IAhDJ;IACA;ElB26BA;EkBt3BQ;IAhEN;IACA;ElBy7BF;EkB13BQ;IAhEN;IACA;ElB67BF;EkB93BQ;IAhEN;IACA;ElBi8BF;EkBl4BQ;IAhEN;IACA;ElBq8BF;EkBt4BQ;IAhEN;IACA;ElBy8BF;EkB14BQ;IAhEN;IACA;ElB68BF;EkB94BQ;IAhEN;IACA;ElBi9BF;EkBl5BQ;IAhEN;IACA;ElBq9BF;EkBt5BQ;IAhEN;IACA;ElBy9BF;EkB15BQ;IAhEN;IACA;ElB69BF;EkB95BQ;IAhEN;IACA;ElBi+BF;EkBl6BQ;IAhEN;IACA;ElBq+BF;EkB95BU;IAxDV;ElBy9BA;EkBj6BU;IAxDV;ElB49BA;EkBp6BU;IAxDV;ElB+9BA;EkBv6BU;IAxDV;ElBk+BA;EkB16BU;IAxDV;ElBq+BA;EkB76BU;IAxDV;ElBw+BA;EkBh7BU;IAxDV;ElB2+BA;EkBn7BU;IAxDV;ElB8+BA;EkBt7BU;IAxDV;ElBi/BA;EkBz7BU;IAxDV;ElBo/BA;EkB57BU;IAxDV;ElBu/BA;EkB/7BU;IAxDV;ElB0/BA;EkBv7BM;;;IAEE;ElB07BR;EkBv7BM;;;IAEE;ElB07BR;EkBj8BM;;;IAEE;ElBo8BR;EkBj8BM;;;IAEE;ElBo8BR;EkB38BM;;;IAEE;ElB88BR;EkB38BM;;;IAEE;ElB88BR;EkBr9BM;;;IAEE;ElBw9BR;EkBr9BM;;;IAEE;ElBw9BR;EkB/9BM;;;IAEE;ElBk+BR;EkB/9BM;;;IAEE;ElBk+BR;EkBz+BM;;;IAEE;ElB4+BR;EkBz+BM;;;IAEE;ElB4+BR;AACF;AgBviCI;EEUE;IACE;ElBgiCN;EkB7hCI;IApCJ;IACA;ElBokCA;EkBtjCA;IACE;IACA;ElBwjCF;EkB1jCA;IACE;IACA;ElB4jCF;EkB9jCA;IACE;IACA;ElBgkCF;EkBlkCA;IACE;IACA;ElBokCF;EkBtkCA;IACE;IACA;ElBwkCF;EkB1kCA;IACE;IACA;ElB4kCF;EkB7iCI;IAhDJ;IACA;ElBgmCA;EkB3iCQ;IAhEN;IACA;ElB8mCF;EkB/iCQ;IAhEN;IACA;ElBknCF;EkBnjCQ;IAhEN;IACA;ElBsnCF;EkBvjCQ;IAhEN;IACA;ElB0nCF;EkB3jCQ;IAhEN;IACA;ElB8nCF;EkB/jCQ;IAhEN;IACA;ElBkoCF;EkBnkCQ;IAhEN;IACA;ElBsoCF;EkBvkCQ;IAhEN;IACA;ElB0oCF;EkB3kCQ;IAhEN;IACA;ElB8oCF;EkB/kCQ;IAhEN;IACA;ElBkpCF;EkBnlCQ;IAhEN;IACA;ElBspCF;EkBvlCQ;IAhEN;IACA;ElB0pCF;EkBnlCU;IAxDV;ElB8oCA;EkBtlCU;IAxDV;ElBipCA;EkBzlCU;IAxDV;ElBopCA;EkB5lCU;IAxDV;ElBupCA;EkB/lCU;IAxDV;ElB0pCA;EkBlmCU;IAxDV;ElB6pCA;EkBrmCU;IAxDV;ElBgqCA;EkBxmCU;IAxDV;ElBmqCA;EkB3mCU;IAxDV;ElBsqCA;EkB9mCU;IAxDV;ElByqCA;EkBjnCU;IAxDV;ElB4qCA;EkBpnCU;IAxDV;ElB+qCA;EkB5mCM;;;IAEE;ElB+mCR;EkB5mCM;;;IAEE;ElB+mCR;EkBtnCM;;;IAEE;ElBynCR;EkBtnCM;;;IAEE;ElBynCR;EkBhoCM;;;IAEE;ElBmoCR;EkBhoCM;;;IAEE;ElBmoCR;EkB1oCM;;;IAEE;ElB6oCR;EkB1oCM;;;IAEE;ElB6oCR;EkBppCM;;;IAEE;ElBupCR;EkBppCM;;;IAEE;ElBupCR;EkB9pCM;;;IAEE;ElBiqCR;EkB9pCM;;;IAEE;ElBiqCR;AACF;AgB5tCI;EEUE;IACE;ElBqtCN;EkBltCI;IApCJ;IACA;ElByvCA;EkB3uCA;IACE;IACA;ElB6uCF;EkB/uCA;IACE;IACA;ElBivCF;EkBnvCA;IACE;IACA;ElBqvCF;EkBvvCA;IACE;IACA;ElByvCF;EkB3vCA;IACE;IACA;ElB6vCF;EkB/vCA;IACE;IACA;ElBiwCF;EkBluCI;IAhDJ;IACA;ElBqxCA;EkBhuCQ;IAhEN;IACA;ElBmyCF;EkBpuCQ;IAhEN;IACA;ElBuyCF;EkBxuCQ;IAhEN;IACA;ElB2yCF;EkB5uCQ;IAhEN;IACA;ElB+yCF;EkBhvCQ;IAhEN;IACA;ElBmzCF;EkBpvCQ;IAhEN;IACA;ElBuzCF;EkBxvCQ;IAhEN;IACA;ElB2zCF;EkB5vCQ;IAhEN;IACA;ElB+zCF;EkBhwCQ;IAhEN;IACA;ElBm0CF;EkBpwCQ;IAhEN;IACA;ElBu0CF;EkBxwCQ;IAhEN;IACA;ElB20CF;EkB5wCQ;IAhEN;IACA;ElB+0CF;EkBxwCU;IAxDV;ElBm0CA;EkB3wCU;IAxDV;ElBs0CA;EkB9wCU;IAxDV;ElBy0CA;EkBjxCU;IAxDV;ElB40CA;EkBpxCU;IAxDV;ElB+0CA;EkBvxCU;IAxDV;ElBk1CA;EkB1xCU;IAxDV;ElBq1CA;EkB7xCU;IAxDV;ElBw1CA;EkBhyCU;IAxDV;ElB21CA;EkBnyCU;IAxDV;ElB81CA;EkBtyCU;IAxDV;ElBi2CA;EkBzyCU;IAxDV;ElBo2CA;EkBjyCM;;;IAEE;ElBoyCR;EkBjyCM;;;IAEE;ElBoyCR;EkB3yCM;;;IAEE;ElB8yCR;EkB3yCM;;;IAEE;ElB8yCR;EkBrzCM;;;IAEE;ElBwzCR;EkBrzCM;;;IAEE;ElBwzCR;EkB/zCM;;;IAEE;ElBk0CR;EkB/zCM;;;IAEE;ElBk0CR;EkBz0CM;;;IAEE;ElB40CR;EkBz0CM;;;IAEE;ElB40CR;EkBn1CM;;;IAEE;ElBs1CR;EkBn1CM;;;IAEE;ElBs1CR;AACF;AgBj5CI;EEUE;IACE;ElB04CN;EkBv4CI;IApCJ;IACA;ElB86CA;EkBh6CA;IACE;IACA;ElBk6CF;EkBp6CA;IACE;IACA;ElBs6CF;EkBx6CA;IACE;IACA;ElB06CF;EkB56CA;IACE;IACA;ElB86CF;EkBh7CA;IACE;IACA;ElBk7CF;EkBp7CA;IACE;IACA;ElBs7CF;EkBv5CI;IAhDJ;IACA;ElB08CA;EkBr5CQ;IAhEN;IACA;ElBw9CF;EkBz5CQ;IAhEN;IACA;ElB49CF;EkB75CQ;IAhEN;IACA;ElBg+CF;EkBj6CQ;IAhEN;IACA;ElBo+CF;EkBr6CQ;IAhEN;IACA;ElBw+CF;EkBz6CQ;IAhEN;IACA;ElB4+CF;EkB76CQ;IAhEN;IACA;ElBg/CF;EkBj7CQ;IAhEN;IACA;ElBo/CF;EkBr7CQ;IAhEN;IACA;ElBw/CF;EkBz7CQ;IAhEN;IACA;ElB4/CF;EkB77CQ;IAhEN;IACA;ElBggDF;EkBj8CQ;IAhEN;IACA;ElBogDF;EkB77CU;IAxDV;ElBw/CA;EkBh8CU;IAxDV;ElB2/CA;EkBn8CU;IAxDV;ElB8/CA;EkBt8CU;IAxDV;ElBigDA;EkBz8CU;IAxDV;ElBogDA;EkB58CU;IAxDV;ElBugDA;EkB/8CU;IAxDV;ElB0gDA;EkBl9CU;IAxDV;ElB6gDA;EkBr9CU;IAxDV;ElBghDA;EkBx9CU;IAxDV;ElBmhDA;EkB39CU;IAxDV;ElBshDA;EkB99CU;IAxDV;ElByhDA;EkBt9CM;;;IAEE;ElBy9CR;EkBt9CM;;;IAEE;ElBy9CR;EkBh+CM;;;IAEE;ElBm+CR;EkBh+CM;;;IAEE;ElBm+CR;EkB1+CM;;;IAEE;ElB6+CR;EkB1+CM;;;IAEE;ElB6+CR;EkBp/CM;;;IAEE;ElBu/CR;EkBp/CM;;;IAEE;ElBu/CR;EkB9/CM;;;IAEE;ElBigDR;EkB9/CM;;;IAEE;ElBigDR;EkBxgDM;;;IAEE;ElB2gDR;EkBxgDM;;;IAEE;ElB2gDR;AACF;AgBtkDI;EEUE;IACE;ElB+jDN;EkB5jDI;IApCJ;IACA;ElBmmDA;EkBrlDA;IACE;IACA;ElBulDF;EkBzlDA;IACE;IACA;ElB2lDF;EkB7lDA;IACE;IACA;ElB+lDF;EkBjmDA;IACE;IACA;ElBmmDF;EkBrmDA;IACE;IACA;ElBumDF;EkBzmDA;IACE;IACA;ElB2mDF;EkB5kDI;IAhDJ;IACA;ElB+nDA;EkB1kDQ;IAhEN;IACA;ElB6oDF;EkB9kDQ;IAhEN;IACA;ElBipDF;EkBllDQ;IAhEN;IACA;ElBqpDF;EkBtlDQ;IAhEN;IACA;ElBypDF;EkB1lDQ;IAhEN;IACA;ElB6pDF;EkB9lDQ;IAhEN;IACA;ElBiqDF;EkBlmDQ;IAhEN;IACA;ElBqqDF;EkBtmDQ;IAhEN;IACA;ElByqDF;EkB1mDQ;IAhEN;IACA;ElB6qDF;EkB9mDQ;IAhEN;IACA;ElBirDF;EkBlnDQ;IAhEN;IACA;ElBqrDF;EkBtnDQ;IAhEN;IACA;ElByrDF;EkBlnDU;IAxDV;ElB6qDA;EkBrnDU;IAxDV;ElBgrDA;EkBxnDU;IAxDV;ElBmrDA;EkB3nDU;IAxDV;ElBsrDA;EkB9nDU;IAxDV;ElByrDA;EkBjoDU;IAxDV;ElB4rDA;EkBpoDU;IAxDV;ElB+rDA;EkBvoDU;IAxDV;ElBksDA;EkB1oDU;IAxDV;ElBqsDA;EkB7oDU;IAxDV;ElBwsDA;EkBhpDU;IAxDV;ElB2sDA;EkBnpDU;IAxDV;ElB8sDA;EkB3oDM;;;IAEE;ElB8oDR;EkB3oDM;;;IAEE;ElB8oDR;EkBrpDM;;;IAEE;ElBwpDR;EkBrpDM;;;IAEE;ElBwpDR;EkB/pDM;;;IAEE;ElBkqDR;EkB/pDM;;;IAEE;ElBkqDR;EkBzqDM;;;IAEE;ElB4qDR;EkBzqDM;;;IAEE;ElB4qDR;EkBnrDM;;;IAEE;ElBsrDR;EkBnrDM;;;IAEE;ElBsrDR;EkB7rDM;;;IAEE;ElBgsDR;EkB7rDM;;;IAEE;ElBgsDR;AACF;AmBtzDA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,mBXkYO;EWjYP,mBXusB4B;EWtsB5B;AnBqzDF;AmB9yDE;EACE;EAEA;EACA;EACA,iDX+sB0B;EW9sB1B;AnB+yDJ;AmB5yDE;EACE;AnB8yDJ;AmB3yDE;EACE;AnB6yDJ;AmBzyDA;EACE;AnB2yDF;AmBpyDA;EACE;AnBsyDF;AmB5xDE;EACE;AnB8xDJ;AmB/wDE;EACE;AnBixDJ;AmB9wDI;EACE;AnBgxDN;AmBzwDE;EACE;AnB2wDJ;AmBxwDE;EACE;AnB0wDJ;AmBhwDE;EACE;EACA;AnBkwDJ;AmB5vDE;EACE;EACA;AnB8vDJ;AmBtvDA;EACE;EACA;AnBwvDF;AmBhvDE;EACE;EACA;AnBkvDJ;AoB93DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApBy3DJ;AoB34DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApBs4DJ;AoBx5DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApBm5DJ;AoBr6DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApBg6DJ;AoBl7DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApB66DJ;AoB/7DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApB07DJ;AoB58DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApBu8DJ;AoBz9DE;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;ApBo9DJ;AmBn0DI;EACE;EACA;AnBq0DN;AgBh6DI;EGyFA;IACE;IACA;EnB00DJ;AACF;AgBt6DI;EGyFA;IACE;IACA;EnBg1DJ;AACF;AgB56DI;EGyFA;IACE;IACA;EnBs1DJ;AACF;AgBl7DI;EGyFA;IACE;IACA;EnB41DJ;AACF;AgBx7DI;EGyFA;IACE;IACA;EnBk2DJ;AACF;AqBtgEA;EACE,qBbu2BsC;ARiqCxC;AqB//DA;EACE;EACA;EACA;EnB8QI,kBALI;EmBrQR,gBb+lB4B;ARg6C9B;AqB3/DA;EACE;EACA;EnBoQI,kBALI;AF+vDV;AqB1/DA;EACE;EACA;EnB8PI,mBALI;AFowDV;AsB1hEA;EACE,mBd+1BsC;ENrkBlC,kBALI;EoBjRR,sCd+1BsC;AR2rCxC;AuB/hEA;EACE;EACA;EACA;ErBwRI,eALI;EqBhRR,gBfkmB4B;EejmB5B,gBfymB4B;EexmB5B,iCf43BsC;Ee33BtC;KAAA;UAAA;EACA,yCfq3BsC;Eep3BtC;EACA;EdGE;EeHE,wEDMJ;AvB4hEF;AwB9hEM;EDhBN;ICiBQ;ExBiiEN;AACF;AuB/hEE;EACE;AvBiiEJ;AuB/hEI;EACE;AvBiiEN;AuB5hEE;EACE,iCfs2BoC;Eer2BpC,yCfg2BoC;Ee/1BpC,qBf82BoC;Ee72BpC;EAKE,kDfkhBkB;ARwgDxB;AuBthEE;EAME;EAMA;EAKA;AvB0gEJ;AuBrgEE;EACE;EACA;AvBugEJ;AuBngEE;EACE,sCf40BoC;Ee10BpC;AvBogEJ;AuBvgEE;EACE,sCf40BoC;Ee10BpC;AvBogEJ;AuB5/DE;EAEE,8Cf8yBoC;Ee3yBpC;AvB2/DJ;AuBv/DE;EACE;EACA;EACA,0BforB0B;EenrB1B,iCfsyBoC;EiBp4BtC,6CjBqiCgC;Eer8B9B;EACA;EACA;EACA;EACA,qDfgsB0B;Ee/rB1B;ECzFE,qID0FF;AvBy/DJ;AwB/kEM;ED0EJ;ICzEM;ExBklEN;AACF;AuB3/DE;EACE,8Cf47B8B;ARikClC;AuBp/DA;EACE;EACA;EACA;EACA;EACA,gBfwf4B;Eevf5B,iCf2xBsC;Ee1xBtC;EACA;EACA;AvBs/DF;AuBp/DE;EACE;AvBs/DJ;AuBn/DE;EAEE;EACA;AvBo/DJ;AuBz+DA;EACE,yEf4wBsC;Ee3wBtC;ErByII,mBALI;EOvQN;ATgnEJ;AuBz+DE;EACE;EACA;EACA,yBfooB0B;ARu2C9B;AuBv+DA;EACE,uEfgwBsC;Ee/vBtC;ErB4HI,kBALI;EOvQN;AT2nEJ;AuBv+DE;EACE;EACA;EACA,uBf2nB0B;AR82C9B;AuBj+DE;EACE,0Ef6uBoC;ARsvCxC;AuBh+DE;EACE,yEf0uBoC;ARwvCxC;AuB/9DE;EACE,uEfuuBoC;AR0vCxC;AuB59DA;EACE,WfquBsC;EepuBtC,sEf8tBsC;Ee7tBtC,iBfilB4B;AR64C9B;AuB59DE;EACE;AvB89DJ;AuB39DE;EACE;EdvLA;ATqpEJ;AuB19DE;EACE;Ed5LA;ATypEJ;AuBz9DE;EAAoB,qEf8sBkB;AR8wCxC;AuB39DE;EAAoB,mEf8sBkB;ARgxCxC;A0B7qEA;EACE;EAEA;EACA;EACA;ExBqRI,eALI;EwB7QR,gBlB+lB4B;EkB9lB5B,gBlBsmB4B;EkBrmB5B,iClBy3BsC;EkBx3BtC;KAAA;UAAA;EACA,yClBk3BsC;EkBj3BtC;EACA;EACA,yClB+9BkC;EkB99BlC,0BlB+9BkC;EkB99BlC;EjBHE;EeHE,wEESJ;A1B4qEF;AwBjrEM;EEfN;IFgBQ;ExBorEN;AACF;A0B/qEE;EACE,qBlBs3BoC;EkBr3BpC;EAKE,kDlBi+B4B;AR4sClC;A0BzqEE;EAEE,sBlB6uB0B;EkB5uB1B;A1B0qEJ;A0BvqEE;EAEE,8ClBu1BoC;ARi1CxC;A0BnqEE;EACE;EACA;A1BqqEJ;A0BjqEA;EACE,oBlBsuB4B;EkBruB5B,uBlBquB4B;EkBpuB5B,oBlBquB4B;ENlgBxB,mBALI;EOvQN;AT8sEJ;A0BhqEA;EACE,mBlBkuB4B;EkBjuB5B,sBlBiuB4B;EkBhuB5B,kBlBiuB4B;ENtgBxB,kBALI;EOvQN;ATqtEJ;A0B7pEI;EACE;A1B+pEN;A2BvuEA;EACE;EACA,kBnBq6BwC;EmBp6BxC,mBnBq6BwC;EmBp6BxC,uBnBq6BwC;ARo0C1C;A2BvuEE;EACE;EACA;A3ByuEJ;A2BruEA;EACE,oBnB25BwC;EmB15BxC;EACA;A3BuuEF;A2BruEE;EACE;EACA;EACA;A3BuuEJ;A2BnuEA;EACE;EAEA;EACA,UnB04BwC;EmBz4BxC,WnBy4BwC;EmBx4BxC;EACA;EACA;KAAA;UAAA;EACA;EACA;EACA;EACA;EACA;EACA,uEnB24BwC;EmB14BxC;UAAA;A3BouEF;A2BjuEE;ElB3BE;AT+vEJ;A2BhuEE;EAEE,kBnBm4BsC;AR81C1C;A2B9tEE;EACE,uBnB03BsC;ARs2C1C;A2B7tEE;EACE,qBnBs1BoC;EmBr1BpC;EACA,kDnB8foB;ARiuDxB;A2B5tEE;EACE,yBnB5BM;EmB6BN,qBnB7BM;AR2vEV;A2B5tEI;EAII;A3B2tER;A2BvtEI;EAII;A3BstER;A2BjtEE;EACE,yBnBjDM;EmBkDN,qBnBlDM;EmBuDJ;A3B+sEN;A2B3sEE;EACE;EACA;EACA,YnBk2BuC;AR22C3C;A2BtsEI;EACE;EACA,YnBy1BqC;AR+2C3C;A2B1rEA;EACE,mBnBo1BgC;ARw2ClC;A2B1rEE;EACE;EAEA,UnB80B8B;EmB70B9B;EACA;EACA;ElBjHA;EeHE,iDGsHF;A3B2rEJ;AwB7yEM;EG0GJ;IHzGM;ExBgzEN;AACF;A2B9rEI;EACE;A3BgsEN;A2B7rEI;EACE,iCnB60B4B;EmBx0B1B;A3B2rER;A2BtrEE;EACE,oBnBwzB8B;EmBvzB9B;A3BwrEJ;A2BtrEI;EACE;EACA;A3BwrEN;A2BnrEA;EACE;EACA,kBnBsyBgC;AR+4ClC;A2BlrEA;EACE;EACA;EACA;A3BorEF;A2BhrEI;EACE;EACA;EACA,anBspBwB;AR4hD9B;A2B3qEI;EACE;A3B6qEN;A4Bh2EA;EACE;EACA;EACA;EACA;KAAA;UAAA;EACA;A5Bk2EF;A4Bh2EE;EACE;A5Bk2EJ;A4B91EI;EAA0B,kEpB8gCa;ARm1C3C;A4Bh2EI;EAA0B,kEpB6gCa;ARs1C3C;A4Bh2EE;EACE;A5Bk2EJ;A4B/1EE;EACE,WpB+/BuC;EoB9/BvC,YpB8/BuC;EoB7/BvC;EACA;UAAA;EH1BF,yBjBkCQ;EoBNN,SpB6/BuC;EC1gCvC;EeHE,oHImBF;EJnBE,4GImBF;A5Bg2EJ;AwB/2EM;EIMJ;IJLM;IAAA;ExBk3EN;AACF;A4Bn2EI;EHjCF,yBjB8hCyC;ARy2C3C;A4Bj2EE;EACE,WpBw+B8B;EoBv+B9B,cpBw+B8B;EoBv+B9B;EACA,epBu+B8B;EoBt+B9B,8CpBu+B8B;EoBt+B9B;EnB7BA;ATi4EJ;A4B/1EE;EACE,WpBo+BuC;EoBn+BvC,YpBm+BuC;EoBl+BvC;OAAA;EHpDF,yBjBkCQ;EoBoBN,SpBm+BuC;EC1gCvC;EeHE,iHI6CF;EJ7CE,4GI6CF;A5Bg2EJ;AwBz4EM;EIiCJ;IJhCM;IAAA;ExB44EN;AACF;A4Bn2EI;EH3DF,yBjB8hCyC;ARm4C3C;A4Bj2EE;EACE,WpB88B8B;EoB78B9B,cpB88B8B;EoB78B9B;EACA,epB68B8B;EoB58B9B,8CpB68B8B;EoB58B9B;EnBvDA;AT25EJ;A4B/1EE;EACE;A5Bi2EJ;A4B/1EI;EACE,iDpBg9BqC;ARi5C3C;A4B91EI;EACE,iDpB48BqC;ARo5C3C;A6Bv7EA;EACE;A7By7EF;A6Bv7EE;;;;;EAGE,6DrBwiCoC;EqBviCpC,iErBuiCoC;EqBtiCpC,iBrBuiCoC;ARo5CxC;A6Bx7EE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELRE,gEKSF;A7B07EJ;AwB/7EM;EKTJ;ILUM;ExBk8EN;AACF;A6B57EE;;;EAEE;A7B+7EJ;A6B77EI;EACE;A7Bi8EN;A6Bl8EI;;;EACE;A7Bi8EN;A6B97EI;EAEE,qBrB4gCkC;EqB3gClC,wBrB4gCkC;ARu7CxC;A6Bt8EI;;;;;EAEE,qBrB4gCkC;EqB3gClC,wBrB4gCkC;ARu7CxC;A6Bh8EI;;;EACE,qBrBugCkC;EqBtgClC,wBrBugCkC;AR67CxC;A6Bh8EE;EACE,qBrBigCoC;EqBhgCpC,wBrBigCoC;ARi8CxC;A6B37EI;EACE;EACA,8DrB2/BkC;ARw8CxC;A6Br8EI;;;;;;;EACE;EACA,8DrB2/BkC;ARw8CxC;A6Bj8EM;EACE;EACA;EACA;EACA,arBm/BgC;EqBl/BhC;EACA,yCrBg0BgC;ECh3BpC;AT0/EJ;A6Bh9EM;;;;;;;EACE;EACA;EACA;EACA,arBm/BgC;EqBl/BhC;EACA,yCrBg0BgC;ECh3BpC;AT0/EJ;A6Bn8EI;EACE;EACA,8DrB0+BkC;AR29CxC;A6Bh8EI;EACE;A7Bk8EN;A6B97EE;;;EAEE,crB1EO;AR2gFX;A6B/7EI;;;EACE,8CrB0yBkC;ARypDxC;A8B1hFA;EACE;EACA;EACA;EACA;EACA;A9B4hFF;A8B1hFE;;;;;EAGE;EACA;EACA;EACA;A9B8hFJ;A8B1hFE;;;;;EAGE;A9B8hFJ;A8BxhFE;EACE;EACA;A9B0hFJ;A8BxhFI;EACE;A9B0hFN;A8B/gFA;EACE;EACA;EACA;E5B8OI,eALI;E4BvOR,gBtByjB4B;EsBxjB5B,gBtBgkB4B;EsB/jB5B,iCtBm1BsC;EsBl1BtC;EACA;EACA,6CtB06BsC;EsBz6BtC;ErBtCE;ATwjFJ;A8BxgFA;;;;;;;EAIE;E5BwNI,kBALI;EOvQN;ATmkFJ;A8B1gFA;;;;;;;EAIE;E5B+MI,mBALI;EOvQN;AT8kFJ;A8B5gFA;;;EAEE;A9B+gFF;A8BlgFI;;;;;;;ErBjEA;EACA;AT4kFJ;A8BngFI;;;;;;;ErB1EA;EACA;ATslFJ;A8BhgFE;EACE;ErB1EA;EACA;AT6kFJ;A8BhgFE;;;ErB9EE;EACA;ATmlFJ;A+B3mFE;EACE;EACA;EACA,mBvBu0BoC;ENrkBlC,kBALI;E6B1PN,uCvBkjCqB;AR0jDzB;A+BzmFE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E7BqPE,mBALI;E6B7ON,WvBqiCqB;EuBpiCrB,yCvBoiCqB;EC/jCrB;ATsoFJ;A+BtmFI;;;;;EAEE;A/B2mFN;A+B1pFI;EAqDE,qDvBuhCmB;EuBphCjB,oCvB81BgC;EuB71BhC;EACA;EACA;EACA;A/BsmFR;A+BnmFM;EACE,qDvB4gCiB;EuBvgCf,iEvBugCe;AR0lDzB;A+BtqFI;EA+EI,oCvBu0BgC;EuBt0BhC;A/B0lFR;A+B1qFI;EAuFE,qDvBq/BmB;ARimDzB;A+BnlFQ;EAEE;EACA,uBvBq5B8B;EuBp5B9B;EACA;A/BolFV;A+BhlFM;EACE,qDvBw+BiB;EuBn+Bf,iEvBm+Be;AR2mDzB;A+BvrFI;EAkHI;A/BwkFR;A+B1rFI;EAyHE,qDvBm9BmB;ARinDzB;A+BlkFM;EACE,kDvBg9BiB;ARonDzB;A+BjkFM;EACE,iEvB48BiB;ARunDzB;A+BhkFM;EACE,uCvBw8BiB;AR0nDzB;A+B7jFI;EACE;A/B+jFN;A+BzsFI;;;;;;;;;EAoJM;A/BgkFV;A+BhsFE;EACE;EACA;EACA,mBvBu0BoC;ENrkBlC,kBALI;E6B1PN,yCvBkjCqB;AR+oDzB;A+B9rFE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E7BqPE,mBALI;E6B7ON,WvBqiCqB;EuBpiCrB,wCvBoiCqB;EC/jCrB;AT2tFJ;A+B3rFI;;;;;EAEE;A/BgsFN;A+B/uFI;EAqDE,uDvBuhCmB;EuBphCjB,oCvB81BgC;EuB71BhC;EACA;EACA;EACA;A/B2rFR;A+BxrFM;EACE,uDvB4gCiB;EuBvgCf,gEvBugCe;AR+qDzB;A+B3vFI;EA+EI,oCvBu0BgC;EuBt0BhC;A/B+qFR;A+B/vFI;EAuFE,uDvBq/BmB;ARsrDzB;A+BxqFQ;EAEE;EACA,uBvBq5B8B;EuBp5B9B;EACA;A/ByqFV;A+BrqFM;EACE,uDvBw+BiB;EuBn+Bf,gEvBm+Be;ARgsDzB;A+B5wFI;EAkHI;A/B6pFR;A+B/wFI;EAyHE,uDvBm9BmB;ARssDzB;A+BvpFM;EACE,oDvBg9BiB;ARysDzB;A+BtpFM;EACE,gEvB48BiB;AR4sDzB;A+BrpFM;EACE,yCvBw8BiB;AR+sDzB;A+BlpFI;EACE;A/BopFN;A+B9xFI;;;;;;;;;EAsJM;A/BmpFV;AgC3yFA;EAEE;EACA;EACA;E9BuRI,8BALI;E8BhRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E9BsQI,wCALI;E8B/PR;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;KAAA;UAAA;EACA;EvBjBE;EgBfF,wCOkCqB;ERtBjB,qIQwBJ;AhCwyFF;AwB5zFM;EQhBN;IRiBQ;ExB+zFN;AACF;AgC3yFE;EACE;EAEA;EACA;AhC4yFJ;AgCzyFE;EAEE;EACA;EACA;AhC0yFJ;AgCvyFE;EACE;EPrDF,8COsDuB;EACrB;EACA;EAKE;AhCqyFN;AgCjyFE;EACE;EACA;EAKE;AhC+xFN;AgC3xFE;EAKE;EACA;EAGA;AhCuxFJ;AgCpxFI;EAKI;AhCkxFR;AgC7wFE;EAKI;AhC2wFN;AgCvwFE;EAGE;EACA;EACA;EAEA;EACA;AhCswFJ;AgC1vFE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC42FF;AgC1wFE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC43FF;AgC1xFE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC44FF;AgC1yFE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC45FF;AgC1zFE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC46FF;AgC10FE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC47FF;AgC11FE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC48FF;AgC12FE;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjC49FF;AgCh2FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCm9FF;AgCh3FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCm+FF;AgCh4FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCm/FF;AgCh5FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCmgGF;AgCh6FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCmhGF;AgCh7FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCmiGF;AgCh8FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCmjGF;AgCh9FE;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AjCmkGF;AgCp9FA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,0BxB8QwC;ARusF1C;AgC38FE;EACE;AhC68FJ;AgC18FE;EACE;AhC48FJ;AgCj8FA;ECjJE;EACA;E/B8NI,iCALI;E+BvNR;AjCqlGF;AgCn8FA;ECrJE;EACA;E/B8NI,kCALI;E+BvNR;AjC2lGF;AkC9pGA;EVgBM,gCUfJ;AlCgqGF;AwB7oGM;EUpBN;IVqBQ;ExBgpGN;AACF;AkCnqGE;EACE;AlCqqGJ;AkC/pGE;EACE;AlCiqGJ;AkC7pGA;EACE;EACA;EVDI,6BUEJ;AlC+pGF;AwB7pGM;EULN;IVMQ;ExBgqGN;AACF;AkClqGE;EACE;EACA;EVNE,4BUOF;AlCoqGJ;AwBvqGM;EUAJ;IVCM;ExB0qGN;AACF;AmC/rGA;;;;;;;;;;;EAME;AnCssGF;AmCnsGA;EACE;AnCqsGF;AoC7qGI;EACE;EACA,oB5B6hBwB;E4B5hBxB,uB5B2hBwB;E4B1hBxB;EArCJ;EACA;EACA;EACA;ApCqtGF;AoC3pGI;EACE;ApC6pGN;AmC3sGA;EAEE;EACA;EACA;EACA;EACA;EjCuQI,mCALI;EiChQR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EjC0OI,6CALI;EiCnOR;EACA;EACA;EACA;EACA;EACA;E1BzCE;ATovGJ;AmCvsGE;EACE;EACA;EACA;AnCysGJ;AmCjrGI;EACE;AnCmrGN;AmCjrGM;EACE;EACA;AnCmrGR;AmC/qGI;EACE;AnCirGN;AmC/qGM;EACE;EACA;AnCirGR;AgB3tGI;EmB4BA;IACE;EnCksGJ;EmChsGI;IACE;IACA;EnCksGN;EmC9rGE;IACE;EnCgsGJ;EmC9rGI;IACE;IACA;EnCgsGN;AACF;AgB3uGI;EmB4BA;IACE;EnCktGJ;EmChtGI;IACE;IACA;EnCktGN;EmC9sGE;IACE;EnCgtGJ;EmC9sGI;IACE;IACA;EnCgtGN;AACF;AgB3vGI;EmB4BA;IACE;EnCkuGJ;EmChuGI;IACE;IACA;EnCkuGN;EmC9tGE;IACE;EnCguGJ;EmC9tGI;IACE;IACA;EnCguGN;AACF;AgB3wGI;EmB4BA;IACE;EnCkvGJ;EmChvGI;IACE;IACA;EnCkvGN;EmC9uGE;IACE;EnCgvGJ;EmC9uGI;IACE;IACA;EnCgvGN;AACF;AgB3xGI;EmB4BA;IACE;EnCkwGJ;EmChwGI;IACE;IACA;EnCkwGN;EmC9vGE;IACE;EnCgwGJ;EmC9vGI;IACE;IACA;EnCgwGN;AACF;AmCvvGE;EACE;EACA;EACA;EACA;AnCyvGJ;AoC70GI;EACE;EACA,oB5B6hBwB;E4B5hBxB,uB5B2hBwB;E4B1hBxB;EA9BJ;EACA;EACA;EACA;ApC82GF;AoC3zGI;EACE;ApC6zGN;AmC7vGE;EACE;EACA;EACA;EACA;EACA;AnC+vGJ;AoCj2GI;EACE;EACA,oB5B6hBwB;E4B5hBxB,uB5B2hBwB;E4B1hBxB;EAvBJ;EACA;EACA;EACA;ApC23GF;AoC/0GI;EACE;ApCi1GN;AmCvwGI;EACE;AnCywGN;AmCnwGE;EACE;EACA;EACA;EACA;EACA;AnCqwGJ;AoCx3GI;EACE;EACA,oB5B6hBwB;E4B5hBxB,uB5B2hBwB;E4B1hBxB;ApC03GN;AoC/2GM;EACE;ApCi3GR;AoC92GM;EACE;EACA,qB5B0gBsB;E4BzgBtB,uB5BwgBsB;E4BvgBtB;EAnCN;EACA;EACA;ApCo5GF;AoC92GI;EACE;ApCg3GN;AmCrxGI;EACE;AnCuxGN;AmChxGA;EACE;EACA;EACA;EACA;EACA;AnCkxGF;AmC5wGA;EACE;EACA;EACA;EACA;EACA,gB3Byb4B;E2Bxb5B;EACA;EACA;EACA;EACA;EACA;E1BtKE;ATq7GJ;AmC5wGE;EAEE;EV1LF,wDU4LuB;AnC4wGzB;AmCzwGE;EAEE;EACA;EVlMF,yDUmMuB;AnC0wGzB;AmCvwGE;EAEE;EACA;EACA;AnCwwGJ;AmClwGA;EACE;AnCowGF;AmChwGA;EACE;EACA;EACA;EjCmEI,mBALI;EiC5DR;EACA;AnCkwGF;AmC9vGA;EACE;EACA;EACA;AnCgwGF;AmC5vGA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AnC6vGF;AqCn/GA;;;EAEE;EACA;EACA;ArCs/GF;AqCp/GE;;;EACE;EACA;ArCw/GJ;AqCn/GE;;;;;;;;;;;;;;;;;;;;;;;EAME;ArCsgHJ;AqCjgHA;EACE;EACA;EACA;ArCmgHF;AqCjgHE;EACE;ArCmgHJ;AqC//GA;E5BhBI;ATkhHJ;AqC9/GE;;;EAEE;ArCigHJ;AqC7/GE;;;;;E5BVE;EACA;AT8gHJ;AqC3/GE;;;;;E5BNE;EACA;ATwgHJ;AqCh/GA;EACE;EACA;ArCk/GF;AqCh/GE;EAGE;ArCg/GJ;AqC7+GE;EACE;ArC++GJ;AqC3+GA;EACE;EACA;ArC6+GF;AqC1+GA;EACE;EACA;ArC4+GF;AqCx9GA;EACE;EACA;EACA;ArC09GF;AqCx9GE;;;EAEE;ArC29GJ;AqCx9GE;;;EAEE;ArC29GJ;AqCv9GE;;;E5B1FE;EACA;ATsjHJ;AqCx9GE;;;E5B7GE;EACA;AT0kHJ;AsClmHA;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;AtCgmHF;AsC7lHA;EACE;EACA;EpCsQI,6CALI;EoC/PR;EACA;EACA;EACA;EACA;EdfI,uGcgBJ;AtC+lHF;AwB3mHM;EcGN;IdFQ;ExB8mHN;AACF;AsClmHE;EAEE;AtCmmHJ;AsC/lHE;EACE;EACA,kD9BkhBoB;AR+kGxB;AsC7lHE;EAEE;EACA;EACA;AtC8lHJ;AsCtlHA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;AtCqlHF;AsCnlHE;EACE;EACA;E7B7CA;EACA;ATmoHJ;AsCplHI;EAGE;EACA;AtColHN;AsChlHE;;;EAEE;EACA;EACA;AtCmlHJ;AsChlHE;EAEE;E7BjEA;EACA;ATmpHJ;AsCxkHA;EAEE;EACA;EACA;AtCykHF;AsCtkHE;E7B5FE;ATqqHJ;AsCrkHE;;;EAEE;EbjHF,0DakHuB;AtCwkHzB;AsC/jHA;EAEE;EACA;EACA;EAGA;AtC8jHF;AsC5jHE;EACE;EACA;EACA;AtC8jHJ;AsC5jHI;EAEE;AtC6jHN;AsCzjHE;;;EAEE,gB9B0d0B;E8Bzd1B;EACA;AtC4jHJ;AsCljHE;;;EAEE;EACA;AtCqjHJ;AsChjHE;;;EAEE;EACA;EACA;AtCmjHJ;AsC7iHE;;;EACE;AtCijHJ;AsCviHE;EACE;AtCyiHJ;AsCviHE;EACE;AtCyiHJ;AuCtuHA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;AvCquHF;AuC/tHE;;;;;;;;;;;;;EACE;EACA;EACA;EACA;AvC6uHJ;AuCztHA;EACE;EACA;EACA;ErC4NI,iDALI;EqCrNR;EACA;EACA;AvC2tHF;AuCztHE;EAEE;AvC0tHJ;AuChtHA;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;AvC8sHF;AuC3sHI;EAEE;AvC4sHN;AuCxsHE;EACE;AvC0sHJ;AuCjsHA;EACE,mB/B8gCkC;E+B7gClC,sB/B6gCkC;E+B5gClC;AvCmsHF;AuCjsHE;;;;;EAGE;AvCqsHJ;AuCxrHA;EACE;EACA;EAGA;AvCwrHF;AuCprHA;EACE;ErCyII,mDALI;EqClIR;EACA;EACA;EACA;E9BxIE;EeHE,qDe6IJ;AvCsrHF;AwB/zHM;EeiIN;IfhIQ;ExBk0HN;AACF;AuCzrHE;EACE;AvC2rHJ;AuCxrHE;EACE;EACA;EACA;AvC0rHJ;AuCprHA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AvCsrHF;AuCnrHA;EACE;EACA;AvCqrHF;AgB/yHI;EuBsIA;IAEI;IACA;EvC2qHN;EuCzqHM;IACE;EvC2qHR;EuCzqHQ;IACE;EvC2qHV;EuCxqHQ;IACE;IACA;EvC0qHV;EuCtqHM;IACE;EvCwqHR;EuCrqHM;IACE;IACA;EvCuqHR;EuCpqHM;IACE;EvCsqHR;EuCnqHM;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,gBegOI;EvCmqHR;EuChqHQ;IACE;EvCkqHV;EuC/pHQ;IACE;IACA;IACA;IACA;EvCiqHV;AACF;AgB91HI;EuBsIA;IAEI;IACA;EvC0tHN;EuCxtHM;IACE;EvC0tHR;EuCxtHQ;IACE;EvC0tHV;EuCvtHQ;IACE;IACA;EvCytHV;EuCrtHM;IACE;EvCutHR;EuCptHM;IACE;IACA;EvCstHR;EuCntHM;IACE;EvCqtHR;EuCltHM;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,gBegOI;EvCktHR;EuC/sHQ;IACE;EvCitHV;EuC9sHQ;IACE;IACA;IACA;IACA;EvCgtHV;AACF;AgB74HI;EuBsIA;IAEI;IACA;EvCywHN;EuCvwHM;IACE;EvCywHR;EuCvwHQ;IACE;EvCywHV;EuCtwHQ;IACE;IACA;EvCwwHV;EuCpwHM;IACE;EvCswHR;EuCnwHM;IACE;IACA;EvCqwHR;EuClwHM;IACE;EvCowHR;EuCjwHM;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,gBegOI;EvCiwHR;EuC9vHQ;IACE;EvCgwHV;EuC7vHQ;IACE;IACA;IACA;IACA;EvC+vHV;AACF;AgB57HI;EuBsIA;IAEI;IACA;EvCwzHN;EuCtzHM;IACE;EvCwzHR;EuCtzHQ;IACE;EvCwzHV;EuCrzHQ;IACE;IACA;EvCuzHV;EuCnzHM;IACE;EvCqzHR;EuClzHM;IACE;IACA;EvCozHR;EuCjzHM;IACE;EvCmzHR;EuChzHM;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,gBegOI;EvCgzHR;EuC7yHQ;IACE;EvC+yHV;EuC5yHQ;IACE;IACA;IACA;IACA;EvC8yHV;AACF;AgB3+HI;EuBsIA;IAEI;IACA;EvCu2HN;EuCr2HM;IACE;EvCu2HR;EuCr2HQ;IACE;EvCu2HV;EuCp2HQ;IACE;IACA;EvCs2HV;EuCl2HM;IACE;EvCo2HR;EuCj2HM;IACE;IACA;EvCm2HR;EuCh2HM;IACE;EvCk2HR;EuC/1HM;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,gBegOI;EvC+1HR;EuC51HQ;IACE;EvC81HV;EuC31HQ;IACE;IACA;IACA;IACA;EvC61HV;AACF;AuCp5HI;EAEI;EACA;AvCq5HR;AuCn5HQ;EACE;AvCq5HV;AuCn5HU;EACE;AvCq5HZ;AuCl5HU;EACE;EACA;AvCo5HZ;AuCh5HQ;EACE;AvCk5HV;AuC/4HQ;EACE;EACA;AvCi5HV;AuC94HQ;EACE;AvCg5HV;AuC74HQ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Ef9NJ,gBegOI;AvC64HV;AuC14HU;EACE;AvC44HZ;AuCz4HU;EACE;EACA;EACA;EACA;AvC24HZ;AuC13HA;;;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AvC43HF;AuCt3HI;EACE;AvCw3HN;AwCjpIA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E/BjBE;ATkqIJ;AwC7oIE;EACE;EACA;AxC+oIJ;AwC5oIE;EACE;EACA;AxC8oIJ;AwC5oII;EACE;E/BtBF;EACA;ATqqIJ;AwC5oII;EACE;E/BbF;EACA;AT4pIJ;AwCzoIE;;;EAEE;AxC4oIJ;AwCxoIA;EAGE;EACA;EACA;AxCwoIF;AwCroIA;EACE;EACA;AxCuoIF;AwCpoIA;EACE;EACA;EACA;AxCsoIF;AwCnoIA;EACE;AxCqoIF;AwC7nIE;EACE;AxC+nIJ;AwCvnIA;EACE;EACA;EACA;EACA;EACA;AxCynIF;AwCvnIE;E/B7FE;ATutIJ;AwCrnIA;EACE;EACA;EACA;EACA;AxCunIF;AwCrnIE;E/BxGE;ATguIJ;AwC9mIA;EACE;EACA;EACA;EACA;AxCgnIF;AwC9mIE;EACE;EACA;AxCgnIJ;AwC5mIA;EACE;EACA;AxC8mIF;AwC1mIA;EACE;EACA;EACA;EACA;EACA;EACA;E/B1IE;ATuvIJ;AwCzmIA;;;;;EAGE;AxC6mIF;AwC1mIA;;;E/B3II;EACA;AT0vIJ;AwC3mIA;;;E/BlII;EACA;ATkvIJ;AwCpmIE;EACE;AxCsmIJ;AgBjuII;EwBuHJ;IAQI;IACA;ExCsmIF;EwCnmIE;IAEE;IACA;ExComIJ;EwClmII;IACE;IACA;ExComIN;EwC/lIM;I/B3KJ;IACA;ET6wIF;EwChmIQ;;;IAGE;ExCkmIV;EwChmIQ;;;IAGE;ExCkmIV;EwC9lIM;I/B5KJ;IACA;ET6wIF;EwC/lIQ;;;IAGE;ExCimIV;EwC/lIQ;;;IAGE;ExCimIV;AACF;AyCr0IA;EAEE;EACA;EvCuRI,kCALI;EuChRR;EACA;EACA;EAGA;EACA;EvC+QI,0CALI;EuCxQR;EACA;EACA;EACA;EACA;EACA;EhCJE;ATy0IJ;AyCh0IE;EACE;AzCk0IJ;AyC7zIA;EACE;EACA;AzC+zIF;A0C/1IA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EjCHE;ATk2IJ;A0C11IA;EAEE;A1C21IF;A0Cv1IA;EACE,gBlC6kB4B;EkC5kB5B;A1Cy1IF;A0Cj1IA;EACE,mBlCs+C8B;AR62FhC;A0Ch1IE;EACE;EACA;EACA;EACA;EACA;A1Ck1IJ;A0C10IE;EACE;EACA;EACA;EACA;A1C40IJ;A0Ch1IE;EACE;EACA;EACA;EACA;A1Ck1IJ;A0Ct1IE;EACE;EACA;EACA;EACA;A1Cw1IJ;A0C51IE;EACE;EACA;EACA;EACA;A1C81IJ;A0Cl2IE;EACE;EACA;EACA;EACA;A1Co2IJ;A0Cx2IE;EACE;EACA;EACA;EACA;A1C02IJ;A0C92IE;EACE;EACA;EACA;EACA;A1Cg3IJ;A0Cp3IE;EACE;EACA;EACA;EACA;A1Cs3IJ;A2Cl7IE;EACE;IAAK,2BnCyhD2B;ER45FlC;AACF;A2Cj7IA;;;EAGE;EzCkRI,sCALI;EyC3QR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EzCsQI,6CALI;EyC/PR;ElCRE;AT07IJ;A2C76IA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EnBxBI,mDmByBJ;A3C+6IF;AwBp8IM;EmBYN;InBXQ;ExBu8IN;AACF;A2Cj7IA;ElBAE;EkBEA;A3Cm7IF;A2Ch7IA;EACE;A3Ck7IF;A2C/6IA;EACE;A3Ci7IF;A2C76IE;EACE;A3C+6IJ;A2C56IM;EAJJ;IAKM;E3C+6IN;AACF;A4C3+IA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EnCXE;ATo/IJ;A4Cr+IA;EACE;EACA;A5Cu+IF;A4Cr+IE;EAEE;EACA;A5Cs+IJ;A4C79IA;EACE;EACA;EACA;A5C+9IF;A4C59IE;EAEE;EACA;EACA;EACA;A5C69IJ;A4C19IE;EACE;EACA;A5C49IJ;A4Cp9IA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;A5Cs9IF;A4Cp9IE;EnCvDE;EACA;AT8gJJ;A4Cp9IE;EnC7CE;EACA;ATogJJ;A4Cp9IE;EAEE;EACA;EACA;A5Cq9IJ;A4Cj9IE;EACE;EACA;EACA;EACA;A5Cm9IJ;A4C/8IE;EACE;A5Ci9IJ;A4C/8II;EACE;EACA;A5Ci9IN;A4Cp8II;EACE;A5Cs8IN;A4Cn8IQ;EnCvDJ;EAZA;AT0gJJ;A4Cl8IQ;EnCxEJ;EAYA;ATkgJJ;A4Cj8IQ;EACE;A5Cm8IV;A4Ch8IQ;EACE;EACA;A5Ck8IV;A4Ch8IU;EACE;EACA;A5Ck8IZ;AgBxhJI;E4B8DA;IACE;E5C69IJ;E4C19IM;InCvDJ;IAZA;ETiiJF;E4Cz9IM;InCxEJ;IAYA;ETyhJF;E4Cx9IM;IACE;E5C09IR;E4Cv9IM;IACE;IACA;E5Cy9IR;E4Cv9IQ;IACE;IACA;E5Cy9IV;AACF;AgBhjJI;E4B8DA;IACE;E5Cq/IJ;E4Cl/IM;InCvDJ;IAZA;ETyjJF;E4Cj/IM;InCxEJ;IAYA;ETijJF;E4Ch/IM;IACE;E5Ck/IR;E4C/+IM;IACE;IACA;E5Ci/IR;E4C/+IQ;IACE;IACA;E5Ci/IV;AACF;AgBxkJI;E4B8DA;IACE;E5C6gJJ;E4C1gJM;InCvDJ;IAZA;ETilJF;E4CzgJM;InCxEJ;IAYA;ETykJF;E4CxgJM;IACE;E5C0gJR;E4CvgJM;IACE;IACA;E5CygJR;E4CvgJQ;IACE;IACA;E5CygJV;AACF;AgBhmJI;E4B8DA;IACE;E5CqiJJ;E4CliJM;InCvDJ;IAZA;ETymJF;E4CjiJM;InCxEJ;IAYA;ETimJF;E4ChiJM;IACE;E5CkiJR;E4C/hJM;IACE;IACA;E5CiiJR;E4C/hJQ;IACE;IACA;E5CiiJV;AACF;AgBxnJI;E4B8DA;IACE;E5C6jJJ;E4C1jJM;InCvDJ;IAZA;ETioJF;E4CzjJM;InCxEJ;IAYA;ETynJF;E4CxjJM;IACE;E5C0jJR;E4CvjJM;IACE;IACA;E5CyjJR;E4CvjJQ;IACE;IACA;E5CyjJV;AACF;A4C5iJA;EnChJI;AT+rJJ;A4C5iJE;EACE;A5C8iJJ;A4C5iJI;EACE;A5C8iJN;A4CjiJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CmiJJ;A4C7iJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5C+iJJ;A4CzjJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5C2jJJ;A4CrkJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CukJJ;A4CjlJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CmlJJ;A4C7lJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5C+lJJ;A4CzmJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5C2mJJ;A4CrnJE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CunJJ;A6CnzJA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA,UrCqpD2B;EqCppD3B,WrCopD2B;EqCnpD3B;EACA;EACA;EACA;EpCJE;EoCMF;A7CkzJF;A6C/yJE;EACE;EACA;EACA;A7CizJJ;A6C9yJE;EACE;EACA;EACA;A7CgzJJ;A6C7yJE;EAEE;EACA;KAAA;UAAA;EACA;A7C8yJJ;A6CtyJA;EAHE;A7C4yJF;A6CnyJI;EATF;A7C+yJF;A8Cv1JA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;A9Co1JF;A8C70JA;EACE;EACA;EACA;EAEA;A9C80JF;A8C30JE;EtB5CI,mCsB6CF;EACA,8BtCk8CgC;AR24GpC;AwBv3JM;EsBwCJ;ItBvCM;ExB03JN;AACF;A8Ch1JE;EACE,etCg8CgC;ARk5GpC;A8C90JE;EACE,sBtC67CgC;ARm5GpC;A8C50JA;EACE;A9C80JF;A8C50JE;EACE;EACA;A9C80JJ;A8C30JE;EACE;A9C60JJ;A8Cz0JA;EACE;EACA;EACA;A9C20JF;A8Cv0JA;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;ErCrFE;EqCyFF;A9Cs0JF;A8Cl0JA;EAEE;EACA;EACA;EClHA;EACA;EACA;EACA,wCDkH0B;ECjH1B;EACA;EACA,6CD+G4D;A9Cu0J9D;A+Cn7JE;EAAS;A/Cs7JX;A+Cr7JE;EAAS,yCD2GiF;A9C60J5F;A8Cx0JA;EACE;EACA;EACA;EACA;EACA;ErCrGE;EACA;ATg7JJ;A8Cz0JE;EACE;EACA;A9C20JJ;A8Ct0JA;EACE;EACA;A9Cw0JF;A8Cn0JA;EACE;EAGA;EACA;A9Cm0JF;A8C/zJA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ErCzHE;EACA;AT27JJ;A8C7zJE;EACE;A9C+zJJ;AgB16JI;E8BiHF;IACE;IACA;E9C4zJF;E8CxzJA;IACE;IACA;IACA;E9C0zJF;E8CvzJA;IACE;E9CyzJF;AACF;AgBx7JI;E8BmIF;;;IAEE;E9CyzJF;AACF;AgB/7JI;E8B0IF;IACE;E9CwzJF;AACF;A8C/yJI;EACE;EACA;EACA;EACA;A9CizJN;A8C/yJM;EACE;EACA;ErCzMJ;AT2/JJ;A8C9yJM;;;ErC7MF;ATggKJ;A8C9yJM;EACE;A9CgzJR;AgB18JI;E8BwIA;IACE;IACA;IACA;IACA;E9Cq0JJ;E8Cn0JI;IACE;IACA;IrCzMJ;ET+gKF;E8Cl0JI;;;IrC7MF;ETohKF;E8Cl0JI;IACE;E9Co0JN;AACF;AgB/9JI;E8BwIA;IACE;IACA;IACA;IACA;E9C01JJ;E8Cx1JI;IACE;IACA;IrCzMJ;EToiKF;E8Cv1JI;;;IrC7MF;ETyiKF;E8Cv1JI;IACE;E9Cy1JN;AACF;AgBp/JI;E8BwIA;IACE;IACA;IACA;IACA;E9C+2JJ;E8C72JI;IACE;IACA;IrCzMJ;ETyjKF;E8C52JI;;;IrC7MF;ET8jKF;E8C52JI;IACE;E9C82JN;AACF;AgBzgKI;E8BwIA;IACE;IACA;IACA;IACA;E9Co4JJ;E8Cl4JI;IACE;IACA;IrCzMJ;ET8kKF;E8Cj4JI;;;IrC7MF;ETmlKF;E8Cj4JI;IACE;E9Cm4JN;AACF;AgB9hKI;E8BwIA;IACE;IACA;IACA;IACA;E9Cy5JJ;E8Cv5JI;IACE;IACA;IrCzMJ;ETmmKF;E8Ct5JI;;;IrC7MF;ETwmKF;E8Ct5JI;IACE;E9Cw5JN;AACF;AK9nKA;EAEE;EACA;EACA;EACA;EACA;EHwRI,sCALI;EGjRR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E2ClBA,4CxC+lB4B;EwC7lB5B;EACA,gBxCwmB4B;EwCvmB5B,gBxC+mB4B;EwC9mB5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E9CgRI,4CALI;EGhQR;EACA;ALsoKF;AKpoKE;EAAS;ALuoKX;AKroKE;EACE;EACA;EACA;ALuoKJ;AKroKI;EACE;EACA;EACA;EACA;ALuoKN;AKloKA;EACE;ALooKF;AKloKE;EACE;EACA;EACA;ALooKJ;AK/nKA;EACE;EACA;EACA;ALioKF;AK/nKE;EACE;EACA;EACA;ALioKJ;AK3nKA;EACE;AL6nKF;AK3nKE;EACE;EACA;EACA;AL6nKJ;AKxnKA;EACE;EACA;EACA;AL0nKF;AKxnKE;EACE;EACA;EACA;AL0nKJ;AKpmKA;EACE;EACA;EACA;EACA;EACA;EIjGE;ATwsKJ;AM3tKA;EAEE;EACA;EJ4RI,sCALI;EIrRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EJmRI,yCALI;EI5QR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E0CzBA,4CxC+lB4B;EwC7lB5B;EACA,gBxCwmB4B;EwCvmB5B,gBxC+mB4B;EwC9mB5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E9CgRI,4CALI;EI1PR;EACA;EACA;EACA;EGhBE;ATqvKJ;AMjuKE;EACE;EACA;EACA;ANmuKJ;AMjuKI;EAEE;EACA;EACA;EACA;EACA;EACA;ANkuKN;AM5tKE;EACE;AN8tKJ;AM5tKI;EAEE;AN6tKN;AM1tKI;EACE;EACA;AN4tKN;AMztKI;EACE;EACA;AN2tKN;AMptKE;EACE;EACA;EACA;ANstKJ;AMptKI;EAEE;ANqtKN;AMltKI;EACE;EACA;ANotKN;AMjtKI;EACE;EACA;ANmtKN;AM3sKE;EACE;AN6sKJ;AM3sKI;EAEE;AN4sKN;AMzsKI;EACE;EACA;AN2sKN;AMxsKI;EACE;EACA;AN0sKN;AMrsKE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ANusKJ;AMjsKE;EACE;EACA;EACA;ANmsKJ;AMjsKI;EAEE;ANksKN;AM/rKI;EACE;EACA;ANisKN;AM9rKI;EACE;EACA;ANgsKN;AMzqKA;EACE;EACA;EJ2GI,mDALI;EIpGR;EACA;EACA;EG5JE;EACA;ATw0KJ;AM1qKE;EACE;AN4qKJ;AMxqKA;EACE;EACA;AN0qKF;AiDx2KA;;;EAEE;EACA;EACA;EACA;EAEA;EACA;AjD02KF;AiDt2KA;EACE;IAAK;EjDy2KL;AACF;AiDt2KA;EAEE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;AjDq2KF;AiDl2KA;EAEE;EACA;EACA;AjDm2KF;AiD11KA;EACE;IACE;EjD41KF;EiD11KA;IACE;IACA;EjD41KF;AACF;AiDx1KA;EAEE;EACA;EACA;EACA;EACA;EAGA;EACA;AjDu1KF;AiDp1KA;EACE;EACA;AjDs1KF;AiDl1KE;EACE;;;IAEE;EjDq1KJ;AACF;AkDv6KA;EACE;EACA;EACA;EACA;EACA;EACA,Y1CgzCkC;ARynIpC;AkDv6KE;EACE;EACA;AlDy6KJ;AkDp6KA;EACE;AlDs6KF;AkDn6KA;EACE;AlDq6KF;AkDl6KA;EACE;AlDo6KF;AkD/5KE;EACE;AlDi6KJ;AkD75KA;EACE;IACE,Y1CmxCgC;ER4oIlC;AACF;AkD55KA;EACE;UAAA;EACA;UAAA;EACA;AlD85KF;AkD35KA;EACE;IACE;YAAA;ElD65KF;AACF;AmD58KE;EACE;EACA;EACA;AnD88KJ;AoDj9KE;EACE;EACA;ApDm9KJ;AoDr9KE;EACE;EACA;ApDu9KJ;AoDz9KE;EACE;EACA;ApD29KJ;AoD79KE;EACE;EACA;ApD+9KJ;AoDj+KE;EACE;EACA;ApDm+KJ;AoDr+KE;EACE;EACA;ApDu+KJ;AoDz+KE;EACE;EACA;ApD2+KJ;AoD7+KE;EACE;EACA;ApD++KJ;AqDj/KE;EACE;EACA;ArDm/KJ;AqDh/KM;EAGE;EACA;ArDg/KR;AqDz/KE;EACE;EACA;ArD2/KJ;AqDx/KM;EAGE;EACA;ArDw/KR;AqDjgLE;EACE;EACA;ArDmgLJ;AqDhgLM;EAGE;EACA;ArDggLR;AqDzgLE;EACE;EACA;ArD2gLJ;AqDxgLM;EAGE;EACA;ArDwgLR;AqDjhLE;EACE;EACA;ArDmhLJ;AqDhhLM;EAGE;EACA;ArDghLR;AqDzhLE;EACE;EACA;ArD2hLJ;AqDxhLM;EAGE;EACA;ArDwhLR;AqDjiLE;EACE;EACA;ArDmiLJ;AqDhiLM;EAGE;EACA;ArDgiLR;AqDziLE;EACE;EACA;ArD2iLJ;AqDxiLM;EAGE;EACA;ArDwiLR;AqDjiLA;EACE;EACA;ArDmiLF;AqDhiLI;EAEE;EACA;ArDiiLN;AsD3jLA;EACE;EAEA;AtD4jLF;AuD/jLA;EACE;EACA,a/C6c4B;E+C5c5B;EACA;EACA,6B/C2c4B;E+C1c5B;AvDikLF;AuD/jLE;EACE;EACA,U/Cuc0B;E+Ctc1B,W/Csc0B;E+Crc1B;E/BIE,sC+BHF;AvDikLJ;AwB1jLM;E+BZJ;I/BaM;ExB6jLN;AACF;AuD/jLI;EACE;AvDikLN;AwDplLA;EACE;EACA;AxDslLF;AwDplLE;EACE;EACA;EACA;AxDslLJ;AwDnlLE;EACE;EACA;EACA;EACA;EACA;AxDqlLJ;AwDhlLE;EACE;AxDklLJ;AwDnlLE;EACE;AxDqlLJ;AwDtlLE;EACE;AxDwlLJ;AwDzlLE;EACE;AxD2lLJ;AyDhnLA;EACE;EACA;EACA;EACA;EACA,ajDumCkC;AR2gJpC;AyD/mLA;EACE;EACA;EACA;EACA;EACA,ajD+lCkC;ARkhJpC;AyDzmLI;EACE;EACA;EACA,ajDmlC8B;ARwhJpC;AyDxmLI;EACE;EACA;EACA,ajD6kC8B;AR6hJpC;AgB3kLI;EyCxCA;IACE;IACA;IACA,ajDmlC8B;ERmiJlC;EyDnnLE;IACE;IACA;IACA,ajD6kC8B;ERwiJlC;AACF;AgBvlLI;EyCxCA;IACE;IACA;IACA,ajDmlC8B;ER+iJlC;EyD/nLE;IACE;IACA;IACA,ajD6kC8B;ERojJlC;AACF;AgBnmLI;EyCxCA;IACE;IACA;IACA,ajDmlC8B;ER2jJlC;EyD3oLE;IACE;IACA;IACA,ajD6kC8B;ERgkJlC;AACF;AgB/mLI;EyCxCA;IACE;IACA;IACA,ajDmlC8B;ERukJlC;EyDvpLE;IACE;IACA;IACA,ajD6kC8B;ER4kJlC;AACF;AgB3nLI;EyCxCA;IACE;IACA;IACA,ajDmlC8B;ERmlJlC;EyDnqLE;IACE;IACA;IACA,ajD6kC8B;ERwlJlC;AACF;A0DrsLA;EACE;EACA;EACA;EACA;A1DusLF;A0DpsLA;EACE;EACA;EACA;EACA;A1DssLF;A2D9sLA;;;ECIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5D+sLF;A4D5sLE;;;EACE;A5DgtLJ;A6D9tLE;EACE;EACA;EACA;EACA;EACA;EACA,UrDgcsC;EqD/btC;A7DguLJ;A8DxuLA;ECAE;EACA;EACA;A/D2uLF;AgEjvLA;EACE;EACA;EACA,mCxDisB4B;EwDhsB5B;EACA;EACA,axD2rB4B;ARwjK9B;AOvrLQ;EAOI;APmrLZ;AO1rLQ;EAOI;APsrLZ;AO7rLQ;EAOI;APyrLZ;AOhsLQ;EAOI;AP4rLZ;AOnsLQ;EAOI;AP+rLZ;AOtsLQ;EAOI;APksLZ;AOzsLQ;EAOI;APqsLZ;AO5sLQ;EAOI;APwsLZ;AO/sLQ;EAOI;AP2sLZ;AOltLQ;EAOI;KAAA;AP8sLZ;AOrtLQ;EAOI;KAAA;APitLZ;AOxtLQ;EAOI;KAAA;APotLZ;AO3tLQ;EAOI;KAAA;APutLZ;AO9tLQ;EAOI;KAAA;AP0tLZ;AOjuLQ;EAOI;AP6tLZ;AOpuLQ;EAOI;APguLZ;AOvuLQ;EAOI;APmuLZ;AO1uLQ;EAOI;APsuLZ;AO7uLQ;EAOI;APyuLZ;AOhvLQ;EAOI;AP4uLZ;AOnvLQ;EAOI;AP+uLZ;AOtvLQ;EAOI;APkvLZ;AOzvLQ;EAOI;APqvLZ;AO5vLQ;EAOI;APwvLZ;AO/vLQ;EAOI;AP2vLZ;AOlwLQ;EAOI;AP8vLZ;AOrwLQ;EAOI;APiwLZ;AOxwLQ;EAOI;APowLZ;AO3wLQ;EAOI;APuwLZ;AO9wLQ;EAOI;AP0wLZ;AOjxLQ;EAOI;AP6wLZ;AOpxLQ;EAOI;APgxLZ;AOvxLQ;EAOI;APmxLZ;AO1xLQ;EAOI;APsxLZ;AO7xLQ;EAOI;APyxLZ;AOhyLQ;EAOI;AP4xLZ;AOnyLQ;EAOI;AP+xLZ;AOtyLQ;EAOI;APkyLZ;AOzyLQ;EAOI;APqyLZ;AO5yLQ;EAOI;APwyLZ;AO/yLQ;EAOI;AP2yLZ;AOlzLQ;EAOI;AP8yLZ;AOrzLQ;EAOI;APizLZ;AOxzLQ;EAOI;APozLZ;AO3zLQ;EAOI;APuzLZ;AO9zLQ;EAOI;AP0zLZ;AO30LQ;EACE;AP60LV;AO90LQ;EACE;APg1LV;AOj1LQ;EACE;APm1LV;AOp1LQ;EACE;APs1LV;AOv1LQ;EACE;APy1LV;AO11LQ;EACE;AP41LV;AO71LQ;EACE;AP+1LV;AOh2LQ;EACE;APk2LV;AOz1LQ;EAOI;APq1LZ;AO51LQ;EAOI;APw1LZ;AO/1LQ;EAOI;AP21LZ;AOl2LQ;EAOI;AP81LZ;AOr2LQ;EAOI;APi2LZ;AOx2LQ;EAOI;APo2LZ;AO32LQ;EAOI;APu2LZ;AO92LQ;EAOI;AP02LZ;AOj3LQ;EAOI;AP62LZ;AOp3LQ;EAOI;APg3LZ;AOv3LQ;EAOI;APm3LZ;AO13LQ;EAOI;APs3LZ;AO73LQ;EAOI;APy3LZ;AOh4LQ;EAOI;AP43LZ;AOn4LQ;EAOI;AP+3LZ;AOt4LQ;EAOI;APk4LZ;AOz4LQ;EAOI;APq4LZ;AO54LQ;EAOI;APw4LZ;AO/4LQ;EAOI;AP24LZ;AOl5LQ;EAOI;AP84LZ;AOr5LQ;EAOI;APi5LZ;AOx5LQ;EAOI;APo5LZ;AO35LQ;EAOI;APu5LZ;AO95LQ;EAOI;AP05LZ;AOj6LQ;EAOI;AP65LZ;AOp6LQ;EAOI;APg6LZ;AOv6LQ;EAOI;APm6LZ;AO16LQ;EAOI;APs6LZ;AO76LQ;EAOI;APy6LZ;AOh7LQ;EAOI;AP46LZ;AOn7LQ;EAIQ;EAGJ;APg7LZ;AOv7LQ;EAIQ;EAGJ;APo7LZ;AO37LQ;EAIQ;EAGJ;APw7LZ;AO/7LQ;EAIQ;EAGJ;AP47LZ;AOn8LQ;EAIQ;EAGJ;APg8LZ;AOv8LQ;EAIQ;EAGJ;APo8LZ;AO38LQ;EAIQ;EAGJ;APw8LZ;AO/8LQ;EAIQ;EAGJ;AP48LZ;AOn9LQ;EAIQ;EAGJ;APg9LZ;AOv9LQ;EAIQ;EAGJ;APo9LZ;AO39LQ;EAOI;APu9LZ;AO99LQ;EAOI;AP09LZ;AOj+LQ;EAOI;AP69LZ;AOp+LQ;EAOI;APg+LZ;AOv+LQ;EAOI;APm+LZ;AO1+LQ;EAOI;APs+LZ;AO7+LQ;EAOI;APy+LZ;AOh/LQ;EAOI;AP4+LZ;AOn/LQ;EAOI;AP++LZ;AOt/LQ;EAOI;APk/LZ;AOz/LQ;EAOI;APq/LZ;AO5/LQ;EAOI;APw/LZ;AO//LQ;EAOI;AP2/LZ;AO5gMQ;EACE;AP8gMV;AO/gMQ;EACE;APihMV;AOlhMQ;EACE;APohMV;AOrhMQ;EACE;APuhMV;AOxhMQ;EACE;AP0hMV;AOjhMQ;EAOI;AP6gMZ;AOphMQ;EAOI;APghMZ;AOvhMQ;EAOI;APmhMZ;AO1hMQ;EAOI;APshMZ;AO7hMQ;EAOI;APyhMZ;AOhiMQ;EAOI;AP4hMZ;AOniMQ;EAOI;AP+hMZ;AOtiMQ;EAOI;APkiMZ;AOziMQ;EAOI;APqiMZ;AO5iMQ;EAOI;APwiMZ;AO/iMQ;EAOI;AP2iMZ;AOljMQ;EAOI;AP8iMZ;AOrjMQ;EAOI;APijMZ;AOxjMQ;EAOI;APojMZ;AO3jMQ;EAOI;APujMZ;AO9jMQ;EAOI;AP0jMZ;AOjkMQ;EAOI;AP6jMZ;AOpkMQ;EAOI;APgkMZ;AOvkMQ;EAOI;APmkMZ;AO1kMQ;EAOI;APskMZ;AO7kMQ;EAOI;APykMZ;AOhlMQ;EAOI;AP4kMZ;AOnlMQ;EAOI;AP+kMZ;AOtlMQ;EAOI;APklMZ;AOzlMQ;EAOI;APqlMZ;AO5lMQ;EAOI;APwlMZ;AO/lMQ;EAOI;AP2lMZ;AOlmMQ;EAOI;AP8lMZ;AOrmMQ;EAOI;APimMZ;AOxmMQ;EAOI;APomMZ;AO3mMQ;EAOI;APumMZ;AO9mMQ;EAOI;AP0mMZ;AOjnMQ;EAOI;AP6mMZ;AOpnMQ;EAOI;APgnMZ;AOvnMQ;EAOI;APmnMZ;AO1nMQ;EAOI;APsnMZ;AO7nMQ;EAOI;APynMZ;AOhoMQ;EAOI;AP4nMZ;AOnoMQ;EAOI;AP+nMZ;AOtoMQ;EAOI;APkoMZ;AOzoMQ;EAOI;APqoMZ;AO5oMQ;EAOI;APwoMZ;AO/oMQ;EAOI;AP2oMZ;AOlpMQ;EAOI;AP8oMZ;AOrpMQ;EAOI;APipMZ;AOxpMQ;EAOI;APopMZ;AO3pMQ;EAOI;APupMZ;AO9pMQ;EAOI;AP0pMZ;AOjqMQ;EAOI;AP6pMZ;AOpqMQ;EAOI;APgqMZ;AOvqMQ;EAOI;APmqMZ;AO1qMQ;EAOI;APsqMZ;AO7qMQ;EAOI;APyqMZ;AOhrMQ;EAOI;AP4qMZ;AOnrMQ;EAOI;AP+qMZ;AOtrMQ;EAOI;APkrMZ;AOzrMQ;EAOI;APqrMZ;AO5rMQ;EAOI;APwrMZ;AO/rMQ;EAOI;AP2rMZ;AOlsMQ;EAOI;AP8rMZ;AOrsMQ;EAOI;APisMZ;AOxsMQ;EAOI;APosMZ;AO3sMQ;EAOI;APusMZ;AO9sMQ;EAOI;AP0sMZ;AOjtMQ;EAOI;AP6sMZ;AOptMQ;EAOI;APgtMZ;AOvtMQ;EAOI;EAAA;APotMZ;AO3tMQ;EAOI;EAAA;APwtMZ;AO/tMQ;EAOI;EAAA;AP4tMZ;AOnuMQ;EAOI;EAAA;APguMZ;AOvuMQ;EAOI;EAAA;APouMZ;AO3uMQ;EAOI;EAAA;APwuMZ;AO/uMQ;EAOI;EAAA;AP4uMZ;AOnvMQ;EAOI;EAAA;APgvMZ;AOvvMQ;EAOI;EAAA;APovMZ;AO3vMQ;EAOI;EAAA;APwvMZ;AO/vMQ;EAOI;EAAA;AP4vMZ;AOnwMQ;EAOI;EAAA;APgwMZ;AOvwMQ;EAOI;EAAA;APowMZ;AO3wMQ;EAOI;EAAA;APwwMZ;AO/wMQ;EAOI;AP2wMZ;AOlxMQ;EAOI;AP8wMZ;AOrxMQ;EAOI;APixMZ;AOxxMQ;EAOI;APoxMZ;AO3xMQ;EAOI;APuxMZ;AO9xMQ;EAOI;AP0xMZ;AOjyMQ;EAOI;AP6xMZ;AOpyMQ;EAOI;APgyMZ;AOvyMQ;EAOI;APmyMZ;AO1yMQ;EAOI;APsyMZ;AO7yMQ;EAOI;APyyMZ;AOhzMQ;EAOI;AP4yMZ;AOnzMQ;EAOI;AP+yMZ;AOtzMQ;EAOI;APkzMZ;AOzzMQ;EAOI;APqzMZ;AO5zMQ;EAOI;APwzMZ;AO/zMQ;EAOI;AP2zMZ;AOl0MQ;EAOI;AP8zMZ;AOr0MQ;EAOI;APi0MZ;AOx0MQ;EAOI;APo0MZ;AO30MQ;EAOI;APu0MZ;AO90MQ;EAOI;AP00MZ;AOj1MQ;EAOI;AP60MZ;AOp1MQ;EAOI;APg1MZ;AOv1MQ;EAOI;APm1MZ;AO11MQ;EAOI;APs1MZ;AO71MQ;EAOI;APy1MZ;AOh2MQ;EAOI;AP41MZ;AOn2MQ;EAOI;AP+1MZ;AOt2MQ;EAOI;APk2MZ;AOz2MQ;EAOI;APq2MZ;AO52MQ;EAOI;APw2MZ;AO/2MQ;EAOI;AP22MZ;AOl3MQ;EAOI;AP82MZ;AOr3MQ;EAOI;EAAA;APk3MZ;AOz3MQ;EAOI;EAAA;APs3MZ;AO73MQ;EAOI;EAAA;AP03MZ;AOj4MQ;EAOI;EAAA;AP83MZ;AOr4MQ;EAOI;EAAA;APk4MZ;AOz4MQ;EAOI;EAAA;APs4MZ;AO74MQ;EAOI;EAAA;AP04MZ;AOj5MQ;EAOI;EAAA;AP84MZ;AOr5MQ;EAOI;EAAA;APk5MZ;AOz5MQ;EAOI;EAAA;APs5MZ;AO75MQ;EAOI;EAAA;AP05MZ;AOj6MQ;EAOI;EAAA;AP85MZ;AOr6MQ;EAOI;APi6MZ;AOx6MQ;EAOI;APo6MZ;AO36MQ;EAOI;APu6MZ;AO96MQ;EAOI;AP06MZ;AOj7MQ;EAOI;AP66MZ;AOp7MQ;EAOI;APg7MZ;AOv7MQ;EAOI;APm7MZ;AO17MQ;EAOI;APs7MZ;AO77MQ;EAOI;APy7MZ;AOh8MQ;EAOI;AP47MZ;AOn8MQ;EAOI;AP+7MZ;AOt8MQ;EAOI;APk8MZ;AOz8MQ;EAOI;APq8MZ;AO58MQ;EAOI;APw8MZ;AO/8MQ;EAOI;AP28MZ;AOl9MQ;EAOI;AP88MZ;AOr9MQ;EAOI;APi9MZ;AOx9MQ;EAOI;APo9MZ;AO39MQ;EAOI;APu9MZ;AO99MQ;EAOI;AP09MZ;AOj+MQ;EAOI;AP69MZ;AOp+MQ;EAOI;APg+MZ;AOv+MQ;EAOI;APm+MZ;AO1+MQ;EAOI;APs+MZ;AO7+MQ;EAOI;APy+MZ;AOh/MQ;EAOI;AP4+MZ;AOn/MQ;EAOI;AP++MZ;AOt/MQ;EAOI;APk/MZ;AOz/MQ;EAOI;APq/MZ;AO5/MQ;EAOI;APw/MZ;AO//MQ;EAOI;AP2/MZ;AOlgNQ;EAOI;AP8/MZ;AOrgNQ;EAOI;APigNZ;AOxgNQ;EAOI;APogNZ;AO3gNQ;EAOI;APugNZ;AO9gNQ;EAOI;AP0gNZ;AOjhNQ;EAOI;OAAA;AP6gNZ;AOphNQ;EAOI;OAAA;APghNZ;AOvhNQ;EAOI;OAAA;APmhNZ;AO1hNQ;EAOI;OAAA;APshNZ;AO7hNQ;EAOI;OAAA;APyhNZ;AOhiNQ;EAOI;OAAA;AP4hNZ;AOniNQ;EAOI;AP+hNZ;AOtiNQ;EAOI;APkiNZ;AOziNQ;EAOI;APqiNZ;AO5iNQ;EAOI;APwiNZ;AO/iNQ;EAOI;AP2iNZ;AOljNQ;EAOI;AP8iNZ;AOrjNQ;EAOI;APijNZ;AOxjNQ;EAOI;APojNZ;AO3jNQ;EAOI;APujNZ;AO9jNQ;EAOI;AP0jNZ;AOjkNQ;EAOI;AP6jNZ;AOpkNQ;EAOI;APgkNZ;AOvkNQ;EAOI;APmkNZ;AO1kNQ;EAOI;APskNZ;AO7kNQ;EAOI;APykNZ;AOhlNQ;EAOI;AP4kNZ;AOnlNQ;EAOI;AP+kNZ;AOtlNQ;EAOI;APklNZ;AOzlNQ;EAOI;APqlNZ;AO5lNQ;EAOI;APwlNZ;AO/lNQ;EAOI;AP2lNZ;AOlmNQ;EAOI;AP8lNZ;AOrmNQ;EAOI;APimNZ;AOxmNQ;EAOI;APomNZ;AO3mNQ;EAOI;APumNZ;AO9mNQ;EAOI;AP0mNZ;AOjnNQ;EAOI;AP6mNZ;AOpnNQ;EAOI;APgnNZ;AOvnNQ;EAOI;APmnNZ;AO1nNQ;EAOI;APsnNZ;AO7nNQ;EAOI;APynNZ;AOhoNQ;EAOI;EAAA;AP6nNZ;AOpoNQ;EAIQ;EAGJ;APioNZ;AOxoNQ;EAIQ;EAGJ;APqoNZ;AO5oNQ;EAIQ;EAGJ;APyoNZ;AOhpNQ;EAIQ;EAGJ;AP6oNZ;AOppNQ;EAIQ;EAGJ;APipNZ;AOxpNQ;EAIQ;EAGJ;APqpNZ;AO5pNQ;EAIQ;EAGJ;APypNZ;AOhqNQ;EAIQ;EAGJ;AP6pNZ;AOpqNQ;EAIQ;EAGJ;APiqNZ;AOxqNQ;EAIQ;EAGJ;APqqNZ;AO5qNQ;EAIQ;EAGJ;APyqNZ;AOhrNQ;EAIQ;EAGJ;AP6qNZ;AOprNQ;EAIQ;EAGJ;APirNZ;AOxrNQ;EAIQ;EAGJ;APqrNZ;AO5rNQ;EAIQ;EAGJ;APyrNZ;AOhsNQ;EAIQ;EAGJ;AP6rNZ;AOpsNQ;EAIQ;EAGJ;APisNZ;AOxsNQ;EAIQ;EAGJ;APqsNZ;AOttNQ;EACE;APwtNV;AOztNQ;EACE;AP2tNV;AO5tNQ;EACE;AP8tNV;AO/tNQ;EACE;APiuNV;AOxtNQ;EAOI;APotNZ;AO3tNQ;EAOI;APutNZ;AO9tNQ;EAOI;AP0tNZ;AOjuNQ;EAOI;AP6tNZ;AOpuNQ;EAOI;APguNZ;AOvuNQ;EAOI;APmuNZ;AO1uNQ;EAOI;APsuNZ;AO7uNQ;EAOI;APyuNZ;AO1vNQ;EACE;AP4vNV;AOxvNU;EACE;AP0vNZ;AOhwNQ;EACE;APkwNV;AO9vNU;EACE;APgwNZ;AOtwNQ;EACE;APwwNV;AOpwNU;EACE;APswNZ;AO5wNQ;EACE;AP8wNV;AO1wNU;EACE;AP4wNZ;AOlxNQ;EACE;APoxNV;AOhxNU;EACE;APkxNZ;AO9wNQ;EAOI;AP0wNZ;AOrwNU;EAOI;APiwNd;AOpxNQ;EAOI;APgxNZ;AO3wNU;EAOI;APuwNd;AO1xNQ;EAOI;APsxNZ;AOjxNU;EAOI;AP6wNd;AOhyNQ;EAIQ;EAGJ;AP6xNZ;AOpyNQ;EAIQ;EAGJ;APiyNZ;AOxyNQ;EAIQ;EAGJ;APqyNZ;AO5yNQ;EAIQ;EAGJ;APyyNZ;AOhzNQ;EAIQ;EAGJ;AP6yNZ;AOpzNQ;EAIQ;EAGJ;APizNZ;AOxzNQ;EAIQ;EAGJ;APqzNZ;AO5zNQ;EAIQ;EAGJ;APyzNZ;AOh0NQ;EAIQ;EAGJ;AP6zNZ;AO90NQ;EACE;APg1NV;AO50NU;EACE;AP80NZ;AOp1NQ;EACE;APs1NV;AOl1NU;EACE;APo1NZ;AO11NQ;EACE;AP41NV;AOx1NU;EACE;AP01NZ;AOh2NQ;EACE;APk2NV;AO91NU;EACE;APg2NZ;AOt2NQ;EACE;APw2NV;AOp2NU;EACE;APs2NZ;AO52NQ;EACE;AP82NV;AO12NU;EACE;AP42NZ;AOx2NQ;EAIQ;EAGJ;APq2NZ;AO52NQ;EAIQ;EAGJ;APy2NZ;AOh3NQ;EAIQ;EAGJ;AP62NZ;AOp3NQ;EAIQ;EAGJ;APi3NZ;AOx3NQ;EAIQ;EAGJ;APq3NZ;AO53NQ;EAIQ;EAGJ;APy3NZ;AOh4NQ;EAIQ;EAGJ;AP63NZ;AOp4NQ;EAIQ;EAGJ;APi4NZ;AOx4NQ;EAIQ;EAGJ;APq4NZ;AO54NQ;EAIQ;EAGJ;APy4NZ;AOh5NQ;EAIQ;EAGJ;AP64NZ;AOp5NQ;EAIQ;EAGJ;APi5NZ;AOx5NQ;EAIQ;EAGJ;APq5NZ;AO55NQ;EAIQ;EAGJ;APy5NZ;AO16NQ;EACE;AP46NV;AO76NQ;EACE;AP+6NV;AOh7NQ;EACE;APk7NV;AOn7NQ;EACE;APq7NV;AOt7NQ;EACE;APw7NV;AO/6NQ;EAOI;AP26NZ;AOl7NQ;EAOI;AP86NZ;AOr7NQ;EAOI;APi7NZ;AOx7NQ;EAOI;APo7NZ;AO37NQ;EAOI;APu7NZ;AO97NQ;EAOI;AP07NZ;AOj8NQ;EAOI;AP67NZ;AOp8NQ;EAOI;APg8NZ;AOv8NQ;EAOI;APm8NZ;AO18NQ;EAOI;KAAA;UAAA;APs8NZ;AO78NQ;EAOI;KAAA;UAAA;APy8NZ;AOh9NQ;EAOI;KAAA;UAAA;AP48NZ;AOn9NQ;EAOI;AP+8NZ;AOt9NQ;EAOI;APk9NZ;AOz9NQ;EAOI;APq9NZ;AO59NQ;EAOI;APw9NZ;AO/9NQ;EAOI;AP29NZ;AOl+NQ;EAOI;AP89NZ;AOr+NQ;EAOI;APi+NZ;AOx+NQ;EAOI;APo+NZ;AO3+NQ;EAOI;APu+NZ;AO9+NQ;EAOI;AP0+NZ;AOj/NQ;EAOI;AP6+NZ;AOp/NQ;EAOI;EAAA;APi/NZ;AOx/NQ;EAOI;EAAA;APq/NZ;AO5/NQ;EAOI;EAAA;APy/NZ;AOhgOQ;EAOI;EAAA;AP6/NZ;AOpgOQ;EAOI;EAAA;APigOZ;AOxgOQ;EAOI;EAAA;APqgOZ;AO5gOQ;EAOI;EAAA;APygOZ;AOhhOQ;EAOI;EAAA;AP6gOZ;AOphOQ;EAOI;EAAA;APihOZ;AOxhOQ;EAOI;EAAA;APqhOZ;AO5hOQ;EAOI;EAAA;APyhOZ;AOhiOQ;EAOI;EAAA;AP6hOZ;AOpiOQ;EAOI;EAAA;APiiOZ;AOxiOQ;EAOI;EAAA;APqiOZ;AO5iOQ;EAOI;EAAA;APyiOZ;AOhjOQ;EAOI;EAAA;AP6iOZ;AOpjOQ;EAOI;EAAA;APijOZ;AOxjOQ;EAOI;EAAA;APqjOZ;AO5jOQ;EAOI;EAAA;APyjOZ;AOhkOQ;EAOI;EAAA;AP6jOZ;AOpkOQ;EAOI;EAAA;APikOZ;AOxkOQ;EAOI;EAAA;APqkOZ;AO5kOQ;EAOI;EAAA;APykOZ;AOhlOQ;EAOI;EAAA;AP6kOZ;AOplOQ;EAOI;EAAA;APilOZ;AOxlOQ;EAOI;EAAA;APqlOZ;AO5lOQ;EAOI;EAAA;APylOZ;AOhmOQ;EAOI;EAAA;AP6lOZ;AOpmOQ;EAOI;EAAA;APimOZ;AOxmOQ;EAOI;EAAA;APqmOZ;AO5mOQ;EAOI;EAAA;APymOZ;AOhnOQ;EAOI;EAAA;AP6mOZ;AOpnOQ;EAOI;EAAA;APinOZ;AOxnOQ;EAOI;EAAA;APqnOZ;AO5nOQ;EAOI;EAAA;APynOZ;AOhoOQ;EAOI;EAAA;AP6nOZ;AOpoOQ;EAOI;APgoOZ;AOvoOQ;EAOI;APmoOZ;AO1oOQ;EAOI;APsoOZ;AO7oOQ;EAOI;APyoOZ;AOhpOQ;EAOI;AP4oOZ;AOnpOQ;EAOI;AP+oOZ;AOtpOQ;EAOI;APkpOZ;AgB5pOI;ETGI;IAOI;EPspOV;EO7pOM;IAOI;EPypOV;EOhqOM;IAOI;EP4pOV;EOnqOM;IAOI;OAAA;EP+pOV;EOtqOM;IAOI;OAAA;EPkqOV;EOzqOM;IAOI;OAAA;EPqqOV;EO5qOM;IAOI;OAAA;EPwqOV;EO/qOM;IAOI;OAAA;EP2qOV;EOlrOM;IAOI;EP8qOV;EOrrOM;IAOI;EPirOV;EOxrOM;IAOI;EPorOV;EO3rOM;IAOI;EPurOV;EO9rOM;IAOI;EP0rOV;EOjsOM;IAOI;EP6rOV;EOpsOM;IAOI;EPgsOV;EOvsOM;IAOI;EPmsOV;EO1sOM;IAOI;EPssOV;EO7sOM;IAOI;EPysOV;EOhtOM;IAOI;EP4sOV;EOntOM;IAOI;EP+sOV;EOttOM;IAOI;EPktOV;EOztOM;IAOI;EPqtOV;EO5tOM;IAOI;EPwtOV;EO/tOM;IAOI;EP2tOV;EOluOM;IAOI;EP8tOV;EOruOM;IAOI;EPiuOV;EOxuOM;IAOI;EPouOV;EO3uOM;IAOI;EPuuOV;EO9uOM;IAOI;EP0uOV;EOjvOM;IAOI;EP6uOV;EOpvOM;IAOI;EPgvOV;EOvvOM;IAOI;EPmvOV;EO1vOM;IAOI;EPsvOV;EO7vOM;IAOI;EPyvOV;EOhwOM;IAOI;EP4vOV;EOnwOM;IAOI;EP+vOV;EOtwOM;IAOI;EPkwOV;EOzwOM;IAOI;EPqwOV;EO5wOM;IAOI;EPwwOV;EO/wOM;IAOI;EP2wOV;EOlxOM;IAOI;EP8wOV;EOrxOM;IAOI;EPixOV;EOxxOM;IAOI;EPoxOV;EO3xOM;IAOI;EPuxOV;EO9xOM;IAOI;EP0xOV;EOjyOM;IAOI;EP6xOV;EOpyOM;IAOI;EPgyOV;EOvyOM;IAOI;EPmyOV;EO1yOM;IAOI;EPsyOV;EO7yOM;IAOI;EPyyOV;EOhzOM;IAOI;EP4yOV;EOnzOM;IAOI;EP+yOV;EOtzOM;IAOI;EPkzOV;EOzzOM;IAOI;EPqzOV;EO5zOM;IAOI;EPwzOV;EO/zOM;IAOI;EP2zOV;EOl0OM;IAOI;EP8zOV;EOr0OM;IAOI;EPi0OV;EOx0OM;IAOI;EPo0OV;EO30OM;IAOI;EPu0OV;EO90OM;IAOI;EP00OV;EOj1OM;IAOI;EP60OV;EOp1OM;IAOI;EPg1OV;EOv1OM;IAOI;EPm1OV;EO11OM;IAOI;EPs1OV;EO71OM;IAOI;EPy1OV;EOh2OM;IAOI;EP41OV;EOn2OM;IAOI;EP+1OV;EOt2OM;IAOI;EPk2OV;EOz2OM;IAOI;IAAA;EPs2OV;EO72OM;IAOI;IAAA;EP02OV;EOj3OM;IAOI;IAAA;EP82OV;EOr3OM;IAOI;IAAA;EPk3OV;EOz3OM;IAOI;IAAA;EPs3OV;EO73OM;IAOI;IAAA;EP03OV;EOj4OM;IAOI;IAAA;EP83OV;EOr4OM;IAOI;IAAA;EPk4OV;EOz4OM;IAOI;IAAA;EPs4OV;EO74OM;IAOI;IAAA;EP04OV;EOj5OM;IAOI;IAAA;EP84OV;EOr5OM;IAOI;IAAA;EPk5OV;EOz5OM;IAOI;IAAA;EPs5OV;EO75OM;IAOI;IAAA;EP05OV;EOj6OM;IAOI;EP65OV;EOp6OM;IAOI;EPg6OV;EOv6OM;IAOI;EPm6OV;EO16OM;IAOI;EPs6OV;EO76OM;IAOI;EPy6OV;EOh7OM;IAOI;EP46OV;EOn7OM;IAOI;EP+6OV;EOt7OM;IAOI;EPk7OV;EOz7OM;IAOI;EPq7OV;EO57OM;IAOI;EPw7OV;EO/7OM;IAOI;EP27OV;EOl8OM;IAOI;EP87OV;EOr8OM;IAOI;EPi8OV;EOx8OM;IAOI;EPo8OV;EO38OM;IAOI;EPu8OV;EO98OM;IAOI;EP08OV;EOj9OM;IAOI;EP68OV;EOp9OM;IAOI;EPg9OV;EOv9OM;IAOI;EPm9OV;EO19OM;IAOI;EPs9OV;EO79OM;IAOI;EPy9OV;EOh+OM;IAOI;EP49OV;EOn+OM;IAOI;EP+9OV;EOt+OM;IAOI;EPk+OV;EOz+OM;IAOI;EPq+OV;EO5+OM;IAOI;EPw+OV;EO/+OM;IAOI;EP2+OV;EOl/OM;IAOI;EP8+OV;EOr/OM;IAOI;EPi/OV;EOx/OM;IAOI;EPo/OV;EO3/OM;IAOI;EPu/OV;EO9/OM;IAOI;EP0/OV;EOjgPM;IAOI;EP6/OV;EOpgPM;IAOI;EPggPV;EOvgPM;IAOI;IAAA;EPogPV;EO3gPM;IAOI;IAAA;EPwgPV;EO/gPM;IAOI;IAAA;EP4gPV;EOnhPM;IAOI;IAAA;EPghPV;EOvhPM;IAOI;IAAA;EPohPV;EO3hPM;IAOI;IAAA;EPwhPV;EO/hPM;IAOI;IAAA;EP4hPV;EOniPM;IAOI;IAAA;EPgiPV;EOviPM;IAOI;IAAA;EPoiPV;EO3iPM;IAOI;IAAA;EPwiPV;EO/iPM;IAOI;IAAA;EP4iPV;EOnjPM;IAOI;IAAA;EPgjPV;EOvjPM;IAOI;EPmjPV;EO1jPM;IAOI;EPsjPV;EO7jPM;IAOI;EPyjPV;EOhkPM;IAOI;EP4jPV;EOnkPM;IAOI;EP+jPV;EOtkPM;IAOI;EPkkPV;EOzkPM;IAOI;EPqkPV;EO5kPM;IAOI;EPwkPV;EO/kPM;IAOI;EP2kPV;EOllPM;IAOI;EP8kPV;EOrlPM;IAOI;EPilPV;EOxlPM;IAOI;EPolPV;EO3lPM;IAOI;EPulPV;EO9lPM;IAOI;EP0lPV;EOjmPM;IAOI;EP6lPV;EOpmPM;IAOI;EPgmPV;EOvmPM;IAOI;EPmmPV;EO1mPM;IAOI;EPsmPV;EO7mPM;IAOI;EPymPV;EOhnPM;IAOI;EP4mPV;EOnnPM;IAOI;EP+mPV;EOtnPM;IAOI;EPknPV;EOznPM;IAOI;EPqnPV;EO5nPM;IAOI;EPwnPV;EO/nPM;IAOI;EP2nPV;EOloPM;IAOI;EP8nPV;EOroPM;IAOI;EPioPV;EOxoPM;IAOI;EPooPV;EO3oPM;IAOI;EPuoPV;EO9oPM;IAOI;EP0oPV;EOjpPM;IAOI;EP6oPV;EOppPM;IAOI;EPgpPV;EOvpPM;IAOI;EPmpPV;EO1pPM;IAOI;EPspPV;EO7pPM;IAOI;EPypPV;EOhqPM;IAOI;EP4pPV;EOnqPM;IAOI;SAAA;EP+pPV;EOtqPM;IAOI;SAAA;EPkqPV;EOzqPM;IAOI;SAAA;EPqqPV;EO5qPM;IAOI;SAAA;EPwqPV;EO/qPM;IAOI;SAAA;EP2qPV;EOlrPM;IAOI;SAAA;EP8qPV;EOrrPM;IAOI;EPirPV;EOxrPM;IAOI;EPorPV;EO3rPM;IAOI;EPurPV;AACF;AgBlsPI;ETGI;IAOI;EP4rPV;EOnsPM;IAOI;EP+rPV;EOtsPM;IAOI;EPksPV;EOzsPM;IAOI;OAAA;EPqsPV;EO5sPM;IAOI;OAAA;EPwsPV;EO/sPM;IAOI;OAAA;EP2sPV;EOltPM;IAOI;OAAA;EP8sPV;EOrtPM;IAOI;OAAA;EPitPV;EOxtPM;IAOI;EPotPV;EO3tPM;IAOI;EPutPV;EO9tPM;IAOI;EP0tPV;EOjuPM;IAOI;EP6tPV;EOpuPM;IAOI;EPguPV;EOvuPM;IAOI;EPmuPV;EO1uPM;IAOI;EPsuPV;EO7uPM;IAOI;EPyuPV;EOhvPM;IAOI;EP4uPV;EOnvPM;IAOI;EP+uPV;EOtvPM;IAOI;EPkvPV;EOzvPM;IAOI;EPqvPV;EO5vPM;IAOI;EPwvPV;EO/vPM;IAOI;EP2vPV;EOlwPM;IAOI;EP8vPV;EOrwPM;IAOI;EPiwPV;EOxwPM;IAOI;EPowPV;EO3wPM;IAOI;EPuwPV;EO9wPM;IAOI;EP0wPV;EOjxPM;IAOI;EP6wPV;EOpxPM;IAOI;EPgxPV;EOvxPM;IAOI;EPmxPV;EO1xPM;IAOI;EPsxPV;EO7xPM;IAOI;EPyxPV;EOhyPM;IAOI;EP4xPV;EOnyPM;IAOI;EP+xPV;EOtyPM;IAOI;EPkyPV;EOzyPM;IAOI;EPqyPV;EO5yPM;IAOI;EPwyPV;EO/yPM;IAOI;EP2yPV;EOlzPM;IAOI;EP8yPV;EOrzPM;IAOI;EPizPV;EOxzPM;IAOI;EPozPV;EO3zPM;IAOI;EPuzPV;EO9zPM;IAOI;EP0zPV;EOj0PM;IAOI;EP6zPV;EOp0PM;IAOI;EPg0PV;EOv0PM;IAOI;EPm0PV;EO10PM;IAOI;EPs0PV;EO70PM;IAOI;EPy0PV;EOh1PM;IAOI;EP40PV;EOn1PM;IAOI;EP+0PV;EOt1PM;IAOI;EPk1PV;EOz1PM;IAOI;EPq1PV;EO51PM;IAOI;EPw1PV;EO/1PM;IAOI;EP21PV;EOl2PM;IAOI;EP81PV;EOr2PM;IAOI;EPi2PV;EOx2PM;IAOI;EPo2PV;EO32PM;IAOI;EPu2PV;EO92PM;IAOI;EP02PV;EOj3PM;IAOI;EP62PV;EOp3PM;IAOI;EPg3PV;EOv3PM;IAOI;EPm3PV;EO13PM;IAOI;EPs3PV;EO73PM;IAOI;EPy3PV;EOh4PM;IAOI;EP43PV;EOn4PM;IAOI;EP+3PV;EOt4PM;IAOI;EPk4PV;EOz4PM;IAOI;EPq4PV;EO54PM;IAOI;EPw4PV;EO/4PM;IAOI;IAAA;EP44PV;EOn5PM;IAOI;IAAA;EPg5PV;EOv5PM;IAOI;IAAA;EPo5PV;EO35PM;IAOI;IAAA;EPw5PV;EO/5PM;IAOI;IAAA;EP45PV;EOn6PM;IAOI;IAAA;EPg6PV;EOv6PM;IAOI;IAAA;EPo6PV;EO36PM;IAOI;IAAA;EPw6PV;EO/6PM;IAOI;IAAA;EP46PV;EOn7PM;IAOI;IAAA;EPg7PV;EOv7PM;IAOI;IAAA;EPo7PV;EO37PM;IAOI;IAAA;EPw7PV;EO/7PM;IAOI;IAAA;EP47PV;EOn8PM;IAOI;IAAA;EPg8PV;EOv8PM;IAOI;EPm8PV;EO18PM;IAOI;EPs8PV;EO78PM;IAOI;EPy8PV;EOh9PM;IAOI;EP48PV;EOn9PM;IAOI;EP+8PV;EOt9PM;IAOI;EPk9PV;EOz9PM;IAOI;EPq9PV;EO59PM;IAOI;EPw9PV;EO/9PM;IAOI;EP29PV;EOl+PM;IAOI;EP89PV;EOr+PM;IAOI;EPi+PV;EOx+PM;IAOI;EPo+PV;EO3+PM;IAOI;EPu+PV;EO9+PM;IAOI;EP0+PV;EOj/PM;IAOI;EP6+PV;EOp/PM;IAOI;EPg/PV;EOv/PM;IAOI;EPm/PV;EO1/PM;IAOI;EPs/PV;EO7/PM;IAOI;EPy/PV;EOhgQM;IAOI;EP4/PV;EOngQM;IAOI;EP+/PV;EOtgQM;IAOI;EPkgQV;EOzgQM;IAOI;EPqgQV;EO5gQM;IAOI;EPwgQV;EO/gQM;IAOI;EP2gQV;EOlhQM;IAOI;EP8gQV;EOrhQM;IAOI;EPihQV;EOxhQM;IAOI;EPohQV;EO3hQM;IAOI;EPuhQV;EO9hQM;IAOI;EP0hQV;EOjiQM;IAOI;EP6hQV;EOpiQM;IAOI;EPgiQV;EOviQM;IAOI;EPmiQV;EO1iQM;IAOI;EPsiQV;EO7iQM;IAOI;IAAA;EP0iQV;EOjjQM;IAOI;IAAA;EP8iQV;EOrjQM;IAOI;IAAA;EPkjQV;EOzjQM;IAOI;IAAA;EPsjQV;EO7jQM;IAOI;IAAA;EP0jQV;EOjkQM;IAOI;IAAA;EP8jQV;EOrkQM;IAOI;IAAA;EPkkQV;EOzkQM;IAOI;IAAA;EPskQV;EO7kQM;IAOI;IAAA;EP0kQV;EOjlQM;IAOI;IAAA;EP8kQV;EOrlQM;IAOI;IAAA;EPklQV;EOzlQM;IAOI;IAAA;EPslQV;EO7lQM;IAOI;EPylQV;EOhmQM;IAOI;EP4lQV;EOnmQM;IAOI;EP+lQV;EOtmQM;IAOI;EPkmQV;EOzmQM;IAOI;EPqmQV;EO5mQM;IAOI;EPwmQV;EO/mQM;IAOI;EP2mQV;EOlnQM;IAOI;EP8mQV;EOrnQM;IAOI;EPinQV;EOxnQM;IAOI;EPonQV;EO3nQM;IAOI;EPunQV;EO9nQM;IAOI;EP0nQV;EOjoQM;IAOI;EP6nQV;EOpoQM;IAOI;EPgoQV;EOvoQM;IAOI;EPmoQV;EO1oQM;IAOI;EPsoQV;EO7oQM;IAOI;EPyoQV;EOhpQM;IAOI;EP4oQV;EOnpQM;IAOI;EP+oQV;EOtpQM;IAOI;EPkpQV;EOzpQM;IAOI;EPqpQV;EO5pQM;IAOI;EPwpQV;EO/pQM;IAOI;EP2pQV;EOlqQM;IAOI;EP8pQV;EOrqQM;IAOI;EPiqQV;EOxqQM;IAOI;EPoqQV;EO3qQM;IAOI;EPuqQV;EO9qQM;IAOI;EP0qQV;EOjrQM;IAOI;EP6qQV;EOprQM;IAOI;EPgrQV;EOvrQM;IAOI;EPmrQV;EO1rQM;IAOI;EPsrQV;EO7rQM;IAOI;EPyrQV;EOhsQM;IAOI;EP4rQV;EOnsQM;IAOI;EP+rQV;EOtsQM;IAOI;EPksQV;EOzsQM;IAOI;SAAA;EPqsQV;EO5sQM;IAOI;SAAA;EPwsQV;EO/sQM;IAOI;SAAA;EP2sQV;EOltQM;IAOI;SAAA;EP8sQV;EOrtQM;IAOI;SAAA;EPitQV;EOxtQM;IAOI;SAAA;EPotQV;EO3tQM;IAOI;EPutQV;EO9tQM;IAOI;EP0tQV;EOjuQM;IAOI;EP6tQV;AACF;AgBxuQI;ETGI;IAOI;EPkuQV;EOzuQM;IAOI;EPquQV;EO5uQM;IAOI;EPwuQV;EO/uQM;IAOI;OAAA;EP2uQV;EOlvQM;IAOI;OAAA;EP8uQV;EOrvQM;IAOI;OAAA;EPivQV;EOxvQM;IAOI;OAAA;EPovQV;EO3vQM;IAOI;OAAA;EPuvQV;EO9vQM;IAOI;EP0vQV;EOjwQM;IAOI;EP6vQV;EOpwQM;IAOI;EPgwQV;EOvwQM;IAOI;EPmwQV;EO1wQM;IAOI;EPswQV;EO7wQM;IAOI;EPywQV;EOhxQM;IAOI;EP4wQV;EOnxQM;IAOI;EP+wQV;EOtxQM;IAOI;EPkxQV;EOzxQM;IAOI;EPqxQV;EO5xQM;IAOI;EPwxQV;EO/xQM;IAOI;EP2xQV;EOlyQM;IAOI;EP8xQV;EOryQM;IAOI;EPiyQV;EOxyQM;IAOI;EPoyQV;EO3yQM;IAOI;EPuyQV;EO9yQM;IAOI;EP0yQV;EOjzQM;IAOI;EP6yQV;EOpzQM;IAOI;EPgzQV;EOvzQM;IAOI;EPmzQV;EO1zQM;IAOI;EPszQV;EO7zQM;IAOI;EPyzQV;EOh0QM;IAOI;EP4zQV;EOn0QM;IAOI;EP+zQV;EOt0QM;IAOI;EPk0QV;EOz0QM;IAOI;EPq0QV;EO50QM;IAOI;EPw0QV;EO/0QM;IAOI;EP20QV;EOl1QM;IAOI;EP80QV;EOr1QM;IAOI;EPi1QV;EOx1QM;IAOI;EPo1QV;EO31QM;IAOI;EPu1QV;EO91QM;IAOI;EP01QV;EOj2QM;IAOI;EP61QV;EOp2QM;IAOI;EPg2QV;EOv2QM;IAOI;EPm2QV;EO12QM;IAOI;EPs2QV;EO72QM;IAOI;EPy2QV;EOh3QM;IAOI;EP42QV;EOn3QM;IAOI;EP+2QV;EOt3QM;IAOI;EPk3QV;EOz3QM;IAOI;EPq3QV;EO53QM;IAOI;EPw3QV;EO/3QM;IAOI;EP23QV;EOl4QM;IAOI;EP83QV;EOr4QM;IAOI;EPi4QV;EOx4QM;IAOI;EPo4QV;EO34QM;IAOI;EPu4QV;EO94QM;IAOI;EP04QV;EOj5QM;IAOI;EP64QV;EOp5QM;IAOI;EPg5QV;EOv5QM;IAOI;EPm5QV;EO15QM;IAOI;EPs5QV;EO75QM;IAOI;EPy5QV;EOh6QM;IAOI;EP45QV;EOn6QM;IAOI;EP+5QV;EOt6QM;IAOI;EPk6QV;EOz6QM;IAOI;EPq6QV;EO56QM;IAOI;EPw6QV;EO/6QM;IAOI;EP26QV;EOl7QM;IAOI;EP86QV;EOr7QM;IAOI;IAAA;EPk7QV;EOz7QM;IAOI;IAAA;EPs7QV;EO77QM;IAOI;IAAA;EP07QV;EOj8QM;IAOI;IAAA;EP87QV;EOr8QM;IAOI;IAAA;EPk8QV;EOz8QM;IAOI;IAAA;EPs8QV;EO78QM;IAOI;IAAA;EP08QV;EOj9QM;IAOI;IAAA;EP88QV;EOr9QM;IAOI;IAAA;EPk9QV;EOz9QM;IAOI;IAAA;EPs9QV;EO79QM;IAOI;IAAA;EP09QV;EOj+QM;IAOI;IAAA;EP89QV;EOr+QM;IAOI;IAAA;EPk+QV;EOz+QM;IAOI;IAAA;EPs+QV;EO7+QM;IAOI;EPy+QV;EOh/QM;IAOI;EP4+QV;EOn/QM;IAOI;EP++QV;EOt/QM;IAOI;EPk/QV;EOz/QM;IAOI;EPq/QV;EO5/QM;IAOI;EPw/QV;EO//QM;IAOI;EP2/QV;EOlgRM;IAOI;EP8/QV;EOrgRM;IAOI;EPigRV;EOxgRM;IAOI;EPogRV;EO3gRM;IAOI;EPugRV;EO9gRM;IAOI;EP0gRV;EOjhRM;IAOI;EP6gRV;EOphRM;IAOI;EPghRV;EOvhRM;IAOI;EPmhRV;EO1hRM;IAOI;EPshRV;EO7hRM;IAOI;EPyhRV;EOhiRM;IAOI;EP4hRV;EOniRM;IAOI;EP+hRV;EOtiRM;IAOI;EPkiRV;EOziRM;IAOI;EPqiRV;EO5iRM;IAOI;EPwiRV;EO/iRM;IAOI;EP2iRV;EOljRM;IAOI;EP8iRV;EOrjRM;IAOI;EPijRV;EOxjRM;IAOI;EPojRV;EO3jRM;IAOI;EPujRV;EO9jRM;IAOI;EP0jRV;EOjkRM;IAOI;EP6jRV;EOpkRM;IAOI;EPgkRV;EOvkRM;IAOI;EPmkRV;EO1kRM;IAOI;EPskRV;EO7kRM;IAOI;EPykRV;EOhlRM;IAOI;EP4kRV;EOnlRM;IAOI;IAAA;EPglRV;EOvlRM;IAOI;IAAA;EPolRV;EO3lRM;IAOI;IAAA;EPwlRV;EO/lRM;IAOI;IAAA;EP4lRV;EOnmRM;IAOI;IAAA;EPgmRV;EOvmRM;IAOI;IAAA;EPomRV;EO3mRM;IAOI;IAAA;EPwmRV;EO/mRM;IAOI;IAAA;EP4mRV;EOnnRM;IAOI;IAAA;EPgnRV;EOvnRM;IAOI;IAAA;EPonRV;EO3nRM;IAOI;IAAA;EPwnRV;EO/nRM;IAOI;IAAA;EP4nRV;EOnoRM;IAOI;EP+nRV;EOtoRM;IAOI;EPkoRV;EOzoRM;IAOI;EPqoRV;EO5oRM;IAOI;EPwoRV;EO/oRM;IAOI;EP2oRV;EOlpRM;IAOI;EP8oRV;EOrpRM;IAOI;EPipRV;EOxpRM;IAOI;EPopRV;EO3pRM;IAOI;EPupRV;EO9pRM;IAOI;EP0pRV;EOjqRM;IAOI;EP6pRV;EOpqRM;IAOI;EPgqRV;EOvqRM;IAOI;EPmqRV;EO1qRM;IAOI;EPsqRV;EO7qRM;IAOI;EPyqRV;EOhrRM;IAOI;EP4qRV;EOnrRM;IAOI;EP+qRV;EOtrRM;IAOI;EPkrRV;EOzrRM;IAOI;EPqrRV;EO5rRM;IAOI;EPwrRV;EO/rRM;IAOI;EP2rRV;EOlsRM;IAOI;EP8rRV;EOrsRM;IAOI;EPisRV;EOxsRM;IAOI;EPosRV;EO3sRM;IAOI;EPusRV;EO9sRM;IAOI;EP0sRV;EOjtRM;IAOI;EP6sRV;EOptRM;IAOI;EPgtRV;EOvtRM;IAOI;EPmtRV;EO1tRM;IAOI;EPstRV;EO7tRM;IAOI;EPytRV;EOhuRM;IAOI;EP4tRV;EOnuRM;IAOI;EP+tRV;EOtuRM;IAOI;EPkuRV;EOzuRM;IAOI;EPquRV;EO5uRM;IAOI;EPwuRV;EO/uRM;IAOI;SAAA;EP2uRV;EOlvRM;IAOI;SAAA;EP8uRV;EOrvRM;IAOI;SAAA;EPivRV;EOxvRM;IAOI;SAAA;EPovRV;EO3vRM;IAOI;SAAA;EPuvRV;EO9vRM;IAOI;SAAA;EP0vRV;EOjwRM;IAOI;EP6vRV;EOpwRM;IAOI;EPgwRV;EOvwRM;IAOI;EPmwRV;AACF;AgB9wRI;ETGI;IAOI;EPwwRV;EO/wRM;IAOI;EP2wRV;EOlxRM;IAOI;EP8wRV;EOrxRM;IAOI;OAAA;EPixRV;EOxxRM;IAOI;OAAA;EPoxRV;EO3xRM;IAOI;OAAA;EPuxRV;EO9xRM;IAOI;OAAA;EP0xRV;EOjyRM;IAOI;OAAA;EP6xRV;EOpyRM;IAOI;EPgyRV;EOvyRM;IAOI;EPmyRV;EO1yRM;IAOI;EPsyRV;EO7yRM;IAOI;EPyyRV;EOhzRM;IAOI;EP4yRV;EOnzRM;IAOI;EP+yRV;EOtzRM;IAOI;EPkzRV;EOzzRM;IAOI;EPqzRV;EO5zRM;IAOI;EPwzRV;EO/zRM;IAOI;EP2zRV;EOl0RM;IAOI;EP8zRV;EOr0RM;IAOI;EPi0RV;EOx0RM;IAOI;EPo0RV;EO30RM;IAOI;EPu0RV;EO90RM;IAOI;EP00RV;EOj1RM;IAOI;EP60RV;EOp1RM;IAOI;EPg1RV;EOv1RM;IAOI;EPm1RV;EO11RM;IAOI;EPs1RV;EO71RM;IAOI;EPy1RV;EOh2RM;IAOI;EP41RV;EOn2RM;IAOI;EP+1RV;EOt2RM;IAOI;EPk2RV;EOz2RM;IAOI;EPq2RV;EO52RM;IAOI;EPw2RV;EO/2RM;IAOI;EP22RV;EOl3RM;IAOI;EP82RV;EOr3RM;IAOI;EPi3RV;EOx3RM;IAOI;EPo3RV;EO33RM;IAOI;EPu3RV;EO93RM;IAOI;EP03RV;EOj4RM;IAOI;EP63RV;EOp4RM;IAOI;EPg4RV;EOv4RM;IAOI;EPm4RV;EO14RM;IAOI;EPs4RV;EO74RM;IAOI;EPy4RV;EOh5RM;IAOI;EP44RV;EOn5RM;IAOI;EP+4RV;EOt5RM;IAOI;EPk5RV;EOz5RM;IAOI;EPq5RV;EO55RM;IAOI;EPw5RV;EO/5RM;IAOI;EP25RV;EOl6RM;IAOI;EP85RV;EOr6RM;IAOI;EPi6RV;EOx6RM;IAOI;EPo6RV;EO36RM;IAOI;EPu6RV;EO96RM;IAOI;EP06RV;EOj7RM;IAOI;EP66RV;EOp7RM;IAOI;EPg7RV;EOv7RM;IAOI;EPm7RV;EO17RM;IAOI;EPs7RV;EO77RM;IAOI;EPy7RV;EOh8RM;IAOI;EP47RV;EOn8RM;IAOI;EP+7RV;EOt8RM;IAOI;EPk8RV;EOz8RM;IAOI;EPq8RV;EO58RM;IAOI;EPw8RV;EO/8RM;IAOI;EP28RV;EOl9RM;IAOI;EP88RV;EOr9RM;IAOI;EPi9RV;EOx9RM;IAOI;EPo9RV;EO39RM;IAOI;IAAA;EPw9RV;EO/9RM;IAOI;IAAA;EP49RV;EOn+RM;IAOI;IAAA;EPg+RV;EOv+RM;IAOI;IAAA;EPo+RV;EO3+RM;IAOI;IAAA;EPw+RV;EO/+RM;IAOI;IAAA;EP4+RV;EOn/RM;IAOI;IAAA;EPg/RV;EOv/RM;IAOI;IAAA;EPo/RV;EO3/RM;IAOI;IAAA;EPw/RV;EO//RM;IAOI;IAAA;EP4/RV;EOngSM;IAOI;IAAA;EPggSV;EOvgSM;IAOI;IAAA;EPogSV;EO3gSM;IAOI;IAAA;EPwgSV;EO/gSM;IAOI;IAAA;EP4gSV;EOnhSM;IAOI;EP+gSV;EOthSM;IAOI;EPkhSV;EOzhSM;IAOI;EPqhSV;EO5hSM;IAOI;EPwhSV;EO/hSM;IAOI;EP2hSV;EOliSM;IAOI;EP8hSV;EOriSM;IAOI;EPiiSV;EOxiSM;IAOI;EPoiSV;EO3iSM;IAOI;EPuiSV;EO9iSM;IAOI;EP0iSV;EOjjSM;IAOI;EP6iSV;EOpjSM;IAOI;EPgjSV;EOvjSM;IAOI;EPmjSV;EO1jSM;IAOI;EPsjSV;EO7jSM;IAOI;EPyjSV;EOhkSM;IAOI;EP4jSV;EOnkSM;IAOI;EP+jSV;EOtkSM;IAOI;EPkkSV;EOzkSM;IAOI;EPqkSV;EO5kSM;IAOI;EPwkSV;EO/kSM;IAOI;EP2kSV;EOllSM;IAOI;EP8kSV;EOrlSM;IAOI;EPilSV;EOxlSM;IAOI;EPolSV;EO3lSM;IAOI;EPulSV;EO9lSM;IAOI;EP0lSV;EOjmSM;IAOI;EP6lSV;EOpmSM;IAOI;EPgmSV;EOvmSM;IAOI;EPmmSV;EO1mSM;IAOI;EPsmSV;EO7mSM;IAOI;EPymSV;EOhnSM;IAOI;EP4mSV;EOnnSM;IAOI;EP+mSV;EOtnSM;IAOI;EPknSV;EOznSM;IAOI;IAAA;EPsnSV;EO7nSM;IAOI;IAAA;EP0nSV;EOjoSM;IAOI;IAAA;EP8nSV;EOroSM;IAOI;IAAA;EPkoSV;EOzoSM;IAOI;IAAA;EPsoSV;EO7oSM;IAOI;IAAA;EP0oSV;EOjpSM;IAOI;IAAA;EP8oSV;EOrpSM;IAOI;IAAA;EPkpSV;EOzpSM;IAOI;IAAA;EPspSV;EO7pSM;IAOI;IAAA;EP0pSV;EOjqSM;IAOI;IAAA;EP8pSV;EOrqSM;IAOI;IAAA;EPkqSV;EOzqSM;IAOI;EPqqSV;EO5qSM;IAOI;EPwqSV;EO/qSM;IAOI;EP2qSV;EOlrSM;IAOI;EP8qSV;EOrrSM;IAOI;EPirSV;EOxrSM;IAOI;EPorSV;EO3rSM;IAOI;EPurSV;EO9rSM;IAOI;EP0rSV;EOjsSM;IAOI;EP6rSV;EOpsSM;IAOI;EPgsSV;EOvsSM;IAOI;EPmsSV;EO1sSM;IAOI;EPssSV;EO7sSM;IAOI;EPysSV;EOhtSM;IAOI;EP4sSV;EOntSM;IAOI;EP+sSV;EOttSM;IAOI;EPktSV;EOztSM;IAOI;EPqtSV;EO5tSM;IAOI;EPwtSV;EO/tSM;IAOI;EP2tSV;EOluSM;IAOI;EP8tSV;EOruSM;IAOI;EPiuSV;EOxuSM;IAOI;EPouSV;EO3uSM;IAOI;EPuuSV;EO9uSM;IAOI;EP0uSV;EOjvSM;IAOI;EP6uSV;EOpvSM;IAOI;EPgvSV;EOvvSM;IAOI;EPmvSV;EO1vSM;IAOI;EPsvSV;EO7vSM;IAOI;EPyvSV;EOhwSM;IAOI;EP4vSV;EOnwSM;IAOI;EP+vSV;EOtwSM;IAOI;EPkwSV;EOzwSM;IAOI;EPqwSV;EO5wSM;IAOI;EPwwSV;EO/wSM;IAOI;EP2wSV;EOlxSM;IAOI;EP8wSV;EOrxSM;IAOI;SAAA;EPixSV;EOxxSM;IAOI;SAAA;EPoxSV;EO3xSM;IAOI;SAAA;EPuxSV;EO9xSM;IAOI;SAAA;EP0xSV;EOjySM;IAOI;SAAA;EP6xSV;EOpySM;IAOI;SAAA;EPgySV;EOvySM;IAOI;EPmySV;EO1ySM;IAOI;EPsySV;EO7ySM;IAOI;EPyySV;AACF;AgBpzSI;ETGI;IAOI;EP8ySV;EOrzSM;IAOI;EPizSV;EOxzSM;IAOI;EPozSV;EO3zSM;IAOI;OAAA;EPuzSV;EO9zSM;IAOI;OAAA;EP0zSV;EOj0SM;IAOI;OAAA;EP6zSV;EOp0SM;IAOI;OAAA;EPg0SV;EOv0SM;IAOI;OAAA;EPm0SV;EO10SM;IAOI;EPs0SV;EO70SM;IAOI;EPy0SV;EOh1SM;IAOI;EP40SV;EOn1SM;IAOI;EP+0SV;EOt1SM;IAOI;EPk1SV;EOz1SM;IAOI;EPq1SV;EO51SM;IAOI;EPw1SV;EO/1SM;IAOI;EP21SV;EOl2SM;IAOI;EP81SV;EOr2SM;IAOI;EPi2SV;EOx2SM;IAOI;EPo2SV;EO32SM;IAOI;EPu2SV;EO92SM;IAOI;EP02SV;EOj3SM;IAOI;EP62SV;EOp3SM;IAOI;EPg3SV;EOv3SM;IAOI;EPm3SV;EO13SM;IAOI;EPs3SV;EO73SM;IAOI;EPy3SV;EOh4SM;IAOI;EP43SV;EOn4SM;IAOI;EP+3SV;EOt4SM;IAOI;EPk4SV;EOz4SM;IAOI;EPq4SV;EO54SM;IAOI;EPw4SV;EO/4SM;IAOI;EP24SV;EOl5SM;IAOI;EP84SV;EOr5SM;IAOI;EPi5SV;EOx5SM;IAOI;EPo5SV;EO35SM;IAOI;EPu5SV;EO95SM;IAOI;EP05SV;EOj6SM;IAOI;EP65SV;EOp6SM;IAOI;EPg6SV;EOv6SM;IAOI;EPm6SV;EO16SM;IAOI;EPs6SV;EO76SM;IAOI;EPy6SV;EOh7SM;IAOI;EP46SV;EOn7SM;IAOI;EP+6SV;EOt7SM;IAOI;EPk7SV;EOz7SM;IAOI;EPq7SV;EO57SM;IAOI;EPw7SV;EO/7SM;IAOI;EP27SV;EOl8SM;IAOI;EP87SV;EOr8SM;IAOI;EPi8SV;EOx8SM;IAOI;EPo8SV;EO38SM;IAOI;EPu8SV;EO98SM;IAOI;EP08SV;EOj9SM;IAOI;EP68SV;EOp9SM;IAOI;EPg9SV;EOv9SM;IAOI;EPm9SV;EO19SM;IAOI;EPs9SV;EO79SM;IAOI;EPy9SV;EOh+SM;IAOI;EP49SV;EOn+SM;IAOI;EP+9SV;EOt+SM;IAOI;EPk+SV;EOz+SM;IAOI;EPq+SV;EO5+SM;IAOI;EPw+SV;EO/+SM;IAOI;EP2+SV;EOl/SM;IAOI;EP8+SV;EOr/SM;IAOI;EPi/SV;EOx/SM;IAOI;EPo/SV;EO3/SM;IAOI;EPu/SV;EO9/SM;IAOI;EP0/SV;EOjgTM;IAOI;IAAA;EP8/SV;EOrgTM;IAOI;IAAA;EPkgTV;EOzgTM;IAOI;IAAA;EPsgTV;EO7gTM;IAOI;IAAA;EP0gTV;EOjhTM;IAOI;IAAA;EP8gTV;EOrhTM;IAOI;IAAA;EPkhTV;EOzhTM;IAOI;IAAA;EPshTV;EO7hTM;IAOI;IAAA;EP0hTV;EOjiTM;IAOI;IAAA;EP8hTV;EOriTM;IAOI;IAAA;EPkiTV;EOziTM;IAOI;IAAA;EPsiTV;EO7iTM;IAOI;IAAA;EP0iTV;EOjjTM;IAOI;IAAA;EP8iTV;EOrjTM;IAOI;IAAA;EPkjTV;EOzjTM;IAOI;EPqjTV;EO5jTM;IAOI;EPwjTV;EO/jTM;IAOI;EP2jTV;EOlkTM;IAOI;EP8jTV;EOrkTM;IAOI;EPikTV;EOxkTM;IAOI;EPokTV;EO3kTM;IAOI;EPukTV;EO9kTM;IAOI;EP0kTV;EOjlTM;IAOI;EP6kTV;EOplTM;IAOI;EPglTV;EOvlTM;IAOI;EPmlTV;EO1lTM;IAOI;EPslTV;EO7lTM;IAOI;EPylTV;EOhmTM;IAOI;EP4lTV;EOnmTM;IAOI;EP+lTV;EOtmTM;IAOI;EPkmTV;EOzmTM;IAOI;EPqmTV;EO5mTM;IAOI;EPwmTV;EO/mTM;IAOI;EP2mTV;EOlnTM;IAOI;EP8mTV;EOrnTM;IAOI;EPinTV;EOxnTM;IAOI;EPonTV;EO3nTM;IAOI;EPunTV;EO9nTM;IAOI;EP0nTV;EOjoTM;IAOI;EP6nTV;EOpoTM;IAOI;EPgoTV;EOvoTM;IAOI;EPmoTV;EO1oTM;IAOI;EPsoTV;EO7oTM;IAOI;EPyoTV;EOhpTM;IAOI;EP4oTV;EOnpTM;IAOI;EP+oTV;EOtpTM;IAOI;EPkpTV;EOzpTM;IAOI;EPqpTV;EO5pTM;IAOI;EPwpTV;EO/pTM;IAOI;IAAA;EP4pTV;EOnqTM;IAOI;IAAA;EPgqTV;EOvqTM;IAOI;IAAA;EPoqTV;EO3qTM;IAOI;IAAA;EPwqTV;EO/qTM;IAOI;IAAA;EP4qTV;EOnrTM;IAOI;IAAA;EPgrTV;EOvrTM;IAOI;IAAA;EPorTV;EO3rTM;IAOI;IAAA;EPwrTV;EO/rTM;IAOI;IAAA;EP4rTV;EOnsTM;IAOI;IAAA;EPgsTV;EOvsTM;IAOI;IAAA;EPosTV;EO3sTM;IAOI;IAAA;EPwsTV;EO/sTM;IAOI;EP2sTV;EOltTM;IAOI;EP8sTV;EOrtTM;IAOI;EPitTV;EOxtTM;IAOI;EPotTV;EO3tTM;IAOI;EPutTV;EO9tTM;IAOI;EP0tTV;EOjuTM;IAOI;EP6tTV;EOpuTM;IAOI;EPguTV;EOvuTM;IAOI;EPmuTV;EO1uTM;IAOI;EPsuTV;EO7uTM;IAOI;EPyuTV;EOhvTM;IAOI;EP4uTV;EOnvTM;IAOI;EP+uTV;EOtvTM;IAOI;EPkvTV;EOzvTM;IAOI;EPqvTV;EO5vTM;IAOI;EPwvTV;EO/vTM;IAOI;EP2vTV;EOlwTM;IAOI;EP8vTV;EOrwTM;IAOI;EPiwTV;EOxwTM;IAOI;EPowTV;EO3wTM;IAOI;EPuwTV;EO9wTM;IAOI;EP0wTV;EOjxTM;IAOI;EP6wTV;EOpxTM;IAOI;EPgxTV;EOvxTM;IAOI;EPmxTV;EO1xTM;IAOI;EPsxTV;EO7xTM;IAOI;EPyxTV;EOhyTM;IAOI;EP4xTV;EOnyTM;IAOI;EP+xTV;EOtyTM;IAOI;EPkyTV;EOzyTM;IAOI;EPqyTV;EO5yTM;IAOI;EPwyTV;EO/yTM;IAOI;EP2yTV;EOlzTM;IAOI;EP8yTV;EOrzTM;IAOI;EPizTV;EOxzTM;IAOI;EPozTV;EO3zTM;IAOI;SAAA;EPuzTV;EO9zTM;IAOI;SAAA;EP0zTV;EOj0TM;IAOI;SAAA;EP6zTV;EOp0TM;IAOI;SAAA;EPg0TV;EOv0TM;IAOI;SAAA;EPm0TV;EO10TM;IAOI;SAAA;EPs0TV;EO70TM;IAOI;EPy0TV;EOh1TM;IAOI;EP40TV;EOn1TM;IAOI;EP+0TV;AACF;AiEt4TA;E1D+CQ;IAOI;EPo1TV;EO31TM;IAOI;EPu1TV;EO91TM;IAOI;EP01TV;EOj2TM;IAOI;EP61TV;AACF;AiEj4TA;E1D4BQ;IAOI;EPk2TV;EOz2TM;IAOI;EPq2TV;EO52TM;IAOI;EPw2TV;EO/2TM;IAOI;EP22TV;EOl3TM;IAOI;EP82TV;EOr3TM;IAOI;EPi3TV;EOx3TM;IAOI;EPo3TV;EO33TM;IAOI;EPu3TV;EO93TM;IAOI;EP03TV;EOj4TM;IAOI;EP63TV;EOp4TM;IAOI;EPg4TV;AACF;;AkEv8TA;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;AlE07TJ;;AkEt7TI;EACI;AlEy7TR;;AmE//TA;EAKI;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AnEs+TJ;AoE1jUA;EAMI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ApEoiUJ;AqE7mUA;EAMI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ArEulUJ;AsE7pUA;EAMI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AtEuoUJ;AsEpoUQ;EACI,4JACI;AtEqoUhB;AsE9nUQ;EACI;AtEgoUZ;AsE5nUI;EACI;EACA,8HACI;AtE6nUZ;AsExnUI;EACI,uLACI;AtEynUZ;AsEnnUI;EACI,6HACI;AtEonUZ;AsE/mUI;EACI,iRACI;AtEgnUZ;AsEvmUQ;EACI;EACA,2HACI;AtEwmUhB;AsEnmUQ;EACI,2QACI;AtEomUhB;AsE5lUQ;EACI;AtE8lUZ;AsE3lUQ;EACI,0HACI;AtE4lUhB;AsEtlUI;EACI;EACA;EACA;EACA;EACA;EACA;AtEwlUR;AsEvlUQ;EACI;EACA;EACA;EACA;EACA;EACA,6IACI;AtEwlUhB;AsEplUQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AtEslUZ;AsErlUY;EACI;EACA;EACA;AtEulUhB;AsEtlUgB;EACI;EACA;EACA;EACA;EACA;EACA;AtEwlUpB;AsErlUY;EACI;EACA;EACA;EACA;EACA;AtEulUhB;AsEtlUgB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AtEwlUpB;AsEllUI;EACI;IACI;EtEolUV;EsEllUM;IACI;EtEolUV;AACF;;AuEnzUA;EACI;EACA;EACA;AvEszUJ;AuEpzUI;EACI;AvEszUR;AuEnzUI;EACI;EACA;AvEqzUR;AuElzUI;EACI;AvEozUR;AuEjzUI;EACI;AvEmzUR;AuEhzUI;EACI;EACA;AvEkzUR;AuEhzUQ;EACI;AvEkzUZ;AuE9yUI;EACI;EACA;AvEgzUR;AuE7yUI;EACI;AvE+yUR;AuE5yUI;EACI;EACA;EACA;EACA;EACA;AvE8yUR;AuE5yUQ;EACI;EACA;EACA;AvE8yUZ;AuE3yUQ;EACI;EACA;EACA;EACA;EACA;AvE6yUZ;AuE3yUY;EACI;EACA;EACA;EACA;EACA;EACA;AvE6yUhB;AuEzyUQ;EACI;AvE2yUZ;AuExyUQ;EACI;EACA;AvE0yUZ;AuEvyUQ;EACI;EACA;EACA;EACA;AvEyyUZ;AuExyUY;EACI;AvE0yUhB;AuExyUY;EACI;EACA;AvE0yUhB;AuExyUY;EACI;AvE0yUhB;AuExyUY;EACI;AvE0yUhB;AuEpyUQ;EACI;EACA;AvEsyUZ;AuEpyUQ;EACI;EACA;EACA;EACA;EACA;EACA;AvEsyUZ;AuElyUI;EACI;AvEoyUR;AuEryUI;EACI;AvEoyUR;AuElyUI;EACI;AvEoyUR;AuEryUI;EACI;AvEoyUR;AuEjyUI;EA1HJ;IA2HQ;IACA;IACA;IACA;EvEoyUN;AACF;AuEnyUI;EAhIJ;IAiIQ;IACA;IACA;IACA;EvEsyUN;AACF;AuEpyUI;;;;;;;;;;;EAMI;AvE2yUR;AuExyUI;EACI;AvE0yUR;AuEvyUI;;;;;;EAMI;EACA;AvEyyUR;AuEtyUI;EACI;AvEwyUR;AuEryUI;EACI;AvEuyUR;AuEpyUI;;EAEI;AvEsyUR;AuEnyUI;;;EAGI;EACA;AvEqyUR;AuElyUI;EACI;AvEoyUR;AuEjyUI;;;;EAII;EACA;EACA;EACA;AvEmyUR;AuElyUQ;;;;EACI;EACA;EACA;AvEuyUZ;AuEpyUQ;;;;;;;;;;EAGI;AvE6yUZ;AuE5yUY;;;;;;;;;;EACI;AvEuzUhB;AuEjzUQ;EACI;AvEmzUZ;AuE/yUI;EACI;AvEizUR;AuE9yUI;;;EAGI;AvEgzUR;AuE7yUI;EACI;AvE+yUR;AuE9yUQ;EACI;AvEgzUZ;AuE7yUI;EACI;AvE+yUR;AuE7yUI;EACI;AvE+yUR;AuE5yUI;EACI;EACA;AvE8yUR;AuE3yUI;EACI;AvE6yUR;AuE5yUQ;EACI;AvE8yUZ;AuE1yUI;EACI;EACA;KAAA;UAAA;AvE4yUR;AuEzyUI;EACI;IACI;EvE2yUV;EuEzyUM;IACI;EvE2yUV;EuEzyUM;IACI;EvE2yUV;EuEzyUM;IACI;EvE2yUV;EuEzyUM;IACI;EvE2yUV;AACF;AuEvxUI;EACI;IACI;EvE0yUV;EuExyUM;IACI;EvE0yUV;EuExyUM;IACI;EvE0yUV;EuExyUM;IACI;EvE0yUV;EuExyUM;IACI;EvE0yUV;AACF;AuEvxUI;EACI;IACI;EvE0yUV;EuExyUM;IACI;EvE0yUV;AACF;AuEtxUI;EACI;IACI;IACA;EvE0yUV;EuExyUM;IACI;IACA;EvE0yUV;AACF;AuEvyUI;ECnWA;EACA;EACA;EACA;EACA;AxE6oVJ;AuE1yUI;EACI;EACA;EACA;EACA;EACA;AvE4yUR;AuEzyUI;EACI;EACA;AvE2yUR;AuExyUI;EACI;EACA;EACA;EACA;AvE0yUR;AuEvyUI;EACI;EACA;EACA;AvEyyUR;AuEtyUI;EACI;AvEwyUR;AuEryUI;EACI;IACI;EvEuyUV;EuEryUM;IACI;EvEuyUV;AACF;AuEpyUI;EACI;AvEsyUR;AuEpyUI;EACI;AvEsyUR;AuEpyUI;EACI;EACA;EACA;AvEsyUR;AuEpyUI;EACI;EACA;EACA;EACA;AvEsyUR;AuEnyUI;EACI;AvEqyUR;AuEnyUI;EACI;AvEqyUR;AuEnyUI;EACI;EACA;AvEqyUR;AuElyUI;;EAEI;EACA;EACA;AvEoyUR;AuEjyUI;EACI;EACA;AvEmyUR;AuEhyUI;EACI;AvEkyUR;AuE/xUI;EACI;EACA;AvEiyUR;AuE9xUC;EACC;EACM;AvEgyUR;AuE9xUI;;EAEI;AvEgyUR;;AuE5xUA;EAEQ;IACI;EvE8xUV;EuEzxUU;IACI;EvE2xUd;EuExxUM;IACI;EvE0xUV;AACF;AuEtxUA;EACI;IACI;EvEwxUN;AACF;AuEtxUA;EACI;IACI;EvEwxUN;EuEtxUE;IACI;EvEwxUN;AACF;AuEtxUA;EACI;IACI;EvEwxUN;EuEtxUE;IACI;EvEwxUN;AACF;AuEtxUA;EACI;IACI;EvEwxUN;AACF;AuEtxUA;EACI;IACI;EvEwxUN;AACF;AyEjxVQ;EACI;EACA;AzEmxVZ;AyEhxVQ;EACI;AzEkxVZ;AyE/wVQ;EACI;AzEixVZ;AyE7wVI;EACI;EACA;EACA;AzE+wVR;AyE5wVI;EAKI;EACA;EACA;AzE0wVR;AyEhxVQ;EACI;AzEkxVZ;;A0E3yVA;EACI;A1E8yVJ;A0E3yVQ;EACI;A1E6yVZ;A0E1yVY;EACI;EACA;A1E4yVhB;A0E3yVgB;EACI;A1E6yVpB;A0EzyVQ;EACI;EACA;A1E2yVZ;A0E1yVY;EACI;A1E4yVhB;A0EvyVI;;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A1EyyVR;A0EtyVI;;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A1EwyVR;A0EryVI;;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A1EuyVR;A0EpyVI;;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A1EsyVR;A0EnyVI;;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A1EqyVR;A0ElyVI;;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A1EoyVR;A0EjyVI;EACI;EACA;A1EmyVR;A0EhyVI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;A1EkyVR;;AyCt5VA;EAEE;EACA;EvCuRI,kCALI;EuChRR;EACA;EACA;EAGA;EACA;EvC+QI,0CALI;EuCxQR;EACA;EACA;EACA;EACA;EACA;EhCJE;AT25VJ;AyCl5VE;EACE;AzCo5VJ;AyC/4VA;EACE;EACA;AzCi5VF;A2El7VI;EACI;EACA;EACA;EACA;EACA;A3Eo7VR;A2Ej7VI;EACI;A3Em7VR;A2Eh7VI;EACI;EACA;A3Ek7VR;A2Ej7VQ;EACI;EACA;A3Em7VZ;A2E/6VI;EACI;A3Ei7VR;A2Eh7VQ;EACI;A3Ek7VZ;A2E96VI;EACI;EACA;A3Eg7VR;A2E/6VQ;EACI;EACA;A3Ei7VZ;;A4Ep9VI;EACI;A5Eu9VR;;A6Ex9VI;EACI;EACA;A7E29VR;A6Ev9VQ;EACI;EACA;A7Ey9VZ;A6Et9VQ;EACI;EACA;EACA;A7Ew9VZ;A6Er9VQ;EACI;A7Eu9VZ;A6Ep9VQ;EACI;A7Es9VZ;A6En9VQ;EACI;EACA;A7Eq9VZ;A6Ep9VY;EACI;EACA;A7Es9VhB;A6Eh9VY;EACI;A7Eq9VhB;A6E78VY;EACI;A7Eq9VhB;A6Ej9VQ;EACI;A7Em9VZ;A6E/8VY;EACI;EACA;EACA;EACA;EACA;EACA;A7Ei9VhB;A6E78VQ;EAEI;A7E88VZ;A6E78VY;EACI;EACA;EACA;A7E+8VhB;A6E78VY;EACI;A7E+8VhB;A6E78VY;EACI;EACA;A7E+8VhB;A6E78VY;EACI;A7E+8VhB;A6E78VY;EACI;EACA;EACA;A7E+8VhB;A6E18VQ;EACI;A7E48VZ;A6E18VY;EACI;EACA;EACA;A7E48VhB;A6Ez8VY;EACI;A7E28VhB;A6Ex8VY;;;;EAII;A7E08VhB;A6Ex8VY;EACI;EACA;A7E08VhB;A6Ex8VY;EACI;EACA;EACA;A7E08VhB;A6Ez8VgB;EACI;A7E28VpB;A6Ez8VgB;EACI;A7E28VpB;A6Et8VQ;EACI;A7Ew8VZ;A6Er8VQ;EACI;A7Eu8VZ;A6Ep8VQ;EACI;EACA;A7Es8VZ;A6Er8VY;EACI;EACA;A7Eu8VhB;;A4ChlWA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EnCXE;AT0lWJ;A4C3kWA;EACE;EACA;A5C6kWF;A4C3kWE;EAEE;EACA;A5C4kWJ;A4CnkWA;EACE;EACA;EACA;A5CqkWF;A4ClkWE;EAEE;EACA;EACA;EACA;A5CmkWJ;A4ChkWE;EACE;EACA;A5CkkWJ;A4C1jWA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;A5C4jWF;A4C1jWE;EnCvDE;EACA;ATonWJ;A4C1jWE;EnC7CE;EACA;AT0mWJ;A4C1jWE;EAEE;EACA;EACA;A5C2jWJ;A4CvjWE;EACE;EACA;EACA;EACA;A5CyjWJ;A4CrjWE;EACE;A5CujWJ;A4CrjWI;EACE;EACA;A5CujWN;A4C1iWI;EACE;A5C4iWN;A4CziWQ;EnCvDJ;EAZA;ATgnWJ;A4CxiWQ;EnCxEJ;EAYA;ATwmWJ;A4CviWQ;EACE;A5CyiWV;A4CtiWQ;EACE;EACA;A5CwiWV;A4CtiWU;EACE;EACA;A5CwiWZ;AgB9nWI;E4B8DA;IACE;E5CmkWJ;E4ChkWM;InCvDJ;IAZA;ETuoWF;E4C/jWM;InCxEJ;IAYA;ET+nWF;E4C9jWM;IACE;E5CgkWR;E4C7jWM;IACE;IACA;E5C+jWR;E4C7jWQ;IACE;IACA;E5C+jWV;AACF;AgBtpWI;E4B8DA;IACE;E5C2lWJ;E4CxlWM;InCvDJ;IAZA;ET+pWF;E4CvlWM;InCxEJ;IAYA;ETupWF;E4CtlWM;IACE;E5CwlWR;E4CrlWM;IACE;IACA;E5CulWR;E4CrlWQ;IACE;IACA;E5CulWV;AACF;AgB9qWI;E4B8DA;IACE;E5CmnWJ;E4ChnWM;InCvDJ;IAZA;ETurWF;E4C/mWM;InCxEJ;IAYA;ET+qWF;E4C9mWM;IACE;E5CgnWR;E4C7mWM;IACE;IACA;E5C+mWR;E4C7mWQ;IACE;IACA;E5C+mWV;AACF;AgBtsWI;E4B8DA;IACE;E5C2oWJ;E4CxoWM;InCvDJ;IAZA;ET+sWF;E4CvoWM;InCxEJ;IAYA;ETusWF;E4CtoWM;IACE;E5CwoWR;E4CroWM;IACE;IACA;E5CuoWR;E4CroWQ;IACE;IACA;E5CuoWV;AACF;AgB9tWI;E4B8DA;IACE;E5CmqWJ;E4ChqWM;InCvDJ;IAZA;ETuuWF;E4C/pWM;InCxEJ;IAYA;ET+tWF;E4C9pWM;IACE;E5CgqWR;E4C7pWM;IACE;IACA;E5C+pWR;E4C7pWQ;IACE;IACA;E5C+pWV;AACF;A4ClpWA;EnChJI;ATqyWJ;A4ClpWE;EACE;A5CopWJ;A4ClpWI;EACE;A5CopWN;A4CvoWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CyoWJ;A4CnpWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CqpWJ;A4C/pWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CiqWJ;A4C3qWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5C6qWJ;A4CvrWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CyrWJ;A4CnsWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CqsWJ;A4C/sWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5CitWJ;A4C3tWE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A5C6tWJ;A8E35WI;EAKI;A9Ey5WR;A8E75WQ;EACI;EACA;A9E+5WZ;A8E15WI;EACI;EACA;A9E45WR;A8E15WQ;EACI;EACA;EACA;EACA;EACA;A9E45WZ;A8Ex5WI;EACI;EACA;EACA;A9E05WR;A8Ex5WQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;A9E05WZ;A8Ex5WY;EACI;A9E05WhB;A8Et5WgB;EACI;A9Ew5WpB;A8Ep5WY;EAII;EACA;EACA;EACA;EACA;EACA;EACA;A9Em5WhB;A8E55WgB;EACI;A9E85WpB;A8En5WY;EACI;EACA;EACA;EACA;EACA;A9Eq5WhB;A8El5WY;EACI;EACA;EACA;EACA;EACA;EACA;EAUA;A9E24WhB;A8Ep5WgB;EACI;A9Es5WpB;A8Ep5WgB;EACI;A9Es5WpB;A8Er5WoB;EACI;A9Eu5WxB;A8En5WgB;EACI;EACA;A9Eq5WpB;A8En5WgB;EACI;A9Eq5WpB;A8Ej5WY;EACI;A9Em5WhB;A8Eh5WY;EACI;A9Ek5WhB;A8Ej5WgB;EACI;A9Em5WpB;A8El5WoB;EACI;A9Eo5WxB;A8Ej5WgB;EACI;A9Em5WpB;A8Ej5WgB;EACI;A9Em5WpB;A8El5WoB;EACI;A9Eo5WxB;A8E/4WY;EACI;A9Ei5WhB;A8Eh5WgB;EACI;A9Ek5WpB;A8Eh5WgB;EACI;A9Ek5WpB;;A+E7gXI;EACI;A/EghXR;A+E7gXI;EACI;EACA;A/E+gXR;A+E3gXQ;EACI;EAEA;A/E4gXZ;A+EzgXQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;A/E2gXZ;A+ExgXQ;EACI;A/E0gXZ;A+ExgXQ;EACI;A/E0gXZ;A+ExgXQ;EACI;A/E0gXZ;A+ExgXQ;EAEI;EACA;EACA;EACA;EACA;A/EygXZ;A+EvgXY;EACI;EACA;EACA;EACA;EACA;EACA;A/EygXhB;A+EtgXY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;A/EwgXhB;A+EpgXQ;EACI;EACA;EACA;EACA;EACA;A/EsgXZ;A+EpgXY;EACI;A/EsgXhB;A+EpgXY;EACI;A/EsgXhB;A+EpgXY;EACI;EACA;A/EsgXhB;A+EpgXY;EACI;EACA;A/EsgXhB;A+EpgXY;EACI;A/EsgXhB;A+ElgXQ;EACI;EACA;EACA;EACA;A/EogXZ;A+EjgXQ;EACI;A/EmgXZ;A+EjgXY;EACI;A/EmgXhB;A+E//WQ;EACI;EACA;EACA;EACA;A/EigXZ;A+E//WY;EACI;EACA;A/EigXhB;A+E//WY;EACI;A/EigXhB;A+E//WY;EACI;A/EigXhB;A+E9/WY;EACI;A/EggXhB;A+E9/WY;EACI;A/EggXhB;A+E9/WY;EACI;A/EggXhB;A+E//WgB;EACI;EACA;A/EigXpB;A+E//WgB;EACI;EACA;A/EigXpB;A+E3/WoB;EACI;A/E6/WxB;A+E3/WoB;EAEI;A/E4/WxB;A+Ev/WY;EACI;EACA;A/Ey/WhB;A+Et/WY;EACI;EACA;EACA;EACA;EACA;A/Ew/WhB;A+Ev/WgB;EAiCI;A/Ey9WpB;A+Ez/WoB;EACI;EACA;EACA;EACA;EACA;A/E2/WxB;A+E1/WwB;EACI;EACA;EACA;A/E4/W5B;A+E3/W4B;EACI;EAAA;EACA;A/E6/WhC;A+Ez/W4B;EACI;EACA;EACA;EACA;A/E2/WhC;A+Ex/WwB;EACI;A/E0/W5B;A+Et/WwB;EACI;A/Ew/W5B;A+Ej/WY;EACI;EACA;A/Em/WhB;A+Eh/WY;EACI;EACA;A/Ek/WhB;A+E/+WY;EACI;EACA;EACA;A/Ei/WhB;A+E9+WY;EACI;A/Eg/WhB;A+E7+WY;EACI;EACA;A/E++WhB;A+E9+WgB;EACI;A/Eg/WpB;A+E9+WgB;EACI;A/Eg/WpB;A+E5+WY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;A/E8+WhB;A+E3+WY;EACI;EACA;A/E6+WhB;A+E3+WgB;EACI;EACA;A/E6+WpB;A+E3+WgB;EACI;EACA;EACA;A/E6+WpB;A+E1+WoB;EACI;A/E4+WxB;A+Ev+WgB;EACI;A/Ey+WpB;A+Ev+WgB;EACI;A/Ey+WpB;A+Ev+WgB;EACI;EACA;EACA;A/Ey+WpB;A+Ev+WoB;EACI;A/Ey+WxB;A+Et+WgB;EACI;A/Ew+WpB;A+Et+WgB;EACI;A/Ew+WpB;A+Ep+WY;EACI;A/Es+WhB;A+El+WgB;;EAEI;A/Eo+WpB;A+El+WgB;EACI;EACA;A/Eo+WpB;A+Eh+WY;EACI;EACA;EACA;A/Ek+WhB;A+E99WQ;EACI;EACA;EACA;EACA;EACA;A/Eg+WZ;A+E99WgB;EACI;A/Eg+WpB;A+E39WQ;EACI;EACA;EACA;A/E69WZ;A+Ex9WQ;EACI;EACA;A/E09WZ;A+Ex9WQ;EACI;EACA;A/E09WZ;A+Ej9WwB;EACI;A/Em9W5B;;A+E18WA;EAIgB;IACI;E/E08WlB;AACF;AgFjzXA;EACE;EACA;EACA;EACA;AhFmzXF;AgFhzXA;EACE;EACA;EACA;EACA;AhFkzXF;AgF/yXA;EACE;AhFizXF;AgF/yXE;EACE;AhFizXJ;AgF9yXE;EACI;AhFgzXN,C;;;;AiFh0XI;EACI;EACA;EACA;EACA;AALR;AAMQ;EACI;AAJZ;AAMQ;EACI;AAJZ;AAMQ;EACI;AAJZ;AAMQ;EACI;AAJZ;AAQI;EACI;AANR;AAUQ;EACI;EACA;AARZ;AAaQ;EACI;AAXZ;AAiBY;EACI;AAfhB;AAiBoB;EACI;AAfxB;AAmBoB;EACI;EACA;AAjBxB;AAkBwB;EACI;EACA;AAhB5B;AAsBY;EACI;AApBhB;AAuBY;EACI;EACA;EACA;AArBhB;AAsBgB;EACI;AApBpB;AAqBoB;EACI;EACA;AAnBxB;AAwBwB;EACI;EACA;AAtB5B;AA0BgB;EACI;AAxBpB;AA0BoB;EACI;AAxBxB;AA4BY;EACI;AA1BhB;AA4BY;EACI;EACA;EACA;AA1BhB;AA8BQ;EACI;EACA;AA5BZ;AA+BQ;EACI;AA7BZ;AAgCQ;EACI;AA9BZ;AA+BY;EACI;AA7BhB;AAiCQ;EACI;AA/BZ;AAkCQ;EACI;AAhCZ,C;;;;AC5FI;EAAW;AACf;AACI;EACI;EACA;AACR;AAGQ;EACI;AADZ;AAKI;EACI;AAHR;AAIQ;EACI;AAFZ;AAKQ;EACI;AAHZ;AAMQ;;EAiBI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAnBZ;AARY;;EACI;EACA;EACA;EACA;EACA;EAAU;EACV;EACA;EACA;EACA;EACA;EAEA;EACA;AAYhB;AAIY;;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AADhB;AAIoB;;EACI;EACA;AADxB;AAIgB;;EACI;AADpB;AAKQ;EACI;AAHZ;AAKQ;EACI;AAHZ;AAIY;EACI;AAFhB;AAIY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;AAFhB;AAOI;;EAEI;AALR;AAQI;EACI;IACI;IACA;EANV;EASM;;IAEI;IACA;IACA;IACA;EAPV;AACF;AAUI;EACI;EACA;AARR;AAWI;EACI;EACA;AATR;AAYI;EACI;EACA;AAVR;;AAeI;EACI;AAZR;;AAiBI;EACI;AAdR,C;;;;ACpII;EACI;AAAR,C;;;;ACFA;EACI;EACA;AACJ;AACI;EACI;AACR;AAEI;EACI;EACA;AAAR;AAGI;EACI;AADR;AAKI;EACI;EACA;EACA;EACA;AAHR,C;;;;AClBI;EACI;AAAR,C;;;;ACAQ;EACI;AADZ;AAEY;EACI;AAAhB;;AAOI;EACI;AAJR;AAQY;EACI;AANhB;AAOgB;EACI;AALpB,C;;;;ACZY;EACI;AAFhB;AAIY;EACI;EACA;EACA;EACA;EACA;AAFhB;AAMQ;EACI;AAJZ;AAQY;EACI;EACA;EACA;EACA;AANhB;AAUQ;EACI;EACA;EACA;EACA;EACA;AARZ;AAUY;EACI;EACA;EACA;EACA;EACA;EACA;AARhB,C;;;;ACjCA;EACI;AACJ;AAEQ;EACI;AAAZ;AAEQ;EACI;EACA;AAAZ;AAEQ;EACI;EACA;EACA;EACA;AAAZ;AAEQ;EACI;EACA;AAAZ;AACY;EACI;AAChB;AAEQ;EACI;EACA;EACA;EACA;AAAZ;AAEY;EACI;AAAhB;AAGY;EACI;EACA;AADhB,C;;;;AClCI;EACI;EACA;AAAR,C;;;;ACHA;EACI;AACJ;;AAEA;EACI;AACJ;;AAEA;EACI;EACA;EACA;EACA;AACJ;;AAEA;EACI;EACA;EACA;EACA;EACA;AACJ;AACI;EACH;EACA;EACA;EACA;EACA;EACA;AACD;AAEI;EACH;AAAD;AACC;EACI;EACA;EACA;EACA;AACL;AAGI;EACH;AADD;AAEC;EACI;EACA;EACA;EACA;EACA;EACA;AAAL;AAEC;EACI;AAAL;AAII;EACH;AAFD;AAGC;EACI;EACA;EACA;EACA;EACA;AADL,C;;;;AC1DA;EACI;EACA;AAHJ;AAKI;EACI;EACA;AAHR;AAMI;EACI;EACA;AAJR;A3EiEI;E2E/DA;IAIQ;EAFV;AACF;A3E+CI;E2ElDA;IAOQ;EAAV;AACF;A3E0CI;E2ElDA;IAUQ;EAEV;AACF;A3EqCI;E2ElDA;IAaQ;EAIV;AACF;;AAEQ;EACI;EACA;AACZ;AACQ;EACI;EACA;AACZ,C;;;;ACxCA;EACI;EACA;EACA;AACJ;AAAI;EACH;AAED;AAEK;EACH;AAAF;;AASK;EACH;AANF,C;;;;ACRgB;;EACI;EACA;AAJpB;AASQ;;EACI;EACA;AANZ;AAUY;;;EAEI;AAPhB;AAWQ;;EACI;EACA;EACA;AARZ;AAWQ;;EACI;EACA;EACA;EACA;AARZ;AASY;;EACI;EACA;EACA;EACA;AANhB;AAQY;;;EACI;AAJhB;AAMY;;EACI;AAHhB,C;;;;ACzCQ;EACI;AADZ,C;;;;ACIQ;EACI;AALZ;AAQoB;EACI;EACA;AANxB;AAUoB;EACI;AARxB;AAmBgB;EACI;AAjBpB;A/EgEI;E+EhDY;IAGQ;EAftB;AACF;A/E8CI;E+EnCY;IAMQ;EAbtB;AACF;A/EyCI;E+EnCY;IASQ;EAXtB;AACF;A/EoCI;E+EnCY;IAYQ;EATtB;AACF;AAgBgB;EACI;EACA;AAdpB,C;;;;ACjCY;EACI;AAFhB,C;;;;ACFA;EACI;EACA;EACA;EACA;EACA;AACJ,C;;;;ACCQ;EACI;EACA;EACA;EACA;AANZ;AAWgB;EACI;AATpB;AAcQ;EACI;AAZZ;AAaY;EACI;EACA;AAXhB;AAeQ;EACI;EACA;EACA;EACA;EACA;AAbZ;AAeY;EACI;AAbhB;AAcgB;EACI;EACA;EACA;EACA;EACA;EACA;AAZpB;AAaoB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AAXxB;AAcoB;EACI;EACA;AAZxB;AAgBwB;EACI;AAd5B;AAmBY;EACI;EACA;EACA;EACA;EACA;EACA;AAjBhB;AAkBgB;EACI;EACA;EACA;EACA;AAhBpB;AAiBoB;EACI;AAfxB;AAmBY;EACI;EACA;AAjBhB;AAkBgB;EACI;AAhBpB;AAkBgB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AAhBpB;AAiBoB;EACI;AAfxB;AAgBwB;EACI;AAd5B;AAgBwB;EACI;EACA;EACA;EACA;EACA;AAd5B;AAgBwB;EACI;EACA;EACA;EACA;EACA;EACA;AAd5B;AAe4B;EACI;AAbhC;AAoBY;EACI;EACA;EACA;EACA;EACA;AAlBhB;AAmBgB;EACI;EACA;EACA;EACA;AAjBpB;AAmBgB;EACI;EACA;EACA;AAjBpB;AAmBoB;EACI;EACA;AAjBxB;AAkBwB;EACI;AAhB5B;AAkBwB;EACI;AAhB5B;AAkBwB;EACI;EACA;AAhB5B;AAkBwB;EACI;EACA;AAhB5B;AAyBQ;EACI;AAvBZ;AAwBY;EACI;AAtBhB;AAwBY;EACI;AAtBhB;;AAgCgB;EACI;AA7BpB;AAmCwB;EACI;EACA;AAjC5B;AAwC4B;EACI;EACA;EACA;EACA;EACA;AAtChC;AAwC4B;EACI;EACA;AAtChC;AA0CoB;EACI;AAxCxB;AA2CwB;EACI;AAzC5B;AA4CoB;EACI;AA1CxB;AAkDgB;EACI;AAhDpB;AAwDoB;EACI;AAtDxB;AAyDwB;EACI;AAvD5B;;AAmEY;EACI;AAhEhB,C;;;;AC9LI;EACI;EACA;EACA;EACA;EACA;AADR;AAIY;EACI;EACA;AAFhB;AAMQ;EACI;AAJZ;AAOQ;EACI;EACA;AALZ;AAQQ;;;EAGI;EACA;AANZ;AAOY;;;EACI;AAHhB;AAMQ;;EAEI;AAJZ;AASQ;EACI;AAPZ;AAYQ;EACI;AAVZ;AAgBQ;EACI;EACA;AAdZ;AAeY;;;EAGI;AAbhB;AAcgB;;;;;EACI;AARpB;AAYgB;EACI;AAVpB;AAYgB;EACI;AAVpB;AAWoB;EACI;AATxB;AAWoB;EACI;AATxB;AAiBQ;EACI;AAfZ;AAgBY;;;EAGI;EACA;AAdhB;AAegB;;;EACI;AAXpB;AAegB;EACI;AAbpB;AAegB;EACI;AAbpB;AAcoB;EACI;AAZxB;AAcoB;EACI;AAZxB,C;;;;AC1FQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AADZ;AAGY;EACI;EACA;AADhB;AAIY;EACI;AAFhB;AAKY;EACI;AAHhB;AAMY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AAJhB;AAOY;EACI;EACA;EACA;EACA;EACA;AALhB;AAQY;EACI;AANhB;AASY;EACI;EACA;EACA;EACA;AAPhB;AAUY;EACI;EACA;EACA;AARhB;AAWY;EACI;EACA;AAThB;AAYY;EACI;AAVhB;AAWgB;EACI;EACA;AATpB;AAgBwB;EACI;AAd5B;AAsBoB;EACI;AApBxB,C;;;;AlC9DA;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;AmClBJ;;AnCsBI;EACI;AmCnBR;;AA1CY;EACI;AA6ChB;AA1CY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA4ChB;AA3CgB;EAVJ;IAWQ;EA8ClB;AACF;AA7CgB;EAbJ;IAcQ;EAgDlB;AACF;AA7CoB;EACI;AA+CxB;AA3CgB;EACI;EACA;EACA;AA6CpB;AA1CgB;EACI;AA4CpB;AA3CoB;EACI;AA6CxB;AA3CoB;EACI;AA6CxB;AAzCgB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA2CpB;AA1CoB;EACI;AA4CxB,C;;;;AnC3GA;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;AoClBJ;;ApCsBI;EACI;AoCnBR;;AChDY;EACI;ADmDhB;;AC5CI;EACI;AD+CR;AC7CQ;EAHJ;IAIQ;IACA;EDgDV;AACF;AC/CQ;EAPJ;IAQQ;IACA;EDkDV;AACF;AChDQ;EACI;ADkDZ;AC/CQ;EACI;ADiDZ;AC/CY;EAHJ;IAIQ;EDkDd;AACF;ACjDY;EANJ;IAOQ;EDoDd;AACF;AClDY;EAVJ;IAWQ;EDqDd;AACF;ACpDY;EAbJ;IAcQ;EDuDd;AACF;ACpDQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;ADsDZ;ACpDY;EACI;EACA;ADsDhB;AClDQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;ADoDZ;AClDY;EATJ;IAUQ;IACA;IACA;EDqDd;AACF;ACpDY;EAdJ;IAeQ;IACA;IACA;EDuDd;AACF;ACpDQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ADsDZ;ACrDY;EACI;ADuDhB;ACrDY;EACI;EACA;ADuDhB;ACnDQ;EACI;EACA;EACA;EACA;EACA;EACA;EAUA;EACA;EACA;EACA;AD4CZ;ACvDY;EARJ;IASQ;IACA;ED0Dd;AACF;ACzDY;EAZJ;IAaQ;IACA;ED4Dd;AACF;ACvDY;EACI;EACA;EACA;EACA;ADyDhB;ACtDQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ADwDZ;ACtDQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ADwDZ;ACtDY;EACI;ADwDhB;ACvDgB;EACI;EACA;EACA;EACA;EACA;ADyDpB;ACvDgB;EACI;EACA;EACA;EACA;ADyDpB;ACxDoB;EACI;AD0DxB;ACrDY;EACI;EACA;EACA;ADuDhB;ACpDY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ADsDhB;ACrDgB;EACI;ADuDpB;ACnDY;EACI;EACA;ADqDhB;ACjDQ;EACI;EACA;EACA;EACA;EACA;EACA;ADmDZ;AClDY;EACI;EACA;EACA;ADoDhB;AClDY;EAEI;EACA;EACA;EACA;ADmDhB;ACjDY;EACI;EACA;EACA;EACA;EACA;ADmDhB;;AA1QA;AAKQ;;EACI;AA0QZ;AAxQQ;;EACI;EACA;AA2QZ;AAzQQ;;EACI;EACA;AA4QZ;AA1QY;;EACI;EACA;AA6QhB;AAvQQ;EACI;EACA;AAyQZ;AAxQY;EAHJ;IAIQ;IACA;EA2Qd;AACF;AA1QY;EAPJ;IAQQ;IACA;EA6Qd;AACF;AA1QQ;EACI;AA4QZ;AA1QQ;EACI;EACA;AA4QZ;AA1QQ;EACI;AA4QZ;AA1QQ;EACI;AA4QZ;AA1QQ;EACI;AA4QZ;AAzQY;EACI;AA2QhB;AAzQY;EACI;AA2QhB;AAzQY;EACI;AA2QhB;;AtFnQI;EsFAI;IACI;EAuQV;AACF;AAhQQ;;EACI;EACA;EACA;AAmQZ;AA/PY;;EACI;EACA;AAkQhB;AtFjSI;EsFsCQ;IpFtER;IACA;EoFqUF;AACF;AtFvSI;EsFsCQ;IpFtER;IACA;EoF2UF;AACF;AtF7SI;EsFsCQ;IpFtER;IACA;EoFiVF;AACF;AtFnTI;EsFkDgB;IpFlFhB;IACA;EoFuVF;AACF;AtFzTI;EsFkDgB;IpFlFhB;IACA;EoF6VF;AACF;AtF/TI;EsFkDgB;IpFlFhB;IACA;EoFmWF;AACF;AAlQQ;EACI;AAoQZ;AAhQY;EACI;EACA;EACA;EACA;AAkQhB;AA9PQ;EACI;AAgQZ;;AA3PA;AAIQ;EACI;AA2PZ;AAzPQ;EACI;AA2PZ;AAzPQ;EACI;AA2PZ;AAxPY;EACI;EACA;EACA;EACA;EACA;AA0PhB;AAxPY;EACI;EACA;EACA;AA0PhB;AAxPY;EACI;EACA;AA0PhB;AAvPgB;EACI;AAyPpB;;AtFlWI;EsFoHQ;IACI;EAkPd;EA/Oc;IACI;EAiPlB;EA9OU;IACI;EAgPd;EA9OkB;IACI;IACA;IACA;IACA;EAgPtB;EAvOc;;IACI;IACA;IACA;EA0OlB;EAxOsB;;IACI;EA2O1B;AACF,C;;;;AEpcQ;EACI;EACA;EACA;AALZ;AAQQ;EACI;AANZ;AAUY;EACI;EACA;AARhB;;AAmBoB;EACI;AAhBxB;AAoBgB;EACI;EACA;EACA;AAlBpB;AAqBgB;EACI;AAnBpB;AAsBgB;EACI;AApBpB;AAuBgB;EtFlBZ;EACA;EsFmBgB;AApBpB;AAwBoB;EACI;AAtBxB;AA+BgB;EACI;AA7BpB;AAgCgB;EACI;EtFjDlB;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;AsFgBJ;AxFeI;EwFMY;ItFtCZ;IACA;EsFqBF;AACF;AxFSI;EwFMY;ItFtCZ;IACA;EsF2BF;AACF;AxFGI;EwFMY;ItFtCZ;IACA;EsFiCF;AACF;AAiBoB;EACI;AAfxB;AAiBoB;;;;;EAEI;AAZxB,C;;;;AC3EI;EACI;EACA;AAAR;AAEQ;EACI;AAAZ;AAEY;EACI;EACA;EACA;EACA;EACA;AAAhB;AAEoB;EACI;AAAxB,C;;;;AvCbA;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;AwClBJ;;AxCsBI;EACI;AwCnBR;;AA5CI;EACI;EACA;EACA;AA+CR;AA7CQ;EACI;EACA;AA+CZ;AA7CQ;EACI;EACA;EACA;EACA;AA+CZ;AA5CI;EACI;EACA;EACA;AA8CR;AA3CI;EACI;EACA;AA6CR;AA3CQ;EACI;EACA;AA6CZ;AA1CQ;EACI;EACA;AA4CZ;AAzCQ;EACI;EACA;AA2CZ;AAxCQ;EACI;EACA;AA0CZ;AAvCQ;EACI;AAyCZ;AAtCQ;EACI;AAwCZ;AAnCgB;EACI;AAqCpB;AAhCQ;EACI;EACA;EACA;AAkCZ;AAjCY;EACI;AAmChB;AA/BQ;EACI;AAiCZ;AA9BQ;EACI;EACA;AAgCZ;AA7BQ;EACI;AA+BZ;AA9BY;EACI;AAgChB;AA9BY;EACI;AAgChB;AA/BgB;EACI;AAiCpB;AA5BQ;EACI;AA8BZ;AA5BY;EAMI;EACA;AAyBhB;AA/BgB;;;EAGI;AAiCpB;AAzBY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AA2BhB;AAxBY;EACI;AA0BhB;AAvBY;EACI;AAyBhB;AAtBY;EACI;AAwBhB;AApBQ;EACI;EACA;EACA;AAsBZ;AAnBQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAqBZ;AAnBY;EACI;AAqBhB;AAlBY;EACI;AAoBhB;AAhBQ;EACI;AAkBZ;AAjBY;EACI;EACA;AAmBhB;AAjBY;EACI;AAmBhB;;AAXQ;EACI;EACA;AAcZ;AAZY;EACI;EACA;EACA;EACA;EACA;EACA;AAchB;AAXY;EACI;EACA;EACA;AAahB;AAXgB;EACI;EACA;AAapB;AATY;EACI;EACA;AAWhB;AARY;EACI;AAUhB;AAHgB;EACI;AAKpB;AAFY;EACI;AAIhB;AACY;EACI;AAChB;AAKY;EACI;ExFpNd;EACA;EACA;EACA;EACA;EACA;AwFkNF;A1F7KI;E0FyKQ;IxFzMR;IACA;EwFiNF;AACF;A1FnLI;E0FyKQ;IxFzMR;IACA;EwFuNF;AACF;A1FzLI;E0FyKQ;IxFzMR;IACA;EwF6NF;AACF;AAPgB;ExFxNZ;EACA;EsD7BA;EACA;EACA;EACA;EACA;EkCmPgB;AAcpB;AAboB;EACI;AAexB;AAXgB;EACI;EACA;EACA;AAapB;AAVgB;ExFvOZ;EACA;EwFwOgB;EACA;AAapB;AAZoB;EACI;EACA;EACA;EACA;EACA;AAcxB;AAZoB;EACI;EACA;AAcxB;AAZoB;EACI;IACI;EAc1B;AACF;AANgB;EADJ;IAEQ;EASlB;AACF;A1F/NI;E0FmNQ;IAKQ;EAWlB;AACF;A1FjPI;E0FuOY;IxFvQZ;IACA;EwFqRF;AACF;A1FvPI;E0FuOY;IxFvQZ;IACA;EwF2RF;AACF;A1F7PI;E0FuOY;IxFvQZ;IACA;EwFiSF;AACF;AAhBY;EACI;EACA;AAkBhB;;A1F1PI;E0FmPgB;IACI;EAWtB;EALM;IAEI;IACA;IACA;IACA;EAMV;EAJU;IACI;IACA;IACA;EAMd;EAJc;IACI;EAMlB;EAFkB;IACI;IACA;IACA;IACA;IACA;EAItB;EAAc;IACI;IACA;EAElB;EADkB;IACI;IACA;EAGtB;EADkB;IACI;EAGtB;EAEkB;IACI;EAAtB;EAGsB;IACI;EAD1B;AACF,C;;;;AC/WY;EACI;AAFhB;AAGgB;EACI;AADpB;AAGgB;EACI;AADpB;AAIY;EACI;AAFhB;AAUgB;EACI;AARpB;AAgBY;EACI;AAdhB;AAuBgB;EACI;AArBpB;AAuBgB;EACI;AArBpB,C;;;;ACnBgB;EASI;AAXpB;AAGoB;EACI;AADxB;AAIoB;EACI;EACA;AAFxB;AAMoB;EACI;AAJxB;AAUgC;EACI;AARpC;AAgB4B;EACI;AAdhC;AAyB4B;EACI;AAvBhC,C;;;;ACpBI;EACI;EACA;EACA;AAAR;AACQ;EAEI;EACA;EACA;EACA;EACA;AAAZ;AAEQ;EACI;EACA;EACA;EACA;EACA;EACA;AAAZ;AAEQ;EACI;EACA;EACA;EACA;EACA;EACA;AAAZ,C;;;;AC1BI;EACI;EACA;EACA;EACA;EACA;AAAR,C;;;;ACNA;EACI;AACJ,C;;;;ACCQ;;EAEI;EACA;EACA;EACA;EACA;EACA;AAFZ;AAIY;;EACI;EACA;AADhB;AAIY;;EACI;EACA;AADhB;AAIoB;;EACI;EACA;AADxB;AAOQ;EACI;AALZ;AASY;EACI;EACA;AAPhB;AASgB;EACI;AAPpB;AASgB;EACI;AAPpB;AAQoB;EACI;AANxB;AAQoB;EACI;AANxB;AASgB;EACI;EACA;EACA;EACA;AAPpB,C;;;;AChDA;EACI;EACA;AACJ;AACI;EACI;AACR;AACQ;EACI;AACZ;AAEQ;EACI;AAAZ;AAGQ;EACI;EACA;EACA;AADZ;AAGY;EACI;AADhB;AAKQ;EACI;EACA;AAHZ;;AAUQ;EACI;AAPZ;AAUQ;EACI;AARZ;AAWQ;EACI;EACA;EACA;AATZ;AAYQ;EACI;EACA;AAVZ,C;;;;ACtCQ;EACI;EACA;EACA;AADZ;AAEY;EACI;AAAhB;AAEY;EACI;AAAhB,C;;;;ACTI;EACI;AAAR;AAEQ;EACI;EACA;EACA;AAAZ;AAEY;EACI;EACA;EACA;EACA;AAAhB;AACgB;EACI;AACpB;AACgB;EACI;EACA;EACA;AACpB;AAGY;EACI;EACA;EACA;AADhB;AAEgB;EACI;EACA;EACA;AAApB;AAEgB;EACI;AAApB;AAEgB;EACI;AAApB;AAEgB;EACI;AAApB;AAEgB;EACI;AAApB;AAKgB;EACI;EACA;AAHpB;AAIoB;EACI;AAFxB;AAM4B;EACI;AAJhC;AAUoB;EACI;AARxB,C;;;;ACvDI;EACI;EACA;EACA;EACA;AAAR;AAEQ;EACE;EACA;EACA;EACA;AAAV;AAGI;EACI;AADR;AAGI;EACI;AADR;AAEQ;EACI;AAAZ;AAGI;EACI;AADR;AAEQ;EACI;AAAZ;AAGI;EACI;AADR;AAEQ;EACI;AAAZ;AAGI;EACI;AADR,C;;;;AClCI;EACI;AAAR;AAEQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AAAZ;AAEY;EACI;EACA;EACA;AAAhB;AAEgB;EACI;EACA;EACA;AAApB;AAKgB;EACI;AAHpB;AAIoB;EACI;AAFxB;AAMY;EACI;EACA;EACA;EACA;EACA;AAJhB;AAMgB;EACI;EACA;EACA;EACA;AAJpB;AAMgB;EACI;EACA;EACA;EACA;EACA;AAJpB;AAKoB;EACI;AAHxB;AAKoB;EACI;AAHxB;AAKoB;EACI;AAHxB;AAIwB;EACI;EACA;EACA;EACA;EACA;AAF5B;AAKwB;EACI;EACA;EACA;EACA;EACA;EACA;AAH5B;AAK4B;EACI;EACA;EACA;AAHhC;AAM4B;EACI;EACA;EACA;EACA;EACA;EACA;AAJhC;AAMgC;EACI;AAJpC;AAQ4B;EAGI;AARhC;AAYwB;EACI;EACA;AAV5B;AAYwB;EACI;AAV5B;AAsBoB;EACI;AApBxB;AAyBgC;EACI;AAvBpC;AAqC4B;EACI;AAnChC;AA8CoB;EACI;AA5CxB,C;;;;AC5GI;EACI;EACA;EACA;EACA;EACA;AAAR;AAEQ;EACI;EACA;EACA;EACA;EACA;AAAZ;AAOgB;EACI;AALpB;AAWgB;EACI;AATpB;AAegB;EACI;AAbpB,C;;;;ACtBA;EACI;EACA;EACA;EACA;EACA;AACJ,C;;;;ACLE;EACE;AAAJ,C;;;;ACDI;EACI;AAAR;AAIQ;EACI;EACA;EACA;EACA;AAFZ;AAIQ;EACI;AAFZ;AAMI;EACI;AAJR;AAKQ;EACI;AAHZ;AAIY;EACI;EACA;EACA;EACA;EACA;AAFhB;AAGgB;EACI;AADpB,C;;;;AC3BA;EACI;AACJ;;AAGI;EACH;AAAD,C;;;;ACJQ;EACI;EACA;EACA;AADZ;AAKoB;EACI;AAHxB;AAQY;EACI;EACA;AANhB;AAOgB;EACI;AALpB;AAQoB;EACI;AANxB;AAaoB;EACI;AAXxB;AAcgB;EACI;AAZpB;AAkBoB;EACI;AAhBxB;AAiBwB;EACI;AAf5B;AAwBwB;EACI;AAtB5B;AA8BoB;EACI;AA5BxB;AAgCY;EACI;EACA;EACA;EACA;EACA;EACA;AA9BhB;AA+BgB;EACI;AA7BpB,C;;;;AzD3CA;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;A0DlBJ;;A1DsBI;EACI;A0DnBR;;ACjDQ;EACI;ADoDZ;AClDY;EAMI;EACA;AD+ChB;ACrDgB;;;EAGI;ADuDpB;AChDQ;EACI;ADkDZ;ACjDY;EACI;ADmDhB;AC/CQ;EACI;ADiDZ;AChDY;EACI;EACA;ADkDhB;;A1D1EA;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;A0D6DJ;;A1DzDI;EACI;A0D4DR;;ArB/HY;EACI;AqBkIhB;;ArB3HI;EACI;AqB8HR;ArB5HQ;EAHJ;IAIQ;IACA;EqB+HV;AACF;ArB9HQ;EAPJ;IAQQ;IACA;EqBiIV;AACF;ArB/HQ;EACI;AqBiIZ;ArB9HQ;EACI;AqBgIZ;ArB9HY;EAHJ;IAIQ;EqBiId;AACF;ArBhIY;EANJ;IAOQ;EqBmId;AACF;ArBjIY;EAVJ;IAWQ;EqBoId;AACF;ArBnIY;EAbJ;IAcQ;EqBsId;AACF;ArBnIQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AqBqIZ;ArBnIY;EACI;EACA;AqBqIhB;ArBjIQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AqBmIZ;ArBjIY;EATJ;IAUQ;IACA;IACA;EqBoId;AACF;ArBnIY;EAdJ;IAeQ;IACA;IACA;EqBsId;AACF;ArBnIQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AqBqIZ;ArBpIY;EACI;AqBsIhB;ArBpIY;EACI;EACA;AqBsIhB;ArBlIQ;EACI;EACA;EACA;EACA;EACA;EACA;EAUA;EACA;EACA;EACA;AqB2HZ;ArBtIY;EARJ;IASQ;IACA;EqById;AACF;ArBxIY;EAZJ;IAaQ;IACA;EqB2Id;AACF;ArBtIY;EACI;EACA;EACA;EACA;AqBwIhB;ArBrIQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AqBuIZ;ArBrIQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AqBuIZ;ArBrIY;EACI;AqBuIhB;ArBtIgB;EACI;EACA;EACA;EACA;EACA;AqBwIpB;ArBtIgB;EACI;EACA;EACA;EACA;AqBwIpB;ArBvIoB;EACI;AqByIxB;ArBpIY;EACI;EACA;EACA;AqBsIhB;ArBnIY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AqBqIhB;ArBpIgB;EACI;AqBsIpB;ArBlIY;EACI;EACA;AqBoIhB;ArBhIQ;EACI;EACA;EACA;EACA;EACA;EACA;AqBkIZ;ArBjIY;EACI;EACA;EACA;AqBmIhB;ArBjIY;EAEI;EACA;EACA;EACA;AqBkIhB;ArBhIY;EACI;EACA;EACA;EACA;EACA;AqBkIhB;;AE7VY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AFgWhB;AE9VgB;EACI;EACA;AFgWpB;AE9VgB;;EAEI;AFgWpB;AE9VgB;EACI;AFgWpB;AE5VY;EACI;EACA;EACA;AF8VhB;;AGnXI;EACI;AHsXR;AGrXQ;EAFJ;IAGQ;EHwXV;AACF;AGvXQ;EALJ;IAMQ;EH0XV;AACF;AGvXY;EACI;AHyXhB;AGrXQ;EACI;AHuXZ;AGpXQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AHsXZ;AGpXY;EACI;AHsXhB;AGlXQ;EACI;AHoXZ;AGjXQ;EACI;EACA;EACA;AHmXZ;AGjXY;EALJ;IAMQ;IACA;IACA;EHoXd;AACF;AGnXY;EAVJ;IAWQ;IACA;IACA;EHsXd;AACF;AGpXY;EACI;AHsXhB;AGrXgB;EACI;EACA;EACA;EACA;AHuXpB;AGnXY;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AHqXhB;AGnXgB;EACI;EACA;EACA;EACA;AHqXpB;AGlXgB;EACI;AHoXpB;AGlXgB;EACI;EACA;AHoXpB;AGlXgB;EACI;EACA;AHoXpB;AGnXoB;EACI;AHqXxB;AGnXoB;EACI;AHqXxB;AGlXgB;EACI;EACA;EACA;EACA;EACA;AHoXpB;AGnXoB;EACI;AHqXxB;AGnXoB;EACI;AHqXxB;AGlXwB;EACI;AHoX5B;AGjX4B;EACI;AHmXhC;AGzWY;EACI;EACA;EACA;AH2WhB;;AA1eA;;EAEI;EACA;EACA;AA6eJ;;AAxeI;;EACI;AA4eR;AAxeQ;;;;EAEI;AA4eZ;;AAnegB;EACI;EACA;AAsepB;AAreoB;EACI;EACA;AAuexB;AAreoB;E1GThB;EACA;A0GifJ;AAteoB;E1GZhB;EACA;A0GqfJ;AAteoB;EACI;EACA;AAwexB;AArewB;EACI;AAue5B;AA5dgB;EACI;AA8dpB;AAzdgC;EACI;AA2dpC;AAndwB;EACI;AAqd5B;AA7cY;EACI;EACA;AA+chB;AA5cwB;EACI;EACA;AA8c5B;AA1cwB;EACI;EACA;AA4c5B;AAzcoB;EACI;AA2cxB;AA1cwB;EACI;EACA;AA4c5B,C;;;;AIrjBY;EACI;AAFhB;AAKY;EACI;EACA;AAHhB;AAKgB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAHpB;AAIoB;EACI;AAFxB;AAMgB;EACI;AAJpB;AAOgB;EACI;EACA;EACA;AALpB;AAOoB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AALxB;AAOoB;EACI;AALxB;AAMwB;EACI;AAJ5B;AAOoB;EACI;AALxB;AAMwB;EACI;AAJ5B;AAQoB;EACI;AANxB,C;;;;ACnDQ;EACI;AADZ;AAGQ;EACI;AADZ;AAGQ;EACI;AADZ;AAGQ;;EAEI;AADZ;AAGQ;EACI;AADZ,C;;;;ACZQ;EACI;AAFZ;AAMY;EACI;EACA;AAJhB;AAQQ;EACI;EACA;AANZ;AAOY;EACI;AALhB;AASQ;EACI;EACA;AAPZ;AAUQ;EACI;EACA;EACA;AARZ;AASY;EACI;AAPhB,C;;;;ACzBA;EACI;AACJ;AACI;EACI;EACA;AACR;AAAQ;EACI;AAEZ;AAGQ;EACI;AADZ;AAIQ;EACI;EACA;EACA;EACA;AAFZ;AAIQ;EACI;AAFZ;AAOQ;EACI;AALZ;AAOQ;EACI;AALZ;AAOQ;EACI;AALZ;AAOQ;;EAEI;AALZ,C;;;;AChCA;EACI;EACA;AADJ;AAGI;EACI;EACA;AADR;AAII;E5DRA;EACA;EACA;EACA;EACA;E4DOI;EACA;AACR;AACQ;EACI;AACZ;AAGY;EACI;AADhB;AAGY;EACI;EACA;AADhB;AAKQ;EACI;EACA;AAHZ;AAMQ;EACI;EACA;AAJZ;AAOQ;EACI;EACA;AALZ;AAMY;EACI;AAJhB,C;;;;ACtCY;EACI;EACA;AAFhB;AAKY;EACI;AAHhB,C;;;;ACHQ;EACI;AAFZ;AAKQ;EACI;AAHZ;AAIY;EACI;AAFhB;AAMQ;EACI;AAJZ;AAMY;EACI;AAJhB;AAQgB;EACI;EACA;AANpB;AAOoB;EACI;EACA;AALxB,C;;;;ACrBI;EAEI;EACA;EACA;EACA;EACA;EACA;AADR;AAII;EACI;EACA;AAFR;AAKI;EACI;AAHR,C;;;;ACRA;EACI;EACA;EACA;EACA;AALJ;AAOI;EACI;AALR;AAQI;EACI;AANR;AAQI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AANR;AAQI;EACI;EACA;EACA;EACA;EACA;EACA;AANR;AAOQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AALZ;AxHuCI;EwH7BI;IACI;EAPV;AACF;AAUI;EtH/BF;EACA;EACA;EACA;EACA;EACA;EsHwCM;EACA;EACA;EACA;EACA;AAfR;AxHQI;EwHXA;IAGQ;ItHxBR;IACA;EsH6BF;AACF;AxHCI;EwHXA;IAOQ;ItH5BR;IACA;EsHoCF;AACF;AxHNI;EwHXA;IAWQ;ItHhCR;IACA;EsH2CF;AACF;AALQ;EACI;AAOZ,C;;;;AC5EQ;EACI;AAFZ;AAGY;EACI;AADhB;AAKQ;EACI;AAHZ;AAIY;EACI;EACA;AAFhB;AAQI;EACI;EACA;EACA;EACA;AANR;AAQQ;EACI;AANZ;AASQ;EACI;EACA;EACA;EACA;AAPZ;AAYwB;EACI;AAV5B;AAgBY;EACI;EACA;EACA;EACA;EACA;EACA;AAdhB;AAgBgB;EACI;AAdpB;AAkBoB;EACI;AAhBxB;AAqBY;EACI;EACA;EACA;EACA;AAnBhB;AAsBY;EACI;AApBhB;AAqBgB;EACI;AAnBpB;AAuBY;EACI;AArBhB;AA0BoB;EACI;AAxBxB;AA4BgB;EACI;EACA;AA1BpB;AA2BoB;EACI;EACA;AAzBxB;AA0BwB;EACI;AAxB5B;AA4BoB;EACI;EACA;AA1BxB;AA2BwB;EACI;AAzB5B;AA6BoB;EACI;EACA;EACA;EACA;EACA;AA3BxB;AA4BwB;EACI;AA1B5B;AA4BwB;EACI;AA1B5B;AA8BgB;EACI;EACA;AA5BpB;AA8BgB;EACI;EACA;AA5BpB;AA8BgB;EACI;AA5BpB;AA8BgB;EACI;AA5BpB;AA8BgB;EACI;AA5BpB;AAiCY;EACI;EACA;AA/BhB,C;;;;AvE/GA;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;AwElBJ;;AxEsBI;EACI;AwEnBR;;AAxCY;;EACI;AA4ChB;AA1CY;;EACI;AA6ChB;AA3CY;;EACI;EACA;AA8ChB;AAvCY;ExHLV;EACA;EACA;EACA;EACA;EACA;AwH+CF;A1HVI;E0HrCQ;IxHKR;IACA;EwH8CF;AACF;A1HhBI;E0HrCQ;IxHKR;IACA;EwHoDF;AACF;A1HtBI;E0HrCQ;IxHKR;IACA;EwH0DF;AACF,C;;;;AC3FA;EACI;EACA;AACJ,C","sources":["webpack://converse.js/./src/shared/styles/index.scss","webpack://converse.js/./node_modules/bootstrap/scss/_root.scss","webpack://converse.js/./node_modules/bootstrap/scss/vendor/_rfs.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_color-mode.scss","webpack://converse.js/./node_modules/bootstrap/scss/_reboot.scss","webpack://converse.js/./node_modules/bootstrap/scss/_tooltip.scss","webpack://converse.js/./node_modules/bootstrap/scss/_popover.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_utilities.scss","webpack://converse.js/./node_modules/bootstrap/scss/_variables.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack://converse.js/./node_modules/bootstrap/scss/_type.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_lists.scss","webpack://converse.js/./node_modules/bootstrap/scss/_images.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_image.scss","webpack://converse.js/./node_modules/bootstrap/scss/_containers.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_container.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://converse.js/./node_modules/bootstrap/scss/_grid.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_grid.scss","webpack://converse.js/./node_modules/bootstrap/scss/_tables.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_table-variants.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_labels.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_form-text.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_form-control.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_transition.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_gradients.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_form-select.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_form-check.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_form-range.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_floating-labels.scss","webpack://converse.js/./node_modules/bootstrap/scss/forms/_input-group.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_forms.scss","webpack://converse.js/./node_modules/bootstrap/scss/_buttons.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_buttons.scss","webpack://converse.js/./node_modules/bootstrap/scss/_transitions.scss","webpack://converse.js/./node_modules/bootstrap/scss/_dropdown.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_caret.scss","webpack://converse.js/./node_modules/bootstrap/scss/_button-group.scss","webpack://converse.js/./node_modules/bootstrap/scss/_nav.scss","webpack://converse.js/./node_modules/bootstrap/scss/_navbar.scss","webpack://converse.js/./node_modules/bootstrap/scss/_card.scss","webpack://converse.js/./node_modules/bootstrap/scss/_badge.scss","webpack://converse.js/./node_modules/bootstrap/scss/_alert.scss","webpack://converse.js/./node_modules/bootstrap/scss/_progress.scss","webpack://converse.js/./node_modules/bootstrap/scss/_list-group.scss","webpack://converse.js/./node_modules/bootstrap/scss/_close.scss","webpack://converse.js/./node_modules/bootstrap/scss/_modal.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_backdrop.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack://converse.js/./node_modules/bootstrap/scss/_spinners.scss","webpack://converse.js/./node_modules/bootstrap/scss/_placeholders.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_color-bg.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_colored-links.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_focus-ring.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_icon-link.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_ratio.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_position.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_stacks.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_visually-hidden.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_visually-hidden.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_stretched-link.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_text-truncation.scss","webpack://converse.js/./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://converse.js/./node_modules/bootstrap/scss/helpers/_vr.scss","webpack://converse.js/./node_modules/bootstrap/scss/utilities/_api.scss","webpack://converse.js/./src/shared/styles/_variables.scss","webpack://converse.js/./src/shared/styles/themes/nord.scss","webpack://converse.js/./src/shared/styles/themes/classic.scss","webpack://converse.js/./src/shared/styles/themes/dracula.scss","webpack://converse.js/./src/shared/styles/themes/cyberpunk.scss","webpack://converse.js/./src/shared/styles/_core.scss","webpack://converse.js/./src/shared/styles/_mixins.scss","webpack://converse.js/./src/shared/styles/alerts.scss","webpack://converse.js/./src/shared/styles/buttons.scss","webpack://converse.js/./src/shared/styles/badges.scss","webpack://converse.js/./src/shared/styles/card.scss","webpack://converse.js/./src/shared/styles/forms.scss","webpack://converse.js/./src/shared/styles/lists.scss","webpack://converse.js/./src/shared/styles/messages.scss","webpack://converse.js/./src/shared/styles/fonts.scss","webpack://converse.js/./src/plugins/modal/styles/_modal.scss","webpack://converse.js/./src/shared/autocomplete/styles/_autocomplete.scss","webpack://converse.js/./src/templates/styles/spinner.scss","webpack://converse.js/./src/shared/avatar/avatar.scss","webpack://converse.js/./src/plugins/muc-views/styles/moderator-tools.scss","webpack://converse.js/./src/plugins/bookmark-views/styles/bookmarks.scss","webpack://converse.js/./src/plugins/chatboxviews/styles/chats.scss","webpack://converse.js/./src/shared/chat/styles/message-actions.scss","webpack://converse.js/./src/shared/modals/styles/image.scss","webpack://converse.js/./src/shared/components/styles/gif.scss","webpack://converse.js/./src/shared/chat/styles/message-body.scss","webpack://converse.js/./src/shared/components/styles/icon.scss","webpack://converse.js/./src/shared/components/styles/dropdown.scss","webpack://converse.js/./src/shared/components/styles/message-versions.scss","webpack://converse.js/./src/shared/chat/styles/unfurl.scss","webpack://converse.js/./src/shared/chat/styles/retraction.scss","webpack://converse.js/./src/shared/chat/styles/chat-content.scss","webpack://converse.js/./src/shared/chat/styles/emoji.scss","webpack://converse.js/./src/shared/chat/styles/toolbar.scss","webpack://converse.js/./src/plugins/chatview/styles/chat-head.scss","webpack://converse.js/./src/plugins/chatview/styles/chat-bottom-panel.scss","webpack://converse.js/./src/plugins/chatview/styles/index.scss","webpack://converse.js/./src/plugins/chatview/styles/chatbox.scss","webpack://converse.js/./src/plugins/controlbox/styles/loginform.scss","webpack://converse.js/./src/plugins/controlbox/styles/buttons.scss","webpack://converse.js/./src/plugins/controlbox/styles/_controlbox.scss","webpack://converse.js/./src/plugins/headlines-view/styles/headlines.scss","webpack://converse.js/./src/plugins/headlines-view/styles/headlines-head.scss","webpack://converse.js/./src/plugins/mam-views/styles/placeholder.scss","webpack://converse.js/./src/shared/components/styles/split-resize.scss","webpack://converse.js/./src/plugins/muc-views/styles/nickname-form.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-bottom-panel.scss","webpack://converse.js/./src/shared/components/styles/list-filter.scss","webpack://converse.js/./src/plugins/muc-views/styles/occupant-bottom-panel.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-occupant.scss","webpack://converse.js/./src/shared/styles/status.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-occupants.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-sidebar.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-chat-content.scss","webpack://converse.js/./src/plugins/muc-views/modals/styles/config.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-details-modal.scss","webpack://converse.js/./src/shared/components/styles/rich-text.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-head.scss","webpack://converse.js/./src/plugins/muc-views/styles/index.scss","webpack://converse.js/./src/plugins/muc-views/styles/controlbox.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc-forms.scss","webpack://converse.js/./src/plugins/muc-views/styles/muc.scss","webpack://converse.js/./src/plugins/minimize/styles/minimize.scss","webpack://converse.js/./src/plugins/profile/modals/styles/chat-status-modal.scss","webpack://converse.js/./src/plugins/profile/modals/styles/profile.scss","webpack://converse.js/./src/plugins/profile/styles/profile.scss","webpack://converse.js/./src/plugins/register/styles/register.scss","webpack://converse.js/./src/plugins/muc-views/styles/add-muc-modal.scss","webpack://converse.js/./src/plugins/roomslist/styles/roomsgroups.scss","webpack://converse.js/./src/plugins/rootview/styles/root.scss","webpack://converse.js/./src/plugins/rootview/styles/background.scss","webpack://converse.js/./src/plugins/rosterview/styles/roster.scss","webpack://converse.js/./src/plugins/singleton/singleton.scss","webpack://converse.js/./src/plugins/fullscreen/styles/fullscreen.scss"],"sourcesContent":["/*!\r\n * Converse.js (Web-based XMPP instant messaging client)\r\n * https://conversejs.org\r\n *\r\n * Copyright (c) 2013-2021, JC Brand \r\n * Licensed under the Mozilla Public License\r\n */\r\n\r\n// Set custom bootstrap prefix (default is bs-) to avoid clashes\r\n$prefix: 'converse-';\r\n\r\n\r\n@import \"bootstrap/scss/functions\";\r\n@import \"bootstrap/scss/variables\";\r\n@import \"bootstrap/scss/variables-dark\";\r\n@import \"bootstrap/scss/maps\";\r\n@import \"bootstrap/scss/mixins\";\r\n@import \"bootstrap/scss/utilities\";\r\n@import \"bootstrap/scss/root\";\r\n\r\n.conversejs, converse-bg {\r\n @import \"bootstrap/scss/reboot\";\r\n @import \"bootstrap/scss/type\";\r\n @import \"bootstrap/scss/images\";\r\n @import \"bootstrap/scss/containers\";\r\n @import \"bootstrap/scss/grid\";\r\n @import \"bootstrap/scss/tables\";\r\n @import \"bootstrap/scss/forms\";\r\n @import \"bootstrap/scss/buttons\";\r\n @import \"bootstrap/scss/transitions\";\r\n @import \"bootstrap/scss/dropdown\";\r\n @import \"bootstrap/scss/button-group\";\r\n @import \"bootstrap/scss/nav\";\r\n @import \"bootstrap/scss/navbar\";\r\n @import \"bootstrap/scss/card\";\r\n // @import \"bootstrap/scss/accordion\";\r\n // @import \"bootstrap/scss/breadcrumb\";\r\n // @import \"bootstrap/scss/pagination\";\r\n @import \"bootstrap/scss/badge\";\r\n @import \"bootstrap/scss/alert\";\r\n @import \"bootstrap/scss/progress\";\r\n @import \"bootstrap/scss/list-group\";\r\n @import \"bootstrap/scss/close\";\r\n // @import \"bootstrap/scss/toasts\";\r\n @import \"bootstrap/scss/modal\";\r\n @import \"bootstrap/scss/tooltip\";\r\n @import \"bootstrap/scss/popover\";\r\n // @import \"bootstrap/scss/carousel\";\r\n @import \"bootstrap/scss/spinners\";\r\n // @import \"bootstrap/scss/offcanvas\";\r\n @import \"bootstrap/scss/placeholders\";\r\n @import \"bootstrap/scss/helpers\";\r\n @import \"bootstrap/scss/utilities/api\";\r\n\r\n}\r\n\r\n@import \"variables\";\r\n@import \"mixins\";\r\n\r\n.conversejs, converse-bg {\r\n @import \"themes/nord\";\r\n @import \"themes/classic\";\r\n @import \"themes/dracula\";\r\n @import \"themes/cyberpunk\";\r\n}\r\n\r\n@import \"core\";\r\n@import \"alerts\";\r\n@import \"buttons\";\r\n@import \"badges\";\r\n@import \"card\";\r\n@import \"forms\";\r\n@import \"lists\";\r\n@import \"messages\";\r\n@import \"fonts\";\r\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-``; +}; +const connection_url_input = () => { + const i18n_connection_url = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Connection URL'); + const i18n_form_help = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('HTTP or websocket URL that is used to connect to your XMPP server'); + const i18n_placeholder = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('e.g. wss://example.org/xmpp-websocket'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

${i18n_form_help}

`; +}; +const password_input = () => { + const i18n_password = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Password'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
`; +}; +const tplRegisterLink = () => { + const i18n_create_account = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Create an account'); + const i18n_hint_no_account = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)("Don't have a chat account?"); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

${i18n_hint_no_account}

`; +}; +const tplShowRegisterLink = () => { + return _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('allow_registration') && !_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('auto_login') && _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.pluggable.plugins['converse-register'].enabled(_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse); +}; +const auth_fields = el => { + const authentication = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('authentication'); + const i18n_login = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Log in'); + const i18n_xmpp_address = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('XMPP Address'); + const locked_domain = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('locked_domain'); + const default_domain = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('default_domain'); + const placeholder_username = (locked_domain || default_domain) && (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Username') || (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('user@domain'); + const show_trust_checkbox = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('allow_user_trust_override'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
${authentication !== EXTERNAL ? password_input() : ''} ${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('show_connection_url_input') ? connection_url_input() : ''} ${show_trust_checkbox ? trust_checkbox(show_trust_checkbox === 'off' ? false : true) : ''}
${tplShowRegisterLink() ? tplRegisterLink() : ''}`; +}; +const form_fields = el => { + const authentication = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('authentication'); + const i18n_disconnected = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Disconnected'); + const i18n_anon_login = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Click here to log in anonymously'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${authentication == LOGIN || authentication == EXTERNAL ? auth_fields(el) : ''} ${authentication == ANONYMOUS ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''} ${authentication == PREBIND ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

${i18n_disconnected}

` : ''}`; +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const { + connfeedback + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + const connection_status = connfeedback.get('connection_status'); + let feedback_class, pretty_status; + if (_constants_js__WEBPACK_IMPORTED_MODULE_4__.REPORTABLE_STATUSES.includes(connection_status)) { + pretty_status = _constants_js__WEBPACK_IMPORTED_MODULE_4__.PRETTY_CONNECTION_STATUS[connection_status]; + feedback_class = _constants_js__WEBPACK_IMPORTED_MODULE_4__.CONNECTION_STATUS_CSS_CLASS[connection_status]; + } + const conn_feedback_message = connfeedback.get('message'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
${CONNECTION_STATUS[connection_status] === 'CONNECTING' ? (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_3__["default"])() : form_fields(el)}
`; +}); + +/***/ }), + +/***/ "./src/plugins/controlbox/templates/navback.js": +/*!*****************************************************!*\ + !*** ./src/plugins/controlbox/templates/navback.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/controlbox/utils.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (jid => { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; +}); + +/***/ }), + +/***/ "./src/plugins/controlbox/templates/toggle.js": +/*!****************************************************!*\ + !*** ./src/plugins/controlbox/templates/toggle.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/controlbox/utils.js"); + + + + + +/** + * @param {import('../toggle').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_toggle = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.connection.connected() ? (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Chat Contacts') : (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Toggle chat'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; +}); + +/***/ }), + +/***/ "./src/plugins/controlbox/toggle.js": +/*!******************************************!*\ + !*** ./src/plugins/controlbox/toggle.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_toggle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/toggle.js */ "./src/plugins/controlbox/templates/toggle.js"); + + + +class ControlBoxToggle extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + async connectedCallback() { + super.connectedCallback(); + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.waitUntil('initialized'); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state; + this.model = chatboxes.get('controlbox'); + this.listenTo(this.model, 'change:closed', () => this.requestUpdate()); + this.requestUpdate(); + } + render() { + return (0,_templates_toggle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-controlbox-toggle', ControlBoxToggle); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ControlBoxToggle); + +/***/ }), + +/***/ "./src/plugins/controlbox/utils.js": +/*!*****************************************!*\ + !*** ./src/plugins/controlbox/utils.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ addControlBox: () => (/* binding */ addControlBox), +/* harmony export */ clearSession: () => (/* binding */ clearSession), +/* harmony export */ disconnect: () => (/* binding */ disconnect), +/* harmony export */ logOut: () => (/* binding */ logOut), +/* harmony export */ navigateToControlBox: () => (/* binding */ navigateToControlBox), +/* harmony export */ onChatBoxesFetched: () => (/* binding */ onChatBoxesFetched), +/* harmony export */ showControlBox: () => (/* binding */ showControlBox), +/* harmony export */ updateSettingsWithFormData: () => (/* binding */ updateSettingsWithFormData), +/* harmony export */ validateJID: () => (/* binding */ validateJID) +/* harmony export */ }); +/* harmony import */ var i18n_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n/index.js */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + +const { + Strophe, + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +function addControlBox() { + const m = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxes.add(new _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.exports.ControlBox({ + 'id': 'controlbox' + })); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxviews.get('controlbox')?.setModel(); + return m; +} + +/** + * @param {Event} [ev] + */ +function showControlBox(ev) { + ev?.preventDefault?.(); + const controlbox = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxes.get('controlbox') || addControlBox(); + u.safeSave(controlbox, { + 'closed': false + }); +} + +/** + * @param {string} jid + */ +function navigateToControlBox(jid) { + showControlBox(); + const model = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxes.get(jid); + u.safeSave(model, { + 'hidden': true + }); +} +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 model = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxes?.get('controlbox'); + if (model) u.safeSave(model, { + 'connected': false + }); +} +function clearSession() { + const { + chatboxviews + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + const view = chatboxviews?.get('controlbox'); + if (view) { + u.safeSave(view.model, { + 'connected': false + }); + if (view?.controlbox_pane) { + view.controlbox_pane.remove(); + delete view.controlbox_pane; + } + } +} + +/** + * @param {MouseEvent} ev + */ +async function logOut(ev) { + ev?.preventDefault(); + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.confirm((0,i18n_index_js__WEBPACK_IMPORTED_MODULE_0__.__)("Are you sure you want to log out?")); + if (result) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.user.logout(); + } +} +function onChatBoxesFetched() { + const controlbox = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxes.get('controlbox') || addControlBox(); + controlbox.save({ + 'connected': true + }); +} + +/** + * Given the login `
` element, parse its data and update the + * converse settings with the supplied JID, password and connection URL. + * @param {HTMLFormElement} form + * @param {Object} settings - Extra settings that may be passed in and will + * also be set together with the form settings. + */ +function updateSettingsWithFormData(form, settings = {}) { + const form_data = new FormData(form); + const connection_url = /** @type {string} */form_data.get('connection-url'); + if (connection_url?.startsWith('ws')) { + settings['websocket_url'] = connection_url; + } else if (connection_url?.startsWith('http')) { + settings['bosh_service_url'] = connection_url; + } + let jid = /** @type {string} */form_data.get('jid'); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('locked_domain')) { + const last_part = '@' + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('locked_domain'); + if (jid.endsWith(last_part)) { + jid = jid.substr(0, jid.length - last_part.length); + } + jid = Strophe.escapeNode(jid) + last_part; + } else if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('default_domain') && !jid.includes('@')) { + jid = jid + '@' + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('default_domain'); + } + settings['jid'] = jid; + settings['password'] = form_data.get('password'); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.set(settings); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.config.save({ + 'trusted': form_data.get('trusted') && true || false + }); +} + +/** + * @param {HTMLFormElement} form + */ +function validateJID(form) { + const jid_element = /** @type {HTMLInputElement} */form.querySelector('input[name=jid]'); + if (jid_element.value && !_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('locked_domain') && !_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('default_domain') && !u.isValidJID(jid_element.value)) { + jid_element.setCustomValidity((0,i18n_index_js__WEBPACK_IMPORTED_MODULE_0__.__)('Please enter a valid XMPP address')); + return false; + } + jid_element.setCustomValidity(''); + return true; +} + +/***/ }), + +/***/ "./src/plugins/dragresize/components/dragresize.js": +/*!*********************************************************!*\ + !*** ./src/plugins/dragresize/components/dragresize.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _templates_dragresize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../templates/dragresize.js */ "./src/plugins/dragresize/templates/dragresize.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class ConverseDragResize extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + render() { + // eslint-disable-line class-methods-use-this + return (0,_templates_dragresize_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-dragresize', ConverseDragResize); + +/***/ }), + +/***/ "./src/plugins/dragresize/index.js": +/*!*****************************************!*\ + !*** ./src/plugins/dragresize/index.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_dragresize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/dragresize.js */ "./src/plugins/dragresize/components/dragresize.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/dragresize/utils.js"); +/* harmony import */ var _mixin_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mixin.js */ "./src/plugins/dragresize/mixin.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.plugins.add('converse-dragresize', { + /* Plugin dependencies are other plugins which might be + * overridden or relied upon, and therefore need to be loaded before + * this plugin. + */ + dependencies: ['converse-chatview', 'converse-headlines-view', 'converse-muc-views'], + enabled() { + return _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('view_mode') == 'overlayed'; + }, + initialize() { + /* The initialize function gets called as soon as the plugin is + * loaded by converse.js's plugin machinery. + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.extend({ + 'allow_dragresize': true + }); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.exports.ChatView?.prototype ?? {}, _mixin_js__WEBPACK_IMPORTED_MODULE_2__["default"]); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.exports.MUCView?.prototype ?? {}, _mixin_js__WEBPACK_IMPORTED_MODULE_2__["default"]); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.exports.HeadlinesFeedView?.prototype ?? {}, _mixin_js__WEBPACK_IMPORTED_MODULE_2__["default"]); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.exports.ControlBoxView?.prototype ?? {}, _mixin_js__WEBPACK_IMPORTED_MODULE_2__["default"]); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('headlinesFeedInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_1__.initializeDragResize); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('chatBoxInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_1__.initializeDragResize); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('chatRoomInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_1__.initializeDragResize); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('registeredGlobalEventHandlers', _utils_js__WEBPACK_IMPORTED_MODULE_1__.registerGlobalEventHandlers); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('unregisteredGlobalEventHandlers', _utils_js__WEBPACK_IMPORTED_MODULE_1__.unregisterGlobalEventHandlers); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('beforeShowingChatView', view => view.initDragResize().setDimensions()); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('startDiagonalResize', _utils_js__WEBPACK_IMPORTED_MODULE_1__.dragresizeOverIframeHandler); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('startHorizontalResize', _utils_js__WEBPACK_IMPORTED_MODULE_1__.dragresizeOverIframeHandler); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.listen.on('startVerticalResize', _utils_js__WEBPACK_IMPORTED_MODULE_1__.dragresizeOverIframeHandler); + } +}); + +/***/ }), + +/***/ "./src/plugins/dragresize/mixin.js": +/*!*****************************************!*\ + !*** ./src/plugins/dragresize/mixin.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lodash_es_debounce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es/debounce */ "./node_modules/lodash-es/debounce.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/dragresize/utils.js"); + + + +const DragResizableMixin = { + initDragResize() { + const debouncedSetDimensions = (0,lodash_es_debounce__WEBPACK_IMPORTED_MODULE_2__["default"])(() => this.setDimensions()); + window.addEventListener('resize', debouncedSetDimensions); + this.listenTo(this.model, 'destroy', () => window.removeEventListener('resize', debouncedSetDimensions)); + + // Determine and store the default box size. + // We need this information for the drag-resizing feature. + const flyout = this.querySelector('.box-flyout'); + const style = window.getComputedStyle(flyout); + if (this.model.get('height') === undefined) { + const height = parseInt(style.height.replace(/px$/, ''), 10); + const width = parseInt(style.width.replace(/px$/, ''), 10); + this.model.set('height', height); + this.model.set('default_height', height); + this.model.set('width', width); + this.model.set('default_width', width); + } + const min_width = style['min-width']; + const min_height = style['min-height']; + this.model.set('min_width', min_width.endsWith('px') ? Number(min_width.replace(/px$/, '')) : 0); + this.model.set('min_height', min_height.endsWith('px') ? Number(min_height.replace(/px$/, '')) : 0); + // Initialize last known mouse position + this.prev_pageY = 0; + this.prev_pageX = 0; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get()?.connected) { + this.height = this.model.get('height'); + this.width = this.model.get('width'); + } + return this; + }, + resizeChatBox(ev) { + let diff; + const direction = (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.getResizingDirection)(); + if (direction.indexOf('top') === 0) { + diff = ev.pageY - this.prev_pageY; + if (diff) { + this.height = this.height - diff > (this.model.get('min_height') || 0) ? this.height - diff : this.model.get('min_height'); + this.prev_pageY = ev.pageY; + this.setChatBoxHeight(this.height); + } + } + if (direction.includes('left')) { + diff = this.prev_pageX - ev.pageX; + if (diff) { + this.width = this.width + diff > (this.model.get('min_width') || 0) ? this.width + diff : this.model.get('min_width'); + this.prev_pageX = ev.pageX; + this.setChatBoxWidth(this.width); + } + } + }, + setDimensions() { + // Make sure the chat box has the right height and width. + this.adjustToViewport(); + this.setChatBoxWidth(this.model.get('width')); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('view_mode') === 'overlayed') { + this.setChatBoxHeight(this.model.get('height')); + } + }, + setChatBoxHeight(height) { + if (height) { + height = (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.applyDragResistance)(height, this.model.get('default_height')) + 'px'; + } else { + height = ''; + } + const flyout_el = this.querySelector('.box-flyout'); + if (flyout_el !== null) { + flyout_el.style.height = height; + } + }, + setChatBoxWidth(width) { + if (width) { + width = (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.applyDragResistance)(width, this.model.get('default_width')) + 'px'; + } else { + width = ''; + } + this.style.width = width; + const flyout_el = this.querySelector('.box-flyout'); + if (flyout_el !== null) { + flyout_el.style.width = width; + } + }, + adjustToViewport() { + /* Event handler called when viewport gets resized. We remove + * custom width/height from chat boxes. + */ + const viewport_width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); + const viewport_height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); + if (viewport_width <= 480) { + this.model.set('height', undefined); + this.model.set('width', undefined); + } else if (viewport_width <= this.model.get('width')) { + this.model.set('width', undefined); + } else if (viewport_height <= this.model.get('height')) { + this.model.set('height', undefined); + } + } +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DragResizableMixin); + +/***/ }), + +/***/ "./src/plugins/dragresize/templates/dragresize.js": +/*!********************************************************!*\ + !*** ./src/plugins/dragresize/templates/dragresize.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/dragresize/utils.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (() => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
`); + +/***/ }), + +/***/ "./src/plugins/dragresize/utils.js": +/*!*****************************************!*\ + !*** ./src/plugins/dragresize/utils.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ applyDragResistance: () => (/* binding */ applyDragResistance), +/* harmony export */ dragresizeOverIframeHandler: () => (/* binding */ dragresizeOverIframeHandler), +/* harmony export */ getResizingDirection: () => (/* binding */ getResizingDirection), +/* harmony export */ initializeDragResize: () => (/* binding */ initializeDragResize), +/* harmony export */ onMouseMove: () => (/* binding */ onMouseMove), +/* harmony export */ onMouseUp: () => (/* binding */ onMouseUp), +/* harmony export */ onStartDiagonalResize: () => (/* binding */ onStartDiagonalResize), +/* harmony export */ onStartHorizontalResize: () => (/* binding */ onStartHorizontalResize), +/* harmony export */ onStartVerticalResize: () => (/* binding */ onStartVerticalResize), +/* harmony export */ registerGlobalEventHandlers: () => (/* binding */ registerGlobalEventHandlers), +/* harmony export */ unregisterGlobalEventHandlers: () => (/* binding */ unregisterGlobalEventHandlers) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + +const { + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +function registerGlobalEventHandlers() { + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); +} +function unregisterGlobalEventHandlers() { + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); +} + +/** + * This function registers mousedown and mouseup events hadlers to + * all iframes in the DOM when converse UI resizing events are called + * to prevent mouse drag stutter effect which is bad user experience. + * @param {Element} e - dragging node element. + */ +function dragresizeOverIframeHandler(e) { + const iframes = Array.from(document.getElementsByTagName('iframe')); + for (const iframe of iframes) { + e.addEventListener('mousedown', () => { + iframe.style.pointerEvents = 'none'; + }, { + once: true + }); + e.addEventListener('mouseup', () => { + iframe.style.pointerEvents = 'initial'; + }, { + once: true + }); + } +} + +/** + * @param {import('@converse/headless/types/shared/chatbox').default} model + */ +function initializeDragResize(model) { + const height = model.get('height'); + const width = model.get('width'); + u.safeSave(model, { + 'height': applyDragResistance(height, model.get('default_height')), + 'width': applyDragResistance(width, model.get('default_width')) + }); +} + +/** + * @typedef {Object} ResizingData + * @property {HTMLElement} chatbox + * @property {string} direction + */ +const resizing = {}; + +/** + * @returns {string} + */ +function getResizingDirection() { + return resizing.direction; +} +function onStartVerticalResize(ev, trigger = true) { + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('allow_dragresize')) { + return true; + } + ev.preventDefault(); + // Record element attributes for mouseMove(). + const flyout = u.ancestor(ev.target, '.box-flyout'); + const style = window.getComputedStyle(flyout); + const chatbox_el = flyout.parentElement; + chatbox_el.height = parseInt(style.height.replace(/px$/, ''), 10); + resizing.chatbox = chatbox_el; + resizing.direction = 'top'; + chatbox_el.prev_pageY = ev.pageY; + if (trigger) { + /** + * Triggered once the user starts to vertically resize a {@link _converse.ChatBoxView} + * @event _converse#startVerticalResize + * @example _converse.api.listen.on('startVerticalResize', (view) => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger('startVerticalResize', chatbox_el); + } +} +function onStartHorizontalResize(ev, trigger = true) { + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('allow_dragresize')) { + return true; + } + ev.preventDefault(); + const flyout = u.ancestor(ev.target, '.box-flyout'); + const style = window.getComputedStyle(flyout); + const chatbox_el = flyout.parentElement; + chatbox_el.width = parseInt(style.width.replace(/px$/, ''), 10); + resizing.chatbox = chatbox_el; + resizing.direction = 'left'; + chatbox_el.prev_pageX = ev.pageX; + if (trigger) { + /** + * Triggered once the user starts to horizontally resize a {@link _converse.ChatBoxView} + * @event _converse#startHorizontalResize + * @example _converse.api.listen.on('startHorizontalResize', (view) => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger('startHorizontalResize', chatbox_el); + } +} +function onStartDiagonalResize(ev) { + onStartHorizontalResize(ev, false); + onStartVerticalResize(ev, false); + resizing.direction = 'topleft'; + /** + * Triggered once the user starts to diagonally resize a {@link _converse.ChatBoxView} + * @event _converse#startDiagonalResize + * @example _converse.api.listen.on('startDiagonalResize', (view) => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger('startDiagonalResize', this); +} + +/** + * Applies some resistance to `value` around the `default_value`. + * If value is close enough to `default_value`, then it is returned, otherwise + * `value` is returned. + * @param { number } value + * @param { number } default_value + * @returns { number } + */ +function applyDragResistance(value, default_value) { + if (value === undefined) { + return undefined; + } else if (default_value === undefined) { + return value; + } + const resistance = 10; + if (value !== default_value && Math.abs(value - default_value) < resistance) { + return default_value; + } + return value; +} +function onMouseMove(ev) { + if (!resizing.chatbox || !_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('allow_dragresize')) { + return true; + } + ev.preventDefault(); + resizing.chatbox.resizeChatBox(ev); +} +function onMouseUp(ev) { + if (!resizing.chatbox || !_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('allow_dragresize')) { + return true; + } + ev.preventDefault(); + const height = applyDragResistance(resizing.chatbox.height, resizing.chatbox.model.get('default_height')); + const width = applyDragResistance(resizing.chatbox.width, resizing.chatbox.model.get('default_width')); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.connected()) { + resizing.chatbox.model.save({ + 'height': height + }); + resizing.chatbox.model.save({ + 'width': width + }); + } else { + resizing.chatbox.model.set({ + 'height': height + }); + resizing.chatbox.model.set({ + 'width': width + }); + } + delete resizing.chatbox; + delete resizing.direction; +} + +/***/ }), + +/***/ "./src/plugins/fullscreen/index.js": +/*!*****************************************!*\ + !*** ./src/plugins/fullscreen/index.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_fullscreen_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./styles/fullscreen.scss */ "./src/plugins/fullscreen/styles/fullscreen.scss"); +/** + * @module converse-fullscreen + * @license Mozilla Public License (MPLv2) + * @copyright 2022, the Converse.js contributors + */ + + +const { + isUniView +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u; +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-fullscreen', { + enabled() { + return isUniView(); + }, + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + chatview_avatar_height: 50, + chatview_avatar_width: 50, + hide_open_bookmarks: true, + show_controlbox_by_default: true, + sticky_controlbox: true + }); + } +}); + +/***/ }), + +/***/ "./src/plugins/headlines-view/feed-list.js": +/*!*************************************************!*\ + !*** ./src/plugins/headlines-view/feed-list.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HeadlinesFeedsList: () => (/* binding */ HeadlinesFeedsList) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_feeds_list_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/feeds-list.js */ "./src/plugins/headlines-view/templates/feeds-list.js"); + + + +const { + HEADLINES_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; + +/** + * Custom element which renders a list of headline feeds + * @class + * @namespace _converse.HeadlinesFeedsList + * @memberOf _converse + */ +class HeadlinesFeedsList extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + initialize() { + this.model = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes; + this.listenTo(this.model, 'add', m => this.renderIfHeadline(m)); + this.listenTo(this.model, 'remove', m => this.renderIfHeadline(m)); + this.listenTo(this.model, 'destroy', m => this.renderIfHeadline(m)); + this.requestUpdate(); + } + render() { + return (0,_templates_feeds_list_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + renderIfHeadline(model) { + return model?.get('type') === HEADLINES_TYPE && this.requestUpdate(); + } + async openHeadline(ev) { + ev.preventDefault(); + const jid = ev.target.getAttribute('data-headline-jid'); + const feed = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.headlines.get(jid); + feed.maybeShow(true); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-headlines-feeds-list', HeadlinesFeedsList); + +/***/ }), + +/***/ "./src/plugins/headlines-view/heading.js": +/*!***********************************************!*\ + !*** ./src/plugins/headlines-view/heading.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ HeadlinesHeading) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _templates_chat_head_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/chat-head.js */ "./src/plugins/headlines-view/templates/chat-head.js"); + + + + +class HeadlinesHeading extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + constructor() { + super(); + this.jid = null; + } + static get properties() { + return { + 'jid': { + type: String + } + }; + } + async initialize() { + this.model = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.get(this.jid); + await this.model.initialized; + this.requestUpdate(); + } + render() { + return (0,_templates_chat_head_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ + ...this.model.toJSON(), + ...{ + 'display_name': this.model.getDisplayName(), + 'heading_buttons_promise': this.getHeadingButtons() + } + }); + } + + /** + * Returns a list of objects which represent buttons for the headlines header. + * @async + * @emits _converse#getHeadingButtons + * @method HeadlinesHeading#getHeadingButtons + */ + getHeadingButtons() { + const buttons = []; + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('singleton')) { + buttons.push({ + 'a_class': 'close-chatbox-button', + 'handler': ev => this.close(ev), + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Close'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Close these announcements'), + 'icon_class': 'fa-times', + 'name': 'close', + 'standalone': _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('view_mode') === 'overlayed' + }); + } + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.api.hook('getHeadingButtons', this, buttons); + } + close(ev) { + ev.preventDefault(); + this.model.close(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-headlines-heading', HeadlinesHeading); + +/***/ }), + +/***/ "./src/plugins/headlines-view/index.js": +/*!*********************************************!*\ + !*** ./src/plugins/headlines-view/index.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _chatview_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../chatview/index.js */ "./src/plugins/chatview/index.js"); +/* harmony import */ var _view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view.js */ "./src/plugins/headlines-view/view.js"); +/* harmony import */ var _feed_list_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./feed-list.js */ "./src/plugins/headlines-view/feed-list.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_headlines_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/headlines.scss */ "./src/plugins/headlines-view/styles/headlines.scss"); +/* harmony import */ var _styles_headlines_head_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/headlines-head.scss */ "./src/plugins/headlines-view/styles/headlines-head.scss"); +/** + * @module converse-headlines-view + * @copyright 2022, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + + + + +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.plugins.add('converse-headlines-view', { + /* Plugin dependencies are other plugins which might be + * overridden or relied upon, and therefore need to be loaded before + * this plugin. + * + * If the setting "strict_plugin_dependencies" is set to true, + * an error will be raised if the plugin is not found. By default it's + * false, which means these plugins are only loaded opportunistically. + * + * NB: These plugins need to have already been loaded by the bundler + */ + dependencies: ['converse-headlines', 'converse-chatview'], + initialize() { + const exports = { + HeadlinesFeedView: _view_js__WEBPACK_IMPORTED_MODULE_1__["default"], + HeadlinesFeedsList: _feed_list_js__WEBPACK_IMPORTED_MODULE_2__.HeadlinesFeedsList, + HeadlinesPanel: _feed_list_js__WEBPACK_IMPORTED_MODULE_2__.HeadlinesFeedsList // DEPRECATED + }; + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse, exports); // DEPRECATED + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.exports, exports); + } +}); + +/***/ }), + +/***/ "./src/plugins/headlines-view/templates/chat-head.js": +/*!***********************************************************!*\ + !*** ./src/plugins/headlines-view/templates/chat-head.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/chat/utils.js */ "./src/shared/chat/utils.js"); + + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
${!_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.api.settings.get("singleton") ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`` : ''}
${o.display_name}
${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__.until)((0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_3__.getDropdownButtons)(o.heading_buttons_promise), '')} ${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__.until)((0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_3__.getStandaloneButtons)(o.heading_buttons_promise), '')}
${o.status ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`

${o.status}

` : ''}`; +}); + +/***/ }), + +/***/ "./src/plugins/headlines-view/templates/feeds-list.js": +/*!************************************************************!*\ + !*** ./src/plugins/headlines-view/templates/feeds-list.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +const { + HEADLINES_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.constants; +function tplHeadlinesFeedsListItem(el, feed) { + const open_title = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Click to open this server message'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)``; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const feeds = el.model.filter(m => m.get('type') === HEADLINES_TYPE); + const heading_headline = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Announcements'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
${heading_headline}
${feeds.map(feed => tplHeadlinesFeedsListItem(el, feed))}
`; +}); + +/***/ }), + +/***/ "./src/plugins/headlines-view/templates/headlines.js": +/*!***********************************************************!*\ + !*** ./src/plugins/headlines-view/templates/headlines.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _heading_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../heading.js */ "./src/plugins/headlines-view/heading.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (model => (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
${model ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
` : ''}
`); + +/***/ }), + +/***/ "./src/plugins/headlines-view/view.js": +/*!********************************************!*\ + !*** ./src/plugins/headlines-view/view.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_chat_baseview_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/chat/baseview.js */ "./src/shared/chat/baseview.js"); +/* harmony import */ var _templates_headlines_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/headlines.js */ "./src/plugins/headlines-view/templates/headlines.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class HeadlinesFeedView extends shared_chat_baseview_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + async initialize() { + const { + chatboxviews, + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state; + chatboxviews.add(this.jid, this); + this.model = chatboxes.get(this.jid); + this.listenTo(this.model, 'change:hidden', () => this.afterShown()); + this.listenTo(this.model, 'destroy', this.remove); + this.listenTo(this.model.messages, 'add', () => this.requestUpdate()); + this.listenTo(this.model.messages, 'remove', () => this.requestUpdate()); + this.listenTo(this.model.messages, 'reset', () => this.requestUpdate()); + document.addEventListener('visibilitychange', () => this.onWindowStateChanged()); + await this.model.messages.fetched; + this.model.maybeShow(); + /** + * Triggered once the {@link HeadlinesFeedView} has been initialized + * @event _converse#headlinesBoxViewInitialized + * @type {HeadlinesFeedView} + * @example _converse.api.listen.on('headlinesBoxViewInitialized', view => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.trigger('headlinesBoxViewInitialized', this); + } + render() { + return (0,_templates_headlines_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this.model); + } + + /** + * @param {Event} ev + */ + async close(ev) { + ev?.preventDefault?.(); + if (location.hash === 'converse/chat?jid=' + this.model.get('jid')) { + history.pushState(null, '', window.location.pathname); + } + await this.model.close(ev); + return this; + } + getNotifications() { + // eslint-disable-line class-methods-use-this + // Override method in ChatBox. We don't show notifications for + // headlines boxes. + return []; + } + afterShown() { + this.model.clearUnreadMsgCounter(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-headlines', HeadlinesFeedView); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HeadlinesFeedView); + +/***/ }), + +/***/ "./src/plugins/mam-views/index.js": +/*!****************************************!*\ + !*** ./src/plugins/mam-views/index.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _placeholder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./placeholder.js */ "./src/plugins/mam-views/placeholder.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/mam-views/utils.js"); +/** + * @description UI code XEP-0313 Message Archive Management + * @copyright 2021, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.plugins.add('converse-mam-views', { + dependencies: ['converse-mam', 'converse-chatview', 'converse-muc-views'], + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.listen.on('chatBoxScrolledUp', _utils_js__WEBPACK_IMPORTED_MODULE_2__.fetchMessagesOnScrollUp); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.listen.on('getMessageTemplate', _utils_js__WEBPACK_IMPORTED_MODULE_2__.getPlaceholderTemplate); + } +}); + +/***/ }), + +/***/ "./src/plugins/mam-views/placeholder.js": +/*!**********************************************!*\ + !*** ./src/plugins/mam-views/placeholder.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_placeholder_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/placeholder.js */ "./src/plugins/mam-views/templates/placeholder.js"); +/* harmony import */ var _styles_placeholder_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/placeholder.scss */ "./src/plugins/mam-views/styles/placeholder.scss"); + + + + +class Placeholder extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + 'model': { + type: Object + } + }; + } + constructor() { + super(); + this.model = null; + } + render() { + return (0,_templates_placeholder_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + async fetchMissingMessages(ev) { + ev?.preventDefault?.(); + this.model.set('fetching', true); + const options = { + 'before': this.model.get('before'), + 'start': this.model.get('start') + }; + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.mam.fetchArchivedMessages(this.model.collection.chatbox, options); + this.model.destroy(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-mam-placeholder', Placeholder); + +/***/ }), + +/***/ "./src/plugins/mam-views/templates/placeholder.js": +/*!********************************************************!*\ + !*** ./src/plugins/mam-views/templates/placeholder.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit_html_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/html.js */ "./node_modules/lit/html.js"); + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + return el.model.get('fetching') ? (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ + 'classes': 'hor_centered' + }) : (0,lit_html_js__WEBPACK_IMPORTED_MODULE_2__.html)`
`; +}); + +/***/ }), + +/***/ "./src/plugins/mam-views/utils.js": +/*!****************************************!*\ + !*** ./src/plugins/mam-views/utils.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ fetchMessagesOnScrollUp: () => (/* binding */ fetchMessagesOnScrollUp), +/* harmony export */ getPlaceholderTemplate: () => (/* binding */ getPlaceholderTemplate) +/* harmony export */ }); +/* harmony import */ var lit_html_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/html.js */ "./node_modules/lit/html.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/** + * @typedef {import('../chatview/chat.js').default} ChatView + * @typedef {import('../muc-views/muc.js').default} MUCView + */ + + +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +function getPlaceholderTemplate(message, tpl) { + if (message instanceof _converse_headless__WEBPACK_IMPORTED_MODULE_1__.MAMPlaceholderMessage) { + return (0,lit_html_js__WEBPACK_IMPORTED_MODULE_0__.html)``; + } else { + return tpl; + } +} + +/** + * @param {ChatView|MUCView} view + */ +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') === CHATROOMS_TYPE; + const oldest_message = view.model.getOldestMessage(); + if (oldest_message) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + const by_jid = is_groupchat ? view.model.get('jid') : bare_jid; + const stanza_id = oldest_message.get(`stanza_id ${by_jid}`); + view.model.ui.set('chat-content-spinner-top', true); + try { + if (stanza_id) { + await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.mam.fetchArchivedMessages(view.model, { + 'before': stanza_id + }); + } else { + await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.mam.fetchArchivedMessages(view.model, { + 'end': oldest_message.get('time') + }); + } + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + view.model.ui.set('chat-content-spinner-top', false); + return; + } + if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('allow_url_history_change')) { + history.pushState(null, '', `#${oldest_message.get('msgid')}`); + } + setTimeout(() => view.model.ui.set('chat-content-spinner-top', false), 250); + } + } +} + +/***/ }), + +/***/ "./src/plugins/minimize/index.js": +/*!***************************************!*\ + !*** ./src/plugins/minimize/index.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var lodash_es_debounce__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es/debounce */ "./node_modules/lodash-es/debounce.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _toggle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toggle.js */ "./src/plugins/minimize/toggle.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/minimize/utils.js"); +/* harmony import */ var _view_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view.js */ "./src/plugins/minimize/view.js"); +/* harmony import */ var _minimized_chat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./minimized-chat.js */ "./src/plugins/minimize/minimized-chat.js"); +/* harmony import */ var _styles_minimize_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/minimize.scss */ "./src/plugins/minimize/styles/minimize.scss"); +/** + * @module converse-minimize + * @copyright 2022, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + + + + + +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-minimize', { + /** + * @typedef {import('@converse/headless').MUC} MUC + * @typedef {import('@converse/headless').ChatBox} ChatBox + */ + + /* Optional dependencies are other plugins which might be + * overridden or relied upon, and therefore need to be loaded before + * this plugin. They are called "optional" because they might not be + * available, in which case any overrides applicable to them will be + * ignored. + */ + dependencies: ["converse-chatview", "converse-controlbox", "converse-muc-views", "converse-headlines-view", "converse-dragresize"], + enabled(_converse) { + return _converse.api.settings.get("view_mode") === 'overlayed'; + }, + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'no_trimming': false + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.promises.add('minimizedChatsInitialized'); + const exports = { + MinimizedChatsToggle: _toggle_js__WEBPACK_IMPORTED_MODULE_1__["default"] + }; + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, exports); // DEPRECATED + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.exports, exports); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, { + minimize: { + trimChats: _utils_js__WEBPACK_IMPORTED_MODULE_2__.trimChats, + minimize: _utils_js__WEBPACK_IMPORTED_MODULE_2__.minimize, + maximize: _utils_js__WEBPACK_IMPORTED_MODULE_2__.maximize + } + }); // DEPRECATED + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.exports, { + minimize: { + trimChats: _utils_js__WEBPACK_IMPORTED_MODULE_2__.trimChats, + minimize: _utils_js__WEBPACK_IMPORTED_MODULE_2__.minimize, + maximize: _utils_js__WEBPACK_IMPORTED_MODULE_2__.maximize + } + }); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__.u, { + trimChats: _utils_js__WEBPACK_IMPORTED_MODULE_2__.trimChats, + minimize: _utils_js__WEBPACK_IMPORTED_MODULE_2__.minimize, + maximize: _utils_js__WEBPACK_IMPORTED_MODULE_2__.maximize + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatBoxViewInitialized', view => (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.trimChats)(view)); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatRoomViewInitialized', view => (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.trimChats)(view)); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('controlBoxOpened', view => (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.trimChats)(view)); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatBoxInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_2__.initializeChat); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatRoomInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_2__.initializeChat); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('getHeadingButtons', (view, buttons) => { + if (view.model.get('type') === CHATROOMS_TYPE) { + return (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.addMinimizeButtonToMUC)(view, buttons); + } else { + return (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.addMinimizeButtonToChat)(view, buttons); + } + }); + const debouncedTrimChats = (0,lodash_es_debounce__WEBPACK_IMPORTED_MODULE_6__["default"])(() => (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.trimChats)(), 250); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('registeredGlobalEventHandlers', () => window.addEventListener("resize", debouncedTrimChats)); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('unregisteredGlobalEventHandlers', () => window.removeEventListener("resize", debouncedTrimChats)); + } +}); + +/***/ }), + +/***/ "./src/plugins/minimize/minimized-chat.js": +/*!************************************************!*\ + !*** ./src/plugins/minimize/minimized-chat.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MinimizedChat) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _templates_trimmed_chat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/trimmed_chat.js */ "./src/plugins/minimize/templates/trimmed_chat.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/minimize/utils.js"); + + + + +class MinimizedChat extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + static get properties() { + return { + model: { + type: Object + }, + title: { + type: String + }, + type: { + type: String + }, + num_unread: { + type: Number + } + }; + } + constructor() { + super(); + this.model = null; + this.num_unread = null; + this.type = null; + this.title = null; + } + render() { + return (0,_templates_trimmed_chat_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this); + } + + /** + * @param {MouseEvent} ev + */ + close(ev) { + ev?.preventDefault(); + this.model.close(); + } + + /** + * @param {MouseEvent} ev + */ + restore(ev) { + ev?.preventDefault(); + (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.maximize)(this.model); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-minimized-chat', MinimizedChat); + +/***/ }), + +/***/ "./src/plugins/minimize/templates/toggle.js": +/*!**************************************************!*\ + !*** ./src/plugins/minimize/templates/toggle.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + + +/** + * @param {import('../view').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const chats = el.model.where({ + 'hidden': true + }); + const num_unread = chats.reduce((acc, chat) => acc + chat.get('num_unread'), 0); + const num_minimized = chats.reduce((acc, chat) => acc + (chat.get('hidden') ? 1 : 0), 0); + const collapsed = el.minchats.get('collapsed'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
${chats.map(chat => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``)}
`; +}); + +/***/ }), + +/***/ "./src/plugins/minimize/templates/trimmed_chat.js": +/*!********************************************************!*\ + !*** ./src/plugins/minimize/templates/trimmed_chat.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + + +/** + * @param {import('../minimized-chat').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_tooltip = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Click to restore this chat'); + let close_color; + if (el.type === 'chatroom') { + close_color = "var(--muc-color)"; + } else if (el.type === 'headline') { + close_color = "var(--headlines-color)"; + } else { + close_color = "var(--chat-color)"; + } + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; +}); + +/***/ }), + +/***/ "./src/plugins/minimize/toggle.js": +/*!****************************************!*\ + !*** ./src/plugins/minimize/toggle.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); + +class MinimizedChatsToggle extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model { + defaults() { + // eslint-disable-line class-methods-use-this + return { + 'collapsed': false + }; + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MinimizedChatsToggle); + +/***/ }), + +/***/ "./src/plugins/minimize/utils.js": +/*!***************************************!*\ + !*** ./src/plugins/minimize/utils.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ addMinimizeButtonToChat: () => (/* binding */ addMinimizeButtonToChat), +/* harmony export */ addMinimizeButtonToMUC: () => (/* binding */ addMinimizeButtonToMUC), +/* harmony export */ initializeChat: () => (/* binding */ initializeChat), +/* harmony export */ maximize: () => (/* binding */ maximize), +/* harmony export */ minimize: () => (/* binding */ minimize), +/* harmony export */ onMinimizedChanged: () => (/* binding */ onMinimizedChanged), +/* harmony export */ trimChats: () => (/* binding */ trimChats) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/** + * @typedef {import('@converse/headless').MUC} MUC + * @typedef {import('@converse/headless').ChatBox} ChatBox + * @typedef {import('plugins/chatview/chat').default} ChatView + * @typedef {import('plugins/muc-views/muc').default} MUCView + * @typedef {import('plugins/controlbox/controlbox').default} ControlBoxView + * @typedef {import('plugins/headlines-view/view').default} HeadlinesFeedView + */ + + +const { + dayjs +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + ACTIVE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; + +/** + * @param {ChatBox|MUC} chat + */ +function initializeChat(chat) { + chat.on('change:hidden', () => onMinimizedChanged(chat)); + if (chat.get('id') === 'controlbox') { + return; + } + chat.save({ + 'hidden': !!chat.get('hidden'), + 'time_minimized': chat.get('time_minimized') + }); +} +function getChatBoxWidth(view) { + if (view.model.get('id') === 'controlbox') { + // We return the width of the controlbox or its toggle, + // depending on which is visible. + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.isVisible(view)) { + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.getOuterWidth(view, true); + } else { + const toggle = document.querySelector('converse-controlbox-toggle'); + return toggle ? _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.getOuterWidth(toggle, true) : 0; + } + } else if (!view.model.get('hidden') && _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.isVisible(view)) { + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.getOuterWidth(view, true); + } + return 0; +} +function getShownChats() { + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxviews.filter(el => + // The controlbox can take a while to close, + // so we need to check its state. That's why we checked the 'closed' state. + !el.model.get('hidden') && !el.model.get('closed') && _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.isVisible(el)); +} +function getMinimizedWidth() { + const minimized_el = document.querySelector('converse-minimized-chats'); + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.pluck('hidden').includes(true) ? _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.getOuterWidth(minimized_el, true) : 0; +} +function getBoxesWidth(newchat) { + const new_id = newchat ? newchat.model.get('id') : null; + const newchat_width = newchat ? _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.getOuterWidth(newchat, true) : 0; + return Object.values(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxviews.xget(new_id)).reduce((memo, view) => memo + getChatBoxWidth(view), newchat_width); +} + +/** + * This method is called when a newly created chat box will be shown. + * It checks whether there is enough space on the page to show + * another chat box. Otherwise it minimizes the oldest chat box + * to create space. + * @param {ChatView|MUCView|ControlBoxView|HeadlinesFeedView} [newchat] + */ +function trimChats(newchat) { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('no_trimming') || _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get("view_mode") !== 'overlayed') { + return; + } + const shown_chats = getShownChats(); + if (shown_chats.length <= 1) { + return; + } + const body_width = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.getOuterWidth(document.querySelector('body'), true); + if (getChatBoxWidth(shown_chats[0]) === body_width) { + // If the chats shown are the same width as the body, + // then we're in responsive mode and the chats are + // fullscreen. In this case we don't trim. + return; + } + const minimized_el = document.querySelector('converse-minimized-chats'); + if (minimized_el) { + while (getMinimizedWidth() + getBoxesWidth(newchat) > body_width) { + const new_id = newchat ? newchat.model.get('id') : null; + const oldest_chat = getOldestMaximizedChat([new_id]); + if (oldest_chat) { + const model = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.get(oldest_chat.get('id')); + model?.save('hidden', true); + minimize(oldest_chat); + } else { + break; + } + } + } +} +function getOldestMaximizedChat(exclude_ids) { + // Get oldest view (if its id is not excluded) + exclude_ids.push('controlbox'); + let i = 0; + let model = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.sort().at(i); + while (exclude_ids.includes(model.get('id')) || model.get('hidden') === true) { + i++; + model = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.at(i); + if (!model) { + return null; + } + } + return model; +} +function addMinimizeButtonToChat(view, buttons) { + const data = { + 'a_class': 'toggle-chatbox-button', + 'handler': ev => minimize(ev, view.model), + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Minimize'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Minimize this chat'), + 'icon_class': "fa-minus", + 'name': 'minimize', + 'standalone': _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.api.settings.get("view_mode") === 'overlayed' + }; + const names = buttons.map(t => t.name); + const idx = names.indexOf('close'); + return idx > -1 ? [...buttons.slice(0, idx), data, ...buttons.slice(idx)] : [data, ...buttons]; +} +function addMinimizeButtonToMUC(view, buttons) { + const data = { + 'a_class': 'toggle-chatbox-button', + 'handler': ev => minimize(ev, view.model), + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Minimize'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Minimize this groupchat'), + 'icon_class': "fa-minus", + 'name': 'minimize', + 'standalone': _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.api.settings.get("view_mode") === 'overlayed' + }; + const names = buttons.map(t => t.name); + const idx = names.indexOf('signout'); + return idx > -1 ? [...buttons.slice(0, idx), data, ...buttons.slice(idx)] : [data, ...buttons]; +} +function maximize(ev, chatbox) { + if (ev?.preventDefault) { + ev.preventDefault(); + } else { + chatbox = ev; + } + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.safeSave(chatbox, { + 'hidden': false, + 'time_opened': new Date().getTime() + }); +} +function minimize(ev, model) { + if (ev?.preventDefault) { + ev.preventDefault(); + } else { + model = ev; + } + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.safeSave(model, { + 'hidden': true, + 'time_minimized': new Date().toISOString() + }); +} + +/** + * Will trigger {@link _converse#chatBoxMaximized} + * @param {ChatBox|MUC} model + */ +function onMaximized(model) { + if (!model.isScrolledUp()) { + model.clearUnreadMsgCounter(); + } + model.setChatState(ACTIVE); + /** + * Triggered when a previously minimized chat gets maximized + * @event _converse#chatBoxMaximized + * @type {ChatBox|MUC} + * @example _converse.api.listen.on('chatBoxMaximized', view => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger('chatBoxMaximized', model); +} + +/** + * Handler which gets called when a {@link _converse#ChatBox} has it's + * `minimized` property set to true. + * @param {ChatBox|MUC} model + * + * Will trigger {@link _converse#chatBoxMinimized} + */ +function onMinimized(model) { + /** + * Triggered when a previously maximized chat gets Minimized + * @event _converse#chatBoxMinimized + * @type { ChatBox|MUC } + * @example _converse.api.listen.on('chatBoxMinimized', view => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger('chatBoxMinimized', model); +} + +/** + * @param {ChatBox|MUC} model + */ +function onMinimizedChanged(model) { + if (model.get('hidden')) { + onMinimized(model); + } else { + onMaximized(model); + } +} + +/***/ }), + +/***/ "./src/plugins/minimize/view.js": +/*!**************************************!*\ + !*** ./src/plugins/minimize/view.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MinimizedChats) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element */ "./src/shared/components/element.js"); +/* harmony import */ var _toggle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./toggle.js */ "./src/plugins/minimize/toggle.js"); +/* harmony import */ var _templates_toggle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/toggle.js */ "./src/plugins/minimize/templates/toggle.js"); + + + + +class MinimizedChats extends shared_components_element__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + async initialize() { + this.model = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.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:hidden', () => 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(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, 'connected', () => this.requestUpdate()); + this.listenTo(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, 'reconnected', () => this.requestUpdate()); + this.listenTo(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, 'disconnected', () => this.requestUpdate()); + } + render() { + return (0,_templates_toggle_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this); + } + async initToggle() { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + const id = `converse.minchatstoggle-${bare_jid}`; + this.minchats = new _toggle_js__WEBPACK_IMPORTED_MODULE_2__["default"]({ + id + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.initStorage(this.minchats, id, 'session'); + await new Promise(resolve => this.minchats.fetch({ + 'success': resolve, + 'error': resolve + })); + } + + /** + * @param {Event} [ev] + */ + toggle(ev) { + ev?.preventDefault(); + this.minchats.save({ + 'collapsed': !this.minchats.get('collapsed') + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-minimized-chats', MinimizedChats); + +/***/ }), + +/***/ "./src/plugins/modal/alert.js": +/*!************************************!*\ + !*** ./src/plugins/modal/alert.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Alert) +/* harmony export */ }); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_alert_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/alert.js */ "./src/plugins/modal/templates/alert.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class Alert extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + initialize() { + super.initialize(); + this.listenTo(this.model, 'change', () => this.render()); + this.addEventListener('hide.bs.modal', () => this.remove(), false); + } + renderModal() { + return (0,_templates_alert_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this.model.toJSON()); + } + getModalTitle() { + return this.model.get('title'); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-alert-modal', Alert); + +/***/ }), + +/***/ "./src/plugins/modal/api.js": +/*!**********************************!*\ + !*** ./src/plugins/modal/api.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _alert_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./alert.js */ "./src/plugins/modal/alert.js"); +/* harmony import */ var _confirm_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./confirm.js */ "./src/plugins/modal/confirm.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); + + + +let modals = []; +let modals_map = {}; +const modal_api = { + /** + * API namespace for methods relating to modals + * @namespace _converse.api.modal + * @memberOf _converse.api + */ + modal: { + /** + * Shows a modal of type `ModalClass` to the user. + * Will create a new instance of that class if an existing one isn't + * found. + * @param {string|any} name + * @param {Object} [properties] - Optional properties that will be set on a newly created modal instance. + * @param {Event} [ev] - The DOM event that causes the modal to be shown. + */ + show(name, properties, ev) { + let modal; + if (typeof name === 'string') { + modal = this.get(name) ?? this.create(name, properties); + Object.assign(modal, properties); + } else { + // Legacy... + const ModalClass = name; + const id = ModalClass.id ?? properties.id; + modal = this.get(id) ?? this.create(ModalClass, properties); + } + modal.show(ev); + return modal; + }, + /** + * Return a modal with the passed-in identifier, if it exists. + * @param { String } id + */ + get(id) { + return modals_map[id] ?? modals.filter(m => m.id == id).pop(); + }, + /** + * Create a modal of the passed-in type. + * @param {String} name + * @param {Object} [properties] - Optional properties that will be + * set on the modal instance. + */ + create(name, properties) { + const ModalClass = customElements.get(name); + const modal = modals_map[name] = new ModalClass(properties); + return modal; + }, + /** + * Remove a particular modal + * @param { String } name + */ + remove(name) { + let modal; + if (typeof name === 'string') { + modal = modals_map[name]; + delete modals_map[name]; + } else { + // Legacy... + modal = name; + modals = modals.filter(m => m !== modal); + } + modal?.remove(); + }, + /** + * Remove all modals + */ + removeAll() { + modals.forEach(m => m.remove()); + modals = []; + modals_map = {}; + } + }, + /** + * Show a confirm modal to the user. + * @method _converse.api.confirm + * @param {String} title - The header text for the confirmation dialog + * @param {(Array|String)} messages - The text to show to the user + * @param {Array} fields - An object representing a field presented to the user. + * @returns {Promise} A promise which resolves with an array of + * filled in fields or `false` if the confirm dialog was closed or canceled. + */ + async confirm(title, messages = [], fields = []) { + if (typeof messages === 'string') { + messages = [messages]; + } + const model = new _converse_skeletor__WEBPACK_IMPORTED_MODULE_2__.Model({ + title, + messages, + fields, + 'type': 'confirm' + }); + const confirm = new _confirm_js__WEBPACK_IMPORTED_MODULE_1__["default"]({ + model + }); + confirm.show(); + let result; + try { + result = await confirm.confirmation; + } catch (e) { + result = false; + } + confirm.remove(); + return result; + }, + /** + * Show a prompt modal to the user. + * @method _converse.api.prompt + * @param { String } title - The header text for the prompt + * @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. + */ + async prompt(title, messages = [], placeholder = '') { + if (typeof messages === 'string') { + messages = [messages]; + } + const model = new _converse_skeletor__WEBPACK_IMPORTED_MODULE_2__.Model({ + title, + messages, + 'fields': [{ + 'name': 'reason', + 'placeholder': placeholder + }], + 'type': 'prompt' + }); + const prompt = new _confirm_js__WEBPACK_IMPORTED_MODULE_1__["default"]({ + model + }); + prompt.show(); + let result; + try { + result = (await prompt.confirmation).pop()?.value; + } catch (e) { + result = false; + } + prompt.remove(); + return result; + }, + /** + * Show an alert modal to the user. + * @method _converse.api.alert + * @param { ('info'|'warn'|'error') } type - The type of alert. + * @param { String } title - The header text for the alert. + * @param { (Array|String) } messages - The alert text to show to the user. + */ + alert(type, title, messages) { + if (typeof messages === 'string') { + messages = [messages]; + } + let level; + if (type === 'error') { + level = 'alert-danger'; + } else if (type === 'info') { + level = 'alert-info'; + } else if (type === 'warn') { + level = 'alert-warning'; + } + const model = new _converse_skeletor__WEBPACK_IMPORTED_MODULE_2__.Model({ + 'title': title, + 'messages': messages, + 'level': level, + 'type': 'alert' + }); + modal_api.modal.show('converse-alert-modal', { + model + }); + } +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (modal_api); + +/***/ }), + +/***/ "./src/plugins/modal/confirm.js": +/*!**************************************!*\ + !*** ./src/plugins/modal/confirm.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Confirm) +/* harmony export */ }); +/* harmony import */ var _converse_openpromise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/openpromise */ "./node_modules/@converse/openpromise/openpromise.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_prompt_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/prompt.js */ "./src/plugins/modal/templates/prompt.js"); + + + + +class Confirm extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_2__["default"] { + constructor(options) { + super(options); + this.confirmation = (0,_converse_openpromise__WEBPACK_IMPORTED_MODULE_0__.getOpenPromise)(); + } + initialize() { + super.initialize(); + this.listenTo(this.model, 'change', () => this.render()); + this.addEventListener('hide.bs.modal', () => { + if (!this.confirmation.isResolved) { + this.confirmation.reject(); + } + }, false); + } + renderModal() { + return (0,_templates_prompt_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this); + } + getModalTitle() { + return this.model.get('title'); + } + onConfimation(ev) { + ev.preventDefault(); + const form_data = new FormData(ev.target); + const fields = (this.model.get('fields') || []).map(field => { + const value = /** @type {string }*/form_data.get(field.name).trim(); + field.value = value; + if (field.challenge) { + field.challenge_failed = value !== field.challenge; + } + return field; + }); + if (fields.filter(c => c.challenge_failed).length) { + this.model.set('fields', fields); + // Setting an array doesn't trigger a change event + this.model.trigger('change'); + return; + } + this.confirmation.resolve(fields); + this.modal.hide(); + } + renderModalFooter() { + return ''; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-confirm-modal', Confirm); + +/***/ }), + +/***/ "./src/plugins/modal/index.js": +/*!************************************!*\ + !*** ./src/plugins/modal/index.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./api.js */ "./src/plugins/modal/api.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/** + * @copyright The Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + +Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.env, { + BaseModal: _modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] +}); +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.plugins.add('converse-modal', { + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.listen.on('disconnect', () => { + const container = document.querySelector('#converse-modals'); + if (container) { + container.innerHTML = ''; + } + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.listen.on('clearSession', () => _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.modal.removeAll()); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.api, _api_js__WEBPACK_IMPORTED_MODULE_1__["default"]); + } +}); + +/***/ }), + +/***/ "./src/plugins/modal/modal.js": +/*!************************************!*\ + !*** ./src/plugins/modal/modal.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_openpromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/openpromise */ "./node_modules/@converse/openpromise/openpromise.js"); +/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.esm.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _templates_buttons_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./templates/buttons.js */ "./src/plugins/modal/templates/buttons.js"); +/* harmony import */ var _templates_modal_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./templates/modal.js */ "./src/plugins/modal/templates/modal.js"); +/* harmony import */ var _styles_modal_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./styles/_modal.scss */ "./src/plugins/modal/styles/_modal.scss"); + + + + + + + + +class BaseModal extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_3__.ElementView { + /** + * @typedef {import('lit').TemplateResult} TemplateResult + */ + + /** + * @param {Object} options + */ + constructor(options) { + super(); + this.model = null; + this.className = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.u.isTestEnv() ? 'modal' : 'modal fade'; + this.tabIndex = -1; + this.ariaHidden = 'true'; + this.initialized = (0,_converse_openpromise__WEBPACK_IMPORTED_MODULE_1__.getOpenPromise)(); + + // Allow properties to be set via passed in options + Object.assign(this, options); + setTimeout(() => this.insertIntoDOM()); + this.addEventListener('shown.bs.modal', () => { + this.ariaHidden = 'false'; + }); + this.addEventListener('hidden.bs.modal', () => { + this.ariaHidden = 'true'; + }); + } + initialize() { + this.render(); + this.modal = new bootstrap__WEBPACK_IMPORTED_MODULE_2__.Modal(this, { + backdrop: _converse_headless__WEBPACK_IMPORTED_MODULE_4__.u.isTestEnv() ? false : true, + keyboard: true + }); + this.initialized.resolve(); + } + + /** + * @returns {TemplateResult|string} + */ + renderModal() { + return ''; + } + + /** + * @returns {TemplateResult|string} + */ + renderModalFooter() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } + toHTML() { + return (0,_templates_modal_js__WEBPACK_IMPORTED_MODULE_6__["default"])(this); + } + + /** + * @returns {string|TemplateResult} + */ + getModalTitle() { + // Intended to be overwritten + return ''; + } + + /** + * @param {Event} [ev] + */ + switchTab(ev) { + ev?.stopPropagation(); + ev?.preventDefault(); + this.tab = /** @type {HTMLElement} */ev.target.getAttribute('data-name'); + this.render(); + } + close() { + this.modal.hide(); + } + insertIntoDOM() { + const container_el = document.querySelector("#converse-modals"); + container_el.insertAdjacentElement('beforeend', this); + } + + /** + * @param {string} message + * @param {'primary'|'secondary'|'danger'} type + */ + alert(message, type = 'primary') { + this.model.set('alert', { + message, + type + }); + setTimeout(() => { + this.model.set('alert', undefined); + }, 5000); + } + async show() { + await this.initialized; + this.modal.show(); + this.render(); + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BaseModal); + +/***/ }), + +/***/ "./src/plugins/modal/templates/alert.js": +/*!**********************************************!*\ + !*** ./src/plugins/modal/templates/alert.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``); + +/***/ }), + +/***/ "./src/plugins/modal/templates/buttons.js": +/*!************************************************!*\ + !*** ./src/plugins/modal/templates/buttons.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ modal_close_button: () => (/* binding */ modal_close_button), +/* harmony export */ modal_header_close_button: () => (/* binding */ modal_header_close_button) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +const modal_close_button = (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)``; +const modal_header_close_button = (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)``; + +/***/ }), + +/***/ "./src/plugins/modal/templates/modal-alert.js": +/*!****************************************************!*\ + !*** ./src/plugins/modal/templates/modal-alert.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``); + +/***/ }), + +/***/ "./src/plugins/modal/templates/modal.js": +/*!**********************************************!*\ + !*** ./src/plugins/modal/templates/modal.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _modal_alert_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modal-alert.js */ "./src/plugins/modal/templates/modal-alert.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _buttons_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./buttons.js */ "./src/plugins/modal/templates/buttons.js"); + + + + +/** + * @param {import ('../modal').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const alert = el.model?.get('alert'); + const level = el.model?.get('level') ?? ''; + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)``; +}); + +/***/ }), + +/***/ "./src/plugins/modal/templates/prompt.js": +/*!***********************************************!*\ + !*** ./src/plugins/modal/templates/prompt.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + +const tplField = f => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
`; + +/** + * @param {import('../confirm').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
${el.model.get('messages')?.map(message => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

${message}

`)}
${el.model.get('fields')?.map(f => tplField(f))}
`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/affiliation-form.js": +/*!***************************************************!*\ + !*** ./src/plugins/muc-views/affiliation-form.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _templates_affiliation_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/affiliation-form.js */ "./src/plugins/muc-views/templates/affiliation-form.js"); +/* harmony import */ var shared_components_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + +const { + Strophe, + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; +class AffiliationForm extends shared_components_element__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + muc: { + type: Object + }, + jid: { + type: String + }, + affiliation: { + type: String + }, + alert_message: { + type: String, + attribute: false + }, + alert_type: { + type: String, + attribute: false + } + }; + } + constructor() { + super(); + this.jid = null; + this.muc = null; + } + render() { + return (0,_templates_affiliation_form_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this); + } + alert(message, type) { + this.alert_message = message; + this.alert_type = type; + } + async assignAffiliation(ev) { + ev.stopPropagation(); + ev.preventDefault(); + this.alert(); // clear alert messages + + const data = new FormData(ev.target); + const affiliation = /** @type {string} */data.get('affiliation'); + const attrs = { + jid: this.jid, + reason: ( /** @type {string} */data.get('reason')) + }; + const muc_jid = this.muc.get('jid'); + try { + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.u.muc.setAffiliation(affiliation, muc_jid, [attrs]); + } catch (e) { + if (e === null) { + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Timeout error while trying to set the affiliation'), 'danger'); + } else if (sizzle(`not-allowed[xmlns="${Strophe.NS.STANZAS}"]`, e).length) { + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Sorry, you're not allowed to make that change"), 'danger'); + } else { + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Sorry, something went wrong while trying to set the affiliation'), 'danger'); + } + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + return; + } + await this.muc.occupants.fetchMembers(); + + /** + * @event affiliationChanged + * @example + * const el = document.querySelector('converse-muc-affiliation-form'); + * el.addEventListener('affiliationChanged', () => { ... }); + */ + const event = new CustomEvent('affiliationChanged', { + bubbles: true + }); + this.dispatchEvent(event); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-muc-affiliation-form', AffiliationForm); + +/***/ }), + +/***/ "./src/plugins/muc-views/bottom-panel.js": +/*!***********************************************!*\ + !*** ./src/plugins/muc-views/bottom-panel.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCBottomPanel) +/* harmony export */ }); +/* harmony import */ var shared_autocomplete_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/autocomplete/index.js */ "./src/shared/autocomplete/index.js"); +/* harmony import */ var plugins_chatview_bottom_panel_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/chatview/bottom-panel.js */ "./src/plugins/chatview/bottom-panel.js"); +/* harmony import */ var _templates_muc_bottom_panel_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/muc-bottom-panel.js */ "./src/plugins/muc-views/templates/muc-bottom-panel.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_muc_bottom_panel_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/muc-bottom-panel.scss */ "./src/plugins/muc-views/styles/muc-bottom-panel.scss"); + + + + + +class MUCBottomPanel extends plugins_chatview_bottom_panel_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + async initialize() { + await super.initialize(); + this.listenTo(this.model, 'change:hidden_occupants', () => this.requestUpdate()); + this.listenTo(this.model, 'change:num_unread_general', () => this.requestUpdate()); + this.listenTo(this.model.features, 'change:moderated', () => this.requestUpdate()); + 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.requestUpdate()); + } + render() { + if (!this.model) return ''; + return (0,_templates_muc_bottom_panel_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + renderIfOwnOccupant(o) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.session.get('bare_jid'); + o.get('jid') === bare_jid && this.requestUpdate(); + } + sendButtonClicked(ev) { + if (ev.delegateTarget?.dataset.action === 'sendMessage') { + const form = /** @type {HTMLFormElement} */this.querySelector('converse-muc-message-form'); + form?.onFormSubmitted(ev); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-muc-bottom-panel', MUCBottomPanel); + +/***/ }), + +/***/ "./src/plugins/muc-views/chatarea.js": +/*!*******************************************!*\ + !*** ./src/plugins/muc-views/chatarea.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCChatArea) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_muc_chatarea_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/muc-chatarea.js */ "./src/plugins/muc-views/templates/muc-chatarea.js"); + + + + +class MUCChatArea extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + static get properties() { + return { + jid: { + type: String + }, + show_help_messages: { + type: Boolean + }, + type: { + type: String + } + }; + } + constructor() { + super(); + this.jid = null; + this.type = null; + this.split = null; + } + async initialize() { + this.model = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.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()); + this.requestUpdate(); + } + render() { + return this.model ? (0,_templates_muc_chatarea_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this) : ''; + } + shouldShowSidebar() { + return !this.model.get('hidden_occupants') && this.model.session.get('connection_status') === _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.ROOMSTATUS.ENTERED; + } + getHelpMessages() { + const setting = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('muc_disable_slash_commands'); + const disabled_commands = Array.isArray(setting) ? setting : []; + return [`/admin: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Change user's affiliation to admin")}`, `/ban: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Ban user by changing their affiliation to outcast')}`, `/clear: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Clear the chat area')}`, `/close: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Close this groupchat')}`, `/deop: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Change user role to participant')}`, `/destroy: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Remove this groupchat')}`, `/help: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Show this menu')}`, `/kick: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Kick user from groupchat')}`, `/me: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Write in 3rd person')}`, `/member: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Grant membership to a user')}`, `/modtools: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Opens up the moderator tools GUI')}`, `/mute: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Remove user's ability to post messages")}`, `/nick: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Change your nickname')}`, `/op: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Grant moderator role to user')}`, `/owner: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Grant ownership of this groupchat')}`, `/register: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Register your nickname')}`, `/revoke: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Revoke the user's current affiliation")}`, `/subject: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Set groupchat subject')}`, `/topic: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Set groupchat subject (alias for /subject)')}`, `/voice: ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('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))); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-muc-chatarea', MUCChatArea); + +/***/ }), + +/***/ "./src/plugins/muc-views/constants.js": +/*!********************************************!*\ + !*** ./src/plugins/muc-views/constants.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PRETTY_CHAT_STATUS: () => (/* binding */ PRETTY_CHAT_STATUS) +/* harmony export */ }); +const PRETTY_CHAT_STATUS = { + 'offline': 'Offline', + 'unavailable': 'Unavailable', + 'xa': 'Extended Away', + 'away': 'Away', + 'dnd': 'Do not disturb', + 'chat': 'Chattty', + 'online': 'Online' +}; + +/***/ }), + +/***/ "./src/plugins/muc-views/destroyed.js": +/*!********************************************!*\ + !*** ./src/plugins/muc-views/destroyed.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _templates_muc_destroyed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/muc-destroyed.js */ "./src/plugins/muc-views/templates/muc-destroyed.js"); +/* harmony import */ var shared_components_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class MUCDestroyed extends shared_components_element__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + constructor() { + super(); + this.jid = null; + } + static get properties() { + return { + 'jid': { + type: String + } + }; + } + connectedCallback() { + super.connectedCallback(); + this.model = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.chatboxes.get(this.jid); + } + render() { + const reason = this.model.get('destroyed_reason'); + const moved_jid = this.model.get('moved_jid'); + return (0,_templates_muc_destroyed_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ + moved_jid, + reason, + 'onSwitch': ev => this.onSwitch(ev) + }); + } + async onSwitch(ev) { + ev.preventDefault(); + const moved_jid = this.model.get('moved_jid'); + const room = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.rooms.get(moved_jid, {}, true); + room.maybeShow(true); + this.model.destroy(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-muc-destroyed', MUCDestroyed); + +/***/ }), + +/***/ "./src/plugins/muc-views/disconnected.js": +/*!***********************************************!*\ + !*** ./src/plugins/muc-views/disconnected.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _templates_muc_disconnect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/muc-disconnect.js */ "./src/plugins/muc-views/templates/muc-disconnect.js"); +/* harmony import */ var shared_components_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + +class MUCDisconnected extends shared_components_element__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + constructor() { + super(); + this.jid = null; + } + static get properties() { + return { + 'jid': { + type: String + } + }; + } + connectedCallback() { + super.connectedCallback(); + this.model = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.chatboxes.get(this.jid); + } + render() { + const message = this.model.session.get('disconnection_message'); + if (!message) { + return; + } + const messages = [message]; + const actor = this.model.session.get('disconnection_actor'); + if (actor) { + messages.push((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('This action was done by %1$s.', actor)); + } + const reason = this.model.session.get('disconnection_reason'); + if (reason) { + messages.push((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('The reason given is: "%1$s".', reason)); + } + return (0,_templates_muc_disconnect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(messages); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-muc-disconnected', MUCDisconnected); + +/***/ }), + +/***/ "./src/plugins/muc-views/heading.js": +/*!******************************************!*\ + !*** ./src/plugins/muc-views/heading.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCHeading) +/* harmony export */ }); +/* harmony import */ var _modals_config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modals/config.js */ "./src/plugins/muc-views/modals/config.js"); +/* harmony import */ var _modals_muc_details_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modals/muc-details.js */ "./src/plugins/muc-views/modals/muc-details.js"); +/* harmony import */ var _modals_nickname_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modals/nickname.js */ "./src/plugins/muc-views/modals/nickname.js"); +/* harmony import */ var _templates_muc_head_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/muc-head.js */ "./src/plugins/muc-views/templates/muc-head.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/muc-views/utils.js"); +/* harmony import */ var _styles_muc_head_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styles/muc-head.scss */ "./src/plugins/muc-views/styles/muc-head.scss"); + + + + + + + + + +class MUCHeading extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_4__.CustomElement { + /** + * @typedef {import('@converse/headless/types/plugins/muc/occupant').default} MUCOccupant + */ + + async initialize() { + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_6__._converse.state; + this.model = chatboxes.get(this.getAttribute('jid')); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + this.listenTo(this.model, 'vcard:add', () => this.requestUpdate()); + this.listenTo(this.model, 'vcard:change', () => this.requestUpdate()); + this.user_settings = await _converse_headless__WEBPACK_IMPORTED_MODULE_6__._converse.api.user.settings.getModel(); + this.listenTo(this.user_settings, 'change:mucs_with_hidden_subject', () => this.requestUpdate()); + await this.model.initialized; + this.model.occupants.forEach(o => this.onOccupantAdded(o)); + this.listenTo(this.model.occupants, 'add', this.onOccupantAdded); + this.listenTo(this.model.occupants, 'change:affiliation', this.onOccupantAffiliationChanged); + this.requestUpdate(); + } + render() { + return this.model && this.user_settings ? (0,_templates_muc_head_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this) : ''; + } + + /** + * @param {MUCOccupant} occupant + */ + onOccupantAdded(occupant) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_6__._converse.session.get('bare_jid'); + if (occupant.get('jid') === bare_jid) { + this.requestUpdate(); + } + } + + /** + * @param {MUCOccupant} occupant + */ + onOccupantAffiliationChanged(occupant) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_6__._converse.session.get('bare_jid'); + if (occupant.get('jid') === bare_jid) { + this.requestUpdate(); + } + } + + /** + * @param {Event} ev + */ + showRoomDetailsModal(ev) { + ev.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_6__.api.modal.show('converse-muc-details-modal', { + model: this.model + }, ev); + } + + /** + * @param {Event} ev + */ + toggleTopic(ev) { + ev?.preventDefault?.(); + this.model.toggleSubjectHiddenState(); + } + + /** + * @param {Event} ev + */ + toggleOccupants(ev) { + ev?.preventDefault?.(); + ev?.stopPropagation?.(); + this.model.save({ + 'hidden_occupants': !this.model.get('hidden_occupants') + }); + } + + /** + * @param {Event} ev + */ + showConfigModal(ev) { + ev.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_6__.api.modal.show('converse-muc-config-modal', { + model: this.model + }, ev); + } + + /** + * @param {Event} ev + */ + close(ev) { + ev.preventDefault(); + this.model.close(); + } + + /** + * @param {Event} ev + */ + destroy(ev) { + ev.preventDefault(); + (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.destroyMUC)(this.model); + } + + /** + * Returns a list of objects which represent buttons for the groupchat header. + * @emits _converse#getHeadingButtons + * + * @param {boolean} subject_hidden + */ + getHeadingButtons(subject_hidden) { + const buttons = []; + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Details'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Show more information about this groupchat'), + 'handler': ev => this.showRoomDetailsModal(ev), + 'a_class': 'show-muc-details-modal', + 'icon_class': 'fa-info-circle', + 'name': 'details' + }); + if (this.model.getOwnAffiliation() === 'owner') { + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Configure'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Configure this groupchat'), + 'handler': ev => this.showConfigModal(ev), + 'a_class': 'configure-chatroom-button', + 'icon_class': 'fa-wrench', + 'name': 'configure' + }); + } + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Nickname'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)("Change the nickname you're using in this groupchat"), + 'handler': ev => _converse_headless__WEBPACK_IMPORTED_MODULE_6__.api.modal.show('converse-muc-nickname-modal', { + 'model': this.model + }, ev), + 'a_class': 'open-nickname-modal', + 'icon_class': 'fa-smile', + 'name': 'nickname' + }); + const subject = this.model.get('subject'); + if (subject && subject.text) { + buttons.push({ + 'i18n_text': subject_hidden ? (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Show topic') : (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Hide topic'), + 'i18n_title': subject_hidden ? (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Show the topic message in the heading') : (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Hide the topic in the heading'), + 'handler': /** @param {Event} ev */ev => this.toggleTopic(ev), + 'a_class': 'hide-topic', + 'icon_class': 'fa-minus-square', + 'name': 'toggle-topic' + }); + } + buttons.push({ + 'i18n_text': this.model.get('hidden_occupants') ? (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Show participants') : (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Hide participants'), + 'i18n_title': this.model.get('hidden_occupants') ? (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Show the groupchat participants') : (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Hide the groupchat participants'), + 'handler': /** @param {Event} ev */ev => this.toggleOccupants(ev), + 'icon_class': 'fa-users' + }); + const conn_status = this.model.session.get('connection_status'); + if (conn_status === _converse_headless__WEBPACK_IMPORTED_MODULE_6__.converse.ROOMSTATUS.ENTERED) { + const allowed_commands = this.model.getAllowedCommands(); + if (allowed_commands.includes('modtools')) { + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Moderate'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Moderate this groupchat'), + 'handler': () => (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.showModeratorToolsModal)(this.model), + 'a_class': 'moderate-chatroom-button', + 'icon_class': 'fa-user-cog', + 'name': 'moderate' + }); + } + if (allowed_commands.includes('destroy')) { + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Destroy'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Remove this groupchat'), + 'handler': ev => this.destroy(ev), + 'a_class': 'destroy-chatroom-button', + 'icon_class': 'fa-trash', + 'name': 'destroy' + }); + } + } + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_6__.api.settings.get('singleton')) { + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Leave'), + 'i18n_title': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Leave and close this groupchat'), + 'handler': async ev => { + ev.stopPropagation(); + const messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Are you sure you want to leave this groupchat?')]; + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_6__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Confirm'), messages); + result && this.close(ev); + }, + 'a_class': 'close-chatbox-button', + 'standalone': _converse_headless__WEBPACK_IMPORTED_MODULE_6__.api.settings.get('view_mode') === 'overlayed', + 'icon_class': 'fa-sign-out-alt', + 'name': 'signout' + }); + } + const { + chatboxviews + } = _converse_headless__WEBPACK_IMPORTED_MODULE_6__._converse.state; + const el = chatboxviews.get(this.getAttribute('jid')); + if (el) { + // This hook is described in src/plugins/chatview/heading.js + return _converse_headless__WEBPACK_IMPORTED_MODULE_6__._converse.api.hook('getHeadingButtons', el, buttons); + } else { + return Promise.resolve(buttons); // Happens during tests + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_6__.api.elements.define('converse-muc-heading', MUCHeading); + +/***/ }), + +/***/ "./src/plugins/muc-views/index.js": +/*!****************************************!*\ + !*** ./src/plugins/muc-views/index.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _chatboxviews_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../chatboxviews/index.js */ "./src/plugins/chatboxviews/index.js"); +/* harmony import */ var _affiliation_form_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./affiliation-form.js */ "./src/plugins/muc-views/affiliation-form.js"); +/* harmony import */ var _role_form_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./role-form.js */ "./src/plugins/muc-views/role-form.js"); +/* harmony import */ var _muc_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./muc.js */ "./src/plugins/muc-views/muc.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/muc-views/utils.js"); +/* harmony import */ var _styles_index_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./styles/index.scss */ "./src/plugins/muc-views/styles/index.scss"); +/** + * @copyright The Converse.js developers + * @description XEP-0045 Multi-User Chat Views + * @license Mozilla Public License (MPLv2) + */ + + + + + + +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; + +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.MUC.VIEWS = { + CONFIG: 'config-form' +}; +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-muc-views', { + /* Dependencies are other plugins which might be + * overridden or relied upon, and therefore need to be loaded before + * this plugin. They are "optional" because they might not be + * available, in which case any overrides applicable to them will be + * ignored. + * + * NB: These plugins need to have already been loaded via require.js. + * + * It's possible to make these dependencies "non-optional". + * If the setting "strict_plugin_dependencies" is set to true, + * an error will be raised if the plugin is not found. + */ + dependencies: ['converse-modal', 'converse-controlbox', 'converse-chatview'], + initialize() { + const { + _converse + } = this; + + // Configuration values for this plugin + // ==================================== + // Refer to docs/source/configuration.rst for explanations of these + // configuration settings. + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'auto_list_rooms': false, + 'cache_muc_messages': true, + 'locked_muc_nickname': false, + 'modtools_disable_query': [], + 'muc_disable_slash_commands': false, + 'muc_mention_autocomplete_filter': 'contains', + 'muc_mention_autocomplete_min_chars': 0, + 'muc_mention_autocomplete_show_avatar': true, + 'muc_roomid_policy': null, + 'muc_roomid_policy_hint': null, + 'muc_search_service': 'api@search.jabber.network', + 'roomconfig_whitelist': [], + 'show_retraction_warning': true + }); + const exports = { + ChatRoomView: _muc_js__WEBPACK_IMPORTED_MODULE_4__["default"], + MUCView: _muc_js__WEBPACK_IMPORTED_MODULE_4__["default"] + }; + Object.assign(_converse, exports); // DEPRECATED + Object.assign(_converse.exports, exports); + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('muc_domain')) { + // Use service discovery to get the default MUC domain + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('serviceDiscovered', async feature => { + if (feature?.get('var') === Strophe.NS.MUC) { + if (feature.entity.get('jid').includes('@')) { + // Ignore full JIDs, we're only looking for a MUC service, not a room + return; + } + const identity = await feature.entity.getIdentity('conference', 'text'); + if (identity) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.set('muc_domain', Strophe.getDomainFromJid(feature.get('from'))); + } + } + }); + } + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('clearsession', () => { + const view = _converse.chatboxviews.get('controlbox'); + if (view && view.roomspanel) { + view.roomspanel.model.destroy(); + view.roomspanel.remove(); + delete view.roomspanel; + } + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatBoxClosed', model => { + if (model.get('type') === CHATROOMS_TYPE) { + (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.clearHistory)(model.get('jid')); + } + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('parseMessageForCommands', _utils_js__WEBPACK_IMPORTED_MODULE_5__.parseMessageForMUCCommands); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('confirmDirectMUCInvitation', _utils_js__WEBPACK_IMPORTED_MODULE_5__.confirmDirectMUCInvitation); + } +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/message-form.js": +/*!***********************************************!*\ + !*** ./src/plugins/muc-views/message-form.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCMessageForm) +/* harmony export */ }); +/* harmony import */ var shared_autocomplete_autocomplete_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/autocomplete/autocomplete.js */ "./src/shared/autocomplete/autocomplete.js"); +/* harmony import */ var plugins_chatview_message_form_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/chatview/message-form.js */ "./src/plugins/chatview/message-form.js"); +/* harmony import */ var _templates_message_form_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/message-form.js */ "./src/plugins/muc-views/templates/message-form.js"); +/* harmony import */ var shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/autocomplete/utils.js */ "./src/shared/autocomplete/utils.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/muc-views/utils.js"); + + + + + + +class MUCMessageForm extends plugins_chatview_message_form_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + async initialize() { + super.initialize(); + await this.model.initialized; + this.initMentionAutoComplete(); + } + render() { + return (0,_templates_message_form_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + shouldAutoComplete() { + const entered = this.model.session.get('connection_status') === _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.ROOMSTATUS.ENTERED; + return entered && !(this.model.features.get('moderated') && this.model.getOwnRole() === 'visitor'); + } + initMentionAutoComplete() { + this.mention_auto_complete = new shared_autocomplete_autocomplete_js__WEBPACK_IMPORTED_MODULE_0__["default"](this, { + auto_first: true, + auto_evaluate: false, + min_chars: _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('muc_mention_autocomplete_min_chars'), + match_current_word: true, + list: () => this.getAutoCompleteList(), + filter: _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('muc_mention_autocomplete_filter') == 'contains' ? shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_3__.FILTER_CONTAINS : shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_3__.FILTER_STARTSWITH, + ac_triggers: ['Tab', '@'], + include_triggers: [], + item: (text, input) => (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getAutoCompleteListItem)(this.model, text, input) + }); + this.mention_auto_complete.on('suggestion-box-selectcomplete', () => this.auto_completing = false); + } + getAutoCompleteList() { + return this.model.getAllKnownNicknames().map(nick => ({ + 'label': nick, + 'value': `@${nick}` + })); + } + + /** + * @param {Event} ev + */ + onKeyDown(ev) { + if (this.shouldAutoComplete() && this.mention_auto_complete.onKeyDown(ev)) { + return; + } + super.onKeyDown(ev); + } + + /** + * @param {KeyboardEvent} ev + */ + onKeyUp(ev) { + if (this.shouldAutoComplete()) this.mention_auto_complete.evaluate(ev); + super.onKeyUp(ev); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.elements.define('converse-muc-message-form', MUCMessageForm); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/add-muc.js": +/*!*************************************************!*\ + !*** ./src/plugins/muc-views/modals/add-muc.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ AddMUCModal) +/* harmony export */ }); +/* harmony import */ var _templates_add_muc_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/add-muc.js */ "./src/plugins/muc-views/modals/templates/add-muc.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_add_muc_modal_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../styles/add-muc-modal.scss */ "./src/plugins/muc-views/styles/add-muc-modal.scss"); + + + + + +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env.utils; +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; +class AddMUCModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + initialize() { + super.initialize(); + this.listenTo(this.model, 'change:muc_domain', () => this.render()); + this.muc_roomid_policy_error_msg = null; + this.render(); + this.addEventListener('shown.bs.modal', () => { + /** @type {HTMLInputElement} */this.querySelector('input[name="chatroom"]').focus(); + }, false); + } + renderModal() { + return (0,_templates_add_muc_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this); + } + getModalTitle() { + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Enter a new Groupchat'); + } + parseRoomDataFromEvent(form) { + const data = new FormData(form); + const jid = /** @type {string} */data.get('chatroom')?.trim(); + let nick; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('locked_muc_nickname')) { + nick = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.exports.getDefaultMUCNickname(); + if (!nick) { + throw new Error('Using locked_muc_nickname but no nickname found!'); + } + } else { + nick = /** @type {string} */data.get('nickname').trim(); + } + return { + 'jid': jid, + 'nick': nick + }; + } + openChatRoom(ev) { + ev.preventDefault(); + if (this.checkRoomidPolicy()) return; + const data = this.parseRoomDataFromEvent(ev.target); + if (data.nick === '') { + // Make sure defaults apply if no nick is provided. + data.nick = undefined; + } + let jid; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('locked_muc_domain') || _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('muc_domain') && !u.isValidJID(data.jid)) { + jid = `${Strophe.escapeNode(data.jid)}@${_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('muc_domain')}`; + } else { + jid = data.jid; + this.model.setDomain(jid); + } + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.rooms.open(jid, Object.assign(data, { + jid + }), true); + ev.target.reset(); + this.modal.hide(); + } + checkRoomidPolicy() { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('muc_roomid_policy') && _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('muc_domain')) { + let jid = /** @type {HTMLInputElement} */this.querySelector('converse-autocomplete input').value; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('locked_muc_domain') || !u.isValidJID(jid)) { + jid = `${Strophe.escapeNode(jid)}@${_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('muc_domain')}`; + } + const roomid = Strophe.getNodeFromJid(jid); + const roomdomain = Strophe.getDomainFromJid(jid); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('muc_domain') !== roomdomain || _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('muc_roomid_policy').test(roomid)) { + this.muc_roomid_policy_error_msg = null; + } else { + this.muc_roomid_policy_error_msg = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Groupchat id is invalid.'); + return true; + } + this.render(); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-add-muc-modal', AddMUCModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/config.js": +/*!************************************************!*\ + !*** ./src/plugins/muc-views/modals/config.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCConfigModal) +/* harmony export */ }); +/* harmony import */ var _templates_muc_config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/muc-config.js */ "./src/plugins/muc-views/modals/templates/muc-config.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var utils_file_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! utils/file.js */ "./src/utils/file.js"); +/** + * @typedef {import('@converse/headless/types/plugins/vcard/api').VCardData} VCardData + */ + + + + + +const { + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env.utils; +class MUCConfigModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(options) { + super(options); + this.id = 'converse-muc-config-modal'; + } + initialize() { + super.initialize(); + this.listenTo(this.model, 'change', () => this.render()); + this.listenTo(this.model.features, 'change:passwordprotected', () => this.render()); + this.listenTo(this.model.session, 'change:config_stanza', () => this.render()); + } + renderModal() { + return (0,_templates_muc_config_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this); + } + connectedCallback() { + super.connectedCallback(); + this.getConfig(); + } + getModalTitle() { + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Configure %1$s', this.model.getDisplayName()); + } + async getConfig() { + const iq = await this.model.fetchRoomConfiguration(); + this.model.session.set('config_stanza', iq.outerHTML); + } + + /** + * @param {SubmitEvent} ev + */ + async setAvatar(ev) { + if (!this.model.features.get('vcard-temp')) { + return; + } + const form_data = new FormData( /** @type {HTMLFormElement} */ev.target); + const image_file = /** @type {File} */form_data.get('avatar_image'); + if (image_file?.size) { + const image_data = utils_file_js__WEBPACK_IMPORTED_MODULE_4__.isImageWithAlphaChannel ? image_file : await (0,utils_file_js__WEBPACK_IMPORTED_MODULE_4__.compressImage)(image_file); + const reader = new FileReader(); + reader.onloadend = async () => { + const vcard_data = /** @type {VCardData} */{ + image: btoa( /** @type {string} */reader.result), + image_type: image_file.type + }; + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.vcard.set(this.model.get('jid'), vcard_data); + }; + reader.readAsBinaryString(image_data); + } + } + + /** + * @param {SubmitEvent} ev + */ + async submitConfigForm(ev) { + ev.preventDefault(); + const inputs = sizzle(':input:not([type=button]):not([type=submit]):not([name="avatar_image"][type="file"])', ev.target); + const config_array = inputs.map(u.webForm2xForm).filter(f => f); + try { + await this.model.sendConfiguration(config_array); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + const message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Sorry, an error occurred while trying to submit the config form.") + " " + (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Check your browser's developer console for details."); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Error'), message); + } + try { + await this.setAvatar(ev); + } catch (err) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.fatal(err); + this.alert([(0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Sorry, an error happened while trying to save the groupchat avatar."), (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("You can check your browser's developer console for any error output.")].join(" ")); + return; + } + await this.model.refreshDiscoInfo(); + this.modal.hide(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-muc-config-modal', MUCConfigModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/moderator-tools.js": +/*!*********************************************************!*\ + !*** ./src/plugins/muc-views/modals/moderator-tools.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ModeratorToolsModal) +/* harmony export */ }); +/* harmony import */ var _modtools_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modtools.js */ "./src/plugins/muc-views/modtools.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + + +class ModeratorToolsModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(options) { + super(options); + this.id = "converse-modtools-modal"; + this.affiliation = options.affiliation; + this.jid = options.jid; + } + renderModal() { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)``; + } + getModalTitle() { + // eslint-disable-line class-methods-use-this + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Moderator Tools'); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-modtools-modal', ModeratorToolsModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/muc-details.js": +/*!*****************************************************!*\ + !*** ./src/plugins/muc-views/modals/muc-details.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCDetailsModal) +/* harmony export */ }); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_muc_details_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/muc-details.js */ "./src/plugins/muc-views/modals/templates/muc-details.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_muc_details_modal_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../styles/muc-details-modal.scss */ "./src/plugins/muc-views/styles/muc-details-modal.scss"); + + + + + +class MUCDetailsModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + initialize() { + super.initialize(); + this.listenTo(this.model, 'change', () => this.render()); + this.listenTo(this.model.features, 'change', () => this.render()); + this.listenTo(this.model.occupants, 'add', () => this.render()); + this.listenTo(this.model.occupants, 'change', () => this.render()); + } + renderModal() { + return (0,_templates_muc_details_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this.model); + } + getModalTitle() { + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Groupchat info', this.model.getDisplayName()); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-muc-details-modal', MUCDetailsModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/muc-invite.js": +/*!****************************************************!*\ + !*** ./src/plugins/muc-views/modals/muc-invite.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCInviteModal) +/* harmony export */ }); +/* harmony import */ var shared_autocomplete_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/autocomplete/index.js */ "./src/shared/autocomplete/index.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_muc_invite_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/muc-invite.js */ "./src/plugins/muc-views/modals/templates/muc-invite.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + + +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.env.utils; +class MUCInviteModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(options) { + super(options); + this.id = 'converse-muc-invite-modal'; + this.muc = options.muc; + } + initialize() { + super.initialize(); + this.listenTo(this.model, 'change', () => this.render()); + } + renderModal() { + return (0,_templates_muc_invite_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + getModalTitle() { + return (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Invite someone to this groupchat'); + } + getAutoCompleteList() { + return _converse_headless__WEBPACK_IMPORTED_MODULE_4__._converse.state.roster.map(i => ({ + label: i.getDisplayName(), + value: i.get('jid') + })); + } + + /** + * @param {Event} ev + */ + submitInviteForm(ev) { + ev.preventDefault(); + // TODO: Add support for sending an invite to multiple JIDs + const data = new FormData( /** @type {HTMLFormElement} */ev.target); + const jid = /** @type {string} */data.get('invitee_jids')?.trim(); + const reason = data.get('reason'); + if (u.isValidJID(jid)) { + // TODO: Create and use API here + this.muc.directInvite(jid, reason); + this.modal.hide(); + } else { + this.model.set({ + 'invalid_invite_jid': true + }); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.elements.define('converse-muc-invite-modal', MUCInviteModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/muc-list.js": +/*!**************************************************!*\ + !*** ./src/plugins/muc-views/modals/muc-list.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCListModal) +/* harmony export */ }); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_muc_description_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../templates/muc-description.js */ "./src/plugins/muc-views/templates/muc-description.js"); +/* harmony import */ var _templates_muc_list_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../templates/muc-list.js */ "./src/plugins/muc-views/templates/muc-list.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + + + +const { + Strophe, + $iq, + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_5__.converse.env; +const { + getAttributes +} = _converse_headless__WEBPACK_IMPORTED_MODULE_5__.u; + +/** + * Insert groupchat info (based on returned #disco IQ stanza) + * @param {HTMLElement} el - The HTML DOM element that contains the info. + * @param {Element} stanza - The IQ stanza containing the groupchat info. + */ +function insertRoomInfo(el, stanza) { + // All MUC features found here: https://xmpp.org/registrar/disco-features.html + el.querySelector('span.spinner').remove(); + el.querySelector('a.room-info').classList.add('selected'); + el.insertAdjacentHTML('beforeend', _converse_headless__WEBPACK_IMPORTED_MODULE_5__.u.getElementFromTemplateResult((0,_templates_muc_description_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ + 'jid': stanza.getAttribute('from'), + 'desc': sizzle('field[var="muc#roominfo_description"] value', stanza).shift()?.textContent, + 'occ': sizzle('field[var="muc#roominfo_occupants"] value', stanza).shift()?.textContent, + 'hidden': sizzle('feature[var="muc_hidden"]', stanza).length, + 'membersonly': sizzle('feature[var="muc_membersonly"]', stanza).length, + 'moderated': sizzle('feature[var="muc_moderated"]', stanza).length, + 'nonanonymous': sizzle('feature[var="muc_nonanonymous"]', stanza).length, + 'open': sizzle('feature[var="muc_open"]', stanza).length, + 'passwordprotected': sizzle('feature[var="muc_passwordprotected"]', stanza).length, + 'persistent': sizzle('feature[var="muc_persistent"]', stanza).length, + 'publicroom': sizzle('feature[var="muc_publicroom"]', stanza).length, + 'semianonymous': sizzle('feature[var="muc_semianonymous"]', stanza).length, + 'temporary': sizzle('feature[var="muc_temporary"]', stanza).length, + 'unmoderated': sizzle('feature[var="muc_unmoderated"]', stanza).length + }))); +} + +/** + * Show/hide extra information about a groupchat in a listing. + * @param {Event} ev + */ +function toggleRoomInfo(ev) { + const parent_el = _converse_headless__WEBPACK_IMPORTED_MODULE_5__.u.ancestor(ev.target, '.room-item'); + const div_el = parent_el.querySelector('div.room-info'); + if (div_el) { + _converse_headless__WEBPACK_IMPORTED_MODULE_5__.u.slideIn(div_el).then(_converse_headless__WEBPACK_IMPORTED_MODULE_5__.u.removeElement); + parent_el.querySelector('a.room-info').classList.remove('selected'); + } else { + parent_el.insertAdjacentElement('beforeend', _converse_headless__WEBPACK_IMPORTED_MODULE_5__.u.getElementFromTemplateResult((0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_3__["default"])())); + _converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.disco.info( /** @type HTMLElement */ev.target.getAttribute('data-room-jid'), null).then(stanza => insertRoomInfo(parent_el, stanza)).catch(e => _converse_headless__WEBPACK_IMPORTED_MODULE_5__.log.error(e)); + } +} +class MUCListModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + constructor(options) { + super(options); + this.items = []; + this.loading_items = false; + } + initialize() { + super.initialize(); + this.listenTo(this.model, 'change:muc_domain', this.onDomainChange); + this.listenTo(this.model, 'change:feedback_text', () => this.render()); + this.addEventListener('shown.bs.modal', () => _converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.settings.get('locked_muc_domain') && this.updateRoomsList()); + this.model.save('feedback_text', ''); + } + renderModal() { + return (0,_templates_muc_list_js__WEBPACK_IMPORTED_MODULE_2__["default"])(Object.assign(this.model.toJSON(), { + 'show_form': !_converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.settings.get('locked_muc_domain'), + 'server_placeholder': this.model.get('muc_domain') || (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('conference.example.org'), + 'items': this.items, + 'loading_items': this.loading_items, + 'openRoom': ev => this.openRoom(ev), + 'setDomainFromEvent': ev => this.setDomainFromEvent(ev), + 'submitForm': ev => this.showRooms(ev), + 'toggleRoomInfo': ev => this.toggleRoomInfo(ev) + })); + } + getModalTitle() { + // eslint-disable-line class-methods-use-this + return (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Query for Groupchats'); + } + openRoom(ev) { + ev.preventDefault(); + const jid = ev.target.getAttribute('data-room-jid'); + const name = ev.target.getAttribute('data-room-name'); + this.modal.hide(); + _converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.rooms.open(jid, { + 'name': name + }, true); + } + toggleRoomInfo(ev) { + ev.preventDefault(); + toggleRoomInfo(ev); + } + onDomainChange() { + _converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.settings.get('auto_list_rooms') && this.updateRoomsList(); + } + + /** + * Handle the IQ stanza returned from the server, containing + * all its public groupchats. + * @method _converse.ChatRoomView#onRoomsFound + * @param {HTMLElement} [iq] + */ + onRoomsFound(iq) { + this.loading_items = false; + const rooms = iq ? sizzle('query item', iq) : []; + if (rooms.length) { + this.model.set({ + 'feedback_text': (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Groupchats found') + }, { + 'silent': true + }); + this.items = rooms.map(getAttributes); + } else { + this.items = []; + this.model.set({ + 'feedback_text': (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('No groupchats found') + }, { + 'silent': true + }); + } + this.render(); + return true; + } + + /** + * Send an IQ stanza to the server asking for all groupchats + * @private + * @method _converse.ChatRoomView#updateRoomsList + */ + updateRoomsList() { + const iq = $iq({ + 'to': this.model.get('muc_domain'), + 'from': _converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.connection.get().jid, + 'type': "get" + }).c("query", { + xmlns: Strophe.NS.DISCO_ITEMS + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.sendIQ(iq).then(iq => this.onRoomsFound(iq)).catch(() => this.onRoomsFound()); + } + showRooms(ev) { + ev.preventDefault(); + this.loading_items = true; + this.render(); + const data = new FormData(ev.target); + this.model.setDomain(data.get('server')); + this.updateRoomsList(); + } + setDomainFromEvent(ev) { + this.model.setDomain(ev.target.value); + } + setNick(ev) { + this.model.save({ + nick: ev.target.value + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.elements.define('converse-muc-list-modal', MUCListModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/nickname.js": +/*!**************************************************!*\ + !*** ./src/plugins/muc-views/modals/nickname.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCNicknameModal) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); + + + + +class MUCNicknameModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_3__["default"] { + renderModal() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } + getModalTitle() { + // eslint-disable-line class-methods-use-this + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Change your nickname'); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-muc-nickname-modal', MUCNicknameModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/occupant.js": +/*!**************************************************!*\ + !*** ./src/plugins/muc-views/modals/occupant.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ OccupantModal) +/* harmony export */ }); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_occupant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/occupant.js */ "./src/plugins/muc-views/modals/templates/occupant.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + + +const { + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.env; +class OccupantModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + constructor(options) { + super(); + this.message = options.message; + this.addEventListener("affiliationChanged", () => this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Affiliation changed'))); + this.addEventListener("roleChanged", () => this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('role changed'))); + } + initialize() { + super.initialize(); + const model = this.model ?? this.message; + this.listenTo(model, 'change', () => this.render()); + /** + * Triggered once the OccupantModal has been initialized + * @event _converse#occupantModalInitialized + * @type { Object } + * @example _converse.api.listen.on('occupantModalInitialized', data); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.trigger('occupantModalInitialized', { + 'model': this.model, + 'message': this.message + }); + } + getVcard() { + const model = this.model ?? this.message; + if (model.vcard) { + return model.vcard; + } + const jid = model?.get('jid') || model?.get('from'); + return jid ? _converse_headless__WEBPACK_IMPORTED_MODULE_4__._converse.state.vcards.get(jid) : null; + } + renderModal() { + return (0,_templates_occupant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this); + } + getModalTitle() { + const model = this.model ?? this.message; + return model?.getDisplayName(); + } + addToContacts() { + const model = this.model ?? this.message; + const jid = model.get('jid'); + if (jid) _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.modal.show('converse-add-contact-modal', { + 'model': new _converse_skeletor__WEBPACK_IMPORTED_MODULE_2__.Model({ + jid + }) + }); + } + toggleForm(ev) { + const toggle = u.ancestor(ev.target, '.toggle-form'); + const form = toggle.getAttribute('data-form'); + if (form === 'row-form') { + this.show_role_form = !this.show_role_form; + } else { + this.show_affiliation_form = !this.show_affiliation_form; + } + this.render(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.elements.define('converse-muc-occupant-modal', OccupantModal); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/templates/add-muc.js": +/*!***********************************************************!*\ + !*** ./src/plugins/muc-views/modals/templates/add-muc.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dompurify */ "./node_modules/dompurify/dist/purify.js"); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_unsafe_html_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit/directives/unsafe-html.js */ "./node_modules/lit/directives/unsafe-html.js"); +/* harmony import */ var _search_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../search.js */ "./src/plugins/muc-views/search.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + + + + + +const nickname_input = () => { + const i18n_nickname = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Nickname'); + const i18n_required_field = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('This field is required'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
`; +}; + +/** + * @param {import('../add-muc.js').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_join = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Join'); + const muc_domain = el.model.get('muc_domain') || _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_domain'); + let placeholder = ''; + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('locked_muc_domain')) { + placeholder = muc_domain ? `name@${muc_domain}` : (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('name@conference.example.org'); + } + const label_room_address = muc_domain ? (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Groupchat name') : (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Groupchat address'); + const muc_roomid_policy_error_msg = el.muc_roomid_policy_error_msg; + const muc_roomid_policy_hint = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_roomid_policy_hint'); + const muc_search_service = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_search_service'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
${muc_roomid_policy_error_msg ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''} ${muc_search_service ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
${muc_roomid_policy_hint ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
${(0,lit_directives_unsafe_html_js__WEBPACK_IMPORTED_MODULE_3__.unsafeHTML)(dompurify__WEBPACK_IMPORTED_MODULE_0___default().sanitize(muc_roomid_policy_hint, { + 'ALLOWED_TAGS': ['b', 'br', 'em'] + }))}
` : ''} ${!_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('locked_muc_nickname') ? nickname_input() : ''}
`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/templates/muc-config.js": +/*!**************************************************************!*\ + !*** ./src/plugins/muc-views/modals/templates/muc-config.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_components_image_picker_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/image-picker.js */ "./src/shared/components/image-picker.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _styles_config_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/config.scss */ "./src/plugins/muc-views/modals/styles/config.scss"); + + + + + + +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env.utils; + +/** + * @param {import('../config').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const whitelist = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('roomconfig_whitelist'); + let fieldTemplates = []; + let instructions = ''; + let title = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Loading configuration form'); + const config_stanza = el.model.session.get('config_stanza'); + if (config_stanza) { + const stanza = u.toStanza(config_stanza); + let { + fields + } = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.parsers.parseXForm(stanza); + if (whitelist.length) { + fields = fields.filter(f => whitelist.includes(f.var)); + } + const options = { + new_password: !el.model.features.get('passwordprotected'), + fixed_username: el.model.get('jid') + }; + fieldTemplates = fields.map(f => u.xFormField2TemplateResult(f, options)); + instructions = stanza.querySelector('instructions')?.textContent; + title = stanza.querySelector('title')?.textContent; + } + const i18n_save = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Save'); + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`
${title}${title !== instructions ? (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`

${instructions}

` : ''} ${fieldTemplates.length && el.model.features.get('vcard-temp') ? (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`
` : ''} ${fieldTemplates.length ? fieldTemplates : (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ + 'classes': 'hor_centered' + })}
${fieldTemplates.length ? (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`
` : ''}
`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/templates/muc-details.js": +/*!***************************************************************!*\ + !*** ./src/plugins/muc-views/modals/templates/muc-details.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* eslint max-len: 0 */ + + + +/** + * @param {import('@converse/headless').MUC} model + */ +const subject = model => { + const subject = model.get('subject'); + const i18n_topic = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Topic'); + const i18n_topic_author = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Topic author'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`

${i18n_topic}:

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

`; +}; + +/** + * @param {import('@converse/headless').MUC} model + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (model => { + const config = model.config.toJSON(); + const features = model.features.toJSON(); + const num_occupants = model.occupants.filter(o => o.get('show') !== 'offline').length; + const i18n_address = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('XMPP address'); + const i18n_archiving = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Message archiving'); + const i18n_archiving_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Messages are archived on the server'); + const i18n_desc = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Description'); + const i18n_features = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Features'); + const i18n_hidden = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Hidden'); + const i18n_hidden_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat is not publicly searchable'); + const i18n_members_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat is restricted to members only'); + const i18n_members_only = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Members only'); + const i18n_moderated = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Moderated'); + const i18n_moderated_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Participants entering this groupchat need to request permission to write'); + const i18n_name = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Name'); + const i18n_no_pass_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat does not require a password upon entry'); + const i18n_no_password_required = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('No password required'); + const i18n_not_anonymous = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Not anonymous'); + const i18n_not_anonymous_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All other groupchat participants can see your XMPP address'); + const i18n_not_moderated = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Not moderated'); + const i18n_not_moderated_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Participants entering this groupchat can write right away'); + const i18n_online_users = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Online users'); + const i18n_open = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Open'); + const i18n_open_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Anyone can join this groupchat'); + const i18n_password_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat requires a password before entry'); + const i18n_password_protected = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Password protected'); + const i18n_persistent = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Persistent'); + const i18n_persistent_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat persists even if it\'s unoccupied'); + const i18n_public = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Public'); + const i18n_public_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat is publicly searchable'); + const i18n_semi_anon = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Semi-anonymous'); + const i18n_semi_anon_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Only moderators can see your XMPP address'); + const i18n_temporary = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Temporary'); + const i18n_temporary_help = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat will disappear once the last person leaves'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`

${i18n_name}: ${model.get('name')}

${i18n_address}:


${i18n_desc}:

${model.get('subject') ? subject(model) : ''}

${i18n_online_users}: ${num_occupants}

${i18n_features}:

    ${features.passwordprotected ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_password_protected} - ${i18n_password_help}
  • ` : ''} ${features.unsecured ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_no_password_required} - ${i18n_no_pass_help}
  • ` : ''} ${features.hidden ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_hidden} - ${i18n_hidden_help}
  • ` : ''} ${features.public_room ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_public} - ${i18n_public_help}
  • ` : ''} ${features.membersonly ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_members_only} - ${i18n_members_help}
  • ` : ''} ${features.open ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_open} - ${i18n_open_help}
  • ` : ''} ${features.persistent ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_persistent} - ${i18n_persistent_help}
  • ` : ''} ${features.temporary ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_temporary} - ${i18n_temporary_help}
  • ` : ''} ${features.nonanonymous ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_not_anonymous} - ${i18n_not_anonymous_help}
  • ` : ''} ${features.semianonymous ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_semi_anon} - ${i18n_semi_anon_help}
  • ` : ''} ${features.moderated ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_moderated} - ${i18n_moderated_help}
  • ` : ''} ${features.unmoderated ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_not_moderated} - ${i18n_not_moderated_help}
  • ` : ''} ${features.mam_enabled ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${i18n_archiving} - ${i18n_archiving_help}
  • ` : ''}

`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/templates/muc-invite.js": +/*!**************************************************************!*\ + !*** ./src/plugins/muc-views/modals/templates/muc-invite.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_invite = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Invite'); + const i18n_jid_placeholder = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('user@example.org'); + const i18n_error_message = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Please enter a valid XMPP address'); + const i18n_invite_label = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('XMPP Address'); + const i18n_reason = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Optional reason for the invitation'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
${el.model.get('invalid_invite_jid') ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
${i18n_error_message}
` : ''}
`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/modals/templates/occupant.js": +/*!************************************************************!*\ + !*** ./src/plugins/muc-views/modals/templates/occupant.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_avatar_avatar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/avatar/avatar.js */ "./src/shared/avatar/avatar.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + + + +/** + * @param {import('../occupant').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const model = el.model ?? el.message; + const jid = model?.get('jid'); + const vcard = el.getVcard(); + const nick = model.get('nick'); + const occupant_id = model.get('occupant_id'); + const role = el.model?.get('role'); + const affiliation = el.model?.get('affiliation'); + const hats = el.model?.get('hats')?.length ? el.model.get('hats') : null; + const muc = el.model.collection.chatroom; + const allowed_commands = muc.getAllowedCommands(); + const may_moderate = allowed_commands.includes('modtools'); + const i18n_add_to_contacts = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Add to Contacts'); + const can_see_real_jids = muc.features.get('nonanonymous') || muc.getOwnRole() === 'moderator'; + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_4__._converse.session.get('bare_jid'); + const not_me = jid != bare_jid; + const add_to_contacts = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('singleton') ? '' // in singleton mode, there is no roster, so adding to contact makes no sense. + : _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.contacts.get(jid).then(contact => !contact && not_me && can_see_real_jids).then(add => add ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
  • ` : ''); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${nick ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
      ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Nickname')}:
      ${nick}
      ` : ''}
    • ${jid ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
      ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('XMPP Address')}:
      ${jid}
      ` : ''}
    • ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Affiliation')}:
      ${affiliation}  ${may_moderate ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${el.show_affiliation_form ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}` : ''}
    • ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Role')}:
      ${role}  ${may_moderate && role ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${el.show_role_form ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}` : ''}
    • ${hats ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
      ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Hats')}:
      ${hats}
      ` : ''}
    • ${occupant_id ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
      ${(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Occupant Id')}:
      ${occupant_id}
      ` : ''}
    • ${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_3__.until)(add_to_contacts, '')}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/modtools.js": +/*!*******************************************!*\ + !*** ./src/plugins/muc-views/modtools.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ModeratorTools) +/* harmony export */ }); +/* harmony import */ var _converse_openpromise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/openpromise */ "./node_modules/@converse/openpromise/openpromise.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_moderator_tools_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/moderator-tools.js */ "./src/plugins/muc-views/templates/moderator-tools.js"); +/* harmony import */ var _styles_moderator_tools_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/moderator-tools.scss */ "./src/plugins/muc-views/styles/moderator-tools.scss"); +/** + * @typedef {module:muc-affiliations-utils.NonOutcastAffiliation} NonOutcastAffiliation + */ + + + + + + +const { + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +const { + AFFILIATIONS, + ROLES +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +class ModeratorTools extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__.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 + }, + tab: { + type: String + }, + users_with_affiliation: { + type: Array, + attribute: false + }, + users_with_role: { + type: Array, + attribute: false + } + }; + } + constructor() { + super(); + this.jid = null; + this.tab = 'affiliations'; + this.affiliation = null; + this.affiliations_filter = ''; + this.role = ''; + this.roles_filter = ''; + this.addEventListener("affiliationChanged", () => { + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Affiliation changed'), 'primary'); + this.onSearchAffiliationChange(); + this.requestUpdate(); + }); + this.addEventListener("roleChanged", () => { + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Role changed'), 'primary'); + this.requestUpdate(); + }); + } + updated(changed) { + changed.has('role') && this.onSearchRoleChange(); + changed.has('affiliation') && this.onSearchAffiliationChange(); + changed.has('jid') && changed.get('jid') && this.initialize(); + } + async initialize() { + this.initialized = (0,_converse_openpromise__WEBPACK_IMPORTED_MODULE_0__.getOpenPromise)(); + const muc = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.rooms.get(this.jid); + await muc.initialized; + this.muc = muc; + this.initialized.resolve(); + } + render() { + if (this.muc?.occupants) { + const occupant = this.muc.occupants.getOwnOccupant(); + return (0,_templates_moderator_tools_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this, { + 'affiliations_filter': this.affiliations_filter, + 'alert_message': this.alert_message, + 'alert_type': this.alert_type, + 'assignable_affiliations': occupant.getAssignableAffiliations(), + 'assignable_roles': occupant.getAssignableRoles(), + '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 => !_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('modtools_disable_query').includes(a)), + 'queryable_roles': ROLES.filter(a => !_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('modtools_disable_query').includes(a)), + 'roles_filter': this.roles_filter, + 'switchTab': ev => this.switchTab(ev), + 'tab': this.tab, + 'toggleForm': ev => this.toggleForm(ev), + 'users_with_affiliation': this.users_with_affiliation, + 'users_with_role': this.users_with_role + }); + } else { + return ''; + } + } + switchTab(ev) { + ev.stopPropagation(); + ev.preventDefault(); + this.tab = ev.target.getAttribute('data-name'); + this.requestUpdate(); + } + async onSearchAffiliationChange() { + if (!this.affiliation) return; + await this.initialized; + this.clearAlert(); + this.loading_users_with_affiliation = true; + this.users_with_affiliation = null; + if (this.shouldFetchAffiliationsList()) { + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.rooms.affiliations.get(this.affiliation, this.jid); + if (result instanceof Error) { + this.alert(result.message, 'danger'); + this.users_with_affiliation = []; + } else { + this.users_with_affiliation = result; + } + } else { + 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.affiliation; + if (affiliation === 'none') { + return false; + } + const auto_fetched_affs = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.MUCOccupants.getAutoFetchedAffiliationLists(); + if (auto_fetched_affs.includes(affiliation)) { + return false; + } else { + return true; + } + } + toggleForm(ev) { + ev.stopPropagation(); + ev.preventDefault(); + const toggle = u.ancestor(ev.target, '.toggle-form'); + const sel = toggle.getAttribute('data-form'); + const form = u.ancestor(toggle, '.list-group-item').querySelector(sel); + if (u.hasClass('hidden', form)) { + u.removeClass('hidden', form); + } else { + u.addClass('hidden', form); + } + } + filterRoleResults(ev) { + this.roles_filter = ev.target.value; + this.render(); + } + filterAffiliationResults(ev) { + this.affiliations_filter = ev.target.value; + } + queryRole(ev) { + ev.stopPropagation(); + ev.preventDefault(); + const data = new FormData(ev.target); + const role = /** @type {string} */data.get('role'); + this.role = null; + this.role = role; + } + queryAffiliation(ev) { + ev.stopPropagation(); + ev.preventDefault(); + const data = new FormData(ev.target); + const affiliation = /** @type {NonOutcastAffiliation} */data.get('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; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-modtools', ModeratorTools); + +/***/ }), + +/***/ "./src/plugins/muc-views/muc-chat-content.js": +/*!***************************************************!*\ + !*** ./src/plugins/muc-views/muc-chat-content.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCChatContent) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_chat_chat_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/chat/chat-content */ "./src/shared/chat/chat-content.js"); +/* harmony import */ var shared_chat_message_history__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/chat/message-history */ "./src/shared/chat/message-history.js"); +/* harmony import */ var _styles_muc_chat_content_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/muc-chat-content.scss */ "./src/plugins/muc-views/styles/muc-chat-content.scss"); + + + + +class MUCChatContent extends shared_chat_chat_content__WEBPACK_IMPORTED_MODULE_1__["default"] { + async initialize() { + await super.initialize(); + this.listenTo(this.model, 'change:hidden_occupants', () => this.requestUpdate()); + this.listenTo(this.model.occupants, 'change', () => this.requestUpdate()); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-muc-chat-content', MUCChatContent); + +/***/ }), + +/***/ "./src/plugins/muc-views/muc.js": +/*!**************************************!*\ + !*** ./src/plugins/muc-views/muc.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCView) +/* harmony export */ }); +/* harmony import */ var shared_chat_baseview_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/chat/baseview.js */ "./src/shared/chat/baseview.js"); +/* harmony import */ var _templates_muc_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/muc.js */ "./src/plugins/muc-views/templates/muc.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class MUCView extends shared_chat_baseview_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + length = 300; + is_chatroom = true; + async initialize() { + this.model = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.rooms.get(this.jid); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.chatboxviews.add(this.jid, this); + this.setAttribute('id', this.model.get('box_id')); + this.listenTo(this.model.session, 'change:connection_status', this.onConnectionStatusChanged); + this.listenTo(this.model.session, 'change:view', () => this.requestUpdate()); + document.addEventListener('visibilitychange', () => this.onWindowStateChanged()); + this.onConnectionStatusChanged(); + this.model.maybeShow(); + /** + * Triggered once a {@link MUCView} has been opened + * @event _converse#chatRoomViewInitialized + * @type {MUCView} + * @example _converse.api.listen.on('chatRoomViewInitialized', view => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.trigger('chatRoomViewInitialized', this); + } + render() { + return (0,_templates_muc_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this); + } + onConnectionStatusChanged() { + const conn_status = this.model.session.get('connection_status'); + if (conn_status === _converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.ROOMSTATUS.CONNECTING) { + this.model.session.save({ + 'disconnection_actor': undefined, + 'disconnection_message': undefined, + 'disconnection_reason': undefined + }); + this.model.save({ + 'moved_jid': undefined, + 'password_validation_message': undefined, + 'reason': undefined + }); + } + this.requestUpdate(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-muc', MUCView); + +/***/ }), + +/***/ "./src/plugins/muc-views/nickname-form.js": +/*!************************************************!*\ + !*** ./src/plugins/muc-views/nickname-form.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _templates_muc_nickname_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/muc-nickname-form.js */ "./src/plugins/muc-views/templates/muc-nickname-form.js"); +/* harmony import */ var shared_components_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_nickname_form_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/nickname-form.scss */ "./src/plugins/muc-views/styles/nickname-form.scss"); + + + + +class MUCNicknameForm extends shared_components_element__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + constructor() { + super(); + this.jid = null; + } + static get properties() { + return { + 'jid': { + type: String + } + }; + } + connectedCallback() { + super.connectedCallback(); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state; + this.model = chatboxes.get(this.jid); + } + render() { + return (0,_templates_muc_nickname_form_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this); + } + submitNickname(ev) { + ev.preventDefault(); + const nick = ev.target.nick.value.trim(); + if (!nick) { + return; + } + if (this.model.isEntered()) { + this.model.setNickname(nick); + this.closeModal(); + } else { + this.model.join(nick); + } + } + closeModal() { + /** @type {import('plugins/modal/modal').default} */document.querySelector('converse-muc-nickname-modal').close(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-muc-nickname-form', MUCNicknameForm); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MUCNicknameForm); + +/***/ }), + +/***/ "./src/plugins/muc-views/occupant-bottom-panel.js": +/*!********************************************************!*\ + !*** ./src/plugins/muc-views/occupant-bottom-panel.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ OccupantBottomPanel) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var shared_autocomplete_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/autocomplete/index.js */ "./src/shared/autocomplete/index.js"); +/* harmony import */ var plugins_chatview_bottom_panel_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! plugins/chatview/bottom-panel.js */ "./src/plugins/chatview/bottom-panel.js"); +/* harmony import */ var _templates_occupant_bottom_panel_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/occupant-bottom-panel.js */ "./src/plugins/muc-views/templates/occupant-bottom-panel.js"); +/* harmony import */ var _styles_occupant_bottom_panel_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/occupant-bottom-panel.scss */ "./src/plugins/muc-views/styles/occupant-bottom-panel.scss"); + + + + + + +class OccupantBottomPanel extends plugins_chatview_bottom_panel_js__WEBPACK_IMPORTED_MODULE_3__["default"] { + static get properties() { + return { + model: { + type: Object, + noAccessor: true + }, + muc: { + type: Object + } + }; + } + constructor() { + super(); + this.muc = null; + } + async initialize() { + await super.initialize(); + this.listenTo(this.muc.session, 'change:connection_status', () => this.requestUpdate()); + } + render() { + if (!this.model) return ''; + return (0,_templates_occupant_bottom_panel_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this); + } + canPostMessages() { + return this.muc.isEntered() && this.model.get('show') !== 'offline'; + } + openChat() { + const jid = this.model.get('jid'); + return jid ? _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.chats.open(jid, {}, true) : _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Error'), 'Could not find XMPP address'); + } + invite() { + const jid = this.model.get('jid'); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.once('roomInviteSent', () => _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.alert('info', (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Success'), (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('The user has been invited to join this groupchat'))); + return jid ? this.muc.directInvite(jid) : _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Error'), 'Could not find XMPP address'); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-occupant-bottom-panel', OccupantBottomPanel); + +/***/ }), + +/***/ "./src/plugins/muc-views/occupant.js": +/*!*******************************************!*\ + !*** ./src/plugins/muc-views/occupant.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCOccupant) +/* harmony export */ }); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_muc_occupant_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/muc-occupant.js */ "./src/plugins/muc-views/templates/muc-occupant.js"); +/* harmony import */ var _occupant_bottom_panel_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./occupant-bottom-panel.js */ "./src/plugins/muc-views/occupant-bottom-panel.js"); +/* harmony import */ var _styles_muc_occupant_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/muc-occupant.scss */ "./src/plugins/muc-views/styles/muc-occupant.scss"); + + + + + +const { + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; + +class MUCOccupant extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + constructor() { + super(); + this.muc_jid = null; + this.occupant_id = null; + } + static get properties() { + return { + muc_jid: { + type: String + }, + occupant_id: { + type: String + } + }; + } + async initialize() { + super.initialize(); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + this.muc = chatboxes.get(this.muc_jid); + await this.muc.initialized; + this.model = this.muc.occupants.get(this.occupant_id); + this.requestUpdate(); + } + render() { + return this.muc ? (0,_templates_muc_occupant_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this) : ''; + } + + /** + * @param {string} jid + */ + openChat(jid) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.chats.open(jid, {}, true); + } + closeSidebar() { + u.safeSave(this.muc, { + 'hidden_occupants': true + }); + } + + /** @param {MouseEvent} [ev] */ + showOccupantModal(ev) { + ev?.preventDefault?.(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.show('converse-muc-occupant-modal', { + model: this.model + }, ev); + } + getVcard() { + const model = this.model; + if (model.vcard) { + return model.vcard; + } + const jid = model?.get('jid') || model?.get('from'); + return jid ? _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.vcards.get(jid) : null; + } + addToContacts() { + const model = this.model; + const jid = model.get('jid'); + if (jid) _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.show('converse-add-contact-modal', { + 'model': new _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model({ + jid + }) + }); + } + + /** + * @param {MouseEvent} ev + */ + toggleForm(ev) { + const toggle = u.ancestor(ev.target, '.toggle-form'); + const form = toggle.getAttribute('data-form'); + if (form === 'row-form') { + this.show_role_form = !this.show_role_form; + } else { + this.show_affiliation_form = !this.show_affiliation_form; + } + this.render(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-muc-occupant', MUCOccupant); + +/***/ }), + +/***/ "./src/plugins/muc-views/occupants.js": +/*!********************************************!*\ + !*** ./src/plugins/muc-views/occupants.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCOccupants) +/* harmony export */ }); +/* harmony import */ var lodash_es_debounce_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lodash-es/debounce.js */ "./node_modules/lodash-es/debounce.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_muc_occupants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/muc-occupants.js */ "./src/plugins/muc-views/templates/muc-occupants.js"); +/* harmony import */ var shared_autocomplete_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/autocomplete/index.js */ "./src/shared/autocomplete/index.js"); +/* harmony import */ var _modals_muc_invite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modals/muc-invite.js */ "./src/plugins/muc-views/modals/muc-invite.js"); +/* harmony import */ var _occupant_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./occupant.js */ "./src/plugins/muc-views/occupant.js"); +/* harmony import */ var shared_styles_status_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! shared/styles/status.scss */ "./src/shared/styles/status.scss"); +/* harmony import */ var _styles_muc_occupants_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styles/muc-occupants.scss */ "./src/plugins/muc-views/styles/muc-occupants.scss"); + + + + + + + + + + +const { + initStorage +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u; +class MUCOccupants extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + constructor() { + super(); + this.jid = null; + } + static get properties() { + return { + jid: { + type: String + } + }; + } + initialize() { + const filter_id = `_converse.occupants-filter-${this.jid}`; + this.filter = new _converse_headless__WEBPACK_IMPORTED_MODULE_1__.RosterFilter(); + this.filter.id = filter_id; + initStorage(this.filter, filter_id); + this.filter.fetch(); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + this.model = chatboxes.get(this.jid); + + // To avoid rendering continuously the participant list in case of massive joins/leaves: + const debouncedRequestUpdate = (0,lodash_es_debounce_js__WEBPACK_IMPORTED_MODULE_9__["default"])(() => this.requestUpdate(), 200, { + maxWait: 1000 + }); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + this.listenTo(this.model.occupants, 'add', debouncedRequestUpdate); + this.listenTo(this.model.occupants, 'remove', debouncedRequestUpdate); + this.listenTo(this.model.occupants, 'change', debouncedRequestUpdate); + this.listenTo(this.model.occupants, 'sort', debouncedRequestUpdate); + this.listenTo(this.model.occupants, 'vcard:change', debouncedRequestUpdate); + this.listenTo(this.model.occupants, 'vcard:add', debouncedRequestUpdate); + this.listenTo(this.model.features, 'change:open', () => this.requestUpdate()); + this.model.initialized.then(() => this.requestUpdate()); + } + render() { + return (0,_templates_muc_occupants_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this); + } + + /** + * @param {MouseEvent} ev + */ + showInviteModal(ev) { + ev.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.show('converse-muc-invite-modal', { + model: new _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model(), + muc: this.model + }, ev); + } + + /** @param {MouseEvent} ev */ + toggleFilter(ev) { + ev?.preventDefault?.(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.safeSave(this.model, { + 'filter_visible': !this.model.get('filter_visible') + }); + } + + /** @param {MouseEvent} ev */ + closeSidebar(ev) { + ev?.preventDefault?.(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.safeSave(this.model, { + 'hidden_occupants': true + }); + } + + /** + * @param {MouseEvent} ev + * @param {import('@converse/headless/types/plugins/muc/occupant.js').default} occupant + */ + onOccupantClicked(ev, occupant) { + ev.preventDefault(); + if (this.model.getOwnOccupant() === occupant) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.show('converse-profile-modal', { + model: _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.xmppstatus + }, ev); + } else { + this.model.save({ + 'sidebar_view': `occupant:${occupant.id}` + }); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-muc-occupants', MUCOccupants); + +/***/ }), + +/***/ "./src/plugins/muc-views/password-form.js": +/*!************************************************!*\ + !*** ./src/plugins/muc-views/password-form.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _templates_muc_password_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/muc-password-form.js */ "./src/plugins/muc-views/templates/muc-password-form.js"); +/* harmony import */ var shared_components_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class MUCPasswordForm extends shared_components_element__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + 'jid': { + type: String + } + }; + } + constructor() { + super(); + this.jid = null; + } + connectedCallback() { + super.connectedCallback(); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state; + this.model = chatboxes.get(this.jid); + this.listenTo(this.model, 'change:password_validation_message', this.render); + this.render(); + } + render() { + return (0,_templates_muc_password_form_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ + 'jid': this.model.get('jid'), + 'submitPassword': ev => this.submitPassword(ev), + 'validation_message': this.model.get('password_validation_message') + }); + } + submitPassword(ev) { + ev.preventDefault(); + const password = /** @type {HTMLInputElement} */this.querySelector('input[type=password]').value; + this.model.join(this.model.get('nick'), password); + this.model.set('password_validation_message', null); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-muc-password-form', MUCPasswordForm); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MUCPasswordForm); + +/***/ }), + +/***/ "./src/plugins/muc-views/role-form.js": +/*!********************************************!*\ + !*** ./src/plugins/muc-views/role-form.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _templates_role_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/role-form.js */ "./src/plugins/muc-views/templates/role-form.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + +const { + Strophe, + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; +class RoleForm extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + muc: { + type: Object + }, + jid: { + type: String + }, + role: { + type: String + }, + alert_message: { + type: String, + attribute: false + }, + alert_type: { + type: String, + attribute: false + } + }; + } + constructor() { + super(); + this.muc = null; + } + render() { + return (0,_templates_role_form_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this); + } + alert(message, type) { + this.alert_message = message; + this.alert_type = type; + } + assignRole(ev) { + ev.stopPropagation(); + ev.preventDefault(); + this.alert(); // clear alert + + 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'); + this.muc.setRole(occupant, role, reason, () => { + /** + * @event roleChanged + * @example + * const el = document.querySelector('converse-muc-role-form'); + * el.addEventListener('roleChanged', () => { ... }); + */ + const event = new CustomEvent('roleChanged', { + bubbles: true + }); + this.dispatchEvent(event); + }, e => { + if (sizzle(`not-allowed[xmlns="${Strophe.NS.STANZAS}"]`, e).length) { + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("You're not allowed to make that change"), 'danger'); + } else { + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Sorry, something went wrong while trying to set the role'), 'danger'); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.u.isErrorObject(e)) _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + } + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-muc-role-form', RoleForm); + +/***/ }), + +/***/ "./src/plugins/muc-views/search.js": +/*!*****************************************!*\ + !*** ./src/plugins/muc-views/search.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ getAutoCompleteList: () => (/* binding */ getAutoCompleteList) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + +const { + Strophe, + $iq, + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +Strophe.addNamespace('MUCSEARCH', 'https://xmlns.zombofant.net/muclumbus/search/1.0'); +const rooms_cache = {}; + +/** + * @param {string} query + */ +async function searchRooms(query) { + const muc_search_service = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('muc_search_service'); + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + const iq = $iq({ + 'type': 'get', + 'from': bare_jid, + 'to': muc_search_service + }).c('search', { + 'xmlns': Strophe.NS.MUCSEARCH + }).c('set', { + 'xmlns': Strophe.NS.RSM + }).c('max').t(10).up().up().c('x', { + 'xmlns': Strophe.NS.XFORM, + 'type': 'submit' + }).c('field', { + 'var': 'FORM_TYPE', + 'type': 'hidden' + }).c('value').t('https://xmlns.zombofant.net/muclumbus/search/1.0#params').up().up().c('field', { + 'var': 'q', + 'type': 'text-single' + }).c('value').t(query).up().up().c('field', { + 'var': 'sinname', + 'type': 'boolean' + }).c('value').t('true').up().up().c('field', { + 'var': 'sindescription', + 'type': 'boolean' + }).c('value').t('false').up().up().c('field', { + 'var': 'sinaddr', + 'type': 'boolean' + }).c('value').t('true').up().up().c('field', { + 'var': 'min_users', + 'type': 'text-single' + }).c('value').t('1').up().up().c('field', { + 'var': 'key', + 'type': 'list-single' + }).c('value').t('address').up().c('option').c('value').t('nusers').up().up().c('option').c('value').t('address'); + let iq_result; + try { + iq_result = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.sendIQ(iq); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(e); + return []; + } + const s = `result[xmlns="${Strophe.NS.MUCSEARCH}"] item`; + return sizzle(s, iq_result).map(i => { + const jid = i.getAttribute('address'); + return { + 'label': `${i.querySelector('name')?.textContent} (${jid})`, + 'value': jid + }; + }); +} + +/** + * @param {string} query + */ +function getAutoCompleteList(query) { + if (!rooms_cache[query]) { + rooms_cache[query] = searchRooms(query); + } + return rooms_cache[query]; +} + +/***/ }), + +/***/ "./src/plugins/muc-views/sidebar.js": +/*!******************************************!*\ + !*** ./src/plugins/muc-views/sidebar.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MUCSidebar) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_muc_sidebar_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/muc-sidebar.js */ "./src/plugins/muc-views/templates/muc-sidebar.js"); +/* harmony import */ var _modals_muc_invite_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modals/muc-invite.js */ "./src/plugins/muc-views/modals/muc-invite.js"); +/* harmony import */ var _occupants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./occupants.js */ "./src/plugins/muc-views/occupants.js"); +/* harmony import */ var shared_autocomplete_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! shared/autocomplete/index.js */ "./src/shared/autocomplete/index.js"); +/* harmony import */ var shared_styles_status_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! shared/styles/status.scss */ "./src/shared/styles/status.scss"); +/* harmony import */ var _styles_muc_sidebar_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./styles/muc-sidebar.scss */ "./src/plugins/muc-views/styles/muc-sidebar.scss"); + + + + + + + + +class MUCSidebar extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + constructor() { + super(); + this.jid = null; + } + static get properties() { + return { + jid: { + type: String + } + }; + } + initialize() { + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state; + this.model = chatboxes.get(this.jid); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + this.listenTo(this.model.features, 'change:open', () => this.requestUpdate()); + this.model.initialized.then(() => this.requestUpdate()); + } + render() { + return (0,_templates_muc_sidebar_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + + /** @param {MouseEvent} ev */ + closeSidebar(ev) { + ev?.preventDefault?.(); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.safeSave(this.model, { + 'hidden_occupants': true + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-muc-sidebar', MUCSidebar); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/affiliation-form.js": +/*!*************************************************************!*\ + !*** ./src/plugins/muc-views/templates/affiliation-form.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_change_affiliation = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Change affiliation'); + const i18n_new_affiliation = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('New affiliation'); + const i18n_reason = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Reason'); + const occupant = el.muc.getOwnOccupant(); + const assignable_affiliations = occupant.getAssignableAffiliations(); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    ${el.alert_message ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/mep-message.js": +/*!********************************************************!*\ + !*** ./src/plugins/muc-views/templates/mep-message.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +const { + dayjs +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const isodate = dayjs(el.model.get('time')).toISOString(); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    ${el.isRetracted() ? el.renderRetraction() : (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${el.model.get('reason') ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`` : ``}`}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/message-form.js": +/*!*********************************************************!*\ + !*** ./src/plugins/muc-views/templates/message-form.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var plugins_chatview_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! plugins/chatview/utils.js */ "./src/plugins/chatview/utils.js"); + + + + + +/** + * @param {import('../message-form').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const composing_spoiler = el.model.get('composing_spoiler'); + const label_message = composing_spoiler ? (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Hidden message') : (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Message'); + const label_spoiler_hint = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Optional hint'); + const message_limit = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('message_limit'); + const show_call_button = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('visible_toolbar_buttons').call; + const show_emoji_button = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('visible_toolbar_buttons').emoji; + const show_send_button = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('show_send_button'); + const show_spoiler_button = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('visible_toolbar_buttons').spoiler; + const show_toolbar = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('show_toolbar'); + const hint_value = /** @type {HTMLInputElement} */el.querySelector('.spoiler-hint')?.value; + const message_value = /** @type {HTMLInputElement} */el.querySelector('.chat-textarea')?.value; + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    ${show_toolbar ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/moderator-tools.js": +/*!************************************************************!*\ + !*** ./src/plugins/muc-views/templates/moderator-tools.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +function getRoleHelpText(role) { + if (role === 'moderator') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations."); + } else if (role === 'participant') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("The default role, implies that you can read and write messages."); + } else if (role == 'visitor') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Visitors aren't allowed to write messages in a moderated multi-user chat."); + } +} +function getAffiliationHelpText(aff) { + if (aff === 'owner') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Owner is the highest affiliation. Owners can modify roles and affiliations of all other users."); + } else if (aff === 'admin') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners."); + } else if (aff === 'outcast') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("To ban a user, you give them the affiliation of \"outcast\"."); + } +} +const role_option = o => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +const affiliation_option = o => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +const tplRoleFormToggle = o => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +const tplRoleListItem = (el, o) => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • JID: ${o.item.jid}
    • Nickname: ${o.item.nick}
    • Role: ${o.item.role} ${o.assignable_roles.length ? tplRoleFormToggle(o) : ''}
      ${o.assignable_roles.length ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
  • `; +const affiliation_form_toggle = o => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +const affiliation_list_item = (el, o) => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • JID: ${o.item.jid}
    • Nickname: ${o.item.nick}
    • Affiliation: ${o.item.affiliation} ${o.assignable_affiliations.length ? affiliation_form_toggle(o) : ''}
      ${o.assignable_affiliations.length ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
  • `; +const tplNavigation = o => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((el, o) => { + const i18n_affiliation = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Affiliation'); + const i18n_no_users_with_aff = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('No users with that affiliation found.'); + const i18n_no_users_with_role = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('No users with that role found.'); + const i18n_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Type here to filter the search results'); + const i18n_role = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Role'); + const i18n_show_users = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Show users'); + const i18n_helptext_role = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. " + "They're assigned either explicitly or implicitly as part of an affiliation. " + "A role that's not due to an affiliation, is only valid for the duration of the user's session."); + const i18n_helptext_affiliation = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("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 (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${o.alert_message ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''} ${show_both_tabs ? tplNavigation(o) : ''}
    ${o.queryable_affiliations.length ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${i18n_helptext_affiliation}

    ${Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length > 5 ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
    ${getAffiliationHelpText(o.affiliation) ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${getAffiliationHelpText(o.affiliation)}

    ` : ''}
      ${o.loading_users_with_affiliation ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${(0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_0__["default"])()}
    • ` : ''} ${Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length === 0 ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${i18n_no_users_with_aff}
    • ` : ''} ${o.users_with_affiliation instanceof Error ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${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(el, Object.assign({ + item + }, o)) : '')}
    ` : ''} ${o.queryable_roles.length ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${i18n_helptext_role}

    ${Array.isArray(o.users_with_role) && o.users_with_role.length > 5 ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
    ${getRoleHelpText(o.role) ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${getRoleHelpText(o.role)}

    ` : ''}
      ${o.loading_users_with_role ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${(0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_0__["default"])()}
    • ` : ''} ${o.users_with_role && o.users_with_role.length === 0 ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${i18n_no_users_with_role}
    • ` : ''} ${(o.users_with_role || []).map(item => item.nick.match(o.roles_filter) ? tplRoleListItem(el, Object.assign({ + item + }, o)) : '')}
    ` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-bottom-panel.js": +/*!*************************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-bottom-panel.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _message_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../message-form.js */ "./src/plugins/muc-views/message-form.js"); +/* harmony import */ var _nickname_form_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../nickname-form.js */ "./src/plugins/muc-views/nickname-form.js"); +/* harmony import */ var shared_chat_toolbar_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/chat/toolbar.js */ "./src/shared/chat/toolbar.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + + + + +/** + * @param {import('../bottom-panel').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const unread_msgs = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('You have unread messages'); + const conn_status = el.model.session.get('connection_status'); + const i18n_not_allowed = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)("You're not allowed to send messages in this room"); + if (conn_status === _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.ROOMSTATUS.ENTERED) { + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`${el.model.ui.get('scrolled') && el.model.get('num_unread_general') ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`
    ▼ ${unread_msgs} ▼
    ` : ''} ${el.model.canPostMessages() ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`` : (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`${i18n_not_allowed}`}`; + } else if (conn_status == _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.ROOMSTATUS.NICKNAME_REQUIRED) { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('muc_show_logs_before_join')) { + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)``; + } + } else { + return ''; + } +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-chatarea.js": +/*!*********************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-chatarea.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_chat_help_messages_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/chat/help-messages.js */ "./src/shared/chat/help-messages.js"); +/* harmony import */ var shared_components_split_resize_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/split-resize.js */ "./src/shared/components/split-resize.js"); +/* harmony import */ var _bottom_panel_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../bottom-panel.js */ "./src/plugins/muc-views/bottom-panel.js"); +/* harmony import */ var _sidebar_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../sidebar.js */ "./src/plugins/muc-views/sidebar.js"); +/* harmony import */ var _muc_chat_content_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../muc-chat-content.js */ "./src/plugins/muc-views/muc-chat-content.js"); + + + + + + + +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; + +/** + * @param {import('../chatarea').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const show_send_button = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('show_send_button'); + const view_mode = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('view_mode'); + let chat_area_classes, sidebar_classes; + if (view_mode === 'overlayed') { + chat_area_classes = 'd-none d-md-flex col-s-10 col-md-8'; + sidebar_classes = 'col-xs-12 col-s-2 col-md-4'; + } else { + chat_area_classes = 'd-none d-md-flex col-md-8 col-xl-10'; + sidebar_classes = 'col-xs-12 col-md-4 col-xl-2'; + } + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${el.model?.get('show_help_messages') ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ` : ''}
    ${el.model ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''}`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-description.js": +/*!************************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-description.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + const i18n_desc = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Description:'); + const i18n_jid = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Groupchat XMPP Address:'); + const i18n_occ = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Participants:'); + const i18n_features = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Features:'); + const i18n_requires_auth = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Requires authentication'); + const i18n_hidden = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Hidden'); + const i18n_requires_invite = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Requires an invitation'); + const i18n_moderated = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Moderated'); + const i18n_non_anon = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Non-anonymous'); + const i18n_open_room = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Open'); + const i18n_permanent_room = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Permanent'); + const i18n_public = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Public'); + const i18n_semi_anon = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Semi-anonymous'); + const i18n_temp_room = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Temporary'); + const i18n_unmoderated = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Unmoderated'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

    ${i18n_jid} ${o.jid}

    ${i18n_desc} ${o.desc}

    ${i18n_occ} ${o.occ}

    ${i18n_features}

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

    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-destroyed.js": +/*!**********************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-destroyed.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +const tplMoved = o => { + const i18n_moved = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('The conversation has moved to a new address. Click the link below to enter.'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`

    ${i18n_moved}

    `; +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + const i18n_non_existent = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This groupchat no longer exists'); + const i18n_reason = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('The following reason was given: "%1$s"', o.reason || ''); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`

    ${i18n_non_existent}

    ${o.reason ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`

    ${i18n_reason}

    ` : ''} ${o.moved_jid ? tplMoved(o) : ''}`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-disconnect.js": +/*!***********************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-disconnect.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (messages => { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

    ${messages[0]}

    ${messages.slice(1).map(m => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

    ${m}

    `)}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-head.js": +/*!*****************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-head.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_components_dropdown_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/dropdown.js */ "./src/shared/components/dropdown.js"); +/* harmony import */ var shared_components_rich_text_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/rich-text.js */ "./src/shared/components/rich-text.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/chat/utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); + + + + + + + + +/** @param {import('../heading').default} el} */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const o = el.model.toJSON(); + const subject_hidden = el.user_settings?.get('mucs_with_hidden_subject', [])?.includes(el.model.get('jid')); + const heading_buttons_promise = el.getHeadingButtons(subject_hidden); + const i18n_hide_topic = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Hide the groupchat topic'); + const i18n_bookmarked = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('This groupchat is bookmarked'); + const subject = o.subject ? o.subject.text : ''; + const show_subject = subject && !subject_hidden; + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`
    ${!_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.api.settings.get("singleton") ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`` : ''}
    ${el.model.getDisplayName()} ${o.bookmarked ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`` : ''}
    ${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_6__.until)((0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_4__.getStandaloneButtons)(heading_buttons_promise), '')} ${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_6__.until)((0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_4__.getDropdownButtons)(heading_buttons_promise), '')}
    ${show_subject ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`

    ` : ''}`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-list.js": +/*!*****************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-list.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directives/repeat.js */ "./node_modules/lit/directives/repeat.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); + + + + +const form = o => { + const i18n_query = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Show groupchats'); + const i18n_server_address = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Server address'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    `; +}; +const tplItem = (o, item) => { + const i18n_info_title = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Show more information on this groupchat'); + const i18n_open_title = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Click to open this groupchat'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • `; +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${o.show_form ? form(o) : ''}
      ${o.loading_items ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    • ${(0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_3__["default"])()}
    • ` : ''} ${o.feedback_text ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    • ${o.feedback_text}
    • ` : ''} ${(0,lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_2__.repeat)(o.items, item => item.jid, item => tplItem(o, item))}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-nickname-form.js": +/*!**************************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-nickname-form.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_nickname = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Nickname'); + const i18n_join = el.model?.isEntered() ? (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Change nickname') : (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Enter groupchat'); + const i18n_heading = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_show_logs_before_join') ? (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Choose a nickname to enter') : (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Please choose your nickname'); + const validation_message = el.model?.get('nickname_validation_message'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${validation_message}

    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-occupant.js": +/*!*********************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-occupant.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + + + +/** + * @param {import('../occupant').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_close = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Hide'); + const i18n_no_occupant = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('No participant data found'); + const i18n_participants = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Participants'); + const i18n_show_details = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Show details'); + const jid = el.model?.get('jid'); + const nick = el.model?.get('nick'); + const role = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.firstCharToUpperCase(el.model?.get('role')); + const affiliation = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.firstCharToUpperCase(el.model?.get('affiliation')); + const hats = el.model?.get('hats')?.length ? el.model.get('hats').map(({ + title + }) => title) : []; + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${el.model ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ` : ''}
      ${el.model ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${nick ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    • ${nick}
    • ` : ''}
    • ${jid ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${jid}` : ''}
    • ${affiliation && affiliation !== 'None' ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${affiliation}` : ''} ${role ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${role}` : ''} ${hats.length ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${hats.map(h => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${h}`)}` : ''}
    • ` : (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    • ${i18n_no_occupant}
    • `}
    ${el.model ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-occupants.js": +/*!**********************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-occupants.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_components_list_filter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/list-filter.js */ "./src/shared/components/list-filter.js"); +/* harmony import */ var _occupant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./occupant.js */ "./src/plugins/muc-views/templates/occupant.js"); +/* harmony import */ var _occupants_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./occupants-filter.js */ "./src/plugins/muc-views/templates/occupants-filter.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/repeat.js */ "./node_modules/lit/directives/repeat.js"); +/** + * @typedef {import('@converse/headless').MUCOccupant} MUCOccupant + */ + + + + + + + +/** + * @param {import('../occupants').default} el + * @param {MUCOccupant} occ + */ +function isOccupantFiltered(el, occ) { + if (!el.model.get('filter_visible')) return false; + const type = el.filter.get('type'); + const q = type === 'state' ? el.filter.get('state').toLowerCase() : el.filter.get('text').toLowerCase(); + if (!q) return false; + if (type === 'state') { + const show = occ.get('show'); + return q === 'online' ? ["offline", "unavailable"].includes(show) : !show.includes(q); + } else if (type === 'items') { + return !occ.getDisplayName().toLowerCase().includes(q); + } +} + +/** + * @param {import('../occupants').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_participants = el.model.occupants === 1 ? (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Participant') : (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Participants'); + const i18n_close = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Hide'); + const i18n_show_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Show filter'); + const i18n_hide_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Hide filter'); + const is_filter_visible = el.model.get('filter_visible'); + const i18n_invite = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Invite someone'); + const i18n_invite_title = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Invite someone to join this groupchat'); + const btns = /** @type {TemplateResult[]} */[]; + if (el.model.invitesAllowed()) { + btns.push((0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`${i18n_invite}`); + } + if (el.model.occupants.length > 5) { + btns.push((0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`${is_filter_visible ? i18n_hide_filter : i18n_show_filter}`); + } + if (btns.length) { + btns.push((0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`${i18n_close}`); + } else { + // Only a single button is shown, not a dropdown. + btns.push((0,lit__WEBPACK_IMPORTED_MODULE_4__.html)``); + } + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`
    ${el.model.occupants.length} ${i18n_participants} ${btns.length === 1 ? btns[0] : (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)``}
      ${is_filter_visible ? (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`` : ''} ${(0,lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_5__.repeat)(el.model.occupants.models, occ => occ.get('jid'), occ => isOccupantFiltered(el, occ) ? '' : (0,_occupant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(el, occ))}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-password-form.js": +/*!**************************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-password-form.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + const i18n_heading = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('This groupchat requires a password'); + const i18n_password = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Password: '); + const i18n_submit = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Submit'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

    ${o.validation_message}

    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc-sidebar.js": +/*!********************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc-sidebar.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/** + * @param {import('../sidebar').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const model = el.model; + const sidebar_view = model.get('sidebar_view') || ''; + const occupant_id = sidebar_view.split('occupant:').pop(); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${sidebar_view?.startsWith('occupant:') ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``}`; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/muc.js": +/*!************************************************!*\ + !*** ./src/plugins/muc-views/templates/muc.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/muc-views/utils.js"); +/* harmony import */ var _chatarea_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../chatarea.js */ "./src/plugins/muc-views/chatarea.js"); +/* harmony import */ var _destroyed_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../destroyed.js */ "./src/plugins/muc-views/destroyed.js"); +/* harmony import */ var _disconnected_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../disconnected.js */ "./src/plugins/muc-views/disconnected.js"); +/* harmony import */ var _heading_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../heading.js */ "./src/plugins/muc-views/heading.js"); +/* harmony import */ var _nickname_form_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../nickname-form.js */ "./src/plugins/muc-views/nickname-form.js"); +/* harmony import */ var _password_form_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../password-form.js */ "./src/plugins/muc-views/password-form.js"); + + + + + + + + + + +/** + * @param {import('../muc').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('view_mode') === 'overlayed' ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''} ${el.model ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${(0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.getChatRoomBodyTemplate)(el.model)}
    ` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/occupant-bottom-panel.js": +/*!******************************************************************!*\ + !*** ./src/plugins/muc-views/templates/occupant-bottom-panel.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _message_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../message-form.js */ "./src/plugins/muc-views/message-form.js"); +/* harmony import */ var _nickname_form_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../nickname-form.js */ "./src/plugins/muc-views/nickname-form.js"); +/* harmony import */ var shared_chat_toolbar_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/chat/toolbar.js */ "./src/shared/chat/toolbar.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + + + + +/** + * @param {import('../occupant-bottom-panel').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const unread_msgs = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('You have unread messages'); + const conn_status = el.muc.session.get('connection_status'); + const i18n_not_allowed = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)("This user is not currently in this groupchat and can't receive messages."); + const i18n_invite_tooltip = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Invite this user to join this groupchat'); + const i18n_open_chat_tooltip = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Open a one-on-one chat with this user'); + const i18n_open_chat = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Open Chat'); + const i18n_invite = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Invite'); + if (conn_status === _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.ROOMSTATUS.ENTERED) { + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`${el.muc.ui.get('scrolled') && el.model.get('num_unread') ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`
    ▼ ${unread_msgs} ▼
    ` : ''} ${el.canPostMessages() ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`` : (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`

    ${i18n_not_allowed}

    ${el.model.get('jid') ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)` ` : ''}
    `}`; + } else { + return ''; + } +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/occupant.js": +/*!*****************************************************!*\ + !*** ./src/plugins/muc-views/templates/occupant.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ "./src/plugins/muc-views/constants.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var utils_color_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utils/color.js */ "./src/utils/color.js"); +/* harmony import */ var shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! shared/chat/utils.js */ "./src/shared/chat/utils.js"); +/** + * @typedef {import('@converse/headless').MUCOccupant} MUCOccupant + */ + + + + + + + +const i18n_occupant_hint = /** @param {MUCOccupant} o */o => { + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Click to mention %1$s in your message.', o.get('nick')); +}; +let badges_definitions; // will be initialized at first call (to be sure that the __ function is correctly loaded). + +/** + * Inits badges definitions. + * For short labels, it will use the label first letter. If there is ambigous short labels, it will try to add up to 4 letters. + * Letters will be uppercase. + */ +function initBadgesDefinitions() { + badges_definitions = {}; + badges_definitions['owner'] = { + label: (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Owner'), + classname: 'badge-groupchat' + }; + badges_definitions['admin'] = { + label: (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Admin'), + classname: 'badge-info' + }; + badges_definitions['member'] = { + label: (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Member'), + classname: 'badge-info' + }; + badges_definitions['moderator'] = { + label: (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Moderator'), + classname: 'badge-info' + }; + badges_definitions['visitor'] = { + label: (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Visitor'), + classname: 'badge-secondary' + }; + + // And now we must compute unique short labels. + let seen; + for (let current_length = 1; current_length < 5 && (!seen || Object.values(seen).find(count => count > 1)); current_length++) { + const currently_seen = {}; + for (const definition of Object.values(badges_definitions)) { + if (!seen || (seen[definition.shortlabel] ?? 0) >= 2) { + // (first loop, or count >= 2 in the previous loop) + definition.shortlabel = definition.label.substr(0, current_length).toLocaleUpperCase(); + currently_seen[definition.shortlabel] ??= 0; + currently_seen[definition.shortlabel]++; + } + } + seen = currently_seen; + } +} + +/** + * Badge template. + * @param {string} badge_code The badge to use ('owner', 'admin', ...) + */ +function tplBadge(badge_code) { + if (!badges_definitions) { + initBadgesDefinitions(); + } + const definition = badges_definitions[badge_code]; + if (!definition) { + return ''; + } + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${definition.shortlabel}`; +} + +/** + * @param {MUCOccupant} o + * @returns {string} + */ +function getOccupantTitle(o) { + const role = o.get('role'); + const hint_occupant = i18n_occupant_hint(o); + const i18n_moderator_hint = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('This user is a moderator.'); + const i18n_participant_hint = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('This user can send messages in this groupchat.'); + const i18n_visitor_hint = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('This user can NOT send messages in this groupchat.'); + const spaced_jid = o.get('jid') ? `${o.get('jid')} ` : ''; + if (role === 'moderator') { + return `${spaced_jid}${i18n_moderator_hint} ${hint_occupant}`; + } else if (role === 'participant') { + return `${spaced_jid}${i18n_participant_hint} ${hint_occupant}`; + } else if (role === 'visitor') { + return `${spaced_jid}${i18n_visitor_hint} ${hint_occupant}`; + } else if (!['visitor', 'participant', 'moderator'].includes(role)) { + return `${spaced_jid}${hint_occupant}`; + } +} + +/** + * @param {MUCOccupant} o + */ +async function tplActionButtons(o) { + /** + * *Hook* which allows plugins to add action buttons on occupants + * @event _converse#getOccupantActionButtons + * @example + * api.listen.on('getOccupantActionButtons', (el, buttons) => { + * buttons.push({ + * 'i18n_text': 'Foo', + * 'handler': ev => alert('Foo!'), + * 'button_class': 'chat-occupant__action-foo', + * 'icon_class': 'fa fa-check', + * 'name': 'foo' + * }); + * return buttons; + * }); + */ + const buttons = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.hook('getOccupantActionButtons', o, []); + if (!buttons?.length) { + return ''; + } + const items = buttons.map(b => { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; + }); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; +} + +/** + * @param {import('../occupants').default} el + * @param {MUCOccupant} o + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((el, o) => { + const affiliation = o.get('affiliation'); + const hint_show = _constants_js__WEBPACK_IMPORTED_MODULE_1__.PRETTY_CHAT_STATUS[o.get('show')]; + const role = o.get('role'); + const show = o.get('show'); + let classes, color; + if (show === 'online') { + [classes, color] = ['fa fa-circle', 'chat-status-online']; + } else if (show === 'dnd') { + [classes, color] = ['fa fa-minus-circle', 'chat-status-busy']; + } else if (show === 'away') { + [classes, color] = ['fa fa-circle', 'chat-status-away']; + } else { + [classes, color] = ['fa fa-circle', 'chat-status-offline']; + } + const num_unread = (0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_6__.getUnreadMsgsDisplay)(o); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
  • ${num_unread ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${num_unread}` : ''}
    ${o.getDisplayName()} ${affiliation === 'owner' ? tplBadge('owner') : ''} ${affiliation === 'admin' ? tplBadge('admin') : ''} ${affiliation === 'member' ? tplBadge('member') : ''} ${role === 'moderator' ? tplBadge('moderator') : ''} ${role === 'visitor' ? tplBadge('visitor') : ''} ${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_4__.until)(tplActionButtons(o))}
  • `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/occupants-filter.js": +/*!*************************************************************!*\ + !*** ./src/plugins/muc-views/templates/occupants-filter.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + +/** + * @param {import('shared/components/list-filter').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_placeholder = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Filter'); + const title_contact_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Filter by name'); + const title_status_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Filter by status'); + const label_any = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Any'); + const label_online = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Online'); + const label_chatty = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Chatty'); + const label_busy = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Busy'); + const label_away = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Away'); + const label_xa = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Extended Away'); + const label_offline = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Offline'); + const chat_state = el.model.get('state'); + const filter_text = el.model.get('text'); + const filter_type = el.model.get('type'); + const is_overlay_mode = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('view_mode') === 'overlayed'; + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/templates/role-form.js": +/*!******************************************************!*\ + !*** ./src/plugins/muc-views/templates/role-form.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_change_role = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Change role'); + const i18n_new_role = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('New Role'); + const i18n_reason = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Reason'); + const occupant = el.muc.getOwnOccupant(); + const assignable_roles = occupant.getAssignableRoles(); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    `; +}); + +/***/ }), + +/***/ "./src/plugins/muc-views/utils.js": +/*!****************************************!*\ + !*** ./src/plugins/muc-views/utils.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ clearHistory: () => (/* binding */ clearHistory), +/* harmony export */ confirmDirectMUCInvitation: () => (/* binding */ confirmDirectMUCInvitation), +/* harmony export */ destroyMUC: () => (/* binding */ destroyMUC), +/* harmony export */ getAutoCompleteList: () => (/* binding */ getAutoCompleteList), +/* harmony export */ getAutoCompleteListItem: () => (/* binding */ getAutoCompleteListItem), +/* harmony export */ getChatRoomBodyTemplate: () => (/* binding */ getChatRoomBodyTemplate), +/* harmony export */ getNicknameRequiredTemplate: () => (/* binding */ getNicknameRequiredTemplate), +/* harmony export */ parseMessageForMUCCommands: () => (/* binding */ parseMessageForMUCCommands), +/* harmony export */ showModeratorToolsModal: () => (/* binding */ showModeratorToolsModal), +/* harmony export */ showOccupantModal: () => (/* binding */ showOccupantModal) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _modals_occupant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modals/occupant.js */ "./src/plugins/muc-views/modals/occupant.js"); +/* harmony import */ var _modals_moderator_tools_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modals/moderator-tools.js */ "./src/plugins/muc-views/modals/moderator-tools.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/** + * @typedef {import('@converse/headless/types/plugins/muc/muc.js').default} MUC + * @typedef {import("shared/avatar/avatar").default} Avatar + * @typedef {import("shared/autocomplete/suggestion").default} Suggestion + */ + + + + + + +const { + Strophe, + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +const COMMAND_TO_AFFILIATION = { + 'admin': 'admin', + 'ban': 'outcast', + 'member': 'member', + 'owner': 'owner', + 'revoke': 'none' +}; +const COMMAND_TO_ROLE = { + 'deop': 'participant', + 'kick': 'none', + 'mute': 'visitor', + 'op': 'moderator', + 'voice': 'participant' +}; + +/** + * Presents a confirmation modal to the user asking them to accept or decline a + * MUC invitation. + * @async + */ +function confirmDirectMUCInvitation({ + contact, + jid, + reason +}) { + if (!reason) { + return _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('%1$s has invited you to join a groupchat: %2$s', contact, jid)); + } else { + return _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('%1$s has invited you to join a groupchat: %2$s, and left the following reason: "%3$s"', contact, jid, reason)); + } +} + +/** + * @param {string} jid + */ +function clearHistory(jid) { + if (location.hash === `converse/room?jid=${jid}`) { + history.pushState(null, '', window.location.pathname); + } +} + +/** + * @param {MUC} model + */ +async function destroyMUC(model) { + const messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Are you sure you want to destroy this groupchat?')]; + let fields = [{ + 'name': 'challenge', + 'label': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Please enter the XMPP address of this groupchat to confirm'), + 'challenge': model.get('jid'), + 'placeholder': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('name@example.org'), + 'required': true + }, { + 'name': 'reason', + 'label': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Optional reason for destroying this groupchat'), + 'placeholder': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Reason') + }, { + 'name': 'newjid', + 'label': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Optional XMPP address for a new groupchat that replaces this one'), + 'placeholder': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('replacement@example.org') + }]; + try { + fields = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Confirm'), messages, fields); + const reason = fields.filter(f => f.name === 'reason').pop()?.value; + const newjid = fields.filter(f => f.name === 'newjid').pop()?.value; + return model.sendDestroyIQ(reason, newjid).then(() => model.close()); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + } +} + +/** + * @param {MUC} model + */ +function getNicknameRequiredTemplate(model) { + const jid = model.get('jid'); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_show_logs_before_join')) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } else { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } +} + +/** + * @param {MUC} model + */ +function getChatRoomBodyTemplate(model) { + const view = model.session.get('view'); + const jid = model.get('jid'); + const RS = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.ROOMSTATUS; + const conn_status = model.session.get('connection_status'); + if (view === _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.MUC.VIEWS.CONFIG) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } else { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${conn_status == RS.PASSWORD_REQUIRED ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''} ${conn_status == RS.ENTERED ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''} ${conn_status == RS.CONNECTING ? (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_4__["default"])({ + class: 'vertically-centered' + }) : ''} ${conn_status == RS.NICKNAME_REQUIRED ? getNicknameRequiredTemplate(model) : ''} ${conn_status == RS.DISCONNECTED ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''} ${conn_status == RS.BANNED ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''} ${conn_status == RS.DESTROYED ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''}`; + } +} + +/** + * @param {MUC} muc + * @param {Suggestion} text + * @param {string} input + * @returns {HTMLLIElement} + */ +function getAutoCompleteListItem(muc, text, input) { + input = input.trim(); + const li = document.createElement('li'); + li.setAttribute('aria-selected', 'false'); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_mention_autocomplete_show_avatar')) { + const t = text.label.toLowerCase(); + const avatar_el = /** @type {Avatar} */document.createElement('converse-avatar'); + avatar_el.model = muc.occupants.findWhere(o => { + if (o.getDisplayName()?.toLowerCase()?.startsWith(t)) { + return o; + } else if (o.get('nickname')?.toLowerCase()?.startsWith(t)) { + return o; + } else if (o.get('jid')?.toLowerCase()?.startsWith(t)) { + return o; + } + }); + avatar_el.setAttribute('name', avatar_el.model.getDisplayName()); + avatar_el.setAttribute('height', '22'); + avatar_el.setAttribute('width', '22'); + avatar_el.setAttribute('class', 'avatar avatar-autocomplete'); + li.appendChild(avatar_el); + } + const regex = new RegExp('(' + input + ')', 'ig'); + const parts = input ? text.split(regex) : [text]; + parts.forEach(txt => { + if (input && txt.match(regex)) { + const match = document.createElement('mark'); + match.textContent = txt; + li.appendChild(match); + } else { + li.appendChild(document.createTextNode(txt)); + } + }); + return li; +} +async function getAutoCompleteList() { + const models = [...(await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.rooms.get()), ...(await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.contacts.get())]; + const jids = [...new Set(models.map(o => Strophe.getDomainFromJid(o.get('jid'))))]; + return jids; +} + +/** + * @param {MUC} muc + */ +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: ${command}`); + } + if (!muc.verifyAffiliations(required_affiliations) || !muc.verifyRoles(required_roles)) { + return false; + } + if (!muc.validateRoleOrAffiliationChangeArgs(command, args)) { + return false; + } + const nick_or_jid = muc.getNickOrJIDFromCommandArgs(args); + if (!nick_or_jid) { + return false; + } + const reason = args.split(nick_or_jid, 2)[1].trim(); + // We're guaranteed to have an occupant due to getNickOrJIDFromCommandArgs + const occupant = muc.getOccupant(nick_or_jid); + muc.setRole(occupant, role, reason, undefined, e => muc.onCommandError(e)); + return true; +} + +/** + * @param {MUC} muc + */ +function verifyAndSetAffiliation(muc, command, args, required_affiliations) { + const affiliation = COMMAND_TO_AFFILIATION[command]; + if (!affiliation) { + throw Error(`verifyAffiliations called with invalid command: ${command}`); + } + if (!muc.verifyAffiliations(required_affiliations)) { + return false; + } + if (!muc.validateRoleOrAffiliationChangeArgs(command, args)) { + return false; + } + const nick_or_jid = muc.getNickOrJIDFromCommandArgs(args); + if (!nick_or_jid) { + return false; + } + let jid; + const reason = args.split(nick_or_jid, 2)[1].trim(); + const occupant = muc.getOccupant(nick_or_jid); + if (occupant) { + jid = occupant.get('jid'); + } else { + if (u.isValidJID(nick_or_jid)) { + jid = nick_or_jid; + } else { + const message = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)("Couldn't find a participant with that nickname. " + 'They might have left the groupchat.'); + muc.createMessage({ + message, + 'type': 'error' + }); + return; + } + } + const attrs = { + jid, + reason + }; + if (occupant && _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('auto_register_muc_nickname')) { + attrs['nick'] = occupant.get('nick'); + } + u.muc.setAffiliation(affiliation, muc.get('jid'), [attrs]).then(() => muc.occupants.fetchMembers()).catch(err => muc.onCommandError(err)); +} + +/** + * @param {MUC} muc + * @param {string} [affiliation] + */ +function showModeratorToolsModal(muc, affiliation) { + if (!muc.verifyRoles(['moderator'])) { + return; + } + let modal = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.get('converse-modtools-modal'); + if (modal) { + modal.affiliation = affiliation; + modal.render(); + } else { + modal = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.create('converse-modtools-modal', { + affiliation, + 'jid': muc.get('jid') + }); + } + modal.show(); +} +function showOccupantModal(ev, occupant) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.show('converse-muc-occupant-modal', { + 'model': occupant + }, ev); +} +function parseMessageForMUCCommands(data, handled) { + const model = data.model; + if (handled || model.get('type') !== CHATROOMS_TYPE || _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_disable_slash_commands') && !Array.isArray(_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_disable_slash_commands'))) { + return handled; + } + let text = data.text; + text = text.replace(/^\s*/, ''); + const command = (text.match(/^\/([a-zA-Z]*) ?/) || ['']).pop().toLowerCase(); + if (!command) { + return false; + } + const args = text.slice(('/' + command).length + 1).trim(); + const allowed_commands = model.getAllowedCommands() ?? []; + if (command === 'admin' && allowed_commands.includes(command)) { + verifyAndSetAffiliation(model, command, args, ['owner']); + return true; + } else if (command === 'ban' && allowed_commands.includes(command)) { + verifyAndSetAffiliation(model, command, args, ['admin', 'owner']); + return true; + } else if (command === 'modtools' && allowed_commands.includes(command)) { + showModeratorToolsModal(model, args); + return true; + } else if (command === 'deop' && allowed_commands.includes(command)) { + // FIXME: /deop only applies to setting a moderators + // role to "participant" (which only admin/owner can + // do). Moderators can however set non-moderator's role + // to participant (e.g. visitor => participant). + // Currently we don't distinguish between these two + // cases. + setRole(model, command, args, ['admin', 'owner']); + return true; + } else if (command === 'destroy' && allowed_commands.includes(command)) { + if (!model.verifyAffiliations(['owner'])) { + return true; + } + destroyMUC(model).catch(e => model.onCommandError(e)); + return true; + } else if (command === 'help' && allowed_commands.includes(command)) { + model.set({ + 'show_help_messages': false + }, { + 'silent': true + }); + model.set({ + 'show_help_messages': true + }); + return true; + } else if (command === 'kick' && allowed_commands.includes(command)) { + setRole(model, command, args, [], ['moderator']); + return true; + } else if (command === 'mute' && allowed_commands.includes(command)) { + setRole(model, command, args, [], ['moderator']); + return true; + } else if (command === 'member' && allowed_commands.includes(command)) { + verifyAndSetAffiliation(model, command, args, ['admin', 'owner']); + return true; + } else if (command === 'nick' && allowed_commands.includes(command)) { + if (!model.verifyRoles(['visitor', 'participant', 'moderator'])) { + return true; + } else if (args.length === 0) { + // e.g. Your nickname is "coolguy69" + const message = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Your nickname is "%1$s"', model.get('nick')); + model.createMessage({ + message, + 'type': 'error' + }); + } else { + model.setNickname(args); + } + return true; + } else if (command === 'owner' && allowed_commands.includes(command)) { + verifyAndSetAffiliation(model, command, args, ['owner']); + return true; + } else if (command === 'op' && allowed_commands.includes(command)) { + setRole(model, command, args, ['admin', 'owner']); + return true; + } else if (command === 'register' && allowed_commands.includes(command)) { + if (args.length > 1) { + model.createMessage({ + 'message': (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Error: invalid number of arguments'), + 'type': 'error' + }); + } else { + model.registerNickname().then(err_msg => { + err_msg && model.createMessage({ + 'message': err_msg, + 'type': 'error' + }); + }); + } + return true; + } else if (command === 'revoke' && allowed_commands.includes(command)) { + verifyAndSetAffiliation(model, command, args, ['admin', 'owner']); + return true; + } else if (command === 'topic' && allowed_commands.includes(command) || command === 'subject' && allowed_commands.includes(command)) { + model.setSubject(args); + return true; + } else if (command === 'voice' && allowed_commands.includes(command)) { + setRole(model, command, args, [], ['moderator']); + return true; + } else { + return false; + } +} + +/***/ }), + +/***/ "./src/plugins/notifications/index.js": +/*!********************************************!*\ + !*** ./src/plugins/notifications/index.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/notifications/utils.js"); +/** + * @module converse-notification + * @copyright 2022, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-notification', { + dependencies: ['converse-chatboxes'], + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + // ^ a list of JIDs to ignore concerning chat state notifications + chatstate_notification_blacklist: [], + notification_delay: 5000, + notification_icon: '/images/logo/conversejs-filled.svg', + notify_all_room_messages: false, + notify_nicknames_without_references: false, + play_sounds: true, + show_chat_state_notifications: false, + show_desktop_notifications: true, + show_tab_notifications: true, + sounds_path: _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('assets_path') + '/sounds/' + }); + + /************************ Event Handlers ************************/ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('clearSession', _utils_js__WEBPACK_IMPORTED_MODULE_1__.clearFavicon); // Needed for tests + + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.waitUntil('chatBoxesInitialized').then(() => { + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state; + chatboxes.on('change:num_unread', _utils_js__WEBPACK_IMPORTED_MODULE_1__.updateUnreadFavicon); + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('pluginsInitialized', function () { + // We only register event handlers after all plugins are + // registered, because other plugins might override some of our + // handlers. + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('contactRequest', _utils_js__WEBPACK_IMPORTED_MODULE_1__.handleContactRequestNotification); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('contactPresenceChanged', _utils_js__WEBPACK_IMPORTED_MODULE_1__.handleChatStateNotification); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('message', _utils_js__WEBPACK_IMPORTED_MODULE_1__.handleMessageNotification); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('feedback', _utils_js__WEBPACK_IMPORTED_MODULE_1__.handleFeedback); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('connected', _utils_js__WEBPACK_IMPORTED_MODULE_1__.requestPermission); + }); + } +}); + +/***/ }), + +/***/ "./src/plugins/notifications/utils.js": +/*!********************************************!*\ + !*** ./src/plugins/notifications/utils.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ areDesktopNotificationsEnabled: () => (/* binding */ areDesktopNotificationsEnabled), +/* harmony export */ clearFavicon: () => (/* binding */ clearFavicon), +/* harmony export */ handleChatStateNotification: () => (/* binding */ handleChatStateNotification), +/* harmony export */ handleContactRequestNotification: () => (/* binding */ handleContactRequestNotification), +/* harmony export */ handleFeedback: () => (/* binding */ handleFeedback), +/* harmony export */ handleMessageNotification: () => (/* binding */ handleMessageNotification), +/* harmony export */ isMessageToHiddenChat: () => (/* binding */ isMessageToHiddenChat), +/* harmony export */ requestPermission: () => (/* binding */ requestPermission), +/* harmony export */ shouldNotifyOfGroupMessage: () => (/* binding */ shouldNotifyOfGroupMessage), +/* harmony export */ showFeedbackNotification: () => (/* binding */ showFeedbackNotification), +/* harmony export */ updateUnreadFavicon: () => (/* binding */ updateUnreadFavicon) +/* harmony export */ }); +/* harmony import */ var favico_js_slevomat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! favico.js-slevomat */ "./node_modules/favico.js-slevomat/favico.js"); +/* harmony import */ var favico_js_slevomat__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(favico_js_slevomat__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/** + * @typedef {import('@converse/headless/plugins/muc/types').MUCMessageAttributes} MUCMessageAttributes + * @typedef {module:headless-plugins-muc-muc.MUCMessageData} MUCMessageData + * @typedef {module:headless-plugins-chat-utils.MessageData} MessageData + * @typedef {import('@converse/headless').RosterContact} RosterContact + */ + + + +const { + Strophe, + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.env; +const { + isEmptyMessage, + isTestEnv +} = u; +const supports_html5_notification = ('Notification' in window); +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.env.Favico = (favico_js_slevomat__WEBPACK_IMPORTED_MODULE_0___default()); +let favicon; +function isMessageToHiddenChat(attrs) { + return isTestEnv() || (_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.chatboxes.get(attrs.from)?.isHidden() ?? false); +} +function areDesktopNotificationsEnabled() { + return isTestEnv() || supports_html5_notification && _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_desktop_notifications') && Notification.permission === 'granted'; +} + +/** + * @typedef {Navigator & {clearAppBadge: Function, setAppBadge: Function} } navigator + */ + +function clearFavicon() { + favicon?.badge(0); + favicon = null; + /** @type navigator */ + navigator.clearAppBadge?.().catch(e => _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.error("Could not clear unread count in app badge " + e)); +} +function updateUnreadFavicon() { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_tab_notifications')) { + favicon = favicon ?? new _converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.env.Favico({ + type: 'circle', + animation: 'pop' + }); + const chats = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.chatboxes.models; + const num_unread = chats.reduce((acc, chat) => acc + (chat.get('num_unread') || 0), 0); + favicon.badge(num_unread); + /** @type navigator */ + navigator.setAppBadge?.(num_unread).catch(e => _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.error("Could set unread count in app badge - " + e)); + } +} + +/** + * @param {Array} references - A list of objects representing XEP-0372 references + * @param {string} muc_jid + * @param {string} nick + */ +function isReferenced(references, muc_jid, nick) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.session.get('bare_jid'); + const check = r => [bare_jid, `${muc_jid}/${nick}`].includes(r.uri.replace(/^xmpp:/, '')); + return references.reduce((acc, r) => acc || r.uri && check(r), false); +} + +/** + * Is this a group message for which we should notify the user? + * @param {MUCMessageAttributes} attrs + */ +async function shouldNotifyOfGroupMessage(attrs) { + if (!attrs?.body && !attrs?.message) { + // attrs.message is used by 'info' messages + return false; + } + const jid = attrs.from; + const muc_jid = attrs.from_muc; + const notify_all = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notify_all_room_messages'); + const room = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.chatboxes.get(muc_jid); + const resource = Strophe.getResourceFromJid(jid); + const sender = resource && Strophe.unescapeNode(resource) || ''; + let is_mentioned = false; + const nick = room.get('nick'); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notify_nicknames_without_references')) { + is_mentioned = new RegExp(`\\b${nick}\\b`).test(attrs.body); + } + const is_not_mine = sender !== nick; + 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) { + /** + * *Hook* which allows plugins to run further logic to determine + * whether a notification should be sent out for this message. + * @event _converse#shouldNotifyOfGroupMessage + * @example + * api.listen.on('shouldNotifyOfGroupMessage', (should_notify) => { + * return should_notify && flurb === floob; + * }); + */ + const should_notify = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.hook('shouldNotifyOfGroupMessage', attrs, true); + return should_notify; + } + return false; +} +async function shouldNotifyOfInfoMessage(attrs) { + if (!attrs.from_muc) { + return false; + } + const room = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.rooms.get(attrs.from_muc); + if (!room) { + return false; + } + const nick = room.get('nick'); + const muc_jid = attrs.from_muc; + const notify_all = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.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); +} + +/** + * @async + * @method shouldNotifyOfMessage + * @param {MessageData|MUCMessageData} data + */ +function shouldNotifyOfMessage(data) { + const { + attrs + } = data; + if (!attrs || attrs.is_forwarded) { + return false; + } + if (attrs['type'] === 'groupchat') { + 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); + } + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.session.get('bare_jid'); + const is_me = Strophe.getBareJidFromJid(attrs.from) === bare_jid; + return !isEmptyMessage(attrs) && !is_me && (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_desktop_notifications') === 'all' || isMessageToHiddenChat(attrs)); +} +function showFeedbackNotification(data) { + if (data.klass === 'error' || data.klass === 'warn') { + const n = new Notification(data.subject, { + body: data.message, + lang: i18n__WEBPACK_IMPORTED_MODULE_1__.i18n.getLocale(), + icon: _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notification_icon') + }); + setTimeout(n.close.bind(n), 5000); + } +} + +/** + * Creates an HTML5 Notification to inform of a change in a + * contact's chat state. + * @param {RosterContact} contact + */ +function showChatStateNotification(contact) { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('chatstate_notification_blacklist')?.includes(contact.get('jid'))) { + // Don't notify if the user is being ignored. + return; + } + const chat_state = contact.presence.get('show'); + let message = null; + if (chat_state === 'offline') { + message = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('has gone offline'); + } else if (chat_state === 'away') { + message = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('has gone away'); + } else if (chat_state === 'dnd') { + message = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('is busy'); + } else if (chat_state === 'online') { + message = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('has come online'); + } + if (message === null) { + return; + } + const n = new Notification(contact.getDisplayName(), { + body: message, + lang: i18n__WEBPACK_IMPORTED_MODULE_1__.i18n.getLocale(), + icon: _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notification_icon') + }); + setTimeout(() => n.close(), 5000); +} + +/** + * Shows an HTML5 Notification with the passed in message + * @param {MessageData|MUCMessageData} data + */ +function showMessageNotification(data) { + const { + attrs + } = data; + if (attrs.is_error) { + return; + } + if (!areDesktopNotificationsEnabled()) { + return; + } + let title, roster_item; + const full_from_jid = attrs.from; + const from_jid = Strophe.getBareJidFromJid(full_from_jid); + if (attrs.type == 'info') { + title = attrs.message; + } else if (attrs.type === 'headline') { + if (!from_jid.includes('@') || _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('allow_non_roster_messaging')) { + title = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Notification from %1$s', from_jid); + } else { + return; + } + } else if (!from_jid.includes('@')) { + // workaround for Prosody which doesn't give type "headline" + title = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Notification from %1$s', from_jid); + } else if (attrs.type === 'groupchat') { + title = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%1$s says', Strophe.getResourceFromJid(full_from_jid)); + } else { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.roster === undefined) { + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.error('Could not send notification, because roster is undefined'); + return; + } + roster_item = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.roster.get(from_jid); + if (roster_item !== undefined) { + title = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%1$s says', roster_item.getDisplayName()); + } else { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('allow_non_roster_messaging')) { + title = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%1$s says', from_jid); + } else { + return; + } + } + } + let body; + 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': i18n__WEBPACK_IMPORTED_MODULE_1__.i18n.getLocale(), + 'icon': _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notification_icon'), + 'requireInteraction': !_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notification_delay') + }); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notification_delay')) { + setTimeout(() => n.close(), _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notification_delay')); + } + n.onclick = function (event) { + event.preventDefault(); + window.focus(); + const chat = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.chatboxes.get(from_jid); + chat.maybeShow(true); + }; +} +function playSoundNotification() { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('play_sounds') && window.Audio !== undefined) { + const audioOgg = new Audio(_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('sounds_path') + 'msg_received.ogg'); + const canPlayOgg = audioOgg.canPlayType('audio/ogg'); + if (canPlayOgg === 'probably') { + return audioOgg.play(); + } + const audioMp3 = new Audio(_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('sounds_path') + 'msg_received.mp3'); + const canPlayMp3 = audioMp3.canPlayType('audio/mp3'); + if (canPlayMp3 === 'probably') { + audioMp3.play(); + } else if (canPlayOgg === 'maybe') { + audioOgg.play(); + } else if (canPlayMp3 === 'maybe') { + audioMp3.play(); + } + } +} + +/** + * Event handler for the on('message') event. Will call methods + * to play sounds and show HTML5 notifications. + */ +async function handleMessageNotification(data) { + if (!(await shouldNotifyOfMessage(data))) { + return false; + } + /** + * Triggered when a notification (sound or HTML5 notification) for a new + * message has will be made. + * @event _converse#messageNotification + * @type {MessageData|MUCMessageData} + * @example _converse.api.listen.on('messageNotification', data => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.trigger('messageNotification', data); + try { + playSoundNotification(); + } catch (error) { + // Likely "play() failed because the user didn't interact with the document first" + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.error(error); + } + showMessageNotification(data); +} +function handleFeedback(data) { + if (areDesktopNotificationsEnabled()) { + showFeedbackNotification(data); + } +} + +/** + * Event handler for on('contactPresenceChanged'). + * Will show an HTML5 notification to indicate that the chat status has changed. + * @param {RosterContact} contact + */ +function handleChatStateNotification(contact) { + if (areDesktopNotificationsEnabled() && _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_chat_state_notifications')) { + showChatStateNotification(contact); + } +} + +/** + * @param {RosterContact} contact + */ +function showContactRequestNotification(contact) { + const n = new Notification(contact.getDisplayName(), { + body: (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('wants to be your contact'), + lang: i18n__WEBPACK_IMPORTED_MODULE_1__.i18n.getLocale(), + icon: _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('notification_icon') + }); + setTimeout(() => n.close(), 5000); +} + +/** + * @param {RosterContact} contact + */ +function handleContactRequestNotification(contact) { + if (areDesktopNotificationsEnabled()) { + showContactRequestNotification(contact); + } +} +function requestPermission() { + if (supports_html5_notification && !['denied', 'granted'].includes(Notification.permission)) { + // Ask user to enable HTML5 notifications + Notification.requestPermission(); + } +} + +/***/ }), + +/***/ "./src/plugins/omemo/api.js": +/*!**********************************!*\ + !*** ./src/plugins/omemo/api.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/omemo/utils.js"); +/* harmony import */ var _store_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store.js */ "./src/plugins/omemo/store.js"); + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + /** + * The "omemo" namespace groups methods relevant to OMEMO + * encryption. + * + * @namespace _converse.api.omemo + * @memberOf _converse.api + */ + omemo: { + /** + * Returns the device ID of the current device. + */ + async getDeviceID() { + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.waitUntil('OMEMOInitialized'); + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.omemo_store.get('device_id'); + }, + session: { + async restore() { + const { + state + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse; + if (state.omemo_store === undefined) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + const id = `converse.omemosession-${bare_jid}`; + state.omemo_store = new _store_js__WEBPACK_IMPORTED_MODULE_2__["default"]({ + id + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.initStorage(state.omemo_store, id); + } + await state.omemo_store.fetchSession(); + } + }, + /** + * The "devicelists" namespace groups methods related to OMEMO device lists + * + * @namespace _converse.api.omemo.devicelists + * @memberOf _converse.api.omemo + */ + devicelists: { + /** + * Returns the {@link _converse.DeviceList} for a particular JID. + * The device list will be created if it doesn't exist already. + * @method _converse.api.omemo.devicelists.get + * @param {String} jid - The Jabber ID for which the device list will be returned. + * @param {boolean} create=false - Set to `true` if the device list + * should be created if it cannot be found. + */ + async get(jid, create = false) { + const list = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.devicelists.get(jid) || (create ? _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.devicelists.create({ + jid + }) : null); + await list?.initialized; + return list; + } + }, + /** + * The "bundle" namespace groups methods relevant to the user's + * OMEMO bundle. + * + * @namespace _converse.api.omemo.bundle + * @memberOf _converse.api.omemo + */ + bundle: { + /** + * Lets you generate a new OMEMO device bundle + * + * @method _converse.api.omemo.bundle.generate + * @returns {promise} Promise which resolves once we have a result from the server. + */ + async generate() { + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.waitUntil('OMEMOInitialized'); + // Remove current device + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + const devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.omemo.devicelists.get(bare_jid); + const { + omemo_store + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state; + const device_id = omemo_store.get('device_id'); + if (device_id) { + const device = devicelist.devices.get(device_id); + omemo_store.unset(device_id); + if (device) { + await new Promise(done => device.destroy({ + 'success': done, + 'error': done + })); + } + devicelist.devices.trigger('remove'); + } + // Generate new device bundle and publish + // https://xmpp.org/extensions/attic/xep-0384-0.3.0.html#usecases-announcing + await omemo_store.generateBundle(); + await devicelist.publishDevices(); + const device = devicelist.devices.get(omemo_store.get('device_id')); + const fp = (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.generateFingerprint)(device); + await omemo_store.publishBundle(); + return fp; + } + } + } +}); + +/***/ }), + +/***/ "./src/plugins/omemo/consts.js": +/*!*************************************!*\ + !*** ./src/plugins/omemo/consts.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ KEY_ALGO: () => (/* binding */ KEY_ALGO), +/* harmony export */ TAG_LENGTH: () => (/* binding */ TAG_LENGTH), +/* harmony export */ TRUSTED: () => (/* binding */ TRUSTED), +/* harmony export */ UNDECIDED: () => (/* binding */ UNDECIDED), +/* harmony export */ UNTRUSTED: () => (/* binding */ UNTRUSTED) +/* harmony export */ }); +const UNDECIDED = 0; +const TRUSTED = 1; +const UNTRUSTED = -1; +const TAG_LENGTH = 128; +const KEY_ALGO = { + 'name': 'AES-GCM', + 'length': 128 +}; + +/***/ }), + +/***/ "./src/plugins/omemo/device.js": +/*!*************************************!*\ + !*** ./src/plugins/omemo/device.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_errors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/errors.js */ "./src/shared/errors.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _consts_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./consts.js */ "./src/plugins/omemo/consts.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/omemo/utils.js"); + + + + + +const { + Strophe, + sizzle, + $iq +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; + +/** + * @namespace _converse.Device + * @memberOf _converse + */ +class Device extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__.Model { + defaults() { + // eslint-disable-line class-methods-use-this + return { + 'trusted': _consts_js__WEBPACK_IMPORTED_MODULE_2__.UNDECIDED, + 'active': true + }; + } + getRandomPreKey() { + // XXX: assumes that the bundle has already been fetched + const bundle = this.get('bundle'); + return bundle.prekeys[_converse_headless__WEBPACK_IMPORTED_MODULE_3__.u.getRandomInt(bundle.prekeys.length)]; + } + async fetchBundleFromServer() { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.session.get('bare_jid'); + const stanza = $iq({ + 'type': 'get', + 'from': bare_jid, + 'to': this.get('jid') + }).c('pubsub', { + 'xmlns': Strophe.NS.PUBSUB + }).c('items', { + 'node': `${Strophe.NS.OMEMO_BUNDLES}:${this.get('id')}` + }); + let iq; + try { + iq = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.sendIQ(stanza); + } catch (iq) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`Could not fetch bundle for device ${this.get('id')} from ${this.get('jid')}`); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(iq); + return null; + } + if (iq.querySelector('error')) { + throw new shared_errors_js__WEBPACK_IMPORTED_MODULE_0__.IQError('Could not fetch bundle', iq); + } + const publish_el = sizzle(`items[node="${Strophe.NS.OMEMO_BUNDLES}:${this.get('id')}"]`, iq).pop(); + const bundle_el = sizzle(`bundle[xmlns="${Strophe.NS.OMEMO}"]`, publish_el).pop(); + const bundle = (0,_utils_js__WEBPACK_IMPORTED_MODULE_4__.parseBundle)(bundle_el); + this.save('bundle', bundle); + return bundle; + } + + /** + * Fetch and save the bundle information associated with + * this device, if the information is not cached already. + * @method _converse.Device#getBundle + */ + getBundle() { + if (this.get('bundle')) { + return Promise.resolve(this.get('bundle')); + } else { + return this.fetchBundleFromServer(); + } + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Device); + +/***/ }), + +/***/ "./src/plugins/omemo/devicelist.js": +/*!*****************************************!*\ + !*** ./src/plugins/omemo/devicelist.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _converse_openpromise__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/openpromise */ "./node_modules/@converse/openpromise/openpromise.js"); + + + +const { + Strophe, + $build, + $iq, + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; + +/** + * @namespace _converse.DeviceList + * @memberOf _converse + */ +class DeviceList extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model { + get idAttribute() { + // eslint-disable-line class-methods-use-this + return 'jid'; + } + async initialize() { + super.initialize(); + this.initialized = (0,_converse_openpromise__WEBPACK_IMPORTED_MODULE_2__.getOpenPromise)(); + await this.initDevices(); + this.initialized.resolve(); + } + initDevices() { + this.devices = new _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.exports.Devices(); + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + const id = `converse.devicelist-${bare_jid}-${this.get('jid')}`; + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.initStorage(this.devices, id); + return this.fetchDevices(); + } + async onDevicesFound(collection) { + if (collection.length === 0) { + let ids = []; + try { + ids = await this.fetchDevicesFromServer(); + } catch (e) { + if (e === null) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(`Timeout error while fetching devices for ${this.get('jid')}`); + } else { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(`Could not fetch devices for ${this.get('jid')}`); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + } + this.destroy(); + } + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + if (this.get('jid') === bare_jid) { + this.publishCurrentDevice(ids); + } + } + } + fetchDevices() { + if (this._devices_promise === undefined) { + this._devices_promise = new Promise(resolve => { + this.devices.fetch({ + 'success': c => resolve(this.onDevicesFound(c)), + 'error': (_, e) => { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + resolve(); + } + }); + }); + } + return this._devices_promise; + } + async getOwnDeviceId() { + const { + omemo_store + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + let device_id = omemo_store.get('device_id'); + if (!this.devices.get(device_id)) { + // Generate a new bundle if we cannot find our device + await omemo_store.generateBundle(); + device_id = omemo_store.get('device_id'); + } + return device_id; + } + async publishCurrentDevice(device_ids) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + if (this.get('jid') !== bare_jid) { + return; // We only publish for ourselves. + } + await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.omemo.session.restore(); + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.omemo_store) { + // Happens during tests. The connection gets torn down + // before publishCurrentDevice has time to finish. + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.warn('publishCurrentDevice: omemo_store is not defined, likely a timing issue'); + return; + } + if (!device_ids.includes(await this.getOwnDeviceId())) { + return this.publishDevices(); + } + } + async fetchDevicesFromServer() { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + const stanza = $iq({ + 'type': 'get', + 'from': bare_jid, + 'to': this.get('jid') + }).c('pubsub', { + 'xmlns': Strophe.NS.PUBSUB + }).c('items', { + 'node': Strophe.NS.OMEMO_DEVICELIST + }); + const iq = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.sendIQ(stanza); + const selector = `list[xmlns="${Strophe.NS.OMEMO}"] device`; + const device_ids = sizzle(selector, iq).map(d => d.getAttribute('id')); + const jid = this.get('jid'); + return Promise.all(device_ids.map(id => this.devices.create({ + id, + jid + }, { + 'promise': true + }))); + } + + /** + * Send an IQ stanza to the current user's "devices" PEP node to + * ensure that all devices are published for potential chat partners to see. + * See: https://xmpp.org/extensions/xep-0384.html#usecases-announcing + */ + publishDevices() { + const item = $build('item', { + 'id': 'current' + }).c('list', { + 'xmlns': Strophe.NS.OMEMO + }); + this.devices.filter(d => d.get('active')).forEach(d => item.c('device', { + 'id': d.get('id') + }).up()); + const options = { + access_model: 'open' + }; + return _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.pubsub.publish(null, Strophe.NS.OMEMO_DEVICELIST, item, options, false); + } + async removeOwnDevices(device_ids) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + if (this.get('jid') !== bare_jid) { + throw new Error("Cannot remove devices from someone else's device list"); + } + await Promise.all(device_ids.map(id => this.devices.get(id)).map(d => new Promise(resolve => d.destroy({ + 'success': resolve, + 'error': (_, e) => { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + resolve(); + } + })))); + return this.publishDevices(); + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeviceList); + +/***/ }), + +/***/ "./src/plugins/omemo/devicelists.js": +/*!******************************************!*\ + !*** ./src/plugins/omemo/devicelists.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _devicelist_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./devicelist.js */ "./src/plugins/omemo/devicelist.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); + + +class DeviceLists extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__.Collection { + constructor() { + super(); + this.model = _devicelist_js__WEBPACK_IMPORTED_MODULE_0__["default"]; + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeviceLists); + +/***/ }), + +/***/ "./src/plugins/omemo/devices.js": +/*!**************************************!*\ + !*** ./src/plugins/omemo/devices.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _device_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./device.js */ "./src/plugins/omemo/device.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); + + +class Devices extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__.Collection { + constructor() { + super(); + this.model = _device_js__WEBPACK_IMPORTED_MODULE_0__["default"]; + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Devices); + +/***/ }), + +/***/ "./src/plugins/omemo/fingerprints.js": +/*!*******************************************!*\ + !*** ./src/plugins/omemo/fingerprints.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Fingerprints: () => (/* binding */ Fingerprints) +/* harmony export */ }); +/* harmony import */ var _templates_fingerprints_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/fingerprints.js */ "./src/plugins/omemo/templates/fingerprints.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class Fingerprints extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + constructor() { + super(); + this.jid = null; + } + static get properties() { + return { + 'jid': { + type: String + } + }; + } + async initialize() { + this.devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.omemo.devicelists.get(this.jid, true); + this.listenTo(this.devicelist.devices, 'change:bundle', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'change:trusted', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'remove', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'add', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'reset', () => this.requestUpdate()); + this.requestUpdate(); + } + render() { + return this.devicelist ? (0,_templates_fingerprints_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this) : ''; + } + toggleDeviceTrust(ev) { + const radio = ev.target; + const device = this.devicelist.devices.get(radio.getAttribute('name')); + device.save('trusted', parseInt(radio.value, 10)); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-omemo-fingerprints', Fingerprints); + +/***/ }), + +/***/ "./src/plugins/omemo/index.js": +/*!************************************!*\ + !*** ./src/plugins/omemo/index.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _fingerprints_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fingerprints.js */ "./src/plugins/omemo/fingerprints.js"); +/* harmony import */ var _profile_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./profile.js */ "./src/plugins/omemo/profile.js"); +/* harmony import */ var shared_modals_user_details_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/modals/user-details.js */ "./src/shared/modals/user-details.js"); +/* harmony import */ var _device_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./device.js */ "./src/plugins/omemo/device.js"); +/* harmony import */ var _devicelist_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./devicelist.js */ "./src/plugins/omemo/devicelist.js"); +/* harmony import */ var _devicelists_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./devicelists.js */ "./src/plugins/omemo/devicelists.js"); +/* harmony import */ var _devices_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./devices.js */ "./src/plugins/omemo/devices.js"); +/* harmony import */ var _store_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./store.js */ "./src/plugins/omemo/store.js"); +/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./api.js */ "./src/plugins/omemo/api.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/omemo/utils.js"); +/** + * @copyright The Converse.js contributors + * @license Mozilla Public License (MPLv2) + * + * @module plugins-omemo-index + * @typedef {Window & globalThis & {libsignal: any} } WindowWithLibsignal + */ + + + + + + + + + + + +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + shouldClearCache +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u; +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env.omemo = _utils_js__WEBPACK_IMPORTED_MODULE_10__.omemo; +Strophe.addNamespace('OMEMO_DEVICELIST', Strophe.NS.OMEMO + '.devicelist'); +Strophe.addNamespace('OMEMO_VERIFICATION', Strophe.NS.OMEMO + '.verification'); +Strophe.addNamespace('OMEMO_WHITELISTED', Strophe.NS.OMEMO + '.whitelisted'); +Strophe.addNamespace('OMEMO_BUNDLES', Strophe.NS.OMEMO + '.bundles'); +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-omemo', { + enabled(_converse) { + return /** @type WindowWithLibsignal */window.libsignal && _converse.config.get('trusted') && !_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('clear_cache_on_logout') && !_converse.api.settings.get('blacklisted_plugins').includes('converse-omemo'); + }, + dependencies: ['converse-chatview', 'converse-pubsub', 'converse-profile'], + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'omemo_default': false + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.promises.add(['OMEMOInitialized']); + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.api, _api_js__WEBPACK_IMPORTED_MODULE_9__["default"]); + const exports = { + OMEMOStore: _store_js__WEBPACK_IMPORTED_MODULE_8__["default"], + Device: _device_js__WEBPACK_IMPORTED_MODULE_4__["default"], + Devices: _devices_js__WEBPACK_IMPORTED_MODULE_7__["default"], + DeviceList: _devicelist_js__WEBPACK_IMPORTED_MODULE_5__["default"], + DeviceLists: _devicelists_js__WEBPACK_IMPORTED_MODULE_6__["default"] + }; + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, exports); // DEPRECATED + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.exports, exports); + + /******************** Event Handlers ********************/ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.waitUntil('chatBoxesInitialized').then(_utils_js__WEBPACK_IMPORTED_MODULE_10__.onChatBoxesInitialized); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('getOutgoingMessageAttributes', _utils_js__WEBPACK_IMPORTED_MODULE_10__.getOutgoingMessageAttributes); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('createMessageStanza', async (chat, data) => { + try { + data = await (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.createOMEMOMessageStanza)(chat, data); + } catch (e) { + (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.handleMessageSendError)(e, chat); + } + return data; + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('afterFileUploaded', (msg, attrs) => msg.file.xep454_ivkey ? (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.setEncryptedFileURL)(msg, attrs) : attrs); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('beforeFileUpload', (chat, file) => chat.get('omemo_active') ? (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.encryptFile)(file) : file); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('parseMessage', _utils_js__WEBPACK_IMPORTED_MODULE_10__.parseEncryptedMessage); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('parseMUCMessage', _utils_js__WEBPACK_IMPORTED_MODULE_10__.parseEncryptedMessage); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatBoxViewInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_10__.onChatInitialized); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatRoomViewInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_10__.onChatInitialized); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('connected', _utils_js__WEBPACK_IMPORTED_MODULE_10__.registerPEPPushHandler); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('getToolbarButtons', _utils_js__WEBPACK_IMPORTED_MODULE_10__.getOMEMOToolbarButton); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('statusInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_10__.initOMEMO); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('addClientFeatures', () => _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.disco.own.features.add(`${Strophe.NS.OMEMO_DEVICELIST}+notify`)); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('afterMessageBodyTransformed', _utils_js__WEBPACK_IMPORTED_MODULE_10__.handleEncryptedFiles); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('userDetailsModalInitialized', contact => { + const jid = contact.get('jid'); + (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.generateFingerprints)(jid).catch(e => _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(e)); + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('profileModalInitialized', () => { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.generateFingerprints)(bare_jid).catch(e => _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(e)); + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('clearSession', () => { + delete _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.omemo_store; + if (shouldClearCache(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse) && _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.devicelists) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.devicelists.clearStore(); + delete _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.devicelists; + } + }); + } +}); + +/***/ }), + +/***/ "./src/plugins/omemo/profile.js": +/*!**************************************!*\ + !*** ./src/plugins/omemo/profile.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Profile: () => (/* binding */ Profile) +/* harmony export */ }); +/* harmony import */ var _templates_profile_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/profile.js */ "./src/plugins/omemo/templates/profile.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + + +const { + Strophe, + sizzle, + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.env; +class Profile extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + async initialize() { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_4__._converse.session.get('bare_jid'); + this.devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.omemo.devicelists.get(bare_jid, true); + await this.setAttributes(); + this.listenTo(this.devicelist.devices, 'change:bundle', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'reset', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'reset', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'remove', () => this.requestUpdate()); + this.listenTo(this.devicelist.devices, 'add', () => this.requestUpdate()); + this.requestUpdate(); + } + async setAttributes() { + this.device_id = await _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.omemo.getDeviceID(); + this.current_device = this.devicelist.devices.get(this.device_id); + this.other_devices = this.devicelist.devices.filter(d => d.get('id') !== this.device_id); + } + render() { + return this.devicelist ? (0,_templates_profile_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this) : (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + } + selectAll(ev) { + // eslint-disable-line class-methods-use-this + let sibling = u.ancestor(ev.target, 'li'); + while (sibling) { + sibling.querySelector('input[type="checkbox"]').checked = ev.target.checked; + sibling = sibling.nextElementSibling; + } + } + async removeSelectedFingerprints(ev) { + ev.preventDefault(); + ev.stopPropagation(); + ev.target.querySelector('.select-all').checked = false; + const device_ids = sizzle('.fingerprint-removal-item input[type="checkbox"]:checked', ev.target).map(c => c.value); + try { + await this.devicelist.removeOwnDevices(device_ids); + } catch (err) { + _converse_headless__WEBPACK_IMPORTED_MODULE_4__.log.error(err); + _converse_headless__WEBPACK_IMPORTED_MODULE_4__._converse.api.alert(Strophe.LogLevel.ERROR, (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Error'), [(0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Sorry, an error occurred while trying to remove the devices.')]); + } + await this.setAttributes(); + this.requestUpdate(); + } + async generateOMEMODeviceBundle(ev) { + ev.preventDefault(); + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Are you sure you want to generate new OMEMO keys? ' + 'This will remove your old keys and all previously ' + 'encrypted messages will no longer be decryptable on this device.')); + if (result) { + await _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.omemo.bundle.generate(); + await this.setAttributes(); + this.requestUpdate(); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.elements.define('converse-omemo-profile', Profile); + +/***/ }), + +/***/ "./src/plugins/omemo/store.js": +/*!************************************!*\ + !*** ./src/plugins/omemo/store.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lodash_es_range__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es/range */ "./node_modules/lodash-es/range.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/omemo/utils.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/** + * @typedef {module:plugins-omemo-index.WindowWithLibsignal} WindowWithLibsignal + */ + + + + +const { + Strophe, + $build, + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.env; +class OMEMOStore extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model { + get Direction() { + return { + SENDING: 1, + RECEIVING: 2 + }; + } + getIdentityKeyPair() { + const keypair = this.get('identity_keypair'); + return Promise.resolve({ + 'privKey': u.base64ToArrayBuffer(keypair.privKey), + 'pubKey': u.base64ToArrayBuffer(keypair.pubKey) + }); + } + getLocalRegistrationId() { + return Promise.resolve(parseInt(this.get('device_id'), 10)); + } + isTrustedIdentity(identifier, identity_key, _direction) { + if (identifier === null || identifier === undefined) { + throw new Error("Can't check identity key for invalid key"); + } + if (!(identity_key instanceof ArrayBuffer)) { + throw new Error('Expected identity_key to be an ArrayBuffer'); + } + const trusted = this.get('identity_key' + identifier); + if (trusted === undefined) { + return Promise.resolve(true); + } + return Promise.resolve(u.arrayBufferToBase64(identity_key) === trusted); + } + loadIdentityKey(identifier) { + if (identifier === null || identifier === undefined) { + throw new Error("Can't load identity_key for invalid identifier"); + } + return Promise.resolve(u.base64ToArrayBuffer(this.get('identity_key' + identifier))); + } + saveIdentity(identifier, identity_key) { + if (identifier === null || identifier === undefined) { + throw new Error("Can't save identity_key for invalid identifier"); + } + const { + libsignal + } = /** @type WindowWithLibsignal */window; + const address = new libsignal.SignalProtocolAddress.fromString(identifier); + const existing = this.get('identity_key' + address.getName()); + const b64_idkey = u.arrayBufferToBase64(identity_key); + this.save('identity_key' + address.getName(), b64_idkey); + if (existing && b64_idkey !== existing) { + return Promise.resolve(true); + } else { + return Promise.resolve(false); + } + } + getPreKeys() { + return this.get('prekeys') || {}; + } + loadPreKey(key_id) { + const res = this.getPreKeys()[key_id]; + if (res) { + return Promise.resolve({ + 'privKey': u.base64ToArrayBuffer(res.privKey), + 'pubKey': u.base64ToArrayBuffer(res.pubKey) + }); + } + return Promise.resolve(); + } + storePreKey(key_id, key_pair) { + const prekey = {}; + prekey[key_id] = { + 'pubKey': u.arrayBufferToBase64(key_pair.pubKey), + 'privKey': u.arrayBufferToBase64(key_pair.privKey) + }; + this.save('prekeys', Object.assign(this.getPreKeys(), prekey)); + return Promise.resolve(); + } + removePreKey(key_id) { + const prekeys = { + ...this.getPreKeys() + }; + delete prekeys[key_id]; + this.save('prekeys', prekeys); + return Promise.resolve(); + } + loadSignedPreKey(_keyId) { + const res = this.get('signed_prekey'); + if (res) { + return Promise.resolve({ + 'privKey': u.base64ToArrayBuffer(res.privKey), + 'pubKey': u.base64ToArrayBuffer(res.pubKey) + }); + } + return Promise.resolve(); + } + storeSignedPreKey(spk) { + if (typeof spk !== 'object') { + // XXX: We've changed the signature of this method from the + // example given in InMemorySignalProtocolStore. + // Should be fine because the libsignal code doesn't + // actually call this method. + throw new Error('storeSignedPreKey: expected an object'); + } + this.save('signed_prekey', { + 'id': spk.keyId, + 'privKey': u.arrayBufferToBase64(spk.keyPair.privKey), + 'pubKey': u.arrayBufferToBase64(spk.keyPair.pubKey), + // XXX: The InMemorySignalProtocolStore does not pass + // in or store the signature, but we need it when we + // publish our bundle and this method isn't called from + // within libsignal code, so we modify it to also store + // the signature. + 'signature': u.arrayBufferToBase64(spk.signature) + }); + return Promise.resolve(); + } + removeSignedPreKey(key_id) { + if (this.get('signed_prekey')['id'] === key_id) { + this.unset('signed_prekey'); + this.save(); + } + return Promise.resolve(); + } + loadSession(identifier) { + return Promise.resolve(this.get('session' + identifier)); + } + storeSession(identifier, record) { + return Promise.resolve(this.save('session' + identifier, record)); + } + removeSession(identifier) { + return Promise.resolve(this.unset('session' + identifier)); + } + removeAllSessions(identifier) { + const keys = Object.keys(this.attributes).filter(key => key.startsWith('session' + identifier) ? key : false); + const attrs = {}; + keys.forEach(key => { + attrs[key] = undefined; + }); + this.save(attrs); + return Promise.resolve(); + } + publishBundle() { + const signed_prekey = this.get('signed_prekey'); + const node = `${Strophe.NS.OMEMO_BUNDLES}:${this.get('device_id')}`; + const item = $build('item').c('bundle', { + 'xmlns': Strophe.NS.OMEMO + }).c('signedPreKeyPublic', { + 'signedPreKeyId': signed_prekey.id + }).t(signed_prekey.pubKey).up().c('signedPreKeySignature').t(signed_prekey.signature).up().c('identityKey').t(this.get('identity_keypair').pubKey).up().c('prekeys'); + Object.values(this.get('prekeys')).forEach((prekey, id) => item.c('preKeyPublic', { + 'preKeyId': id + }).t(prekey.pubKey).up()); + const options = { + access_model: 'open' + }; + return _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.pubsub.publish(null, node, item, options, false); + } + async generateMissingPreKeys() { + const { + libsignal + } = /** @type WindowWithLibsignal */window; + const { + KeyHelper + } = libsignal; + const prekeyIds = Object.keys(this.getPreKeys()); + const missing_keys = (0,lodash_es_range__WEBPACK_IMPORTED_MODULE_3__["default"])(0, _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.NUM_PREKEYS).map(id => id.toString()).filter(id => !prekeyIds.includes(id)); + if (missing_keys.length < 1) { + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.debug('No missing prekeys to generate for our own device'); + return Promise.resolve(); + } + const keys = await Promise.all(missing_keys.map(id => KeyHelper.generatePreKey(parseInt(id, 10)))); + keys.forEach(k => this.storePreKey(k.keyId, k.keyPair)); + const prekeys = this.getPreKeys(); + const marshalled_keys = Object.keys(prekeys).map(id => ({ + id, + key: prekeys[id].pubKey + })); + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.session.get('bare_jid'); + const devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.omemo.devicelists.get(bare_jid); + const device = devicelist.devices.get(this.get('device_id')); + const bundle = await device.getBundle(); + device.save('bundle', Object.assign(bundle, { + 'prekeys': marshalled_keys + })); + } + + /** + * Generates, stores and then returns pre-keys. + * + * Pre-keys are one half of a X3DH key exchange and are published as part + * of the device bundle. + * + * For a new contact or device to establish an encrypted session, it needs + * to use a pre-key, which it chooses randomly from the list of available + * ones. + */ + async generatePreKeys() { + const amount = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.NUM_PREKEYS; + const { + libsignal + } = /** @type WindowWithLibsignal */window; + const { + KeyHelper + } = libsignal; + const keys = await Promise.all((0,lodash_es_range__WEBPACK_IMPORTED_MODULE_3__["default"])(0, amount).map(id => KeyHelper.generatePreKey(id))); + keys.forEach(k => this.storePreKey(k.keyId, k.keyPair)); + return keys.map(k => ({ + 'id': k.keyId, + 'key': u.arrayBufferToBase64(k.keyPair.pubKey) + })); + } + + /** + * Generate the cryptographic data used by the X3DH key agreement protocol + * in order to build a session with other devices. + * + * By generating a bundle, and publishing it via PubSub, we allow other + * clients to download it and start asynchronous encrypted sessions with us, + * even if we're offline at that time. + */ + async generateBundle() { + const { + libsignal + } = /** @type WindowWithLibsignal */window; + + // The first thing that needs to happen if a client wants to + // start using OMEMO is they need to generate an IdentityKey + // and a Device ID. + + // The IdentityKey is a Curve25519 public/private Key pair. + const identity_keypair = await libsignal.KeyHelper.generateIdentityKeyPair(); + const identity_key = u.arrayBufferToBase64(identity_keypair.pubKey); + + // The Device ID is a randomly generated integer between 1 and 2^31 - 1. + const device_id = await (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.generateDeviceID)(); + this.save({ + 'device_id': device_id, + 'identity_keypair': { + 'privKey': u.arrayBufferToBase64(identity_keypair.privKey), + 'pubKey': identity_key + }, + 'identity_key': identity_key + }); + const signed_prekey = await libsignal.KeyHelper.generateSignedPreKey(identity_keypair, 0); + this.storeSignedPreKey(signed_prekey); + const prekeys = await this.generatePreKeys(); + const bundle = { + identity_key, + device_id, + prekeys + }; + bundle['signed_prekey'] = { + 'id': signed_prekey.keyId, + 'public_key': u.arrayBufferToBase64(signed_prekey.keyPair.pubKey), + 'signature': u.arrayBufferToBase64(signed_prekey.signature) + }; + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.session.get('bare_jid'); + const devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.omemo.devicelists.get(bare_jid); + const device = await devicelist.devices.create({ + 'id': bundle.device_id, + 'jid': bare_jid + }, { + 'promise': true + }); + device.save('bundle', bundle); + } + fetchSession() { + if (this._setup_promise === undefined) { + this._setup_promise = new Promise((resolve, reject) => { + this.fetch({ + 'success': () => { + if (!this.get('device_id')) { + this.generateBundle().then(resolve).catch(reject); + } else { + resolve(); + } + }, + 'error': (model, resp) => { + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.warn("Could not fetch OMEMO session from cache, we'll generate a new one."); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.warn(resp); + this.generateBundle().then(resolve).catch(reject); + } + }); + }); + } + return this._setup_promise; + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OMEMOStore); + +/***/ }), + +/***/ "./src/plugins/omemo/templates/fingerprints.js": +/*!*****************************************************!*\ + !*** ./src/plugins/omemo/templates/fingerprints.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/omemo/utils.js"); + + + +const device_fingerprint = (el, device) => { + const i18n_trusted = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Trusted'); + const i18n_untrusted = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Untrusted'); + if (device.get('bundle') && device.get('bundle').fingerprint) { + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
  • ${(0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.formatFingerprint)(device.get('bundle').fingerprint)}
  • `; + } else { + return ''; + } +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_fingerprints = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('OMEMO Fingerprints'); + const i18n_no_devices = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)("No OMEMO-enabled devices found"); + const devices = el.devicelist.devices; + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    • ${i18n_fingerprints}
    • ${devices.length ? devices.map(device => device_fingerprint(el, device)) : (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    • ${i18n_no_devices}
    • `}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/omemo/templates/profile.js": +/*!************************************************!*\ + !*** ./src/plugins/omemo/templates/profile.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var plugins_omemo_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/omemo/utils.js */ "./src/plugins/omemo/utils.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + + + +const fingerprint = el => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${(0,plugins_omemo_utils_js__WEBPACK_IMPORTED_MODULE_1__.formatFingerprint)(el.current_device.get('bundle').fingerprint)}`; +const device_with_fingerprint = el => { + const i18n_fingerprint_checkbox_label = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Checkbox for selecting the following fingerprint'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
  • `; +}; +const device_without_fingerprint = el => { + const i18n_device_without_fingerprint = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Device without a fingerprint'); + const i18n_fingerprint_checkbox_label = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Checkbox for selecting the following device'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
  • `; +}; +const device_item = el => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${el.device.get('bundle') && el.device.get('bundle').fingerprint ? device_with_fingerprint(el) : device_without_fingerprint(el)}`; +const device_list = el => { + const i18n_other_devices = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Other OMEMO-enabled devices'); + const i18n_other_devices_label = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Checkbox to select fingerprints of all other OMEMO devices'); + const i18n_remove_devices = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Remove checked devices and close'); + const i18n_select_all = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Select all'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${el.other_devices?.map(device => device_item(Object.assign({ + device + }, el)))}
    `; +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_fingerprint = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)("This device's OMEMO fingerprint"); + const i18n_generate = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Generate new keys and fingerprint'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    • ${i18n_fingerprint}
    • ${el.current_device && el.current_device.get('bundle') && el.current_device.get('bundle').fingerprint ? fingerprint(el) : (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_0__["default"])()}
    ${el.other_devices?.length ? device_list(el) : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/omemo/utils.js": +/*!************************************!*\ + !*** ./src/plugins/omemo/utils.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ addKeysToMessageStanza: () => (/* binding */ addKeysToMessageStanza), +/* harmony export */ contactHasOMEMOSupport: () => (/* binding */ contactHasOMEMOSupport), +/* harmony export */ createOMEMOMessageStanza: () => (/* binding */ createOMEMOMessageStanza), +/* harmony export */ encryptFile: () => (/* binding */ encryptFile), +/* harmony export */ formatFingerprint: () => (/* binding */ formatFingerprint), +/* harmony export */ generateDeviceID: () => (/* binding */ generateDeviceID), +/* harmony export */ generateFingerprint: () => (/* binding */ generateFingerprint), +/* harmony export */ generateFingerprints: () => (/* binding */ generateFingerprints), +/* harmony export */ getDeviceForContact: () => (/* binding */ getDeviceForContact), +/* harmony export */ getDevicesForContact: () => (/* binding */ getDevicesForContact), +/* harmony export */ getOMEMOToolbarButton: () => (/* binding */ getOMEMOToolbarButton), +/* harmony export */ getOutgoingMessageAttributes: () => (/* binding */ getOutgoingMessageAttributes), +/* harmony export */ getSession: () => (/* binding */ getSession), +/* harmony export */ getSessionCipher: () => (/* binding */ getSessionCipher), +/* harmony export */ handleEncryptedFiles: () => (/* binding */ handleEncryptedFiles), +/* harmony export */ handleMessageSendError: () => (/* binding */ handleMessageSendError), +/* harmony export */ initOMEMO: () => (/* binding */ initOMEMO), +/* harmony export */ omemo: () => (/* binding */ omemo), +/* harmony export */ onChatBoxesInitialized: () => (/* binding */ onChatBoxesInitialized), +/* harmony export */ onChatInitialized: () => (/* binding */ onChatInitialized), +/* harmony export */ parseBundle: () => (/* binding */ parseBundle), +/* harmony export */ parseEncryptedMessage: () => (/* binding */ parseEncryptedMessage), +/* harmony export */ registerPEPPushHandler: () => (/* binding */ registerPEPPushHandler), +/* harmony export */ restoreOMEMOSession: () => (/* binding */ restoreOMEMOSession), +/* harmony export */ setEncryptedFileURL: () => (/* binding */ setEncryptedFileURL) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var templates_audio_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates/audio.js */ "./src/templates/audio.js"); +/* harmony import */ var templates_file_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! templates/file.js */ "./src/templates/file.js"); +/* harmony import */ var templates_image_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! templates/image.js */ "./src/templates/image.js"); +/* harmony import */ var templates_video_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! templates/video.js */ "./src/templates/video.js"); +/* harmony import */ var _consts_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./consts.js */ "./src/plugins/omemo/consts.js"); +/* harmony import */ var utils_file_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! utils/file.js */ "./src/utils/file.js"); +/* harmony import */ var shared_errors_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! shared/errors.js */ "./src/shared/errors.js"); +/* harmony import */ var _devicelists_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./devicelists.js */ "./src/plugins/omemo/devicelists.js"); +/** + * @typedef {module:plugins-omemo-index.WindowWithLibsignal} WindowWithLibsignal + * @typedef {import('@converse/headless/plugins/chat/types.ts').MessageAttributes} MessageAttributes + * @typedef {import('@converse/headless/plugins/muc/types').MUCMessageAttributes} MUCMessageAttributes + * @typedef {import('@converse/headless').ChatBox} ChatBox + */ + + + + + + + + + + + + +const { + Strophe, + URI, + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; +const { + CHATROOMS_TYPE, + PRIVATE_CHAT_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.constants; +const { + appendArrayBuffer, + arrayBufferToBase64, + arrayBufferToHex, + arrayBufferToString, + base64ToArrayBuffer, + getURI, + hexToArrayBuffer, + initStorage, + isAudioURL, + isError, + isImageURL, + isVideoURL, + stringToArrayBuffer +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.u; +function formatFingerprint(fp) { + fp = fp.replace(/^05/, ''); + for (let i = 1; i < 8; i++) { + const idx = i * 8 + i - 1; + fp = fp.slice(0, idx) + ' ' + fp.slice(idx); + } + return fp; +} + +/** + * @param {Error|IQError|UserFacingError} e + * @param {ChatBox} chat + */ +function handleMessageSendError(e, chat) { + if (e instanceof shared_errors_js__WEBPACK_IMPORTED_MODULE_10__.IQError) { + chat.save('omemo_supported', false); + const err_msgs = []; + if (sizzle(`presence-subscription-required[xmlns="${Strophe.NS.PUBSUB_ERROR}"]`, e.iq).length) { + err_msgs.push((0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("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 (sizzle(`remote-server-not-found[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]`, e.iq).length) { + err_msgs.push((0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("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((0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Unable to send an encrypted message due to an unexpected error.')); + err_msgs.push(e.iq.outerHTML); + } + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Error'), err_msgs); + } else if (e instanceof shared_errors_js__WEBPACK_IMPORTED_MODULE_10__.UserFacingError) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Error'), [e.message]); + } + throw e; +} +async function contactHasOMEMOSupport(jid) { + /* Checks whether the contact advertises any OMEMO-compatible devices. */ + const devices = await getDevicesForContact(jid); + return devices.length > 0; +} +function getOutgoingMessageAttributes(chat, attrs) { + if (chat.get('omemo_active') && attrs.body) { + attrs['is_encrypted'] = true; + attrs['plaintext'] = attrs.body; + attrs['body'] = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('This is an OMEMO encrypted message which your client doesn’t seem to support. ' + 'Find more information on https://conversations.im/omemo'); + } + return attrs; +} + +/** + * @param {string} plaintext + */ +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(_consts_js__WEBPACK_IMPORTED_MODULE_8__.KEY_ALGO, true, ['encrypt', 'decrypt']); + const algo = { + 'name': 'AES-GCM', + 'iv': iv, + 'tagLength': _consts_js__WEBPACK_IMPORTED_MODULE_8__.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, _consts_js__WEBPACK_IMPORTED_MODULE_8__.KEY_ALGO, true, ['encrypt', 'decrypt']); + const cipher = appendArrayBuffer(base64ToArrayBuffer(obj.payload), obj.tag); + const algo = { + 'name': 'AES-GCM', + 'iv': base64ToArrayBuffer(obj.iv), + 'tagLength': _consts_js__WEBPACK_IMPORTED_MODULE_8__.TAG_LENGTH + }; + return arrayBufferToString(await crypto.subtle.decrypt(algo, key_obj, cipher)); +} + +/** + * @param {File} file + * @returns {Promise} + */ +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 + }); + Object.assign(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) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`${e.name}: Failed to download encrypted media: ${url}`); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + return null; + } + if (response.status >= 200 && response.status < 400) { + return response.arrayBuffer(); + } +} +async function getAndDecryptFile(uri) { + const protocol = window.location.hostname === 'localhost' && uri.domain() === 'localhost' ? 'http' : 'https'; + const http_url = uri.toString().replace(/^aesgcm/, protocol); + const cipher = await downloadFile(http_url); + if (cipher === null) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`Could not decrypt a received encrypted file ${uri.toString()} since it could not be downloaded`); + return new Error((0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Error: could not decrypt a received encrypted file, because it could not be downloaded')); + } + const hash = uri.hash().slice(1); + const key = hash.substring(hash.length - 64); + const iv = hash.replace(key, ''); + let content; + try { + content = await decryptFile(iv, key, cipher); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`Could not decrypt file ${uri.toString()}`); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + return null; + } + const [filename, extension] = uri.filename().split('.'); + const mimetype = utils_file_js__WEBPACK_IMPORTED_MODULE_9__.MIMETYPES_MAP[extension]; + try { + const file = new File([content], filename, { + 'type': mimetype + }); + return URL.createObjectURL(file); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`Could not decrypt file ${uri.toString()}`); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + return null; + } +} +function getTemplateForObjectURL(uri, obj_url, richtext) { + if (isError(obj_url)) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

    ${obj_url.message}

    `; + } + const file_url = uri.toString(); + if (isImageURL(file_url)) { + return (0,templates_image_js__WEBPACK_IMPORTED_MODULE_6__["default"])({ + 'src': obj_url, + 'onClick': richtext.onImgClick, + 'onLoad': richtext.onImgLoad + }); + } else if (isAudioURL(file_url)) { + return (0,templates_audio_js__WEBPACK_IMPORTED_MODULE_4__["default"])(obj_url); + } else if (isVideoURL(file_url)) { + return (0,templates_video_js__WEBPACK_IMPORTED_MODULE_7__["default"])(obj_url); + } else { + return (0,templates_file_js__WEBPACK_IMPORTED_MODULE_5__["default"])(obj_url, uri.filename()); + } +} +function addEncryptedFiles(text, offset, richtext) { + const objs = []; + try { + const parse_options = { + 'start': /\b(aesgcm:\/\/)/gi + }; + URI.withinString(text, (url, start, end) => { + objs.push({ + url, + start, + end + }); + return url; + }, parse_options); + } catch (error) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.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 = (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__.until)(promise, '')}`; + richtext.addTemplateResult(o.start + offset, o.end + offset, template); + }); +} +function handleEncryptedFiles(richtext) { + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.config.get('trusted')) { + return; + } + richtext.addAnnotations((text, offset) => addEncryptedFiles(text, offset, richtext)); +} + +/** + * Hook handler for { @link parseMessage } and { @link parseMUCMessage }, which + * parses the passed in `message` stanza for OMEMO attributes and then sets + * them on the attrs object. + * @param { Element } stanza - The message stanza + * @param { (MUCMessageAttributes|MessageAttributes) } attrs + * @returns (MUCMessageAttributes|MessageAttributes) + */ +async function parseEncryptedMessage(stanza, attrs) { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('clear_cache_on_logout') || !attrs.is_encrypted || attrs.encryption_namespace !== Strophe.NS.OMEMO) { + return attrs; + } + const encrypted_el = sizzle(`encrypted[xmlns="${Strophe.NS.OMEMO}"]`, stanza).pop(); + const header = encrypted_el.querySelector('header'); + attrs.encrypted = { + 'device_id': header.getAttribute('sid') + }; + const device_id = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo?.getDeviceID(); + const key = device_id && sizzle(`key[rid="${device_id}"]`, encrypted_el).pop(); + if (key) { + Object.assign(attrs.encrypted, { + 'iv': header.querySelector('iv').textContent, + 'key': key.textContent, + 'payload': encrypted_el.querySelector('payload')?.textContent || null, + 'prekey': ['true', '1'].includes(key.getAttribute('prekey')) + }); + } else { + return Object.assign(attrs, { + 'error_condition': 'not-encrypted-for-this-device', + 'error_type': 'Decryption', + 'is_ephemeral': true, + 'is_error': true, + 'type': 'error' + }); + } + // https://xmpp.org/extensions/xep-0384.html#usecases-receiving + if (attrs.encrypted.prekey === true) { + return decryptPrekeyWhisperMessage(attrs); + } else { + return decryptWhisperMessage(attrs); + } +} +function onChatBoxesInitialized() { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.chatboxes.on('add', chatbox => { + checkOMEMOSupported(chatbox); + if (chatbox.get('type') === CHATROOMS_TYPE) { + chatbox.occupants.on('add', o => onOccupantAdded(chatbox, o)); + chatbox.features.on('change', () => checkOMEMOSupported(chatbox)); + } + }); +} +function onChatInitialized(el) { + el.listenTo(el.model.messages, 'add', message => { + if (message.get('is_encrypted') && !message.get('is_error')) { + el.model.save('omemo_supported', true); + } + }); + el.listenTo(el.model, 'change:omemo_supported', () => { + if (!el.model.get('omemo_supported') && el.model.get('omemo_active')) { + el.model.set('omemo_active', false); + } else { + // Manually trigger an update, setting omemo_active to + // false above will automatically trigger one. + el.querySelector('converse-chat-toolbar')?.requestUpdate(); + } + }); + el.listenTo(el.model, 'change:omemo_active', () => { + el.querySelector('converse-chat-toolbar').requestUpdate(); + }); +} +function getSessionCipher(jid, id) { + const { + libsignal + } = /** @type WindowWithLibsignal */window; + const address = new libsignal.SignalProtocolAddress(jid, id); + return new libsignal.SessionCipher(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.omemo_store, address); +} +function getJIDForDecryption(attrs) { + const from_jid = attrs.from_muc ? attrs.from_real_jid : attrs.from; + if (!from_jid) { + Object.assign(attrs, { + 'error_text': (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Sorry, could not decrypt a received OMEMO " + "message because we don't have the XMPP address for that user."), + 'error_type': 'Decryption', + 'is_ephemeral': true, + '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 = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.devicelists.get(from_jid, true); + const encrypted = attrs.encrypted; + let device = devicelist.devices.get(encrypted.device_id); + if (!device) { + device = await devicelist.devices.create({ + 'id': encrypted.device_id, + 'jid': from_jid + }, { + 'promise': true + }); + } + if (encrypted.payload) { + const key = key_and_tag.slice(0, 16); + const tag = key_and_tag.slice(16); + const result = await omemo.decryptMessage(Object.assign(encrypted, { + 'key': key, + 'tag': tag + })); + device.save('active', true); + return result; + } +} +function getDecryptionErrorAttributes(e) { + return { + 'error_text': (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Sorry, could not decrypt a received OMEMO message due to an error.') + ` ${e.name} ${e.message}`, + 'error_condition': e.name, + 'error_message': e.message, + 'error_type': 'Decryption', + 'is_ephemeral': true, + 'is_error': true, + 'type': 'error' + }; +} +async function decryptPrekeyWhisperMessage(attrs) { + 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 { + key_and_tag = await session_cipher.decryptPreKeyWhisperMessage(key, 'binary'); + } catch (e) { + // TODO from the XEP: + // There are various reasons why decryption of an + // OMEMOKeyExchange or an OMEMOAuthenticatedMessage + // could fail. One reason is if the message was + // received twice and already decrypted once, in this + // case the client MUST ignore the decryption failure + // and not show any warnings/errors. In all other cases + // of decryption failure, clients SHOULD respond by + // forcibly doing a new key exchange and sending a new + // OMEMOKeyExchange with a potentially empty SCE + // payload. By building a new session with the original + // sender this way, the invalid session of the original + // sender will get overwritten with this newly created, + // valid session. + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.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 + // ratchet key with a counter of 53 or higher, it MUST send + // a heartbeat message. Heartbeat messages are normal OMEMO + // encrypted messages where the SCE payload does not include + // any elements. These heartbeat messages cause the ratchet + // to forward, thus consequent messages will have the + // counter restarted from 0. + try { + const plaintext = await handleDecryptedWhisperMessage(attrs, key_and_tag); + const { + omemo_store + } = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state; + await omemo_store.generateMissingPreKeys(); + await omemo_store.publishBundle(); + if (plaintext) { + return Object.assign(attrs, { + 'plaintext': plaintext + }); + } else { + return Object.assign(attrs, { + 'is_only_key': true + }); + } + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`${e.name} ${e.message}`); + return Object.assign(attrs, getDecryptionErrorAttributes(e)); + } +} +async function decryptWhisperMessage(attrs) { + const from_jid = getJIDForDecryption(attrs); + const session_cipher = getSessionCipher(from_jid, parseInt(attrs.encrypted.device_id, 10)); + const key = base64ToArrayBuffer(attrs.encrypted.key); + try { + const key_and_tag = await session_cipher.decryptWhisperMessage(key, 'binary'); + const plaintext = await handleDecryptedWhisperMessage(attrs, key_and_tag); + return Object.assign(attrs, { + 'plaintext': plaintext + }); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`${e.name} ${e.message}`); + return Object.assign(attrs, getDecryptionErrorAttributes(e)); + } +} +function addKeysToMessageStanza(stanza, dicts, iv) { + for (const i in dicts) { + if (Object.prototype.hasOwnProperty.call(dicts, i)) { + const payload = dicts[i].payload; + const device = dicts[i].device; + const prekey = 3 == parseInt(payload.type, 10); + stanza.c('key', { + 'rid': device.get('id') + }).t(btoa(payload.body)); + if (prekey) { + stanza.attrs({ + 'prekey': prekey + }); + } + stanza.up(); + } + } + stanza.c('iv').t(iv).up().up(); + return Promise.resolve(stanza); +} + +/** + * Given an XML element representing a user's OMEMO bundle, parse it + * and return a map. + */ +function parseBundle(bundle_el) { + const signed_prekey_public_el = bundle_el.querySelector('signedPreKeyPublic'); + const signed_prekey_signature_el = bundle_el.querySelector('signedPreKeySignature'); + const prekeys = sizzle(`prekeys > preKeyPublic`, bundle_el).map(el => ({ + 'id': parseInt(el.getAttribute('preKeyId'), 10), + 'key': el.textContent + })); + return { + 'identity_key': bundle_el.querySelector('identityKey').textContent.trim(), + 'signed_prekey': { + 'id': parseInt(signed_prekey_public_el.getAttribute('signedPreKeyId'), 10), + 'public_key': signed_prekey_public_el.textContent, + 'signature': signed_prekey_signature_el.textContent + }, + 'prekeys': prekeys + }; +} +async function generateFingerprints(jid) { + const devices = await getDevicesForContact(jid); + return Promise.all(devices.map(d => generateFingerprint(d))); +} +async function generateFingerprint(device) { + if (device.get('bundle')?.fingerprint) { + return; + } + const bundle = await device.getBundle(); + 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 +} +async function getDevicesForContact(jid) { + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.waitUntil('OMEMOInitialized'); + const devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.devicelists.get(jid, true); + await devicelist.fetchDevices(); + return devicelist.devices; +} +function getDeviceForContact(jid, device_id) { + return getDevicesForContact(jid).then(devices => devices.get(device_id)); +} +async function generateDeviceID() { + const { + libsignal + } = /** @type WindowWithLibsignal */window; + + /* Generates a device ID, making sure that it's unique */ + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.session.get('bare_jid'); + const devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.devicelists.get(bare_jid, true); + const existing_ids = devicelist.devices.pluck('id'); + let device_id = libsignal.KeyHelper.generateRegistrationId(); + + // Before publishing a freshly generated device id for the first time, + // a device MUST check whether that device id already exists, and if so, generate a new one. + let i = 0; + while (existing_ids.includes(device_id)) { + device_id = libsignal.KeyHelper.generateRegistrationId(); + i++; + if (i === 10) { + throw new Error('Unable to generate a unique device ID'); + } + } + return device_id.toString(); +} +async function buildSession(device) { + const { + libsignal + } = /** @type WindowWithLibsignal */window; + const address = new libsignal.SignalProtocolAddress(device.get('jid'), device.get('id')); + const sessionBuilder = new libsignal.SessionBuilder(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.omemo_store, address); + const prekey = device.getRandomPreKey(); + const bundle = await device.getBundle(); + return sessionBuilder.processPreKey({ + 'registrationId': parseInt(device.get('id'), 10), + 'identityKey': base64ToArrayBuffer(bundle.identity_key), + 'signedPreKey': { + 'keyId': bundle.signed_prekey.id, + // + 'publicKey': base64ToArrayBuffer(bundle.signed_prekey.public_key), + 'signature': base64ToArrayBuffer(bundle.signed_prekey.signature) + }, + 'preKey': { + 'keyId': prekey.id, + // + 'publicKey': base64ToArrayBuffer(prekey.key) + } + }); +} +async function getSession(device) { + if (!device.get('bundle')) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`Could not build an OMEMO session for device ${device.get('id')} because we don't have its bundle`); + return null; + } + const { + libsignal + } = /** @type WindowWithLibsignal */window; + const address = new libsignal.SignalProtocolAddress(device.get('jid'), device.get('id')); + const session = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.omemo_store.loadSession(address.toString()); + if (session) { + return session; + } else { + try { + const session = await buildSession(device); + return session; + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(`Could not build an OMEMO session for device ${device.get('id')}`); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + return null; + } + } +} +async function updateBundleFromStanza(stanza) { + const items_el = sizzle(`items`, stanza).pop(); + if (!items_el || !items_el.getAttribute('node').startsWith(Strophe.NS.OMEMO_BUNDLES)) { + return; + } + const device_id = items_el.getAttribute('node').split(':')[1]; + const jid = stanza.getAttribute('from'); + const bundle_el = sizzle(`item > bundle`, items_el).pop(); + const devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.devicelists.get(jid, true); + const device = devicelist.devices.get(device_id) || devicelist.devices.create({ + 'id': device_id, + jid + }); + device.save({ + 'bundle': parseBundle(bundle_el) + }); +} +async function updateDevicesFromStanza(stanza) { + const items_el = sizzle(`items[node="${Strophe.NS.OMEMO_DEVICELIST}"]`, stanza).pop(); + if (!items_el) { + return; + } + const device_selector = `item list[xmlns="${Strophe.NS.OMEMO}"] device`; + const device_ids = sizzle(device_selector, items_el).map(d => d.getAttribute('id')); + const jid = stanza.getAttribute('from'); + const devicelist = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.devicelists.get(jid, true); + const devices = devicelist.devices; + const removed_ids = devices.pluck('id').filter(id => !device_ids.includes(id)); + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.session.get('bare_jid'); + removed_ids.forEach(id => { + if (jid === bare_jid && id === _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.omemo_store.get('device_id')) { + return; // We don't set the current device as inactive + } + devices.get(id).save('active', false); + }); + device_ids.forEach(device_id => { + const device = devices.get(device_id); + if (device) { + device.save('active', true); + } else { + devices.create({ + 'id': device_id, + 'jid': jid + }); + } + }); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_3__.u.isSameBareJID(jid, jid)) { + // Make sure our own device is on the list + // (i.e. if it was removed, add it again). + devicelist.publishCurrentDevice(device_ids); + } +} +function registerPEPPushHandler() { + // Add a handler for devices pushed from other connected clients + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.connection.get().addHandler(async message => { + try { + if (sizzle(`event[xmlns="${Strophe.NS.PUBSUB}#event"]`, message).length) { + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.waitUntil('OMEMOInitialized'); + await updateDevicesFromStanza(message); + await updateBundleFromStanza(message); + } + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e.message); + } + return true; + }, null, 'message', 'headline'); +} +async function restoreOMEMOSession() {} +async function fetchDeviceLists() { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.session.get('bare_jid'); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.devicelists = new _devicelists_js__WEBPACK_IMPORTED_MODULE_11__["default"](); + const id = `converse.devicelists-${bare_jid}`; + initStorage(_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.devicelists, id); + await new Promise(resolve => { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.devicelists.fetch({ + 'success': resolve, + 'error': (_m, e) => { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + resolve(); + } + }); + }); + // Call API method to wait for our own device list to be fetched from the + // server or to be created. If we have no pre-existing OMEMO session, this + // will cause a new device and bundle to be generated and published. + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.devicelists.get(bare_jid, true); +} +async function initOMEMO(reconnecting) { + if (reconnecting) { + return; + } + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.config.get('trusted') || _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('clear_cache_on_logout')) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.warn('Not initializing OMEMO, since this browser is not trusted or clear_cache_on_logout is set to true'); + return; + } + try { + await fetchDeviceLists(); + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.session.restore(); + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.omemo_store.publishBundle(); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error('Could not initialize OMEMO support'); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(e); + return; + } + /** + * Triggered once OMEMO support has been initialized + * @event _converse#OMEMOInitialized + * @example _converse.api.listen.on('OMEMOInitialized', () => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.trigger('OMEMOInitialized'); +} +async function onOccupantAdded(chatroom, occupant) { + if (occupant.isSelf() || !chatroom.features.get('nonanonymous') || !chatroom.features.get('membersonly')) { + return; + } + if (chatroom.get('omemo_active')) { + const supported = await contactHasOMEMOSupport(occupant.get('jid')); + if (!supported) { + chatroom.createMessage({ + 'message': (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("%1$s doesn't appear to have a client that supports OMEMO. " + 'Encrypted chat will no longer be possible in this grouchat.', occupant.get('nick')), + 'type': 'error' + }); + chatroom.save({ + 'omemo_active': false, + 'omemo_supported': false + }); + } + } +} +async function checkOMEMOSupported(chatbox) { + let supported; + if (chatbox.get('type') === CHATROOMS_TYPE) { + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.waitUntil('OMEMOInitialized'); + supported = chatbox.features.get('nonanonymous') && chatbox.features.get('membersonly'); + } else if (chatbox.get('type') === PRIVATE_CHAT_TYPE) { + supported = await contactHasOMEMOSupport(chatbox.get('jid')); + } + chatbox.set('omemo_supported', !!supported); + if (supported && _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('omemo_default')) { + chatbox.set('omemo_active', true); + } +} +function toggleOMEMO(ev) { + ev.stopPropagation(); + ev.preventDefault(); + const toolbar_el = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.u.ancestor(ev.target, 'converse-chat-toolbar'); + if (!toolbar_el.model.get('omemo_supported')) { + let messages; + if (toolbar_el.model.get('type') === CHATROOMS_TYPE) { + messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Cannot use end-to-end encryption in this groupchat, ' + 'either the groupchat has some anonymity or not all participants support OMEMO.')]; + } else { + messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Cannot use end-to-end encryption because %1$s uses a client that doesn't support OMEMO.", toolbar_el.model.contact.getDisplayName())]; + } + return _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Error'), messages); + } + toolbar_el.model.save({ + 'omemo_active': !toolbar_el.model.get('omemo_active') + }); +} +function getOMEMOToolbarButton(toolbar_el, buttons) { + const model = toolbar_el.model; + const is_muc = model.get('type') === CHATROOMS_TYPE; + let title; + if (model.get('omemo_supported')) { + const i18n_plaintext = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Messages are being sent in plaintext'); + const i18n_encrypted = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Messages are sent encrypted'); + title = model.get('omemo_active') ? i18n_encrypted : i18n_plaintext; + } else if (is_muc) { + title = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('This groupchat needs to be members-only and non-anonymous in ' + 'order to support OMEMO encrypted messages'); + } else { + title = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('OMEMO encryption is not supported'); + } + let color; + if (model.get('omemo_supported')) { + if (model.get('omemo_active')) { + color = is_muc ? `var(--muc-color)` : `var(--chat-color)`; + } else { + color = `var(--error-color)`; + } + } else { + color = `var(--disabled-color)`; + } + buttons.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``); + return buttons; +} + +/** + * @param {MUC|ChatBox} chatbox + */ +async function getBundlesAndBuildSessions(chatbox) { + const no_devices_err = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Sorry, no devices found to which we can send an OMEMO encrypted message.'); + let devices; + if (chatbox instanceof _converse_headless__WEBPACK_IMPORTED_MODULE_3__.MUC) { + const collections = await Promise.all(chatbox.occupants.map(o => getDevicesForContact(o.get('jid')))); + devices = collections.reduce((a, b) => a.concat(b.models), []); + } else if (chatbox.get('type') === PRIVATE_CHAT_TYPE) { + const their_devices = await getDevicesForContact(chatbox.get('jid')); + if (their_devices.length === 0) { + throw new shared_errors_js__WEBPACK_IMPORTED_MODULE_10__.UserFacingError(no_devices_err); + } + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.session.get('bare_jid'); + const own_list = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.omemo.devicelists.get(bare_jid); + const own_devices = own_list.devices; + devices = [...own_devices.models, ...their_devices.models]; + } + // Filter out our own device + const id = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.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) { + throw new shared_errors_js__WEBPACK_IMPORTED_MODULE_10__.UserFacingError(no_devices_err); + } + } + return devices; +} +function encryptKey(key_and_tag, device) { + return getSessionCipher(device.get('jid'), device.get('id')).encrypt(key_and_tag).then(payload => ({ + 'payload': payload, + 'device': device + })); +} +async function createOMEMOMessageStanza(chat, data) { + let { + stanza + } = data; + const { + message + } = data; + if (!message.get('is_encrypted')) { + return data; + } + if (!message.get('body')) { + throw new Error('No message body to encrypt!'); + } + const devices = await getBundlesAndBuildSessions(chat); + + // 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': Strophe.NS.OMEMO + }).c('header', { + 'sid': _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.state.omemo_store.get('device_id') + }); + const { + key_and_tag, + iv, + payload + } = await omemo.encryptMessage(message.get('plaintext')); + + // 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 dicts = await Promise.all(devices.filter(device => device.get('trusted') != _consts_js__WEBPACK_IMPORTED_MODULE_8__.UNTRUSTED && device.get('active')).map(device => encryptKey(key_and_tag, device))); + stanza = await addKeysToMessageStanza(stanza, dicts, iv); + stanza.c('payload').t(payload).up().up(); + stanza.c('store', { + 'xmlns': Strophe.NS.HINTS + }).up(); + stanza.c('encryption', { + 'xmlns': Strophe.NS.EME, + namespace: Strophe.NS.OMEMO + }); + return { + message, + stanza + }; +} +const omemo = { + decryptMessage, + encryptMessage, + formatFingerprint +}; + +/***/ }), + +/***/ "./src/plugins/profile/index.js": +/*!**************************************!*\ + !*** ./src/plugins/profile/index.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _modal_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modal/index.js */ "./src/plugins/modal/index.js"); +/* harmony import */ var _modals_chat_status_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modals/chat-status.js */ "./src/plugins/profile/modals/chat-status.js"); +/* harmony import */ var _modals_profile_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modals/profile.js */ "./src/plugins/profile/modals/profile.js"); +/* harmony import */ var _modals_user_settings_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modals/user-settings.js */ "./src/plugins/profile/modals/user-settings.js"); +/* harmony import */ var _statusview_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./statusview.js */ "./src/plugins/profile/statusview.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/** + * @copyright The Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + + + + +_converse_headless__WEBPACK_IMPORTED_MODULE_5__.converse.plugins.add('converse-profile', { + dependencies: ['converse-status', 'converse-modal', 'converse-vcard', 'converse-chatboxviews', 'converse-adhoc-views'], + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_5__.api.settings.extend({ + 'show_client_info': true + }); + } +}); + +/***/ }), + +/***/ "./src/plugins/profile/modals/chat-status.js": +/*!***************************************************!*\ + !*** ./src/plugins/profile/modals/chat-status.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ChatStatusModal) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _templates_chat_status_modal_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../templates/chat-status-modal.js */ "./src/plugins/profile/templates/chat-status-modal.js"); +/* harmony import */ var _styles_chat_status_modal_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/chat-status-modal.scss */ "./src/plugins/profile/modals/styles/chat-status-modal.scss"); + + + + + +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env.utils; +class ChatStatusModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + initialize() { + super.initialize(); + this.render(); + this.addEventListener('shown.bs.modal', () => { + /** @type {HTMLInputElement} */this.querySelector('input[name="status_message"]').focus(); + }, false); + } + renderModal() { + return (0,_templates_chat_status_modal_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this); + } + getModalTitle() { + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Change chat status'); + } + clearStatusMessage(ev) { + if (ev && ev.preventDefault) { + ev.preventDefault(); + u.hideElement(this.querySelector('.clear-input')); + } + const roster_filter = /** @type {HTMLInputElement} */this.querySelector('input[name="status_message"]'); + roster_filter.value = ''; + } + onFormSubmitted(ev) { + ev.preventDefault(); + const data = new FormData(ev.target); + this.model.save({ + status_message: data.get('status_message'), + status: data.get('chat_status') + }); + this.close(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-chat-status-modal', ChatStatusModal); + +/***/ }), + +/***/ "./src/plugins/profile/modals/profile.js": +/*!***********************************************!*\ + !*** ./src/plugins/profile/modals/profile.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ProfileModal) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_profile_modal_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../templates/profile_modal.js */ "./src/plugins/profile/templates/profile_modal.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _password_reset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../password-reset.js */ "./src/plugins/profile/password-reset.js"); +/* harmony import */ var utils_file_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utils/file.js */ "./src/utils/file.js"); +/* harmony import */ var _styles_profile_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./styles/profile.scss */ "./src/plugins/profile/modals/styles/profile.scss"); +/** + * @typedef {import('@converse/headless/types/plugins/vcard/api').VCardData} VCardData + * @typedef {import("@converse/headless").XMPPStatus} XMPPStatus + */ + + + + + + + +class ProfileModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(options) { + super(options); + this.tab = 'profile'; + } + initialize() { + super.initialize(); + this.listenTo(this.model, 'change', this.render); + /** + * Triggered when the _converse.ProfileModal has been created and initialized. + * @event _converse#profileModalInitialized + * @type {XMPPStatus} + * @example _converse.api.listen.on('profileModalInitialized', status => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger('profileModalInitialized', this.model); + } + renderModal() { + return (0,_templates_profile_modal_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + getModalTitle() { + // eslint-disable-line class-methods-use-this + return (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Your Profile'); + } + + /** + * @param {VCardData} data + */ + async setVCard(data) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + try { + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.vcard.set(bare_jid, data); + } catch (err) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.fatal(err); + this.alert([(0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)("Sorry, an error happened while trying to save your profile data."), (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)("You can check your browser's developer console for any error output.")].join(" ")); + return; + } + } + + /** + * @param {SubmitEvent} ev + */ + async onFormSubmitted(ev) { + ev.preventDefault(); + const form_data = new FormData( /** @type {HTMLFormElement} */ev.target); + const image_file = /** @type {File} */form_data.get('avatar_image'); + const data = /** @type {VCardData} */{ + fn: form_data.get('fn'), + nickname: form_data.get('nickname'), + role: form_data.get('role'), + email: form_data.get('email'), + url: form_data.get('url') + }; + if (image_file?.size) { + const image_data = utils_file_js__WEBPACK_IMPORTED_MODULE_5__.isImageWithAlphaChannel ? image_file : await (0,utils_file_js__WEBPACK_IMPORTED_MODULE_5__.compressImage)(image_file); + const reader = new FileReader(); + reader.onloadend = async () => { + Object.assign(data, { + image: btoa( /** @type {string} */reader.result), + image_type: image_file.type + }); + await this.setVCard(data); + this.modal.hide(); + }; + reader.readAsBinaryString(image_data); + } else { + Object.assign(data, { + image: this.model.vcard.get('image'), + image_type: this.model.vcard.get('image_type') + }); + await this.setVCard(data); + this.modal.hide(); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-profile-modal', ProfileModal); + +/***/ }), + +/***/ "./src/plugins/profile/modals/templates/user-settings.js": +/*!***************************************************************!*\ + !*** ./src/plugins/profile/modals/templates/user-settings.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dompurify */ "./node_modules/dompurify/dist/purify.js"); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_unsafe_html_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/directives/unsafe-html.js */ "./node_modules/lit/directives/unsafe-html.js"); + + + + + +const tplNavigation = el => { + const i18n_about = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('About'); + const i18n_commands = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Commands'); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const first_subtitle = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s', '', '', ''); + const second_subtitle = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%1$s Translate %2$s it into your own language', '', ''); + const show_client_info = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_client_info'); + const allow_adhoc_commands = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('allow_adhoc_commands'); + const show_both_tabs = show_client_info && allow_adhoc_commands; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${show_both_tabs ? tplNavigation(el) : ''}
    ${show_client_info ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`

    Converse

    ${_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.VERSION_NAME}

    ${(0,lit_directives_unsafe_html_js__WEBPACK_IMPORTED_MODULE_4__.unsafeHTML)(dompurify__WEBPACK_IMPORTED_MODULE_0___default().sanitize(first_subtitle))}

    ${(0,lit_directives_unsafe_html_js__WEBPACK_IMPORTED_MODULE_4__.unsafeHTML)(dompurify__WEBPACK_IMPORTED_MODULE_0___default().sanitize(second_subtitle))}

    ` : ''} ${allow_adhoc_commands ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/profile/modals/user-settings.js": +/*!*****************************************************!*\ + !*** ./src/plugins/profile/modals/user-settings.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UserSettingsModal) +/* harmony export */ }); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_user_settings_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/user-settings.js */ "./src/plugins/profile/modals/templates/user-settings.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + +class UserSettingsModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + constructor(options) { + super(options); + const show_client_info = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('show_client_info'); + const allow_adhoc_commands = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('allow_adhoc_commands'); + const show_both_tabs = show_client_info && allow_adhoc_commands; + if (show_both_tabs || show_client_info) { + this.tab = 'about'; + } else if (allow_adhoc_commands) { + this.tab = 'commands'; + } + } + renderModal() { + return (0,_templates_user_settings_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this); + } + getModalTitle() { + // eslint-disable-line class-methods-use-this + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Settings'); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-user-settings-modal', UserSettingsModal); + +/***/ }), + +/***/ "./src/plugins/profile/password-reset.js": +/*!***********************************************!*\ + !*** ./src/plugins/profile/password-reset.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _templates_password_reset_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/password-reset.js */ "./src/plugins/profile/templates/password-reset.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + +const { + Strophe, + $iq, + sizzle, + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; +class PasswordReset extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + passwords_mismatched: { + type: Boolean + }, + alert_message: { + type: String + } + }; + } + initialize() { + this.passwords_mismatched = false; + this.alert_message = ''; + } + render() { + return (0,_templates_password_reset_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this); + } + checkPasswordsMatch(ev) { + const form_data = new FormData(ev.target.form ?? ev.target); + const password = form_data.get('password'); + const password_check = form_data.get('password_check'); + this.passwords_mismatched = password && password !== password_check; + return this.passwords_mismatched; + } + async onSubmit(ev) { + ev.preventDefault(); + if (this.checkPasswordsMatch(ev)) return; + const domain = _converse_headless__WEBPACK_IMPORTED_MODULE_3__._converse.session.get('domain'); + const iq = $iq({ + 'type': 'get', + 'to': domain + }).c('query', { + 'xmlns': Strophe.NS.REGISTER + }); + const iq_response = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.sendIQ(iq); + if (iq_response === null) { + this.alert_message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Timeout error'); + return; + } else if (sizzle(`error service-unavailable[xmlns="${Strophe.NS.STANZAS}"]`, iq_response).length) { + this.alert_message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Your server does not support password reset'); + return; + } else if (u.isErrorStanza(iq_response)) { + this.alert_message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Your server responded with an unknown error, check the console for details'); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error("Could not set password"); + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.error(iq_response); + return; + } + const username = iq_response.querySelector('username').textContent; + const data = new FormData(ev.target); + const password = data.get('password'); + const reset_iq = $iq({ + 'type': 'set', + 'to': domain + }).c('query', { + 'xmlns': Strophe.NS.REGISTER + }).c('username', {}, username).c('password', {}, password); + const iq_result = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.sendIQ(reset_iq); + if (iq_result === null) { + this.alert_message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Timeout error while trying to set your password'); + } else if (sizzle(`error not-allowed[xmlns="${Strophe.NS.STANZAS}"]`, iq_result).length) { + this.alert_message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Your server does not allow password reset'); + } else if (sizzle(`error forbidden[xmlns="${Strophe.NS.STANZAS}"]`, iq_result).length) { + this.alert_message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('You are not allowed to change your password'); + } else if (u.isErrorStanza(iq_result)) { + this.alert_message = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('You are not allowed to change your password'); + } else { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.alert('info', (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Success'), [(0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Your new password has been set')]); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-change-password-form', PasswordReset); + +/***/ }), + +/***/ "./src/plugins/profile/statusview.js": +/*!*******************************************!*\ + !*** ./src/plugins/profile/statusview.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_profile_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/profile.js */ "./src/plugins/profile/templates/profile.js"); +/* harmony import */ var _styles_profile_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/profile.scss */ "./src/plugins/profile/styles/profile.scss"); + + + + +class Profile extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + initialize() { + this.model = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.xmppstatus; + this.listenTo(this.model, "change", () => this.requestUpdate()); + this.listenTo(this.model, "vcard:add", () => this.requestUpdate()); + this.listenTo(this.model, "vcard:change", () => this.requestUpdate()); + } + render() { + return (0,_templates_profile_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + } + + /** + * @param {MouseEvent} ev + */ + showProfileModal(ev) { + ev?.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.modal.show('converse-profile-modal', { + model: this.model + }, ev); + } + + /** + * @param {MouseEvent} ev + */ + showStatusChangeModal(ev) { + ev?.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.modal.show('converse-chat-status-modal', { + model: this.model + }, ev); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-user-profile', Profile); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Profile); + +/***/ }), + +/***/ "./src/plugins/profile/templates/chat-status-modal.js": +/*!************************************************************!*\ + !*** ./src/plugins/profile/templates/chat-status-modal.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const label_away = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Away'); + const label_busy = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Busy'); + const label_online = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Online'); + const label_save = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Save'); + const label_xa = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Away for long'); + const placeholder_status_message = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Personal status message'); + const status = el.model.get('status'); + const status_message = el.model.get('status_message'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    `; +}); + +/***/ }), + +/***/ "./src/plugins/profile/templates/password-reset.js": +/*!*********************************************************!*\ + !*** ./src/plugins/profile/templates/password-reset.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_submit = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Submit'); + const i18n_passwords_must_match = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('The new passwords must match'); + const i18n_new_password = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('New password'); + const i18n_confirm_password = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Confirm new password'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`
    ${el.alert_message ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`` : ''}
    ${el.passwords_mismatched ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${i18n_passwords_must_match}` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/profile/templates/profile.js": +/*!**************************************************!*\ + !*** ./src/plugins/profile/templates/profile.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var shared_avatar_avatar_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/avatar/avatar.js */ "./src/shared/avatar/avatar.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/profile/utils.js"); + + + + + +/** + * @param {import('../statusview').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const chat_status = el.model.get('status') || 'offline'; + const status_message = el.model.get('status_message') || (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("I am %1$s", (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.getPrettyStatus)(chat_status)); + const i18n_change_status = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Click to change your chat status'); + let classes, color; + if (chat_status === 'online') { + [classes, color] = ['fa fa-circle chat-status', 'chat-status-online']; + } else if (chat_status === 'dnd') { + [classes, color] = ['fa fa-minus-circle chat-status', 'chat-status-busy']; + } else if (chat_status === 'away') { + [classes, color] = ['fa fa-circle chat-status', 'chat-status-away']; + } else { + [classes, color] = ['fa fa-circle chat-status', 'comment']; + } + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${el.model.getDisplayName()}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/profile/templates/profile_modal.js": +/*!********************************************************!*\ + !*** ./src/plugins/profile/templates/profile_modal.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_components_image_picker_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/image-picker.js */ "./src/shared/components/image-picker.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + +const tplOmemoPage = el => (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ${el.tab === 'omemo' ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`` : ''}
    `; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const o = { + ...el.model.toJSON(), + ...el.model.vcard.toJSON() + }; + const i18n_email = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Email'); + const i18n_fullname = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Full Name'); + const i18n_jid = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('XMPP Address'); + const i18n_nickname = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Nickname'); + const i18n_role = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Role'); + const i18n_save = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Save and close'); + const i18n_role_help = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.'); + const i18n_url = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('URL'); + const i18n_omemo = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('OMEMO'); + const i18n_profile = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Profile'); + const ii18n_reset_password = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Reset Password'); + const navigation_tabs = [(0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``]; + navigation_tabs.push((0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.pluggable.plugins['converse-omemo']?.enabled(_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse)) { + navigation_tabs.push((0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``); + } + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ${o.jid}
    ${i18n_role_help}

    ${el.tab === 'passwordreset' ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`` : ''}
    ${_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.pluggable.plugins['converse-omemo']?.enabled(_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse) ? tplOmemoPage(el) : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/profile/utils.js": +/*!**************************************!*\ + !*** ./src/plugins/profile/utils.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ getPrettyStatus: () => (/* binding */ getPrettyStatus) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +/** + * @param {string} stat + */ +function getPrettyStatus(stat) { + if (stat === 'chat') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('online'); + } else if (stat === 'dnd') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('busy'); + } else if (stat === 'xa') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('away for long'); + } else if (stat === 'away') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('away'); + } else if (stat === 'offline') { + return (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('offline'); + } else { + return (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)(stat) || (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('online'); + } +} + +/***/ }), + +/***/ "./src/plugins/push/index.js": +/*!***********************************!*\ + !*** ./src/plugins/push/index.js ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/push/utils.js"); +/** + * @description + * Converse.js plugin which add support for registering + * an "App Server" as defined in XEP-0357 + * @copyright 2021, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +Strophe.addNamespace('PUSH', 'urn:xmpp:push:0'); +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-push', { + initialize() { + /* The initialize function gets called as soon as the plugin is + * loaded by converse.js's plugin machinery. + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'push_app_servers': [], + 'enable_muc_push': false + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('statusInitialized', () => (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.enablePush)()); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('enable_muc_push')) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatBoxesInitialized', () => _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.on('add', _utils_js__WEBPACK_IMPORTED_MODULE_1__.onChatBoxAdded)); + } + } +}); + +/***/ }), + +/***/ "./src/plugins/push/utils.js": +/*!***********************************!*\ + !*** ./src/plugins/push/utils.js ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ enablePush: () => (/* binding */ enablePush), +/* harmony export */ onChatBoxAdded: () => (/* binding */ onChatBoxAdded) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + +const { + Strophe, + $iq +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; +async function disablePushAppServer(domain, push_app_server) { + if (!push_app_server.jid) { + return; + } + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + if (!(await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.disco.supports(Strophe.NS.PUSH, domain || bare_jid))) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.warn(`Not disabling push app server "${push_app_server.jid}", no disco support from your server.`); + return; + } + const stanza = $iq({ + 'type': 'set' + }); + if (domain !== bare_jid) { + stanza.attrs({ + 'to': domain + }); + } + stanza.c('disable', { + 'xmlns': Strophe.NS.PUSH, + 'jid': push_app_server.jid + }); + if (push_app_server.node) { + stanza.attrs({ + 'node': push_app_server.node + }); + } + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.sendIQ(stanza).catch(e => { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(`Could not disable push app server for ${push_app_server.jid}`); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(e); + }); +} +async function enablePushAppServer(domain, push_app_server) { + if (!push_app_server.jid || !push_app_server.node) { + return; + } + const identity = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.disco.getIdentity('pubsub', 'push', push_app_server.jid); + if (!identity) { + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.warn(`Not enabling push the service "${push_app_server.jid}", it doesn't have the right disco identtiy.`); + } + const result = await Promise.all([_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.disco.supports(Strophe.NS.PUSH, push_app_server.jid), _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.disco.supports(Strophe.NS.PUSH, domain)]); + if (!result[0] && !result[1]) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.warn(`Not enabling push app server "${push_app_server.jid}", no disco support from your server.`); + return; + } + const stanza = $iq({ + 'type': 'set' + }); + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + if (domain !== bare_jid) { + stanza.attrs({ + 'to': domain + }); + } + stanza.c('enable', { + 'xmlns': Strophe.NS.PUSH, + 'jid': push_app_server.jid, + 'node': push_app_server.node + }); + if (push_app_server.secret) { + stanza.c('x', { + 'xmlns': Strophe.NS.XFORM, + 'type': 'submit' + }).c('field', { + 'var': 'FORM_TYPE' + }).c('value').t(`${Strophe.NS.PUBSUB}#publish-options`).up().up().c('field', { + 'var': 'secret' + }).c('value').t(push_app_server.secret); + } + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.sendIQ(stanza); +} + +/** + * @param {string} [domain] + */ +async function enablePush(domain) { + if (!domain) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + domain = bare_jid; + } + const push_enabled = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('push_enabled') || []; + if (push_enabled.includes(domain)) { + return; + } + const enabled_services = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('push_app_servers').filter(s => !s.disable); + const disabled_services = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.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) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error('Could not enable or disable push App Server'); + if (e) _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(e); + } finally { + push_enabled.push(domain); + } + _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.save('push_enabled', push_enabled); +} +function onChatBoxAdded(model) { + if (model.get('type') == CHATROOMS_TYPE) { + enablePush(Strophe.getDomainFromJid(model.get('jid'))); + } +} + +/***/ }), + +/***/ "./src/plugins/register/index.js": +/*!***************************************!*\ + !*** ./src/plugins/register/index.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _panel_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel.js */ "./src/plugins/register/panel.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/register/utils.js"); +/** + * @description + * This is a Converse.js plugin which add support for in-band registration + * as specified in XEP-0077. + * @copyright 2022, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + + + +// Strophe methods for building stanzas +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + CONNECTION_STATUS +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; + +// Add Strophe Namespaces +Strophe.addNamespace('REGISTER', 'jabber:iq:register'); + +// Add Strophe Statuses +const i = Object.keys(Strophe.Status).reduce((max, k) => Math.max(max, Strophe.Status[k]), 0); +Strophe.Status.REGIFAIL = i + 1; +Strophe.Status.REGISTERED = i + 2; +Strophe.Status.CONFLICT = i + 3; +Strophe.Status.NOTACCEPTABLE = i + 5; +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-register', { + dependencies: ['converse-controlbox'], + enabled() { + return true; + }, + initialize() { + CONNECTION_STATUS[Strophe.Status.REGIFAIL] = 'REGIFAIL'; + CONNECTION_STATUS[Strophe.Status.REGISTERED] = 'REGISTERED'; + CONNECTION_STATUS[Strophe.Status.CONFLICT] = 'CONFLICT'; + CONNECTION_STATUS[Strophe.Status.NOTACCEPTABLE] = 'NOTACCEPTABLE'; + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'allow_registration': true, + 'domain_placeholder': (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)(' e.g. conversejs.org'), + // Placeholder text shown in the domain input on the registration form + 'providers_link': 'https://compliance.conversations.im/', + // Link to XMPP providers shown on registration page + 'registration_domain': '' + }); + (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.routeToForm)(); + addEventListener('hashchange', _utils_js__WEBPACK_IMPORTED_MODULE_3__.routeToForm); + } +}); + +/***/ }), + +/***/ "./src/plugins/register/panel.js": +/*!***************************************!*\ + !*** ./src/plugins/register/panel.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var templates_form_input_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! templates/form_input.js */ "./src/templates/form_input.js"); +/* harmony import */ var templates_form_url_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! templates/form_url.js */ "./src/templates/form_url.js"); +/* harmony import */ var templates_form_username_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! templates/form_username.js */ "./src/templates/form_username.js"); +/* harmony import */ var _templates_register_panel_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/register_panel.js */ "./src/plugins/register/templates/register_panel.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/register/utils.js"); +/* harmony import */ var _styles_register_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styles/register.scss */ "./src/plugins/register/styles/register.scss"); +/** + * @typedef {import('strophe.js').Request} Request + */ + + + + + + + + + + +// Strophe methods for building stanzas +const { + Strophe, + sizzle, + $iq +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + CONNECTION_STATUS +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; +const CHOOSE_PROVIDER = 0; +const FETCHING_FORM = 1; +const REGISTRATION_FORM = 2; +const REGISTRATION_FORM_ERROR = 3; + +/** + * @class + * @namespace _converse.RegisterPanel + * @memberOf _converse + */ +class RegisterPanel extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_5__.CustomElement { + static get properties() { + return { + status: { + type: String + }, + alert_message: { + type: String + }, + alert_type: { + type: String + } + }; + } + constructor() { + super(); + this.urls = []; + this.fields = {}; + this.domain = null; + this.alert_type = 'info'; + this.setErrorMessage = m => this.setMessage(m, 'danger'); + this.setFeedbackMessage = m => this.setMessage(m, 'info'); + } + initialize() { + this.reset(); + this.listenTo(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, 'connectionInitialized', () => this.registerHooks()); + const domain = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('registration_domain'); + if (domain) { + this.fetchRegistrationForm(domain); + } else { + this.status = CHOOSE_PROVIDER; + } + } + render() { + return (0,_templates_register_panel_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this); + } + setMessage(message, type) { + this.alert_type = type; + this.alert_message = message; + } + + /** + * Hook into Strophe's _connect_cb, so that we can send an IQ + * requesting the registration fields. + */ + registerHooks() { + const conn = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get(); + const connect_cb = conn._connect_cb.bind(conn); + conn._connect_cb = (req, callback, raw) => { + if (!this._registering) { + connect_cb(req, callback, raw); + } else if (this.getRegistrationFields(req, callback)) { + this._registering = false; + } + }; + } + + /** + * Send an IQ stanza to the XMPP server asking for the registration fields. + * @method _converse.RegisterPanel#getRegistrationFields + * @param {Request} req - The current request + * @param {Function} callback - The callback function + */ + getRegistrationFields(req, callback) { + const conn = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get(); + conn.connected = true; + const body = conn._proto._reqToData(req); + if (!body) { + return; + } + if (conn._proto._connect_cb(body) === Strophe.Status.CONNFAIL) { + this.status = CHOOSE_PROVIDER; + this.setErrorMessage((0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)("Sorry, we're unable to connect to your chosen provider.")); + return false; + } + const register = body.getElementsByTagName("register"); + const mechanisms = body.getElementsByTagName("mechanism"); + if (register.length === 0 && mechanisms.length === 0) { + conn._proto._no_auth_received(callback); + return false; + } + if (register.length === 0) { + conn._changeConnectStatus(Strophe.Status.REGIFAIL); + this.alert_type = 'danger'; + this.setErrorMessage((0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)("Sorry, the given provider does not support in " + "band account registration. Please try with a " + "different provider.")); + return true; + } + // Send an IQ stanza to get all required data fields + conn._addSysHandler(s => this.onRegistrationFields(s), null, "iq", null, null); + const stanza = $iq({ + type: "get" + }).c("query", { + xmlns: Strophe.NS.REGISTER + }).tree(); + stanza.setAttribute("id", conn.getUniqueId("sendIQ")); + conn.send(stanza); + conn.connected = false; + return true; + } + + /** + * Handler for {@link _converse.RegisterPanel#getRegistrationFields} + * @method _converse.RegisterPanel#onRegistrationFields + * @param {Element} stanza - The query stanza. + */ + onRegistrationFields(stanza) { + if (stanza.getAttribute("type") === "error") { + this.reportErrors(stanza); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('registration_domain')) { + this.status = REGISTRATION_FORM_ERROR; + } else { + this.status = CHOOSE_PROVIDER; + } + return false; + } + this.setFields(stanza); + if (this.status === FETCHING_FORM) { + this.renderRegistrationForm(stanza); + } + return false; + } + reset(settings) { + const defaults = { + fields: {}, + urls: [], + title: "", + instructions: "", + registered: false, + _registering: false, + domain: null, + form_type: null + }; + Object.assign(this, defaults); + if (settings) Object.assign(this, settings); + } + + /** + * Event handler when the #converse-register form is submitted. + * Depending on the available input fields, we delegate to other methods. + * @param {Event} ev + */ + onFormSubmission(ev) { + ev?.preventDefault?.(); + const form = /** @type {HTMLFormElement} */ev.target; + if (form.querySelector('input[name=domain]') === null) { + this.submitRegistrationForm(form); + } else { + this.onProviderChosen(form); + } + } + + /** + * Callback method that gets called when the user has chosen an XMPP provider + * @method _converse.RegisterPanel#onProviderChosen + * @param {HTMLElement} form - The form that was submitted + */ + onProviderChosen(form) { + const domain = /** @type {HTMLInputElement} */form.querySelector('input[name=domain]')?.value; + if (domain) this.fetchRegistrationForm(domain.trim()); + } + + /** + * Fetch a registration form from the requested domain + * @method _converse.RegisterPanel#fetchRegistrationForm + * @param {string} domain_name - XMPP server domain + */ + fetchRegistrationForm(domain_name) { + this.status = FETCHING_FORM; + this.reset({ + 'domain': Strophe.getDomainFromJid(domain_name), + '_registering': true + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.init(); + // When testing, the test tears down before the async function + // above finishes. So we use optional chaining here + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get()?.connect(this.domain, "", s => this.onConnectStatusChanged(s)); + return false; + } + + /** + * Callback function called by Strophe whenever the connection status changes. + * Passed to Strophe specifically during a registration attempt. + * @method _converse.RegisterPanel#onConnectStatusChanged + * @param {number} status_code - The Strophe.Status status code + */ + onConnectStatusChanged(status_code) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.debug('converse-register: onConnectStatusChanged'); + if ([Strophe.Status.DISCONNECTED, Strophe.Status.CONNFAIL, Strophe.Status.REGIFAIL, Strophe.Status.NOTACCEPTABLE, Strophe.Status.CONFLICT].includes(status_code)) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(`Problem during registration: Strophe.Status is ${CONNECTION_STATUS[status_code]}`); + this.abortRegistration(); + } else if (status_code === Strophe.Status.REGISTERED) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.debug("Registered successfully."); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get().reset(); + if (["converse/login", "converse/register"].includes(window.location.hash)) { + history.pushState(null, '', window.location.pathname); + } + (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.setActiveForm)('login'); + if (this.fields.password && this.fields.username) { + const connection = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get(); + // automatically log the user in + connection.connect(this.fields.username.toLowerCase() + '@' + this.domain.toLowerCase(), this.fields.password, connection.onConnectStatusChanged); + this.setFeedbackMessage((0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Now logging you in')); + } else { + this.setFeedbackMessage((0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Registered successfully')); + } + this.reset(); + } + } + getLegacyFormFields() { + const input_fields = Object.keys(this.fields).map(key => { + if (key === "username") { + return (0,templates_form_username_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ + 'domain': ` @${this.domain}`, + 'name': key, + 'type': "text", + 'label': key, + 'value': '', + 'required': true + }); + } else { + return (0,templates_form_input_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ + 'label': key, + 'name': key, + 'placeholder': key, + 'required': true, + 'type': key === 'password' || key === 'email' ? key : "text", + 'value': '' + }); + } + }); + const urls = this.urls.map(u => (0,templates_form_url_js__WEBPACK_IMPORTED_MODULE_2__["default"])({ + 'label': '', + 'value': u + })); + return [...input_fields, ...urls]; + } + + /** + * @param {Element} stanza + */ + getFormFields(stanza) { + if (this.form_type === 'xform') { + const { + fields + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.parsers.parseXForm(stanza); + return fields?.map(f => _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.xFormField2TemplateResult(f, { + 'domain': this.domain + })) ?? []; + } else { + return this.getLegacyFormFields(); + } + } + + /** + * Renders the registration form based on the XForm fields + * received from the XMPP server. + * @method _converse.RegisterPanel#renderRegistrationForm + * @param {Element} stanza - The IQ stanza received from the XMPP server. + */ + renderRegistrationForm(stanza) { + this.form_fields = this.getFormFields(stanza); + this.status = REGISTRATION_FORM; + } + + /** + * Report back to the user any error messages received from the + * XMPP server after attempted registration. + * @method _converse.RegisterPanel#reportErrors + * @param {Element} stanza - The IQ stanza received from the XMPP server + */ + reportErrors(stanza) { + const errors = Array.from(stanza.querySelectorAll('error')); + if (errors.length) { + this.setErrorMessage(errors.reduce((result, e) => `${result}\n${e.textContent}`, '')); + } else { + this.setErrorMessage((0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)('The provider rejected your registration attempt. ' + 'Please check the values you entered for correctness.')); + } + } + renderProviderChoiceForm(ev) { + ev?.preventDefault?.(); + const connection = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get(); + connection._proto._abortAllRequests(); + connection.reset(); + this.status = CHOOSE_PROVIDER; + } + abortRegistration() { + const connection = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get(); + connection._proto._abortAllRequests(); + connection.reset(); + if ([FETCHING_FORM, REGISTRATION_FORM].includes(this.status)) { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('registration_domain')) { + this.fetchRegistrationForm(_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('registration_domain')); + } + } else { + this.requestUpdate(); + } + } + + /** + * Handler, when the user submits the registration form. + * Provides form error feedback or starts the registration process. + * @method _converse.RegisterPanel#submitRegistrationForm + * @param {HTMLElement} form - The HTML form that was submitted + */ + submitRegistrationForm(form) { + const /** @type {HTMLInputElement[]} */inputs = sizzle(':input:not([type=button]):not([type=submit])', form); + const iq = $iq({ + 'type': 'set', + 'id': _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.getUniqueId() + }).c("query", { + xmlns: Strophe.NS.REGISTER + }); + if (this.form_type === 'xform') { + iq.c("x", { + xmlns: Strophe.NS.XFORM, + type: 'submit' + }); + const xml_nodes = inputs.map(i => _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.webForm2xForm(i)).filter(n => n); + xml_nodes.forEach(n => iq.cnode(n).up()); + } else { + inputs.forEach(input => iq.c(input.getAttribute('name'), {}, input.value)); + } + const connection = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get(); + connection._addSysHandler( /** @param {Element} iq */iq => this._onRegisterIQ(iq), null, "iq", null, null); + connection.send(iq); + this.setFields(iq.tree()); + } + + /** + * Stores the values that will be sent to the XMPP server during attempted registration. + * @method _converse.RegisterPanel#setFields + * @param {Element} stanza - the IQ stanza that will be sent to the XMPP server. + */ + setFields(stanza) { + const query = stanza.querySelector('query'); + const xform = sizzle(`x[xmlns="${Strophe.NS.XFORM}"]`, query); + if (xform.length > 0) { + this.setFieldsFromXForm(xform.pop()); + } else { + this.setFieldsFromLegacy(query); + } + } + + /** + * @param {Element} query + */ + setFieldsFromLegacy(query) { + [].forEach.call(query.children, /** @param {Element} field */field => { + if (field.tagName.toLowerCase() === 'instructions') { + this.instructions = Strophe.getText(field); + return; + } else if (field.tagName.toLowerCase() === 'x') { + if (field.getAttribute('xmlns') === 'jabber:x:oob') { + this.urls.concat(sizzle('url', field).map(u => u.textContent)); + } + return; + } + this.fields[field.tagName.toLowerCase()] = Strophe.getText(field); + }); + this.form_type = 'legacy'; + } + + /** + * @param {Element} xform + */ + setFieldsFromXForm(xform) { + this.title = xform.querySelector('title')?.textContent ?? ''; + this.instructions = xform.querySelector('instructions')?.textContent ?? ''; + xform.querySelectorAll('field').forEach(field => { + const _var = field.getAttribute('var'); + if (_var) { + this.fields[_var.toLowerCase()] = field.querySelector('value')?.textContent ?? ''; + } else { + // TODO: other option seems to be type="fixed" + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.warn("Found field we couldn't parse"); + } + }); + this.form_type = 'xform'; + } + + /** + * Callback method that gets called when a return IQ stanza + * is received from the XMPP server, after attempting to + * register a new user. + * @method _converse.RegisterPanel#reportErrors + * @param {Element} stanza - The IQ stanza. + */ + _onRegisterIQ(stanza) { + const connection = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.connection.get(); + if (stanza.getAttribute("type") === "error") { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error("Registration failed."); + this.reportErrors(stanza); + const error_els = stanza.getElementsByTagName("error"); + if (error_els.length !== 1) { + connection._changeConnectStatus(Strophe.Status.REGIFAIL, "unknown"); + return false; + } + const error = error_els[0].firstElementChild.tagName.toLowerCase(); + if (error === 'conflict') { + connection._changeConnectStatus(Strophe.Status.CONFLICT, error); + } else if (error === 'not-acceptable') { + connection._changeConnectStatus(Strophe.Status.NOTACCEPTABLE, error); + } else { + connection._changeConnectStatus(Strophe.Status.REGIFAIL, error); + } + } else { + connection._changeConnectStatus(Strophe.Status.REGISTERED, null); + } + return false; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-register-panel', RegisterPanel); + +/***/ }), + +/***/ "./src/plugins/register/templates/register_panel.js": +/*!**********************************************************!*\ + !*** ./src/plugins/register/templates/register_panel.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _registration_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./registration_form.js */ "./src/plugins/register/templates/registration_form.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var _switch_form_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./switch_form.js */ "./src/plugins/register/templates/switch_form.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + + + +const tplFormRequest = el => { + const default_domain = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('registration_domain'); + const i18n_cancel = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Cancel'); + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`
    ${(0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ + 'classes': 'hor_centered' + })} ${default_domain ? '' : (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)``}
    `; +}; +const tplDomainInput = () => { + const domain_placeholder = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('domain_placeholder'); + const i18n_providers = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Tip: A list of public XMPP providers is available'); + const i18n_providers_link = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('here'); + const href_providers = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('providers_link'); + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`

    ${i18n_providers} ${i18n_providers_link}.

    `; +}; +const tplFetchFormButtons = () => { + const i18n_register = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Fetch registration form'); + const i18n_existing_account = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Already have a chat account?'); + const i18n_login = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Log in here'); + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`

    ${i18n_existing_account}

    `; +}; +const tplChooseProvider = el => { + const default_domain = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('registration_domain'); + const i18n_create_account = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Create your account'); + const i18n_choose_provider = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Please enter the XMPP provider to register with:'); + const show_form_buttons = !default_domain && el.status === CHOOSE_PROVIDER; + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`
    ${i18n_create_account}
    ${default_domain ? default_domain : tplDomainInput()}
    ${show_form_buttons ? tplFetchFormButtons() : ''}
    `; +}; +const CHOOSE_PROVIDER = 0; +const FETCHING_FORM = 1; +const REGISTRATION_FORM = 2; +const REGISTRATION_FORM_ERROR = 3; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`${el.alert_message ? (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`` : ''} ${el.status === CHOOSE_PROVIDER ? tplChooseProvider(el) : ''} ${el.status === FETCHING_FORM ? tplFormRequest(el) : ''} ${el.status === REGISTRATION_FORM ? (0,_registration_form_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el) : ''} ${el.status === REGISTRATION_FORM_ERROR ? (0,_switch_form_js__WEBPACK_IMPORTED_MODULE_2__["default"])() : ''}`; +}); + +/***/ }), + +/***/ "./src/plugins/register/templates/registration_form.js": +/*!*************************************************************!*\ + !*** ./src/plugins/register/templates/registration_form.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _switch_form_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./switch_form.js */ "./src/plugins/register/templates/switch_form.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_choose_provider = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Choose a different provider'); + const i18n_legend = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Account Registration:'); + const i18n_register = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Register'); + const registration_domain = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('registration_domain'); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ${i18n_legend} ${el.domain}

    ${el.title}

    ${el.instructions}

    ${el.form_fields}
    ${el.fields ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`` : ''} ${registration_domain ? '' : (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``} ${(0,_switch_form_js__WEBPACK_IMPORTED_MODULE_0__["default"])()}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/register/templates/switch_form.js": +/*!*******************************************************!*\ + !*** ./src/plugins/register/templates/switch_form.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (() => { + const i18n_has_account = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Already have a chat account?'); + const i18n_login = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Log in here'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`

    ${i18n_has_account}

    `; +}); + +/***/ }), + +/***/ "./src/plugins/register/utils.js": +/*!***************************************!*\ + !*** ./src/plugins/register/utils.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ routeToForm: () => (/* binding */ routeToForm), +/* harmony export */ setActiveForm: () => (/* binding */ setActiveForm) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + +async function setActiveForm(value) { + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.waitUntil('controlBoxInitialized'); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state; + const controlbox = chatboxes.get('controlbox'); + controlbox.set({ + 'active-form': value + }); +} +function routeToForm(event) { + if (location.hash === '#converse/login') { + event?.preventDefault(); + setActiveForm('login'); + } else if (location.hash === '#converse/register') { + event?.preventDefault(); + setActiveForm('register'); + } +} + +/***/ }), + +/***/ "./src/plugins/roomslist/index.js": +/*!****************************************!*\ + !*** ./src/plugins/roomslist/index.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view.js */ "./src/plugins/roomslist/view.js"); +/** + * @description + * Converse.js plugin which shows a list of currently open + * rooms in the "Rooms Panel" of the ControlBox. + * @copyright 2022, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-roomslist', { + dependencies: ["converse-singleton", "converse-controlbox", "converse-muc", "converse-bookmarks"], + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'muc_grouped_by_domain': false + }); + } +}); + +/***/ }), + +/***/ "./src/plugins/roomslist/model.js": +/*!****************************************!*\ + !*** ./src/plugins/roomslist/model.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +const { + OPENED +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +class RoomsListModel extends _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model { + defaults() { + return { + 'muc_domain': _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_domain'), + 'toggle_state': OPENED, + 'collapsed_domains': [] + }; + } + initialize() { + super.initialize(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.listen.on('change:muc_domain', /** @param {string} muc_domain */ + muc_domain => this.setDomain(muc_domain)); + } + + /** + * @param {string} jid + */ + setDomain(jid) { + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('locked_muc_domain')) { + this.save('muc_domain', Strophe.getDomainFromJid(jid)); + } + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RoomsListModel); + +/***/ }), + +/***/ "./src/plugins/roomslist/templates/roomslist.js": +/*!******************************************************!*\ + !*** ./src/plugins/roomslist/templates/roomslist.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var plugins_muc_views_modals_add_muc_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! plugins/muc-views/modals/add-muc.js */ "./src/plugins/muc-views/modals/add-muc.js"); +/* harmony import */ var plugins_muc_views_modals_muc_list_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! plugins/muc-views/modals/muc-list.js */ "./src/plugins/muc-views/modals/muc-list.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var plugins_bookmark_views_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! plugins/bookmark-views/utils.js */ "./src/plugins/bookmark-views/utils.js"); +/* harmony import */ var shared_chat_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! shared/chat/utils */ "./src/shared/chat/utils.js"); +/* harmony import */ var _styles_roomsgroups_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/roomsgroups.scss */ "./src/plugins/roomslist/styles/roomsgroups.scss"); +/** + * @typedef {import('../view').RoomsList} RoomsList + * @typedef {import('@converse/headless').MUC} MUC + */ + + + + + + + + +const { + CHATROOMS_TYPE, + CLOSED +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +const { + isUniView +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u; + +/** @param {MUC} room */ +function isCurrentlyOpen(room) { + return isUniView() && !room.get('hidden'); +} + +/** @param {MUC} room */ +function tplBookmark(room) { + const bm = room.get('bookmarked') ?? false; + const i18n_bookmark = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Bookmark'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; +} + +/** @param {MUC} room */ +function tplUnreadIndicator(room) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${(0,shared_chat_utils__WEBPACK_IMPORTED_MODULE_6__.getUnreadMsgsDisplay)(room)}`; +} +function tplActivityIndicator() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; +} + +/** + * @param {RoomsList} el + * @param {MUC} room + */ +function tplRoomItem(el, room) { + const i18n_leave_room = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Leave this groupchat'); + const has_unread_msgs = room.get('num_unread_general') || room.get('has_activity'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
  • ${room.get('num_unread') ? tplUnreadIndicator(room) : room.get('has_activity') ? tplActivityIndicator() : ''} ${room.getDisplayName()} ${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('allow_bookmarks') ? tplBookmark(room) : ''}
  • `; +} + +/** + * @param {RoomsList} el + * @param {string} domain + * @param {MUC[]} rooms + */ +function tplRoomDomainGroup(el, domain, rooms) { + const i18n_title = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Click to hide these rooms'); + const collapsed = el.model.get('collapsed_domains'); + const is_collapsed = collapsed.includes(domain); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${domain}
      ${rooms.map(room => tplRoomItem(el, room))}
    `; +} + +/** + * @param {RoomsList} el + * @param {MUC[]} rooms + */ +function tplRoomDomainGroupList(el, rooms) { + // The rooms should stay sorted as they are iterated and added in order + const grouped_rooms = new Map(); + for (const room of rooms) { + const roomdomain = room.get('jid').split('@').at(-1).toLowerCase(); + if (grouped_rooms.has(roomdomain)) { + grouped_rooms.get(roomdomain).push(room); + } else { + grouped_rooms.set(roomdomain, [room]); + } + } + const sorted_domains = Array.from(grouped_rooms.keys()); + sorted_domains.sort(); + return sorted_domains.map(domain => tplRoomDomainGroup(el, domain, grouped_rooms.get(domain))); +} + +/** + * @param {RoomsList} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const group_by_domain = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('muc_grouped_by_domain'); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + const rooms = chatboxes.filter(m => m.get('type') === CHATROOMS_TYPE); + rooms.sort((a, b) => a.getDisplayName().toLowerCase() <= b.getDisplayName().toLowerCase() ? -1 : 1); + const i18n_desc_rooms = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Click to toggle the list of open groupchats'); + const i18n_heading_chatrooms = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Groupchats'); + const i18n_title_list_rooms = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Query server'); + const i18n_title_new_room = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Add groupchat'); + const i18n_show_bookmarks = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Bookmarks'); + const is_closed = el.model.get('toggle_state') === CLOSED; + const btns = [(0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${i18n_show_bookmarks}`, (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${i18n_title_list_rooms}`, (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${i18n_title_new_room}`]; + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
      ${group_by_domain ? tplRoomDomainGroupList(el, rooms) : rooms.map( /** @param {MUC} room */room => tplRoomItem(el, room))}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/roomslist/view.js": +/*!***************************************!*\ + !*** ./src/plugins/roomslist/view.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RoomsList: () => (/* binding */ RoomsList) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var plugins_muc_views_modals_muc_details_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! plugins/muc-views/modals/muc-details.js */ "./src/plugins/muc-views/modals/muc-details.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _model_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./model.js */ "./src/plugins/roomslist/model.js"); +/* harmony import */ var _templates_roomslist_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./templates/roomslist.js */ "./src/plugins/roomslist/templates/roomslist.js"); +/** + * @typedef {import('@converse/skeletor').Model} Model + */ + + + + + + +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + initStorage +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u; +const { + CLOSED, + OPENED +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; +class RoomsList extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__.CustomElement { + initialize() { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.session.get('bare_jid'); + const id = `converse.roomspanel${bare_jid}`; + this.model = new _model_js__WEBPACK_IMPORTED_MODULE_4__["default"]({ + id + }); + initStorage(this.model, id); + this.model.fetch(); + const { + chatboxes + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state; + this.listenTo(chatboxes, 'add', this.renderIfChatRoom); + this.listenTo(chatboxes, 'remove', this.renderIfChatRoom); + this.listenTo(chatboxes, 'destroy', this.renderIfChatRoom); + this.listenTo(chatboxes, 'change', this.renderIfRelevantChange); + this.listenTo(chatboxes, 'vcard:add', () => this.requestUpdate()); + this.listenTo(chatboxes, 'vcard:change', () => this.requestUpdate()); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + this.requestUpdate(); + } + render() { + return (0,_templates_roomslist_js__WEBPACK_IMPORTED_MODULE_5__["default"])(this); + } + + /** @param {Model} model */ + renderIfChatRoom(model) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.muc.isChatRoom(model) && this.requestUpdate(); + } + + /** @param {Model} model */ + renderIfRelevantChange(model) { + const attrs = ['bookmarked', 'hidden', 'name', 'num_unread', 'num_unread_general', 'has_activity']; + const changed = model.changed || {}; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.muc.isChatRoom(model) && Object.keys(changed).filter(m => attrs.includes(m)).length) { + this.requestUpdate(); + } + } + + /** @param {Event} ev */ + async openRoom(ev) { + ev.preventDefault(); + const target = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.ancestor( /** @type {HTMLElement} */ev.target, '.open-room'); + const name = target.getAttribute('data-room-name'); + const jid = target.getAttribute('data-room-jid'); + const data = { + 'name': name || Strophe.unescapeNode(Strophe.getNodeFromJid(jid)) || jid + }; + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.rooms.open(jid, data, true); + } + + /** @param {Event} ev */ + async closeRoom(ev) { + ev.preventDefault(); + const target = /** @type {HTMLElement} */ev.currentTarget; + const name = target.getAttribute('data-room-name'); + const jid = target.getAttribute('data-room-jid'); + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Are you sure you want to leave the groupchat %1$s?", name)); + if (result) { + const room = await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.rooms.get(jid); + room.close(); + } + } + + /** @param {Event} [ev] */ + toggleRoomsList(ev) { + ev?.preventDefault?.(); + const list_el = this.querySelector('.open-rooms-list'); + if (this.model.get('toggle_state') === CLOSED) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.slideOut(list_el).then(() => this.model.save({ + 'toggle_state': OPENED + })); + } else { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.slideIn(list_el).then(() => this.model.save({ + 'toggle_state': CLOSED + })); + } + } + + /** + * @param {Event} ev + * @param {string} domain + */ + toggleDomainList(ev, domain) { + ev?.preventDefault?.(); + const collapsed = this.model.get('collapsed_domains'); + if (collapsed.includes(domain)) { + this.model.save({ + 'collapsed_domains': collapsed.filter(d => d !== domain) + }); + } else { + this.model.save({ + 'collapsed_domains': [...collapsed, domain] + }); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-rooms-list', RoomsList); + +/***/ }), + +/***/ "./src/plugins/rootview/background.js": +/*!********************************************!*\ + !*** ./src/plugins/rootview/background.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_background_logo_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/background_logo.js */ "./src/plugins/rootview/templates/background_logo.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/rootview/utils.js"); +/* harmony import */ var _styles_background_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/background.scss */ "./src/plugins/rootview/styles/background.scss"); + + + + + +class ConverseBackground extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + initialize() { + this.setThemeAttributes(); + const settings = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get(); + this.listenTo(settings, 'change:view_mode', () => this.setThemeAttributes()); + this.listenTo(settings, 'change:singleton', () => this.setThemeAttributes()); + window.matchMedia('(prefers-color-scheme: dark)').addListener(() => this.setThemeAttributes()); + window.matchMedia('(prefers-color-scheme: light)').addListener(() => this.setThemeAttributes()); + } + render() { + return (0,_templates_background_logo_js__WEBPACK_IMPORTED_MODULE_2__["default"])(); + } + setThemeAttributes() { + const theme = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.getTheme)(); + this.classList.add(`theme-${theme}`); + this.setAttribute('data-converse-theme', theme); + this.setAttribute('data-bs-theme', theme); + this.requestUpdate(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-bg', ConverseBackground); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConverseBackground); + +/***/ }), + +/***/ "./src/plugins/rootview/index.js": +/*!***************************************!*\ + !*** ./src/plugins/rootview/index.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./root.js */ "./src/plugins/rootview/root.js"); +/* harmony import */ var _background_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./background.js */ "./src/plugins/rootview/background.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/rootview/utils.js"); + + + + +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.plugins.add('converse-rootview', { + initialize() { + // Configuration values for this plugin + // ==================================== + // Refer to docs/source/configuration.rst for explanations of these + // configuration settings. + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.extend({ + auto_insert: true, + dark_theme: 'dracula', + rtl_langs: ["ar", "fa", "he", "ur"], + show_background: false, + theme: 'classic' + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.listen.on('chatBoxesInitialized', _utils_js__WEBPACK_IMPORTED_MODULE_3__.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. + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-root', _root_js__WEBPACK_IMPORTED_MODULE_0__["default"]); + } +}); + +/***/ }), + +/***/ "./src/plugins/rootview/root.js": +/*!**************************************!*\ + !*** ./src/plugins/rootview/root.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ConverseRoot) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _templates_root_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./templates/root.js */ "./src/plugins/rootview/templates/root.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/rootview/utils.js"); +/* harmony import */ var _styles_root_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/root.scss */ "./src/plugins/rootview/styles/root.scss"); + + + + + + + +/** + * `converse-root` is an optional custom element which can be used to + * declaratively insert the Converse UI into the DOM. + * + * It can be inserted into the DOM before or after Converse has loaded or been + * initialized. + */ +class ConverseRoot extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__.CustomElement { + render() { + return (0,_templates_root_js__WEBPACK_IMPORTED_MODULE_2__["default"])(); + } + initialize() { + this.setAttribute('id', 'conversejs'); + this.setThemeAttributes(); + const settings = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get(); + this.listenTo(settings, 'change:view_mode', () => this.setThemeAttributes()); + this.listenTo(settings, 'change:singleton', () => this.setThemeAttributes()); + window.matchMedia('(prefers-color-scheme: dark)').addListener(() => this.setThemeAttributes()); + window.matchMedia('(prefers-color-scheme: light)').addListener(() => this.setThemeAttributes()); + } + setThemeAttributes() { + const theme = (0,_utils_js__WEBPACK_IMPORTED_MODULE_4__.getTheme)(); + this.className = ""; + this.classList.add('container-fluid'); + this.classList.add('g-0'); + this.classList.add('conversejs'); + this.classList.add(`converse-${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('view_mode')}`); + this.classList.add(`theme-${theme}`); + this.setAttribute('data-bs-theme', theme); + this.setAttribute('data-converse-theme', theme); + const lang = i18n__WEBPACK_IMPORTED_MODULE_0__.i18n.getLocale(); + this.setAttribute('lang', lang); + const rtl_langs = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('rtl_langs'); + if (rtl_langs.includes(lang)) { + this.setAttribute('dir', 'rtl'); + } else { + this.setAttribute('dir', 'ltr'); + } + this.requestUpdate(); + } +} + +/***/ }), + +/***/ "./src/plugins/rootview/templates/background_logo.js": +/*!***********************************************************!*\ + !*** ./src/plugins/rootview/templates/background_logo.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* eslint-disable max-len */ + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (() => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('theme') === 'cyberpunk' ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${[...Array(20).keys()].map(() => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    `)}
    ${[...Array(60).keys()].map(() => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    `)}
    ` : ''}
    Logo Converse converse.js
    ${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('view_mode') === 'overlayed' ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ` : ''}
    `); + +/***/ }), + +/***/ "./src/plugins/rootview/templates/root.js": +/*!************************************************!*\ + !*** ./src/plugins/rootview/templates/root.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_components_font_awesome_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/font-awesome.js */ "./src/shared/components/font-awesome.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (() => { + const extra_classes = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('singleton') ? ['converse-singleton'] : []; + extra_classes.push(`converse-${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('view_mode')}`); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('show_background') ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/rootview/utils.js": +/*!***************************************!*\ + !*** ./src/plugins/rootview/utils.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ensureElement: () => (/* binding */ ensureElement), +/* harmony export */ getTheme: () => (/* binding */ getTheme) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + +function getTheme() { + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('dark_theme'); + } else { + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('theme'); + } +} +function ensureElement() { + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('auto_insert')) { + return; + } + const root = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('root'); + if (!root.querySelector('converse-root')) { + const el = document.createElement('converse-root'); + const body = root.querySelector('body'); + if (body) { + body.appendChild(el); + } else { + root.appendChild(el); // Perhaps inside a web component? + } + } +} + +/***/ }), + +/***/ "./src/plugins/rosterview/constants.js": +/*!*********************************************!*\ + !*** ./src/plugins/rosterview/constants.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ STATUSES: () => (/* binding */ STATUSES) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + +const STATUSES = { + 'dnd': (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This contact is busy'), + 'online': (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This contact is online'), + 'offline': (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This contact is offline'), + 'unavailable': (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This contact is unavailable'), + 'xa': (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This contact is away for an extended period'), + 'away': (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('This contact is away') +}; + +/***/ }), + +/***/ "./src/plugins/rosterview/contactview.js": +/*!***********************************************!*\ + !*** ./src/plugins/rosterview/contactview.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ RosterContact) +/* harmony export */ }); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_requesting_contact_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/requesting_contact.js */ "./src/plugins/rosterview/templates/requesting_contact.js"); +/* harmony import */ var _templates_roster_item_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/roster_item.js */ "./src/plugins/rosterview/templates/roster_item.js"); +/* harmony import */ var _templates_unsaved_contact_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./templates/unsaved_contact.js */ "./src/plugins/rosterview/templates/unsaved_contact.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + + + + + + +class RosterContact extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + static get properties() { + return { + model: { + type: Object + } + }; + } + constructor() { + super(); + this.model = null; + } + initialize() { + this.listenTo(this.model, 'change', () => this.requestUpdate()); + this.listenTo(this.model, 'highlight', () => this.requestUpdate()); + this.listenTo(this.model, 'vcard:add', () => this.requestUpdate()); + this.listenTo(this.model, 'vcard:change', () => this.requestUpdate()); + this.listenTo(this.model, 'presenceChanged', () => this.requestUpdate()); + } + render() { + if (this.model.get('requesting') === true) { + return (0,_templates_requesting_contact_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this); + } else if (this.model.get('subscription') === 'none') { + return (0,_templates_unsaved_contact_js__WEBPACK_IMPORTED_MODULE_5__["default"])(this); + } else { + return (0,_templates_roster_item_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this); + } + } + + /** + * @param {MouseEvent} ev + */ + openChat(ev) { + ev?.preventDefault?.(); + this.model.openChat(); + } + + /** + * @param {MouseEvent} ev + */ + addContact(ev) { + ev?.preventDefault?.(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.show('converse-add-contact-modal', { + 'model': new _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model() + }, ev); + } + + /** + * @param {MouseEvent} ev + */ + async removeContact(ev) { + ev?.preventDefault?.(); + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('allow_contact_removal')) { + return; + } + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)("Are you sure you want to remove this contact?")); + if (!result) return; + const chat = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.chats.get(this.model.get('jid')); + chat?.close(); + try { + if (this.model.get('subscription') === 'none' && this.model.get('ask') !== 'subscribe') { + this.model.destroy(); + } else { + this.model.removeFromRoster(); + if (this.model.collection) { + // The model might have already been removed as + // result of a roster push. + this.model.destroy(); + } + } + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Error'), [(0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Sorry, there was an error while trying to remove %1$s as a contact.', this.model.getDisplayName())]); + } + } + + /** + * @param {MouseEvent} ev + */ + async acceptRequest(ev) { + ev?.preventDefault?.(); + await _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster.sendContactAddIQ({ + jid: this.model.get('jid'), + name: this.model.getFullname(), + groups: [] + }); + this.model.authorize().subscribe(); + } + + /** + * @param {MouseEvent} ev + */ + async declineRequest(ev) { + if (ev && ev.preventDefault) { + ev.preventDefault(); + } + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_6__.__)("Are you sure you want to decline this contact request?")); + if (result) { + const chat = await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.chats.get(this.model.get('jid')); + chat?.close(); + this.model.unauthorize().destroy(); + } + return this; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-roster-contact', RosterContact); + +/***/ }), + +/***/ "./src/plugins/rosterview/index.js": +/*!*****************************************!*\ + !*** ./src/plugins/rosterview/index.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modal */ "./src/plugins/modal/index.js"); +/* harmony import */ var _modals_add_contact_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modals/add-contact.js */ "./src/plugins/rosterview/modals/add-contact.js"); +/* harmony import */ var _rosterview_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rosterview.js */ "./src/plugins/rosterview/rosterview.js"); +/* harmony import */ var _contactview_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contactview.js */ "./src/plugins/rosterview/contactview.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ "./src/plugins/rosterview/utils.js"); +/* harmony import */ var shared_styles_status_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! shared/styles/status.scss */ "./src/shared/styles/status.scss"); +/* harmony import */ var _styles_roster_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./styles/roster.scss */ "./src/plugins/rosterview/styles/roster.scss"); +/** + * @copyright 2022, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + + + + + + +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-rosterview', { + dependencies: ["converse-roster", "converse-modal", "converse-chatboxviews"], + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'autocomplete_add_contact': true, + 'allow_contact_removal': true, + 'hide_offline_users': false, + 'roster_groups': true, + 'xhr_user_search_url': null + }); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.promises.add('rosterViewInitialized'); + const exports = { + RosterFilter: _converse_headless__WEBPACK_IMPORTED_MODULE_0__.RosterFilter, + RosterContactView: _contactview_js__WEBPACK_IMPORTED_MODULE_4__["default"] + }; + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse, exports); // DEPRECATED + Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.exports, exports); + + /* -------- Event Handlers ----------- */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.listen.on('chatBoxesInitialized', () => { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.on('destroy', c => (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.highlightRosterItem)(c)); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.chatboxes.on('change:hidden', c => (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.highlightRosterItem)(c)); + }); + } +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/modals/add-contact.js": +/*!******************************************************!*\ + !*** ./src/plugins/rosterview/modals/add-contact.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ AddContactModal) +/* harmony export */ }); +/* harmony import */ var strophe_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! strophe.js */ "./node_modules/strophe.js/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_autocomplete_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/autocomplete/index.js */ "./src/shared/autocomplete/index.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_add_contact_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/add-contact.js */ "./src/plugins/rosterview/modals/templates/add-contact.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/rosterview/utils.js"); + + + + + + + +class AddContactModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_3__["default"] { + initialize() { + super.initialize(); + this.listenTo(this.model, 'change', () => this.render()); + this.render(); + this.addEventListener('shown.bs.modal', () => /** @type {HTMLInputElement} */this.querySelector('input[name="jid"]')?.focus(), false); + } + renderModal() { + return (0,_templates_add_contact_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this); + } + getModalTitle() { + // eslint-disable-line class-methods-use-this + return (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Add a Contact'); + } + validateSubmission(jid) { + if (!jid || jid.split('@').filter(s => !!s).length < 2) { + this.model.set('error', (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Please enter a valid XMPP address')); + return false; + } else if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster.get(strophe_js__WEBPACK_IMPORTED_MODULE_0__.Strophe.getBareJidFromJid(jid))) { + this.model.set('error', (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('This contact has already been added')); + return false; + } + this.model.set('error', null); + return true; + } + afterSubmission(_form, jid, name, group) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster.addContact({ + jid, + name, + groups: Array.isArray(group) ? group : [group] + }); + this.model.clear(); + this.modal.hide(); + } + async addContactFromForm(ev) { + ev.preventDefault(); + const data = new FormData(ev.target); + let name = /** @type {string} */(data.get('name') || '').trim(); + let jid = /** @type {string} */(data.get('jid') || '').trim(); + if (!jid && typeof _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('xhr_user_search_url') === 'string') { + const list = await (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.getNamesAutoCompleteList)(name); + if (list.length !== 1) { + this.model.set('error', (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Sorry, could not find a contact with that name')); + this.render(); + return; + } + jid = list[0].value; + name = list[0].label; + } + if (this.validateSubmission(jid)) { + this.afterSubmission(ev.target, jid, name, data.get('group')); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-add-contact-modal', AddContactModal); + +/***/ }), + +/***/ "./src/plugins/rosterview/modals/templates/add-contact.js": +/*!****************************************************************!*\ + !*** ./src/plugins/rosterview/modals/templates/add-contact.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.js */ "./src/plugins/rosterview/utils.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var shared_autocomplete_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/autocomplete/utils */ "./src/shared/autocomplete/utils.js"); + + + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_add = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Add'); + const i18n_contact_placeholder = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('name@example.org'); + const i18n_group = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Group'); + const i18n_nickname = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Name'); + const i18n_xmpp_address = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('XMPP Address'); + const error = el.model.get('error'); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    `; +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/rosterview.js": +/*!**********************************************!*\ + !*** ./src/plugins/rosterview/rosterview.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ RosterView) +/* harmony export */ }); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var utils_html_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! utils/html.js */ "./src/utils/html.js"); +/* harmony import */ var _templates_roster_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/roster.js */ "./src/plugins/rosterview/templates/roster.js"); + + + + + +const { + initStorage +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u; +const { + CLOSED, + OPENED +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; + +/** + * @class + * @namespace _converse.RosterView + * @memberOf _converse + */ +class RosterView extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + async initialize() { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + const id = `converse.contacts-panel${bare_jid}`; + this.model = new _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model({ + id + }); + initStorage(this.model, id); + this.model.fetch(); + await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.waitUntil('rosterInitialized'); + const { + chatboxes, + presences, + roster + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + this.listenTo(_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse, 'rosterContactsFetched', () => this.requestUpdate()); + this.listenTo(presences, 'change:show', () => this.requestUpdate()); + this.listenTo(chatboxes, 'change:hidden', () => this.requestUpdate()); + this.listenTo(roster, 'add', () => this.requestUpdate()); + this.listenTo(roster, 'destroy', () => this.requestUpdate()); + this.listenTo(roster, 'remove', () => this.requestUpdate()); + this.listenTo(roster, 'change', () => this.requestUpdate()); + this.listenTo(roster.state, 'change', () => this.requestUpdate()); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + /** + * Triggered once the _converse.RosterView instance has been created and initialized. + * @event _converse#rosterViewInitialized + * @example _converse.api.listen.on('rosterViewInitialized', () => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.trigger('rosterViewInitialized'); + } + render() { + return (0,_templates_roster_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this); + } + + /** @param {MouseEvent} ev */ + showAddContactModal(ev) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.modal.show('converse-add-contact-modal', { + 'model': new _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.Model() + }, ev); + } + + /** @param {MouseEvent} [ev] */ + async syncContacts(ev) { + ev?.preventDefault(); + const { + roster + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + this.syncing_contacts = true; + this.requestUpdate(); + roster.data.save('version', null); + await roster.fetchFromServer(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.user.presence.send(); + this.syncing_contacts = false; + this.requestUpdate(); + } + + /** @param {MouseEvent} [ev] */ + toggleRoster(ev) { + ev?.preventDefault?.(); + const list_el = /** @type {HTMLElement} */this.querySelector('.list-container.roster-contacts'); + if (this.model.get('toggle_state') === CLOSED) { + (0,utils_html_js__WEBPACK_IMPORTED_MODULE_3__.slideOut)(list_el).then(() => this.model.save({ + 'toggle_state': OPENED + })); + } else { + (0,utils_html_js__WEBPACK_IMPORTED_MODULE_3__.slideIn)(list_el).then(() => this.model.save({ + 'toggle_state': CLOSED + })); + } + } + + /** @param {MouseEvent} [ev] */ + toggleFilter(ev) { + ev?.preventDefault?.(); + this.model.save({ + filter_visible: !this.model.get('filter_visible') + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-roster', RosterView); + +/***/ }), + +/***/ "./src/plugins/rosterview/templates/group.js": +/*!***************************************************!*\ + !*** ./src/plugins/rosterview/templates/group.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directives/repeat.js */ "./node_modules/lit/directives/repeat.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_icons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/icons.js */ "./src/shared/components/icons.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/rosterview/utils.js"); + + + + + + +const { + isUniView +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.u; + +/** + * @param {import('@converse/headless/types/plugins/roster/contact').default} contact + */ +function renderContact(contact) { + const jid = contact.get('jid'); + const extra_classes = []; + if (isUniView()) { + const chatbox = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.chatboxes.get(jid); + if (chatbox && !chatbox.get('hidden')) { + extra_classes.push('open'); + } + } + const ask = contact.get('ask'); + const requesting = contact.get('requesting'); + const subscription = contact.get('subscription'); + if (ask === 'subscribe' || subscription === 'from') { + /* ask === 'subscribe' + * Means we have asked to subscribe to them. + * + * subscription === 'from' + * They are subscribed to us, but not vice versa. + * We assume that there is a pending subscription + * from us to them (otherwise we're in a state not + * supported by converse.js). + * + * So in both cases the user is a "pending" contact. + */ + extra_classes.push('pending-xmpp-contact'); + } else if (requesting === true) { + extra_classes.push('requesting-xmpp-contact'); + } else if (subscription === 'both' || subscription === 'to' || _converse_headless__WEBPACK_IMPORTED_MODULE_2__.u.isSameBareJID(jid, _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.connection.get().jid)) { + extra_classes.push('current-xmpp-contact'); + extra_classes.push(subscription); + extra_classes.push(contact.presence.get('show')); + } + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
  • `; +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + const i18n_title = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Click to hide these contacts'); + const collapsed = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.roster.state.get('collapsed_groups'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${o.name}
      ${(0,lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_1__.repeat)(o.contacts, c => c.get('jid'), renderContact)}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/templates/requesting_contact.js": +/*!****************************************************************!*\ + !*** ./src/plugins/rosterview/templates/requesting_contact.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/chat/utils.js */ "./src/shared/chat/utils.js"); + + + + +/** + * @param {import('../contactview').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const num_unread = (0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_2__.getUnreadMsgsDisplay)(el.model); + const jid = el.model.get('jid'); + const display_name = el.model.getDisplayName(); + const i18n_accept = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Click to accept the contact request from %1$s (XMPP address: %2$s)', display_name, jid); + const i18n_decline = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Click to decline the contact request from %1$s (XMPP address: %2$s)', display_name, jid); + const i18n_chat = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Click to chat with %1$s (XMPP address: %2$s)', display_name, jid); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${num_unread ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${num_unread}` : ''} ${display_name} `; +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/templates/roster.js": +/*!****************************************************!*\ + !*** ./src/plugins/rosterview/templates/roster.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directives/repeat.js */ "./node_modules/lit/directives/repeat.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _group_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./group.js */ "./src/plugins/rosterview/templates/group.js"); +/* harmony import */ var _roster_filter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./roster_filter.js */ "./src/plugins/rosterview/templates/roster_filter.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils.js */ "./src/plugins/rosterview/utils.js"); +/** + * @typedef {import('../rosterview').default} RosterView + */ + + + + + + + +const { + CLOSED +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.constants; + +/** + * @param {RosterView} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_heading_contacts = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Contacts'); + const i18n_toggle_contacts = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Click to toggle contacts'); + const i18n_title_add_contact = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Add a contact'); + const roster = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state.roster || []; + const contacts_map = roster.reduce((acc, contact) => (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.populateContactsMap)(acc, contact), {}); + const groupnames = Object.keys(contacts_map).filter(contact => (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.shouldShowGroup)(contact, el.model)); + const is_closed = el.model.get('toggle_state') === CLOSED; + groupnames.sort(_utils_js__WEBPACK_IMPORTED_MODULE_6__.groupsComparator); + const i18n_show_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Show filter'); + const i18n_hide_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Hide filter'); + const is_filter_visible = el.model.get('filter_visible'); + const btns = /** @type {TemplateResult[]} */[]; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('allow_contact_requests')) { + btns.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${i18n_title_add_contact}`); + } + if (roster.length > 5) { + btns.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${is_filter_visible ? i18n_hide_filter : i18n_show_filter}`); + } + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get("loglevel") === 'debug') { + const i18n_title_sync_contacts = (0,i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Re-sync contacts'); + btns.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${i18n_title_sync_contacts}`); + } + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${is_filter_visible ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`` : ''} ${(0,lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_1__.repeat)(groupnames, n => n, name => { + const contacts = contacts_map[name].filter(c => (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.shouldShowContact)(c, name, el.model)); + contacts.sort(_utils_js__WEBPACK_IMPORTED_MODULE_6__.contactsComparator); + return contacts.length ? (0,_group_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ + contacts, + name + }) : ''; + })}
    `; +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/templates/roster_filter.js": +/*!***********************************************************!*\ + !*** ./src/plugins/rosterview/templates/roster_filter.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/** + * @typedef {import('shared/components/list-filter').default} ListFilter + */ + + + +/** + * @param {ListFilter} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_placeholder = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Filter'); + const title_contact_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Filter by contact name'); + const title_group_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Filter by group name'); + const title_status_filter = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Filter by status'); + const label_any = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Any'); + const label_unread_messages = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Unread'); + const label_available = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Available'); + const label_chatty = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Chatty'); + const label_busy = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Busy'); + const label_away = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Away'); + const label_xa = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Extended Away'); + const label_offline = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Offline'); + const chat_state = el.model.get('state'); + const filter_text = el.model.get('text'); + const filter_type = el.model.get('type'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    `; +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/templates/roster_item.js": +/*!*********************************************************!*\ + !*** ./src/plugins/rosterview/templates/roster_item.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ tplRemoveLink: () => (/* binding */ tplRemoveLink) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/chat/utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants.js */ "./src/plugins/rosterview/constants.js"); +/** + * @typedef {import('../contactview').default} RosterContact + */ + + + + + + +/** + * @param {RosterContact} el + */ +const tplRemoveLink = el => { + const display_name = el.model.getDisplayName(); + const i18n_remove = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Click to remove %1$s as a contact', display_name); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +}; + +/** + * @param {RosterContact} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const show = el.model.presence.get('show') || 'offline'; + let classes, color; + if (show === 'online') { + [classes, color] = ['fa fa-circle', 'chat-status-online']; + } else if (show === 'dnd') { + [classes, color] = ['fa fa-minus-circle', 'chat-status-busy']; + } else if (show === 'away') { + [classes, color] = ['fa fa-circle', 'chat-status-away']; + } else { + [classes, color] = ['fa fa-circle', 'comment']; + } + const desc_status = _constants_js__WEBPACK_IMPORTED_MODULE_4__.STATUSES[show]; + const num_unread = (0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_3__.getUnreadMsgsDisplay)(el.model); + const display_name = el.model.getDisplayName(); + const jid = el.model.get('jid'); + const i18n_chat = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Click to chat with %1$s (XMPP address: %2$s)', display_name, jid); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${num_unread ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${num_unread}` : ''} ${display_name} ${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('allow_contact_removal') ? tplRemoveLink(el) : ''}`; +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/templates/unsaved_contact.js": +/*!*************************************************************!*\ + !*** ./src/plugins/rosterview/templates/unsaved_contact.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/chat/utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var _roster_item__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./roster_item */ "./src/plugins/rosterview/templates/roster_item.js"); + + + + + + +/** + * @param {import('../contactview').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const num_unread = (0,shared_chat_utils_js__WEBPACK_IMPORTED_MODULE_3__.getUnreadMsgsDisplay)(el.model); + const display_name = el.model.getDisplayName(); + const jid = el.model.get('jid'); + const i18n_add_contact = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Click to add %1$s to your roster', display_name); + const i18n_chat = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Click to chat with %1$s (XMPP address: %2$s)', display_name, jid); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${num_unread ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${num_unread}` : ''} ${display_name} ${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('allow_contact_removal') ? (0,_roster_item__WEBPACK_IMPORTED_MODULE_4__.tplRemoveLink)(el) : ''}`; +}); + +/***/ }), + +/***/ "./src/plugins/rosterview/utils.js": +/*!*****************************************!*\ + !*** ./src/plugins/rosterview/utils.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ contactsComparator: () => (/* binding */ contactsComparator), +/* harmony export */ getGroupsAutoCompleteList: () => (/* binding */ getGroupsAutoCompleteList), +/* harmony export */ getJIDsAutoCompleteList: () => (/* binding */ getJIDsAutoCompleteList), +/* harmony export */ getNamesAutoCompleteList: () => (/* binding */ getNamesAutoCompleteList), +/* harmony export */ groupsComparator: () => (/* binding */ groupsComparator), +/* harmony export */ highlightRosterItem: () => (/* binding */ highlightRosterItem), +/* harmony export */ isContactFiltered: () => (/* binding */ isContactFiltered), +/* harmony export */ populateContactsMap: () => (/* binding */ populateContactsMap), +/* harmony export */ removeContact: () => (/* binding */ removeContact), +/* harmony export */ shouldShowContact: () => (/* binding */ shouldShowContact), +/* harmony export */ shouldShowGroup: () => (/* binding */ shouldShowGroup), +/* harmony export */ toggleGroup: () => (/* binding */ toggleGroup) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/** + * @typedef {import('@converse/skeletor').Model} Model + * @typedef {import('@converse/headless').RosterContact} RosterContact + * @typedef {import('@converse/headless').RosterContacts} RosterContacts + */ + + +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +const { + STATUS_WEIGHTS +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +function removeContact(contact) { + contact.removeFromRoster(() => contact.destroy(), e => { + e && _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Error'), [(0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Sorry, there was an error while trying to remove %1$s as a contact.', contact.getDisplayName())]); + }); +} +function highlightRosterItem(chatbox) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster?.get(chatbox.get('jid'))?.trigger('highlight'); +} +function toggleGroup(ev, name) { + ev?.preventDefault?.(); + const { + roster + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state; + const collapsed = roster.state.get('collapsed_groups'); + if (collapsed.includes(name)) { + roster.state.save('collapsed_groups', collapsed.filter(n => n !== name)); + } else { + roster.state.save('collapsed_groups', [...collapsed, name]); + } +} + +/** + * @param {RosterContact} contact + * @param {string} groupname + * @returns {boolean} + */ +function isContactFiltered(contact, groupname) { + const filter = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster_filter; + const type = filter.get('type'); + const q = type === 'state' ? filter.get('state').toLowerCase() : filter.get('text').toLowerCase(); + if (!q) return false; + if (type === 'state') { + const sticky_groups = [_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.labels.HEADER_REQUESTING_CONTACTS, _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.labels.HEADER_UNREAD]; + if (sticky_groups.includes(groupname)) { + // When filtering by chat state, we still want to + // show sticky groups, even though they don't + // match the state in question. + return false; + } else if (q === 'unread_messages') { + return contact.get('num_unread') === 0; + } else if (q === 'online') { + return ["offline", "unavailable", "dnd", "away", "xa"].includes(contact.presence.get('show')); + } else { + return !contact.presence.get('show').includes(q); + } + } else if (type === 'items') { + return !contact.getFilterCriteria().includes(q); + } +} + +/** + * @param {RosterContact} contact + * @param {string} groupname + * @param {Model} model + * @returns {boolean} + */ +function shouldShowContact(contact, groupname, model) { + if (!model.get('filter_visible')) return true; + const chat_status = contact.presence.get('show'); + if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('hide_offline_users') && chat_status === 'offline') { + // If pending or requesting, show + if (contact.get('ask') === 'subscribe' || contact.get('subscription') === 'from' || contact.get('requesting') === true) { + return !isContactFiltered(contact, groupname); + } + return false; + } + return !isContactFiltered(contact, groupname); +} +function shouldShowGroup(group, model) { + if (!model.get('filter_visible')) return true; + const filter = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster_filter; + const type = filter.get('type'); + if (type === 'groups') { + const q = filter.get('text')?.toLowerCase(); + if (!q) { + return true; + } + if (!group.toLowerCase().includes(q)) { + return false; + } + } + return true; +} + +/** + * @param {import('./types').ContactsMap} contacts_map + * @param {RosterContact} contact + * @returns {import('./types').ContactsMap} + */ +function populateContactsMap(contacts_map, contact) { + const { + labels + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse; + let contact_groups; + if (contact.get('requesting')) { + contact_groups = [labels.HEADER_REQUESTING_CONTACTS]; + } else if (contact.get('ask') === 'subscribe') { + contact_groups = [labels.HEADER_PENDING_CONTACTS]; + } else if (contact.get('subscription') === 'none') { + contact_groups = [labels.HEADER_UNSAVED_CONTACTS]; + } else if (!_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('roster_groups')) { + contact_groups = [labels.HEADER_CURRENT_CONTACTS]; + } else { + contact_groups = contact.get('groups'); + contact_groups = contact_groups.length === 0 ? [labels.HEADER_UNGROUPED] : contact_groups; + } + for (const name of contact_groups) { + contacts_map[name] ? contacts_map[name].push(contact) : contacts_map[name] = [contact]; + } + if (contact.get('num_unread')) { + const name = /** @type {string} */labels.HEADER_UNREAD; + contacts_map[name] ? contacts_map[name].push(contact) : contacts_map[name] = [contact]; + } + return contacts_map; +} + +/** + * @param {RosterContact} contact1 + * @param {RosterContact} contact2 + * @returns {(-1|0|1)} + */ +function contactsComparator(contact1, contact2) { + const status1 = contact1.presence.get('show') || 'offline'; + const status2 = contact2.presence.get('show') || 'offline'; + if (STATUS_WEIGHTS[status1] === STATUS_WEIGHTS[status2]) { + const name1 = contact1.getDisplayName().toLowerCase(); + const name2 = contact2.getDisplayName().toLowerCase(); + return name1 < name2 ? -1 : name1 > name2 ? 1 : 0; + } else { + return STATUS_WEIGHTS[status1] < STATUS_WEIGHTS[status2] ? -1 : 1; + } +} +function groupsComparator(a, b) { + const HEADER_WEIGHTS = {}; + const { + HEADER_UNREAD, + HEADER_REQUESTING_CONTACTS, + HEADER_CURRENT_CONTACTS, + HEADER_UNGROUPED, + HEADER_PENDING_CONTACTS + } = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.labels; + HEADER_WEIGHTS[HEADER_UNREAD] = 0; + HEADER_WEIGHTS[HEADER_REQUESTING_CONTACTS] = 1; + HEADER_WEIGHTS[HEADER_CURRENT_CONTACTS] = 2; + HEADER_WEIGHTS[HEADER_UNGROUPED] = 3; + HEADER_WEIGHTS[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 = 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 = HEADER_CURRENT_CONTACTS; + return WEIGHTS[a] < WEIGHTS[b_header] ? -1 : WEIGHTS[a] > WEIGHTS[b_header] ? 1 : 0; + } +} +function getGroupsAutoCompleteList() { + const roster = /** @type {RosterContacts} */_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster; + const groups = roster.reduce((groups, contact) => groups.concat(contact.get('groups')), []); + return [...new Set(groups.filter(i => i))]; +} +function getJIDsAutoCompleteList() { + const roster = /** @type {RosterContacts} */_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.roster; + return [...new Set(roster.map(item => Strophe.getDomainFromJid(item.get('jid'))))]; +} + +/** + * @param {string} query + */ +async function getNamesAutoCompleteList(query) { + const options = { + 'mode': ( /** @type {RequestMode} */'cors'), + 'headers': { + 'Accept': 'text/json' + } + }; + const url = `${_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('xhr_user_search_url')}q=${encodeURIComponent(query)}`; + let response; + try { + response = await fetch(url, options); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(`Failed to fetch names for query "${query}"`); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(e); + return []; + } + const json = response.json; + if (!Array.isArray(json)) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.log.error(`Invalid JSON returned"`); + return []; + } + return json.map(i => ({ + 'label': i.fullname || i.jid, + 'value': i.jid + })); +} + +/***/ }), + +/***/ "./src/plugins/singleton/index.js": +/*!****************************************!*\ + !*** ./src/plugins/singleton/index.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _singleton_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./singleton.scss */ "./src/plugins/singleton/singleton.scss"); +/** + * @copyright JC Brand + * @license Mozilla Public License (MPLv2) + * @description A plugin which restricts Converse to only one chat. + */ + + +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.plugins.add('converse-singleton', { + enabled(_converse) { + return _converse.api.settings.get("singleton"); + }, + initialize() { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.extend({ + 'allow_logout': false, + // No point in logging out when we have auto_login as true. + 'allow_muc_invitations': false, + // Doesn't make sense to allow because only + // roster contacts can be invited + 'hide_muc_server': true + }); + const auto_join_rooms = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('auto_join_rooms'); + const auto_join_private_chats = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('auto_join_private_chats'); + if (!Array.isArray(auto_join_rooms) && !Array.isArray(auto_join_private_chats)) { + throw new Error("converse-singleton: auto_join_rooms must be an Array"); + } + if (auto_join_rooms.length === 0 && auto_join_private_chats.length === 0) { + throw new Error("If you set singleton set to true, you need " + "to specify auto_join_rooms or auto_join_private_chats"); + } + if (auto_join_rooms.length > 0 && auto_join_private_chats.length > 0) { + throw new Error("It doesn't make sense to have singleton set to true and " + "auto_join_rooms or auto_join_private_chats set to more then one, " + "since only one chat room may be open at any time."); + } + } +}); + +/***/ }), + +/***/ "./src/shared/autocomplete/autocomplete.js": +/*!*************************************************!*\ + !*** ./src/shared/autocomplete/autocomplete.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AutoComplete: () => (/* binding */ AutoComplete), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _suggestion_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./suggestion.js */ "./src/shared/autocomplete/suggestion.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ "./src/shared/autocomplete/utils.js"); +/** + * @copyright Lea Verou and the Converse.js contributors + * @description Started as a fork of Lea Verou's "Awesomplete" + * @license Mozilla Public License (MPLv2) + */ + + + + + +const { + siblingIndex +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u; +class AutoComplete extends (0,_converse_skeletor__WEBPACK_IMPORTED_MODULE_0__.EventEmitter)(Object) { + /** + * @param {HTMLElement} el + * @param {any} config + */ + constructor(el, config = {}) { + super(); + this.suggestions = []; + this.is_opened = false; + this.auto_evaluate = true; // evaluate automatically without any particular key as trigger + this.match_current_word = false; // Match only the current word, otherwise all input is matched + this.sort = config.sort === false ? null : _utils_js__WEBPACK_IMPORTED_MODULE_3__.SORT_BY_QUERY_POSITION; + this.filter = _utils_js__WEBPACK_IMPORTED_MODULE_3__.FILTER_CONTAINS; + this.ac_triggers = []; // Array of keys (`ev.key`) values that will trigger auto-complete + this.include_triggers = []; // Array of trigger keys which should be included in the returned value + this.min_chars = 2; + this.max_items = 10; + this.auto_first = false; // Should the first element be automatically selected? + this.data = (a, _v) => a; + this.item = _utils_js__WEBPACK_IMPORTED_MODULE_3__.ITEM; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.hasClass('suggestion-box', el)) { + this.container = el; + } else { + this.container = el.querySelector('.suggestion-box'); + } + this.input = /** @type {HTMLInputElement} */this.container.querySelector('.suggestion-box__input'); + this.input.setAttribute("aria-autocomplete", "list"); + this.ul = this.container.querySelector('.suggestion-box__results'); + this.status = this.container.querySelector('.suggestion-box__additions'); + Object.assign(this, config); + this.index = -1; + this.bindEvents(); + if (this.input.hasAttribute("list")) { + this.list = "#" + this.input.getAttribute("list"); + this.input.removeAttribute("list"); + } else { + this.list = this.input.getAttribute("data-list") || config.list || []; + } + } + bindEvents() { + const input = { + "blur": () => this.close({ + 'reason': 'blur' + }) + }; + if (this.auto_evaluate) { + input["input"] = e => this.evaluate(e); + } + this._events = { + 'input': input, + 'form': { + "submit": () => this.close({ + 'reason': 'submit' + }) + }, + 'ul': { + "mousedown": ev => this.onMouseDown(ev), + "mouseover": ev => this.onMouseOver(ev) + } + }; + _utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.bind(this.input, this._events.input); + _utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.bind(this.input.form, this._events.form); + _utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.bind(this.ul, this._events.ul); + } + set list(list) { + if (Array.isArray(list) || typeof list === "function") { + this._list = list; + } else if (typeof list === "string" && list.includes(",")) { + this._list = list.split(/\s*,\s*/); + } else { + // Element or CSS selector + const children = _utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.getElement(list)?.children || []; + this._list = Array.from(children).filter(el => !el.disabled).map(el => { + const text = el.textContent.trim(); + const value = el.value || text; + const label = el.label || text; + return value !== "" ? { + label, + value + } : null; + }).filter(i => i); + } + if (document.activeElement === this.input) { + this.evaluate(); + } + } + get list() { + return this._list; + } + get selected() { + return this.index > -1; + } + get opened() { + return this.is_opened; + } + close(o) { + if (!this.opened) { + return; + } + this.ul.setAttribute("hidden", ""); + this.is_opened = false; + this.index = -1; + this.trigger("suggestion-box-close", o || {}); + } + insertValue(suggestion) { + if (this.match_current_word) { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.replaceCurrentWord(this.input, suggestion.value); + } else { + this.input.value = suggestion.value; + } + } + open() { + this.ul.removeAttribute("hidden"); + this.is_opened = true; + if (this.auto_first && this.index === -1) { + this.goto(0); + } + this.trigger("suggestion-box-open"); + } + destroy() { + //remove events from the input and its form + _utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.unbind(this.input, this._events.input); + _utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.unbind(this.input.form, this._events.form); + this.input.removeAttribute("aria-autocomplete"); + } + next() { + const count = this.ul.children.length; + this.goto(this.index < count - 1 ? this.index + 1 : count ? 0 : -1); + } + previous() { + const count = this.ul.children.length, + pos = this.index - 1; + this.goto(this.selected && pos !== -1 ? pos : count - 1); + } + + /** + * @param {number} i + * @param {boolean} scroll=true + */ + goto(i, scroll = true) { + // Should not be used directly, highlights specific item without any checks! + const list = /** @type HTMLElement[] */Array.from(this.ul.children).filter(el => el instanceof HTMLElement); + if (this.selected) { + list[this.index].setAttribute("aria-selected", "false"); + } + this.index = i; + if (i > -1 && list.length > 0) { + list[i].setAttribute("aria-selected", "true"); + list[i].focus(); + this.status.textContent = list[i].textContent; + if (scroll) { + // scroll to highlighted element in case parent's height is fixed + this.ul.scrollTop = list[i].offsetTop - this.ul.clientHeight + list[i].clientHeight; + } + this.trigger("suggestion-box-highlight", { + 'text': this.suggestions[this.index] + }); + } + } + select(selected) { + if (selected) { + this.index = siblingIndex(selected); + } else { + selected = this.ul.children[this.index]; + } + if (selected) { + const suggestion = this.suggestions[this.index]; + this.insertValue(suggestion); + this.close({ + 'reason': 'select' + }); + this.auto_completing = false; + this.trigger("suggestion-box-selectcomplete", { + 'text': suggestion + }); + } + } + onMouseOver(ev) { + const li = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.ancestor(ev.target, 'li'); + if (li) { + const index = Array.prototype.slice.call(this.ul.children).indexOf(li); + this.goto(index, false); + } + } + onMouseDown(ev) { + if (ev.button !== 0) { + return; // Only select on left click + } + const li = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.ancestor(ev.target, 'li'); + if (li) { + ev.preventDefault(); + this.select(li); + } + } + onKeyDown(ev) { + if (this.opened) { + if ([_converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.ENTER, _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.TAB].includes(ev.keyCode) && this.selected) { + ev.preventDefault(); + ev.stopPropagation(); + this.select(); + return true; + } else if (ev.keyCode === _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.ESCAPE) { + this.close({ + 'reason': 'esc' + }); + return true; + } else if ([_converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.UP_ARROW, _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.DOWN_ARROW].includes(ev.keyCode)) { + ev.preventDefault(); + ev.stopPropagation(); + this[ev.keyCode === _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.UP_ARROW ? "previous" : "next"](); + return true; + } + } + if ([_converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.SHIFT, _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.META, _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.META_RIGHT, _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.ESCAPE, _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.ALT].includes(ev.keyCode)) { + return; + } + if (this.ac_triggers.includes(ev.key)) { + if (ev.key === "Tab") { + if (ev.shiftKey) { + // TAB + shift should give the focus to previous focusable element. + return; + } + // If the input is empty (and min_chars > 0), TAB should give focus to next focusable element. + if (this.min_chars > 0 && this.input.value === '') { + return; + } + ev.preventDefault(); + } + this.auto_completing = true; + } else if (ev.key === "Backspace") { + const word = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.getCurrentWord(ev.target, ev.target.selectionEnd - 1); + if (_utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.isMention(word, this.ac_triggers)) { + this.auto_completing = true; + } + } + } + + /** + * @param {KeyboardEvent} [ev] + */ + async evaluate(ev) { + const selecting = this.selected && ev && (ev.keyCode === _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.UP_ARROW || ev.keyCode === _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.keycodes.DOWN_ARROW); + if (!this.auto_evaluate && !this.auto_completing || selecting) { + return; + } + let value = this.match_current_word ? _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.getCurrentWord(this.input) : this.input.value; + const contains_trigger = _utils_js__WEBPACK_IMPORTED_MODULE_3__.helpers.isMention(value, this.ac_triggers); + if (contains_trigger && !this.include_triggers.includes(ev.key)) { + value = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.isMentionBoundary(value[0]) ? value.slice(2) : value.slice(1); + } + const is_long_enough = value.length && value.length >= this.min_chars; + if (contains_trigger || is_long_enough) { + this.auto_completing = true; + const list = typeof this._list === "function" ? await this._list(value) : this._list; + if (list.length === 0 || !this.auto_completing) { + this.close({ + 'reason': 'nomatches' + }); + return; + } + this.index = -1; + this.ul.innerHTML = ""; + this.suggestions = list.map(item => new _suggestion_js__WEBPACK_IMPORTED_MODULE_2__["default"](this.data(item, value), value)).filter(item => this.filter(item, value)); + if (this.sort) { + this.suggestions = this.suggestions.sort(this.sort); + } + this.suggestions = this.suggestions.slice(0, this.max_items); + this.suggestions.forEach(text => this.ul.appendChild(this.item(text, value))); + if (this.ul.children.length === 0) { + this.close({ + 'reason': 'nomatches' + }); + } else { + this.open(); + } + } else { + this.close({ + 'reason': 'nomatches' + }); + if (!contains_trigger) { + this.auto_completing = false; + } + } + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AutoComplete); + +/***/ }), + +/***/ "./src/shared/autocomplete/component.js": +/*!**********************************************!*\ + !*** ./src/shared/autocomplete/component.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ AutoCompleteComponent) +/* harmony export */ }); +/* harmony import */ var _autocomplete_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./autocomplete.js */ "./src/shared/autocomplete/autocomplete.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ "./src/shared/autocomplete/utils.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + + + +/** + * A custom element that can be used to add auto-completion suggestions to a form input. + * @class AutoCompleteComponent + * + * @property { "above" | "below" } [position="above"] + * Should the autocomplete list show above or below the input element? + * @property { Boolean } [autofocus=false] + * Should the `focus` attribute be set on the input element? + * @property { Function } getAutoCompleteList + * A function that returns the list of autocomplete suggestions + * @property { Function } data + * A function that maps the returned matches into the correct format + * @property { Array } list + * An array of suggestions, to be used instead of the `getAutoCompleteList` * function + * @property { Boolean } [auto_evaluate=true] + * Should evaluation happen automatically without any particular key as trigger? + * @property { Boolean } [auto_first=false] + * Should the first element automatically be selected? + * @property { "contains" | "startswith" } [filter="contains"] + * Provide matches which contain the entered text, or which starts with the entered text + * @property { String } [include_triggers=""] + * Space separated characters which should be included in the returned value + * @property { Number } [min_chars=1] + * The minimum number of characters to be entered into the input before autocomplete starts. + * @property { String } [name] + * The `name` attribute of the `input` element + * @property { String } [placeholder] + * The `placeholder` attribute of the `input` element + * @property { String } [triggers] + * String of space separated characters which trigger autocomplete + * + * @example + * + * + */ +class AutoCompleteComponent extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + 'position': { + type: String + }, + 'autofocus': { + type: Boolean + }, + 'getAutoCompleteList': { + type: Function + }, + 'data': { + type: Function + }, + 'list': { + type: Array + }, + 'auto_evaluate': { + type: Boolean + }, + 'auto_first': { + type: Boolean + }, + 'filter': { + type: String + }, + 'include_triggers': { + type: String + }, + 'min_chars': { + type: Number + }, + 'name': { + type: String + }, + 'placeholder': { + type: String + }, + 'value': { + type: String + }, + 'triggers': { + type: String + }, + 'required': { + type: Boolean + } + }; + } + constructor() { + super(); + this.data = a => a; + this.value = ''; + this.position = 'above'; + this.auto_evaluate = true; + this.auto_first = false; + this.filter = 'contains'; + this.include_triggers = ''; + this.match_current_word = false; // Match only the current word, otherwise all input is matched + this.max_items = 10; + this.min_chars = 1; + this.triggers = ''; + this.getAutoCompleteList = null; + this.list = null; + this.name = ''; + this.placeholder = ''; + this.required = false; + } + render() { + const position_class = `suggestion-box__results--${this.position}`; + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`
    `; + } + firstUpdated() { + this.auto_complete = new _autocomplete_js__WEBPACK_IMPORTED_MODULE_0__["default"]( /** @type HTMLElement */this.firstElementChild, { + 'ac_triggers': this.triggers.split(' '), + 'auto_evaluate': this.auto_evaluate, + 'auto_first': this.auto_first, + 'filter': this.filter == 'contains' ? _utils_js__WEBPACK_IMPORTED_MODULE_2__.FILTER_CONTAINS : _utils_js__WEBPACK_IMPORTED_MODULE_2__.FILTER_STARTSWITH, + 'include_triggers': [], + 'list': this.list ?? (q => this.getAutoCompleteList(q)), + 'data': this.data, + 'match_current_word': true, + 'max_items': this.max_items, + 'min_chars': this.min_chars + }); + this.auto_complete.on('suggestion-box-selectcomplete', () => this.auto_completing = false); + } + onKeyDown(ev) { + this.auto_complete.onKeyDown(ev); + } + onKeyUp(ev) { + this.auto_complete.evaluate(ev); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-autocomplete', AutoCompleteComponent); + +/***/ }), + +/***/ "./src/shared/autocomplete/index.js": +/*!******************************************!*\ + !*** ./src/shared/autocomplete/index.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _component_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./component.js */ "./src/shared/autocomplete/component.js"); +/* harmony import */ var _autocomplete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./autocomplete.js */ "./src/shared/autocomplete/autocomplete.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_autocomplete_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/_autocomplete.scss */ "./src/shared/autocomplete/styles/_autocomplete.scss"); + + + + +const exports = { + AutoComplete: _autocomplete_js__WEBPACK_IMPORTED_MODULE_1__["default"] +}; +Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse, exports); // DEPRECATED +Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.exports, exports); + +/***/ }), + +/***/ "./src/shared/autocomplete/suggestion.js": +/*!***********************************************!*\ + !*** ./src/shared/autocomplete/suggestion.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * An autocomplete suggestion + */ +class Suggestion extends String { + /** + * @param { any } data - The auto-complete data. Ideally an object e.g. { label, value }, + * which specifies the value and human-presentable label of the suggestion. + * @param { string } query - The query string being auto-completed + */ + constructor(data, query) { + super(); + const o = Array.isArray(data) ? { + label: data[0], + value: data[1] + } : typeof data === 'object' && 'label' in data && 'value' in data ? data : { + label: data, + value: data + }; + this.label = o.label || o.value; + this.value = o.value; + this.query = query; + } + get lenth() { + return this.label.length; + } + toString() { + return '' + this.label; + } + valueOf() { + return this.toString(); + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Suggestion); + +/***/ }), + +/***/ "./src/shared/autocomplete/utils.js": +/*!******************************************!*\ + !*** ./src/shared/autocomplete/utils.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FILTER_CONTAINS: () => (/* binding */ FILTER_CONTAINS), +/* harmony export */ FILTER_STARTSWITH: () => (/* binding */ FILTER_STARTSWITH), +/* harmony export */ ITEM: () => (/* binding */ ITEM), +/* harmony export */ SORT_BY_QUERY_POSITION: () => (/* binding */ SORT_BY_QUERY_POSITION), +/* harmony export */ helpers: () => (/* binding */ helpers) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env.utils; +const helpers = { + getElement(expr, el) { + return typeof expr === 'string' ? (el || document).querySelector(expr) : expr || null; + }, + bind(element, o) { + if (element) { + for (var event in o) { + if (!Object.prototype.hasOwnProperty.call(o, event)) { + continue; + } + const callback = o[event]; + event.split(/\s+/).forEach(event => element.addEventListener(event, callback)); + } + } + }, + unbind(element, o) { + if (element) { + for (var event in o) { + if (!Object.prototype.hasOwnProperty.call(o, event)) { + continue; + } + const callback = o[event]; + event.split(/\s+/).forEach(event => element.removeEventListener(event, callback)); + } + } + }, + regExpEscape(s) { + return s.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); + }, + isMention(word, ac_triggers) { + return ac_triggers.includes(word[0]) || u.isMentionBoundary(word[0]) && ac_triggers.includes(word[1]); + } +}; +const FILTER_CONTAINS = function (text, input) { + return RegExp(helpers.regExpEscape(input.trim()), 'i').test(text); +}; +const FILTER_STARTSWITH = function (text, input) { + return RegExp('^' + helpers.regExpEscape(input.trim()), 'i').test(text); +}; +const SORT_BY_LENGTH = function (a, b) { + if (a.length !== b.length) { + return a.length - b.length; + } + return a < b ? -1 : 1; +}; +const SORT_BY_QUERY_POSITION = function (a, b) { + const query = a.query.toLowerCase(); + const x = a.label.toLowerCase().indexOf(query); + const y = b.label.toLowerCase().indexOf(query); + if (x === y) { + return SORT_BY_LENGTH(a, b); + } + return (x === -1 ? Infinity : x) < (y === -1 ? Infinity : y) ? -1 : 1; +}; +const ITEM = (text, input) => { + input = input.trim(); + const element = document.createElement('li'); + element.setAttribute('aria-selected', 'false'); + const regex = new RegExp('(' + input + ')', 'ig'); + const parts = input ? text.split(regex) : [text]; + parts.forEach(txt => { + if (input && txt.match(regex)) { + const match = document.createElement('mark'); + match.textContent = txt; + element.appendChild(match); + } else { + element.appendChild(document.createTextNode(txt)); + } + }); + return element; +}; + +/***/ }), + +/***/ "./src/shared/avatar/avatar.js": +/*!*************************************!*\ + !*** ./src/shared/avatar/avatar.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Avatar) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _templates_avatar_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/avatar.js */ "./src/shared/avatar/templates/avatar.js"); +/* harmony import */ var _avatar_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./avatar.scss */ "./src/shared/avatar/avatar.scss"); + + + + + + +class Avatar extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + model: { + type: Object + }, + pickerdata: { + type: Object + }, + name: { + type: String + }, + width: { + type: String + }, + height: { + type: String + }, + nonce: { + type: String + } // Used to trigger rerenders + }; + } + constructor() { + super(); + this.model = null; + this.pickerdata = null; + this.width = 36; + this.height = 36; + this.name = ''; + } + render() { + const { + image_type, + image, + data_uri + } = Object.assign({}, this.pickerdata?.attributes, this.model?.vcard?.attributes); + if (image_type && (image || data_uri)) { + return (0,_templates_avatar_js__WEBPACK_IMPORTED_MODULE_4__["default"])({ + classes: this.getAttribute('class'), + height: this.height, + width: this.width, + image: data_uri || `data:${image_type};base64,${image}`, + image_type, + alt_text: this.name + }); + } + const default_bg_css = `background-color: gray;`; + const css = ` + width: ${this.width}px; + height: ${this.height}px; + font: ${this.width / 2}px Arial; + line-height: ${this.height}px;`; + const author_style = this.model.getAvatarStyle(css); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    ${this.getInitials(this.name)}
    `; + } + + /** + * @param {string} name + * @returns {string} + */ + getInitials(name) { + const names = name?.split(' '); + if (names?.length > 1) { + return names[0].charAt(0).toUpperCase() + names[names.length - 1].charAt(0).toUpperCase(); + } else if (names?.length === 1) { + return names[0].charAt(0).toUpperCase(); + } + return ''; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-avatar', Avatar); + +/***/ }), + +/***/ "./src/shared/avatar/templates/avatar.js": +/*!***********************************************!*\ + !*** ./src/shared/avatar/templates/avatar.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/** + * @param {string} image + * @param {string} image_type + */ +const getImgHref = (image, image_type) => { + return image.startsWith('data:') ? image : `data:${image_type};base64,${image}`; +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + if (o.image) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } else { + return ''; + } +}); + +/***/ }), + +/***/ "./src/shared/chat/baseview.js": +/*!*************************************!*\ + !*** ./src/shared/chat/baseview.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ BaseChatView) +/* harmony export */ }); +/* harmony import */ var _components_element_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ "./src/shared/chat/utils.js"); +/** + * @typedef {import('@converse/skeletor').Model} Model + */ + + + +const { + CHATROOMS_TYPE, + INACTIVE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +class BaseChatView extends _components_element_js__WEBPACK_IMPORTED_MODULE_0__.CustomElement { + static get properties() { + return { + jid: { + type: String + } + }; + } + constructor() { + super(); + this.jid = /** @type {string} */null; + this.model = /** @type {Model} */null; + } + disconnectedCallback() { + super.disconnectedCallback(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxviews.remove(this.jid, this); + } + updated() { + if (this.model && this.jid !== this.model.get('jid')) { + this.stopListening(); + _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.state.chatboxviews.remove(this.model.get('jid'), this); + delete this.model; + this.requestUpdate(); + this.initialize(); + } + } + close(ev) { + ev?.preventDefault?.(); + return this.model.close(ev); + } + maybeFocus() { + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('auto_focus') && this.focus(); + } + focus() { + const textarea_el = this.getElementsByClassName('chat-textarea')[0]; + if (textarea_el && document.activeElement !== textarea_el) { + /** @type {HTMLTextAreaElement} */textarea_el.focus(); + } + return this; + } + getBottomPanel() { + if (this.model.get('type') === CHATROOMS_TYPE) { + return this.querySelector('converse-muc-bottom-panel'); + } else { + return this.querySelector('converse-chat-bottom-panel'); + } + } + getMessageForm() { + if (this.model.get('type') === CHATROOMS_TYPE) { + return this.querySelector('converse-muc-message-form'); + } else { + return this.querySelector('converse-message-form'); + } + } + + /** + * Scrolls the chat down. + * + * This method will always scroll the chat down, regardless of + * whether the user scrolled up manually or not. + * @param { Event } [ev] - An optional event that is the cause for needing to scroll down. + */ + scrollDown(ev) { + ev?.preventDefault?.(); + ev?.stopPropagation?.(); + if (this.model.ui.get('scrolled')) { + this.model.ui.set({ + 'scrolled': false + }); + } + (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.onScrolledDown)(this.model); + } + onWindowStateChanged() { + if (document.hidden) { + this.model.setChatState(INACTIVE, { + 'silent': true + }); + } else { + if (!this.model.isHidden()) { + this.model.clearUnreadMsgCounter(); + } + } + } +} + +/***/ }), + +/***/ "./src/shared/chat/chat-content.js": +/*!*****************************************!*\ + !*** ./src/shared/chat/chat-content.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ChatContent) +/* harmony export */ }); +/* harmony import */ var _message_history__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./message-history */ "./src/shared/chat/message-history.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var _components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var _styles_chat_content_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./styles/chat-content.scss */ "./src/shared/chat/styles/chat-content.scss"); + + + + + + + +class ChatContent extends _components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + constructor() { + super(); + this.model = null; + } + static get properties() { + return { + model: { + type: Object + } + }; + } + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener('scroll', _utils_js__WEBPACK_IMPORTED_MODULE_5__.markScrolled); + } + connectedCallback() { + super.connectedCallback(); + this.addEventListener('scroll', _utils_js__WEBPACK_IMPORTED_MODULE_5__.markScrolled); + } + async initialize() { + await this.model.initialized; + this.listenTo(this.model.messages, 'add', () => this.requestUpdate()); + this.listenTo(this.model.messages, 'change', () => this.requestUpdate()); + this.listenTo(this.model.messages, 'remove', () => this.requestUpdate()); + this.listenTo(this.model.messages, 'rendered', () => this.requestUpdate()); + 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); + this.requestUpdate(); + } + render() { + if (!this.model) { + return ''; + } + // This element has "flex-direction: reverse", so elements here are + // shown in reverse order. + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`
    ${this.model.getNotificationsText()}
    ${this.model.ui?.get('chat-content-spinner-top') ? (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_1__["default"])() : ''}`; + } + scrollDown() { + if (this.model.ui.get('scrolled')) { + return; + } + if (this.scrollTo) { + const behavior = this.scrollTop ? 'smooth' : 'auto'; + this.scrollTo({ + 'top': 0, + behavior + }); + } else { + this.scrollTop = 0; + } + /** + * Triggered once the converse-chat-content element has been scrolled down to the bottom. + * @event _converse#chatBoxScrolledDown + * @type {object} + * @property { _converse.ChatBox | _converse.ChatRoom } chatbox - The chat model + * @example _converse.api.listen.on('chatBoxScrolledDown', obj => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.trigger('chatBoxScrolledDown', { + 'chatbox': this.model + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-chat-content', ChatContent); + +/***/ }), + +/***/ "./src/shared/chat/emoji-dropdown.js": +/*!*******************************************!*\ + !*** ./src/shared/chat/emoji-dropdown.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ EmojiDropdown) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var shared_components_dropdown_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/dropdown.js */ "./src/shared/components/dropdown.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); + + + + + +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.constants; +const { + initStorage +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u; +class EmojiDropdown extends shared_components_dropdown_js__WEBPACK_IMPORTED_MODULE_3__["default"] { + static get properties() { + return { + icon_classes: { + type: String + }, + items: { + type: Array + }, + model: { + type: Object + } + }; + } + constructor() { + super(); + this.id = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.getUniqueId(); + + // This is an optimization, we lazily render the emoji picker, otherwise tests slow to a crawl. + this.render_emojis = false; + this.state = null; + this.model = null; + this.addEventListener('shown.bs.dropdown', () => this.onShown()); + } + initModel() { + if (!this.init_promise) { + this.init_promise = (async () => { + await _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.emojis.initialize(); + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.session.get('bare_jid'); + const id = `converse.emoji-${bare_jid}-${this.model.get('jid')}`; + this.state = new _converse_headless__WEBPACK_IMPORTED_MODULE_1__.EmojiPicker({ + id + }); + initStorage(this.state, id); + await new Promise(resolve => this.state.fetch({ + 'success': resolve, + 'error': resolve + })); + // We never want still be in the autocompleting state upon page load + this.state.set({ + 'autocompleting': null, + 'ac_position': null + }); + })(); + } + return this.init_promise; + } + render() { + const is_groupchat = this.model.get('type') === CHATROOMS_TYPE; + const color = is_groupchat ? '--muc-color' : '--chat-color'; + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } + connectedCallback() { + super.connectedCallback(); + this.render_emojis = false; + } + async onShown() { + await this.initModel(); + if (!this.render_emojis) { + // Trigger an update so that emojis are rendered + this.render_emojis = true; + this.requestUpdate(); + await this.updateComplete; + } + setTimeout(() => /** @type {HTMLInputElement} */this.querySelector('.emoji-search')?.focus()); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-emoji-dropdown', EmojiDropdown); + +/***/ }), + +/***/ "./src/shared/chat/emoji-picker-content.js": +/*!*************************************************!*\ + !*** ./src/shared/chat/emoji-picker-content.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ EmojiPickerContent) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _templates_emoji_picker_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/emoji-picker.js */ "./src/shared/chat/templates/emoji-picker.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! shared/autocomplete/utils.js */ "./src/shared/autocomplete/utils.js"); +/** + * @typedef {module:emoji-picker.EmojiPicker} EmojiPicker + */ + + + + + + +const { + sizzle +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +class EmojiPickerContent extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + static get properties() { + return { + 'search_results': { + type: Array + }, + 'current_skintone': { + type: String + }, + 'model': { + type: Object + }, + 'query': { + type: String + } + }; + } + constructor() { + super(); + this.model = null; + this.current_skintone = null; + this.query = null; + this.search_results = null; + } + render() { + const props = { + 'current_skintone': this.current_skintone, + 'insertEmoji': /** @param {MouseEvent} ev */ev => this.insertEmoji(ev), + 'query': this.query, + 'search_results': this.search_results, + 'shouldBeHidden': /** @param {string} shortname */shortname => this.shouldBeHidden(shortname) + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${(0,_templates_emoji_picker_js__WEBPACK_IMPORTED_MODULE_3__.tplSearchResults)(props)} ${(0,_templates_emoji_picker_js__WEBPACK_IMPORTED_MODULE_3__.tplAllEmojis)(props)}
    `; + } + firstUpdated() { + this.initIntersectionObserver(); + } + initIntersectionObserver() { + if (!window.IntersectionObserver) { + return; + } + if (this.observer) { + this.observer.disconnect(); + } else { + const options = { + root: this.querySelector('.emoji-picker__lists'), + threshold: [0.1] + }; + const handler = ev => this.setCategoryOnVisibilityChange(ev); + this.observer = new IntersectionObserver(handler, options); + } + sizzle('.emoji-picker', this).forEach(a => this.observer.observe(a)); + } + setCategoryOnVisibilityChange(entries) { + const selected = /** @type {EmojiPicker} */this.parentElement.navigator.selected; + const intersection_with_selected = entries.filter(i => i.target.contains(selected)).pop(); + let current; + // Choose the intersection that contains the currently selected + // element, or otherwise the one with the largest ratio. + if (intersection_with_selected) { + current = intersection_with_selected; + } else { + current = entries.reduce((p, c) => c.intersectionRatio >= (p?.intersectionRatio || 0) ? c : p, null); + } + if (current && current.isIntersecting) { + const category = current.target.getAttribute('data-category'); + if (category !== this.model.get('current_category')) { + /** @type {EmojiPicker} */this.parentElement.preserve_scroll = true; + _converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.safeSave(this.model, { + 'current_category': category + }); + } + } + } + + /** + * @param {MouseEvent} ev + */ + insertEmoji(ev) { + ev.preventDefault(); + ev.stopPropagation(); + const target = /** @type {HTMLElement} */ev.target; + const emoji_el = target.nodeName === 'IMG' ? target.parentElement : target; + /** @type EmojiPicker */ + this.parentElement.selectEmoji(emoji_el.getAttribute('data-emoji')); + } + + /** + * @param {string} shortname + */ + shouldBeHidden(shortname) { + // Helper method for the template which decides whether an + // emoji should be hidden, based on which skin tone is + // currently being applied. + if (shortname.includes('_tone')) { + if (!this.current_skintone || !shortname.includes(this.current_skintone)) { + return true; + } + } else { + if (this.current_skintone && (0,_utils_js__WEBPACK_IMPORTED_MODULE_4__.getTonedEmojis)().includes(shortname)) { + return true; + } + } + if (this.query && !(0,shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_5__.FILTER_CONTAINS)(shortname, this.query)) { + return true; + } + return false; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-emoji-picker-content', EmojiPickerContent); + +/***/ }), + +/***/ "./src/shared/chat/emoji-picker.js": +/*!*****************************************!*\ + !*** ./src/shared/chat/emoji-picker.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ EmojiPicker) +/* harmony export */ }); +/* harmony import */ var lodash_es_debounce__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lodash-es/debounce */ "./node_modules/lodash-es/debounce.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_dom_navigator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/dom-navigator */ "./src/shared/dom-navigator.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/autocomplete/utils.js */ "./src/shared/autocomplete/utils.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var _templates_emoji_picker_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./templates/emoji-picker.js */ "./src/shared/chat/templates/emoji-picker.js"); +/* harmony import */ var _emoji_picker_content_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./emoji-picker-content.js */ "./src/shared/chat/emoji-picker-content.js"); +/* harmony import */ var _emoji_dropdown_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./emoji-dropdown.js */ "./src/shared/chat/emoji-dropdown.js"); +/* harmony import */ var _styles_emoji_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styles/emoji.scss */ "./src/shared/chat/styles/emoji.scss"); +/** + * @module emoji-picker + * @typedef {module:dom-navigator.DOMNavigatorOptions} DOMNavigatorOptions + * @typedef {module:dom-navigator.DOMNavigatorDirection} DOMNavigatorDirection + */ + + + + + + + + + + +const { + KEYCODES +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; +class EmojiPicker extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + static get properties() { + return { + current_category: { + type: String, + 'reflect': true + }, + current_skintone: { + type: String, + 'reflect': true + }, + model: { + type: Object + }, + query: { + type: String, + 'reflect': true + }, + state: { + type: Object + }, + // This is an optimization, we lazily render the emoji picker, otherwise tests slow to a crawl. + render_emojis: { + type: Boolean + } + }; + } + constructor() { + super(); + this.state = null; + this.model = null; + this.query = ''; + this.render_emojis = null; + this._search_results = []; + this.debouncedFilter = (0,lodash_es_debounce__WEBPACK_IMPORTED_MODULE_9__["default"])( /** @param {HTMLInputElement} input */input => this.state.set({ + 'query': input.value + }), 250); + } + initialize() { + super.initialize(); + this.dropdown = this.closest('converse-emoji-dropdown'); + } + firstUpdated(changed) { + super.firstUpdated(changed); + this.listenTo(this.state, 'change', o => this.onModelChanged(o.changed)); + this.initArrowNavigation(); + } + get search_results() { + return this._search_results; + } + set search_results(value) { + this._search_results = value; + this.requestUpdate(); + } + render() { + return (0,_templates_emoji_picker_js__WEBPACK_IMPORTED_MODULE_5__.tplEmojiPicker)(this, { + current_category: this.current_category, + current_skintone: this.current_skintone, + onCategoryPicked: ev => this.chooseCategory(ev), + onSearchInputFocus: () => this.disableArrowNavigation(), + onSearchInputKeyDown: ev => this.onSearchInputKeyDown(ev), + onSkintonePicked: ev => this.chooseSkinTone(ev), + query: this.query, + search_results: this.search_results, + render_emojis: this.render_emojis, + sn2Emoji: /** @param {string} sn */sn => _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.shortnamesToEmojis(this.getTonedShortname(sn)) + }); + } + updated(changed) { + changed.has('query') && this.updateSearchResults(changed); + changed.has('current_category') && this.setScrollPosition(); + } + onModelChanged(changed) { + if ('current_category' in changed) this.current_category = changed.current_category; + if ('current_skintone' in changed) this.current_skintone = changed.current_skintone; + if ('query' in changed) this.query = changed.query; + } + setScrollPosition() { + if (this.preserve_scroll) { + this.preserve_scroll = false; + return; + } + const el = this.querySelector('.emoji-lists__container--browse'); + const heading = this.querySelector(`#emoji-picker-${this.current_category}`); + if (heading instanceof HTMLElement) { + // +4 due to 2px padding on list elements + el.scrollTop = heading.offsetTop - heading.offsetHeight * 3 + 4; + } + } + updateSearchResults(changed) { + const old_query = changed.get('query'); + const contains = shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_3__.FILTER_CONTAINS; + if (this.query) { + if (this.query === old_query) { + return this.search_results; + } else if (old_query && this.query.includes(old_query)) { + this.search_results = this.search_results.filter(e => contains(e.sn, this.query)); + } else { + this.search_results = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.list.filter(e => contains(e.sn, this.query)); + } + } else if (this.search_results.length) { + // Avoid re-rendering by only setting to new empty array if it wasn't empty before + this.search_results = []; + } + } + registerEvents() { + this.onGlobalKeyDown = ev => this.#onGlobalKeyDown(ev); + this.dropdown.addEventListener('hide.bs.dropdown', () => this.onDropdownHide()); + const body = document.querySelector('body'); + body.addEventListener('keydown', this.onGlobalKeyDown); + } + connectedCallback() { + super.connectedCallback(); + this.registerEvents(); + } + disconnectedCallback() { + const body = document.querySelector('body'); + body.removeEventListener('keydown', this.onGlobalKeyDown); + this.disableArrowNavigation(); + super.disconnectedCallback(); + } + + /** + * @param {KeyboardEvent} ev + */ + #onGlobalKeyDown(ev) { + if (!this.navigator) return; + if (ev.keyCode === KEYCODES.ENTER && _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.isVisible(this)) { + this.onEnterPressed(ev); + } else if (ev.keyCode === KEYCODES.DOWN_ARROW && !this.navigator.enabled && _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.isVisible(this)) { + this.enableArrowNavigation(ev); + } + } + onDropdownHide() { + this.disableArrowNavigation(); + this.dispatchEvent(new CustomEvent('emojipickerblur', { + bubbles: true + })); + } + + /** + * @param {HTMLElement} el + */ + setCategoryForElement(el) { + const old_category = this.current_category; + const category = el?.getAttribute('data-category') || old_category; + if (old_category !== category) { + this.state.save({ + 'current_category': category + }); + } + } + + /** + * @param {string} value + */ + selectEmoji(value) { + const autocompleting = this.state.get('autocompleting'); + const ac_position = this.state.get('ac_position'); + this.state.set({ + 'autocompleting': null, + 'query': '', + 'ac_position': null + }); + this.disableArrowNavigation(); + const jid = this.model.get('jid'); + const options = { + 'bubbles': true, + 'detail': { + value, + autocompleting, + ac_position, + jid + } + }; + this.dispatchEvent(new CustomEvent("emojiSelected", options)); + } + + /** + * @param {MouseEvent} ev + */ + chooseSkinTone(ev) { + ev.preventDefault(); + ev.stopPropagation(); + const target = /** @type {Element} */ev.target; + const el = target.nodeName === 'IMG' ? target.parentElement : target; + const skintone = el.getAttribute("data-skintone").trim(); + if (this.current_skintone === skintone) { + this.state.save({ + 'current_skintone': '' + }); + } else { + this.state.save({ + 'current_skintone': skintone + }); + } + } + + /** + * @param {MouseEvent} ev + */ + chooseCategory(ev) { + ev.preventDefault && ev.preventDefault(); + ev.stopPropagation && ev.stopPropagation(); + const target = /** @type {Element} */ev.target ?? ev.relatedTarget; + const el = target.matches('li') ? target : _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u.ancestor(target, 'li'); + this.setCategoryForElement(el); + this.navigator.select(el); + !this.navigator.enabled && this.navigator.enable(); + } + + /** + * @param {KeyboardEvent} ev + */ + onSearchInputKeyDown(ev) { + const target = /** @type {HTMLInputElement} */ev.target; + if (ev.keyCode === KEYCODES.TAB) { + if (target.value) { + ev.preventDefault(); + const match = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.shortnames.find(sn => (0,shared_autocomplete_utils_js__WEBPACK_IMPORTED_MODULE_3__.FILTER_CONTAINS)(sn, target.value)); + match && this.state.set({ + 'query': match + }); + } else if (!this.navigator.enabled) { + this.enableArrowNavigation(ev); + } + } else if (ev.keyCode === KEYCODES.DOWN_ARROW && !this.navigator.enabled) { + this.enableArrowNavigation(ev); + } else if (ev.keyCode !== KEYCODES.ENTER && ev.keyCode !== KEYCODES.DOWN_ARROW) { + this.debouncedFilter(target); + } + } + + /** + * @param {KeyboardEvent} ev + */ + onEnterPressed(ev) { + ev.preventDefault(); + ev.stopPropagation(); + const target = /** @type {HTMLInputElement} */ev.target; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.shortnames.includes(target.value)) { + this.selectEmoji(target.value); + } else if (this.search_results.length === 1) { + this.selectEmoji(this.search_results[0].sn); + } else if (this.navigator.selected && this.navigator.selected.matches('.insert-emoji')) { + this.selectEmoji(this.navigator.selected.getAttribute('data-emoji')); + } else if (this.navigator.selected && this.navigator.selected.matches('.emoji-category')) { + this.chooseCategory(new MouseEvent('click', { + relatedTarget: this.navigator.selected + })); + } + } + + /** + * @param {string} shortname + */ + getTonedShortname(shortname) { + if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_4__.getTonedEmojis)().includes(shortname) && this.current_skintone) { + return `${shortname.slice(0, shortname.length - 1)}_${this.current_skintone}:`; + } + return shortname; + } + initArrowNavigation() { + if (!this.navigator) { + const default_selector = 'li:not(.hidden):not(.emoji-skintone), .emoji-search'; + const options = /** @type DOMNavigatorOptions */{ + jump_to_picked: '.emoji-category', + jump_to_picked_selector: '.emoji-category.picked', + jump_to_picked_direction: shared_dom_navigator__WEBPACK_IMPORTED_MODULE_1__["default"].DIRECTION.down, + picked_selector: '.picked', + scroll_container: this.querySelector('.emoji-picker__lists'), + getSelector: /** @param {keyof(DOMNavigatorDirection)} dir */dir => { + if (dir === shared_dom_navigator__WEBPACK_IMPORTED_MODULE_1__["default"].DIRECTION.down) { + const c = this.navigator.selected && this.navigator.selected.getAttribute('data-category'); + return c ? `ul[data-category="${c}"] li:not(.hidden):not(.emoji-skintone), .emoji-search` : default_selector; + } else { + return default_selector; + } + }, + onSelected: /** @param {HTMLElement} el */el => { + if (el.matches('.insert-emoji')) this.setCategoryForElement(el.parentElement); + if (el.matches('.insert-emoji, .emoji-category')) { + /** @type {HTMLInputElement} */el.firstElementChild.focus(); + } + if (el.matches('.emoji-search')) el.focus(); + } + }; + this.navigator = new shared_dom_navigator__WEBPACK_IMPORTED_MODULE_1__["default"](this, options); + } + } + disableArrowNavigation() { + this.navigator?.disable(); + } + + /** + * @param {KeyboardEvent} ev + */ + enableArrowNavigation(ev) { + ev?.preventDefault?.(); + ev?.stopPropagation?.(); + this.disableArrowNavigation(); + this.navigator.enable(); + this.navigator.handleKeydown(ev); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-emoji-picker', EmojiPicker); + +/***/ }), + +/***/ "./src/shared/chat/help-messages.js": +/*!******************************************!*\ + !*** ./src/shared/chat/help-messages.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ChatHelp) +/* harmony export */ }); +/* harmony import */ var shared_components_icons_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/icons.js */ "./src/shared/components/icons.js"); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dompurify */ "./node_modules/dompurify/dist/purify.js"); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_unsafe_html_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/unsafe-html.js */ "./node_modules/lit/directives/unsafe-html.js"); + + + + + + +class ChatHelp extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + constructor() { + super(); + this.messages = []; + this.model = null; + this.type = null; + } + static get properties() { + return { + chat_type: { + type: String + }, + messages: { + type: Array + }, + model: { + type: Object + }, + type: { + type: String + } + }; + } + render() { + const isodate = new Date().toISOString(); + return [(0,lit__WEBPACK_IMPORTED_MODULE_4__.html)``, ...this.messages.map(m => this.renderHelpMessage({ + isodate, + 'markup': dompurify__WEBPACK_IMPORTED_MODULE_1___default().sanitize(m, { + 'ALLOWED_TAGS': ['strong'] + }) + }))]; + } + close() { + this.model.set({ + 'show_help_messages': false + }); + } + renderHelpMessage(o) { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)`
    ${(0,lit_directives_unsafe_html_js__WEBPACK_IMPORTED_MODULE_5__.unsafeHTML)(o.markup)}
    `; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-chat-help', ChatHelp); + +/***/ }), + +/***/ "./src/shared/chat/message-actions.js": +/*!********************************************!*\ + !*** ./src/shared/chat/message-actions.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var utils_url_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utils/url.js */ "./src/utils/url.js"); +/* harmony import */ var _styles_message_actions_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./styles/message-actions.scss */ "./src/shared/chat/styles/message-actions.scss"); +/** + * @typedef {module:headless-shared-parsers.MediaURLMetadata} MediaURLData + */ + + + + + + + +const { + getMediaURLs +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.u; +const { + CHATROOMS_TYPE +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.constants; + +/** + * @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 + */ + +class MessageActions extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__.CustomElement { + static get properties() { + return { + is_retracted: { + type: Boolean + }, + model: { + type: Object + } + }; + } + constructor() { + super(); + this.model = null; + this.is_retracted = null; + } + initialize() { + const settings = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get(); + 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()); + + // This may change the ability to send messages, and therefore the presence of the quote button. + // See plugins/muc-views/bottom-panel.js + this.listenTo(this.model.chatbox.features, 'change:moderated', () => this.requestUpdate()); + this.listenTo(this.model.chatbox.occupants, 'add', this.updateIfOwnOccupant); + this.listenTo(this.model.chatbox.occupants, 'change:role', this.updateIfOwnOccupant); + this.listenTo(this.model.chatbox.session, 'change:connection_status', () => this.requestUpdate()); + } + updateIfOwnOccupant(o) { + const bare_jid = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.session.get('bare_jid'); + if (o.get('jid') === bare_jid) { + this.requestUpdate(); + } + } + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_1__.until)(this.renderActions(), '')}`; + } + async renderActions() { + // This can be called before the model has been added to the collection + // when requesting an update on change:connection_status. + // This line allows us to pass tests. + if (!this.model.collection) return ''; + const buttons = await this.getActionButtons(); + const items = buttons.map(b => MessageActions.getActionsDropdownItem(b)); + if (items.length) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } else { + return ''; + } + } + static getActionsDropdownItem(o) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } + + /** @param {MouseEvent} ev */ + async onMessageEditButtonClicked(ev) { + ev.preventDefault(); + const currently_correcting = this.model.collection.findWhere('correcting'); + // TODO: Use state intead of DOM querying + // Then this code can also be put on the model + const unsent_text = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.u.ancestor(this, '.chatbox')?.querySelector('.chat-textarea')?.value; + if (unsent_text && (!currently_correcting || currently_correcting.getMessageText() !== unsent_text)) { + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('You have an unsent message which will be lost if you continue. Are you sure?')); + if (!result) return; + } + if (currently_correcting !== this.model) { + currently_correcting?.save('correcting', false); + this.model.save('correcting', true); + } else { + this.model.save('correcting', false); + } + } + async onDirectMessageRetractButtonClicked() { + if (this.model.get('sender') !== 'me') { + return _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.error("onMessageRetractButtonClicked called for someone else's message!"); + } + const retraction_warning = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Be aware that other XMPP/Jabber clients (and servers) may ' + 'not yet support retractions and that this message may not ' + 'be removed everywhere.'); + const messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Are you sure you want to retract this message?')]; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_retraction_warning')) { + messages[1] = retraction_warning; + } + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Confirm'), messages); + if (result) { + const chatbox = this.model.collection.chatbox; + chatbox.retractOwnMessage(this.model); + } + } + + /** + * Retract someone else's message in this groupchat. + * @param {string} [reason] - The reason for retracting the message. + */ + async retractOtherMessage(reason) { + const chatbox = this.model.collection.chatbox; + const result = await chatbox.retractOtherMessage(this.model, reason); + if (result === null) { + const err_msg = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)(`A timeout occurred while trying to retract the message`); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Error'), err_msg); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.warn(err_msg); + } else if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.u.isErrorStanza(result)) { + const err_msg = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)(`Sorry, you're not allowed to retract this message.`); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Error'), err_msg); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.warn(err_msg); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.log.error(result); + } + } + async onMUCMessageRetractButtonClicked() { + const retraction_warning = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Be aware that other XMPP/Jabber clients (and servers) may ' + 'not yet support retractions and that this message may not ' + 'be removed everywhere.'); + if (this.model.mayBeRetracted()) { + const messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Are you sure you want to retract this message?')]; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_retraction_warning')) { + messages[1] = retraction_warning; + } + if (await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Confirm'), messages)) { + const chatbox = this.model.collection.chatbox; + chatbox.retractOwnMessage(this.model); + } + } else if (await this.model.mayBeModerated()) { + if (this.model.get('sender') === 'me') { + let messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Are you sure you want to retract this message?')]; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_retraction_warning')) { + messages = [messages[0], retraction_warning, messages[1]]; + } + !!(await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Confirm'), messages)) && this.retractOtherMessage(); + } else { + let messages = [(0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('You are about to retract this message.'), (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('You may optionally include a message, explaining the reason for the retraction.')]; + if (_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('show_retraction_warning')) { + messages = [messages[0], retraction_warning, messages[1]]; + } + const reason = await _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.prompt((0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Message Retraction'), messages, (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Optional reason')); + reason !== false && this.retractOtherMessage(reason); + } + } else { + const err_msg = (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)(`Sorry, you're not allowed to retract this message`); + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.alert('error', (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Error'), err_msg); + } + } + + /** @param {MouseEvent} [ev] */ + onMessageRetractButtonClicked(ev) { + ev?.preventDefault?.(); + const chatbox = this.model.collection.chatbox; + if (chatbox.get('type') === CHATROOMS_TYPE) { + this.onMUCMessageRetractButtonClicked(); + } else { + this.onDirectMessageRetractButtonClicked(); + } + } + + /** @param {MouseEvent} [ev] */ + onMediaToggleClicked(ev) { + ev?.preventDefault?.(); + if (this.hasHiddenMedia(this.getMediaURLs())) { + this.model.save({ + 'hide_url_previews': false, + 'url_preview_transition': 'fade-in' + }); + } else { + 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 = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('render_media'); + if (Array.isArray(render_media)) { + return media_urls.reduce((acc, url) => acc || !(0,utils_url_js__WEBPACK_IMPORTED_MODULE_5__.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 => (0,utils_url_js__WEBPACK_IMPORTED_MODULE_5__.isMediaURLDomainAllowed)(o)); + const url_strings = getMediaURLs(this.model.get('media_urls') || [], this.model.get('body')); + const media_urls = /** @type {MediaURLData[]} */url_strings.filter(o => (0,utils_url_js__WEBPACK_IMPORTED_MODULE_5__.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 ? (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Show media') : (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('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' + }); + } + } + + /** @param {MouseEvent} [ev] */ + async onMessageCopyButtonClicked(ev) { + ev?.preventDefault?.(); + await navigator.clipboard.writeText(this.model.getMessageText()); + } + + /** @param {MouseEvent} [ev] */ + onMessageQuoteButtonClicked(ev) { + ev?.preventDefault?.(); + const { + chatboxviews + } = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.state; + const view = chatboxviews.get(this.model.collection.chatbox.get('jid')); + view?.getMessageForm().insertIntoTextArea(this.model.getMessageText().replaceAll(/^/gm, '> '), false, false, null, '\n'); + } + async getActionButtons() { + const buttons = []; + if (this.model.get('editable')) { + buttons.push( /** @type {MessageActionAttributes} */{ + 'i18n_text': this.model.get('correcting') ? (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Cancel Editing') : (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Edit'), + 'handler': ev => this.onMessageEditButtonClicked(ev), + 'button_class': 'chat-msg__action-edit', + 'icon_class': 'fa fa-pencil-alt', + 'name': 'edit' + }); + } + 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) { + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Retract'), + 'handler': ev => this.onMessageRetractButtonClicked(ev), + 'button_class': 'chat-msg__action-retract', + 'icon_class': 'fas fa-trash-alt', + 'name': 'retract' + }); + } + if (!this.model.collection) { + // While we were awaiting, this model got removed from the + // collection (happens during tests) + return []; + } + this.addMediaRenderingToggle(buttons); + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Copy'), + 'handler': ev => this.onMessageCopyButtonClicked(ev), + 'button_class': 'chat-msg__action-copy', + 'icon_class': 'fas fa-copy', + 'name': 'copy' + }); + if (this.model.collection.chatbox.canPostMessages()) { + buttons.push({ + 'i18n_text': (0,i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Quote'), + 'handler': ev => this.onMessageQuoteButtonClicked(ev), + 'button_class': 'chat-msg__action-quote', + 'icon_class': 'fas fa-quote-right', + 'name': 'quote' + }); + } + + /** + * *Hook* which allows plugins to add more message action buttons + * @event _converse#getMessageActionButtons + * @example + * api.listen.on('getMessageActionButtons', (el, buttons) => { + * buttons.push({ + * 'i18n_text': 'Foo', + * 'handler': ev => alert('Foo!'), + * 'button_class': 'chat-msg__action-foo', + * 'icon_class': 'fa fa-check', + * 'name': 'foo' + * }); + * return buttons; + * }); + */ + return _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.hook('getMessageActionButtons', this, buttons); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-message-actions', MessageActions); + +/***/ }), + +/***/ "./src/shared/chat/message-body.js": +/*!*****************************************!*\ + !*** ./src/shared/chat/message-body.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MessageBody) +/* harmony export */ }); +/* harmony import */ var shared_registry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/registry.js */ "./src/shared/registry.js"); +/* harmony import */ var shared_modals_image_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/modals/image.js */ "./src/shared/modals/image.js"); +/* harmony import */ var shared_directives_rich_text_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/directives/rich-text.js */ "./src/shared/directives/rich-text.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_message_body_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/message-body.scss */ "./src/shared/chat/styles/message-body.scss"); + + + + + + +class MessageBody extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_3__.CustomElement { + static get properties() { + return { + // We make this a string instead of a boolean, since we want to + // distinguish between true, false and undefined states + hide_url_previews: { + type: String + }, + is_me_message: { + type: Boolean + }, + model: { + type: Object + }, + text: { + type: String + } + }; + } + constructor() { + super(); + this.text = null; + this.model = null; + this.hide_url_previews = null; + } + initialize() { + const settings = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get(); + 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()); + } + onImgClick(ev) { + // eslint-disable-line class-methods-use-this + ev.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.modal.show('converse-image-modal', { + 'src': ev.target.src + }, ev); + } + onImgLoad() { + this.dispatchEvent(new CustomEvent('imageLoaded', { + detail: this, + 'bubbles': true + })); + } + render() { + const callback = () => this.model.collection?.trigger('rendered', this.model); + const offset = 0; + const options = { + 'media_urls': this.model.get('media_urls'), + 'mentions': this.model.get('references'), + 'nick': this.model.chatbox.get('nick'), + 'onImgClick': ev => this.onImgClick(ev), + 'onImgLoad': () => this.onImgLoad(), + 'render_styling': !this.model.get('is_unstyled') && _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('allow_message_styling'), + 'show_me_message': true + }; + if (this.hide_url_previews === "false") { + options.embed_audio = true; + options.embed_videos = true; + options.show_images = true; + } else if (this.hide_url_previews === "true") { + options.embed_audio = false; + options.embed_videos = false; + options.show_images = false; + } + return (0,shared_directives_rich_text_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this.text, offset, options, callback); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.elements.define('converse-chat-message-body', MessageBody); + +/***/ }), + +/***/ "./src/shared/chat/message-history.js": +/*!********************************************!*\ + !*** ./src/shared/chat/message-history.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MessageHistory) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directives/repeat.js */ "./node_modules/lit/directives/repeat.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./message */ "./src/shared/chat/message.js"); + + + + + + + +class MessageHistory extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_4__.CustomElement { + /** + * @typedef {import('@converse/headless/types/plugins/chat/message').default} Message + */ + + constructor() { + super(); + this.model = null; + this.messages = []; + } + static get properties() { + return { + model: { + type: Object + }, + messages: { + type: Array + } + }; + } + render() { + const msgs = this.messages; + if (msgs.length) { + return (0,lit_directives_repeat_js__WEBPACK_IMPORTED_MODULE_1__.repeat)(msgs, m => m.get('id'), m => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${this.renderMessage(m)}`); + } else { + return ''; + } + } + + /** + * @param {(Message)} model + */ + renderMessage(model) { + if (model.get('dangling_retraction') || model.get('dangling_moderation') || model.get('is_only_key')) { + return ''; + } + const template_hook = model.get('template_hook'); + if (typeof template_hook === 'string') { + const template_promise = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.hook(template_hook, model, ''); + return (0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__.until)(template_promise, ''); + } else { + const template = (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + const day = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getDayIndicator)(model); + return day ? [day, template] : template; + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-message-history', MessageHistory); + +/***/ }), + +/***/ "./src/shared/chat/message-limit.js": +/*!******************************************!*\ + !*** ./src/shared/chat/message-limit.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MessageLimitIndicator) +/* harmony export */ }); +/* harmony import */ var _templates_message_limit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/message-limit.js */ "./src/shared/chat/templates/message-limit.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class MessageLimitIndicator extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + constructor() { + super(); + this.model = null; + } + static get properties() { + return { + model: { + type: Object + } + }; + } + connectedCallback() { + super.connectedCallback(); + this.listenTo(this.model, 'change:draft', () => this.requestUpdate()); + } + render() { + const limit = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('message_limit'); + if (!limit) return ''; + const chars = this.model.get('draft') || ''; + return (0,_templates_message_limit_js__WEBPACK_IMPORTED_MODULE_0__["default"])(limit - chars.length); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-message-limit-indicator', MessageLimitIndicator); + +/***/ }), + +/***/ "./src/shared/chat/message.js": +/*!************************************!*\ + !*** ./src/shared/chat/message.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Message) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _message_actions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./message-actions.js */ "./src/shared/chat/message-actions.js"); +/* harmony import */ var _message_body_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./message-body.js */ "./src/shared/chat/message-body.js"); +/* harmony import */ var shared_components_dropdown_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/components/dropdown.js */ "./src/shared/components/dropdown.js"); +/* harmony import */ var shared_modals_message_versions_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/modals/message-versions.js */ "./src/shared/modals/message-versions.js"); +/* harmony import */ var shared_modals_user_details_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! shared/modals/user-details.js */ "./src/shared/modals/user-details.js"); +/* harmony import */ var shared_registry__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! shared/registry */ "./src/shared/registry.js"); +/* harmony import */ var plugins_muc_views_modals_occupant_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! plugins/muc-views/modals/occupant.js */ "./src/plugins/muc-views/modals/occupant.js"); +/* harmony import */ var _templates_file_progress_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./templates/file-progress.js */ "./src/shared/chat/templates/file-progress.js"); +/* harmony import */ var _templates_info_message_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./templates/info-message.js */ "./src/shared/chat/templates/info-message.js"); +/* harmony import */ var plugins_muc_views_templates_mep_message_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! plugins/muc-views/templates/mep-message.js */ "./src/plugins/muc-views/templates/mep-message.js"); +/* harmony import */ var _templates_message_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./templates/message.js */ "./src/shared/chat/templates/message.js"); +/* harmony import */ var _templates_message_text_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./templates/message-text.js */ "./src/shared/chat/templates/message-text.js"); +/* harmony import */ var _templates_retraction_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./templates/retraction.js */ "./src/shared/chat/templates/retraction.js"); +/* harmony import */ var templates_spinner_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! templates/spinner.js */ "./src/templates/spinner.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); + + + + + + + + + + + + + + + + + +const { + Strophe +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + SUCCESS +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.constants; +class Message extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_15__.CustomElement { + constructor() { + super(); + this.model_with_messages = null; + this.model = null; + } + static get properties() { + return { + model_with_messages: { + type: Object + }, + model: { + type: Object + } + }; + } + async initialize() { + super.initialize(); + await this.model_with_messages.initialized; + await this.model_with_messages.messages.fetched; + const settings = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get(); + 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.model_with_messages, 'change:first_unread_id', () => this.requestUpdate()); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + this.listenTo(this.model, 'contact:change', () => this.requestUpdate()); + this.listenTo(this.model, 'vcard:change', () => this.requestUpdate()); + this.listenTo(this.model, 'occupant:change', () => this.requestUpdate()); + this.listenTo(this.model, 'occupant:add', () => this.requestUpdate()); + this.requestUpdate(); + } + render() { + if (!this.model) { + return ''; + } else if (this.show_spinner) { + return (0,templates_spinner_js__WEBPACK_IMPORTED_MODULE_14__["default"])(); + } else if (this.model.get('file') && this.model.get('upload') !== 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 { + return this.renderChatMessage(); + } + } + renderRetraction() { + return (0,_templates_retraction_js__WEBPACK_IMPORTED_MODULE_13__["default"])(this); + } + renderMessageText() { + return (0,_templates_message_text_js__WEBPACK_IMPORTED_MODULE_12__["default"])(this); + } + renderMEPMessage() { + return (0,plugins_muc_views_templates_mep_message_js__WEBPACK_IMPORTED_MODULE_10__["default"])(this); + } + renderInfoMessage() { + return (0,_templates_info_message_js__WEBPACK_IMPORTED_MODULE_9__["default"])(this); + } + renderFileProgress() { + if (!this.model.file) { + // Can happen when file upload failed and page was reloaded + return ''; + } + return (0,_templates_file_progress_js__WEBPACK_IMPORTED_MODULE_8__["default"])(this); + } + renderChatMessage() { + return (0,_templates_message_js__WEBPACK_IMPORTED_MODULE_11__["default"])(this); + } + shouldShowAvatar() { + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('show_message_avatar') && !this.model.isMeCommand() && ['chat', 'groupchat', 'normal'].includes(this.model.get('type')); + } + onUnfurlAnimationEnd() { + if (this.model.get('url_preview_transition') === 'fade-out') { + this.model.save({ + 'hide_url_previews': true, + 'url_preview_transition': 'fade-in' + }); + } + } + async onRetryClicked() { + this.show_spinner = true; + this.requestUpdate(); + await _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger(this.model.get('retry_event_id'), { + 'synchronous': true + }); + this.model.destroy(); + this.parentElement.removeChild(this); + } + isRetracted() { + return this.model.get('retracted') || this.model.get('moderated') === 'retracted'; + } + hasMentions() { + const is_groupchat = this.model.get('type') === 'groupchat'; + return is_groupchat && this.model.get('sender') === 'them' && this.model_with_messages.isUserMentioned(this.model); + } + getOccupantAffiliation() { + return this.model.occupant?.get('affiliation'); + } + getOccupantRole() { + return this.model.occupant?.get('role'); + } + getExtraMessageClasses() { + 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') { + extra_classes.push(this.getOccupantRole() ?? ''); + extra_classes.push(this.getOccupantAffiliation() ?? ''); + if (this.model.get('sender') === 'them' && this.hasMentions()) { + extra_classes.push('mentioned'); + } + } + this.model.get('correcting') && extra_classes.push('correcting'); + return extra_classes.filter(c => c).join(" "); + } + getRetractionText() { + if (['groupchat', 'mep'].includes(this.model.get('type')) && this.model.get('moderated_by')) { + const retracted_by_mod = this.model.get('moderated_by'); + if (!this.model.mod) { + const { + occupants + } = this.model_with_messages; + this.model.mod = occupants.findOccupant({ + 'jid': retracted_by_mod + }) || occupants.findOccupant({ + 'nick': Strophe.getResourceFromJid(retracted_by_mod) + }); + } + const modname = this.model.mod ? this.model.mod.getDisplayName() : (0,i18n__WEBPACK_IMPORTED_MODULE_16__.__)('A moderator'); + return (0,i18n__WEBPACK_IMPORTED_MODULE_16__.__)('%1$s has removed this message', modname); + } else { + return (0,i18n__WEBPACK_IMPORTED_MODULE_16__.__)('%1$s has removed this message', this.model.getDisplayName()); + } + } + showUserModal(ev) { + if (this.model.get('sender') === 'me') { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.modal.show('converse-profile-modal', { + model: _converse_headless__WEBPACK_IMPORTED_MODULE_0__._converse.state.xmppstatus + }, ev); + } else if (this.model.get('type') === 'groupchat') { + ev.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.modal.show('converse-muc-occupant-modal', { + model: this.model.getOccupant(), + message: this.model + }, ev); + } else { + ev.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.modal.show('converse-user-details-modal', { + model: this.model_with_messages + }, ev); + } + } + showMessageVersionsModal(ev) { + ev.preventDefault(); + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.modal.show('converse-message-versions-modal', { + 'model': this.model + }, ev); + } + toggleSpoilerMessage(ev) { + ev?.preventDefault(); + this.model.save({ + 'is_spoiler_visible': !this.model.get('is_spoiler_visible') + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-chat-message', Message); + +/***/ }), + +/***/ "./src/shared/chat/templates/emoji-picker.js": +/*!***************************************************!*\ + !*** ./src/shared/chat/templates/emoji-picker.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ tplAllEmojis: () => (/* binding */ tplAllEmojis), +/* harmony export */ tplEmojiPicker: () => (/* binding */ tplEmojiPicker), +/* harmony export */ tplSearchResults: () => (/* binding */ tplSearchResults) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env.utils; +const emoji_category = o => { + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
  • ${o.emoji}
  • `; +}; +const emoji_picker_header = o => { + const cats = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('emoji_categories'); + const transform = c => cats[c] ? emoji_category(Object.assign({ + 'category': c, + 'emoji': o.sn2Emoji(cats[c]) + }, o)) : ''; + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
      ${Object.keys(cats).map(transform)}
    `; +}; +const emoji_item = o => { + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
  • ${u.shortnamesToEmojis(o.emoji.sn)}
  • `; +}; +function tplSearchResults(o) { + const i18n_search_results = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Search results'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${i18n_search_results}
      ${o.search_results.map(emoji => emoji_item(Object.assign({ + emoji + }, o)))}
    `; +} +function emojis_for_category(o) { + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${(0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)(_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('emoji_category_labels')[o.category])}
      ${Object.values(_converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.emojis.json[o.category]).map(emoji => emoji_item(Object.assign({ + emoji + }, o)))}
    `; +} +function tplAllEmojis(o) { + const cats = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('emoji_categories'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${Object.keys(cats).map(c => cats[c] ? emojis_for_category(Object.assign({ + 'category': c + }, o)) : '')}`; +} +function skintone_emoji(o, skintone, skintone_emoji) { + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
  • ${u.shortnamesToEmojis(skintone_emoji)}
  • `; +} + +/** + * @param {import('../emoji-picker').default} el + * @param {Object} o + */ +function tplEmojiPicker(el, o) { + const i18n_search = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Search'); + const skintones = { + "tone1": ":raised_hand_tone1:", + "tone2": ":raised_hand_tone2:", + "tone3": ":raised_hand_tone3:", + "tone4": ":raised_hand_tone4:", + "tone5": ":raised_hand_tone5:" + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    ${o.query ? '' : emoji_picker_header(o)}
    ${o.render_emojis ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}
    Skin tone:
      ${Object.keys(skintones).map(k => skintone_emoji(o, k, skintones[k]))}
    `; +} + +/***/ }), + +/***/ "./src/shared/chat/templates/file-progress.js": +/*!****************************************************!*\ + !*** ./src/shared/chat/templates/file-progress.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_avatar_avatar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/avatar/avatar.js */ "./src/shared/avatar/avatar.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + +const { + filesize +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.env; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_uploading = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Uploading file:'); + const filename = el.model.file.name; + const size = filesize(el.model.file.size); + const contact = el.model.occupant || el.model.contact; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ${el.shouldShowAvatar() ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`` : ''}
    ${i18n_uploading} ${filename}, ${size}
    `; +}); + +/***/ }), + +/***/ "./src/shared/chat/templates/info-message.js": +/*!***************************************************!*\ + !*** ./src/shared/chat/templates/info-message.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +const { + dayjs +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const isodate = dayjs(el.model.get('time')).toISOString(); + const i18n_retry = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Retry'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    ${el.model.get('reason') ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${el.model.get('reason')}` : ``} ${el.model.get('error_text') ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${el.model.get('error_text')}` : ``} ${el.model.get('retry_event_id') ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${i18n_retry}` : ''}
    `; +}); + +/***/ }), + +/***/ "./src/shared/chat/templates/message-limit.js": +/*!****************************************************!*\ + !*** ./src/shared/chat/templates/message-limit.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (counter => { + const i18n_chars_remaining = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Message characters remaining'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${counter}`; +}); + +/***/ }), + +/***/ "./src/shared/chat/templates/message-text.js": +/*!***************************************************!*\ + !*** ./src/shared/chat/templates/message-text.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n/index.js */ "./src/i18n/index.js"); +/* harmony import */ var utils_html_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utils/html.js */ "./src/utils/html.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +const tplEditedIcon = el => { + const i18n_edited = (0,i18n_index_js__WEBPACK_IMPORTED_MODULE_0__.__)('This message has been edited'); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +}; +const tplCheckmark = () => { + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_show = (0,i18n_index_js__WEBPACK_IMPORTED_MODULE_0__.__)('Show more'); + const is_groupchat_message = el.model.get('type') === 'groupchat'; + const i18n_show_less = (0,i18n_index_js__WEBPACK_IMPORTED_MODULE_0__.__)('Show less'); + const error_text = el.model.get('error_text') || el.model.get('error'); + const i18n_error = (0,i18n_index_js__WEBPACK_IMPORTED_MODULE_0__.__)('Message delivery failed: "%1$s"', error_text); + const tplSpoilerHint = (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; + 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 (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${el.model.get('is_spoiler') ? tplSpoilerHint : ''} ${el.model.get('subject') ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    ${el.model.get('subject')}
    ` : ''} ${el.model.get('received') && !el.model.isMeCommand() && !is_groupchat_message ? tplCheckmark() : ''} ${el.model.get('edited') ? tplEditedIcon(el) : ''} ${show_oob ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    ${(0,utils_html_js__WEBPACK_IMPORTED_MODULE_1__.getOOBURLMarkup)(el.model.get('oob_url'))}
    ` : ''} ${error_text ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`
    ${i18n_error}
    ` : ''}`; +}); + +/***/ }), + +/***/ "./src/shared/chat/templates/message.js": +/*!**********************************************!*\ + !*** ./src/shared/chat/templates/message.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var shared_avatar_avatar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/avatar/avatar.js */ "./src/shared/avatar/avatar.js"); +/* harmony import */ var shared_chat_unfurl_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/chat/unfurl.js */ "./src/shared/chat/unfurl.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _utils_url_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/url.js */ "./src/utils/url.js"); +/* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../utils/color.js */ "./src/utils/color.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils.js */ "./src/shared/chat/utils.js"); + + + + + + + + +const { + dayjs +} = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.converse.env; + +/** + * @param {import('../message').default} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const i18n_new_messages = (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('New messages'); + const edited = el.model.get('edited'); + const is_first_unread = el.model_with_messages.get('first_unread_id') === el.model.get('id'); + const is_followup = el.model.isFollowup(); + const is_me_message = el.model.isMeCommand(); + const is_retracted = el.isRetracted(); + const msgid = el.model.get('msgid'); + const sender = el.model.get('sender'); + const time = el.model.get('time'); + const contact = el.model.occupant || el.model.contact; + const author_style = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_6__.getAuthorStyle)(contact); + const format = _converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.settings.get('time_format'); + const pretty_time = dayjs(edited || time).format(format); + const hats = (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.getHats)(el.model); + const username = el.model.getDisplayName(); + const should_show_avatar = el.shouldShowAvatar(); + + // The model to use for the avatar. + // Note: it can happen that the contact has not the vcard attribute but the message has. + const avatar_model = contact?.vcard ? contact : el.model; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${is_first_unread ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`

    ${i18n_new_messages}
    ` : ''}
    ${should_show_avatar && !is_followup ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`` : ''}
    ${!is_me_message && !is_followup ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${username} ${hats.map(h => (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${h.title}`)} ${el.model.get('is_encrypted') ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`` : ''}` : ''}
    ${is_me_message ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`  ${is_me_message ? '**' : ''}${username} ` : ''} ${is_retracted ? el.renderRetraction() : el.renderMessageText()}
    ${el.model.get('ogp_metadata')?.map(m => { + if (el.model.get('hide_url_previews') === true) { + return ''; + } + if (!(0,_utils_url_js__WEBPACK_IMPORTED_MODULE_5__.shouldRenderMediaFromURL)(m['og:image'], 'image')) { + return ''; + } + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; + })}
    `; +}); + +/***/ }), + +/***/ "./src/shared/chat/templates/new-day.js": +/*!**********************************************!*\ + !*** ./src/shared/chat/templates/new-day.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`

    `); + +/***/ }), + +/***/ "./src/shared/chat/templates/retraction.js": +/*!*************************************************!*\ + !*** ./src/shared/chat/templates/retraction.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _styles_retraction_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/retraction.scss */ "./src/shared/chat/styles/retraction.scss"); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + const retraction_text = el.isRetracted() ? el.getRetractionText() : null; + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    ${retraction_text}
    ${el.model.get('moderation_reason') ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${el.model.get('moderation_reason')}` : ''}`; +}); + +/***/ }), + +/***/ "./src/shared/chat/templates/toolbar.js": +/*!**********************************************!*\ + !*** ./src/shared/chat/templates/toolbar.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); + + + +function tplSendButton() { + const i18n_send_message = (0,i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Send the message'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)``; +} + +/** + * @param {import('../toolbar').ChatToolbar} el + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (el => { + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__.until)(el.getButtons(), '')} ${el.show_send_button ? tplSendButton() : ''}`; +}); + +/***/ }), + +/***/ "./src/shared/chat/templates/unfurl.js": +/*!*********************************************!*\ + !*** ./src/shared/chat/templates/unfurl.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_components_image_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/image.js */ "./src/shared/components/image.js"); +/* harmony import */ var utils_url_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! utils/url.js */ "./src/utils/url.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + + +const { + getURI, + isGIFURL +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u; + +/** + * @param {string} url + */ +function isValidURL(url) { + // We don't consider relative URLs as valid + return !!getURI(url).host(); +} +function isValidImage(image) { + return image && (0,utils_url_js__WEBPACK_IMPORTED_MODULE_2__.isDomainAllowed)(image, 'allowed_image_domains') && isValidURL(image); +} +const tplUrlWrapper = (o, wrapped_template) => o.url && isValidURL(o.url) && !isGIFURL(o.image) ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${wrapped_template(o)}` : wrapped_template(o); +const tplImage = o => (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => { + const show_image = isValidImage(o.image); + const has_body_info = o.title || o.description || o.url; + if (show_image || has_body_info) { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ${show_image ? tplImage(o) : ''} ${has_body_info ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ${o.title ? tplUrlWrapper(o, o => (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`
    ${o.title}
    `) : ''} ${o.description ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`

    ` : ''} ${o.url ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`

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

    ` : ''}
    ` : ''}
    `; + } else { + return ''; + } +}); + +/***/ }), + +/***/ "./src/shared/chat/toolbar.js": +/*!************************************!*\ + !*** ./src/shared/chat/toolbar.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ChatToolbar: () => (/* binding */ ChatToolbar) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _emoji_picker_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emoji-picker.js */ "./src/shared/chat/emoji-picker.js"); +/* harmony import */ var shared_chat_message_limit_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/chat/message-limit.js */ "./src/shared/chat/message-limit.js"); +/* harmony import */ var _templates_toolbar_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./templates/toolbar.js */ "./src/shared/chat/templates/toolbar.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _styles_toolbar_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styles/toolbar.scss */ "./src/shared/chat/styles/toolbar.scss"); + + + + + + + + + +const Strophe = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.converse.env.Strophe; +class ChatToolbar extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_6__.CustomElement { + static get properties() { + return { + hidden_occupants: { + type: Boolean + }, + is_groupchat: { + type: Boolean + }, + message_limit: { + type: Number + }, + model: { + type: Object + }, + show_call_button: { + type: Boolean + }, + show_emoji_button: { + type: Boolean + }, + show_send_button: { + type: Boolean + }, + show_spoiler_button: { + type: Boolean + } + }; + } + constructor() { + super(); + this.model = null; + this.is_groupchat = null; + this.hidden_occupants = false; + this.show_send_button = false; + this.show_spoiler_button = false; + this.show_call_button = false; + this.show_emoji_button = false; + } + connectedCallback() { + super.connectedCallback(); + this.listenTo(this.model, 'change:composing_spoiler', () => this.requestUpdate()); + } + render() { + return (0,_templates_toolbar_js__WEBPACK_IMPORTED_MODULE_5__["default"])(this); + } + firstUpdated() { + /** + * Triggered once the toolbar has been rendered + * @event _converse#renderToolbar + * @type { ChatToolbar } + * @example _converse.api.listen.on('renderToolbar', this => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.trigger('renderToolbar', this); + } + getButtons() { + const buttons = []; + if (this.show_emoji_button) { + buttons.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``); + } + if (this.show_call_button) { + const color = this.is_groupchat ? '--muc-color' : '--chat-color'; + const i18n_start_call = (0,i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Start a call'); + buttons.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``); + } + const message_limit = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('message_limit'); + if (message_limit) { + buttons.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``); + } + if (this.show_spoiler_button) { + buttons.push(this.getSpoilerButton()); + } + const domain = _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.session.get('domain'); + const http_upload_promise = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.disco.supports(Strophe.NS.HTTPUPLOAD, domain); + buttons.push((0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_1__.until)(http_upload_promise.then(is_supported => this.getHTTPUploadButton(!!is_supported)), '')}`); + + /** + * *Hook* which allows plugins to add more buttons to a chat's toolbar + * @event _converse#getToolbarButtons + * @example + * api.listen.on('getToolbarButtons', (toolbar_el, buttons) { + * buttons.push(html` + * ` + * ); + * return buttons; + * } + */ + return _converse_headless__WEBPACK_IMPORTED_MODULE_2__._converse.api.hook('getToolbarButtons', this, buttons); + } + + /** + * @param {boolean} is_supported + */ + getHTTPUploadButton(is_supported) { + if (is_supported) { + const i18n_choose_file = (0,i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Choose a file to send'); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)` `; + } else { + return ''; + } + } + getSpoilerButton() { + const model = this.model; + if (!this.is_groupchat && !model.presence?.resources.length) { + return; + } + let i18n_toggle_spoiler; + if (model.get('composing_spoiler')) { + i18n_toggle_spoiler = (0,i18n__WEBPACK_IMPORTED_MODULE_7__.__)("Click to write as a normal (non-spoiler) message"); + } else { + i18n_toggle_spoiler = (0,i18n__WEBPACK_IMPORTED_MODULE_7__.__)("Click to write your message as a spoiler"); + } + const color = this.is_groupchat ? '--muc-color' : '--chat-color'; + const markup = (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + if (this.is_groupchat) { + return markup; + } else { + const contact_jid = model.get('jid'); + const spoilers_promise = Promise.all(model.presence.resources.map(r => _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.disco.supports(Strophe.NS.SPOILER, `${contact_jid}/${r.get('name')}`))).then(results => results.reduce((acc, val) => acc && val, true)); + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_1__.until)(spoilers_promise.then(() => markup), '')}`; + } + } + + /** @param {MouseEvent} ev */ + toggleFileUpload(ev) { + ev?.preventDefault?.(); + ev?.stopPropagation?.(); + /** @type {HTMLInputElement} */ + this.querySelector('.fileupload').click(); + } + + /** @param {InputEvent} ev */ + onFileSelection(ev) { + this.model.sendFiles( /** @type {HTMLInputElement} */ev.target.files); + } + + /** @param {MouseEvent} ev */ + toggleComposeSpoilerMessage(ev) { + ev?.preventDefault?.(); + ev?.stopPropagation?.(); + this.model.set('composing_spoiler', !this.model.get('composing_spoiler')); + } + + /** @param {MouseEvent} ev */ + toggleCall(ev) { + ev?.preventDefault?.(); + ev?.stopPropagation?.(); + /** + * When a call button (i.e. with class .toggle-call) on a chatbox has been clicked. + * @event _converse#callButtonClicked + * @type { object } + * @property { Strophe.Connection } connection - The XMPP Connection object + * @property { _converse.ChatBox | _converse.ChatRoom } model + * @example _converse.api.listen.on('callButtonClicked', (connection, model) => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.trigger('callButtonClicked', { + connection: _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.connection.get(), + model: this.model + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-chat-toolbar', ChatToolbar); + +/***/ }), + +/***/ "./src/shared/chat/unfurl.js": +/*!***********************************!*\ + !*** ./src/shared/chat/unfurl.js ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MessageUnfurl) +/* harmony export */ }); +/* harmony import */ var _templates_unfurl_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/unfurl.js */ "./src/shared/chat/templates/unfurl.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_unfurl_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/unfurl.scss */ "./src/shared/chat/styles/unfurl.scss"); + + + + +class MessageUnfurl extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + static get properties() { + return { + description: { + type: String + }, + image: { + type: String + }, + jid: { + type: String + }, + title: { + type: String + }, + url: { + type: String + } + }; + } + constructor() { + super(); + this.jid = null; + this.url = null; + this.title = null; + this.image = null; + this.description = null; + } + initialize() { + const settings = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get(); + this.listenTo(settings, 'change:allowed_image_domains', () => this.requestUpdate()); + this.listenTo(settings, 'change:render_media', () => this.requestUpdate()); + } + render() { + return (0,_templates_unfurl_js__WEBPACK_IMPORTED_MODULE_0__["default"])(Object.assign({ + 'onload': () => this.onImageLoad() + }, { + description: this.description || '', + image: this.image || '', + title: this.title || '', + url: this.url || '' + })); + } + onImageLoad() { + this.dispatchEvent(new CustomEvent('imageLoaded', { + detail: this, + 'bubbles': true + })); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-message-unfurl', MessageUnfurl); + +/***/ }), + +/***/ "./src/shared/chat/utils.js": +/*!**********************************!*\ + !*** ./src/shared/chat/utils.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ addEmojisMarkup: () => (/* binding */ addEmojisMarkup), +/* harmony export */ getDayIndicator: () => (/* binding */ getDayIndicator), +/* harmony export */ getDropdownButtons: () => (/* binding */ getDropdownButtons), +/* harmony export */ getEmojiMarkup: () => (/* binding */ getEmojiMarkup), +/* harmony export */ getHats: () => (/* binding */ getHats), +/* harmony export */ getHeadingDropdownItem: () => (/* binding */ getHeadingDropdownItem), +/* harmony export */ getHeadingStandaloneButton: () => (/* binding */ getHeadingStandaloneButton), +/* harmony export */ getStandaloneButtons: () => (/* binding */ getStandaloneButtons), +/* harmony export */ getTonedEmojis: () => (/* binding */ getTonedEmojis), +/* harmony export */ getUnreadMsgsDisplay: () => (/* binding */ getUnreadMsgsDisplay), +/* harmony export */ markScrolled: () => (/* binding */ markScrolled), +/* harmony export */ onScrolledDown: () => (/* binding */ onScrolledDown), +/* harmony export */ shortnamesToEmojis: () => (/* binding */ shortnamesToEmojis) +/* harmony export */ }); +/* harmony import */ var lodash_es_debounce__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es/debounce */ "./node_modules/lodash-es/debounce.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _templates_new_day_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/new-day.js */ "./src/shared/chat/templates/new-day.js"); +/** + * @typedef {import('../../plugins/chatview/chat.js').default} ChatView + * @typedef {import('../../plugins/muc-views/muc.js').default} MUCView + * @typedef {import('../../plugins/muc-views/occupant').default} MUCOccupantView + * @typedef {import('@converse/headless').Message} Message + * @typedef {import('@converse/headless').MUCMessage} MUCMessage + * @typedef {import('@converse/skeletor').Model} Model + * @typedef {import('lit').TemplateResult} TemplateResult + */ + + + + + +const { + dayjs, + u +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.env; +const { + convertASCII2Emoji, + getShortnameReferences, + getCodePointReferences +} = u; + +/** + * @param {Model} model + */ +function getUnreadMsgsDisplay(model) { + const num_unread = model.get('num_unread') || 0; + return num_unread < 100 ? num_unread : '99+'; +} +async function getHeadingDropdownItem(promise_or_data) { + const data = await promise_or_data; + return data ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${data.i18n_text}` : ''; +} +async function getHeadingStandaloneButton(promise_or_data) { + const data = await promise_or_data; + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)``; +} + +/** + * @param {Promise>} promise + */ +async function getStandaloneButtons(promise) { + const btns = await promise; + return btns.filter(b => b.standalone).map(b => getHeadingStandaloneButton(b)).reverse().map(b => (0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_2__.until)(b, '')); +} + +/** + * @param {Promise>} promise + */ +async function getDropdownButtons(promise) { + const btns = await promise; + const dropdown_btns = btns.filter(b => !b.standalone).map(b => getHeadingDropdownItem(b)); + return dropdown_btns.length ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`` : ''; +} +function onScrolledDown(model) { + if (!model.isHidden()) { + if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.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; + if (hash && model.messages.get(hash.slice(1))) { + history.pushState(null, '', window.location.pathname); + } + } + } +} + +/** + * 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. + */ +const markScrolled = (0,lodash_es_debounce__WEBPACK_IMPORTED_MODULE_4__["default"])( /** @param {Event} ev */ +function _markScrolled(ev) { + let scrolled = true; + const el = /** @type {ChatView|MUCView|MUCOccupantView} */ev.target; + 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 | MUCView } view + * @example _converse.api.listen.on('chatBoxScrolledUp', obj => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.trigger('chatBoxScrolledUp', el); + } + if (el.model.get('scolled') !== scrolled) { + el.model.ui.set({ + scrolled + }); + } +}, 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 {Message} message + * @returns {TemplateResult|undefined} + */ +function getDayIndicator(message) { + const messages = message.collection?.models; + if (!messages) { + return; + } + const idx = messages.indexOf(message); + const prev_message = messages[idx - 1]; + if (!prev_message || dayjs(message.get('time')).isAfter(dayjs(prev_message.get('time')), 'day')) { + const day_date = dayjs(message.get('time')).startOf('day'); + return (0,_templates_new_day_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ + 'type': 'date', + 'time': day_date.toISOString(), + 'datestring': day_date.format("dddd MMM Do YYYY") + }); + } +} + +/** + * @param {MUCMessage} message + */ +function getHats(message) { + if (message.get('type') === 'groupchat') { + const allowed_hats = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.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?.get('hats') || [] : []; + return [...hats, ...vcard_roles, ...affiliation_role_hats]; + } + return []; +} +function unique(arr) { + return [...new Set(arr)]; +} +function getTonedEmojis() { + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.toned) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.toned = unique(Object.values(_converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.json.people).filter(person => person.sn.includes('_tone')).map(person => person.sn.replace(/_tone[1-5]/, ''))); + } + return _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.toned; +} + +/** + * @typedef {object} EmojiMarkupOptions + * @property {boolean} [unicode_only=false] + * @property {boolean} [add_title_wrapper=false] + * + * @param {object} data + * @param {EmojiMarkupOptions} options + */ +function getEmojiMarkup(data, options = { + unicode_only: false, + add_title_wrapper: false +}) { + const emoji = data.emoji; + const shortname = data.shortname; + if (emoji) { + if (options.unicode_only) { + return emoji; + } else if (_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('use_system_emojis')) { + if (options.add_title_wrapper) { + return shortname ? (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${emoji}` : emoji; + } else { + return emoji; + } + } else { + const path = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('emoji_image_path'); + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${emoji}`; + } + } else if (options.unicode_only) { + return shortname; + } else { + const { + url + } = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.converse.emojis.by_sn[shortname]; + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html)`${shortname}`; + } +} +function addEmojisMarkup(text, options) { + let list = [text]; + [...getShortnameReferences(text), ...getCodePointReferences(text)].sort((a, b) => b.begin - a.begin).forEach(ref => { + const text = list.shift(); + const emoji = getEmojiMarkup(ref, options); + if (typeof emoji === 'string') { + list = [text.slice(0, ref.begin) + emoji + text.slice(ref.end), ...list]; + } else { + list = [text.slice(0, ref.begin), emoji, text.slice(ref.end), ...list]; + } + }); + return list; +} + +/** + * Returns an emoji represented by the passed in shortname. + * Scans the passed in text for shortnames and replaces them with + * emoji unicode glyphs or alternatively if it's a custom emoji + * without unicode representation then a lit TemplateResult + * which represents image tag markup is returned. + * + * The shortname needs to be defined in `emojis.json` + * and needs to have either a `cp` attribute for the codepoint, or + * an `url` attribute which points to the source for the image. + * + * @namespace u + * @method u.shortnamesToEmojis + * @param { String } str - String containg the shortname(s) + * @param { Object } options + * @param { Boolean } options.unicode_only - Whether emojis are rendered as + * unicode codepoints. If so, the returned result will be an array + * with containing one string, because the emojis themselves will + * also be strings. If set to false, emojis will be represented by + * lit TemplateResult objects. + * @param { Boolean } options.add_title_wrapper - Whether unicode + * codepoints should be wrapped with a `` element with a + * title, so that the shortname is shown upon hovering with the + * mouse. + * @returns {Array} An array of at least one string, or otherwise + * strings and lit TemplateResult objects. + */ +function shortnamesToEmojis(str, options = { + unicode_only: false, + add_title_wrapper: false +}) { + str = convertASCII2Emoji(str); + return addEmojisMarkup(str, options); +} +Object.assign(u, { + shortnamesToEmojis +}); + +/***/ }), + +/***/ "./src/shared/components/brand-byline.js": +/*!***********************************************!*\ + !*** ./src/shared/components/brand-byline.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ConverseBrandByline: () => (/* binding */ ConverseBrandByline) +/* harmony export */ }); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +class ConverseBrandByline extends _element_js__WEBPACK_IMPORTED_MODULE_0__.CustomElement { + render() { + // eslint-disable-line class-methods-use-this + const is_fullscreen = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.settings.get('view_mode') === 'fullscreen'; + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${is_fullscreen ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${_converse_headless__WEBPACK_IMPORTED_MODULE_1__._converse.VERSION_NAME}

    Open Source XMPP chat client brought to you by Opkode

    Translate it into your own language

    ` : ''}`; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-brand-byline', ConverseBrandByline); + +/***/ }), + +/***/ "./src/shared/components/brand-heading.js": +/*!************************************************!*\ + !*** ./src/shared/components/brand-heading.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ConverseBrandHeading: () => (/* binding */ ConverseBrandHeading) +/* harmony export */ }); +/* harmony import */ var _brand_byline_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./brand-byline.js */ "./src/shared/components/brand-byline.js"); +/* harmony import */ var _brand_logo_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./brand-logo.js */ "./src/shared/components/brand-logo.js"); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit_html_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/html.js */ "./node_modules/lit/html.js"); + + + + + +class ConverseBrandHeading extends _element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + render() { + // eslint-disable-line class-methods-use-this + return (0,lit_html_js__WEBPACK_IMPORTED_MODULE_4__.html)``; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-brand-heading', ConverseBrandHeading); + +/***/ }), + +/***/ "./src/shared/components/brand-logo.js": +/*!*********************************************!*\ + !*** ./src/shared/components/brand-logo.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ConverseBrandLogo: () => (/* binding */ ConverseBrandLogo) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + + + +class ConverseBrandLogo extends _element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + render() { + // eslint-disable-line class-methods-use-this + const is_fullscreen = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.settings.get('view_mode') === 'fullscreen'; + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)` converse.js ${is_fullscreen ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`` : ''}`; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-brand-logo', ConverseBrandLogo); + +/***/ }), + +/***/ "./src/shared/components/dropdown.js": +/*!*******************************************!*\ + !*** ./src/shared/components/dropdown.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Dropdown) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var shared_dom_navigator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shared/dom-navigator.js */ "./src/shared/dom-navigator.js"); +/* harmony import */ var shared_components_dropdownbase_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! shared/components/dropdownbase.js */ "./src/shared/components/dropdownbase.js"); +/* harmony import */ var shared_components_icons_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! shared/components/icons.js */ "./src/shared/components/icons.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _styles_dropdown_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./styles/dropdown.scss */ "./src/shared/components/styles/dropdown.scss"); +/** + * @typedef {module:dom-navigator.DOMNavigatorOptions} DOMNavigatorOptions + */ + + + + + + + + +const { + KEYCODES +} = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.constants; +class Dropdown extends shared_components_dropdownbase_js__WEBPACK_IMPORTED_MODULE_4__["default"] { + static get properties() { + return { + icon_classes: { + type: String + }, + items: { + type: Array + } + }; + } + constructor() { + super(); + this.icon_classes = 'fa fa-bars'; + this.items = []; + this.id = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.u.getUniqueId(); + this.addEventListener('hidden.bs.dropdown', () => this.onHidden()); + this.addEventListener('keyup', ev => this.handleKeyUp(ev)); + } + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } + firstUpdated() { + super.firstUpdated(); + this.initArrowNavigation(); + } + onHidden() { + this.navigator?.disable(); + } + initArrowNavigation() { + if (!this.navigator) { + const options = /** @type DOMNavigatorOptions */{ + 'selector': '.dropdown-item', + 'onSelected': el => el.focus() + }; + this.navigator = new shared_dom_navigator_js__WEBPACK_IMPORTED_MODULE_3__["default"]( /** @type HTMLElement */this.menu, options); + } + } + enableArrowNavigation(ev) { + if (ev) { + ev.preventDefault(); + ev.stopPropagation(); + } + this.navigator.enable(); + this.navigator.select( /** @type HTMLElement */this.menu.firstElementChild); + } + handleKeyUp(ev) { + if (ev.keyCode === KEYCODES.DOWN_ARROW && !this.navigator.enabled) { + this.enableArrowNavigation(ev); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-dropdown', Dropdown); + +/***/ }), + +/***/ "./src/shared/components/dropdownbase.js": +/*!***********************************************!*\ + !*** ./src/shared/components/dropdownbase.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ DropdownBase) +/* harmony export */ }); +/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.esm.js"); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); + + +class DropdownBase extends _element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + firstUpdated(changed) { + super.firstUpdated(changed); + this.menu = this.querySelector('.dropdown-menu'); + this.button = this.querySelector('button'); + this.dropdown = new bootstrap__WEBPACK_IMPORTED_MODULE_0__.Dropdown( /** @type {HTMLElement} */this.button); + } +} + +/***/ }), + +/***/ "./src/shared/components/element.js": +/*!******************************************!*\ + !*** ./src/shared/components/element.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CustomElement: () => (/* binding */ CustomElement) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); + + +class CustomElement extends (0,_converse_skeletor__WEBPACK_IMPORTED_MODULE_1__.EventEmitter)(lit__WEBPACK_IMPORTED_MODULE_0__.LitElement) { + constructor() { + super(); + } + createRenderRoot() { + // Render without the shadow DOM + return this; + } + initialize() { + return null; + } + connectedCallback() { + super.connectedCallback(); + return this.initialize(); + } + disconnectedCallback() { + super.disconnectedCallback(); + this.stopListening(); + } +} + +/***/ }), + +/***/ "./src/shared/components/font-awesome.js": +/*!***********************************************!*\ + !*** ./src/shared/components/font-awesome.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FontAwesome: () => (/* binding */ FontAwesome) +/* harmony export */ }); +/* harmony import */ var _templates_icons_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/icons.js */ "./src/shared/components/templates/icons.js"); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + +class FontAwesome extends _element_js__WEBPACK_IMPORTED_MODULE_1__.CustomElement { + render() { + return (0,_templates_icons_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-fontawesome', FontAwesome); + +/***/ }), + +/***/ "./src/shared/components/gif.js": +/*!**************************************!*\ + !*** ./src/shared/components/gif.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ConverseGIFElement) +/* harmony export */ }); +/* harmony import */ var shared_gif_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/gif/index.js */ "./src/shared/gif/index.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var utils_html_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! utils/html.js */ "./src/utils/html.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _styles_gif_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/gif.scss */ "./src/shared/components/styles/gif.scss"); + + + + + + +class ConverseGIFElement extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.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.src = null; + this.autoplay = false; + this.noloop = false; + this.fallback = 'url'; + this.progress_color = null; + } + initGIF() { + const options = { + 'autoplay': this.autoplay, + 'loop': !this.noloop + }; + if (this.progress_color) { + options['progress_color'] = this.progress_color; + } + this.supergif = new shared_gif_index_js__WEBPACK_IMPORTED_MODULE_0__["default"](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() { + return this.supergif?.load_error && ['url', 'empty'].includes(this.fallback) ? this.renderErrorFallback() : (0,lit__WEBPACK_IMPORTED_MODULE_4__.html)``; + } + renderErrorFallback() { + if (this.fallback === 'url') { + return (0,utils_html_js__WEBPACK_IMPORTED_MODULE_3__.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 if (this.supergif.frames.length > 0) { + // When the user manually clicks play, we turn on looping + this.supergif.options.loop = true; + this.supergif.play(); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-gif', ConverseGIFElement); + +/***/ }), + +/***/ "./src/shared/components/icons.js": +/*!****************************************!*\ + !*** ./src/shared/components/icons.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _styles_icon_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/icon.scss */ "./src/shared/components/styles/icon.scss"); +/** + * @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 _element_js__WEBPACK_IMPORTED_MODULE_0__.CustomElement { + static get properties() { + return { + color: { + type: String + }, + class_name: { + attribute: "class" + }, + css: { + type: String + }, + size: { + type: String + } + }; + } + constructor() { + super(); + this.class_name = ""; + this.css = ""; + this.size = ""; + this.color = ""; + } + getSource() { + return `#icon-${this.class_name.trim().split(" ")[1].replace("fa-", "")}`; + } + getStyles() { + const cssprop = this.color.match(/var\((--.*)\)/)?.[1]; + const color = cssprop ? getComputedStyle(this).getPropertyValue(cssprop) : this.color; + return ` + ${this.size ? `width: ${this.size};` : ''} + ${this.size ? `height: ${this.size};` : ''} + ${color ? `fill: ${color};` : ''} + ${this.css} + `; + } + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)``; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define("converse-icon", ConverseIcon); + +/***/ }), + +/***/ "./src/shared/components/image-picker.js": +/*!***********************************************!*\ + !*** ./src/shared/components/image-picker.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ImagePicker) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/skeletor */ "./node_modules/@converse/skeletor/src/index.js"); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + + +const i18n_profile_picture = (0,i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Click to set a new picture'); +class ImagePicker extends _element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + constructor() { + super(); + this.model = null; + this.width = null; + this.height = null; + this.data = new _converse_skeletor__WEBPACK_IMPORTED_MODULE_1__.Model(); + this.nonce = null; + } + static get properties() { + return { + height: { + type: Number + }, + model: { + type: Object + }, + width: { + type: Number + } + }; + } + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } + + /** + * @param {Event} ev + */ + openFileSelection(ev) { + ev.preventDefault(); + /** @type {HTMLInputElement} */ + this.querySelector('input[type="file"]').click(); + } + + /** + * @param {InputEvent} ev + */ + updateFilePreview(ev) { + const file = /** @type {HTMLInputElement} */ev.target.files[0]; + const reader = new FileReader(); + reader.onloadend = () => { + this.data.set({ + 'data_uri': reader.result, + 'image_type': file.type + }); + this.nonce = new Date().toISOString(); + this.requestUpdate(); + }; + reader.readAsDataURL(file); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.elements.define('converse-image-picker', ImagePicker); + +/***/ }), + +/***/ "./src/shared/components/image.js": +/*!****************************************!*\ + !*** ./src/shared/components/image.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Image) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var templates_gif_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! templates/gif.js */ "./src/templates/gif.js"); +/* harmony import */ var templates_image_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! templates/image.js */ "./src/templates/image.js"); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var utils_url_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! utils/url.js */ "./src/utils/url.js"); + + + + + +const { + filterQueryParamsFromURL, + isGIFURL +} = _converse_headless__WEBPACK_IMPORTED_MODULE_0__.u; +class Image extends _element_js__WEBPACK_IMPORTED_MODULE_3__.CustomElement { + static get properties() { + return { + 'src': { + type: String + }, + 'onImgLoad': { + type: Function + }, + // If specified, image is wrapped in a hyperlink that points to this URL. + 'href': { + type: String + } + }; + } + constructor() { + super(); + this.src = null; + this.href = null; + this.onImgClick = null; + this.onImgLoad = null; + } + render() { + if (isGIFURL(this.src) && (0,utils_url_js__WEBPACK_IMPORTED_MODULE_4__.shouldRenderMediaFromURL)(this.src, 'image')) { + return (0,templates_gif_js__WEBPACK_IMPORTED_MODULE_1__["default"])(filterQueryParamsFromURL(this.src), true); + } else { + return (0,templates_image_js__WEBPACK_IMPORTED_MODULE_2__["default"])({ + 'src': filterQueryParamsFromURL(this.src), + 'href': this.href, + 'onClick': this.onImgClick, + 'onLoad': this.onImgLoad + }); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api.elements.define('converse-image', Image); + +/***/ }), + +/***/ "./src/shared/components/list-filter.js": +/*!**********************************************!*\ + !*** ./src/shared/components/list-filter.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ListFilter) +/* harmony export */ }); +/* harmony import */ var lodash_es_debounce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es/debounce */ "./node_modules/lodash-es/debounce.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_list_filter_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles/list-filter.scss */ "./src/shared/components/styles/list-filter.scss"); + + + + + +/** + * A component that exposes a text input to enable filtering of a list of DOM items. + */ +class ListFilter extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_0__.CustomElement { + constructor() { + super(); + this.items = null; + this.model = null; + this.template = null; + this.promise = Promise.resolve(); + } + static get properties() { + return { + items: { + type: Array + }, + model: { + type: Object + }, + promise: { + type: Promise + }, + template: { + type: Object + } + }; + } + initialize() { + this.liveFilter = (0,lodash_es_debounce__WEBPACK_IMPORTED_MODULE_3__["default"])(ev => this.model.save({ + 'text': ev.target.value + }), 250); + this.listenTo(this.items, "add", () => this.requestUpdate()); + this.listenTo(this.items, "destroy", () => this.requestUpdate()); + this.listenTo(this.items, "remove", () => this.requestUpdate()); + this.listenTo(this.model, 'change', () => { + this.dispatchUpdateEvent(); + this.requestUpdate(); + }); + this.promise.then(() => this.requestUpdate()); + this.requestUpdate(); + } + render() { + return this.shouldBeVisible() ? this.template(this) : ''; + } + dispatchUpdateEvent() { + this.dispatchEvent(new CustomEvent('update', { + 'detail': this.model.changed + })); + } + + /** + * @param {Event} ev + */ + changeChatStateFilter(ev) { + ev && ev.preventDefault(); + const state = /** @type {HTMLInputElement} */this.querySelector('.state-type').value; + this.model.save({ + state + }); + } + + /** + * @param {Event} ev + */ + changeTypeFilter(ev) { + ev && ev.preventDefault(); + const target = /** @type {HTMLInputElement} */ev.target; + const type = /** @type {HTMLElement} */target.closest('converse-icon')?.dataset.type || 'items'; + if (type === 'state') { + const state = /** @type {HTMLInputElement} */this.querySelector('.state-type').value; + this.model.save({ + type, + state + }); + } else { + const text = /** @type {HTMLInputElement} */this.querySelector('.items-filter').value; + this.model.save({ + type, + text + }); + } + } + + /** + * @param {Event} ev + */ + submitFilter(ev) { + ev?.preventDefault(); + this.liveFilter(); + } + + /** + * Returns true if the filter is enabled (i.e. if the user + * has added values to the filter). + * @returns {boolean} + */ + isActive() { + return this.model.get('type') === 'state' || this.model.get('text'); + } + + /** + * @returns {boolean} + */ + shouldBeVisible() { + return this.items?.length >= 5 || this.isActive(); + } + + /** + * @param {Event} ev + */ + clearFilter(ev) { + ev && ev.preventDefault(); + this.model.save({ + 'text': '' + }); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-list-filter', ListFilter); + +/***/ }), + +/***/ "./src/shared/components/message-versions.js": +/*!***************************************************!*\ + !*** ./src/shared/components/message-versions.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MessageVersions: () => (/* binding */ MessageVersions) +/* harmony export */ }); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var i18n_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n/index.js */ "./src/i18n/index.js"); +/* harmony import */ var _styles_message_versions_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/message-versions.scss */ "./src/shared/components/styles/message-versions.scss"); + + + + + +const { + dayjs +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse.env; +const tplOlderVersion = (k, older_versions) => (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    : ${older_versions[k]}

    `; +class MessageVersions extends _element_js__WEBPACK_IMPORTED_MODULE_0__.CustomElement { + static get properties() { + return { + model: { + type: Object + } + }; + } + constructor() { + super(); + this.model = null; + } + render() { + const older_versions = this.model.get('older_versions'); + const keys = Object.keys(older_versions); + return (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`${keys.length ? (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${(0,i18n_index_js__WEBPACK_IMPORTED_MODULE_3__.__)('Older versions')}

    ${keys.map(k => tplOlderVersion(k, older_versions))}` : (0,lit__WEBPACK_IMPORTED_MODULE_2__.html)`

    ${(0,i18n_index_js__WEBPACK_IMPORTED_MODULE_3__.__)('No older versions found')}

    `}

    ${(0,i18n_index_js__WEBPACK_IMPORTED_MODULE_3__.__)('Current version')}

    : ${this.model.getMessageText()}

    `; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-message-versions', MessageVersions); + +/***/ }), + +/***/ "./src/shared/components/rich-text.js": +/*!********************************************!*\ + !*** ./src/shared/components/rich-text.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ RichText) +/* harmony export */ }); +/* harmony import */ var shared_directives_rich_text_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/directives/rich-text.js */ "./src/shared/directives/rich-text.js"); +/* harmony import */ var shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shared/components/element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _styles_rich_text_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/rich-text.scss */ "./src/shared/components/styles/rich-text.scss"); + + + + + +/** + * The RichText custom element allows you to parse transform text into rich DOM elements. + * @example + */ +class RichText extends shared_components_element_js__WEBPACK_IMPORTED_MODULE_1__.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 + }, + nick: { + type: String + }, + offset: { + type: Number + }, + onImgClick: { + type: Function + }, + onImgLoad: { + type: Function + }, + render_styling: { + type: Boolean + }, + show_images: { + type: Boolean + }, + hide_media_urls: { + type: Boolean + }, + show_me_message: { + type: Boolean + }, + text: { + type: String + } + }; + } + constructor() { + super(); + this.nick = null; + this.onImgClick = null; + this.onImgLoad = null; + this.text = null; + 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, + render_styling: this.render_styling, + show_images: this.show_images, + show_me_message: this.show_me_message + }; + return (0,shared_directives_rich_text_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.text, this.offset, options); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.elements.define('converse-rich-text', RichText); + +/***/ }), + +/***/ "./src/shared/components/split-resize.js": +/*!***********************************************!*\ + !*** ./src/shared/components/split-resize.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ SplitResize) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element.js */ "./src/shared/components/element.js"); +/* harmony import */ var _styles_split_resize_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/split-resize.scss */ "./src/shared/components/styles/split-resize.scss"); +/** + * @copyright Nathan Cahill and the Converse.js contributors + * @description Based on the split.js library from Nathan Cahill. + * @license MIT Licence + */ + + + + +const gutterStartDragging = '_a'; +const aGutterSize = '_b'; +const bGutterSize = '_c'; +const HORIZONTAL = 'horizontal'; +const NOOP = () => false; +const global = typeof window !== 'undefined' ? window : null; +class SplitResize extends _element_js__WEBPACK_IMPORTED_MODULE_2__.CustomElement { + initialize() { + super.initialize(); + } + constructor() { + super(); + this.pair = null; + } + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
    `; + } + disconnectedCallback() { + super.disconnectedCallback(); + this.pair.gutter.removeEventListener('mousedown', this.pair[gutterStartDragging]); + this.pair.gutter.removeEventListener('touchstart', this.pair[gutterStartDragging]); + } + + /** + * @param {Map} changed + */ + updated(changed) { + super.updated(changed); + if (!this.pair) { + this.setupSplit([( /** @type {HTMLElement} */this.previousElementSibling), ( /** @type {HTMLElement} */this.nextElementSibling)]); + } + } + + /** + * Helper function gets a property from the properties object, with a default fallback + */ + getOption(options, propName, def) { + const value = options[propName]; + if (value !== undefined) { + return value; + } + return def; + } + getElementStyle(dim, size, gutSize) { + const style = {}; + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_1__.u.isString(size)) { + style[dim] = `calc(${size}% - ${gutSize}px)`; + } else { + style[dim] = size; + } + return style; + } + defaultGutterStyleFn(dim, gutSize) { + return { + [dim]: `${gutSize}px` + }; + } + getGutterSize(gutterSize, isFirst, isLast, gutterAlign) { + if (isFirst) { + if (gutterAlign === 'end') { + return 0; + } + if (gutterAlign === 'center') { + return gutterSize / 2; + } + } else if (isLast) { + if (gutterAlign === 'start') { + return 0; + } + if (gutterAlign === 'center') { + return gutterSize / 2; + } + } + return gutterSize; + } + + /** + * @param {HTMLElement} el + * @param {string} size + * @param {string} gutSize + */ + setElementSize(el, size, gutSize) { + // Allows setting sizes via numbers (ideally), or if you must, + // by string, like '300px'. This is less than ideal, because it breaks + // the fluid layout that `calc(% - px)` provides. You're on your own if you do that, + // make sure you calculate the gutter size by hand. + const style = this.getElementStyle(this.dimension, size, gutSize); + Object.keys(style).forEach(prop => { + // eslint-disable-next-line no-param-reassign + el.style[prop] = style[prop]; + }); + } + getSizes() { + return this.elements.map(element => element.size); + } + + /** + * Supports touch events, but not multitouch, so only the first + * finger `touches[0]` is counted. + * @param {MouseEvent} e + */ + getMousePosition(e) { + if ('touches' in e) return e.touches[0][this.clientAxis]; + return e[this.clientAxis]; + } + + /** + * Actually adjust the size of elements `a` and `b` to `offset` while dragging. + * calc is used to allow calc(percentage + gutterpx) on the whole split instance, + * which allows the viewport to be resized without additional logic. + * Element a's size is the same as offset. b's size is total size - a size. + * Both sizes are calculated from the initial parent percentage, + * then the gutter size is subtracted. + * + * @param {number} offset + */ + adjust(offset) { + const a = this.elements[this.pair.a]; + const b = this.elements[this.pair.b]; + const percentage = a.size + b.size; + a.size = offset / this.pair.size * percentage; + b.size = percentage - offset / this.pair.size * percentage; + this.setElementSize(a.element, a.size, this.pair[aGutterSize]); + this.setElementSize(b.element, b.size, this.pair[bGutterSize]); + } + + /** + * Handles the dragging logic for resizing elements. + * + * The logic is quite simple: + * + * 1. Ignore if the pair is not dragging. + * 2. Get the offset of the event. + * 3. Snap offset to min if within snappable range (within min + snapOffset). + * 4. Actually adjust each element in the pair to offset. + * + * --------------------------------------------------------------------- + * | | <- a.minSize || b.minSize -> | | + * | | | <- this.snapOffset || this.snapOffset -> | | | + * | | | || | | | + * | | | || | | | + * --------------------------------------------------------------------- + * | <- this.start this.size -> | + * + * @param {MouseEvent} e + * @param {object} options + */ + drag(e, options) { + let offset; + const a = this.elements[this.pair.a]; + const b = this.elements[this.pair.b]; + if (!this.pair.dragging) return; + + // Get the offset of the event from the first side of the + // pair `pair.start`. Then offset by the initial position of the + // mouse compared to the gutter size. + offset = this.getMousePosition(e) - this.pair.start + (this.pair[aGutterSize] - this.pair.dragOffset); + if (this.dragInterval > 1) { + offset = Math.round(offset / this.dragInterval) * this.dragInterval; + } + + // If within snapOffset of min or max, set offset to min or max. + // snapOffset buffers a.minSize and b.minSize, so logic is opposite for both. + // Include the appropriate gutter sizes to prevent overflows. + if (offset <= a.minSize + a.snapOffset + this.pair[aGutterSize]) { + offset = a.minSize + this.pair[aGutterSize]; + } else if (offset >= this.pair.size - (b.minSize + b.snapOffset + this.pair[bGutterSize])) { + offset = this.pair.size - (b.minSize + this.pair[bGutterSize]); + } + if (offset >= a.maxSize - a.snapOffset + this.pair[aGutterSize]) { + offset = a.maxSize + this.pair[aGutterSize]; + } else if (offset <= this.pair.size - (b.maxSize - b.snapOffset + this.pair[bGutterSize])) { + offset = this.pair.size - (b.maxSize + this.pair[bGutterSize]); + } + + // Actually adjust the size. + this.adjust(offset); + + // Call the drag callback continously. Don't do anything too intensive + // in pair callback. + this.getOption(options, 'onDrag', NOOP)(this.getSizes()); + } + + /** + * Cache some important sizes when drag starts, so we don't have to do that + * continuously: + * + * `size`: The total size of the pair. First + second + first gutter + second gutter. + * `start`: The leading side of the first element. + * + * ------------------------------------------------ + * | aGutterSize -> ||| | + * | ||| | + * | ||| | + * | ||| <- bGutterSize | + * ------------------------------------------------ + * | <- start size -> | + * + * @param {ResizablePair} pair + */ + calculateSizes(pair) { + // Figure out the parent size minus padding. + const a = this.elements[pair.a].element; + const b = this.elements[pair.b].element; + const aBounds = a.getBoundingClientRect(); + const bBounds = b.getBoundingClientRect(); + pair.size = aBounds[this.dimension] + bBounds[this.dimension] + pair[aGutterSize] + pair[bGutterSize]; + pair.start = aBounds[this.position]; + pair.end = aBounds[this.positionEnd]; + } + + /** + * @param {HTMLElement} el + */ + innerSize(el) { + // Return nothing if getComputedStyle is not supported (< IE9) + // Or if parent el has no layout yet + if (!getComputedStyle) return null; + const computedStyle = getComputedStyle(el); + if (!computedStyle) return null; + let size = el[this.clientSize]; + if (size === 0) return null; + if (this.direction === HORIZONTAL) { + size -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight); + } else { + size -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom); + } + return size; + } + + /** + * When specifying percentage sizes that are less than the computed + * size of the element minus the gutter, the lesser percentages must be increased + * (and decreased from the other elements) to make space for the pixels + * subtracted by the gutters. + */ + trimToMin(sizesToTrim) { + // Try to get inner size of parent element. + // If it's no supported, return original sizes. + const parentSize = this.innerSize(this.parent); + if (parentSize === null) { + return sizesToTrim; + } + if (this.minSizes.reduce((a, b) => a + b, 0) > parentSize) { + return sizesToTrim; + } + + // Keep track of the excess pixels, the amount of pixels over the desired percentage + // Also keep track of the elements with pixels to spare, to decrease after if needed + let excessPixels = 0; + const toSpare = []; + const pixelSizes = sizesToTrim.map((size, i) => { + // Convert requested percentages to pixel sizes + const pixelSize = parentSize * size / 100; + const elementGutterSize = this.getGutterSize(this.gutterSize, i === 0, i === sizesToTrim.length - 1, this.gutterAlign); + const elementMinSize = this.minSizes[i] + elementGutterSize; + + // If element is too smal, increase excess pixels by the difference + // and mark that it has no pixels to spare + if (pixelSize < elementMinSize) { + excessPixels += elementMinSize - pixelSize; + toSpare.push(0); + return elementMinSize; + } + + // Otherwise, mark the pixels it has to spare and return it's original size + toSpare.push(pixelSize - elementMinSize); + return pixelSize; + }); + + // If nothing was adjusted, return the original sizes + if (excessPixels === 0) { + return sizesToTrim; + } + return pixelSizes.map((pixelSize, i) => { + let newPixelSize = pixelSize; + + // While there's still pixels to take, and there's enough pixels to spare, + // take as many as possible up to the total excess pixels + if (excessPixels > 0 && toSpare[i] - excessPixels > 0) { + const takenPixels = Math.min(excessPixels, toSpare[i] - excessPixels); + + // Subtract the amount taken for the next iteration + excessPixels -= takenPixels; + newPixelSize = pixelSize - takenPixels; + } + + // Return the pixel size adjusted as a percentage + return newPixelSize / parentSize * 100; + }); + } + + /** + * stopDragging is very similar to startDragging in reverse. + * @param {Object} options + */ + stopDragging(options) { + const a = this.elements[this.pair.a].element; + const b = this.elements[this.pair.b].element; + if (this.pair.dragging) { + this.getOption(options, 'onDragEnd', NOOP)(this.getSizes()); + } + this.pair.dragging = false; + + // Remove the stored event listeners. This is why we store them. + global.removeEventListener('mouseup', this.pair.stop); + global.removeEventListener('touchend', this.pair.stop); + global.removeEventListener('touchcancel', this.pair.stop); + global.removeEventListener('mousemove', this.pair.move); + global.removeEventListener('touchmove', this.pair.move); + + // Clear bound function references + this.pair.stop = null; + this.pair.move = null; + a.removeEventListener('selectstart', NOOP); + a.removeEventListener('dragstart', NOOP); + b.removeEventListener('selectstart', NOOP); + b.removeEventListener('dragstart', NOOP); + a.style.userSelect = ''; + a.style.pointerEvents = ''; + b.style.userSelect = ''; + b.style.pointerEvents = ''; + this.pair.gutter.style.cursor = ''; + this.pair.parent.style.cursor = ''; + document.body.style.cursor = ''; + } + + /** + * startDragging calls `calculateSizes` to store the initial size in the pair object. + * It also adds event listeners for mouse/touch events, + * and prevents selection while dragging to avoid selecting text. + * @param {MouseEvent} e + * @param {Object} options + */ + startDragging(e, options) { + // Right-clicking can't start dragging. + if ('button' in e && e.button !== 0) { + return; + } + + // Alias frequently used variables to save space. 200 bytes. + const a = this.elements[this.pair.a].element; + const b = this.elements[this.pair.b].element; + + // Call the onDragStart callback. + if (!this.pair.dragging) { + this.getOption(options, 'onDragStart', NOOP)(this.getSizes()); + } + + // Don't actually drag the element. We emulate this in the drag function. + e.preventDefault(); + + // Set the dragging property of the this.pair object. + this.pair.dragging = true; + + // Create two event listeners bound to the same this.pair object and store + // them in the this.pair object. + this.pair.stop = () => this.stopDragging(options); + this.pair.move = /** @param {MouseEvent} e */e => this.drag(e, options); + + // All the binding. `window` gets the stop events in case we drag out of the elements. + global.addEventListener('mouseup', this.pair.stop); + global.addEventListener('touchend', this.pair.stop); + global.addEventListener('touchcancel', this.pair.stop); + global.addEventListener('mousemove', this.pair.move); + global.addEventListener('touchmove', this.pair.move); + + // Disable selection. Disable! + a.addEventListener('selectstart', NOOP); + a.addEventListener('dragstart', NOOP); + b.addEventListener('selectstart', NOOP); + b.addEventListener('dragstart', NOOP); + a.style.userSelect = 'none'; + a.style.pointerEvents = 'none'; + b.style.userSelect = 'none'; + b.style.pointerEvents = 'none'; + + // Set the cursor at multiple levels + this.pair.gutter.style.cursor = this.cursor; + this.pair.parent.style.cursor = this.cursor; + document.body.style.cursor = this.cursor; + + // Cache the initial sizes of the this.pair. + this.calculateSizes(this.pair); + + // Determine the position of the mouse compared to the gutter + this.pair.dragOffset = this.getMousePosition(e) - this.pair.end; + } + + /** + * @param {Object} element + */ + adjustToMin(element) { + this.calculateSizes(this.pair); + this.adjust(this.pair.size - element.minSize - this.pair[bGutterSize]); + } + + /** + * @param {Array} newSizes + */ + setSizes(newSizes) { + const trimmed = this.trimToMin(newSizes); + trimmed.forEach((newSize, i) => { + if (i > 0) { + const a = this.elements[this.pair.a]; + const b = this.elements[this.pair.b]; + a.size = trimmed[i - 1]; + b.size = newSize; + this.setElementSize(a.element, a.size, this.pair[aGutterSize]); + this.setElementSize(b.element, b.size, this.pair[bGutterSize]); + } + }); + } + + /** + * The main function to initialize a split. + * + * Each pair of elements, resizable relative to one another, is handled independently. + * Dragging the gutter between two elements only changes the dimensions of elements in that pair. + * + * A pair object is shaped like this: + * + * @typedef {Object} ResizablePair + * @property {(0|1)} a + * @property {(0|1)} b + * @property {('horizontal'|'vertical')} direction + * @property {boolean} dragging + * @property {number} aMin + * @property {number} bMin + * @property {number} dragOffset + * @property {number} size + * @property {number} start + * @property {number} end + * @property {HTMLElement} gutter + * @property {HTMLElement} parent + * @property {(this: Window, ev: Event) => any} stop + * @property {(this: Window, ev: Event) => any} move + * + * The basic sequence: + * + * 1. Set defaults to something sane. `options` doesn't have to be passed at all. + * 2. Initialize a bunch of strings based on the direction we're splitting. + * A lot of the behavior in the rest of the library is parameterized down to + * rely on CSS strings and classes. + * 3. Define the dragging helper functions, and a few helpers to go with them. + * 4. Loop through the elements while pairing them off. Every pair gets an + * `pair` object and a gutter. + * 5. Actually size the pair elements, insert gutters and attach event listeners. + * + * @param {HTMLElement[]} els + */ + setupSplit(els, options = {}) { + // Allow HTMLCollection to be used as an argument + els = Array.from(els); + + // All DOM elements in the split should have a common parent. We can grab + // the first elements parent and hope users read the docs because the + // behavior will be whacky otherwise. + const firstElement = els[0]; + this.parent = firstElement.parentElement; + + // Standardize minSize and maxSize to an array if it isn't already. + // This allows minSize and maxSize to be passed as a number. + const minSize = this.getOption(options, 'minSize', 100); + this.minSizes = Array.isArray(minSize) ? minSize : els.map(() => minSize); + + // Get other options + const expandToMin = this.getOption(options, 'expandToMin', false); + this.gutterSize = this.getOption(options, 'gutterSize', 5); + this.gutterAlign = this.getOption(options, 'gutterAlign', 'center'); + this.dragInterval = this.getOption(options, 'dragInterval', 1); + this.direction = this.getOption(options, 'direction', HORIZONTAL); + this.cursor = this.getOption(options, 'cursor', this.direction === HORIZONTAL ? 'col-resize' : 'row-resize'); + + // 2. Initialize a bunch of strings based on the direction we're splitting. + // A lot of the behavior in the rest of the library is paramatized down to + // rely on CSS strings and classes. + if (this.direction === HORIZONTAL) { + this.dimension = 'width'; + this.clientAxis = 'clientX'; + this.position = 'left'; + this.positionEnd = 'right'; + this.clientSize = 'clientWidth'; + } else if (this.direction === 'vertical') { + this.dimension = 'height'; + this.clientAxis = 'clientY'; + this.position = 'top'; + this.positionEnd = 'bottom'; + this.clientSize = 'clientHeight'; + } + + // Create pair and element objects. Each pair has an index reference to + // elements `a` and `b` of the pair (first and second elements). + // Loop through the elements while pairing them off. Every pair gets a + // `pair` object and a gutter. + // + // Basic logic: + // + // - Starting with the second element `i > 0`, create `pair` objects with + // `a = i - 1` and `b = i` + // - Set gutter sizes based on the _pair_ being first/last. The first and last + // pair have gutterSize / 2, since they only have one half gutter, and not two. + // - Create gutter elements and add event listeners. + // - Set the size of the elements, minus the gutter sizes. + // + // ----------------------------------------------------------------------- + // | i=0 | i=1 | i=2 | i=3 | + // | | | | | + // | pair 0 pair 1 pair 2 | + // | | | | | + // ----------------------------------------------------------------------- + this.elements = els.map((el, i) => this.createElement(els, el, i, options)); + this.elements.forEach(element => { + const computedSize = element.element.getBoundingClientRect()[this.dimension]; + if (computedSize < element.minSize) { + if (expandToMin) { + this.adjustToMin(element); + } else { + element.minSize = computedSize; + } + } + }); + this.createPair(options); + } + + /** + * @param {HTMLElement[]} els + * @param {HTMLElement} el + * @param {number} i + * @param {object} options + */ + createElement(els, el, i, options) { + // Set default options.sizes to equal percentages of the parent element. + let sizes = this.getOption(options, 'sizes') || els.map(() => 100 / els.length); + // adjust sizes to ensure percentage is within min size and gutter. + sizes = this.trimToMin(sizes); + const maxSize = this.getOption(options, 'maxSize', Infinity); + const maxSizes = Array.isArray(maxSize) ? maxSize : els.map(() => maxSize); + const snapOffset = this.getOption(options, 'snapOffset', 30); + const snapOffsets = Array.isArray(snapOffset) ? snapOffset : els.map(() => snapOffset); + return { + element: el, + size: sizes[i], + minSize: this.minSizes[i], + maxSize: maxSizes[i], + snapOffset: snapOffsets[i], + i + }; + } + + /** + * @param {object} options + */ + createPair(options) { + const parentStyle = getComputedStyle ? getComputedStyle(this.parent) : null; + const parentFlexDirection = parentStyle ? parentStyle.flexDirection : null; + + // Create the pair object with its metadata. + this.pair = /** @type {ResizablePair} */{ + a: 0, + b: 1, + dragging: false, + direction: this.direction, + parent: this.parent + }; + this.pair[aGutterSize] = this.getGutterSize(this.gutterSize, true, false, this.gutterAlign); + this.pair[bGutterSize] = this.getGutterSize(this.gutterSize, false, true, this.gutterAlign); + + // if the parent has a reverse flex-direction, switch the pair elements. + if (parentFlexDirection === 'row-reverse' || parentFlexDirection === 'column-reverse') { + const temp = this.pair.a; + this.pair.a = this.pair.b; + this.pair.b = temp; + } + const gutterElement = /** @type {HTMLElement} */this.firstElementChild; + // Save bound event listener for removal later + this.pair[gutterStartDragging] = e => this.startDragging(e, options); + + // Attach bound event listener + this.addEventListener('mousedown', this.pair[gutterStartDragging]); + this.addEventListener('touchstart', this.pair[gutterStartDragging]); + this.pair.gutter = gutterElement; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_1__.api.elements.define('converse-split-resize', SplitResize); + +/***/ }), + +/***/ "./src/shared/components/templates/icons.js": +/*!**************************************************!*\ + !*** ./src/shared/components/templates/icons.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (() => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)` `); + +/***/ }), + +/***/ "./src/shared/constants.js": +/*!*********************************!*\ + !*** ./src/shared/constants.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ VIEW_PLUGINS: () => (/* binding */ VIEW_PLUGINS) +/* harmony export */ }); +// 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-adhoc-views', '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']; + +/***/ }), + +/***/ "./src/shared/directives/image.js": +/*!****************************************!*\ + !*** ./src/shared/directives/image.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ renderImage: () => (/* binding */ renderImage) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_async_directive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/async-directive.js */ "./node_modules/lit/async-directive.js"); +/* harmony import */ var lit_directive_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directive.js */ "./node_modules/lit/directive.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var utils_html_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! utils/html.js */ "./src/utils/html.js"); + + + + + +const { + URI +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env; +const { + isURLWithImageExtension +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.u; +class ImageDirective extends lit_async_directive_js__WEBPACK_IMPORTED_MODULE_1__.AsyncDirective { + render(src, href, onLoad, onClick) { + return href ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`${this.renderImage(src, href, onLoad, onClick)}` : this.renderImage(src, href, onLoad, onClick); + } + renderImage(src, href, onLoad, onClick) { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``; + } + onError(src, href, onLoad, onClick) { + if (isURLWithImageExtension(src)) { + href && this.setValue((0,utils_html_js__WEBPACK_IMPORTED_MODULE_4__.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 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 = (0,lit_directive_js__WEBPACK_IMPORTED_MODULE_2__.directive)(ImageDirective); + +/***/ }), + +/***/ "./src/shared/directives/rich-text.js": +/*!********************************************!*\ + !*** ./src/shared/directives/rich-text.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit_directive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directive.js */ "./node_modules/lit/directive.js"); +/* harmony import */ var shared_rich_text_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shared/rich-text.js */ "./src/shared/rich-text.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); + + + + + +class RichTextRenderer { + constructor(text, offset, options = {}) { + this.offset = offset; + this.options = options; + this.text = text; + } + async transform() { + const text = new shared_rich_text_js__WEBPACK_IMPORTED_MODULE_2__.RichText(this.text, this.offset, this.options); + try { + await text.addTemplates(); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(e); + } + return text.payload; + } + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${(0,lit_directives_until_js__WEBPACK_IMPORTED_MODULE_4__.until)(this.transform(), (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)`${this.text}`)}`; + } +} +class RichTextDirective extends lit_directive_js__WEBPACK_IMPORTED_MODULE_1__.Directive { + render(text, offset, options, callback) { + // eslint-disable-line class-methods-use-this + const renderer = new RichTextRenderer(text, offset, options); + const result = renderer.render(); + callback?.(); + return result; + } +} +const renderRichText = (0,lit_directive_js__WEBPACK_IMPORTED_MODULE_1__.directive)(RichTextDirective); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (renderRichText); + +/***/ }), + +/***/ "./src/shared/dom-navigator.js": +/*!*************************************!*\ + !*** ./src/shared/dom-navigator.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/html */ "./src/utils/html.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/** + * @module dom-navigator + * @description A class for navigating the DOM with the keyboard + * This module started as a fork of Rubens Mariuzzo's dom-navigator. + * @copyright Rubens Mariuzzo, JC Brand + */ + + +const { + keycodes +} = _converse_headless__WEBPACK_IMPORTED_MODULE_1__.converse; + +/** + * Indicates if a given element is fully visible in the viewport. + * @param { Element } el The element to check. + * @return { Boolean } True if the given element is fully visible in the viewport, otherwise false. + */ +function inViewport(el) { + const rect = el.getBoundingClientRect(); + return rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth; +} + +/** + * Return the absolute offset top of an element. + * @param el {HTMLElement} The element. + * @return {Number} The offset top. + */ +function absoluteOffsetTop(el) { + let offsetTop = 0; + do { + if (!isNaN(el.offsetTop)) { + offsetTop += el.offsetTop; + } + } while (el = /** @type {HTMLElement} */el.offsetParent); + return offsetTop; +} + +/** + * Return the absolute offset left of an element. + * @param el {HTMLElement} The element. + * @return {Number} The offset left. + */ +function absoluteOffsetLeft(el) { + let offsetLeft = 0; + do { + if (!isNaN(el.offsetLeft)) { + offsetLeft += el.offsetLeft; + } + } while (el = /** @type {HTMLElement} */el.offsetParent); + return offsetLeft; +} + +/** + * Adds the ability to navigate the DOM with the arrow keys + * @class DOMNavigator + */ +class DOMNavigator { + /** + * Directions. + * @returns {import('./types').DOMNavigatorDirection} + */ + static get DIRECTION() { + return { + down: 'down', + end: 'end', + home: 'home', + left: 'left', + right: 'right', + up: 'up' + }; + } + + /** + * The default options for the DOM navigator. + * @returns {{ + * home: string[], + * end: string[], + * down: number[], + * getSelector: null, + * jump_to_picked: null, + * jump_to_picked_direction: null, + * jump_to_picked_selector: string, + * left: number[], + * onSelected: null, + * right: number[], + * selected: string, + * selector: string, + * up: number[] + * }} + */ + static get DEFAULTS() { + return { + home: [`${keycodes.SHIFT}+${keycodes.UP_ARROW}`], + end: [`${keycodes.SHIFT}+${keycodes.DOWN_ARROW}`], + up: [keycodes.UP_ARROW], + down: [keycodes.DOWN_ARROW], + left: [keycodes.LEFT_ARROW, `${keycodes.SHIFT}+${keycodes.TAB}`], + right: [keycodes.RIGHT_ARROW, keycodes.TAB], + getSelector: null, + jump_to_picked: null, + jump_to_picked_direction: null, + jump_to_picked_selector: 'picked', + onSelected: null, + selected: 'selected', + selector: 'li' + }; + } + static getClosestElement(els, getDistance) { + const next = els.reduce((prev, curr) => { + const current_distance = getDistance(curr); + if (current_distance < prev.distance) { + return { + distance: current_distance, + element: curr + }; + } + return prev; + }, { + distance: Infinity + }); + return next.element; + } + + /** + * Create a new DOM Navigator. + * @param {HTMLElement} container The container of the element to navigate. + * @param {import('./types').DOMNavigatorOptions} options The options to configure the DOM navigator. + */ + constructor(container, options) { + this.doc = window.document; + this.container = container; + this.scroll_container = options.scroll_container || container; + + /** @type {import('./types').DOMNavigatorOptions} */ + this.options = Object.assign({}, DOMNavigator.DEFAULTS, options); + this.init(); + } + + /** + * Initialize the navigator. + */ + init() { + this.selected = null; + this.keydownHandler = null; + this.elements = {}; + // Create hotkeys map. + this.keys = {}; + this.options.down.forEach(key => this.keys[key] = DOMNavigator.DIRECTION.down); + this.options.end.forEach(key => this.keys[key] = DOMNavigator.DIRECTION.end); + this.options.home.forEach(key => this.keys[key] = DOMNavigator.DIRECTION.home); + this.options.left.forEach(key => this.keys[key] = DOMNavigator.DIRECTION.left); + this.options.right.forEach(key => this.keys[key] = DOMNavigator.DIRECTION.right); + this.options.up.forEach(key => this.keys[key] = DOMNavigator.DIRECTION.up); + } + + /** + * Enable this navigator. + */ + enable() { + this.getElements(); + this.keydownHandler = event => this.handleKeydown(event); + this.doc.addEventListener('keydown', this.keydownHandler); + this.enabled = true; + } + + /** + * Disable this navigator. + */ + disable() { + if (this.keydownHandler) { + this.doc.removeEventListener('keydown', this.keydownHandler); + } + this.unselect(); + this.elements = {}; + this.enabled = false; + } + + /** + * Destroy this navigator removing any event registered and any other data. + */ + destroy() { + this.disable(); + } + + /** + * @param {'down'|'right'|'left'|'up'} direction + * @returns {HTMLElement} + */ + getNextElement(direction) { + let el; + if (direction === DOMNavigator.DIRECTION.home) { + el = this.getElements(direction)[0]; + } else if (direction === DOMNavigator.DIRECTION.end) { + el = Array.from(this.getElements(direction)).pop(); + } else if (this.selected) { + if (direction === DOMNavigator.DIRECTION.right) { + const els = this.getElements(direction); + el = els.slice(els.indexOf(this.selected))[1]; + } else if (direction == DOMNavigator.DIRECTION.left) { + const els = this.getElements(direction); + el = els.slice(0, els.indexOf(this.selected)).pop() || this.selected; + } else if (direction == DOMNavigator.DIRECTION.down) { + const left = this.selected.offsetLeft; + const top = this.selected.offsetTop + this.selected.offsetHeight; + const els = this.elementsAfter(0, top); + const getDistance = el => Math.abs(el.offsetLeft - left) + Math.abs(el.offsetTop - top); + el = DOMNavigator.getClosestElement(els, getDistance); + } else if (direction == DOMNavigator.DIRECTION.up) { + const left = this.selected.offsetLeft; + const top = this.selected.offsetTop - 1; + const els = this.elementsBefore(Infinity, top); + const getDistance = el => Math.abs(left - el.offsetLeft) + Math.abs(top - el.offsetTop); + el = DOMNavigator.getClosestElement(els, getDistance); + } else { + throw new Error("getNextElement: invalid direction value"); + } + } else { + if (direction === DOMNavigator.DIRECTION.right || direction === DOMNavigator.DIRECTION.down) { + // If nothing is selected, we pretend that the first element is + // selected, so we return the next. + el = this.getElements(direction)[1]; + } else { + el = this.getElements(direction)[0]; + } + } + if (this.options.jump_to_picked && el && el.matches(this.options.jump_to_picked) && direction === this.options.jump_to_picked_direction) { + el = this.container.querySelector(this.options.jump_to_picked_selector) || el; + } + return el; + } + + /** + * Select the given element. + * @param {HTMLElement} el The DOM element to select. + * @param {string} [direction] The direction. + */ + select(el, direction) { + if (!el || el === this.selected) { + return; + } + this.unselect(); + direction && this.scrollTo(el, direction); + if (el.matches('input')) { + el.focus(); + } else { + _utils_html__WEBPACK_IMPORTED_MODULE_0__["default"].addClass(this.options.selected, el); + } + this.selected = el; + this.options.onSelected && this.options.onSelected(el); + } + + /** + * Remove the current selection + */ + unselect() { + if (this.selected) { + _utils_html__WEBPACK_IMPORTED_MODULE_0__["default"].removeClass(this.options.selected, this.selected); + delete this.selected; + } + } + + /** + * Scroll the container to an element. + * @param {HTMLElement} el The destination element. + * @param {String} direction The direction of the current navigation. + * @return void. + */ + scrollTo(el, direction) { + if (!this.inScrollContainerViewport(el)) { + const container = this.scroll_container; + if (!container.contains(el)) { + return; + } + switch (direction) { + case DOMNavigator.DIRECTION.left: + container.scrollLeft = el.offsetLeft - container.offsetLeft; + container.scrollTop = el.offsetTop - container.offsetTop; + break; + case DOMNavigator.DIRECTION.up: + container.scrollTop = el.offsetTop - container.offsetTop; + break; + case DOMNavigator.DIRECTION.right: + container.scrollLeft = el.offsetLeft - container.offsetLeft - (container.offsetWidth - el.offsetWidth); + container.scrollTop = el.offsetTop - container.offsetTop - (container.offsetHeight - el.offsetHeight); + break; + case DOMNavigator.DIRECTION.down: + container.scrollTop = el.offsetTop - container.offsetTop - (container.offsetHeight - el.offsetHeight); + break; + } + } else if (!inViewport(el)) { + switch (direction) { + case DOMNavigator.DIRECTION.left: + document.body.scrollLeft = absoluteOffsetLeft(el) - document.body.offsetLeft; + break; + case DOMNavigator.DIRECTION.up: + document.body.scrollTop = absoluteOffsetTop(el) - document.body.offsetTop; + break; + case DOMNavigator.DIRECTION.right: + document.body.scrollLeft = absoluteOffsetLeft(el) - document.body.offsetLeft - (document.documentElement.clientWidth - el.offsetWidth); + break; + case DOMNavigator.DIRECTION.down: + document.body.scrollTop = absoluteOffsetTop(el) - document.body.offsetTop - (document.documentElement.clientHeight - el.offsetHeight); + break; + } + } + } + + /** + * Indicate if an element is in the container viewport. + * @param {HTMLElement} el The element to check. + * @return {Boolean} true if the given element is in the container viewport, otherwise false. + */ + inScrollContainerViewport(el) { + const container = this.scroll_container; + // Check on left side. + if (el.offsetLeft - container.scrollLeft < container.offsetLeft) { + return false; + } + // Check on top side. + if (el.offsetTop - container.scrollTop < container.offsetTop) { + return false; + } + // Check on right side. + if (el.offsetLeft + el.offsetWidth - container.scrollLeft > container.offsetLeft + container.offsetWidth) { + return false; + } + // Check on down side. + if (el.offsetTop + el.offsetHeight - container.scrollTop > container.offsetTop + container.offsetHeight) { + return false; + } + return true; + } + + /** + * Find and store the navigable elements + */ + getElements(direction) { + const selector = this.options.getSelector ? this.options.getSelector(direction) : this.options.selector; + if (!this.elements[selector]) { + this.elements[selector] = Array.from(this.container.querySelectorAll(selector)); + } + return this.elements[selector]; + } + + /** + * Return an array of navigable elements after an offset. + * @param {number} left The left offset. + * @param {number} top The top offset. + * @return {Array} An array of elements. + */ + elementsAfter(left, top) { + return this.getElements(DOMNavigator.DIRECTION.down).filter(el => el.offsetLeft >= left && el.offsetTop >= top); + } + + /** + * Return an array of navigable elements before an offset. + * @param {number} left The left offset. + * @param {number} top The top offset. + * @return {Array} An array of elements. + */ + elementsBefore(left, top) { + return this.getElements(DOMNavigator.DIRECTION.up).filter(el => el.offsetLeft <= left && el.offsetTop <= top); + } + + /** + * Handle the key down event. + * @param {KeyboardEvent} ev - The event object. + */ + handleKeydown(ev) { + const keys = keycodes; + const direction = ev.shiftKey ? this.keys[`${keys.SHIFT}+${ev.which}`] : this.keys[ev.which]; + if (direction) { + ev.preventDefault(); + ev.stopPropagation(); + const next = this.getNextElement(direction); + this.select(next, direction); + } + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DOMNavigator); + +/***/ }), + +/***/ "./src/shared/errors.js": +/*!******************************!*\ + !*** ./src/shared/errors.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IQError: () => (/* binding */ IQError), +/* harmony export */ UserFacingError: () => (/* binding */ UserFacingError) +/* harmony export */ }); +class IQError extends Error { + /** + * @param {string} message + * @param {Element} iq + */ + constructor(message, iq) { + super(message); + this.name = 'IQError'; + this.iq = iq; + } +} +class UserFacingError extends Error { + /** + * @param {string} message + */ + constructor(message) { + super(message); + this.name = 'UserFacingError'; + this.user_facing = true; + } +} + +/***/ }), + +/***/ "./src/shared/gif/index.js": +/*!*********************************!*\ + !*** ./src/shared/gif/index.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ConverseGif) +/* harmony export */ }); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var _converse_openpromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @converse/openpromise */ "./node_modules/@converse/openpromise/openpromise.js"); +/* harmony import */ var gifuct_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gifuct-js */ "./node_modules/gifuct-js/lib/index.js"); + + + +class ConverseGif { + /** + * Creates a new ConverseGif instance + * @param { import('lit').LitElement } 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'); + + // Offscreen canvas with full gif + this.offscreenCanvas = document.createElement('canvas'); + // Offscreen canvas for patches + this.patchCanvas = document.createElement('canvas'); + this.ctx_scaled = false; + this.frames = []; + this.load_error = null; + this.playing = this.options.autoplay; + this.frame_idx = 0; + this.iteration_count = 0; + this.start = null; + this.hovering = null; + this.frameImageData = null; + this.disposal_restore_from_idx = null; + this.initialize(); + } + async initialize() { + if (this.options.width && this.options.height) { + this.setSizes(this.options.width, this.options.height); + } + const data = await this.fetchGIF(this.gif_el.src); + requestAnimationFrame(() => this.handleGIFResponse(data)); + } + 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.renderImage(); + if (this.options.autoplay) { + const delay = this.frames[this.frame_idx]?.delay ?? 0; + setTimeout(() => this.play(), delay); + } + } + + /** + * Gets the index of the frame "up next" + * @returns {number} + */ + getNextFrameNo() { + if (this.frames.length === 0) { + return 0; + } + return (this.frame_idx + 1 + this.frames.length) % this.frames.length; + } + + /** + * 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() { + this.iteration_count++; + this.options.onIterationEnd?.(this); + if (!this.options.loop) { + this.pause(); + return true; + } + return false; + } + + /** + * 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 `renderImage` 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.renderImage`, so + * `renderImage(0)` needs to be called *before* this method, otherwise the + * animation will incorrectly start from frame #1 (this is done in `initPlayer`). + * + * @param { DOMHighResTimeStamp } timestamp - The timestamp as returned by `requestAnimationFrame` + * @param { DOMHighResTimeStamp } 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. + */ + onAnimationFrame(timestamp, previous_timestamp, frame_delay) { + if (!this.playing) { + return; + } + if (timestamp - previous_timestamp < frame_delay) { + this.hovering ? this.drawPauseIcon() : this.renderImage(); + // 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.renderImage(); + const delay = this.frames[this.frame_idx]?.delay || 8; + requestAnimationFrame(ts => this.onAnimationFrame(ts, timestamp, delay)); + } + 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); + } + 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); + } + } + + /** + * Starts parsing the GIF stream data by calling `parseGIF` and passing in + * a map of handler functions. + * @param {ArrayBuffer} data - The GIF file data, as returned by the server + */ + handleGIFResponse(data) { + try { + const gif = (0,gifuct_js__WEBPACK_IMPORTED_MODULE_2__.parseGIF)(data); + this.hdr = gif.header; + this.lsd = gif.lsd; + this.setSizes(this.options.width ?? this.lsd.width, this.options.height ?? this.lsd.height); + this.frames = (0,gifuct_js__WEBPACK_IMPORTED_MODULE_2__.decompressFrames)(gif, true); + } catch (err) { + this.showError(); + } + this.initPlayer(); + !this.options.autoplay && this.drawPlayIcon(); + } + drawError() { + this.ctx.fillStyle = 'black'; + this.ctx.fillRect(0, 0, this.options.width, this.options.height); + this.ctx.strokeStyle = 'red'; + this.ctx.lineWidth = 3; + this.ctx.moveTo(0, 0); + this.ctx.lineTo(this.options.width, this.options.height); + this.ctx.moveTo(0, this.options.height); + this.ctx.lineTo(this.options.width, 0); + this.ctx.stroke(); + } + showError() { + this.load_error = true; + this.hdr = { + width: this.gif_el.width, + height: this.gif_el.height + }; // Fake header. + this.frames = []; + this.drawError(); + this.el.requestUpdate(); + } + manageDisposal(i) { + if (i <= 0) return; + const offscreenContext = this.offscreenCanvas.getContext('2d'); + const disposal = this.frames[i - 1].disposalType; + /* + * 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 (i > 1) { + if (disposal === 3) { + // eslint-disable-next-line no-eq-null + if (this.disposal_restore_from_idx != null) { + offscreenContext.putImageData(this.frames[this.disposal_restore_from_idx].data, 0, 0); + } + } else { + this.disposal_restore_from_idx = i - 1; + } + } + if (disposal === 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 + offscreenContext.clearRect(this.last_frame.dims.left, this.last_frame.dims.top, this.last_frame.dims.width, this.last_frame.dims.height); + } + } + + /** + * Draws a gif frame at a specific index inside the canvas. + * @param {boolean} show_pause_on_hover - The frame index + */ + renderImage(show_pause_on_hover = true) { + if (!this.frames.length) return; + let i = this.frame_idx; + i = parseInt(i.toString(), 10); + if (i > this.frames.length - 1 || i < 0) { + i = 0; + } + this.manageDisposal(i); + const frame = this.frames[i]; + const patchContext = this.patchCanvas.getContext('2d'); + const offscreenContext = this.offscreenCanvas.getContext('2d'); + const dims = frame.dims; + if (!this.frameImageData || dims.width != this.frameImageData.width || dims.height != this.frameImageData.height) { + this.patchCanvas.width = dims.width; + this.patchCanvas.height = dims.height; + this.frameImageData = patchContext.createImageData(dims.width, dims.height); + } + + // set the patch data as an override + this.frameImageData.data.set(frame.patch); + // draw the patch back over the canvas + patchContext.putImageData(this.frameImageData, 0, 0); + offscreenContext.drawImage(this.patchCanvas, dims.left, dims.top); + const imageData = offscreenContext.getImageData(0, 0, this.offscreenCanvas.width, this.offscreenCanvas.height); + this.ctx.putImageData(imageData, 0, 0); + this.ctx.drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height); + if (show_pause_on_hover && this.hovering) { + this.drawPauseIcon(); + } + this.last_frame = frame; + } + + /** + * Start playing the gif + */ + play() { + this.playing = true; + requestAnimationFrame(ts => this.onAnimationFrame(ts, 0, 0)); + } + + /** + * Pause the gif + */ + pause() { + this.playing = false; + requestAnimationFrame(() => this.drawPlayIcon()); + } + drawPauseIcon() { + if (!this.playing) return; + + // Clear the potential play button by re-rendering the current frame + this.renderImage(false); + + // 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(); + } + drawPlayIcon() { + if (this.playing) return; + + // Clear the potential pause button by re-rendering the current frame + this.renderImage(false); + // 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(); + } + getCanvasScale() { + let scale; + if (this.options.max_width && this.hdr && this.lsd.width > this.options.max_width) { + scale = this.options.max_width / this.lsd.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 = (0,_converse_openpromise__WEBPACK_IMPORTED_MODULE_1__.getOpenPromise)(); + const h = new XMLHttpRequest(); + h.open('GET', url, true); + h.responseType = 'arraybuffer'; + h?.overrideMimeType('text/plain; charset=x-user-defined'); + h.onload = () => { + if (h.status != 200) { + this.showError(); + return promise.reject(); + } + promise.resolve(h.response); + }; + h.onprogress = e => e.lengthComputable && this.doShowProgress(e.loaded, e.total, true); + h.onerror = e => { + _converse_headless__WEBPACK_IMPORTED_MODULE_0__.log.error(e); + this.showError(); + }; + h.send(); + return promise; + } +} + +/***/ }), + +/***/ "./src/shared/modals/image.js": +/*!************************************!*\ + !*** ./src/shared/modals/image.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ImageModal) +/* harmony export */ }); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_image_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/image.js */ "./src/shared/modals/templates/image.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var utils_html_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! utils/html.js */ "./src/utils/html.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _styles_image_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./styles/image.scss */ "./src/shared/modals/styles/image.scss"); + + + + + + + +class ImageModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + constructor(options) { + super(options); + this.src = options.src; + } + renderModal() { + return (0,_templates_image_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ + 'src': this.src + }); + } + getModalTitle() { + return (0,lit__WEBPACK_IMPORTED_MODULE_5__.html)`${(0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Image: ')}${(0,utils_html_js__WEBPACK_IMPORTED_MODULE_4__.getFileName)(this.src)}`; + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-image-modal', ImageModal); + +/***/ }), + +/***/ "./src/shared/modals/message-versions.js": +/*!***********************************************!*\ + !*** ./src/shared/modals/message-versions.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MessageVersionsModal) +/* harmony export */ }); +/* harmony import */ var shared_components_message_versions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/components/message-versions.js */ "./src/shared/components/message-versions.js"); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + + + + + +class MessageVersionsModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_1__["default"] { + renderModal() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; + } + getModalTitle() { + // eslint-disable-line class-methods-use-this + return (0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Message versions'); + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_4__.api.elements.define('converse-message-versions-modal', MessageVersionsModal); + +/***/ }), + +/***/ "./src/shared/modals/templates/image.js": +/*!**********************************************!*\ + !*** ./src/shared/modals/templates/image.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (o => (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)``); + +/***/ }), + +/***/ "./src/shared/modals/templates/user-details.js": +/*!*****************************************************!*\ + !*** ./src/shared/modals/templates/user-details.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ tplFooter: () => (/* binding */ tplFooter), +/* harmony export */ tplUserDetailsModal: () => (/* binding */ tplUserDetailsModal) +/* harmony export */ }); +/* harmony import */ var shared_avatar_templates_avatar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shared/avatar/templates/avatar.js */ "./src/shared/avatar/templates/avatar.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var plugins_modal_templates_buttons_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! plugins/modal/templates/buttons.js */ "./src/plugins/modal/templates/buttons.js"); + + + + + +const remove_button = el => { + const i18n_remove_contact = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Remove as contact'); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; +}; +const tplFooter = el => { + const is_roster_contact = el.model.contact !== undefined; + const i18n_refresh = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Refresh'); + const allow_contact_removal = _converse_headless__WEBPACK_IMPORTED_MODULE_2__.api.settings.get('allow_contact_removal'); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; +}; +const tplUserDetailsModal = el => { + const vcard = el.model?.vcard; + const vcard_json = vcard ? vcard.toJSON() : {}; + const o = { + ...el.model.toJSON(), + ...vcard_json + }; + const i18n_address = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('XMPP Address'); + const i18n_email = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Email'); + const i18n_full_name = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Full Name'); + const i18n_nickname = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Nickname'); + const i18n_profile = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('The User\'s Profile Image'); + const i18n_role = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Role'); + const i18n_url = (0,i18n__WEBPACK_IMPORTED_MODULE_1__.__)('URL'); + const avatar_data = { + 'alt_text': i18n_profile, + 'extra_classes': 'mb-3', + 'height': '120', + 'width': '120' + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html)``; +}; + +/***/ }), + +/***/ "./src/shared/modals/user-details.js": +/*!*******************************************!*\ + !*** ./src/shared/modals/user-details.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UserDetailsModal) +/* harmony export */ }); +/* harmony import */ var plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plugins/modal/modal.js */ "./src/plugins/modal/modal.js"); +/* harmony import */ var _templates_user_details_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates/user-details.js */ "./src/shared/modals/templates/user-details.js"); +/* harmony import */ var i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18n */ "./src/i18n/index.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var plugins_rosterview_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! plugins/rosterview/utils.js */ "./src/plugins/rosterview/utils.js"); +/** + * @typedef {import('@converse/headless').ChatBox} ChatBox + */ + + + + + +const u = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.converse.env.utils; +class UserDetailsModal extends plugins_modal_modal_js__WEBPACK_IMPORTED_MODULE_0__["default"] { + initialize() { + super.initialize(); + this.model.rosterContactAdded.then(() => this.registerContactEventHandlers()); + this.listenTo(this.model, 'change', this.render); + this.registerContactEventHandlers(); + /** + * Triggered once the UserDetailsModal has been initialized + * @event _converse#userDetailsModalInitialized + * @type {ChatBox} + * @example _converse.api.listen.on('userDetailsModalInitialized', (chatbox) => { ... }); + */ + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.trigger('userDetailsModalInitialized', this.model); + } + renderModal() { + return (0,_templates_user_details_js__WEBPACK_IMPORTED_MODULE_1__.tplUserDetailsModal)(this); + } + renderModalFooter() { + return (0,_templates_user_details_js__WEBPACK_IMPORTED_MODULE_1__.tplFooter)(this); + } + getModalTitle() { + return this.model.getDisplayName(); + } + registerContactEventHandlers() { + if (this.model.contact !== undefined) { + this.listenTo(this.model.contact, 'change', this.render); + this.listenTo(this.model.contact.vcard, 'change', this.render); + this.model.contact.on('destroy', () => { + delete this.model.contact; + this.render(); + }); + } + } + async refreshContact(ev) { + if (ev && ev.preventDefault) { + ev.preventDefault(); + } + const refresh_icon = this.querySelector('.fa-refresh'); + u.addClass('fa-spin', refresh_icon); + try { + await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.vcard.update(this.model.contact.vcard, true); + } catch (e) { + _converse_headless__WEBPACK_IMPORTED_MODULE_3__.log.fatal(e); + this.alert((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Sorry, something went wrong while trying to refresh'), 'danger'); + } + u.removeClass('fa-spin', refresh_icon); + } + async removeContact(ev) { + ev?.preventDefault?.(); + if (!_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.settings.get('allow_contact_removal')) { + return; + } + const result = await _converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.confirm((0,i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Are you sure you want to remove this contact?")); + if (result) { + setTimeout(() => (0,plugins_rosterview_utils_js__WEBPACK_IMPORTED_MODULE_4__.removeContact)(this.model.contact), 1); + this.modal.hide(); + } + } +} +_converse_headless__WEBPACK_IMPORTED_MODULE_3__.api.elements.define('converse-user-details-modal', UserDetailsModal); + +/***/ }), + +/***/ "./src/shared/registry.js": +/*!********************************!*\ + !*** ./src/shared/registry.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); + +const registry = {}; + +/** + * The "elements" namespace groups methods relevant to registering custom + * HTML elements. + * @namespace api.elements + * @memberOf api + */ +const elements = { + registry, + /** + * Defines a new custom HTML element. + * + * By using this API instead of `customElements.define` from the DOM, + * we can allow custom elements to be overwritten. + * + * Once `converse.initialize()` is called, `api.elements.register()` + * will get called and all custom elements will be registered to the DOM, + * from which point onward they cannot be overwritten. + * + * @method api.elements.define + * @param { string } name + * @param { object } constructor + */ + define(name, constructor) { + this.registry[name] = constructor; + }, + /** + * Registers all previously defined custom HTML elements + * @method api.elements.register + */ + register() { + Object.keys(registry).forEach(name => { + if (!customElements.get(name)) { + customElements.define(name, registry[name]); + } + }); + } +}; +Object.assign(_converse_headless__WEBPACK_IMPORTED_MODULE_0__.api, { + elements +}); + +/***/ }), + +/***/ "./src/shared/rich-text.js": +/*!*********************************!*\ + !*** ./src/shared/rich-text.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RichText: () => (/* binding */ RichText) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_directives_until_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/directives/until.js */ "./node_modules/lit/directives/until.js"); +/* harmony import */ var lit_directive_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/directive.js */ "./node_modules/lit/directive.js"); +/* harmony import */ var _converse_headless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @converse/headless */ "./src/headless/index.js"); +/* harmony import */ var templates_audio_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates/audio.js */ "./src/templates/audio.js"); +/* harmony import */ var templates_gif_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! templates/gif.js */ "./src/templates/gif.js"); +/* harmony import */ var templates_image_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! templates/image.js */ "./src/templates/image.js"); +/* harmony import */ var templates_video_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! templates/video.js */ "./src/templates/video.js"); +/* harmony import */ var _chat_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chat/utils.js */ "./src/shared/chat/utils.js"); +/* harmony import */ var _utils_html_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/html.js */ "./src/utils/html.js"); +/* harmony import */ var utils_url_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! utils/url.js */ "./src/utils/url.js"); +/** + * @typedef {module:headless-shared-parsers.MediaURLMetadata} MediaURLMetadata + * @typedef {module:headless-shared-parsers.MediaURLMetadata} MediaURLData + */ + + + + + + + + + + + +const { + convertASCII2Emoji, + filterQueryParamsFromURL, + getCodePointReferences, + getMediaURLs, + getMediaURLsMetadata, + getShortnameReferences, + isAudioURL, + isGIFURL, + isImageURL, + isVideoURL +} = _converse_headless__WEBPACK_IMPORTED_MODULE_3__.u; + +/** + * @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 {number} 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