From 8fabf77b2a7720a357c63817c07035a9908818a0 Mon Sep 17 00:00:00 2001 From: Gitea Date: Wed, 10 Nov 2021 17:53:50 +0100 Subject: Update --- Neutron-trunk/resources/.htaccess | 4 - Neutron-trunk/resources/css/admin.css | 725 ---------- Neutron-trunk/resources/css/admin_v2/chromium.css | 8 - Neutron-trunk/resources/css/admin_v2/iframe.css | 17 - Neutron-trunk/resources/css/admin_v2/inner.css | 90 -- Neutron-trunk/resources/css/admin_v2/main.css | 23 - .../resources/css/admin_v2/navigation.css | 131 -- Neutron-trunk/resources/css/admin_widgets.css | 62 - Neutron-trunk/resources/css/ajax.css | 77 -- Neutron-trunk/resources/css/alerts.css | 116 -- Neutron-trunk/resources/css/codename.css | 5 - Neutron-trunk/resources/css/error.css | 16 - Neutron-trunk/resources/css/fonts-import.css | 36 - Neutron-trunk/resources/css/main.css | 485 ------- Neutron-trunk/resources/css/polymer/content.css | 150 -- Neutron-trunk/resources/css/polymer/dark.css | 26 - Neutron-trunk/resources/css/polymer/fonts.css | 103 -- Neutron-trunk/resources/css/polymer/gallery.css | 37 - Neutron-trunk/resources/css/polymer/menubar.css | 44 - Neutron-trunk/resources/css/polymer/responsive.css | 123 -- Neutron-trunk/resources/css/polymer/scrollbars.css | 24 - Neutron-trunk/resources/css/polymer/warnings.css | 115 -- Neutron-trunk/resources/css/preview.css | 150 -- Neutron-trunk/resources/css/ready.css | 52 - Neutron-trunk/resources/css/setup.css | 102 -- Neutron-trunk/resources/css/spotlight.css | 245 ---- Neutron-trunk/resources/css/themes/blue-auto.css | 3 - Neutron-trunk/resources/css/themes/blue-dark.css | 13 - Neutron-trunk/resources/css/themes/blue-light.css | 11 - Neutron-trunk/resources/css/themes/brown-auto.css | 3 - Neutron-trunk/resources/css/themes/brown-dark.css | 13 - Neutron-trunk/resources/css/themes/brown-light.css | 11 - Neutron-trunk/resources/css/themes/green-auto.css | 3 - Neutron-trunk/resources/css/themes/green-dark.css | 13 - Neutron-trunk/resources/css/themes/green-light.css | 11 - Neutron-trunk/resources/css/themes/orange-auto.css | 3 - Neutron-trunk/resources/css/themes/orange-dark.css | 13 - .../resources/css/themes/orange-light.css | 11 - Neutron-trunk/resources/css/themes/purple-auto.css | 3 - Neutron-trunk/resources/css/themes/purple-dark.css | 13 - .../resources/css/themes/purple-light.css | 11 - Neutron-trunk/resources/css/themes/red-auto.css | 3 - Neutron-trunk/resources/css/themes/red-dark.css | 13 - Neutron-trunk/resources/css/themes/red-light.css | 11 - Neutron-trunk/resources/css/themes/white-auto.css | 3 - Neutron-trunk/resources/css/themes/white-dark.css | 13 - Neutron-trunk/resources/css/themes/white-light.css | 11 - Neutron-trunk/resources/css/ui.css | 166 --- .../resources/fonts/body/Roboto-Black.ttf | Bin 171072 -> 0 bytes .../resources/fonts/body/Roboto-BlackItalic.ttf | Bin 177120 -> 0 bytes Neutron-trunk/resources/fonts/body/Roboto-Bold.ttf | Bin 170348 -> 0 bytes .../resources/fonts/body/Roboto-BoldItalic.ttf | Bin 174520 -> 0 bytes .../resources/fonts/body/Roboto-Italic.ttf | Bin 173516 -> 0 bytes .../resources/fonts/body/Roboto-Light.ttf | Bin 170012 -> 0 bytes .../resources/fonts/body/Roboto-LightItalic.ttf | Bin 176184 -> 0 bytes .../resources/fonts/body/Roboto-Medium.ttf | Bin 171656 -> 0 bytes .../resources/fonts/body/Roboto-MediumItalic.ttf | Bin 176428 -> 0 bytes .../resources/fonts/body/Roboto-Regular.ttf | Bin 171272 -> 0 bytes Neutron-trunk/resources/fonts/body/Roboto-Thin.ttf | Bin 171500 -> 0 bytes .../resources/fonts/body/Roboto-ThinItalic.ttf | Bin 175872 -> 0 bytes Neutron-trunk/resources/fonts/font-bold-italic.ttf | Bin 95504 -> 0 bytes Neutron-trunk/resources/fonts/font-bold.ttf | Bin 92096 -> 0 bytes Neutron-trunk/resources/fonts/font-italic.ttf | Bin 95744 -> 0 bytes Neutron-trunk/resources/fonts/font-regular.ttf | Bin 109128 -> 0 bytes Neutron-trunk/resources/i18n/en/$metadata.json | 7 - Neutron-trunk/resources/i18n/en/admin-about.json | 71 - .../resources/i18n/en/admin-advanced-dev.json | 7 - .../resources/i18n/en/admin-advanced-home.json | 8 - .../resources/i18n/en/admin-appearance.json | 35 - .../resources/i18n/en/admin-calendar.json | 59 - .../resources/i18n/en/admin-customization.json | 31 - Neutron-trunk/resources/i18n/en/admin-errors.json | 14 - Neutron-trunk/resources/i18n/en/admin-flags.json | 3 - Neutron-trunk/resources/i18n/en/admin-gallery.json | 47 - Neutron-trunk/resources/i18n/en/admin-home.json | 94 -- .../resources/i18n/en/admin-housekeeping.json | 24 - Neutron-trunk/resources/i18n/en/admin-login.json | 12 - Neutron-trunk/resources/i18n/en/admin-logs.json | 6 - Neutron-trunk/resources/i18n/en/admin-pages.json | 42 - Neutron-trunk/resources/i18n/en/admin-plugins.json | 18 - Neutron-trunk/resources/i18n/en/admin-stats.json | 42 - Neutron-trunk/resources/i18n/en/admin-titles.json | 151 --- Neutron-trunk/resources/i18n/en/admin-v2.json | 77 -- Neutron-trunk/resources/i18n/en/api.json | 97 -- Neutron-trunk/resources/i18n/en/calendar.json | 12 - Neutron-trunk/resources/i18n/en/editor.json | 7 - Neutron-trunk/resources/i18n/en/error.json | 10 - Neutron-trunk/resources/i18n/en/gallery.json | 23 - Neutron-trunk/resources/i18n/en/header.json | 21 - Neutron-trunk/resources/i18n/en/login.json | 17 - Neutron-trunk/resources/i18n/en/menu.json | 10 - Neutron-trunk/resources/i18n/en/setup.json | 84 -- Neutron-trunk/resources/i18n/en/sizes.json | 13 - Neutron-trunk/resources/i18n/en/spotlight.json | 3 - Neutron-trunk/resources/i18n/en/version.json | 27 - Neutron-trunk/resources/i18n/en/viewer.json | 22 - Neutron-trunk/resources/i18n/en/widgets.json | 51 - Neutron-trunk/resources/i18n/fr/$metadata.json | 7 - Neutron-trunk/resources/i18n/fr/admin-about.json | 71 - .../resources/i18n/fr/admin-advanced-dev.json | 7 - .../resources/i18n/fr/admin-advanced-home.json | 8 - .../resources/i18n/fr/admin-appearance.json | 35 - .../resources/i18n/fr/admin-calendar.json | 59 - .../resources/i18n/fr/admin-customization.json | 31 - Neutron-trunk/resources/i18n/fr/admin-errors.json | 14 - Neutron-trunk/resources/i18n/fr/admin-flags.json | 3 - Neutron-trunk/resources/i18n/fr/admin-gallery.json | 47 - Neutron-trunk/resources/i18n/fr/admin-home.json | 94 -- .../resources/i18n/fr/admin-housekeeping.json | 24 - Neutron-trunk/resources/i18n/fr/admin-login.json | 12 - Neutron-trunk/resources/i18n/fr/admin-logs.json | 6 - Neutron-trunk/resources/i18n/fr/admin-pages.json | 42 - Neutron-trunk/resources/i18n/fr/admin-plugins.json | 18 - Neutron-trunk/resources/i18n/fr/admin-stats.json | 42 - Neutron-trunk/resources/i18n/fr/admin-titles.json | 151 --- Neutron-trunk/resources/i18n/fr/admin-v2.json | 77 -- Neutron-trunk/resources/i18n/fr/api.json | 97 -- Neutron-trunk/resources/i18n/fr/calendar.json | 12 - Neutron-trunk/resources/i18n/fr/editor.json | 7 - Neutron-trunk/resources/i18n/fr/error.json | 10 - Neutron-trunk/resources/i18n/fr/gallery.json | 23 - Neutron-trunk/resources/i18n/fr/header.json | 21 - Neutron-trunk/resources/i18n/fr/login.json | 17 - Neutron-trunk/resources/i18n/fr/menu.json | 10 - Neutron-trunk/resources/i18n/fr/setup.json | 84 -- Neutron-trunk/resources/i18n/fr/sizes.json | 13 - Neutron-trunk/resources/i18n/fr/spotlight.json | 3 - Neutron-trunk/resources/i18n/fr/version.json | 27 - Neutron-trunk/resources/i18n/fr/viewer.json | 22 - Neutron-trunk/resources/i18n/fr/widgets.json | 51 - Neutron-trunk/resources/image/admin.svg | 1 - Neutron-trunk/resources/image/admin2/about.png | Bin 2673 -> 0 bytes Neutron-trunk/resources/image/admin2/accounts.png | Bin 7796 -> 0 bytes Neutron-trunk/resources/image/admin2/advanced.png | Bin 2386 -> 0 bytes Neutron-trunk/resources/image/admin2/audit.png | Bin 1665 -> 0 bytes Neutron-trunk/resources/image/admin2/branding.png | Bin 1923 -> 0 bytes Neutron-trunk/resources/image/admin2/calendar.png | Bin 1610 -> 0 bytes Neutron-trunk/resources/image/admin2/cloud.png | Bin 4001 -> 0 bytes Neutron-trunk/resources/image/admin2/colour.png | Bin 2180 -> 0 bytes Neutron-trunk/resources/image/admin2/content.png | Bin 3876 -> 0 bytes Neutron-trunk/resources/image/admin2/electrode.png | Bin 2492 -> 0 bytes Neutron-trunk/resources/image/admin2/enter.png | Bin 565 -> 0 bytes Neutron-trunk/resources/image/admin2/features.png | Bin 6451 -> 0 bytes Neutron-trunk/resources/image/admin2/flag.png | Bin 963 -> 0 bytes Neutron-trunk/resources/image/admin2/footer.png | Bin 1998 -> 0 bytes Neutron-trunk/resources/image/admin2/gallery.png | Bin 2914 -> 0 bytes Neutron-trunk/resources/image/admin2/home.png | Bin 1526 -> 0 bytes Neutron-trunk/resources/image/admin2/install.png | Bin 1552 -> 0 bytes Neutron-trunk/resources/image/admin2/language.png | Bin 3693 -> 0 bytes Neutron-trunk/resources/image/admin2/locale.png | Bin 3212 -> 0 bytes Neutron-trunk/resources/image/admin2/logoff.png | Bin 5021 -> 0 bytes .../resources/image/admin2/maintenance.png | Bin 4622 -> 0 bytes .../resources/image/admin2/minteck-admin.png | Bin 7047 -> 0 bytes Neutron-trunk/resources/image/admin2/optional.png | Bin 1498 -> 0 bytes Neutron-trunk/resources/image/admin2/pages.png | Bin 1149 -> 0 bytes Neutron-trunk/resources/image/admin2/password.png | Bin 1721 -> 0 bytes .../resources/image/admin2/personalization.png | Bin 3264 -> 0 bytes Neutron-trunk/resources/image/admin2/reset.png | Bin 2197 -> 0 bytes Neutron-trunk/resources/image/admin2/security.png | Bin 4832 -> 0 bytes Neutron-trunk/resources/image/admin2/selected.png | Bin 631 -> 0 bytes Neutron-trunk/resources/image/admin2/stats.png | Bin 3205 -> 0 bytes Neutron-trunk/resources/image/admin2/system.png | Bin 4034 -> 0 bytes Neutron-trunk/resources/image/close.svg | 1 - Neutron-trunk/resources/image/codename.jpg | Bin 756250 -> 0 bytes Neutron-trunk/resources/image/config.jpg | Bin 465655 -> 0 bytes Neutron-trunk/resources/image/config_back.svg | 1 - Neutron-trunk/resources/image/config_explore.svg | 1 - .../resources/image/config_file_import.svg | 1 - .../resources/image/config_file_replace.svg | 1 - Neutron-trunk/resources/image/config_finish.svg | 1 - Neutron-trunk/resources/image/config_next.svg | 1 - Neutron-trunk/resources/image/config_restart.svg | 1 - Neutron-trunk/resources/image/contact_address.svg | 1 - Neutron-trunk/resources/image/contact_email.svg | 1 - Neutron-trunk/resources/image/contact_phone.svg | 1 - Neutron-trunk/resources/image/contact_priority.svg | 1 - Neutron-trunk/resources/image/default.jpg | Bin 631115 -> 0 bytes Neutron-trunk/resources/image/demos/color-blue.jpg | Bin 2053 -> 0 bytes .../resources/image/demos/color-brown.jpg | Bin 2024 -> 0 bytes .../resources/image/demos/color-green.jpg | Bin 2058 -> 0 bytes .../resources/image/demos/color-orange.jpg | Bin 2095 -> 0 bytes .../resources/image/demos/color-purple.jpg | Bin 2086 -> 0 bytes Neutron-trunk/resources/image/demos/color-red.jpg | Bin 2089 -> 0 bytes .../resources/image/demos/color-white.jpg | Bin 1598 -> 0 bytes Neutron-trunk/resources/image/demos/theme-auto.jpg | Bin 54971 -> 0 bytes Neutron-trunk/resources/image/demos/theme-dark.jpg | Bin 37186 -> 0 bytes .../resources/image/demos/theme-light.jpg | Bin 40395 -> 0 bytes Neutron-trunk/resources/image/display.svg | 1 - Neutron-trunk/resources/image/error.jpg | Bin 565587 -> 0 bytes Neutron-trunk/resources/image/ext-remove.svg | 1 - Neutron-trunk/resources/image/ext-settings.svg | 1 - Neutron-trunk/resources/image/ext-store.svg | 1 - .../resources/image/gallery-zoom-minus.svg | 1 - .../resources/image/gallery-zoom-plus.svg | 1 - Neutron-trunk/resources/image/getimage.png | Bin 208 -> 0 bytes Neutron-trunk/resources/image/loader.svg | 1 - Neutron-trunk/resources/image/login.jpg | Bin 25666 -> 0 bytes Neutron-trunk/resources/image/menu.svg | 1 - Neutron-trunk/resources/image/message_error.svg | 1 - Neutron-trunk/resources/image/message_info.svg | 1 - Neutron-trunk/resources/image/message_warning.svg | 1 - Neutron-trunk/resources/image/oobe.svg | 1434 -------------------- Neutron-trunk/resources/image/oobe/check.png | Bin 4620 -> 0 bytes Neutron-trunk/resources/image/oobe/error.png | Bin 6877 -> 0 bytes Neutron-trunk/resources/image/oobe/finish.png | Bin 6483 -> 0 bytes Neutron-trunk/resources/image/oobe/icon.png | Bin 12170 -> 0 bytes Neutron-trunk/resources/image/oobe/init.png | Bin 16120 -> 0 bytes Neutron-trunk/resources/image/oobe/installing.png | Bin 12081 -> 0 bytes Neutron-trunk/resources/image/oobe/language.png | Bin 8340 -> 0 bytes Neutron-trunk/resources/image/oobe/name.png | Bin 4081 -> 0 bytes Neutron-trunk/resources/image/oobe/ready.png | Bin 13400 -> 0 bytes .../resources/image/oobe/software-license.png | Bin 16904 -> 0 bytes Neutron-trunk/resources/image/oobe/welcome.png | Bin 20924 -> 0 bytes Neutron-trunk/resources/image/ready.jpg | Bin 10820 -> 0 bytes Neutron-trunk/resources/image/regedit/backup.png | Bin 1733 -> 0 bytes Neutron-trunk/resources/image/regedit/data.png | Bin 1615 -> 0 bytes Neutron-trunk/resources/image/regedit/folder.png | Bin 2418 -> 0 bytes Neutron-trunk/resources/image/regedit/icon.png | Bin 2044 -> 0 bytes Neutron-trunk/resources/image/regedit/image.png | Bin 2631 -> 0 bytes Neutron-trunk/resources/image/regedit/json.png | Bin 1827 -> 0 bytes Neutron-trunk/resources/image/regedit/keys.png | Bin 1912 -> 0 bytes Neutron-trunk/resources/image/regedit/old/data.svg | 203 --- .../resources/image/regedit/old/folder.svg | 24 - Neutron-trunk/resources/image/regedit/old/icon.svg | 163 --- .../resources/image/regedit/old/image.svg | 26 - Neutron-trunk/resources/image/regedit/old/json.svg | 137 -- Neutron-trunk/resources/image/regedit/old/keys.svg | 24 - Neutron-trunk/resources/image/regedit/old/page.svg | 26 - .../resources/image/regedit/old/special.svg | 198 --- .../resources/image/regedit/old/token.svg | 27 - Neutron-trunk/resources/image/regedit/page.png | Bin 1724 -> 0 bytes Neutron-trunk/resources/image/regedit/special.png | Bin 1699 -> 0 bytes Neutron-trunk/resources/image/regedit/token.png | Bin 1864 -> 0 bytes Neutron-trunk/resources/image/resetted.png | Bin 24787 -> 0 bytes Neutron-trunk/resources/image/siteicon.png | Bin 3063 -> 0 bytes Neutron-trunk/resources/image/storeloader.svg | 41 - Neutron-trunk/resources/image/tools.svg | 1 - Neutron-trunk/resources/js/admin_v2.js | 14 - Neutron-trunk/resources/js/ckeditor5/ckeditor.js | 6 - .../resources/js/ckeditor5/ckeditor.js.map | 1 - .../resources/js/ckeditor5/translations/af.js | 1 - .../resources/js/ckeditor5/translations/ar.js | 1 - .../resources/js/ckeditor5/translations/ast.js | 1 - .../resources/js/ckeditor5/translations/az.js | 1 - .../resources/js/ckeditor5/translations/bg.js | 1 - .../resources/js/ckeditor5/translations/ca.js | 1 - .../resources/js/ckeditor5/translations/cs.js | 1 - .../resources/js/ckeditor5/translations/da.js | 1 - .../resources/js/ckeditor5/translations/de-ch.js | 1 - .../resources/js/ckeditor5/translations/de.js | 1 - .../resources/js/ckeditor5/translations/el.js | 1 - .../resources/js/ckeditor5/translations/en-au.js | 1 - .../resources/js/ckeditor5/translations/en-gb.js | 1 - .../resources/js/ckeditor5/translations/eo.js | 1 - .../resources/js/ckeditor5/translations/es.js | 1 - .../resources/js/ckeditor5/translations/et.js | 1 - .../resources/js/ckeditor5/translations/eu.js | 1 - .../resources/js/ckeditor5/translations/fa.js | 1 - .../resources/js/ckeditor5/translations/fi.js | 1 - .../resources/js/ckeditor5/translations/fr.js | 1 - .../resources/js/ckeditor5/translations/gl.js | 1 - .../resources/js/ckeditor5/translations/gu.js | 1 - .../resources/js/ckeditor5/translations/he.js | 1 - .../resources/js/ckeditor5/translations/hr.js | 1 - .../resources/js/ckeditor5/translations/hu.js | 1 - .../resources/js/ckeditor5/translations/id.js | 1 - .../resources/js/ckeditor5/translations/it.js | 1 - .../resources/js/ckeditor5/translations/ja.js | 1 - .../resources/js/ckeditor5/translations/km.js | 1 - .../resources/js/ckeditor5/translations/kn.js | 1 - .../resources/js/ckeditor5/translations/ko.js | 1 - .../resources/js/ckeditor5/translations/ku.js | 1 - .../resources/js/ckeditor5/translations/lt.js | 1 - .../resources/js/ckeditor5/translations/lv.js | 1 - .../resources/js/ckeditor5/translations/ms.js | 1 - .../resources/js/ckeditor5/translations/nb.js | 1 - .../resources/js/ckeditor5/translations/ne.js | 1 - .../resources/js/ckeditor5/translations/nl.js | 1 - .../resources/js/ckeditor5/translations/no.js | 1 - .../resources/js/ckeditor5/translations/oc.js | 1 - .../resources/js/ckeditor5/translations/pl.js | 1 - .../resources/js/ckeditor5/translations/pt-br.js | 1 - .../resources/js/ckeditor5/translations/pt.js | 1 - .../resources/js/ckeditor5/translations/ro.js | 1 - .../resources/js/ckeditor5/translations/ru.js | 1 - .../resources/js/ckeditor5/translations/si.js | 1 - .../resources/js/ckeditor5/translations/sk.js | 1 - .../resources/js/ckeditor5/translations/sl.js | 1 - .../resources/js/ckeditor5/translations/sq.js | 1 - .../resources/js/ckeditor5/translations/sr-latn.js | 1 - .../resources/js/ckeditor5/translations/sr.js | 1 - .../resources/js/ckeditor5/translations/sv.js | 1 - .../resources/js/ckeditor5/translations/th.js | 1 - .../resources/js/ckeditor5/translations/tr.js | 1 - .../resources/js/ckeditor5/translations/tt.js | 1 - .../resources/js/ckeditor5/translations/ug.js | 1 - .../resources/js/ckeditor5/translations/uk.js | 1 - .../resources/js/ckeditor5/translations/vi.js | 1 - .../resources/js/ckeditor5/translations/zh-cn.js | 1 - .../resources/js/ckeditor5/translations/zh.js | 1 - Neutron-trunk/resources/js/jquery.js | 2 - Neutron-trunk/resources/js/setup-ui.js.php | 171 --- Neutron-trunk/resources/js/spotlight.js | 239 ---- Neutron-trunk/resources/js/sticky.js | 17 - Neutron-trunk/resources/lib/license.html | 694 ---------- Neutron-trunk/resources/lib/material/iconfont.css | 41 - .../resources/lib/material/material-classic.woff2 | Bin 79448 -> 0 bytes .../lib/material/material-components-web.min.css | 10 - .../material/material-components-web.min.css.map | 1 - .../lib/material/material-components-web.min.js | 1 - .../resources/lib/material/material-outlined.woff2 | Bin 91208 -> 0 bytes .../resources/lib/pushbar.js/library-info.json | 7 - Neutron-trunk/resources/lib/pushbar.js/library.css | 74 - Neutron-trunk/resources/lib/pushbar.js/library.js | 79 -- Neutron-trunk/resources/logo.png | Bin 4554 -> 0 bytes Neutron-trunk/resources/logo.svg | 27 - Neutron-trunk/resources/private/.htaccess | 1 - Neutron-trunk/resources/private/CodeEditor$2.php | 39 - Neutron-trunk/resources/private/CodeEditor$3.php | 39 - Neutron-trunk/resources/private/CodeEditor.php | 44 - Neutron-trunk/resources/private/VisualEditor$2.php | 410 ------ Neutron-trunk/resources/private/VisualEditor.php | 416 ------ Neutron-trunk/resources/private/debug.php | 190 --- .../resources/private/global.js._/index.php | 95 -- Neutron-trunk/resources/private/header.php | 5 - .../resources/private/headers/csettings-base.json | 8 - .../resources/private/headers/documentbody.php | 12 - .../resources/private/headers/documenthead.php | 139 -- .../resources/private/headers/preprocessor.php | 226 --- Neutron-trunk/resources/private/license | 15 - Neutron-trunk/resources/private/relative.php | 35 - 331 files changed, 11057 deletions(-) delete mode 100644 Neutron-trunk/resources/.htaccess delete mode 100644 Neutron-trunk/resources/css/admin.css delete mode 100644 Neutron-trunk/resources/css/admin_v2/chromium.css delete mode 100644 Neutron-trunk/resources/css/admin_v2/iframe.css delete mode 100644 Neutron-trunk/resources/css/admin_v2/inner.css delete mode 100644 Neutron-trunk/resources/css/admin_v2/main.css delete mode 100644 Neutron-trunk/resources/css/admin_v2/navigation.css delete mode 100644 Neutron-trunk/resources/css/admin_widgets.css delete mode 100644 Neutron-trunk/resources/css/ajax.css delete mode 100644 Neutron-trunk/resources/css/alerts.css delete mode 100644 Neutron-trunk/resources/css/codename.css delete mode 100644 Neutron-trunk/resources/css/error.css delete mode 100644 Neutron-trunk/resources/css/fonts-import.css delete mode 100644 Neutron-trunk/resources/css/main.css delete mode 100644 Neutron-trunk/resources/css/polymer/content.css delete mode 100644 Neutron-trunk/resources/css/polymer/dark.css delete mode 100644 Neutron-trunk/resources/css/polymer/fonts.css delete mode 100644 Neutron-trunk/resources/css/polymer/gallery.css delete mode 100644 Neutron-trunk/resources/css/polymer/menubar.css delete mode 100644 Neutron-trunk/resources/css/polymer/responsive.css delete mode 100644 Neutron-trunk/resources/css/polymer/scrollbars.css delete mode 100644 Neutron-trunk/resources/css/polymer/warnings.css delete mode 100644 Neutron-trunk/resources/css/preview.css delete mode 100644 Neutron-trunk/resources/css/ready.css delete mode 100644 Neutron-trunk/resources/css/setup.css delete mode 100644 Neutron-trunk/resources/css/spotlight.css delete mode 100644 Neutron-trunk/resources/css/themes/blue-auto.css delete mode 100644 Neutron-trunk/resources/css/themes/blue-dark.css delete mode 100644 Neutron-trunk/resources/css/themes/blue-light.css delete mode 100644 Neutron-trunk/resources/css/themes/brown-auto.css delete mode 100644 Neutron-trunk/resources/css/themes/brown-dark.css delete mode 100644 Neutron-trunk/resources/css/themes/brown-light.css delete mode 100644 Neutron-trunk/resources/css/themes/green-auto.css delete mode 100644 Neutron-trunk/resources/css/themes/green-dark.css delete mode 100644 Neutron-trunk/resources/css/themes/green-light.css delete mode 100644 Neutron-trunk/resources/css/themes/orange-auto.css delete mode 100644 Neutron-trunk/resources/css/themes/orange-dark.css delete mode 100644 Neutron-trunk/resources/css/themes/orange-light.css delete mode 100644 Neutron-trunk/resources/css/themes/purple-auto.css delete mode 100644 Neutron-trunk/resources/css/themes/purple-dark.css delete mode 100644 Neutron-trunk/resources/css/themes/purple-light.css delete mode 100644 Neutron-trunk/resources/css/themes/red-auto.css delete mode 100644 Neutron-trunk/resources/css/themes/red-dark.css delete mode 100644 Neutron-trunk/resources/css/themes/red-light.css delete mode 100644 Neutron-trunk/resources/css/themes/white-auto.css delete mode 100644 Neutron-trunk/resources/css/themes/white-dark.css delete mode 100644 Neutron-trunk/resources/css/themes/white-light.css delete mode 100644 Neutron-trunk/resources/css/ui.css delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-Black.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-BlackItalic.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-Bold.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-BoldItalic.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-Italic.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-Light.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-LightItalic.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-Medium.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-MediumItalic.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-Regular.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-Thin.ttf delete mode 100644 Neutron-trunk/resources/fonts/body/Roboto-ThinItalic.ttf delete mode 100644 Neutron-trunk/resources/fonts/font-bold-italic.ttf delete mode 100644 Neutron-trunk/resources/fonts/font-bold.ttf delete mode 100644 Neutron-trunk/resources/fonts/font-italic.ttf delete mode 100644 Neutron-trunk/resources/fonts/font-regular.ttf delete mode 100644 Neutron-trunk/resources/i18n/en/$metadata.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-about.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-advanced-dev.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-advanced-home.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-appearance.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-calendar.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-customization.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-errors.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-flags.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-gallery.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-home.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-housekeeping.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-login.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-logs.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-pages.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-plugins.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-stats.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-titles.json delete mode 100644 Neutron-trunk/resources/i18n/en/admin-v2.json delete mode 100644 Neutron-trunk/resources/i18n/en/api.json delete mode 100644 Neutron-trunk/resources/i18n/en/calendar.json delete mode 100644 Neutron-trunk/resources/i18n/en/editor.json delete mode 100644 Neutron-trunk/resources/i18n/en/error.json delete mode 100644 Neutron-trunk/resources/i18n/en/gallery.json delete mode 100644 Neutron-trunk/resources/i18n/en/header.json delete mode 100644 Neutron-trunk/resources/i18n/en/login.json delete mode 100644 Neutron-trunk/resources/i18n/en/menu.json delete mode 100644 Neutron-trunk/resources/i18n/en/setup.json delete mode 100644 Neutron-trunk/resources/i18n/en/sizes.json delete mode 100644 Neutron-trunk/resources/i18n/en/spotlight.json delete mode 100644 Neutron-trunk/resources/i18n/en/version.json delete mode 100644 Neutron-trunk/resources/i18n/en/viewer.json delete mode 100644 Neutron-trunk/resources/i18n/en/widgets.json delete mode 100644 Neutron-trunk/resources/i18n/fr/$metadata.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-about.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-advanced-dev.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-advanced-home.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-appearance.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-calendar.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-customization.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-errors.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-flags.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-gallery.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-home.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-housekeeping.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-login.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-logs.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-pages.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-plugins.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-stats.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-titles.json delete mode 100644 Neutron-trunk/resources/i18n/fr/admin-v2.json delete mode 100644 Neutron-trunk/resources/i18n/fr/api.json delete mode 100644 Neutron-trunk/resources/i18n/fr/calendar.json delete mode 100644 Neutron-trunk/resources/i18n/fr/editor.json delete mode 100644 Neutron-trunk/resources/i18n/fr/error.json delete mode 100644 Neutron-trunk/resources/i18n/fr/gallery.json delete mode 100644 Neutron-trunk/resources/i18n/fr/header.json delete mode 100644 Neutron-trunk/resources/i18n/fr/login.json delete mode 100644 Neutron-trunk/resources/i18n/fr/menu.json delete mode 100644 Neutron-trunk/resources/i18n/fr/setup.json delete mode 100644 Neutron-trunk/resources/i18n/fr/sizes.json delete mode 100644 Neutron-trunk/resources/i18n/fr/spotlight.json delete mode 100644 Neutron-trunk/resources/i18n/fr/version.json delete mode 100644 Neutron-trunk/resources/i18n/fr/viewer.json delete mode 100644 Neutron-trunk/resources/i18n/fr/widgets.json delete mode 100644 Neutron-trunk/resources/image/admin.svg delete mode 100644 Neutron-trunk/resources/image/admin2/about.png delete mode 100644 Neutron-trunk/resources/image/admin2/accounts.png delete mode 100644 Neutron-trunk/resources/image/admin2/advanced.png delete mode 100644 Neutron-trunk/resources/image/admin2/audit.png delete mode 100644 Neutron-trunk/resources/image/admin2/branding.png delete mode 100644 Neutron-trunk/resources/image/admin2/calendar.png delete mode 100644 Neutron-trunk/resources/image/admin2/cloud.png delete mode 100644 Neutron-trunk/resources/image/admin2/colour.png delete mode 100644 Neutron-trunk/resources/image/admin2/content.png delete mode 100644 Neutron-trunk/resources/image/admin2/electrode.png delete mode 100644 Neutron-trunk/resources/image/admin2/enter.png delete mode 100644 Neutron-trunk/resources/image/admin2/features.png delete mode 100644 Neutron-trunk/resources/image/admin2/flag.png delete mode 100644 Neutron-trunk/resources/image/admin2/footer.png delete mode 100644 Neutron-trunk/resources/image/admin2/gallery.png delete mode 100644 Neutron-trunk/resources/image/admin2/home.png delete mode 100644 Neutron-trunk/resources/image/admin2/install.png delete mode 100644 Neutron-trunk/resources/image/admin2/language.png delete mode 100644 Neutron-trunk/resources/image/admin2/locale.png delete mode 100644 Neutron-trunk/resources/image/admin2/logoff.png delete mode 100644 Neutron-trunk/resources/image/admin2/maintenance.png delete mode 100644 Neutron-trunk/resources/image/admin2/minteck-admin.png delete mode 100644 Neutron-trunk/resources/image/admin2/optional.png delete mode 100644 Neutron-trunk/resources/image/admin2/pages.png delete mode 100644 Neutron-trunk/resources/image/admin2/password.png delete mode 100644 Neutron-trunk/resources/image/admin2/personalization.png delete mode 100644 Neutron-trunk/resources/image/admin2/reset.png delete mode 100644 Neutron-trunk/resources/image/admin2/security.png delete mode 100644 Neutron-trunk/resources/image/admin2/selected.png delete mode 100644 Neutron-trunk/resources/image/admin2/stats.png delete mode 100644 Neutron-trunk/resources/image/admin2/system.png delete mode 100644 Neutron-trunk/resources/image/close.svg delete mode 100644 Neutron-trunk/resources/image/codename.jpg delete mode 100644 Neutron-trunk/resources/image/config.jpg delete mode 100644 Neutron-trunk/resources/image/config_back.svg delete mode 100644 Neutron-trunk/resources/image/config_explore.svg delete mode 100644 Neutron-trunk/resources/image/config_file_import.svg delete mode 100644 Neutron-trunk/resources/image/config_file_replace.svg delete mode 100644 Neutron-trunk/resources/image/config_finish.svg delete mode 100644 Neutron-trunk/resources/image/config_next.svg delete mode 100644 Neutron-trunk/resources/image/config_restart.svg delete mode 100644 Neutron-trunk/resources/image/contact_address.svg delete mode 100644 Neutron-trunk/resources/image/contact_email.svg delete mode 100644 Neutron-trunk/resources/image/contact_phone.svg delete mode 100644 Neutron-trunk/resources/image/contact_priority.svg delete mode 100644 Neutron-trunk/resources/image/default.jpg delete mode 100644 Neutron-trunk/resources/image/demos/color-blue.jpg delete mode 100644 Neutron-trunk/resources/image/demos/color-brown.jpg delete mode 100644 Neutron-trunk/resources/image/demos/color-green.jpg delete mode 100644 Neutron-trunk/resources/image/demos/color-orange.jpg delete mode 100644 Neutron-trunk/resources/image/demos/color-purple.jpg delete mode 100644 Neutron-trunk/resources/image/demos/color-red.jpg delete mode 100644 Neutron-trunk/resources/image/demos/color-white.jpg delete mode 100644 Neutron-trunk/resources/image/demos/theme-auto.jpg delete mode 100644 Neutron-trunk/resources/image/demos/theme-dark.jpg delete mode 100644 Neutron-trunk/resources/image/demos/theme-light.jpg delete mode 100644 Neutron-trunk/resources/image/display.svg delete mode 100644 Neutron-trunk/resources/image/error.jpg delete mode 100644 Neutron-trunk/resources/image/ext-remove.svg delete mode 100644 Neutron-trunk/resources/image/ext-settings.svg delete mode 100644 Neutron-trunk/resources/image/ext-store.svg delete mode 100644 Neutron-trunk/resources/image/gallery-zoom-minus.svg delete mode 100644 Neutron-trunk/resources/image/gallery-zoom-plus.svg delete mode 100644 Neutron-trunk/resources/image/getimage.png delete mode 100644 Neutron-trunk/resources/image/loader.svg delete mode 100644 Neutron-trunk/resources/image/login.jpg delete mode 100644 Neutron-trunk/resources/image/menu.svg delete mode 100644 Neutron-trunk/resources/image/message_error.svg delete mode 100644 Neutron-trunk/resources/image/message_info.svg delete mode 100644 Neutron-trunk/resources/image/message_warning.svg delete mode 100644 Neutron-trunk/resources/image/oobe.svg delete mode 100644 Neutron-trunk/resources/image/oobe/check.png delete mode 100644 Neutron-trunk/resources/image/oobe/error.png delete mode 100644 Neutron-trunk/resources/image/oobe/finish.png delete mode 100644 Neutron-trunk/resources/image/oobe/icon.png delete mode 100644 Neutron-trunk/resources/image/oobe/init.png delete mode 100644 Neutron-trunk/resources/image/oobe/installing.png delete mode 100644 Neutron-trunk/resources/image/oobe/language.png delete mode 100644 Neutron-trunk/resources/image/oobe/name.png delete mode 100644 Neutron-trunk/resources/image/oobe/ready.png delete mode 100644 Neutron-trunk/resources/image/oobe/software-license.png delete mode 100644 Neutron-trunk/resources/image/oobe/welcome.png delete mode 100644 Neutron-trunk/resources/image/ready.jpg delete mode 100644 Neutron-trunk/resources/image/regedit/backup.png delete mode 100644 Neutron-trunk/resources/image/regedit/data.png delete mode 100644 Neutron-trunk/resources/image/regedit/folder.png delete mode 100644 Neutron-trunk/resources/image/regedit/icon.png delete mode 100644 Neutron-trunk/resources/image/regedit/image.png delete mode 100644 Neutron-trunk/resources/image/regedit/json.png delete mode 100644 Neutron-trunk/resources/image/regedit/keys.png delete mode 100644 Neutron-trunk/resources/image/regedit/old/data.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/folder.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/icon.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/image.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/json.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/keys.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/page.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/special.svg delete mode 100644 Neutron-trunk/resources/image/regedit/old/token.svg delete mode 100644 Neutron-trunk/resources/image/regedit/page.png delete mode 100644 Neutron-trunk/resources/image/regedit/special.png delete mode 100644 Neutron-trunk/resources/image/regedit/token.png delete mode 100644 Neutron-trunk/resources/image/resetted.png delete mode 100644 Neutron-trunk/resources/image/siteicon.png delete mode 100644 Neutron-trunk/resources/image/storeloader.svg delete mode 100644 Neutron-trunk/resources/image/tools.svg delete mode 100644 Neutron-trunk/resources/js/admin_v2.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/ckeditor.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/ckeditor.js.map delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/af.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ar.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ast.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/az.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/bg.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ca.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/cs.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/da.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/de-ch.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/de.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/el.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/en-au.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/en-gb.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/eo.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/es.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/et.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/eu.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/fa.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/fi.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/fr.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/gl.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/gu.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/he.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/hr.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/hu.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/id.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/it.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ja.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/km.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/kn.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ko.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ku.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/lt.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/lv.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ms.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/nb.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ne.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/nl.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/no.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/oc.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/pl.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/pt-br.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/pt.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ro.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ru.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/si.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/sk.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/sl.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/sq.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/sr-latn.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/sr.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/sv.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/th.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/tr.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/tt.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/ug.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/uk.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/vi.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/zh-cn.js delete mode 100644 Neutron-trunk/resources/js/ckeditor5/translations/zh.js delete mode 100644 Neutron-trunk/resources/js/jquery.js delete mode 100644 Neutron-trunk/resources/js/setup-ui.js.php delete mode 100644 Neutron-trunk/resources/js/spotlight.js delete mode 100644 Neutron-trunk/resources/js/sticky.js delete mode 100644 Neutron-trunk/resources/lib/license.html delete mode 100644 Neutron-trunk/resources/lib/material/iconfont.css delete mode 100644 Neutron-trunk/resources/lib/material/material-classic.woff2 delete mode 100644 Neutron-trunk/resources/lib/material/material-components-web.min.css delete mode 100644 Neutron-trunk/resources/lib/material/material-components-web.min.css.map delete mode 100644 Neutron-trunk/resources/lib/material/material-components-web.min.js delete mode 100644 Neutron-trunk/resources/lib/material/material-outlined.woff2 delete mode 100644 Neutron-trunk/resources/lib/pushbar.js/library-info.json delete mode 100644 Neutron-trunk/resources/lib/pushbar.js/library.css delete mode 100644 Neutron-trunk/resources/lib/pushbar.js/library.js delete mode 100644 Neutron-trunk/resources/logo.png delete mode 100644 Neutron-trunk/resources/logo.svg delete mode 100644 Neutron-trunk/resources/private/.htaccess delete mode 100644 Neutron-trunk/resources/private/CodeEditor$2.php delete mode 100644 Neutron-trunk/resources/private/CodeEditor$3.php delete mode 100644 Neutron-trunk/resources/private/CodeEditor.php delete mode 100644 Neutron-trunk/resources/private/VisualEditor$2.php delete mode 100644 Neutron-trunk/resources/private/VisualEditor.php delete mode 100644 Neutron-trunk/resources/private/debug.php delete mode 100644 Neutron-trunk/resources/private/global.js._/index.php delete mode 100644 Neutron-trunk/resources/private/header.php delete mode 100644 Neutron-trunk/resources/private/headers/csettings-base.json delete mode 100644 Neutron-trunk/resources/private/headers/documentbody.php delete mode 100644 Neutron-trunk/resources/private/headers/documenthead.php delete mode 100644 Neutron-trunk/resources/private/headers/preprocessor.php delete mode 100644 Neutron-trunk/resources/private/license delete mode 100644 Neutron-trunk/resources/private/relative.php (limited to 'Neutron-trunk/resources') diff --git a/Neutron-trunk/resources/.htaccess b/Neutron-trunk/resources/.htaccess deleted file mode 100644 index bc839cb..0000000 --- a/Neutron-trunk/resources/.htaccess +++ /dev/null @@ -1,4 +0,0 @@ -ErrorDocument 401 /cms-special/error/?id=401&description=Accès%20refusé -ErrorDocument 403 /cms-special/error/?id=403&description=Accès%20interdit -ErrorDocument 404 /cms-special/error/?id=404&description=Ressource%20introuvable -ErrorDocument 500 /cms-special/error/?id=500&description=Erreur%20interne \ No newline at end of file diff --git a/Neutron-trunk/resources/css/admin.css b/Neutron-trunk/resources/css/admin.css deleted file mode 100644 index 452fc9b..0000000 --- a/Neutron-trunk/resources/css/admin.css +++ /dev/null @@ -1,725 +0,0 @@ -@import "./admin_widgets.css"; - -* { - font-family: CMS, Arial, Calibri, Ubuntu, Roboto, Liberation Sans, Helvetica, sans-serif; -} - -@keyframes blink { - 0% { opacity: 1; } - 50% { opacity: 0; } - 100% { opacity: 1; } -} - -.blk1 { - animation-name: blink; - animation-duration: 2s; - animation-delay: 0ms; - animation-iteration-count: infinite; -} - -.blk2 { - animation-name: blink; - animation-duration: 2s; - animation-delay: 400ms; - animation-iteration-count: infinite; -} - -.blk3 { - animation-name: blink; - animation-duration: 2s; - animation-delay: 800ms; - animation-iteration-count: infinite; -} - -.blk4 { - animation-name: blink; - animation-duration: 2s; - animation-delay: 1200ms; - animation-iteration-count: infinite; -} - -.blk5 { - animation-name: blink; - animation-duration: 2s; - animation-delay: 1600ms; - animation-iteration-count: infinite; -} - -.intro-element { - width: 128px; - height: 128px; -} - -.intro { - vertical-align: middle; -} - -#error { - background: rgb(123, 4, 4); - text-align: center; - margin: auto; - padding: 10px; - box-shadow: 1px 1px 2px rgb(123, 4, 4); - color: white; - width: 50%; - text-align: center; - margin-bottom: 10px; - margin-top: 10px; - border-radius: 10px; -} - -body { - margin: 0; - padding: 0; - overflow-x: hidden; -} - -.setting { - width: calc(100% - 20px); - padding: 10px; - cursor: pointer; - background-color: transparent; - transition: background-color 200ms; - left: 0; - position: relative; - border-radius: 10px; -} - -.setting:hover { - background-color: rgb(180, 180, 180); -} - -.setting:hover > table > tbody > tr > td > .setting-img { - width: 36px; - height: 36px; - margin-right: 0; - transition: width 200ms, height 200ms, margin-right 200ms; -} - -.setting-img { - width: 32px; - height: 32px; - vertical-align: middle; - margin-right: 4px; - transition: width 200ms, height 200ms, margin-right 200ms; -} - -.setting-name { - vertical-align: middle; - margin-left: 10px; -} - -#settings > a { - color: black; - text-decoration: none; -} - -.place-bar { - margin-left: 10px; -} - -.sblink { - color: black; - text-decoration: none; - cursor: pointer; -} - -.sblink:hover { - color: black; - text-decoration-color: black; - text-decoration-style: solid; - text-decoration-line: underline; -} - -.sblink:active { - color: rgb(65, 65, 65); - text-decoration-color: rgb(65, 65, 65); - text-decoration-style: solid; - text-decoration-line: underline; -} - -.tip-red { - color: rgb(255, 75, 75); -} - -.tip-green { - color: rgb(132, 255, 75); -} - -.tip-orange { - color: rgb(255, 132, 75); -} - -.loader { - width: 20%; - height: 20%; -} - -#pages-list { - margin: 10px; -} - -#pages-list > tbody > tr > td, #pages-list > tbody { - border-width: 1px; - border-style: solid; - border-color: black; - padding: 5px 10px; -} - -.pages-list-header { - font-weight: bold; -} - -#codeeditor { - width: 100%; - height: 150px; - font-family: 'Ubuntu Mono', 'Roboto Mono', 'Liberation Mono', 'Monospace', 'Courier New', 'Courier', 'Lucida Console', monospace; - font-size: 12px; -} - -.reset-option { - border-color: black; - border-width: 1px; - border-style: solid; - margin: 20px; - padding: 10px; - padding-bottom: 0px; - max-width: 80%; - cursor: pointer; - background: transparent; -} - -.widget { - border-color: rgba(0, 0, 0, 0.5); - border-width: 1px; - border-style: solid; - margin: 20px; - padding: 10px; - padding-bottom: 0px; - max-width: 80%; - background: transparent; - border-radius: 10px; -} - -.reset-option:hover { - background: rgb(219, 219, 219); -} - -.reset-option:active { - background: rgb(177, 177, 177); -} - -#resetbox-placeholder { - position: fixed; - width: 100%; - height: 100%; - left: 0; - top: 0; - background-color: rgba(0, 0, 0, .75) -} - -#settings.blurred { - filter: blur(5px); -} - -#resetbox { - width: 60% !important; - border-radius: 10px; - box-shadow: 1px 1px 10px rgb(235, 235, 235); - padding: 20px; - background-color: rgb(235, 235, 235); -} - -.widget-header { - margin: -10px; - padding: 5px; - background: rgba(209, 209, 209, 0.3); - transition: background 200ms; - border-top-left-radius: 10px; - border-top-right-radius: 10px; -} - -.widget-header.disabled { - background: rgba(255, 115, 115, 0.3); - transition: background 200ms; -} - -.widget-header.enabled { - background: rgba(155, 255, 115, 0.3); - transition: background 200ms; -} - -.chart--container { - height: 450px; - width: 100%; - min-height: 150px; -} - -#visits { - overflow: hidden; - position: relative; - top: -80px; - z-index: -1; -} - -#afterchart { - position: relative; - top: -90px; -} - -#logs { - font-family: monospace !important; - font-size: 16px; - margin: 0px 20px; - padding: 10px; - background: #151515; - border-radius: 5px; - border-color: black; - border-width: 2px; - border-style: solid; - color: white; -} - -#protect { - margin: 0px 20%; - text-align: center; - padding: 10px; - background: rgb(224, 224, 224); - border-radius: 5px; -} - -#protect.s2 { - background: rgba(135, 255, 135, .5); -} - -#protect.s1 { - background: rgba(255, 189, 135, .5); -} - -#protect.s0 { - background: rgba(255, 135, 135, .5); -} - -#banner { - padding: 40px 50px; - background-position: center; - background-size: 100%; -} - -@media (min-width: 500px) { - #store-info { - display: block; - margin: 30px 20%; - border-radius: 20px; - box-shadow: 1px 1px 12px gray; - padding: 20px; - } -} - -@media (max-width: 500px) { - .home-wrapper { - grid-template-columns: 1fr !important; - grid-column-gap: 0 !important; - grid-row-gap: 0 !important; - } - .setting { - border-radius: 0 !important; - } - #banner { - padding: 20px 25px; - } - #banner-logo { - width: 36px !important; - height: 36px !important; - } - #loginnotice { - display: none; - } -} - -@media (max-height: 380px) { - #loginnotice { - display: none; - } -} - -#banner-name { - font-weight: lighter; - font-size: 20px; - color: white; - margin-top: 15px; -} - -.banner-black { - color: black !important; -} - -#banner-logo { - width: 48px; - height: 48px; - vertical-align: middle; - margin-right: 20px; - border-radius: 999px; - border-color: white; - border-width: 2px; - border-style: solid; -} - -#adminb { - text-align: center; - color: white; -} - -.setting-info { - position: absolute; - height: 0px; - width: 100%; - opacity: 0; - display: inline-block; - transition: position 200ms, height 200ms, width 200ms, opacity 200ms; - text-align: center; -} - -.setting:hover > span.setting-info { - position: initial; - height: auto; - opacity: 1; -} - -#navigation { - padding: 8px; - background: #bbb; - border-bottom-style: solid; - border-bottom-color: gray; - border-bottom-width: 1px; -} - -.step { - font-size: 24px; - vertical-align: middle; - font-weight: bold; - margin-right: 7.5px; -} - -.storelist { - border-width: 1px; - border-color: gray; - border-style: solid; - margin: 0; -} - -.store-info-details-sep { - color: lightgray; -} - -.store-info-details-el { - border-radius: 999px; - padding: 20px 10px; - background: rgb(0, 162, 255); - color: white; -} - -#store-info-details { - margin: 30px 0; -} - -#store-info-summary, #store-info-permissions { - text-align: left; -} - -#store-info-summary-title, #store-info-permissions-title { - color: rgb(0, 162, 255); - vertical-align: middle; -} - -#store-info-summary-icon, #store-info-permissions-icon { - vertical-align: middle; - width: 20px; - height: 20px; - fill: rgb(0, 162, 255); -} - -#store-info-verified { - color: rgb(0, 162, 255); -} - -#store-info-verified-icon { - vertical-align: middle; - width: 18px; - height: 18px; - fill: rgb(0, 162, 255); - margin-left: 10px; -} - -.specialperm { - color: rgb(180, 117, 0); -} - -.criticalperm { - color: rgb(180, 0, 0); -} - -#store-install { - background-color: rgb(0, 162, 255); - color: white; - padding: 10px 20px; - border-radius: 5px; - transition: box-shadow 200ms; - cursor: pointer; - text-decoration: none; -} - -#store-install:hover { - box-shadow: rgb(127, 208, 255) 1px 1px 5px; -} - -#store-more { - text-decoration: none; - background-color: white; - color: rgb(0, 162, 255); - padding: 10px 20px; - border-radius: 5px; - border-width: 1px; - border-style: solid; - border-color: rgb(0, 162, 255); - transition: box-shadow 200ms; - cursor: pointer; -} - -#store-more:hover { - box-shadow: rgb(127, 208, 255) 1px 1px 5px; -} - -#editor *, .ace_editor * { - font: 11px/normal 'Console' ,'Cousine' ,'Monaco' ,'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace !important; - direction: ltr !important; - text-align: left !important; - font-weight: 400 !important; - letter-spacing: 0 !important; - word-spacing: 0px !important; -} - -.ace_editor, .ace_text-input, .ace_editor div { - font-size: 11px !important; - font: 11px/normal 'Georgia' ,'Console' ,'Cousine' ,'Monaco' ,'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace !important; - font-variant-ligatures: none !important; - font-weight: 400 !important; - letter-spacing: 0 !important; - word-spacing: 0px !important; -} - -#editor { - height: 200px; - border: #cacaca solid 1px; -} - -html { - word-spacing: 1px; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; -} - -.message_img { - width: 36px; - height: 36px; -} - -.message_warning { - background: rgba(255, 255, 116, 0.31); - margin: 10px; - border-radius: 10px; - padding: 5px 10px; - z-index: -2; -} - -.message_info { - background: rgba(116, 227, 255, 0.31); - margin: 10px; - border-radius: 10px; - padding: 5px 10px; - z-index: -2; -} - -.message_error { - background: rgba(255, 117, 117, 0.31); - margin: 10px; - border-radius: 10px; - padding: 5px 10px; - z-index: -2; -} - -.message_warning > tbody > tr > td { - width: 36px; -} - -.indication { - cursor: help; - text-decoration-style: dotted; - text-decoration-color: inherit; - text-decoration-line: underline; - color: inherit; -} - -#stats { - padding: 5px; - margin: 10px; - border-radius: 10px; - background: rgba(6, 6, 6, 0.2); - padding-bottom: 20px; -} - -.info-sep { - opacity: .8; - font-size: 10px; -} - -.home-wrapper { - display: grid; - grid-template-columns: 1fr 1fr; - grid-column-gap: 20px; - grid-row-gap: 20px; -} - -.home-wrapper a { - text-decoration: none; - color: inherit; -} - -.configure_ext, .store_ext, .remove_ext { - float: right; - position: relative; - height: 24px; - cursor: pointer; - transition: rotate 200ms, opacity 200ms; -} - -.configure_ext:hover { - rotate: 90deg; - opacity: .75; -} - -.store_ext:hover { - rotate: 360deg; - opacity: .75; -} - -.remove_ext:hover { - rotate: 180deg; - opacity: .75; -} - -.widget-header-info { - width: 100%; -} - -#main-content { - overflow-x: hidden; -} - -.clink { - color: black; - text-decoration: underline; -} - -.clink:hover { - text-decoration: none; -} - -.clink:active, .clink:focus { - opacity: .75; -} - -#onlyold { - background-color: rgba(255, 166, 0, 0.5); - border-radius: 10px; - display: inline-block; - padding: 5px; -} - -.oldopts { - transition: background-color 200ms, border-radius 200ms, padding 200ms; - display: inline-block; -} - -.lggrid { - display: grid; - grid-template-columns: 25% 1fr; - height: 100%; -} - -.lggrid-inner-p1 { - background: black; -} - -#login #main-content, #login #admin { - padding: 0; - border-radius: 0; - width: 100%; - height: 100%; -} - -#login, #login * { - overflow: hidden !important; -} - -#login .inner { - text-align: center; -} - -#login .content { - background-image: url("/resources/image/login.jpg"); - background-position: center; - background-size: cover; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 10; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: center; -} - -.mdc-card--selected { - border-color: var(--mdc-theme-primary); - opacity: .75; -} - -.mdc-card--selected .mdc-card__primary-action { - cursor: default; -} - -.hidden { - display: none !important; - visibility: hidden !important; - top: 0 !important; - bottom: 0 !important; - left: 0 !important; - right: 0 !important; - position: fixed !important; -} - -#logs { - background: #15151573; - border-radius: 2px; - border-color: #00000038; -} - -.mdc-card { - border-color: #e0e0e014; - background-color: rgba(44, 44, 44, .58); -} - -.reset-option { - border-color: #00000038; - border-radius: 5px; - background: #0000004a; -} - -.reset-option:hover { - background: rgba(0, 0, 0, 0.56); -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/admin_v2/chromium.css b/Neutron-trunk/resources/css/admin_v2/chromium.css deleted file mode 100644 index 95a694e..0000000 --- a/Neutron-trunk/resources/css/admin_v2/chromium.css +++ /dev/null @@ -1,8 +0,0 @@ -main { - background-color: rgba(17, 17, 17, .65); - backdrop-filter: blur(10px); -} - -.bg { - background-image: url("../../../resources/image/codename.jpg"); -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/admin_v2/iframe.css b/Neutron-trunk/resources/css/admin_v2/iframe.css deleted file mode 100644 index de31677..0000000 --- a/Neutron-trunk/resources/css/admin_v2/iframe.css +++ /dev/null @@ -1,17 +0,0 @@ -#main-iframe { - border: none; -} - -#main-content { - position: fixed; - margin: 50px 70px; - left: 300px; - top: 0; - bottom: 0; - right: 80px; -} - -#main-title { - font-size: 30px; - font-weight: bold; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/admin_v2/inner.css b/Neutron-trunk/resources/css/admin_v2/inner.css deleted file mode 100644 index 7fad334..0000000 --- a/Neutron-trunk/resources/css/admin_v2/inner.css +++ /dev/null @@ -1,90 +0,0 @@ -body { - margin: 30px 0 0; -} - -#system-head { - display: grid; - grid-template-columns: 160px 1fr; - margin-bottom: 30px; -} - -#system-head-banner { - background: #000; - width: 150px; - height: 80px; - padding: 5px; - border-radius: 10px; -} - -#system-head-banner-image { - background-image: var(--mpcms-banner); - width: 100%; - height: 100%; - background-size: cover; - background-position: center; -} - -#system-head-version { - display: flex; - align-items: center; - margin-left: 20px; -} - -.inner-item { - background-color: rgba(0, 0, 0, .5); - border-radius: 10px; - padding: 10px 20px; - margin-bottom: 10px; - display: grid; - cursor: default; - grid-template-columns: 32px 1fr 32px; -} - -.inner-item:hover { - background-color: rgba(0, 0, 0, .75); -} - -.inner-item:active, .inner-item:focus { - background-color: rgba(0, 0, 0, 1); -} - -.inner-item-image-outer { - vertical-align: middle; - display: flex; - align-items: center; - width: 32px; -} - -.inner-item-image { - vertical-align: middle; - filter: invert(1); - width: 32px; -} - -.inner-item-enter-outer { - vertical-align: middle; - display: flex; - align-items: center; - justify-content: center; - text-align: center; - width: 32px; -} - -.inner-item-enter { - text-align: center; - vertical-align: middle; - filter: invert(1); - width: 24px; -} - -.inner-item-text { - margin-left: 15px; - display: flex; - margin-top: 5px; - margin-bottom: 5px; - align-items: center; -} - -.inner-item-description { - opacity: .5; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/admin_v2/main.css b/Neutron-trunk/resources/css/admin_v2/main.css deleted file mode 100644 index de75268..0000000 --- a/Neutron-trunk/resources/css/admin_v2/main.css +++ /dev/null @@ -1,23 +0,0 @@ -main { - position: fixed; - inset: 0; - z-index: 10; - background: #111 -} - -.bg { - position: fixed; - inset: 0; - z-index: 2; -} - -aside { - height: 100%; - width: 300px; - display: inline-block; -} - -* { - color: white; - font-family: "Noto Sans", "Segoe UI", "CMS", sans-serif; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/admin_v2/navigation.css b/Neutron-trunk/resources/css/admin_v2/navigation.css deleted file mode 100644 index e45e54f..0000000 --- a/Neutron-trunk/resources/css/admin_v2/navigation.css +++ /dev/null @@ -1,131 +0,0 @@ -#nav-header { - display: grid; - grid-template-columns: 64px 1fr; - margin: 30px 20px; - cursor: default; -} - -#nav-header-icon { - background: rgba(17, 17, 17, .5); - width: 64px; - height: 64px; - border-radius: 999px; -} - -#nav-header-names-outer { - margin-left: 15px; - display: flex; - align-items: center; -} - -.nav-item-icon { - vertical-align: middle; - width: 24px; - margin-left: 10px; -} - -.nav-item-name { - vertical-align: middle; - margin-left: 5px; -} - -.nav-item { - padding: 7px 0; - border-left: 3px solid transparent; - border-radius: 5px; - margin-left: 5px; - cursor: default; -} - -.nav-item.selected { - background: rgba(200, 200, 200, .25); - border-left: 3px solid var(--codename-light); -} - -.nav-item:not(.selected):hover { - background: rgba(200, 200, 200, .1); -} - -.nav-item:not(.selected):focus, .nav-item:not(.selected):active { - background: rgba(200, 200, 200, .25); -} - -.main-title-home { - top: -6px; - filter: invert(1); - width: 24px; - display: inline-block; - left: 2px; - position: relative; -} - -.main-title-home-outer { - display: none; - height: 28px; - display: inline-block; - padding: 2px; - width: 28px; - position: relative; - top: 8px; - border-radius: 5px; -} - -.main-title-home-outer:hover { - background: rgba(0, 0, 0, .5); -} - -.main-title-home-outer:active, .main-title-home-outer:focus { - background: rgba(0, 0, 0, .75); -} - -#nav-header { - border-radius: 5px; - margin: 20px 20px; - text-decoration: none; - padding: 10px 10px; - cursor: default; -} - -#nav-header:focus, #nav-header:active { - background: rgba(200, 200, 200, .25) !important; -} - -#nav-header:hover { - background: rgba(200, 200, 200, .1); -} - -@media (max-width: 700px) { - #nav-header-names-outer { - display: none !important; - } - - aside { - width: 64px !important; - } - - .nav-item-name { - display: none !important; - } - - .nav-item { - width: 45px !important; - } - - #main-content { - left: 64px !important; - top: 0 !important; - bottom: 0 !important; - right: 0 !important; - margin: 30px 20px !important; - } - - #nav-header-icon { - width: 32px !important; - height: 32px !important; - } - - #nav-header { - grid-template-columns: 32px 1fr !important; - margin: 5px 5px !important; - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/admin_widgets.css b/Neutron-trunk/resources/css/admin_widgets.css deleted file mode 100644 index 17b5719..0000000 --- a/Neutron-trunk/resources/css/admin_widgets.css +++ /dev/null @@ -1,62 +0,0 @@ -.switch { - position: relative; - display: inline-block; - width: 30px; - height: 17px; - vertical-align: middle; - } - - .switch input { - opacity: 0; - width: 0; - height: 0; - vertical-align: middle; - } - - .slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - -webkit-transition: .2s; - transition: .2s; - vertical-align: middle; - } - - .slider:before { - position: absolute; - content: ""; - height: 13px; - width: 13px; - left: 2px; - bottom: 2px; - background-color: white; - -webkit-transition: .2s; - transition: .2s; - } - - input:checked + .slider { - background-color: #2196F3; - } - - input:focus + .slider { - box-shadow: 0 0 1px #2196F3; - } - - input:checked + .slider:before { - -webkit-transform: translateX(13px); - -ms-transform: translateX(13px); - transform: translateX(13px); - } - - /* Rounded sliders */ - .slider.round { - border-radius: 34px; - } - - .slider.round:before { - border-radius: 50%; - } \ No newline at end of file diff --git a/Neutron-trunk/resources/css/ajax.css b/Neutron-trunk/resources/css/ajax.css deleted file mode 100644 index 1546df1..0000000 --- a/Neutron-trunk/resources/css/ajax.css +++ /dev/null @@ -1,77 +0,0 @@ -@import "./codename.css"; - -html, body { - height: 100%; - width: 100%; - margin: 0; - overflow: hidden; -} - -iframe { - height: 100%; - width: 100%; -} - -#loader { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, .5); - display: flex; - align-items: center; - justify-content: center; -} - -.spinner { - animation: rotator 1.4s linear infinite; -} - -@keyframes rotator { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(270deg); - } -} - -.path { - stroke-dasharray: 187; - stroke-dashoffset: 0; - transform-origin: center; - animation: dash 1.4s ease-in-out infinite, colors 5.6s ease-in-out infinite; -} - -@keyframes colors { - 0% { - stroke: var(--codename-theme); - } - 25% { - stroke: var(--codename-secondary); - } - 50% { - stroke: var(--codename-light); - } - 75% { - stroke: var(--codename-theme); - } - 100% { - stroke: var(--codename-secondary); - } -} - -@keyframes dash { - 0% { - stroke-dashoffset: 187; - } - 50% { - stroke-dashoffset: 46.75; - transform: rotate(135deg); - } - 100% { - stroke-dashoffset: 187; - transform: rotate(450deg); - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/alerts.css b/Neutron-trunk/resources/css/alerts.css deleted file mode 100644 index 12dc0fd..0000000 --- a/Neutron-trunk/resources/css/alerts.css +++ /dev/null @@ -1,116 +0,0 @@ -/* Toast message */ -#snackbar { - visibility: hidden; - min-width: 250px; - background-color: #333; - color: #fff; - text-align: center; - padding: 16px; - position: fixed; - z-index: 99999999999999999999; - left: 0; - bottom: 0; - width: 100%; - width: calc(100% - 32px); -} - -#snackbar.snackbar_show { - visibility: visible; - -webkit-animation: fadein 0.5s, fadeout 0.5s 4.5s; - animation: fadein 0.5s, fadeout 0.5s 4.5s; -} - -@-webkit-keyframes fadein { - from {bottom: -30px; opacity: 0;} - to {bottom: 0px; opacity: 1;} -} - -@keyframes fadein { - from {bottom: -30px; opacity: 0;} - to {bottom: 0px; opacity: 1;} -} - -@-webkit-keyframes fadeout { - from {bottom: 0px; opacity: 1;} - to {bottom: -30px; opacity: 0;} -} - -@keyframes fadeout { - from {bottom: 0px; opacity: 1;} - to {bottom: -30px; opacity: 0;} -} - -/* Legacy dialogs */ -pjse-placeholder { - z-index: 99999999999999999999; - display: block; - position: fixed; - top: 0; - right: 0; - left: 0; - bottom: 0; - background-color: rgba(0, 0, 0, .5); - filter: blur(0); -} - -pjse-window { - margin: 0; - position: absolute; - top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); - text-align: center; - width: 100%; - display: block; -} - -pjse-window-inner { - background: white; - color: black; - padding: 10px 15px; - border-radius: 10px; - display: inline-block; - text-align: left; - padding-bottom: 20px; - box-shadow: 1px 1px 12px black; -} - -pjse-title { - color: black; - display: block; - margin: 10px 0px; - font-size: 16px; - font-weight: bold; -} - -pjse-message { - color: black; -} - -pjse-close { - display: block; - text-align: right; -} - -pjse-close > span { - text-align: right; - color: #0bc7e8; - font-weight: bold; - padding: 10px; - border-radius: 5px; - background: transparent; - transition: background 200ms; - cursor: pointer; -} - -pjse-close > span:hover { - background: #0be1e83b; -} - -pjse-close > span:active { - background: #0bb4e862; -} - -.pjse-blurry { - filter: blur(5px); -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/codename.css b/Neutron-trunk/resources/css/codename.css deleted file mode 100644 index 5d28175..0000000 --- a/Neutron-trunk/resources/css/codename.css +++ /dev/null @@ -1,5 +0,0 @@ -:root { - --codename-theme: #32818b; - --codename-secondary: #0e4a52; - --codename-light: #a2e2e8; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/error.css b/Neutron-trunk/resources/css/error.css deleted file mode 100644 index 19cabbc..0000000 --- a/Neutron-trunk/resources/css/error.css +++ /dev/null @@ -1,16 +0,0 @@ -* { - font-family: CMS, Arial, Calibri, Ubuntu, Roboto, Liberation Sans, Helvetica, sans-serif; -} - -body { - background-image: url("../image/error.jpg"); - background-size: 100%; - background-repeat: no-repeat; - background-position: initial; - overflow: hidden; -} - -.discover { - color: black; - max-width: 40%; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/fonts-import.css b/Neutron-trunk/resources/css/fonts-import.css deleted file mode 100644 index ca69eac..0000000 --- a/Neutron-trunk/resources/css/fonts-import.css +++ /dev/null @@ -1,36 +0,0 @@ -@font-face { - font-family: CMS; - src: url('../fonts/font-regular.ttf'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: CMS; - src: url('../fonts/font-italic.ttf'); - font-weight: normal; - font-style: italic; -} - -@font-face { - font-family: CMS; - src: url('../fonts/font-bold.ttf'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: CMS; - src: url('../fonts/font-bold-italic.ttf'); - font-weight: bold; - font-style: italic; -} - -.centered { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - text-align: center; - width: 100%; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/main.css b/Neutron-trunk/resources/css/main.css deleted file mode 100644 index e6047b6..0000000 --- a/Neutron-trunk/resources/css/main.css +++ /dev/null @@ -1,485 +0,0 @@ -* { - font-family: CMS, Arial, Calibri, Ubuntu, Roboto, Liberation Sans, Helvetica, sans-serif; -} - -html { - height: 100%; -} - -body { - margin: 0; - height: auto; -} - -#siteadmin { - background: black; - color: white; - padding: 4px 32px; - font-size: 10px; - height: 12px; -} - -#siteadmin-button { - float: right; - cursor: pointer; - background: transparent; - transition: background 100ms; - margin: -4px; - padding: 4px; - padding-bottom: 0; - color: white; - text-decoration: none; -} - -#siteadmin-button:hover { - background: rgb(41, 41, 41); -} - -.sab { - cursor: pointer; - background: transparent; - transition: background 100ms; - margin: -4px; - padding: 4px; - padding-bottom: 3px; - color: white; - text-decoration: none; -} - -.sab:hover { - background: rgb(41, 41, 41); -} - -#siteadmin-img { - filter: invert(100%); - width: 16px; - height: 16px; - vertical-align: middle; -} - -#banner { - padding: 40px 50px; - background-position: center; - background-size: cover; - padding-top: 60px; -} - -#banner-menu { - padding: 20px 50px; - background-position: center; - background-size: cover; -} - -@media (max-width: 500px) { - .branding-mobile { - display: initial; - } - .branding-desktop { - display: none; - } - #banner { - padding: 20px 25px; - padding-top: 81px; - } - .menubar-link-text { - display: none; - } - #banner-logo { - width: 36px !important; - height: 36px !important; - } -} - -@media (min-width: 500px) { - .branding-mobile { - display: none; - } - .branding-desktop { - display: initial; - } -} - -#banner-name { - font-weight: lighter; - font-size: 20px; - color: white; - margin-top: 15px; -} - -#banner-menu-name { - font-weight: lighter; - font-size: 14px; - color: white; - margin-top: 15px; -} - -.banner-black { - color: black !important; -} - -#banner-logo { - width: 48px; - height: 48px; - vertical-align: middle; - margin-right: 20px; - border-radius: 999px; - border-color: white; - border-width: 2px; - border-style: solid; -} - -#banner-menu-logo { - width: 24px; - height: 24px; - vertical-align: middle; - margin-right: 20px; - border-radius: 999px; - border-color: white; - border-width: 2px; - border-style: solid; -} - -#always-on-top { - position: fixed; - width: 100%; -} - -#menubar { - padding: 10px 20px; - background: rgb(66, 66, 66); - box-shadow: 1px 10px 12px rgba(0, 0, 0, .5); -} - -.menubar-link { - color: white; - text-decoration: none; - cursor: pointer; -} - -.menubar-img { - filter: invert(100%); - vertical-align: middle; - padding-right: 5px; - width: 20px; - height: 20px; -} - -#menubar-link-tools { - float: right; -} - -#menubar-close { - filter: invert(100%); - top: 0; - position: fixed; - cursor: pointer; - right: 0; - padding: 5px; -} - -#sidebar-close { - top: 0; - position: fixed; - cursor: pointer; - left: 0; - padding: 5px; -} - -#sidebar-title { - top: 7.5px; - position: fixed; - right: 30%; - font-weight: bold; -} - -#sidebar-separator { - margin-top: 7.5px; - border-bottom-color: black; - border-bottom-width: 1px; - border-bottom-style: solid; - position: fixed; - top: 25px; - width: 100%; -} - -#sidebar-widgets { - top: 32px; - position: relative; -} - -.menu-link { - text-align: center; - display: block; - width: 100%; - padding: 5px; - color: black; -} - -.menu-link:hover { - color: rgb(77, 77, 77); -} - -.pushbar { - overflow-x: hidden; -} - -#page-content { - padding: 8px; - background: white; -} - -#page-content h1 { - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: #a4a4a4; -} - -#page-content h2 { - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: #a4a4a4; -} - -#page-placeholder, body { - background: rgb(66, 66, 66); -} - -#page-footer { - color: white; - padding: 20px; -} - -#widget-space { - border-bottom-color: rgb(179, 179, 179); - border-bottom-style: solid; - border-bottom-width: 1px; - padding: 10px; -} - -#widget-space h1, #widget-space h2, #widget-space h3, #widget-space h4, #widget-space h5, #widget-space h6 { - margin-top: 0; -} - -#galery_thumbnails { - margin: 0% 15%; -} - -.photo { - width: 30%; - margin: 10px; - background: #c8c8c8; - padding: 15px 5px; - box-shadow: #c8c8c8 1px 1px 12px; - display: inline-block; - border-radius: 7.5px; - border: #716f6f 1px solid; -} - -.photo_image { - cursor: pointer; - border-width: 1px; - border-style: solid; - border-color: black; - width: 90%; - filter: blur(5px); - transition: filter 200ms; - border-radius: 5px; -} - -.photo_image.loaded { - filter: none !important; -} - -@media (max-width: 500px) { - .menubar-mobile { - display: initial; - } - .menulink-desktop { - display: none; - } - .menubar-desktop { - display: none; - } -} - -@media (min-width: 500px) { - .menubar-mobile { - display: none; - } - .menulink-desktop { - display: initial; - } - .menubar-desktop { - display: initial; - } -} - -.menulink-desktop { - color: white; - padding: 10px 20px; - cursor: pointer; - margin: -10px 0; - transition: background 200ms; - text-decoration: none; -} - -.menulink-desktop:hover { - background: #626262; -} - -.menulink-desktop:active { - background: #1d1d1d; -} - -.pushbar_overlay { - background: #2f2f2f; -} - -[data-pushbar-id].opened { - box-shadow: 1px 1px 12px gray; - z-index: 999999999 !important; - margin-top: 20px; -} - -.menubar-link { - margin: -10px; - padding: 10px; - padding-bottom: 8px; - transition: background 200ms; -} - -.menubar-link:hover { - background: #626262; -} - -.menubar-link:active { - background: #1d1d1d; -} - -.message_img { - width: 36px; - height: 36px; - z-index: -1; -} - -.message_info { - background: rgba(116, 227, 255, 0.31); - margin: 10px; - border-radius: 10px; - padding: 5px 10px; - z-index: -2; -} - -.message_error { - background: rgba(255, 117, 117, 0.31); - margin: 10px; - border-radius: 10px; - padding: 5px 10px; - z-index: -2; - color: white; -} - -blockquote { - margin-left: 0; - margin-right: 0; - border-left: 5px solid #ccc; - padding: 0px 1.5em; - font-style: italic; -} - -blockquote p { - margin: 0; - padding: 16px 0px; -} - -a:not([class]), a[class=""] { - color: inherit; -} - -a:not([class]):hover, a[class=""]:hover { - text-decoration: none; -} - -a:not([class]):not([id]):active, a[class=""][id=""]:active { - text-decoration: none; - opacity: 75%; -} - -.photo_label { - color: black; - padding: 10px 0; - display: block; - margin-bottom: -15px; -} - -.sticky { - position: fixed; - top: 20px; - width: 97%; -} - -/* Add some top padding to the page content to prevent sudden quick movement (as the header gets a new position at the top of the page (position:fixed and top:0) */ -.sticky ~ #page-placeholder { - padding-top: 39px; - /* padding-top: 191px; */ -} - -#always-on-top, #menubar { - z-index: 99999999; -} - -@media (min-width: 700px) { - #sidebar { - height: calc(100% - 152px) !important; - position: absolute; - right: 0; - background: rgb(66, 66, 66); - top: 152px; - overflow-y: hidden; - width: 256px !important; - max-width: initial !important; - transform: initial !important; - color: white !important; - } - #menubar { - z-index: initial; - } - #sidebar-widgets { - top: initial !important; - padding-top: 30px; - display: block; - } - #sidebar-separator, #sidebar-title, #sidebar-close { - opacity: 0; - cursor: default; - } - #menubar-link-tools { - display: none; - } - #page-placeholder { - margin-right: 256px; - } -} - -.hint { - text-decoration: dotted underline; - cursor: help; -} - -#sidebar-widgets img { - filter: invert(100%); -} - -.image.image_resized > img { - width:100%; -} - -.noeffects { - filter: none !important; -} - -figure.image.image_resized { - text-align: center; - margin-left: auto; - margin-right: auto; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/polymer/content.css b/Neutron-trunk/resources/css/polymer/content.css deleted file mode 100644 index 7bdc471..0000000 --- a/Neutron-trunk/resources/css/polymer/content.css +++ /dev/null @@ -1,150 +0,0 @@ -#page-elements { - display: grid; - grid-template-columns: 1fr 256px; - column-gap: 38px; - margin-top: -96px; -} - -.mdc-drawer-app-content { - padding-top: 56px; -} - -body { - background-color: var(--mdc-theme-background); -} - -#page-elements #page-content-inner, #page-elements #page-content-widgets-desktop, #page-elements #page-content-widgets-mobile { - background: whitesmoke; - padding: 15px 25px; - border-radius: 8px; - box-shadow: #80808042 0px 1px 10px; -} - -#page-elements #page-content-inner { - margin-left: 38px; -} - -#page-elements #page-content-widgets-desktop { - margin-right: 38px; -} - -#page-content-colorbar { - background: linear-gradient(to bottom, var(--mdc-theme-primary) 0%, var(--mdc-theme-primary) 50%,transparent 50.999%,transparent 100%); - border-top-left-radius: 8px; - border-top-right-radius: 8px; - height: 28px; - margin-top: -15px; - margin-left: -25px; - margin-right: -25px; - display: block; -} - -#page-footer-colorbar { - background: linear-gradient(to top, var(--mdc-theme-primary) 0%, var(--mdc-theme-primary) 50%,transparent 50.999%,transparent 100%); - height: 28px; - display: block; - margin-top: 20px; - transform: rotate(180deg); - box-shadow: 0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12); -} - -#page-banner { - background-image: linear-gradient(to bottom, transparent 70%, var(--mdc-theme-background)), var(--mpcms-banner); - background-position: center; - background-size: cover; - height: calc(20vw + 64px); -} - -.widgets-header { - margin-top: 5px; - margin-bottom: 5px; - color: gray; - letter-spacing: .0892857143em; - letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); - text-transform: uppercase; - text-transform: var(--mdc-typography-button-text-transform, uppercase); -} - -#page-elements a { - color: black; - text-decoration: underline; - opacity: 1; - transition: opacity 200ms; -} - -#page-footer-content a, #page-footer-links a { - color: white; - text-decoration: underline; - opacity: 1; - transition: opacity 200ms; -} - -#page-elements a:hover, #page-footer-content a:hover, #page-footer-links a:hover { - opacity: .75; -} - -#page-elements a:active, #page-footer-content a:active, #page-footer-links a:active { - opacity: .5; -} - -html, body { - width: 100%; - height: 100%; - overflow-x: hidden; -} - -figure img { - width: 100%; -} - -figure.image.image_resized { - text-align: center; - margin-left: auto; - margin-right: auto; -} - -#page-footer { - margin-top: -15px; - background: var(--cms-extra-superdark, #0f0024); - z-index: 99; - position: relative; - color: white; - padding: 25px 50px; -} - -#page-footer-title-top-button, #page-footer-title-settings-button { - color: white; -} - -#page-footer-title-settings-button-inner { - border: 1px white solid; - border-radius: 999px; -} - -#page-footer-title { - display: grid; - grid-template-columns: 1fr 100px; -} - -#page-footer-title-inner { - display: flex; - align-items: center; - font-size: 22px; -} - -#page-footer-links { - font-size: 12px; - margin-top: 15px; -} - -#page-footer-title-inner { - max-width: 256px; - width: 256px; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} - -h1 { - font-size: 32px; -} diff --git a/Neutron-trunk/resources/css/polymer/dark.css b/Neutron-trunk/resources/css/polymer/dark.css deleted file mode 100644 index de1f9a7..0000000 --- a/Neutron-trunk/resources/css/polymer/dark.css +++ /dev/null @@ -1,26 +0,0 @@ -.widget_cuc { - filter: invert(100%); -} - -#page-banner { - background-image: linear-gradient(to bottom, rgba(0, 0, 0, .5) 70%, var(--mdc-theme-background)), var(--mpcms-banner) !important; -} - -#page-elements #page-content-inner, #page-elements #page-content-widgets-desktop, #page-elements #page-content-widgets-mobile { - background: #171717 !important; - box-shadow: #1a1a1a42 0px 1px 10px !important; - color: white !important; -} - -#page-elements a { - color: whitesmoke !important; -} - -[data-pushbar-id] { - background: #1e1e1e !important; - color: white !important; -} - -.mdc-list-item:not(.mdc-list-item--activated), .mdc-list-item:not(.mdc-list-item--activated) .material-icons-outlined { - color: white !important; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/polymer/fonts.css b/Neutron-trunk/resources/css/polymer/fonts.css deleted file mode 100644 index 98057ed..0000000 --- a/Neutron-trunk/resources/css/polymer/fonts.css +++ /dev/null @@ -1,103 +0,0 @@ -@font-face { - font-family: "Google Sans"; - src: url('../../fonts/font-regular.ttf'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: "Google Sans"; - src: url('../../fonts/font-italic.ttf'); - font-weight: normal; - font-style: italic; -} - -@font-face { - font-family: "Google Sans"; - src: url('../../fonts/font-bold.ttf'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: "Google Sans"; - src: url('../../fonts/font-bold-italic.ttf'); - font-weight: bold; - font-style: italic; -} - -@font-face { - font-family: "Roboto"; - src: url('../../fonts/body/Roboto-Regular.ttf'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: "Roboto"; - src: url('../../fonts/body/Roboto-Italic.ttf'); - font-weight: normal; - font-style: italic; -} - -@font-face { - font-family: "Roboto"; - src: url('../../fonts/body/Roboto-Bold.ttf'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: "Roboto"; - src: url('../../fonts/body/Roboto-BoldItalic.ttf'); - font-weight: bold; - font-style: italic; -} - -.centered { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - text-align: center; - width: 100%; -} - -center { /* Polyfill in case HTML5 drops the support */ - text-align: center; -} - -* { - font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', "Noto Sans", Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif -} - -h1, h2, h3, h4, h5, h6, .title, #snackbar, pjse-title { - font-family: "Google Sans", Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', "Noto Sans", Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - font-weight: 400; -} - -.hide { - display: none; -} - -html, body { - margin: 0; -} - -.menubutton { - font-variant: normal; - color: white; - letter-spacing: 0; - text-transform: none; -} - -#menuitems { - vertical-align: middle; - display: flex; - align-content: center; -} - -.menuitem { - width: max-content; - font-size: inherit; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/polymer/gallery.css b/Neutron-trunk/resources/css/polymer/gallery.css deleted file mode 100644 index d4dccac..0000000 --- a/Neutron-trunk/resources/css/polymer/gallery.css +++ /dev/null @@ -1,37 +0,0 @@ -#galery_thumbnails { - margin: 0% 15%; -} - -.photo_image { - filter: blur(5px); - width: 40%; - max-width: 480px; - border-radius: 10px; -} - -.photo_image.loaded { - filter: none !important; -} - -.photo a { - opacity: 1 !important; -} - -.photo { - background: #2d2d2d; - display: inline; - border-radius: 10px; -} - -.photo a:hover { - transition: filter 200ms; - filter: none !important; -} - -.photo a:hover img { - filter: brightness(125%) !important; -} - -.photo a:active img, .photo a:focus img { - filter: brightness(150%) !important; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/polymer/menubar.css b/Neutron-trunk/resources/css/polymer/menubar.css deleted file mode 100644 index ba291fa..0000000 --- a/Neutron-trunk/resources/css/polymer/menubar.css +++ /dev/null @@ -1,44 +0,0 @@ -.mdc-top-app-bar, .mdc-top-app-bar__row, .mdc-top-app-bar__section--align-start { - height: 56px; -} - -.mdc-top-app-bar__section--align-start { - padding-top: 0; - padding-bottom: 0; -} - -.mdc-top-app-bar { - background-color: rgb(8, 8, 8); - box-shadow: 0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12); -} - -#menubar-logo { - border-radius: 999px; - position: relative; - width: 36px; - height: 36px; - background-color: rgb(46, 46, 46); - background-image: url("../../upload/siteicon.png"); - background-size: 100%; -} - -#menubar-home-link { - display: inherit; - color: inherit; - text-decoration: inherit; - cursor: pointer; -} - -.mdc-top-app-bar__title { - max-width: 256px; -} - -.menubutton { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -#menuitems { - justify-content: right; -} diff --git a/Neutron-trunk/resources/css/polymer/responsive.css b/Neutron-trunk/resources/css/polymer/responsive.css deleted file mode 100644 index 2c4535b..0000000 --- a/Neutron-trunk/resources/css/polymer/responsive.css +++ /dev/null @@ -1,123 +0,0 @@ -@media (min-width: 500px) { - .rsp-mobileonly { - display: none; - } -} - -@media (max-width: 500px) { - .rsp-desktoponly { - display: none; - } -} - -.mdc-drawer .mdc-list-item--activated, .mdc-drawer .mdc-list-item--activated * { - color: var(--mdc-theme-primary) !important; -} - -#menuitems .mdc-button .menubutton { - max-width: 124px; -} - -@media (max-width: 1070px) { - #menuitems .mdc-button:nth-child(8) { - display: none; - } -} - -@media (max-width: 986px) { - #menuitems .mdc-button:nth-child(7) { - display: none; - } -} - -@media (max-width: 915px) { - #menuitems .mdc-button:nth-child(6) { - display: none; - } -} - -@media (max-width: 874px) { - #menuitems .mdc-button:nth-child(5) { - display: none; - } -} - -@media (max-width: 832px) { - #menuitems .mdc-button:nth-child(4) { - display: none; - } -} - -@media (max-width: 748px) { - #menuitems .mdc-button:nth-child(3) { - display: none; - } -} - -@media (max-width: 674px) { - #menuitems .mdc-button:nth-child(2) { - display: none; - } -} - -@media (max-width: 566px) { - #menuitems .mdc-button:nth-child(1) { - display: none; - } -} - -@media (max-width: 860px) { - .rsp-widgetbar { - display: initial; - } - - #page-elements #page-content-widgets-desktop { - display: none; - } - - #page-elements #page-content-widgets-mobile { - border-radius: 0 !important; - margin: 0 !important; - } - - #page-elements { - grid-template-columns: 1fr; - } - - #page-elements #page-content-inner { - margin: 0; - border-radius: 0 - } - - #page-content-colorbar { - border-radius: 0; - } - - #footer-container { - margin-top: -20px; - } - - #page-footer { - padding: 15px 25px; - } - - #page-banner { - height: 75px; - } - - #page-content-colorbar { - margin-top: 0; - } -} - -@media (min-width: 860px) { - .rsp-simplifiedonly { - display: none; - } -} - -@media (max-width: 400px) { - #page-footer-title-inner { - display: none; - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/polymer/scrollbars.css b/Neutron-trunk/resources/css/polymer/scrollbars.css deleted file mode 100644 index 522cfd5..0000000 --- a/Neutron-trunk/resources/css/polymer/scrollbars.css +++ /dev/null @@ -1,24 +0,0 @@ -::-webkit-scrollbar { - width: 10px; -} - -/* Track */ -::-webkit-scrollbar-track { - background-color: rgba(0, 0, 0, .25); -} - -/* Handle */ -::-webkit-scrollbar-thumb { - background-color: rgba(0, 0, 0, 0.5); - border-radius: 999px; -} - -/* Handle on hover */ -::-webkit-scrollbar-thumb:hover { - background-color: rgba(0, 0, 0, 0.7); -} - -/* Handle on hold */ -::-webkit-scrollbar-thumb:active { - background-color: rgb(0, 0, 0) !important; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/polymer/warnings.css b/Neutron-trunk/resources/css/polymer/warnings.css deleted file mode 100644 index 05b25b6..0000000 --- a/Neutron-trunk/resources/css/polymer/warnings.css +++ /dev/null @@ -1,115 +0,0 @@ -#snackbar { - visibility: hidden; - min-width: 250px; - background-color: #333; - color: #fff; - text-align: center; - padding: 16px; - position: fixed; - z-index: 99999999999999999999; - left: 0; - bottom: 0; - width: 100%; - width: calc(100% - 32px); -} - -#snackbar.snackbar_show { - visibility: visible; - -webkit-animation: fadein 0.5s, fadeout 0.5s 4.5s; - animation: fadein 0.5s, fadeout 0.5s 4.5s; -} - -@-webkit-keyframes fadein { - from {bottom: -30px; opacity: 0;} - to {bottom: 0px; opacity: 1;} -} - -@keyframes fadein { - from {bottom: -30px; opacity: 0;} - to {bottom: 0px; opacity: 1;} -} - -@-webkit-keyframes fadeout { - from {bottom: 0px; opacity: 1;} - to {bottom: -30px; opacity: 0;} -} - -@keyframes fadeout { - from {bottom: 0px; opacity: 1;} - to {bottom: -30px; opacity: 0;} -} - -/* Legacy dialogs */ -pjse-placeholder { - z-index: 99999999999999999999; - display: block; - position: fixed; - top: 0; - right: 0; - left: 0; - bottom: 0; - background-color: rgba(0, 0, 0, .5); - filter: blur(0); -} - -pjse-window { - margin: 0; - position: absolute; - top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); - text-align: center; - width: 100%; - display: block; -} - -pjse-window-inner { - background: white; - color: black; - padding: 10px 15px; - border-radius: 10px; - display: inline-block; - text-align: left; - padding-bottom: 20px; - box-shadow: 1px 1px 12px black; -} - -pjse-title { - color: black; - display: block; - margin: 10px 0px; - font-size: 16px; - font-weight: bold; -} - -pjse-message { - color: black; -} - -pjse-close { - display: block; - text-align: right; -} - -pjse-close > span { - text-align: right; - color: #0bc7e8; - font-weight: bold; - padding: 10px; - border-radius: 5px; - background: transparent; - transition: background 200ms; - cursor: pointer; -} - -pjse-close > span:hover { - background: #0be1e83b; -} - -pjse-close > span:active { - background: #0bb4e862; -} - -.pjse-blurry { - filter: blur(5px); -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/preview.css b/Neutron-trunk/resources/css/preview.css deleted file mode 100644 index 91ab1aa..0000000 --- a/Neutron-trunk/resources/css/preview.css +++ /dev/null @@ -1,150 +0,0 @@ -@import "./fonts-import.css"; - -* { - font-family: CMS, Arial, Calibri, Ubuntu, Roboto, Liberation Sans, Helvetica, sans-serif; -} - -.icon { - filter: invert(100%); - top: 5px; - left: 5px; - margin: 5px; - width: 36px; - cursor: pointer; -} - -.loaded { - filter: none !important; -} - -.ppreview { - filter: blur(10px); - transition: filter 200ms; -} - -.download, .zoom { - position: fixed; - bottom: 10px; - background: rgb(51, 51, 51); - padding: 5px 10px; - left: 10px; - border-radius: 999px; - opacity: .25; - cursor: pointer; - transition: opacity 200ms; - color: initial; - text-decoration: none; - color: white; - padding-left: 29px; - background-image: url("../image/getimage.png"); - background-size: 24px; - background-repeat: no-repeat; - background-position-x: 5px; - background-position-y: 2.5px; -} - -.download { - left: 90px !important; -} - -.zoomin { - background-image: url("../image/gallery-zoom-plus.svg"); - height: 24px; - width: 24px; - background-size: 24px; - filter: invert(100%); - display: inline-block; - opacity: .5; - transition: opacity 200ms; - box-shadow: none !important; - background-position: center; -} - -.zoomout { - background-image: url("../image/gallery-zoom-minus.svg"); - height: 24px; - width: 24px; - background-size: 24px; - filter: invert(100%); - display: inline-block; - opacity: .5; - transition: opacity 200ms; - box-shadow: none !important; - background-position: center; -} - -.image, .container { - cursor: move; -} - -.zoom { - display: flex; - align-items: center; - padding-top: 0; - background: rgba(51, 51, 51, 1); - padding-bottom: 0; - padding-left: 10px; - height: 29px; - width: 48px; - background-image: none; -} - -.zoom:hover { - opacity: 1; - box-shadow: 1px 1px 2px rgb(51, 51, 51); -} - -.download:hover, .zoomin:hover, .zoomout:hover { - opacity: .75; - box-shadow: 1px 1px 2px rgb(51, 51, 51); -} - -.download:active, .zoomin:active, .zoomout:active { - opacity: 1; - box-shadow: 1px 1px 2px rgb(51, 51, 51); -} - -.image { - height: 100%; - -webkit-user-drag: none; - -khtml-user-drag: none; - -moz-user-drag: none; - -o-user-drag: none; - cursor: move; - pointer-events: none; -} - -.container { - height: 100%; - text-align: center; -} - -input[type=checkbox] { - display: none; -} - -body, * { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.close { - position: fixed; - top: 0; - opacity: 1; - transition: opacity 200ms; -} - -.close:hover { - position: fixed; - top: 0; - opacity: .75; -} - -.close:active, .close:focus { - opacity: .5; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/ready.css b/Neutron-trunk/resources/css/ready.css deleted file mode 100644 index df489ba..0000000 --- a/Neutron-trunk/resources/css/ready.css +++ /dev/null @@ -1,52 +0,0 @@ -* { - font-family: CMS, Arial, Calibri, Ubuntu, Roboto, Liberation Sans, Helvetica, sans-serif; -} - -body { - background-image: url("../image/oobe.jpg"); - background-size: 100%; - background-repeat: no-repeat; - background-position: initial; -} - -.discover { - max-width: 40%; -} - -a img { - vertical-align: middle; - padding-right: 5px; -} - -a { - padding: 10px; - border-radius: 5px; - border-style: solid; - border-color: black; - border-width: 1px; - text-decoration: none; - color: black; - transition: border-color 200ms, color 200ms; -} - -a:hover { - border-color: rgb(43, 43, 43); - color: rgb(43, 43, 43); -} - -a:active { - border-color: rgb(77, 77, 77); - color: rgb(77, 77, 77); -} - -hr { - width: 64px; - border-color: black; - border-style: solid; - border-width: 1px; - border-bottom: none; -} - -a:hover > img { - filter: opacity(75%); -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/setup.css b/Neutron-trunk/resources/css/setup.css deleted file mode 100644 index bc63787..0000000 --- a/Neutron-trunk/resources/css/setup.css +++ /dev/null @@ -1,102 +0,0 @@ -* { - font-family: CMS, Arial, Calibri, Ubuntu, Roboto, Liberation Sans, Helvetica, sans-serif; -} - -body { - background-image: url("../../resources/image/config.jpg") !important; - background-size: 100%; - background-repeat: no-repeat; - background-position: initial; -} - -.box { - width: 60% !important; - border-radius: 5px; - box-shadow: 1px 1px 2px gray; - padding: 20px; - background-color: rgb(235, 235, 235); -} - -h1, h2, h3, h4, h5, h6 { - font-weight: normal; -} - -.loader { - width: 56px; - height: 56px; - filter: brightness(0%); -} - -.tip-red { - color: rgb(255, 75, 75); -} - -.tip-green { - color: rgb(132, 255, 75); -} - -.tip-orange { - color: rgb(255, 132, 75); -} - -.termsbox { - background: white; - border: none; - border-color: black; - border-style: solid; - border-width: 1px; - border-radius: 5px; - padding: 5px; - box-shadow: 1px 1px 2px black; -} - -@keyframes blink { - 0% { opacity: 1; } - 50% { opacity: 0; } - 100% { opacity: 1; } -} - -.finisher { - width: 256px; - height: 256px; - filter: brightness(0%); -} - -.update-cancel { - padding: 5px 10px; - border: 1px solid lightgray; - border-radius: 5px; - border-bottom-width: 2px; - background: white; - cursor: pointer; - transition: background 200ms, border-color 200ms; -} - -.update-cancel:hover { - background: lightgray; - border-color: gray; -} - -.update-cancel:active { - background: gray; - border-color: black; -} - -.box { - display: block; - box-shadow: none; - backdrop-filter: blur(10px); - background: rgba(0, 0, 0, .5); - color: white; -} - -.loader, .finisher { - filter: none; -} - -.termsbox { - background: rgba(0, 0, 0, .5); - border: none; - border-radius: 5px; - box-shadow: none; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/spotlight.css b/Neutron-trunk/resources/css/spotlight.css deleted file mode 100644 index ca72fd6..0000000 --- a/Neutron-trunk/resources/css/spotlight.css +++ /dev/null @@ -1,245 +0,0 @@ -/* Spotlight theming */ -:root { - --spotlight-glass: rgba(0, 0, 0, 0.75); - --spotlight-shadow: rgba(0, 0, 0, .75); - --spotlight-background: var(--mpc-menu-background, #ffffff); - --spotlight-text: var(--mdc-theme-on-surface, #000000); - --spotlight-border: var(--mdc-theme-primary, gray); - --spotlight-hover: var(--mpc-slse-hover1, rgba(0, 0, 0, 0.1)); - --spotlight-superhover: var(--mpc-slse-hover1, rgba(0, 0, 0, 0.25)); - - --spotlight-pages-text: rgb(25, 118, 210); - --spotlight-pages-background-heavy: rgba(25, 118, 210, .25); - --spotlight-pages-background-light: rgba(25, 118, 210, .1); - --spotlight-gallery-text: rgb(211, 47, 47); - --spotlight-gallery-background-heavy: rgba(211, 47, 47, .25); - --spotlight-gallery-background-light: rgba(211, 47, 47, .1); - --spotlight-calendar-text: rgb(56, 142, 60); - --spotlight-calendar-background-heavy: rgba(56, 142, 60, .25); - --spotlight-calendar-background-light: rgba(56, 142, 60, .1); - --spotlight-plugins-text: rgb(251, 127, 45); - --spotlight-plugins-background-heavy: rgba(251, 127, 45, .25); - --spotlight-plugins-background-light: rgba(251, 127, 45, .1); - --spotlight-technical-text: rgb(81, 45, 168); - --spotlight-technical-background-heavy: rgba(81, 45, 168, .25); - --spotlight-technical-background-light: rgba(81, 45, 168, .1); - --spotlight-data-text: rgb(0, 121, 107); - --spotlight-data-background-heavy: rgba(0, 121, 107, .25); - --spotlight-data-background-light: rgba(0, 121, 107, .1); - --spotlight-updates-text: rgb(0, 121, 81); - --spotlight-updates-background-heavy: rgba(0, 121, 81, .25); - --spotlight-updates-background-light: rgba(0, 121, 81, .1); - --spotlight-apparence-text: rgb(251, 192, 45); - --spotlight-apparence-background-heavy: rgba(251, 192, 45, .25); - --spotlight-apparence-background-light: rgba(251, 192, 45, .1); -} - -.spotlight * { - box-sizing: border-box; -} - -.spotlight { - opacity: 0; - pointer-events: none; - position: fixed; - top: 0; - z-index: 99999999999999999999999999; - left: 0; - right: 0; - bottom: 0; - background-color: var(--spotlight-glass); - display: flex; - justify-content: center; - color: var(--spotlight-text); -} - -.spotlight.active { - opacity: 1; - pointer-events: auto; -} - -.spotlight-bar { - width: 50%; - top: 0; - position: fixed; - background: var(--spotlight-background); - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; - border: none; - padding: 10px; - box-shadow: 1px 2px 5px var(--spotlight-glass); -} - -.spotlight-bar input { - width: 100%; - padding: 10px 20px; - border: none; - background: none; -} - -.spotlight-suggestions { - border-top: 1px solid var(--spotlight-border); - position: absolute; - top: 100%; - background: var(--spotlight-background); - left: 0; - right: 0; - margin: -5px 0 0 0; - padding: 5px; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; -} - -.spotlight-suggestions li { - list-style: none; - margin: 0; - padding: 0; -} - -.spotlight-suggestions a { - display: block; - text-decoration: none; - padding: 10px 25px; - color: inherit; - border-radius: 5px; - white-space: nowrap; - overflow: hidden !important; - text-overflow: ellipsis; -} - -.spotlight-suggestions li.active a:hover, .spotlight-suggestions li a:hover { - background-color: var(--spotlight-superhover); -} - -.spotlight-suggestions li.active a { - background-color: var(--spotlight-hover); -} - -.spotlight-suggestions mark { - opacity: .3; - background: none; - color: inherit; -} - -.spotlight-icon { - vertical-align: middle; - margin-right: 10px; -} - -.spotlight-suggestions span { - vertical-align: middle; -} - -.spotlight-elements { - display: none; -} - -.spotlight-link__pages:hover, li.active .spotlight-link__pages { - color: var(--spotlight-pages-text); -} - -.spotlight-link__gallery:hover, li.active .spotlight-link__gallery { - color: var(--spotlight-gallery-text); -} - -.spotlight-link__calendar:hover, li.active .spotlight-link__calendar { - color: var(--spotlight-calendar-text); -} - -.spotlight-link__plugins:hover, li.active .spotlight-link__plugins { - color: var(--spotlight-plugins-text); -} - -.spotlight-link__technical:hover, li.active .spotlight-link__technical { - color: var(--spotlight-technical-text); -} - -.spotlight-link__data:hover, li.active .spotlight-link__data { - color: var(--spotlight-data-text); -} - -.spotlight-link__updates:hover, li.active .spotlight-link__updates { - color: var(--spotlight-updates-text); -} - -.spotlight-link__apparence:hover, li.active .spotlight-link__apparence { - color: var(--spotlight-apparence-text); -} - -li a.spotlight-link__pages:hover { - background-color: var(--spotlight-pages-background-heavy) !important; -} - -li.active a.spotlight-link__pages { - background-color: var(--spotlight-pages-background-light); -} - -li a.spotlight-link__gallery:hover { - background-color: var(--spotlight-gallery-background-heavy) !important; -} - -li.active a.spotlight-link__gallery { - background-color: var(--spotlight-gallery-background-light); -} - -li a.spotlight-link__calendar:hover { - background-color: var(--spotlight-calendar-background-heavy) !important; -} - -li.active a.spotlight-link__calendar { - background-color: var(--spotlight-calendar-background-light); -} - -li a.spotlight-link__plugins:hover { - background-color: var(--spotlight-plugins-background-heavy) !important; -} - -li.active a.spotlight-link__plugins { - background-color: var(--spotlight-plugins-background-light); -} - -li a.spotlight-link__technical:hover { - background-color: var(--spotlight-technical-background-heavy) !important; -} - -li.active a.spotlight-link__technical { - background-color: var(--spotlight-technical-background-light); -} - -li a.spotlight-link__data:hover { - background-color: var(--spotlight-data-background-heavy) !important; -} - -li.active a.spotlight-link__data { - background-color: var(--spotlight-data-background-light); -} - -li a.spotlight-link__updates:hover { - background-color: var(--spotlight-updates-background-heavy) !important; -} - -li.active a.spotlight-link__updates { - background-color: var(--spotlight-updates-background-light); -} - -li a.spotlight-link__apparence:hover { - background-color: var(--spotlight-apparence-background-heavy) !important; -} - -li.active a.spotlight-link__apparence { - background-color: var(--spotlight-apparence-background-light); -} - -.spotlight-input { - outline: none; - color: var(--spotlight-text); -} - -.spotlight-link { - cursor: pointer; -} - -#admin.spotlight-blur { - filter: blur(10px); - pointer-events: none; -} diff --git a/Neutron-trunk/resources/css/themes/blue-auto.css b/Neutron-trunk/resources/css/themes/blue-auto.css deleted file mode 100644 index 05864eb..0000000 --- a/Neutron-trunk/resources/css/themes/blue-auto.css +++ /dev/null @@ -1,3 +0,0 @@ -@import url("./blue-light.css") only screen and (prefers-color-scheme: light); -@import url("./blue-light.css") only screen and (prefers-color-scheme: no-preference); -@import url("./blue-dark.css") only screen and (prefers-color-scheme: dark); \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/blue-dark.css b/Neutron-trunk/resources/css/themes/blue-dark.css deleted file mode 100644 index 7285ad4..0000000 --- a/Neutron-trunk/resources/css/themes/blue-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -@import url("../polymer/dark.css"); - -:root { - --mdc-theme-primary: #b5c9ff; - --mdc-theme-secondary: #ffebb4; - --mdc-theme-background: #3a4053; - --mdc-theme-surface: #b5c9ff; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: white; - - --cms-extra-superdark: #040a1a; -} diff --git a/Neutron-trunk/resources/css/themes/blue-light.css b/Neutron-trunk/resources/css/themes/blue-light.css deleted file mode 100644 index b8ff9d7..0000000 --- a/Neutron-trunk/resources/css/themes/blue-light.css +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --mdc-theme-primary: #2962ff; - --mdc-theme-secondary: #ffc629; - --mdc-theme-background: #cedbff; - --mdc-theme-surface: #2962ff; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #040a1a; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/brown-auto.css b/Neutron-trunk/resources/css/themes/brown-auto.css deleted file mode 100644 index 65ed947..0000000 --- a/Neutron-trunk/resources/css/themes/brown-auto.css +++ /dev/null @@ -1,3 +0,0 @@ -@import url("./brown-light.css") only screen and (prefers-color-scheme: light); -@import url("./brown-light.css") only screen and (prefers-color-scheme: no-preference); -@import url("./brown-dark.css") only screen and (prefers-color-scheme: dark); \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/brown-dark.css b/Neutron-trunk/resources/css/themes/brown-dark.css deleted file mode 100644 index baaa3a9..0000000 --- a/Neutron-trunk/resources/css/themes/brown-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -@import url("../polymer/dark.css"); - -:root { - --mdc-theme-primary: #d4c49b; - --mdc-theme-secondary: #a5b0ce; - --mdc-theme-background: #6d644e; - --mdc-theme-surface: #cfc3a2; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #271c00; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/brown-light.css b/Neutron-trunk/resources/css/themes/brown-light.css deleted file mode 100644 index 4c83cb4..0000000 --- a/Neutron-trunk/resources/css/themes/brown-light.css +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --mdc-theme-primary: #d29600; - --mdc-theme-secondary: #003cd2; - --mdc-theme-background: #cfc099; - --mdc-theme-surface: #d29600; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #271c00; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/green-auto.css b/Neutron-trunk/resources/css/themes/green-auto.css deleted file mode 100644 index ea9a940..0000000 --- a/Neutron-trunk/resources/css/themes/green-auto.css +++ /dev/null @@ -1,3 +0,0 @@ -@import url("./green-light.css") only screen and (prefers-color-scheme: light); -@import url("./green-light.css") only screen and (prefers-color-scheme: no-preference); -@import url("./green-dark.css") only screen and (prefers-color-scheme: dark); \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/green-dark.css b/Neutron-trunk/resources/css/themes/green-dark.css deleted file mode 100644 index b245c67..0000000 --- a/Neutron-trunk/resources/css/themes/green-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -@import url("../polymer/dark.css"); - -:root { - --mdc-theme-primary: #90c59a; - --mdc-theme-secondary: #c78fbd; - --mdc-theme-background: #2d4131; - --mdc-theme-surface: #90c59a; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: white; - - --cms-extra-superdark: #002507; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/green-light.css b/Neutron-trunk/resources/css/themes/green-light.css deleted file mode 100644 index 2aeba7c..0000000 --- a/Neutron-trunk/resources/css/themes/green-light.css +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --mdc-theme-primary: #00c924; - --mdc-theme-secondary: #c900a4; - --mdc-theme-background: #cbffd4; - --mdc-theme-surface: #00c924; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #002507; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/orange-auto.css b/Neutron-trunk/resources/css/themes/orange-auto.css deleted file mode 100644 index 59196ff..0000000 --- a/Neutron-trunk/resources/css/themes/orange-auto.css +++ /dev/null @@ -1,3 +0,0 @@ -@import url("./orange-light.css") only screen and (prefers-color-scheme: light); -@import url("./orange-light.css") only screen and (prefers-color-scheme: no-preference); -@import url("./orange-dark.css") only screen and (prefers-color-scheme: dark); \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/orange-dark.css b/Neutron-trunk/resources/css/themes/orange-dark.css deleted file mode 100644 index 454e2f7..0000000 --- a/Neutron-trunk/resources/css/themes/orange-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -@import url("../polymer/dark.css"); - -:root { - --mdc-theme-primary: #ffd6c1; - --mdc-theme-secondary: #bde8ff; - --mdc-theme-background: #493c35; - --mdc-theme-surface: #ffdbc7; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #270e00; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/orange-light.css b/Neutron-trunk/resources/css/themes/orange-light.css deleted file mode 100644 index 8242e1b..0000000 --- a/Neutron-trunk/resources/css/themes/orange-light.css +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --mdc-theme-primary: #ff5b00; - --mdc-theme-secondary: #00a6ff; - --mdc-theme-background: #ffd9c4; - --mdc-theme-surface: #ff5b00; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #270e00; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/purple-auto.css b/Neutron-trunk/resources/css/themes/purple-auto.css deleted file mode 100644 index b0e5dea..0000000 --- a/Neutron-trunk/resources/css/themes/purple-auto.css +++ /dev/null @@ -1,3 +0,0 @@ -@import url("./purple-light.css") only screen and (prefers-color-scheme: light); -@import url("./purple-light.css") only screen and (prefers-color-scheme: no-preference); -@import url("./purple-dark.css") only screen and (prefers-color-scheme: dark); \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/purple-dark.css b/Neutron-trunk/resources/css/themes/purple-dark.css deleted file mode 100644 index 454e2f7..0000000 --- a/Neutron-trunk/resources/css/themes/purple-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -@import url("../polymer/dark.css"); - -:root { - --mdc-theme-primary: #ffd6c1; - --mdc-theme-secondary: #bde8ff; - --mdc-theme-background: #493c35; - --mdc-theme-surface: #ffdbc7; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #270e00; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/purple-light.css b/Neutron-trunk/resources/css/themes/purple-light.css deleted file mode 100644 index 09e4633..0000000 --- a/Neutron-trunk/resources/css/themes/purple-light.css +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --mdc-theme-primary: #7f00a9; - --mdc-theme-secondary: #2aa900; - --mdc-theme-background: #b99fc2; - --mdc-theme-surface: #7f00a9; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #240030; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/red-auto.css b/Neutron-trunk/resources/css/themes/red-auto.css deleted file mode 100644 index 8419949..0000000 --- a/Neutron-trunk/resources/css/themes/red-auto.css +++ /dev/null @@ -1,3 +0,0 @@ -@import url("./red-light.css") only screen and (prefers-color-scheme: light); -@import url("./red-light.css") only screen and (prefers-color-scheme: no-preference); -@import url("./red-dark.css") only screen and (prefers-color-scheme: dark); \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/red-dark.css b/Neutron-trunk/resources/css/themes/red-dark.css deleted file mode 100644 index 824bd8f..0000000 --- a/Neutron-trunk/resources/css/themes/red-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -@import url("../polymer/dark.css"); - -:root { - --mdc-theme-primary: #cc9595; - --mdc-theme-secondary: #93c9c9; - --mdc-theme-background: #694646; - --mdc-theme-surface: #cc9595; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: white; - - --cms-extra-superdark: #300000; -} diff --git a/Neutron-trunk/resources/css/themes/red-light.css b/Neutron-trunk/resources/css/themes/red-light.css deleted file mode 100644 index 1c260ae..0000000 --- a/Neutron-trunk/resources/css/themes/red-light.css +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --mdc-theme-primary: #c90000; - --mdc-theme-secondary: #00c9c9; - --mdc-theme-background: #c99898; - --mdc-theme-surface: #c90000; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #300000; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/white-auto.css b/Neutron-trunk/resources/css/themes/white-auto.css deleted file mode 100644 index 954a4f2..0000000 --- a/Neutron-trunk/resources/css/themes/white-auto.css +++ /dev/null @@ -1,3 +0,0 @@ -@import url("./white-light.css") only screen and (prefers-color-scheme: light); -@import url("./white-light.css") only screen and (prefers-color-scheme: no-preference); -@import url("./white-dark.css") only screen and (prefers-color-scheme: dark); \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/white-dark.css b/Neutron-trunk/resources/css/themes/white-dark.css deleted file mode 100644 index ed8daa9..0000000 --- a/Neutron-trunk/resources/css/themes/white-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -@import url("../polymer/dark.css"); - -:root { - --mdc-theme-primary: #acacac; - --mdc-theme-secondary: #c9c9c9; - --mdc-theme-background: #acacac; - --mdc-theme-surface: #acacac; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #2b2b2b; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/themes/white-light.css b/Neutron-trunk/resources/css/themes/white-light.css deleted file mode 100644 index abfd7e3..0000000 --- a/Neutron-trunk/resources/css/themes/white-light.css +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --mdc-theme-primary: #d6d6d6; - --mdc-theme-secondary: #919191; - --mdc-theme-background: #f3f3f3; - --mdc-theme-surface: #d6d6d6; - --mdc-theme-on-surface: white; - --mdc-theme-on-primary: white; - --mdc-theme-on-secondary: black; - - --cms-extra-superdark: #2b2b2b; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/css/ui.css b/Neutron-trunk/resources/css/ui.css deleted file mode 100644 index 0fc04a7..0000000 --- a/Neutron-trunk/resources/css/ui.css +++ /dev/null @@ -1,166 +0,0 @@ -@import "./alerts.css"; - -.button { - cursor: pointer; - text-decoration: none; - color: white; - padding: 10px 20px; - background: rgb(39, 39, 39); - border-radius: 5px; - border-style: solid; - border-width: 0px; - border-width: 3px; - border-color: transparent; - transition: border-color 100ms; - box-shadow: 1px 1px 5px rgb(65, 65, 65); -} - -.button-dangerous { - cursor: pointer; - text-decoration: none; - color: white; - padding: 10px 20px; - background: rgb(182, 19, 19); - border-radius: 5px; - border-style: solid; - border-width: 3px; - border-color: transparent; - transition: border-color 100ms; - box-shadow: 1px 1px 5px rgb(173, 56, 56); -} - -.button:hover { - color: white; - border-color: rgb(65, 65, 65); -} - -.button-dangerous:hover { - color: white; - border-color: rgb(173, 56, 56); -} - -.icon_button { - cursor: pointer; - text-decoration: none; - padding: 5px; - border-radius: 999px; - box-shadow: none; - transition: box-shadow 200ms; - background: whitesmoke; -} - -.icon_button:hover { - box-shadow: 1px 1px 10px rgb(168, 168, 168); -} - -.hide { - display: none; -} - -input[type="text"]:not(.easycss-input-value):not(.spotlight-input), input[type="password"] { - border: none; - padding: 5px 10px; - border-radius: 5px; - border-color: black; - border-style: solid; - border-width: 1px; - text-align: center; -} - -input[type="text"]:hover:not(.easycss-input-value):not(.spotlight-input), input[type="password"]:hover { - border-color: rgb(75, 75, 75); -} - -button.button { - font-size: 16px; -} - -input[type="button"].button { - font-size: 16px; -} - -input[type="submit"].button { - font-size: 16px; -} - -center { - text-align: center; -} - -.php-internal-error { - display: block; - margin: -8px; - padding: 14px; - text-align: center; - background: red; - color: white; -} - -code { - font-family: monospace; - font-size: 14px; -} - -#errorbox-wrapper { - z-index: 99999; - background-color: rgba(0, 0, 0, 0.75); - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; -} - -#errorbox-frame { - margin: 0 25%; - padding: 30px; - border-radius: 10px; - background: #eaeaea; - box-shadow: 0px 0px 8px #eaeaea; - color: black; -} - -#errorbox-bottom { - margin-bottom: -30px; - margin-left: -30px; - margin-right: -30px; - border-bottom-right-radius: 10px; - border-bottom-left-radius: 10px; - background: #5487ff; - padding: 5px; - margin-top: 30px; - box-shadow: 1px 5px 8px #5487ff; - cursor: pointer; - transition: box-shadow 200ms, background 200ms; -} - -#errorbox-bottom:hover { - background: #417aff; - box-shadow: 1px 5px 8px #417aff; -} - -#errorbox-bottom:active { - background: #195eff; - box-shadow: 1px 5px 8px #195eff; -} - -@media (max-width: 500px) { - #errorbox-frame { - padding: 10px; - } - #errorbox-bottom { - margin-bottom: -10px; - margin-left: -10px; - margin-right: -10px; - margin-top: 10px; - } - #errorbox-logo { - width: 24px; - height: 24px; - } -} - -#errorbox-logo { - width: 48px; - height: 48px; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/fonts/body/Roboto-Black.ttf b/Neutron-trunk/resources/fonts/body/Roboto-Black.ttf deleted file mode 100644 index 2d45238..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-Black.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-BlackItalic.ttf b/Neutron-trunk/resources/fonts/body/Roboto-BlackItalic.ttf deleted file mode 100644 index 29a4359..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-BlackItalic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-Bold.ttf b/Neutron-trunk/resources/fonts/body/Roboto-Bold.ttf deleted file mode 100644 index d998cf5..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-Bold.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-BoldItalic.ttf b/Neutron-trunk/resources/fonts/body/Roboto-BoldItalic.ttf deleted file mode 100644 index b4e2210..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-BoldItalic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-Italic.ttf b/Neutron-trunk/resources/fonts/body/Roboto-Italic.ttf deleted file mode 100644 index 5b390ff..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-Italic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-Light.ttf b/Neutron-trunk/resources/fonts/body/Roboto-Light.ttf deleted file mode 100644 index 3526798..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-Light.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-LightItalic.ttf b/Neutron-trunk/resources/fonts/body/Roboto-LightItalic.ttf deleted file mode 100644 index 46e9bf7..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-LightItalic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-Medium.ttf b/Neutron-trunk/resources/fonts/body/Roboto-Medium.ttf deleted file mode 100644 index f714a51..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-Medium.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-MediumItalic.ttf b/Neutron-trunk/resources/fonts/body/Roboto-MediumItalic.ttf deleted file mode 100644 index 5dc6a2d..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-Regular.ttf b/Neutron-trunk/resources/fonts/body/Roboto-Regular.ttf deleted file mode 100644 index 2b6392f..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-Regular.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-Thin.ttf b/Neutron-trunk/resources/fonts/body/Roboto-Thin.ttf deleted file mode 100644 index 4e797cf..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-Thin.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/body/Roboto-ThinItalic.ttf b/Neutron-trunk/resources/fonts/body/Roboto-ThinItalic.ttf deleted file mode 100644 index eea836f..0000000 Binary files a/Neutron-trunk/resources/fonts/body/Roboto-ThinItalic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/font-bold-italic.ttf b/Neutron-trunk/resources/fonts/font-bold-italic.ttf deleted file mode 100644 index bdd22b0..0000000 Binary files a/Neutron-trunk/resources/fonts/font-bold-italic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/font-bold.ttf b/Neutron-trunk/resources/fonts/font-bold.ttf deleted file mode 100644 index 96619df..0000000 Binary files a/Neutron-trunk/resources/fonts/font-bold.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/font-italic.ttf b/Neutron-trunk/resources/fonts/font-italic.ttf deleted file mode 100644 index 5b44037..0000000 Binary files a/Neutron-trunk/resources/fonts/font-italic.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/fonts/font-regular.ttf b/Neutron-trunk/resources/fonts/font-regular.ttf deleted file mode 100644 index e2c69c3..0000000 Binary files a/Neutron-trunk/resources/fonts/font-regular.ttf and /dev/null differ diff --git a/Neutron-trunk/resources/i18n/en/$metadata.json b/Neutron-trunk/resources/i18n/en/$metadata.json deleted file mode 100644 index 9954d47..0000000 --- a/Neutron-trunk/resources/i18n/en/$metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "id": "en", - "name": "English", - "localized_name": "English", - "encoding": "utf_8", - "alphabet": "latin" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-about.json b/Neutron-trunk/resources/i18n/en/admin-about.json deleted file mode 100644 index 34fed00..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-about.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "updates": { - "beta": [ - "Your site is potentially vulnerable", - "You are using a Neutron prerelease" - ], - "ltsend": [ - "Your site is not protected", - "The long term support for your version has ended, it is highly recommended that you update to the latest long term support release" - ], - "ltsnew": [ - "Your site is protected", - "A new long term support version is available, but your installed one is still supported" - ], - "ltsuptodate": [ - "Your site is protected", - "Neutron is up to date, you use a version with long term support" - ], - "uptodate": [ - "Your site is protected", - "Neutron is up to date" - ], - "newversion": [ - "Your site is not protected", - "A new Neutron update is available" - ] - }, - "version": { - "prefix": "Your server is running Neutron", - "update": ", and the latest available version is", - "beta": ", and the current stable version is", - "prerel": [ - " (", - " prerelease) " - ], - "channel": "You are on this update channel:", - "distrib": "→ Distribution information", - "updates": "→ Updates manager" - }, - "diskspace": [ - "Your site is using", - "of disk space" - ], - "info": "Informations", - "disk": "Disk space", - "changes": "Changes", - "current": "Current version", - "nolog": "No info is available about this version of Neutron", - "stable": "Latest stable version", - "beta": "Current stable version", - "exp": "Target version", - "categories": { - "system": "System files", - "config": "Contents and configuration", - "resources": "Photos and other resources", - "misc": "Miscellaneous files" - }, - "new": { - "overview": "Overview", - "version": "Neutron Versions", - "system": "System Versions", - "types": [ - "Neutron Cloud, security and reliability assured, in a safe and simple environment", - "Neutron On-Premises, keep full control over your infrastructure" - ], - "renderer": [ - "Rendering engine version:", - "Render backwards compatibility layer version:" - ] - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-advanced-dev.json b/Neutron-trunk/resources/i18n/en/admin-advanced-dev.json deleted file mode 100644 index f1ca4a3..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-advanced-dev.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "warning": "Edit these settings carefully, as any wrong change can prevent your site from working.", - "remove": [ - "If your site stops working after the change, ask your system administrator to delete the", - "file. The software will generate a new one without errors." - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-advanced-home.json b/Neutron-trunk/resources/i18n/en/admin-advanced-home.json deleted file mode 100644 index 1b664e4..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-advanced-home.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "dev": "Developer options", - "regedit": "Registry editor", - "placeholders": { - "dev": "Change the advanced developer options JSON configuration file", - "regedit": "Explore the registry base of the site" - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-appearance.json b/Neutron-trunk/resources/i18n/en/admin-appearance.json deleted file mode 100644 index 757af82..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-appearance.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "error": "Unknwon error", - "site": "Site name:", - "name": [ - "The site name cannot be empty", - "The site name contains invalid characters", - "The site name is too long", - "Longer name recommended", - "Shorter name recommended", - "This name looks great" - ], - "icon": "Change the icon", - "banner": "Change the banner", - "alwaysmenu": "Use the drawer even on desktop UI", - "save": "Save", - "footer": "Change page footer", - "fdesc": "This page footer shows on every visitor page of your site", - "publish": "Publish", - "fdisc": [ - "What you see is not forcibly what you'll get.", - "The page footer may look different on the final site, depending on your settings and browser. Basic format settings will anyway appear as selected there on your site." - ], - "password": "Change password", - "oldpass": "Old password:", - "newpass": "New password:", - "passrep": "Repeat password:", - "secure": "Use a safe password", - "change": "Change password", - "pages": [ - "Show ", - " pages in the menu bar" - ], - "old": "Use the old page interface", - "oldopts": "These settings only apply if you use the old UI:" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-calendar.json b/Neutron-trunk/resources/i18n/en/admin-calendar.json deleted file mode 100644 index 1578d19..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-calendar.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "show": [ - "Show the", - "next events in the widget." - ], - "events": "Events", - "manage": "Manage", - "manageph": "Manage/delete event", - "corrupt": [ - "Important:", - "The calendar database seems corrupted. If you didn't do any particular action recently, this may come from disk corruption or server intruders.", - "Contact your system administrator as soon as possible" - ], - "nothing": "No event in the calendar right now", - "add": "Add a new event", - "addph": "Add a new event on the calendar", - "info": "Event information", - "deleteask": "Delete the event?", - "deleteyes": "Yes", - "deleteyesph": "Delete the selected event", - "deleteno": "No", - "deletenoph": "Don't delete the selected event", - "create": { - "date": "Date", - "day": "Day:", - "month": "Month:", - "trimesters": [ - "1st trimester", - "2nd trimester", - "3rd trimester", - "4th trimester" - ], - "months": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - "year": "Year:", - "info": "Information", - "name": "Event name:", - "nameph": "Event name", - "mandatory": "optional", - "desc": "Description:", - "descph": "Description", - "web": "Website URL:", - "webph": "External like", - "notice": "The event description will fully show on the « Upcoming events » widget, we recommend not writing a long description", - "complete": "Add event" - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-customization.json b/Neutron-trunk/resources/i18n/en/admin-customization.json deleted file mode 100644 index c89cfb3..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-customization.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "color": "Color scheme", - "theme": "Theme", - "dark": "Dark", - "light": "Light", - "auto": "Use visitor's device option", - "auto2": "Auto", - "colors": [ - "Blue", - "Green", - "Red", - "Orange", - "Violet", - "Brown", - "Gray" - ], - "colors2": [ - "Water", - "Leaf", - "Tomato", - "Orange", - "Purple", - "Dirt", - "Smoke" - ], - "descriptions": [ - "Use the option on the visitor's device, if supported by their browser", - "Let the darkness get out and calm visitor's eyes", - "Prefer seeing the day light and keep a professional appearance" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-errors.json b/Neutron-trunk/resources/i18n/en/admin-errors.json deleted file mode 100644 index 4b46b7d..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-errors.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "errorprefix": "Error: ", - "connerror": "Communication error", - "housekeeping": [ - "Your website may have been damaged", - "No changes were made to your site" - ], - "common": { - "title": "An error occurred", - "message": "Oops, Neutron didn't work as intended...", - "report": "Report a bug", - "home": "Admin home" - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-flags.json b/Neutron-trunk/resources/i18n/en/admin-flags.json deleted file mode 100644 index cd30666..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-flags.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "notice": "These are experimental features that shouldn't be enabled on a mission-critical website. They weren't sufficiently tested to be enabled by default and are available here." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-gallery.json b/Neutron-trunk/resources/i18n/en/admin-gallery.json deleted file mode 100644 index dee3f09..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-gallery.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "general": { - "title": "Overview", - "label": "Label" - }, - "none": "None", - "lists": { - "categories": "category", - "picture": " photo" - }, - "categories": { - "add": "Create a new category", - "title": "Categories", - "edit": "To edit a category, delete it and re-create it.", - "delete": "Delete" - }, - "pictures": { - "title": "Photos", - "none": "There is no photo in the photo gallery.", - "add": "Publish a new photo", - "download": "Download", - "delete": "Delete" - }, - "delete": { - "title": [ - "You are about to delete and unpublish this picture from the site.", - "This cannot be undone and the picture cannot be recovered..." - ], - "removing": "Deleting picture...", - "category": "You are about to delete this category, this cannot be undone. All images in this category will be uncategorized.", - "catrm": "Deleting category..." - }, - "label": "Enter a new label for this picture", - "labelling": "Labeling picture...", - "addcat": { - "placeholder": "Category name", - "same": "If a category with the same name already exists, nothing will happen", - "confirm": "Create category" - }, - "publish": { - "category": "Category:", - "default": "Uncategorized", - "file": "Photo file:", - "max": "Maximum size:", - "publish": "Publish photo" - } -} diff --git a/Neutron-trunk/resources/i18n/en/admin-home.json b/Neutron-trunk/resources/i18n/en/admin-home.json deleted file mode 100644 index 2ad5cce..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-home.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "greeting": "Welcome! How can we help you?", - "language": "Change language", - "home": "Home", - "updates": [ - "Updates are ready to install", - "→ Install now" - ], - "items": [ - "Pages", - "Calendar", - "Gallery", - "Appearance", - "Data", - "Maintenance", - "All settings", - "Back", - "Sign out", - "Go back to site" - ], - "appearance": { - "greeting": "Change your website's global look ...", - "items": [ - "General", - "Theme", - "Visual designer", - "Region and language", - "Optional features", - "Features flags" - ] - }, - "data": { - "greeting": "View the data collected by your site ...", - "items": [ - "Statistics", - "Activity log", - "Renderer system trace" - ] - }, - "housekeeping": { - "greeting": "Clean up your site so that it still runs fine ...", - "items": [ - "Reset options", - "About the software", - "Software update" - ] - }, - "search": "Search settings", - "find": "Search a setting...", - "all": "All settings", - "categories": [ - "Pages", - "Photo Gallery", - "Calendar", - "Optional Features", - "Technical Configuration", - "Data", - "Updates and info", - "Visual look and feel" - ], - "allitems": [ - "Manage all pages", - "Create a new page", - "Manage gallery images", - "Publish a new gallery image", - "Create a new gallery category", - "View the visitor gallery", - "Manage calendar events", - "Add a new calendar event", - "View the visitor calendar", - "Manage optional features", - "Manage contact info", - "Manage notes contents", - "All technical configurations", - "Change extended configuration", - "Inspect system configuration", - "Website reset options", - "View statistics info", - "Read website access log", - "View renderer stack trace", - "View info about software versions", - "View info about software updates", - "Download and install updates", - "Change the general appearance of the website", - "Change color scheme and brightness theme", - "Go to the customization studio homepage", - "Change customized stylesheets with the EasyCSS software", - "Change the language of the whole site", - "Change features flags" - ], - "nofound": "No result", - "one": "1 result", - "multiple": " results" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-housekeeping.json b/Neutron-trunk/resources/i18n/en/admin-housekeeping.json deleted file mode 100644 index a21ed94..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-housekeeping.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "reset": "Reset website", - "resetph": "Delete all data about your website and restore Neutron to default values", - "disclaimer": [ - "This will delete:", - "all pages on your website", - "all images on the gallery", - "the icon and banner image", - "informations about the website name and footer" - ], - "confirm": "Enter the name of your website is this field to reset it:", - "confirmboxph": "Name of your website", - "confirmbutton": "Reset", - "select": [ - "Select how we should reset your website:", - "This cannot be undone and deleted data will be deleted forever", - "Keep content", - "Resets your website configuration but keep content you have inserted. Useful if you have configuration issues or you need additional disk space.", - "Delete everything", - "Delete all your website's data and redirects you to the first setup utility. Useful if you need to rebuild your website from scratch, or an update caused issues.", - "Your website is resetting...", - "Don't quit this page" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-login.json b/Neutron-trunk/resources/i18n/en/admin-login.json deleted file mode 100644 index ffd896d..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-login.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "modes": [ - "Password", - "Private key" - ], - "password": "Password", - "key": "Authentication private key", - "confirm": "Login", - "back": "back to website", - "report": "report a bug", - "branding": "powered by Neutron" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-logs.json b/Neutron-trunk/resources/i18n/en/admin-logs.json deleted file mode 100644 index 6267f82..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-logs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "nothing": [ - "Nothing seems to be recorded", - "This looks strange, check your server's access permissions and PHP configuration" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-pages.json b/Neutron-trunk/resources/i18n/en/admin-pages.json deleted file mode 100644 index 7960631..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-pages.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "home": "Home", - "alore": "Add a new page to your website", - "create": "Create a page", - "edit": "Edit", - "editl": "Edit the contents of this page", - "renamel": "Rename and change this page's URL", - "rename": "Rename", - "deletel": "Delete this page forever", - "delete": "Delete", - "pagename": "Page name", - "editors": [ - "Visual editor", - "HTML editor" - ], - "editordescs": [ - "Edit the page as if it was a word processor document", - "Write the code yourself for more customization" - ], - "quitwarn": "By leaving this page, you lose any non-saved change.", - "saved": "The page has been saved successfully", - "deletec": [ - "Do you really want to delete the « ", - " » page? This cannot be undone and may lead to undesirable side effects.", - "You can't delete your site's homepage." - ], - "deleteyl": "Delete the selected page", - "deletey": "Yes", - "deletenl": "Cancel deletion of this page", - "deleten": "No", - "renamew": [ - "You are renaming the « ", - " » page, this may lead to undesirable side effects. Moreover, no redirect will be created.", - "You can't rename your site's homepage." - ], - "oname": "Old name", - "onamep": "# Error #", - "nname": "New name", - "renamel2": "Rename page", - "rename2": "Rename", - "editcode": "Change the page's source code" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-plugins.json b/Neutron-trunk/resources/i18n/en/admin-plugins.json deleted file mode 100644 index ab53970..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-plugins.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "newnotice": "Enable or disable optional features to adapt your site to your needs.", - "builtin": "built-in extension", - "config": "Manage this feature's settings", - "store": "View this extension in the CMS Store", - "remove": "Uninstall extension", - "tip": [ - "Pro tip:", - " You can install new extensions from the ", - ", a library for all Neutron extensions" - ], - "saved": "Changes successfully saved", - "widgetconf": { - "saveph": "Save extension configuration", - "save": "Save", - "textedit": "Enter the text that will be shown in the widget bar. Only inline editing is supported (no titles, tables, etc...)." - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-stats.json b/Neutron-trunk/resources/i18n/en/admin-stats.json deleted file mode 100644 index 2d0d9b5..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-stats.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "thisMonth": "Views this month", - "disclaimer": "Some info may not be accurate", - "year": "Total views this year", - "last": "Total views last year", - "last2": "Total views in ", - "months": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - "monthslc": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - "separator": ":", - "visits": "views(s)", - "visit1": "view", - "visits2": "views", - "new": "New statistics system", - "old": "Old statistics system", - "notice": "This website was using Neutron 8 Beta 3 or older. Starting with Neutron 8, the statistics system has been rewritten to count the same person only one time even if they view multiple pages. We suggest that you don't take into account the old statistics, these are shown only for informational purposes." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/admin-titles.json b/Neutron-trunk/resources/i18n/en/admin-titles.json deleted file mode 100644 index b958c23..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-titles.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "$notice": "Please keep this file AS CLEAN as possible, because it is automatically parsed by the precontent.php file in the admin system. Values names MUST BE admin pages names (except for fallback value) !", - - "suffix": "Admin", - "fallback": "Untitled page", - "fallback-subpages": "Untitled subpage", - "home": { - "dom": "Home", - "header": "Your site", - "subpages": { - "appearance": { - "dom": "Appearance", - "header": "Appearance options" - }, - "data": { - "dom": "Data", - "header": "Statistics and other data" - }, - "housekeeping": { - "dom": "Maintenance", - "header": "Maintenance options" - }, - "all": { - "dom": "All", - "header": "All settings" - } - } - }, - "$error": { - "dom": "Error", - "header": "Error" - }, - "pages": { - "dom": "Pages", - "header": "Website pages", - "subpages": { - "manage": { - "dom": "Manage page", - "header": "Page options" - }, - "edit": { - "dom": "Edit page", - "header": "Editing page" - }, - "delete": { - "dom": "Delete page", - "header": "Deleting page" - }, - "rename": { - "dom": "Rename page", - "header": "Renaming page" - }, - "add": { - "dom": "New page", - "header": "Create a page" - } - } - }, - "gallery": { - "dom": "Photo gallery", - "header": "Photo gallery", - "subpages": { - "addcategory": { - "dom": "New category", - "header": "Create a new category" - }, - "publish": { - "dom": "New photo", - "header": "Add a new photo" - } - } - }, - "calendar": { - "dom": "Calendar", - "header": "Events", - "subpages": { - "add": { - "dom": "New event", - "header": "Add a new event" - }, - "manage": { - "dom": "Manage event", - "header": "Event settings" - } - } - }, - "language": { - "dom": "Region and language", - "header": "Website region settings" - }, - "renderer": { - "dom": "Rendering engine", - "header": "Renderer system trace" - }, - "flags": { - "dom": "Flags", - "header": "Feature flags" - }, - "plugins": { - "dom": "Optional features", - "header": "Optional features", - "subpages": { - "widget-contact-configure": { - "dom": "Settings", - "header": "Feature settings" - }, - "widget-notes-configure": { - "dom": "Settings", - "header": "Feature settings" - } - } - }, - "advanced": { - "dom": "Advanced settings", - "header": "Advanced website settings", - "subpages": { - "jsonconf": { - "dom": "Developer options", - "header": "Development settings" - } - } - }, - "housekeeping": { - "dom": "Maintenance", - "header": "Maintenance settings" - }, - "reset": { - "dom": "Reset options", - "header": "Reset your website" - }, - "about": { - "dom": "À propos de Neutron", - "header": "À propos du logiciel" - }, - "appearance": { - "dom": "Appearance", - "header": "Your website's appearance" - }, - "customization": { - "dom": "Customization", - "header": "Website's look and feel" - }, - "logs": { - "dom": "Activity log", - "header": "Last activity on your website" - }, - "stats": { - "dom": "Statistics", - "header": "Website's statistics" - } -} diff --git a/Neutron-trunk/resources/i18n/en/admin-v2.json b/Neutron-trunk/resources/i18n/en/admin-v2.json deleted file mode 100644 index defe253..0000000 --- a/Neutron-trunk/resources/i18n/en/admin-v2.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "on-premises": "On-Premises", - "drawer": [ - "System", - "Content", - "Personalization", - "Features", - "Accounts", - "Region & language", - "Data & security", - "Advanced options", - "Neutron Cloud", - "Electrode Server" - ], - "system_items": [ - "About Neutron", - "Audit Logs", - "Manage Version", - "Logout" - ], - "system_descriptions": [ - "View Neutron software versions and data usage", - "View the list of accesses to pages and administration", - "Re-download Neutron to install a newer or older version", - "Safely and simply log out of the administration panel" - ], - "content_items": [ - "Pages", - "Gallery", - "Calendar" - ], - "content_descriptions": [ - "Create, edit, rename and delete your website's pages", - "Upload, categorize and delete your website's gallery photos", - "Create, change or delete calendar events" - ], - "personalization_items": [ - "Branding", - "Colour", - "Footer & legal" - ], - "personalization_descriptions": [ - "Logo, banner and website name", - "Switch between light and dark theme, and change the general theme", - "Place your website's legal notices in the footer" - ], - "features_items": [ - "Optional features", - "Experimental settings" - ], - "features_descriptions": [ - "Enable additional features that extend what you can do with Neutron", - "Settings that are experimental and that may make your website unstable" - ], - "accounts_items": [ - "Password", - "Administrator Access" - ], - "accounts_descriptions": [ - "Change the password you use to login to this website", - "See how and what system administrators can see from your website" - ], - "security_items": [ - "Extended configuration", - "Statistics" - ], - "security_descriptions": [ - "Website hardening and advanced customization options", - "Informations about the number of view to your website" - ], - "maintenance_items": [ - "Reset options" - ], - "maintenance_descriptions": [ - "Reset your website to the defaults or repair it" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/api.json b/Neutron-trunk/resources/i18n/en/api.json deleted file mode 100644 index 41631af..0000000 --- a/Neutron-trunk/resources/i18n/en/api.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "token": "Invalid authentication token", - "select": "No element selected", - "value": "No value specified", - "incorrect": "Incorrect value", - "param": "No content passed as parameter", - "missing": "Missing information", - "invchar": "One or more fields have values containing invalid characters", - "advsyntax": "The file syntax is incorrect. Check for errors at the code editor and fix these, or refresh this page to cancel changes.", - "pageselect": "No page selected", - "inforec": "No information received by the server", - "pgnameempty": "The new name cannot be empty", - "pgnameinternal": "You cannot use a name internally reserved by the software", - "pgnameexists": "A page with the same name already exists", - "pgnamelong": "The new page name is too long", - "pgnamenone": "No new name specified", - "pgnotfound": "The page doesn't exist", - "pgnone": "No page specified", - "fieldinvalid": "Some fields are missing, empty, or contains only spaces", - "passoldinvalid": "The old password is incorrect", - "passaddmore": [ - "For your security, passwords needs to be at least 8 characters long. Add", - "more for your password to be at least 8 characters long." - ], - "passnewnomatch": "The two new passwords doesn't match", - "keyinvalid": "Incorrect private key", - "keynone": "No private key", - "lgpassinvalid": "Incorrect password", - "lgpassnone": "No password specified", - "nostate": "No state specified", - "catinvalid": "Invalid category", - "catnone": "No category", - "filesize": "The size of the photo is higher than the maximum size supported by the server", - "fileform": "The maximum size of the form file has been exceeded", - "fileincomplete": "The photo is incomplete (hasn't been entirely transmitted)", - "filenotfound": "The server knows about the photo, but it hasn't been sent", - "filenotempdir": "No temporary folder on the server", - "filewriterror": "Unable to write to the disk", - "fileint": "Another program interrupted sending the file", - "filemime": "This file type is not supported. Please use a PNG, JPEG, or GIF image, and not a file of this type:", - "filemime2": "This file type is not supported", - "fileimgnotfound": "Image not found", - "filenoid": "No identifier", - "filemdcorrupt": [ - "The image metadata", - "are corrupted, please delete the link in /data/webcontent/galery/pictures" - ], - "filecatnotfound": [ - "An image", - "reference a category that doesn't exist anymore, please delete or change the link in /data/webcontent/galery/pictures" - ], - "mkcatnoname": "No name given", - "mkcatexists": "A category with the same or a similar name already exists", - "notheme": "No theme", - "nocolor": "No color", - "pgnotype": "No page type defined", - "pgnotitle": "No title defined", - "pgnocontent": "No content has been specified", - "pgtitleempty": "The title cannot be empty", - "pgtypenone": "This page type is unknown", - "valueinv": "Invalid value", - "valuenone": "No value", - "calnoname": "No name", - "calnodesc": "No description", - "calnolink": "No link", - "calnoday": "No day", - "calnomonth": "No month", - "calnoyear": "No year", - "calinvalidday": "Invalid day compared to the selected month", - "calpast": "Unable to create an event in the past", - "calnamelong": "This event's name is too long. If you want to add more detials, add these in the description", - "calnamenone": "The event name cannot be empty", - "calsameday": "An event already exists this day", - "calerror": "Unable to initialize the database", - "calminmonths": [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - "calordinal": "1st", - "sitenamenone": "The website name cannot be empty", - "sitenameinvalid": "The website name contains invalid characters", - "sitenamelong": "The website name is too long", - "sitenamerecv": "No name received", - "awmnone": "No AlwaysMenu passed", - "olrnone": "No OldRenderer passed", - "swpnone": "No ShowPages passed" -} diff --git a/Neutron-trunk/resources/i18n/en/calendar.json b/Neutron-trunk/resources/i18n/en/calendar.json deleted file mode 100644 index 4077f5a..0000000 --- a/Neutron-trunk/resources/i18n/en/calendar.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "title": "Calendar", - "corrupted": "Corrupted database", - "past": "No past event", - "newtab": "Open the website associated with this event in a new tab", - "more": "Learn more (external website)", - "today": "Today", - "pasth": "Past events", - "future": "No upcoming events", - "pastp": "Past event", - "futureh": "Upcoming events" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/editor.json b/Neutron-trunk/resources/i18n/en/editor.json deleted file mode 100644 index 410fbaf..0000000 --- a/Neutron-trunk/resources/i18n/en/editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "wrap": "Automatic word wrap", - "save": "Save", - "publish": "Publish", - "publishnoback": "Publish and continue editing", - "exit": "By quitting this page, all changes made will not be saved." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/error.json b/Neutron-trunk/resources/i18n/en/error.json deleted file mode 100644 index 8af2850..0000000 --- a/Neutron-trunk/resources/i18n/en/error.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "An error occurred", - "message": [ - "We are sorry, but an error occurred while loading this page.", - "If you clicked on a link, it may not be valid anymore, or another error type occurred." - ], - "direction": "Website home", - "code": "Error", - "other": "Internal error" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/gallery.json b/Neutron-trunk/resources/i18n/en/gallery.json deleted file mode 100644 index 4bd2a58..0000000 --- a/Neutron-trunk/resources/i18n/en/gallery.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "title": "Photo gallery", - "unclassed": "Uncategorized", - "disabled": [ - "The ", - "photo gallery", - " is not enabled on this site" - ], - "nothing": "No photo in this category", - "deleted": "Photo not found or incorrectly deleted, please contact the website admin", - "preview": { - "title": "Image preview", - "invalid": "Invalid image URL", - "notfound": "Image not found", - "none": "No image", - "close": "Close this image preview", - "download": "Download image", - "placeholder": [ - "Download the image as", - "— you will be redirected to an external website if the image is situated on an external server" - ] - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/header.json b/Neutron-trunk/resources/i18n/en/header.json deleted file mode 100644 index 6ae91d5..0000000 --- a/Neutron-trunk/resources/i18n/en/header.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "internalError": [ - "Internal error", - "The advanced settings file is in a known syntax, but doesn't includes required settings. The page stopped loading here.", - "If you contact your system administrator, ask them to delete the ", - " file, Neutron will generate a new one for you.", - "The advanced settings file is in an unknown syntax, the page stopped loading here." - ], - "phpError": [ - "An error occurred while loading this page, detailed information has been saved in the log files.", - "The error message in the log files generally starts with", - "Please contact the website system administrator. If you are the system administrator, we suggest you investigate and fix the issue." - ], - "pjseDefault": [ - "Warning", - "An internal and unknown system error occurred", - "Close" - ], - "snackbarDefault": "Internal error", - "errorError": "An error occurred while loading the error message" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/login.json b/Neutron-trunk/resources/i18n/en/login.json deleted file mode 100644 index 0e8a847..0000000 --- a/Neutron-trunk/resources/i18n/en/login.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "title": "Website admin", - "login": "Login", - "password": "Password", - "invalid": "Incorrect password", - "uauth": "Login with authentication key", - "auth": "Use authentication key", - "pass": "Use administrator password", - "upass": "Login with the administrator password", - "authph": "Authentication key", - "nokey": [ - "Loging in with an authentication key is not possible on the old login system version. Please go", - "to the new system", - "to use an authentication key." - ], - "redirect": "You have been redirected to the old login page because an error occured. Click {here} to retry." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/menu.json b/Neutron-trunk/resources/i18n/en/menu.json deleted file mode 100644 index 567558e..0000000 --- a/Neutron-trunk/resources/i18n/en/menu.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "manage": "Manage this page", - "widgets": "Show details", - "back": "Back", - "forward": "Forward", - "refresh": "Refresh", - "home": "Go back home", - "admin": "Manage the website", - "info": "Information" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/setup.json b/Neutron-trunk/resources/i18n/en/setup.json deleted file mode 100644 index 05f9c4c..0000000 --- a/Neutron-trunk/resources/i18n/en/setup.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "ititle": "Configuration", - "steps": [ - "Checking", - "Error", - "Welcome", - "Graphic identity", - "Saving", - "Done", - "Loading", - "Your website", - "License agreement", - "Confirmation" - ], - "sitename": [ - "The name cannot be empty", - "The name contains invalid characters", - "The name is too long", - "Longer name recommended", - "Shorter name recommended", - "This name seems perfect" - ], - "errors": [ - "Unable to finish setting up", - "Communication error", - "The connection with the distant server has been unexpectedly terminated during the process" - ], - "done": [ - "Done", - "Your website is now correctly configured, and is ready to be seen by the entire world.", - "To change its content and/or settings, you need to login to the admin interface. The default password is ", - ". Don't forget to change it or your website could be vulnerable!" - ], - "links": [ - "Explore", - "Finish", - "I agree", - "Next", - "Start" - ], - "defaulterr": [ - "An error occurred", - "Unknown error", - "Restart setup" - ], - "sections": [ - "Preparing", - "Checking your environment", - "Welcome!", - "Your website", - "Graphic identity", - "License agreement", - "Confirmation" - ], - "upload": [ - "Checking information", - "Sending information", - "Checking integrity", - "Checking server" - ], - "warning": [ - "Do not quit this page", - "This may take several minutes" - ], - "confirm": [ - "You have now finished the basic setup of Neutron, the server will now create the website according to your settings.", - "This action wouldn't be cancellable, and may take several minutes depending on your server's speed. This includes checking your settings, your website's configuration, and checking the server." - ], - "license": "You need to accept this license agreement before you can use Neutron:", - "logo": [ - "Import a logo for your website, we suggest that you use a square image (1:1 ratio) to prevent your logo from being stretched.", - "You may not import a logo, which will show the default logo", - "Import file" - ], - "name": [ - "Choose a name for your website.", - "If you don't know what to choose, choose a short name, easy to remember, and that defines best the content you plan to publish on your website" - ], - "welcome": [ - "Thanks for choosing Neutron for your website, we appreciate your support.", - "You will first need to configure it by selecting settings according to your choosing, such as the name, the logo and more. These settings are changeable later in the admin interface of your website.", - "If you want to go back to the start of the setup or made an error, reload the page (using the « Reload » button on your browser). Unless you click on « Finish », nothing is being sent to the server." - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/sizes.json b/Neutron-trunk/resources/i18n/en/sizes.json deleted file mode 100644 index 675ff7d..0000000 --- a/Neutron-trunk/resources/i18n/en/sizes.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "byte": "byte", - "bytes": "bytes", - "kib": "KiB", - "mib": "MiB", - "gib": "GiB", - "tib": "TiB", - "kibibytes": "kibibytes", - "mebibytes": "mebibytes", - "gibibytes": "gibibytes", - "tebibytes": "tebibytes", - "separator": "." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/spotlight.json b/Neutron-trunk/resources/i18n/en/spotlight.json deleted file mode 100644 index 2f9ff0b..0000000 --- a/Neutron-trunk/resources/i18n/en/spotlight.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "search": "Search in Neutron administration interface..." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/version.json b/Neutron-trunk/resources/i18n/en/version.json deleted file mode 100644 index 002ba1e..0000000 --- a/Neutron-trunk/resources/i18n/en/version.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "title": "Software version", - "workswith": "This software is powered by ", - "providedby": ", a software made by ", - "description": " so that you can easily create websites, without any Web development or Web management knowledge.", - "renderer": [ - " with the ", - " rendering engine version " - ], - "freesoftware": [ - "This program is free software: you can redistribute it and/or modify it under the terms of the ", - "GNU General Public License as published by the Free Software Foundation", - ", either ", - "version 3 ", - "of the License, or (at your option) any later version." - ], - "warranty": [ - "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ", - "GNU General Public License ", - "for more details." - ], - "resources": "Important resources", - "support": "Software technical support/Feature requests", - "mprj": "View on Minteck Projects' website", - "minteck": "View on Minteck's space", - "changelog": "Ask for a change in the update notes" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/viewer.json b/Neutron-trunk/resources/i18n/en/viewer.json deleted file mode 100644 index bcbca5d..0000000 --- a/Neutron-trunk/resources/i18n/en/viewer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "powered": "powered by", - "manage": "Manage website", - "home": "Home", - "gallery": "Photo gallery", - "close": "Close menu", - "menutitle": "Open menu", - "menudesktop": "More...", - "menu": "Menu", - "widgets": "Details", - "widgetspane": "Website details", - "widgets2": "Information", - "logout": [ - "You are still logged in to your website's admin interface, click ", - "here ", - "to log out" - ], - "toc": "Table of contents", - "bugs": "Report a bug", - "system": "System informations", - "galery": "Photo gallery" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/en/widgets.json b/Neutron-trunk/resources/i18n/en/widgets.json deleted file mode 100644 index ce372dc..0000000 --- a/Neutron-trunk/resources/i18n/en/widgets.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "calendar": { - "today": "Today", - "nothing": "No upcoming event", - "corrupt": "Calendar database corrupted", - "more": "View all..." - }, - "clock": { - "ordinal": "1st", - "days": [ - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - "Sunday" - ], - "months": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - }, - "unconfigured": "The widget hasn't been configured yet", - "test": { - "welcome": "Welcome", - "success": "Neutron has been successfully installed.", - "admin": "Go to your admin interface to customize your website." - }, - "views": { - "intro": "You are the", - "ordinals": { - "1": "st", - "2": "nd", - "3": "rd", - "4": "th" - }, - "error": "error", - "outro": "person to view this website today" - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/$metadata.json b/Neutron-trunk/resources/i18n/fr/$metadata.json deleted file mode 100644 index 40c2d7d..0000000 --- a/Neutron-trunk/resources/i18n/fr/$metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "id": "fr", - "name": "French", - "localized_name": "Français", - "encoding": "utf_8", - "alphabet": "latin" -} diff --git a/Neutron-trunk/resources/i18n/fr/admin-about.json b/Neutron-trunk/resources/i18n/fr/admin-about.json deleted file mode 100644 index ba1520b..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-about.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "updates": { - "beta": [ - "Votre site est potentiellement vulnérable", - "Vous utilisez une préversion de Neutron" - ], - "ltsend": [ - "Votre site n'est pas protégé", - "Le support à long terme de votre version est terminé, il vous est fortement recommandé de mettre à jour votre site vers la dernière version disposant du support à long terme" - ], - "ltsnew": [ - "Votre site est protégé", - "Une nouvelle version sans support à long terme est disponible, mais vous utilisez une version disposant du support à long terme" - ], - "ltsuptodate": [ - "Votre site est protégé", - "Neutron est à jour, vous exécutez une version disposant du support à long terme" - ], - "uptodate": [ - "Votre site est protégé", - "Neutron est à jour" - ], - "newversion": [ - "Votre site n'est pas protégé", - "Une mise à jour pour Neutron est disponible" - ] - }, - "version": { - "prefix": "Votre serveur exécute Neutron version", - "update": ", et la dernière version disponible est la version", - "beta": ", et la dernière version stable en circulation est la version", - "prerel": [ - " (préversion de ", - ") " - ], - "channel": "Vous êtes sur le canal de mise à jour", - "distrib": "→ Informations sur la distribution", - "updates": "→ Gestionnaire de mises à jour" - }, - "diskspace": [ - "Votre site utilise", - "d'espace disque" - ], - "info": "Informations", - "disk": "Espace disque", - "changes": "Changements", - "current": "Version actuelle", - "nolog": "Aucune information concernant cette version de Neutron", - "stable": "Dernière version stable", - "beta": "Version stable en circulation", - "exp": "Version de destination", - "categories": { - "system": "Fichiers système", - "config": "Contenu et configuration", - "resources": "Photos et autres ressources", - "misc": "Fichiers inconnus" - }, - "new": { - "overview": "Vue d'ensemble", - "version": "Versions de Neutron", - "system": "Versions système", - "types": [ - "Neutron Cloud, sécurité et fiabilité assurés, dans un environnement simple d'utilisation", - "Neutron Auto-hébergé, gardez le contrôle sur votre infrastructure" - ], - "renderer": [ - "Version du moteur de rendu :", - "Version de la couche de rétro-compatibilité de rendu :" - ] - } -} diff --git a/Neutron-trunk/resources/i18n/fr/admin-advanced-dev.json b/Neutron-trunk/resources/i18n/fr/admin-advanced-dev.json deleted file mode 100644 index a824a7e..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-advanced-dev.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "warning": "Modifiez ces paramètres avec les plus grandes précautions, car toute modification erronée peut empêcher votre site de fonctionner.", - "remove": [ - "Si votre site ne fonctionne plus après une modification, demandez à votre administrateur système de supprimer le fichier", - "Le logiciel se chargera de regénérer un nouveau fichier de paramètres avancés sans erreurs." - ] -} diff --git a/Neutron-trunk/resources/i18n/fr/admin-advanced-home.json b/Neutron-trunk/resources/i18n/fr/admin-advanced-home.json deleted file mode 100644 index 80c84df..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-advanced-home.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "dev": "Préférences de développement", - "regedit": "Explorateur de registre", - "placeholders": { - "dev": "Modifiez le fichier JSON des préférences de développement avancées", - "regedit": "Explorez la base de registre de votre site" - } -} diff --git a/Neutron-trunk/resources/i18n/fr/admin-appearance.json b/Neutron-trunk/resources/i18n/fr/admin-appearance.json deleted file mode 100644 index 34945ca..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-appearance.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "error": "Erreur inconnue", - "site": "Nom du site :", - "name": [ - "Le nom ne peut pas être vide", - "Le nom contient des caractères invalides", - "Le nom est trop long", - "Nom plus long recommandé", - "Nom plus court recommandé", - "Ce nom semble parfait" - ], - "icon": "Modifier l'îcone", - "banner": "Modifier la bannière", - "alwaysmenu": "Afficher le lanceur même sur l'interface de bureau", - "save": "Sauvegarder", - "footer": "Modifier le pied de page", - "fdesc": "Ce pied de page s'affiche sur toutes les pages de votre site", - "publish": "Publier", - "fdisc": [ - "Ce que vous voyez n'est pas forcément à ce que vous aurez.", - "Le pied de page peut apparaître différement sur votre site final, selon votre configuration et votre navigateur. Le formattage de base apparaîtra tout de même exactement comme ci-dessus sur votre site." - ], - "password": "Modifier le mot de passe", - "oldpass": "Ancien mot de passe :", - "newpass": "Nouveau mot de passe :", - "passrep": "Répéter le mot de passe :", - "secure": "Utilisez un mot de passe sûr", - "change": "Changer le mot de passe", - "pages": [ - "Afficher ", - " pages dans la barre de menu" - ], - "old": "Utiliser l'ancienne interface des pages", - "oldopts": "Ces options ne s'appliquent que si vous utilisez l'ancienne interface :" -} diff --git a/Neutron-trunk/resources/i18n/fr/admin-calendar.json b/Neutron-trunk/resources/i18n/fr/admin-calendar.json deleted file mode 100644 index f9a19de..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-calendar.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "show": [ - "Afficher les", - "prochains événements dans le widget." - ], - "events": "Événements", - "manage": "Gérer", - "manageph": "Gérer/supprimer l'événement", - "corrupt": [ - "Important :", - "La base de données du calendrier semble corrompue. Si vous n'avez pas effectué d'actions particulières récemment, cela peut venir de corruption du disque ou d'une intrusion dans votre serveur.", - "Contactez votre administrateur système immédiatement" - ], - "nothing": "Aucun événement dans le calendrier pour le moment", - "add": "Ajouter un nouvel événement", - "addph": "Ajouter un nouvel événement au calendrier", - "info": "Informations sur l'événement", - "deleteask": "Supprimer l'événement ?", - "deleteyes": "Oui", - "deleteyesph": "Supprimer l'événement sélectionné", - "deleteno": "Non", - "deletenoph": "Ne pas supprimer l'événement sélectionné", - "create": { - "date": "Date", - "day": "Jour :", - "month": "Mois :", - "trimesters": [ - "1er trimestre", - "2nd trimestre", - "3ème trimestre", - "4ème trimestre" - ], - "months": [ - "Janvier", - "Février", - "Mars", - "Avril", - "Mai", - "Juin", - "Juillet", - "Août", - "Septembre", - "Octobre", - "Novembre", - "Décembre" - ], - "year": "Année :", - "info": "Informations", - "name": "Nom de l'événement :", - "nameph": "Nom de l'événement", - "mandatory": "facultatif", - "desc": "Description :", - "descph": "Description", - "web": "URL du site Internet :", - "webph": "Lien externe", - "notice": "La description de l'événement s'affichera entièrement sur le widget « Prochains événements », nous vous conseillons donc de ne pas écrire une description trop longue", - "complete": "Ajouter l'événement" - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-customization.json b/Neutron-trunk/resources/i18n/fr/admin-customization.json deleted file mode 100644 index f0991b7..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-customization.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "color": "Couleur d'ambiance", - "theme": "Thème", - "dark": "Sombre", - "light": "Clair", - "auto": "Suivre l'option sur l'ordinateur du visiteur", - "auto2": "Automatique", - "colors": [ - "Bleu", - "Vert", - "Rouge", - "Orange", - "Violet", - "Marron", - "Gris" - ], - "colors2": [ - "Eau", - "Feuille", - "Tomate", - "Orange", - "Pourpre", - "Boue", - "Fumée" - ], - "descriptions": [ - "Utiliser l'option de l'ordinateur du visiteur, si supporté par le navigateur", - "Laissez l'obscurité ressortir et apaiser les yeux des visiteurs", - "Préférez voir la lumière du jour et garder une apparence professionnelle" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-errors.json b/Neutron-trunk/resources/i18n/fr/admin-errors.json deleted file mode 100644 index 33bb009..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-errors.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "errorprefix": "Erreur : ", - "connerror": "Erreur de communication", - "housekeeping": [ - "Votre site risque d'être endommagé", - "Aucune modification n'a été apportée sur votre site" - ], - "common": { - "title": "Une erreur s'est produite", - "message": "Oups, Neutron n'a pas fonctionné comme prévu...", - "report": "Signaler un bogue", - "home": "Accueil de l'administration" - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-flags.json b/Neutron-trunk/resources/i18n/fr/admin-flags.json deleted file mode 100644 index 7de7b03..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-flags.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "notice": "Il s'agit de fonctionnalités expérimentales qui ne devraient pas être activées sur un site où la fiabilité est importante. Elles n'ont pas été suffisament testées pour être activées par défaut et sont disponibles ici." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-gallery.json b/Neutron-trunk/resources/i18n/fr/admin-gallery.json deleted file mode 100644 index e46abf8..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-gallery.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "general": { - "title": "Aperçu global", - "label": "Étiquetter" - }, - "none": "Aucune", - "lists": { - "categories": "catégorie", - "picture": " photo" - }, - "categories": { - "add": "Créer une nouvelle catégorie", - "title": "Catégories", - "edit": "Pour modifier une catégorie, supprimez-la et recréez la.", - "delete": "Supprimer" - }, - "pictures": { - "title": "Photos", - "none": "Aucune photo n'a été ajoutée à la galerie de photos.", - "add": "Publier une nouvelle photo", - "download": "Télécharger", - "delete": "Supprimer" - }, - "delete": { - "title": [ - "Vous allez supprimer cette image et la dépublier du site.", - "Cette action est irréversible et l'image ne pourra pas être récupérée..." - ], - "removing": "Suppression de l'image...", - "category": "Vous allez supprimer cette catégorie, cette action est irréversible. Toutes les images dans cette catégorie seront déclassées.", - "catrm": "Suppression de la catégorie..." - }, - "label": "Entrez la nouvelle étiquette pour cette image", - "labelling": "Étiquetage de l'image...", - "addcat": { - "placeholder": "Nom de la catégorie", - "same": "Si une catégorie du même nom existe déjà, rien ne se passera", - "confirm": "Créer la catégorie" - }, - "publish": { - "category": "Catégorie :", - "default": "Non classé", - "file": "Fichier de la photo :", - "max": "Taille maximale :", - "publish": "Publier la photo" - } -} diff --git a/Neutron-trunk/resources/i18n/fr/admin-home.json b/Neutron-trunk/resources/i18n/fr/admin-home.json deleted file mode 100644 index 80a0095..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-home.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "greeting": "Bienvenue ! En quoi pouvons-nous vous aider ?", - "language": "Changer de langue", - "home": "Accueil", - "updates": [ - "Des mises à jour sont prêtes à être installées", - "→ Installer maintenant" - ], - "items": [ - "Pages", - "Calendrier", - "Galerie", - "Apparence", - "Données", - "Maintenance", - "Tous les paramètres", - "Précédent", - "Déconnexion", - "Retourner au site" - ], - "appearance": { - "greeting": "Modifiez l'aspect visuel de votre site ...", - "items": [ - "Général", - "Thème", - "Construction visuelle", - "Langue et région", - "Fonctionnalités optionnelles", - "Drapeaux de fonctionnalité" - ] - }, - "data": { - "greeting": "Consultez les données collectées par votre site ...", - "items": [ - "Statistiques", - "Historique d'activité", - "Trace du moteur de rendu" - ] - }, - "housekeeping": { - "greeting": "Nettoyez votre site afin qu'il conserve son efficacité ...", - "items": [ - "Réinitialisation", - "À propos du logiciel", - "Mise à jour du logiciel" - ] - }, - "search": "Rechercher des paramètres", - "find": "Trouver un paramètre...", - "all": "Tous les paramètres", - "categories": [ - "Pages", - "Galerie de photos", - "Calendrier", - "Fonctionnalités optionnelles", - "Configuration technique", - "Données", - "Mises à jour et informations", - "Apparence visuel et comportement" - ], - "allitems": [ - "Gérer toutes les pages", - "Créer une nouvelle page", - "Gérer les images de la galerie", - "Importer une nouvelle photo dans la galerie", - "Ajouter une nouvelle catégorie de la galerie", - "Consulter la galerie dans l'espace visiteur", - "Gérer les événements du calendrier", - "Ajouter un nouvel événement dans le calendrier", - "Consulter le calendrier dans l'espace visiteur", - "Gérer les fonctionnalités optionnelles", - "Configurer les informations de contact", - "Modifier le contenu des notes", - "Toutes les configurations techniques", - "Modifier la configuration étendue", - "Inspecter la configuration système", - "Options de réinitialisation du site", - "Consulter les informations de statistiques", - "Lire les fichiers journaux des accès au site", - "Voir la trace de la pile du moteur de rendu", - "Consulter des informations sur la version du logiciel", - "Obtenir des informations sur les mises à jour", - "Télécharger et installer des mises à jour", - "Modifier l'apparence générale du site", - "Adapter le thème de couleur et la luminosité du site", - "Accéder à la page d'accueil du studio de personnalisation", - "Modifier la feuille de styles personnalisées avec le logiciel EasyCSS", - "Changer la langue d'affichage de tout le site", - "Modifier les drapeaux de fonctionnalité (Features Flags)" - ], - "nofound": "Aucun résultat", - "one": "1 résultat", - "multiple": " résultats" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-housekeeping.json b/Neutron-trunk/resources/i18n/fr/admin-housekeeping.json deleted file mode 100644 index 8c4c7ee..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-housekeeping.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "reset": "Réinitialiser le site", - "resetph": "Supprimer toutes les données concernant votre site et restaurer Neutron aux valeurs d'usines", - "disclaimer": [ - "Cette action aura pour effet de supprimer :", - "toutes les pages de votre site", - "toutes les images des galeries de photo", - "les images de l'icône et de la bannière", - "les informations du nom de votre site, et le pied de page" - ], - "confirm": "Entrez le nom de votre site dans le champ suivant pour pouvoir le réinitialiser :", - "confirmboxph": "Nom de votre site", - "confirmbutton": "Réinitialiser", - "select": [ - "Sélectionnez comment nous devons réinitialiser votre site :", - "Cette action est irréversible et les données supprimées ou modifiées le seront irrémédiablement", - "Conserver le contenu", - "Réinitialise la configuration de votre site et conserve le contenu que vous y avez inséré. Utile si vous rencontrez des problèmes avec votre site ou que vous avez besoin d'espace disque supplémentaire.", - "Tout supprimer", - "Supprimer toutes les données de votre site et vous redirige vers l'utilitaire de première configuration. Utile si vous souhaitez recréer votre site depuis le début, ou qu'une mise à jour a causé des problèmes.", - "La réinitialisation de votre site est en cours...", - "Ne quittez pas cette page" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-login.json b/Neutron-trunk/resources/i18n/fr/admin-login.json deleted file mode 100644 index 5e3193a..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-login.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "modes": [ - "Mot de passe", - "Clé privée" - ], - "password": "Mot de passe", - "key": "Clé privée d'authentification", - "confirm": "Se connecter", - "back": "retourner au site", - "report": "signaler un bug", - "branding": "fonctionne avec Neutron" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-logs.json b/Neutron-trunk/resources/i18n/fr/admin-logs.json deleted file mode 100644 index c812da8..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-logs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "nothing": [ - "Aucun événement n'a encore été enregistré", - "Cela semble étrange, vérifiez les droits d'accès de votre serveur et la configuration de PHP" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-pages.json b/Neutron-trunk/resources/i18n/fr/admin-pages.json deleted file mode 100644 index d9cc761..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-pages.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "home": "Accueil", - "alore": "Ajouter une nouvelle page à votre site", - "create": "Créer une page", - "edit": "Modifier", - "editl": "Modifier le contenu de la page sélectionnée", - "renamel": "Renommer et modifier l'URL de cette page", - "rename": "Renommer", - "deletel": "Supprimer définitivement la page sélectionnée", - "delete": "Supprimer", - "pagename": "Nom de la page", - "editors": [ - "Éditeur visuel", - "Éditeur HTML" - ], - "editordescs": [ - "Modifiez la page comme s'il s'agissait d'un document sur un logiciel de traitement de texte", - "Écrivez vous-même le code source de la page pour plus de liberté et de personnalisation" - ], - "quitwarn": "En quittant cette page, vous perdrez les modifications non enregistrées.", - "saved": "La page a bien été sauvegardée", - "deletec": [ - "Voulez-vous vraiment supprimer la page « ", - " » ? Cette action est irréversible et peut entraîner des effets indésirables.", - "Vous ne pouvez pas supprimer la page d'accueil de votre site" - ], - "deleteyl": "Supprimer la page sélectionnée", - "deletey": "Oui", - "deletenl": "Annuler la suppression de la page sélectionnée", - "deleten": "Non", - "renamew": [ - "Vous allez renommer la page « ", - " », cela peut entraîner des effets indésirables, d'autant qu'aucune redirection ne sera créée.", - "Vous ne pouvez pas renommer la page d'accueil de votre site" - ], - "oname": "Ancien nom", - "onamep": "# Erreur #", - "nname": "Nouveau nom", - "renamel2": "Renommer la page", - "rename2": "Renommer", - "editcode": "Modifier le code de cette page" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-plugins.json b/Neutron-trunk/resources/i18n/fr/admin-plugins.json deleted file mode 100644 index 838e175..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-plugins.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "newnotice": "Activez ou désactivez des fonctionnalités optionnelles pour ajuster votre site selon vos envies.", - "builtin": "extension préinstallée", - "config": "Modifier les paramètres de cette fonctionnalité", - "store": "Voir cette extension sur le CMS Store", - "remove": "Désinstaller l'extension", - "tip": [ - "Conseil :", - " Vous pouvez installer de nouvelles extensions depuis le ", - ", une bibliothèque de toutes les extensions pour Neutron" - ], - "saved": "Modifications sauvegardées avec succès", - "widgetconf": { - "saveph": "Sauvegarder la configuration de l'extension", - "save": "Sauvegarder", - "textedit": "Entrez le texte qui devra être affiché dans la barre des widgets. L'édition \"inline\" uniquement est supportée (pas de titres, tableaux, etc...)." - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-stats.json b/Neutron-trunk/resources/i18n/fr/admin-stats.json deleted file mode 100644 index f19887c..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-stats.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "thisMonth": "Visites du site ce mois", - "disclaimer": "Certaines informations peuvent être inexactes", - "year": "Visites totales cette année", - "last": "Visites totales l'année dernière", - "last2": "Visites totales en ", - "months": [ - "Janvier", - "Février", - "Mars", - "Avril", - "Mai", - "Juin", - "Juillet", - "Août", - "Septembre", - "Octobre", - "Novembre", - "Décembre" - ], - "monthslc": [ - "janvier", - "février", - "mars", - "avril", - "mai", - "juin", - "juillet", - "août", - "septembre", - "octobre", - "novembre", - "décembre" - ], - "separator": " :", - "visits": "visite(s)", - "visit1": "visiteur", - "visits2": "visiteurs", - "new": "Nouveau système de statistiques", - "old": "Ancien système de statistiques", - "notice": "Ce site était anciennement sous Neutron 8 Beta 3 ou précédent. À partir de Neutron 8, le système de statistiques a été réécrit de façon à ne compter qu'une seule fois une personne même si elle visite plusieurs pages du site. Nous vous conseillons donc de ne pas tenir compte des anciennes statistiques, elles ne sont affichées qu'à titre d'information." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/admin-titles.json b/Neutron-trunk/resources/i18n/fr/admin-titles.json deleted file mode 100644 index cdffb8f..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-titles.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "$notice": "Please keep this file AS CLEAN as possible, because it is automatically parsed by the precontent.php file in the admin system. Values names MUST BE admin pages names (except for fallback value) !", - - "suffix": "Administration", - "fallback": "Page sans titre", - "fallback-subpages": "Sous-page sans titre", - "home": { - "dom": "Accueil", - "header": "Votre site", - "subpages": { - "appearance": { - "dom": "Apparance", - "header": "Options d'apparance" - }, - "data": { - "dom": "Données", - "header": "Statistiques et autres données" - }, - "housekeeping": { - "dom": "Maintenance", - "header": "Options de maintenance" - }, - "all": { - "dom": "Tout", - "header": "Tous les paramètres" - } - } - }, - "$error": { - "dom": "Erreur", - "header": "Erreur" - }, - "pages": { - "dom": "Pages", - "header": "Pages du site", - "subpages": { - "manage": { - "dom": "Gérer la page", - "header": "Options de la page" - }, - "edit": { - "dom": "Modifier la page", - "header": "Modification de la page" - }, - "delete": { - "dom": "Supprimer la page", - "header": "Suppression de la page" - }, - "rename": { - "dom": "Renommer la page", - "header": "Renommage de la page" - }, - "add": { - "dom": "Nouvelle page", - "header": "Créer une page" - } - } - }, - "gallery": { - "dom": "Galerie de photos", - "header": "Galerie de photos", - "subpages": { - "addcategory": { - "dom": "Nouvelle catégorie", - "header": "Créer une nouvelle catégorie" - }, - "publish": { - "dom": "Nouvelle photo", - "header": "Ajouter une nouvelle photo" - } - } - }, - "calendar": { - "dom": "Calendrier", - "header": "Événements", - "subpages": { - "add": { - "dom": "Nouvel événement", - "header": "Ajouter un nouvel événement" - }, - "manage": { - "dom": "Gérer l'événement", - "header": "Paramètres de l'événement" - } - } - }, - "language": { - "dom": "Langue et région", - "header": "Paramètres régionaux du site" - }, - "renderer": { - "dom": "Moteur de rendu", - "header": "Trace du moteur de rendu" - }, - "flags": { - "dom": "Drapeaux", - "header": "Drapeaux de fonctionnalités" - }, - "plugins": { - "dom": "Fonctionnalités optionnelles", - "header": "Fonctionnalités optionnelles", - "subpages": { - "widget-contact-configure": { - "dom": "Options", - "header": "Configuration de la fonctionnalité" - }, - "widget-notes-configure": { - "dom": "Options", - "header": "Configuration de la fonctionnalité" - } - } - }, - "advanced": { - "dom": "Options avancés", - "header": "Paramètres avancés du site", - "subpages": { - "jsonconf": { - "dom": "Options pour les développeurs", - "header": "Préférences de développement" - } - } - }, - "housekeeping": { - "dom": "Maintenance", - "header": "Options de maintenance" - }, - "reset": { - "dom": "Réinitialisation", - "header": "Réinitialisez votre site" - }, - "about": { - "dom": "À propos de Neutron", - "header": "À propos du logiciel" - }, - "appearance": { - "dom": "Apparence", - "header": "Apparence de votre site" - }, - "customization": { - "dom": "Personnalisation", - "header": "Identité visuelle de votre site" - }, - "logs": { - "dom": "Historique d'activité", - "header": "Dernières activités sur votre site" - }, - "stats": { - "dom": "Statistiques", - "header": "Statistiques sur votre site" - } -} diff --git a/Neutron-trunk/resources/i18n/fr/admin-v2.json b/Neutron-trunk/resources/i18n/fr/admin-v2.json deleted file mode 100644 index afa7bae..0000000 --- a/Neutron-trunk/resources/i18n/fr/admin-v2.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "on-premises": "Auto-hébergé", - "drawer": [ - "Système", - "Contenu", - "Personalisation", - "Fonctionnalités", - "Comptes", - "Région & langue", - "Données & sécurité", - "Options avancées", - "Neutron Cloud", - "Serveur Web Electrode" - ], - "system_items": [ - "À propos de Neutron", - "Journal d'audit", - "Gérer la version", - "Fermer la session" - ], - "system_descriptions": [ - "Afficher la version de Neutron et l'utilisation d'espace disque", - "Voir la liste des accès aux pages et à l'administration", - "Re-téléchargez Neutron pour installer une version plus récente", - "Déconnectez-vous de manière sécurisée de l'administration du site" - ], - "content_items": [ - "Pages", - "Galerie", - "Calendrier" - ], - "content_descriptions": [ - "Créer, modifiez, déplacez et supprimez les pages de votre site", - "Téléversez, catégorisez et supprimez les photos de la galerie de votre site", - "Créez, changez ou supprimez des événements du calendrier" - ], - "personalization_items": [ - "Image de marque", - "Couleur", - "Pied de page & légal" - ], - "personalization_descriptions": [ - "Logo, bannière et nom du site", - "Changez entre le thème clair ou sombre, ou changez le thème général", - "Placer les mentions légales de votre site dans le pied de page" - ], - "features_items": [ - "Fonctionnalités optionnelles", - "Paramètres expérimentaux" - ], - "features_descriptions": [ - "Activez des fonctionnalités supplémentaires qui étendent Neutron", - "Paramètres expérimentaux qui pourraient rendre votre site instable" - ], - "accounts_items": [ - "Mot de passe", - "Accès aux administrateurs" - ], - "accounts_descriptions": [ - "Changez le mot de passe que vous utilisez pour vous connecter à ce site", - "Découvrez comment et ce que les administrateurs système voient" - ], - "security_items": [ - "Configuration étendue", - "Statistiques" - ], - "security_descriptions": [ - "Options de durcissement et options de personnalisation avancées", - "Informations sur le nombre de vues sur votre site" - ], - "maintenance_items": [ - "Options de réinitialisation" - ], - "maintenance_descriptions": [ - "Réinitialisez votre site aux paramètres d'usine ou réparez-le" - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/api.json b/Neutron-trunk/resources/i18n/fr/api.json deleted file mode 100644 index 594fd5a..0000000 --- a/Neutron-trunk/resources/i18n/fr/api.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "token": "Jeton d'authentification invalide", - "select": "Aucun élément sélectionné", - "value": "Aucune valeur spécifiée", - "incorrect": "La valeur est incorrecte", - "param": "Pas de contenu passé comme paramètre", - "missing": "Informations manquantes", - "invchar": "Un ou plusieurs champs ont des valeurs contenants des caractères invalides", - "advsyntax": "La syntaxe du fichier est incorrecte. Vérifiez les erreurs de l'éditeur de code et corrigez les, ou actualisez la page pour annuler les modifications apportées.", - "pageselect": "Aucune page sélectionnée", - "inforec": "Aucune information reçue par le serveur", - "pgnameempty": "Le nouveau nom ne peut pas être vide", - "pgnameinternal": "Vous ne pouvez pas utiliser un nom réservé en interne par le logiciel", - "pgnameexists": "Une page du même nom existe déjà", - "pgnamelong": "Le nouveau nom de la page est trop long", - "pgnamenone": "Aucun nouveau nom spécifié", - "pgnotfound": "La page n'existe pas", - "pgnone": "Aucune page spécifiée", - "fieldinvalid": "Certains champs sont manquants, vides, ou ne contiennent que des espaces", - "passoldinvalid": "L'ancien mot de passe est incorrect", - "passaddmore": [ - "Pour votre sécurité, les mots de passes doivent être long d'au moins 8 caractères. Ajoutez en encore", - "pour que votre mot de passe ait 8 caractères" - ], - "passnewnomatch": "Les deux nouveaux mots de passes ne correspondent pas", - "keyinvalid": "Clé privée incorrecte", - "keynone": "Pas de clé privée", - "lgpassinvalid": "Mot de passe incorrect", - "lgpassnone": "Pas de mot de passe spécifié", - "nostate": "Aucun état spécifié", - "catinvalid": "Catégorie inexistante", - "catnone": "Pas de catégorie", - "filesize": "La taille du fichier de la photo dépasse la taille maximale imposée par le serveur", - "fileform": "La taille maximale du fichier de formulaire à été dépassée", - "fileincomplete": "La photo est incomplète (n'a pas été transmise entièrement)", - "filenotfound": "La photo est renseignée au serveur, mais elle n'a pas été transmise", - "filenotempdir": "Aucun dossier temporaire présent sur le serveur", - "filewriterror": "Impossible d'écrire sur le disque", - "fileint": "Un autre programme à interrompu la transmission du fichier", - "filemime": "Le type de fichier de la photo n'est pas supporté. Merci d'utiliser une image PNG, JPEG, ou GIF, et non une image du type", - "filemime2": "Le type de fichier de la photo n'est pas supporté", - "fileimgnotfound": "Image introuvable", - "filenoid": "Pas d'identifiant", - "filemdcorrupt": [ - "Les métadonnées d'une image", - "sont corrompues, veuillez supprimer le lien dans /data/webcontent/galery/pictures" - ], - "filecatnotfound": [ - "Une image", - "fait référence à une catégorie qui n'existe pas, veuillez supprimer ou modifier le lien dans /data/webcontent/galery/pictures" - ], - "mkcatnoname": "Pas de nom donné", - "mkcatexists": "Une catégorie du même nom ou d'un nom similaire existe déjà", - "notheme": "Pas de thème", - "nocolor": "Pas de couleur", - "pgnotype": "Aucun type de page défini", - "pgnotitle": "Aucun titre défini", - "pgnocontent": "Aucun contenu n'a été spécifié", - "pgtitleempty": "Le titre ne peut pas être vide", - "pgtypenone": "Le type de page est inconnu", - "valueinv": "Valeur invalide", - "valuenone": "Aucune valeur", - "calnoname": "Pas de nom", - "calnodesc": "Pas de description", - "calnolink": "Pas de lien", - "calnoday": "Pas de jour", - "calnomonth": "Pas de mois", - "calnoyear": "Pas d'année", - "calinvalidday": "Jour sélectionné invalide par rapport au mois sélectionné", - "calpast": "Impossible de créer un événement dans le passé", - "calnamelong": "Le nom de l'événement est trop long. Si vous avez des informations à ajouter, ajoutez les dans la description", - "calnamenone": "Le nom de l'événement ne peut pas être vide", - "calsameday": "Un événement existe déjà ce jour là", - "calerror": "Impossible d'initialiser la base de données", - "calminmonths": [ - "janv.", - "févr.", - "mars", - "avr.", - "mai", - "juin", - "juil.", - "août", - "sept.", - "oct.", - "nov.", - "déc." - ], - "calordinal": "1er", - "sitenamenone": "Le nom du site ne peut pas être vide", - "sitenameinvalid": "Le nom du site contient des caractères invalides", - "sitenamelong": "Le nom du site est trop long", - "sitenamerecv": "Aucun nom n'a été reçu", - "awmnone": "Pas d'AlwaysMenu passé", - "olrnone": "Pas d'OldRenderer passé", - "swpnone": "Pas de ShowPages passé" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/calendar.json b/Neutron-trunk/resources/i18n/fr/calendar.json deleted file mode 100644 index 0de6389..0000000 --- a/Neutron-trunk/resources/i18n/fr/calendar.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "title": "Calendrier", - "corrupted": "Base de données corrompue", - "past": "Aucun événement passé", - "newtab": "Ouvrir un site associé à cet événement dans un nouvel onglet", - "more": "En savoir plus (site externe)", - "today": "Aujourd'hui", - "pasth": "Événements passés", - "future": "Aucun événement à venir", - "pastp": "Événement passé", - "futureh": "Événements à venir" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/editor.json b/Neutron-trunk/resources/i18n/fr/editor.json deleted file mode 100644 index 8eb734e..0000000 --- a/Neutron-trunk/resources/i18n/fr/editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "wrap": "Retour automatique à la ligne", - "save": "Sauvegarder", - "publish": "Publier", - "publishnoback": "Publier et continuer à modifier", - "exit": "En quittant cette page, vous perdrez les modifications non enregistrées sur cette page." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/error.json b/Neutron-trunk/resources/i18n/fr/error.json deleted file mode 100644 index 79a35e9..0000000 --- a/Neutron-trunk/resources/i18n/fr/error.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "Une erreur s'est produite", - "message": [ - "Nous sommes désolés, mais une erreur s'est produite lors du chargement de la page.", - "Si vous avez cliqué sur un lien, celui-ci n'est peut-être plus valide, ou alors un autre type d'erreur s'est produit." - ], - "direction": "Accueil du site", - "code": "Erreur", - "other": "Erreur interne" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/gallery.json b/Neutron-trunk/resources/i18n/fr/gallery.json deleted file mode 100644 index d5035d4..0000000 --- a/Neutron-trunk/resources/i18n/fr/gallery.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "title": "Galerie de photos", - "unclassed": "Non classé", - "disabled": [ - "La ", - "galerie de photos", - " n'est pas activée sur ce site" - ], - "nothing": "Aucune photo dans cette catégorie", - "deleted": "Photo introuvable ou supprimée incorrectement, veuillez contacter l'administrateur du site", - "preview": { - "title": "Prévisualisation de l'image", - "invalid": "URL de l'image invalide", - "notfound": "Image inexistante", - "none": "Pas d'image", - "close": "Fermer la prévisualisation de l'image", - "download": "Télécharger l'image", - "placeholder": [ - "Télécharger l'image au format", - "— vous serez redirigé vers un site externe si l'image se trouve sur un serveur externe" - ] - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/header.json b/Neutron-trunk/resources/i18n/fr/header.json deleted file mode 100644 index 0557e53..0000000 --- a/Neutron-trunk/resources/i18n/fr/header.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "internalError": [ - "Erreur interne", - "Le fichier des paramètres avancés est dans une syntaxe reconnue, mais ne contient pas certains paramètres requis. Le chargement de la page s'est arrêté ici.", - "Si vous contactez votre administrateur système, demandez lui de supprimer le fichier ", - ", Neutron se chargera d'en générer un nouveau pour vous.", - "Le fichier des paramètres avancés n'est pas dans une syntaxe reconnue, le chargement de la page s'est arrêté ici." - ], - "phpError": [ - "Une erreur s'est produite lors du chargement de cette page, des informations détaillées ont été inscrites dans les fichiers journaux.", - "Le message d'erreur dans les fichiers journaux commence généralement par", - "Merci de contacter l'administrateur système du site. Si vous êtes l'administrateur système, nous vous conseillons d'analyser et de corriger cette erreur." - ], - "pjseDefault": [ - "Avertissement", - "Une erreur interne de raison inconnue s'est produite", - "Fermer" - ], - "snackbarDefault": "Erreur interne", - "errorError": "Une erreur s'est produite lors du chargement du message d'erreur" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/login.json b/Neutron-trunk/resources/i18n/fr/login.json deleted file mode 100644 index 0011e71..0000000 --- a/Neutron-trunk/resources/i18n/fr/login.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "title": "Administration du site", - "login": "Connexion", - "password": "Mot de passe", - "invalid": "Le mot de passe est incorrect", - "uauth": "Connexion avec la clé d'authentification", - "auth": "Utiliser la clé d'authentification", - "pass": "Utiliser le mot de passe d'administration", - "upass": "Connexion avec le mot de passe d'administration", - "authph": "Clé d'authentification", - "nokey": [ - "La connexion à partir d'une clé d'authentification n'est plus disponible sur l'ancienne version du système de connexion. Veuillez", - "accéder au nouveau système", - "pour utiliser votre clé d'authentification." - ], - "redirect": "Vous avez été redirigé vers l'ancienne page de connexion car une erreur s'est produite. Cliquez {ici} pour réessayer." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/menu.json b/Neutron-trunk/resources/i18n/fr/menu.json deleted file mode 100644 index 00ff3de..0000000 --- a/Neutron-trunk/resources/i18n/fr/menu.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "manage": "Gérer cette page", - "widgets": "Afficher les détails", - "back": "Précédent", - "forward": "Suivant", - "refresh": "Actualiser", - "home": "Retourner à l'accueil", - "admin": "Gérer le site", - "info": "Informations" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/setup.json b/Neutron-trunk/resources/i18n/fr/setup.json deleted file mode 100644 index ad3292d..0000000 --- a/Neutron-trunk/resources/i18n/fr/setup.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "ititle": "Configuration", - "steps": [ - "Vérification", - "Erreur", - "Bienvenue", - "Identité graphique", - "Sauvegarde", - "Terminé", - "Chargement", - "Votre site", - "Contrat de licence", - "Confirmation" - ], - "sitename": [ - "Le nom ne peut pas être vide", - "Le nom contient des caractères invalides", - "Le nom est trop long", - "Nom plus long recommandé", - "Nom plus court recommandé", - "Ce nom semble parfait" - ], - "errors": [ - "Impossible de terminer la configuration", - "Erreur de communication", - "La connexion avec le serveur distant a été intérrompue inopinément pendant la transmission des données" - ], - "done": [ - "Terminé", - "Votre site est maintenant correctement configuré, et est prêt à être visité par le monde entier.", - "Pour modifier son contenu et/ou ses paramètres, vous devez vous connecter à l'interface d'administration. Le mot de passe est ", - ". Pensez à le modifier ou votre site pourrait être vulnérable !" - ], - "links": [ - "Explorer", - "Terminer", - "J'accepte", - "Suivant", - "Commencer" - ], - "defaulterr": [ - "Une erreur s'est produite", - "Erreur inconnue", - "Relancer la configuration" - ], - "sections": [ - "Préparation", - "Vérification de votre environnement", - "Bienvenue !", - "Votre site", - "Identité graphique", - "Contrat de licence", - "Confirmation" - ], - "upload": [ - "Vérification des informations", - "Envoi des informations", - "Vérification de l'intégrité", - "Vérification du serveur" - ], - "warning": [ - "Ne quittez pas cette page", - "Cela peut prendre plusieurs minutes" - ], - "confirm": [ - "Vous avez terminé la configuration basique de Neutron, le serveur va maintenant créer le site selon vos paramètres.", - "Cette action ne pourra pas être annulée, et peut prendre plusieurs minutes selon la vitesse de votre serveur. Cela inclut une vérification de vos paramètres, la configuration de votre site, et la vérification de votre serveur." - ], - "license": "Vous devez accepter le suivant contrat de licence avant de commencer à utiliser Neutron :", - "logo": [ - "Importez un logo pour votre site, nous vous conseillons d'utiliser une image carrée (ratio 1:1) afin d'éviter que le logo soit étiré.", - "Vous pouvez ne pas importer de logo, ce qui affichera le logo par défaut", - "Importer un fichier" - ], - "name": [ - "Choisissez un nom pour votre site.", - "Si vous ne savez pas quoi choisir, choisissez un nom court, facile à retenir, et qui définit bien le contenu que vous allez poster sur votre site" - ], - "welcome": [ - "Merci d'avoir choisi Neutron pour votre site Web, nous apprécions votre soutien.", - "Vous allez d'abord devoir le configurer en choisissant certains paramètres selon ce que vous voulez, tels que le nom, le logo et autre. Ces paramètres pourront être modifiés plus tard dans l'espace d'administration de votre site.", - "Si vous voulez revenir au début de la configuration ou que vous avez fait une erreur, rechargez la page (en utilisant le bouton « Actualiser » sur votre navigateur). Tant que vous ne cliquez pas sur « Terminer », aucune communication n'est effectuée vers le serveur." - ] -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/sizes.json b/Neutron-trunk/resources/i18n/fr/sizes.json deleted file mode 100644 index 846bb81..0000000 --- a/Neutron-trunk/resources/i18n/fr/sizes.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "byte": "octet", - "bytes": "octets", - "kib": "Kio", - "mib": "Mio", - "gib": "Gio", - "tib": "Tio", - "kibibytes": "kibioctets", - "mebibytes": "mébioctets", - "gibibytes": "gibioctets", - "tebibytes": "tébioctets", - "separator": "," -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/spotlight.json b/Neutron-trunk/resources/i18n/fr/spotlight.json deleted file mode 100644 index a4e0dbd..0000000 --- a/Neutron-trunk/resources/i18n/fr/spotlight.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "search": "Trouver dans l'administration de Neutron..." -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/version.json b/Neutron-trunk/resources/i18n/fr/version.json deleted file mode 100644 index 21e80f3..0000000 --- a/Neutron-trunk/resources/i18n/fr/version.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "title": "Version du logiciel", - "workswith": "Ce site fonctionne en utilisant ", - "providedby": ", un logiciel fourni par ", - "description": " pour créer des sites Web facilement et rapidement, et sans même avoir une quelconque connaissance en développement Web ou en gestion de sites Web.", - "renderer": [ - " avec le moteur de rendu ", - " version " - ], - "freesoftware": [ - "Ce logiciel est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier sous les termes de la ", - "licence publique générale GNU comme publiée par la Free Software Foundation", - ", soit la ", - "version 3 ", - "de la Licence, soit (selon votre choix) n'importe quelle version supérieure." - ], - "warranty": [ - "Ce logiciel est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; même pas la garantie implicite de VALEUR MARCHANDE ou d'APTITUDE À UNE UTILISATION SPÉCIFIQUE. Consultez la ", - "licence publique générale GNU ", - "pour plus de détails." - ], - "resources": "Ressources importantes", - "support": "Support technique du logiciel/Suggestions de fonctionnalités", - "mprj": "Voir sur le site de Minteck Projects", - "minteck": "Voir sur l'espace de Minteck", - "changelog": "Demander un changement dans les notes de mise à jour" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/viewer.json b/Neutron-trunk/resources/i18n/fr/viewer.json deleted file mode 100644 index 02412fc..0000000 --- a/Neutron-trunk/resources/i18n/fr/viewer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "powered": "fonctionne sur", - "manage": "Gérer le site", - "home": "Accueil", - "gallery": "Galerie de photos", - "close": "Fermer le menu", - "menutitle": "Ouvrir le menu", - "menudesktop": "Plus...", - "menu": "Menu", - "widgets": "Détails", - "widgetspane": "Détails du site", - "widgets2": "Informations", - "logout": [ - "Vous êtes encore connecté à l'administration de votre site, cliquez ", - "ici ", - "pour vous déconnecter" - ], - "toc": "Table des matières", - "bugs": "Signaler un bug", - "system": "Informations système", - "galery": "Galerie de photos" -} \ No newline at end of file diff --git a/Neutron-trunk/resources/i18n/fr/widgets.json b/Neutron-trunk/resources/i18n/fr/widgets.json deleted file mode 100644 index f4ff8a0..0000000 --- a/Neutron-trunk/resources/i18n/fr/widgets.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "calendar": { - "today": "Aujourd'hui", - "nothing": "Aucun événement à venir", - "corrupt": "Base de données du calendrier corrompue", - "more": "Tout voir..." - }, - "clock": { - "ordinal": "1er", - "days": [ - "lundi", - "mardi", - "mercredi", - "jeudi", - "vendredi", - "samedi", - "dimanche" - ], - "months": [ - "janvier", - "février", - "mars", - "avril", - "mai", - "juin", - "juillet", - "août", - "septembre", - "octobre", - "novembre", - "décembre" - ] - }, - "unconfigured": "Le widget n'a pas été configuré", - "test": { - "welcome": "Bienvenue", - "success": "Votre installation de Neutron s'est déroulée correctement.", - "admin": "Accédez à l'administration pour personnaliser votre site." - }, - "views": { - "intro": "Vous êtes la", - "ordinals": { - "1": "ère", - "2": "nde", - "3": "ème", - "4": "ème" - }, - "error": "erreur", - "outro": "personne à visiter ce site aujourd'hui" - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/image/admin.svg b/Neutron-trunk/resources/image/admin.svg deleted file mode 100644 index 8ce4765..0000000 --- a/Neutron-trunk/resources/image/admin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/admin2/about.png b/Neutron-trunk/resources/image/admin2/about.png deleted file mode 100644 index 80c5733..0000000 Binary files a/Neutron-trunk/resources/image/admin2/about.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/accounts.png b/Neutron-trunk/resources/image/admin2/accounts.png deleted file mode 100644 index 0d33522..0000000 Binary files a/Neutron-trunk/resources/image/admin2/accounts.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/advanced.png b/Neutron-trunk/resources/image/admin2/advanced.png deleted file mode 100644 index 8d78638..0000000 Binary files a/Neutron-trunk/resources/image/admin2/advanced.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/audit.png b/Neutron-trunk/resources/image/admin2/audit.png deleted file mode 100644 index 9a61de1..0000000 Binary files a/Neutron-trunk/resources/image/admin2/audit.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/branding.png b/Neutron-trunk/resources/image/admin2/branding.png deleted file mode 100644 index dc43ca4..0000000 Binary files a/Neutron-trunk/resources/image/admin2/branding.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/calendar.png b/Neutron-trunk/resources/image/admin2/calendar.png deleted file mode 100644 index bf4944c..0000000 Binary files a/Neutron-trunk/resources/image/admin2/calendar.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/cloud.png b/Neutron-trunk/resources/image/admin2/cloud.png deleted file mode 100644 index d942e7e..0000000 Binary files a/Neutron-trunk/resources/image/admin2/cloud.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/colour.png b/Neutron-trunk/resources/image/admin2/colour.png deleted file mode 100644 index 3f2c452..0000000 Binary files a/Neutron-trunk/resources/image/admin2/colour.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/content.png b/Neutron-trunk/resources/image/admin2/content.png deleted file mode 100644 index dd12b3e..0000000 Binary files a/Neutron-trunk/resources/image/admin2/content.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/electrode.png b/Neutron-trunk/resources/image/admin2/electrode.png deleted file mode 100644 index 6211e78..0000000 Binary files a/Neutron-trunk/resources/image/admin2/electrode.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/enter.png b/Neutron-trunk/resources/image/admin2/enter.png deleted file mode 100644 index 679adc7..0000000 Binary files a/Neutron-trunk/resources/image/admin2/enter.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/features.png b/Neutron-trunk/resources/image/admin2/features.png deleted file mode 100644 index 10a7045..0000000 Binary files a/Neutron-trunk/resources/image/admin2/features.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/flag.png b/Neutron-trunk/resources/image/admin2/flag.png deleted file mode 100644 index 3ea37f6..0000000 Binary files a/Neutron-trunk/resources/image/admin2/flag.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/footer.png b/Neutron-trunk/resources/image/admin2/footer.png deleted file mode 100644 index 7d042da..0000000 Binary files a/Neutron-trunk/resources/image/admin2/footer.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/gallery.png b/Neutron-trunk/resources/image/admin2/gallery.png deleted file mode 100644 index aae2b38..0000000 Binary files a/Neutron-trunk/resources/image/admin2/gallery.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/home.png b/Neutron-trunk/resources/image/admin2/home.png deleted file mode 100644 index 05f2f1f..0000000 Binary files a/Neutron-trunk/resources/image/admin2/home.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/install.png b/Neutron-trunk/resources/image/admin2/install.png deleted file mode 100644 index 6d81ebf..0000000 Binary files a/Neutron-trunk/resources/image/admin2/install.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/language.png b/Neutron-trunk/resources/image/admin2/language.png deleted file mode 100644 index e460fa1..0000000 Binary files a/Neutron-trunk/resources/image/admin2/language.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/locale.png b/Neutron-trunk/resources/image/admin2/locale.png deleted file mode 100644 index 256a9d7..0000000 Binary files a/Neutron-trunk/resources/image/admin2/locale.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/logoff.png b/Neutron-trunk/resources/image/admin2/logoff.png deleted file mode 100644 index a01434b..0000000 Binary files a/Neutron-trunk/resources/image/admin2/logoff.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/maintenance.png b/Neutron-trunk/resources/image/admin2/maintenance.png deleted file mode 100644 index 6e53b11..0000000 Binary files a/Neutron-trunk/resources/image/admin2/maintenance.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/minteck-admin.png b/Neutron-trunk/resources/image/admin2/minteck-admin.png deleted file mode 100644 index 258446e..0000000 Binary files a/Neutron-trunk/resources/image/admin2/minteck-admin.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/optional.png b/Neutron-trunk/resources/image/admin2/optional.png deleted file mode 100644 index 7f67ea0..0000000 Binary files a/Neutron-trunk/resources/image/admin2/optional.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/pages.png b/Neutron-trunk/resources/image/admin2/pages.png deleted file mode 100644 index 1b832ea..0000000 Binary files a/Neutron-trunk/resources/image/admin2/pages.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/password.png b/Neutron-trunk/resources/image/admin2/password.png deleted file mode 100644 index 45cb0d7..0000000 Binary files a/Neutron-trunk/resources/image/admin2/password.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/personalization.png b/Neutron-trunk/resources/image/admin2/personalization.png deleted file mode 100644 index a3f44a7..0000000 Binary files a/Neutron-trunk/resources/image/admin2/personalization.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/reset.png b/Neutron-trunk/resources/image/admin2/reset.png deleted file mode 100644 index 5c488f8..0000000 Binary files a/Neutron-trunk/resources/image/admin2/reset.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/security.png b/Neutron-trunk/resources/image/admin2/security.png deleted file mode 100644 index c1359de..0000000 Binary files a/Neutron-trunk/resources/image/admin2/security.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/selected.png b/Neutron-trunk/resources/image/admin2/selected.png deleted file mode 100644 index 4716244..0000000 Binary files a/Neutron-trunk/resources/image/admin2/selected.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/stats.png b/Neutron-trunk/resources/image/admin2/stats.png deleted file mode 100644 index 9eff0d9..0000000 Binary files a/Neutron-trunk/resources/image/admin2/stats.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/admin2/system.png b/Neutron-trunk/resources/image/admin2/system.png deleted file mode 100644 index c3947c0..0000000 Binary files a/Neutron-trunk/resources/image/admin2/system.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/close.svg b/Neutron-trunk/resources/image/close.svg deleted file mode 100644 index e7261bc..0000000 --- a/Neutron-trunk/resources/image/close.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/codename.jpg b/Neutron-trunk/resources/image/codename.jpg deleted file mode 100644 index 76ead71..0000000 Binary files a/Neutron-trunk/resources/image/codename.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/config.jpg b/Neutron-trunk/resources/image/config.jpg deleted file mode 100644 index b8c1854..0000000 Binary files a/Neutron-trunk/resources/image/config.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/config_back.svg b/Neutron-trunk/resources/image/config_back.svg deleted file mode 100644 index 5ca0d1e..0000000 --- a/Neutron-trunk/resources/image/config_back.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/config_explore.svg b/Neutron-trunk/resources/image/config_explore.svg deleted file mode 100644 index 6d0452c..0000000 --- a/Neutron-trunk/resources/image/config_explore.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/config_file_import.svg b/Neutron-trunk/resources/image/config_file_import.svg deleted file mode 100644 index 131f1c3..0000000 --- a/Neutron-trunk/resources/image/config_file_import.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/config_file_replace.svg b/Neutron-trunk/resources/image/config_file_replace.svg deleted file mode 100644 index 9d7486d..0000000 --- a/Neutron-trunk/resources/image/config_file_replace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/config_finish.svg b/Neutron-trunk/resources/image/config_finish.svg deleted file mode 100644 index 8f8bf11..0000000 --- a/Neutron-trunk/resources/image/config_finish.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/config_next.svg b/Neutron-trunk/resources/image/config_next.svg deleted file mode 100644 index 892f4bd..0000000 --- a/Neutron-trunk/resources/image/config_next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/config_restart.svg b/Neutron-trunk/resources/image/config_restart.svg deleted file mode 100644 index c2dea82..0000000 --- a/Neutron-trunk/resources/image/config_restart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/contact_address.svg b/Neutron-trunk/resources/image/contact_address.svg deleted file mode 100644 index 130799a..0000000 --- a/Neutron-trunk/resources/image/contact_address.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/contact_email.svg b/Neutron-trunk/resources/image/contact_email.svg deleted file mode 100644 index 1ed4686..0000000 --- a/Neutron-trunk/resources/image/contact_email.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/contact_phone.svg b/Neutron-trunk/resources/image/contact_phone.svg deleted file mode 100644 index 6b09749..0000000 --- a/Neutron-trunk/resources/image/contact_phone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/contact_priority.svg b/Neutron-trunk/resources/image/contact_priority.svg deleted file mode 100644 index 40f94ce..0000000 --- a/Neutron-trunk/resources/image/contact_priority.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/default.jpg b/Neutron-trunk/resources/image/default.jpg deleted file mode 100644 index 74c1918..0000000 Binary files a/Neutron-trunk/resources/image/default.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/color-blue.jpg b/Neutron-trunk/resources/image/demos/color-blue.jpg deleted file mode 100644 index 156bbc2..0000000 Binary files a/Neutron-trunk/resources/image/demos/color-blue.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/color-brown.jpg b/Neutron-trunk/resources/image/demos/color-brown.jpg deleted file mode 100644 index 5ef73fa..0000000 Binary files a/Neutron-trunk/resources/image/demos/color-brown.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/color-green.jpg b/Neutron-trunk/resources/image/demos/color-green.jpg deleted file mode 100644 index efd9a9b..0000000 Binary files a/Neutron-trunk/resources/image/demos/color-green.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/color-orange.jpg b/Neutron-trunk/resources/image/demos/color-orange.jpg deleted file mode 100644 index d682b77..0000000 Binary files a/Neutron-trunk/resources/image/demos/color-orange.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/color-purple.jpg b/Neutron-trunk/resources/image/demos/color-purple.jpg deleted file mode 100644 index 0000975..0000000 Binary files a/Neutron-trunk/resources/image/demos/color-purple.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/color-red.jpg b/Neutron-trunk/resources/image/demos/color-red.jpg deleted file mode 100644 index 00905e9..0000000 Binary files a/Neutron-trunk/resources/image/demos/color-red.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/color-white.jpg b/Neutron-trunk/resources/image/demos/color-white.jpg deleted file mode 100644 index 8dc1192..0000000 Binary files a/Neutron-trunk/resources/image/demos/color-white.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/theme-auto.jpg b/Neutron-trunk/resources/image/demos/theme-auto.jpg deleted file mode 100644 index 89ec238..0000000 Binary files a/Neutron-trunk/resources/image/demos/theme-auto.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/theme-dark.jpg b/Neutron-trunk/resources/image/demos/theme-dark.jpg deleted file mode 100644 index 2652232..0000000 Binary files a/Neutron-trunk/resources/image/demos/theme-dark.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/demos/theme-light.jpg b/Neutron-trunk/resources/image/demos/theme-light.jpg deleted file mode 100644 index 3c4f73c..0000000 Binary files a/Neutron-trunk/resources/image/demos/theme-light.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/display.svg b/Neutron-trunk/resources/image/display.svg deleted file mode 100644 index 15caec1..0000000 --- a/Neutron-trunk/resources/image/display.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/error.jpg b/Neutron-trunk/resources/image/error.jpg deleted file mode 100644 index 5b1fb17..0000000 Binary files a/Neutron-trunk/resources/image/error.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/ext-remove.svg b/Neutron-trunk/resources/image/ext-remove.svg deleted file mode 100644 index bb3db74..0000000 --- a/Neutron-trunk/resources/image/ext-remove.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/ext-settings.svg b/Neutron-trunk/resources/image/ext-settings.svg deleted file mode 100644 index 015006b..0000000 --- a/Neutron-trunk/resources/image/ext-settings.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Neutron-trunk/resources/image/ext-store.svg b/Neutron-trunk/resources/image/ext-store.svg deleted file mode 100644 index 4451e77..0000000 --- a/Neutron-trunk/resources/image/ext-store.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/gallery-zoom-minus.svg b/Neutron-trunk/resources/image/gallery-zoom-minus.svg deleted file mode 100644 index d6c04d3..0000000 --- a/Neutron-trunk/resources/image/gallery-zoom-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/gallery-zoom-plus.svg b/Neutron-trunk/resources/image/gallery-zoom-plus.svg deleted file mode 100644 index a807622..0000000 --- a/Neutron-trunk/resources/image/gallery-zoom-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/getimage.png b/Neutron-trunk/resources/image/getimage.png deleted file mode 100644 index 221786b..0000000 Binary files a/Neutron-trunk/resources/image/getimage.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/loader.svg b/Neutron-trunk/resources/image/loader.svg deleted file mode 100644 index 1ab478b..0000000 --- a/Neutron-trunk/resources/image/loader.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/login.jpg b/Neutron-trunk/resources/image/login.jpg deleted file mode 100644 index 1c67c0a..0000000 Binary files a/Neutron-trunk/resources/image/login.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/menu.svg b/Neutron-trunk/resources/image/menu.svg deleted file mode 100644 index a2d03a4..0000000 --- a/Neutron-trunk/resources/image/menu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/message_error.svg b/Neutron-trunk/resources/image/message_error.svg deleted file mode 100644 index 04e2223..0000000 --- a/Neutron-trunk/resources/image/message_error.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/message_info.svg b/Neutron-trunk/resources/image/message_info.svg deleted file mode 100644 index ab9cff7..0000000 --- a/Neutron-trunk/resources/image/message_info.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/message_warning.svg b/Neutron-trunk/resources/image/message_warning.svg deleted file mode 100644 index dfcf997..0000000 --- a/Neutron-trunk/resources/image/message_warning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/oobe.svg b/Neutron-trunk/resources/image/oobe.svg deleted file mode 100644 index 30842c1..0000000 --- a/Neutron-trunk/resources/image/oobe.svg +++ /dev/null @@ -1,1434 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <date/time> - - - - - - <footer> - - - - - - <number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/oobe/check.png b/Neutron-trunk/resources/image/oobe/check.png deleted file mode 100644 index 4a844d6..0000000 Binary files a/Neutron-trunk/resources/image/oobe/check.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/error.png b/Neutron-trunk/resources/image/oobe/error.png deleted file mode 100644 index 8c34385..0000000 Binary files a/Neutron-trunk/resources/image/oobe/error.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/finish.png b/Neutron-trunk/resources/image/oobe/finish.png deleted file mode 100644 index c401bd4..0000000 Binary files a/Neutron-trunk/resources/image/oobe/finish.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/icon.png b/Neutron-trunk/resources/image/oobe/icon.png deleted file mode 100644 index 5060593..0000000 Binary files a/Neutron-trunk/resources/image/oobe/icon.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/init.png b/Neutron-trunk/resources/image/oobe/init.png deleted file mode 100644 index 28207c9..0000000 Binary files a/Neutron-trunk/resources/image/oobe/init.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/installing.png b/Neutron-trunk/resources/image/oobe/installing.png deleted file mode 100644 index 0a37935..0000000 Binary files a/Neutron-trunk/resources/image/oobe/installing.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/language.png b/Neutron-trunk/resources/image/oobe/language.png deleted file mode 100644 index 6f4cdb0..0000000 Binary files a/Neutron-trunk/resources/image/oobe/language.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/name.png b/Neutron-trunk/resources/image/oobe/name.png deleted file mode 100644 index dc301cf..0000000 Binary files a/Neutron-trunk/resources/image/oobe/name.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/ready.png b/Neutron-trunk/resources/image/oobe/ready.png deleted file mode 100644 index 94ef9cc..0000000 Binary files a/Neutron-trunk/resources/image/oobe/ready.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/software-license.png b/Neutron-trunk/resources/image/oobe/software-license.png deleted file mode 100644 index 192aa50..0000000 Binary files a/Neutron-trunk/resources/image/oobe/software-license.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/oobe/welcome.png b/Neutron-trunk/resources/image/oobe/welcome.png deleted file mode 100644 index 759333a..0000000 Binary files a/Neutron-trunk/resources/image/oobe/welcome.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/ready.jpg b/Neutron-trunk/resources/image/ready.jpg deleted file mode 100644 index c64d4dc..0000000 Binary files a/Neutron-trunk/resources/image/ready.jpg and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/backup.png b/Neutron-trunk/resources/image/regedit/backup.png deleted file mode 100644 index f15a9c2..0000000 Binary files a/Neutron-trunk/resources/image/regedit/backup.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/data.png b/Neutron-trunk/resources/image/regedit/data.png deleted file mode 100644 index f68559e..0000000 Binary files a/Neutron-trunk/resources/image/regedit/data.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/folder.png b/Neutron-trunk/resources/image/regedit/folder.png deleted file mode 100644 index adc73eb..0000000 Binary files a/Neutron-trunk/resources/image/regedit/folder.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/icon.png b/Neutron-trunk/resources/image/regedit/icon.png deleted file mode 100644 index d8b489d..0000000 Binary files a/Neutron-trunk/resources/image/regedit/icon.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/image.png b/Neutron-trunk/resources/image/regedit/image.png deleted file mode 100644 index ef5f20a..0000000 Binary files a/Neutron-trunk/resources/image/regedit/image.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/json.png b/Neutron-trunk/resources/image/regedit/json.png deleted file mode 100644 index 9cc9b21..0000000 Binary files a/Neutron-trunk/resources/image/regedit/json.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/keys.png b/Neutron-trunk/resources/image/regedit/keys.png deleted file mode 100644 index 1bf414b..0000000 Binary files a/Neutron-trunk/resources/image/regedit/keys.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/old/data.svg b/Neutron-trunk/resources/image/regedit/old/data.svg deleted file mode 100644 index 35c07bc..0000000 --- a/Neutron-trunk/resources/image/regedit/old/data.svg +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/folder.svg b/Neutron-trunk/resources/image/regedit/old/folder.svg deleted file mode 100644 index 3299634..0000000 --- a/Neutron-trunk/resources/image/regedit/old/folder.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/icon.svg b/Neutron-trunk/resources/image/regedit/old/icon.svg deleted file mode 100644 index 5db1576..0000000 --- a/Neutron-trunk/resources/image/regedit/old/icon.svg +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/image.svg b/Neutron-trunk/resources/image/regedit/old/image.svg deleted file mode 100644 index 4a01018..0000000 --- a/Neutron-trunk/resources/image/regedit/old/image.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/json.svg b/Neutron-trunk/resources/image/regedit/old/json.svg deleted file mode 100644 index 84d17c9..0000000 --- a/Neutron-trunk/resources/image/regedit/old/json.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/keys.svg b/Neutron-trunk/resources/image/regedit/old/keys.svg deleted file mode 100644 index d7538a9..0000000 --- a/Neutron-trunk/resources/image/regedit/old/keys.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/page.svg b/Neutron-trunk/resources/image/regedit/old/page.svg deleted file mode 100644 index 7370d4b..0000000 --- a/Neutron-trunk/resources/image/regedit/old/page.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/special.svg b/Neutron-trunk/resources/image/regedit/old/special.svg deleted file mode 100644 index bdc1a71..0000000 --- a/Neutron-trunk/resources/image/regedit/old/special.svg +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/old/token.svg b/Neutron-trunk/resources/image/regedit/old/token.svg deleted file mode 100644 index 42e852a..0000000 --- a/Neutron-trunk/resources/image/regedit/old/token.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/image/regedit/page.png b/Neutron-trunk/resources/image/regedit/page.png deleted file mode 100644 index 413c08b..0000000 Binary files a/Neutron-trunk/resources/image/regedit/page.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/special.png b/Neutron-trunk/resources/image/regedit/special.png deleted file mode 100644 index df3c490..0000000 Binary files a/Neutron-trunk/resources/image/regedit/special.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/regedit/token.png b/Neutron-trunk/resources/image/regedit/token.png deleted file mode 100644 index 5c8a635..0000000 Binary files a/Neutron-trunk/resources/image/regedit/token.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/resetted.png b/Neutron-trunk/resources/image/resetted.png deleted file mode 100644 index 9499ad4..0000000 Binary files a/Neutron-trunk/resources/image/resetted.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/siteicon.png b/Neutron-trunk/resources/image/siteicon.png deleted file mode 100644 index 5e2e85f..0000000 Binary files a/Neutron-trunk/resources/image/siteicon.png and /dev/null differ diff --git a/Neutron-trunk/resources/image/storeloader.svg b/Neutron-trunk/resources/image/storeloader.svg deleted file mode 100644 index 6212559..0000000 --- a/Neutron-trunk/resources/image/storeloader.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Neutron-trunk/resources/image/tools.svg b/Neutron-trunk/resources/image/tools.svg deleted file mode 100644 index 8443703..0000000 --- a/Neutron-trunk/resources/image/tools.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Neutron-trunk/resources/js/admin_v2.js b/Neutron-trunk/resources/js/admin_v2.js deleted file mode 100644 index ab7249d..0000000 --- a/Neutron-trunk/resources/js/admin_v2.js +++ /dev/null @@ -1,14 +0,0 @@ -// noinspection JSUnresolvedFunction - -Array.from(document.getElementsByClassName("inner-item")).forEach((item) => { - item.onclick = () => { - if (item.getAttribute("data-item-href").startsWith("parent://")) { - window.open("https://" + item.getAttribute("data-item-href").substr("parent://".length)); - } else if (item.getAttribute("data-item-href").startsWith("top://")) { - window.parent.location.href = item.getAttribute("data-item-href").substr("top://".length); - } else { - $(document.body).fadeOut(75); - location.href = item.getAttribute("data-item-href") - } - } -}) \ No newline at end of file diff --git a/Neutron-trunk/resources/js/ckeditor5/ckeditor.js b/Neutron-trunk/resources/js/ckeditor5/ckeditor.js deleted file mode 100644 index ca2af1e..0000000 --- a/Neutron-trunk/resources/js/ckeditor5/ckeditor.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md. - */ -!function(t){t.en=Object.assign(t.en||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"Italic",e:"Strikethrough",f:"Underline",g:"Bold",h:"Subscript",i:"Code",j:"Superscript",k:"Block quote",l:"Choose heading",m:"Heading",n:"Full size image",o:"Side image",p:"Left aligned image",q:"Centered image",r:"Right aligned image",s:"image widget",t:"Insert image or file",u:"Increase indent",v:"Decrease indent",w:"Numbered List",x:"Bulleted List",y:"Insert image",z:"Enter image caption",aa:"Align left",ab:"Align right",ac:"Align center",ad:"Justify",ae:"Text alignment",af:"Text alignment toolbar",ag:"Upload failed",ah:"media widget",ai:"Upload in progress",aj:"Widget toolbar",ak:"Horizontal line",al:"Insert media",am:"The URL must not be empty.",an:"This media URL is not supported.",ao:"Remove Format",ap:"Insert table",aq:"Header column",ar:"Insert column left",as:"Insert column right",at:"Delete column",au:"Column",av:"Header row",aw:"Insert row below",ax:"Insert row above",ay:"Delete row",az:"Row",ba:"Merge cell up",bb:"Merge cell right",bc:"Merge cell down",bd:"Merge cell left",be:"Split cell vertically",bf:"Split cell horizontally",bg:"Merge cells",bh:"Link",bi:"Change image text alternative",bj:"Could not obtain resized image URL.",bk:"Selecting resized image failed",bl:"Could not insert image at the current position.",bm:"Inserting image failed",bn:"Rich Text Editor",bo:"Rich Text Editor, %0",bp:"Font Background Color",bq:"Font Color",br:"Font Family",bs:"Default",bt:"Font Size",bu:"Tiny",bv:"Small",bw:"Big",bx:"Huge",by:"Editor toolbar",bz:"Show more items",ca:"Dropdown toolbar",cb:"Unlink",cc:"Edit link",cd:"Open link in new tab",ce:"This link has no URL",cf:"Save",cg:"Cancel",ch:"Paste the media URL in the input.",ci:"Tip: Paste the URL into the content to embed faster.",cj:"Media URL",ck:"Link URL",cl:"Text alternative",cm:"%0 of %1",cn:"Previous",co:"Next",cp:"Remove color",cq:"Document colors",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Open in a new tab",dh:"Downloadable",di:"Undo",dj:"Redo",dk:"Paragraph",dl:"Heading 1",dm:"Heading 2",dn:"Heading 3",do:"Heading 4",dp:"Heading 5",dq:"Heading 6"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClassicEditor=e():t.ClassicEditor=e()}(window,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)i.d(n,o,function(e){return t[e]}.bind(null,o));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=104)}([function(t,e,i){"use strict";i.d(e,"b",(function(){return n})),i.d(e,"a",(function(){return o}));class n extends Error{constructor(t,e,i){t=o(t),i&&(t+=" "+JSON.stringify(i)),super(t),this.name="CKEditorError",this.context=e,this.data=i}is(t){return"CKEditorError"===t}static rethrowUnexpectedError(t,e){if(t.is&&t.is("CKEditorError"))throw t;const i=new n(t.message,e);throw i.stack=t.stack,i}}function o(t){const e=t.match(/^([^:]+):/);return e?t+` Read more: https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html#error-${e[1]}\n`:t}},function(t,e,i){"use strict";var n,o=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},s=function(){var t={};return function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}t[e]=i}return t[e]}}(),r=[];function a(t){for(var e=-1,i=0;i:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}"},function(t,e,i){var n=i(1),o=i(21);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}"},function(t,e,i){var n=i(1),o=i(23);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{z-index:var(--ck-z-modal);position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{top:auto;position:absolute}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow),0 0;border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0}"},function(t,e,i){var n=i(1),o=i(25);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on .ck-tooltip{display:none}.ck.ck-dropdown .ck-dropdown__panel{-webkit-backface-visibility:hidden;display:none;z-index:var(--ck-z-modal);position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}:root{--ck-dropdown-arrow-size:calc(0.5*var(--ck-icon-size))}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:7em;overflow:hidden;text-overflow:ellipsis}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown__panel{box-shadow:var(--ck-drop-shadow),0 0;border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown__panel{background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;min-width:100%}"},function(t,e,i){var n=i(1),o=i(27);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:.8333350694em;will-change:transform}.ck.ck-icon,.ck.ck-icon *{color:inherit;cursor:inherit}.ck.ck-icon :not([fill]){fill:currentColor}"},function(t,e,i){var n=i(1),o=i(29);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports='.ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{position:absolute;pointer-events:none;-webkit-backface-visibility:hidden}.ck.ck-tooltip{visibility:hidden;opacity:0;display:none;z-index:var(--ck-z-modal)}.ck.ck-tooltip .ck-tooltip__text{display:inline-block}.ck.ck-tooltip .ck-tooltip__text:after{content:"";width:0;height:0}:root{--ck-tooltip-arrow-size:5px}.ck.ck-tooltip{left:50%;top:0;transition:opacity .2s ease-in-out .2s}.ck.ck-tooltip .ck-tooltip__text{border-radius:0}.ck-rounded-corners .ck.ck-tooltip .ck-tooltip__text,.ck.ck-tooltip .ck-tooltip__text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-tooltip .ck-tooltip__text{font-size:.9em;line-height:1.5;color:var(--ck-color-tooltip-text);padding:var(--ck-spacing-small) var(--ck-spacing-medium);background:var(--ck-color-tooltip-background);position:relative;left:-50%}.ck.ck-tooltip .ck-tooltip__text:after{transition:opacity .2s ease-in-out .2s;border-style:solid;left:50%}.ck.ck-tooltip.ck-tooltip_s{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(100%)}.ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text:after{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:var(--ck-color-tooltip-background);border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:0}.ck.ck-tooltip.ck-tooltip_n{top:calc(-1*var(--ck-tooltip-arrow-size));transform:translateY(-100%)}.ck.ck-tooltip.ck-tooltip_n .ck-tooltip__text:after{bottom:calc(-1*var(--ck-tooltip-arrow-size));transform:translateX(-50%);border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent;border-top-color:var(--ck-color-tooltip-background);border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:0;border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}'},function(t,e,i){var n=i(1),o=i(31);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-button,a.ck.ck-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:block}@media (hover:none){.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:none}}.ck.ck-button,a.ck.ck-button{position:relative;display:inline-flex;align-items:center;justify-content:left}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{display:none}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){justify-content:center}.ck.ck-button:hover .ck-tooltip,a.ck.ck-button:hover .ck-tooltip{visibility:visible;opacity:1}.ck.ck-button:focus:not(:hover) .ck-tooltip,a.ck.ck-button:focus:not(:hover) .ck-tooltip{display:none}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;border:1px solid transparent;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;-webkit-appearance:none}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{color:inherit}[dir=ltr] .ck.ck-button .ck-button__keystroke,[dir=ltr] a.ck.ck-button .ck-button__keystroke{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-button .ck-button__keystroke,[dir=rtl] a.ck.ck-button .ck-button__keystroke{margin-right:var(--ck-spacing-large)}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{font-weight:700;opacity:.7}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__icon{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__keystroke,a.ck.ck-button.ck-disabled .ck-button__keystroke{opacity:.3}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(-1*var(--ck-spacing-small));margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-right:calc(-1*var(--ck-spacing-small));margin-left:var(--ck-spacing-small)}.ck.ck-button.ck-button_with-keystroke .ck-button__label,a.ck.ck-button.ck-button_with-keystroke .ck-button__label{flex-grow:1}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}"},function(t,e,i){var n=i(1),o=i(33);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-list{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{list-style-type:none;background:var(--ck-color-list-background)}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{min-height:unset;width:100%;text-align:left;border-radius:0;padding:calc(0.2*var(--ck-line-height-base)*var(--ck-font-size-base)) calc(0.4*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(1.2*var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{height:1px;width:100%;background:var(--ck-color-base-border)}"},function(t,e,i){var n=i(1),o=i(35);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:1.0769230769em;--ck-switch-button-toggle-spacing:1px;--ck-switch-button-translation:1.3846153847em}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(2*var(--ck-spacing-large))}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(2*var(--ck-spacing-large))}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{transition:background .4s ease;width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(0.5*var(--ck-border-radius))}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{margin:var(--ck-switch-button-toggle-spacing);width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s ease}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(calc(-1*var(--ck-switch-button-translation)))}"},function(t,e,i){var n=i(1),o=i(37);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-toolbar-dropdown .ck.ck-toolbar .ck.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar-dropdown .ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}"},function(t,e,i){var n=i(1),o=i(39);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}"},function(t,e,i){var n=i(1),o=i(41);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-toolbar{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-flow:row nowrap;align-items:center}.ck.ck-toolbar>.ck-toolbar__items{display:flex;flex-flow:row wrap;align-items:center;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border)}.ck.ck-toolbar>.ck-toolbar__items>*{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{width:100%;margin:0;border-radius:0;border:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact .ck-toolbar__items>.ck{margin:0}.ck.ck-toolbar.ck-toolbar_compact .ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar.ck-toolbar_compact .ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar.ck-toolbar_compact .ck-toolbar__items>.ck:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck-toolbar__items>*,.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck.ck-toolbar .ck.ck-toolbar__separator{align-self:stretch;width:1px;min-width:1px;margin-top:0;margin-bottom:0;background:var(--ck-color-toolbar-border)}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__grouped-dropdown,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{padding-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__items>*,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__items>*{margin-left:var(--ck-spacing-small);margin-right:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__items>:last-child,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__items>:last-child{margin-left:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_grouping>.ck-toolbar__items,[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__grouped-dropdown,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{padding-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__items>:last-child,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__items>:last-child{margin-right:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_grouping>.ck-toolbar__items,[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{margin-right:var(--ck-spacing-small)}"},function(t,e,i){var n=i(1),o=i(43);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-modal)}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-bottom-width:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar{border-bottom-width:1px;border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:0}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:0}.ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,.ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}"},function(t,e,i){var n=i(1),o=i(45);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck-content blockquote{overflow:hidden;padding-right:1.5em;padding-left:1.5em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}"},function(t,e,i){var n=i(1),o=i(47);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}"},function(t,e,i){var n=i(1),o=i(49);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=":root{--ck-color-resizer:var(--ck-color-focus-border);--ck-resizer-size:10px;--ck-resizer-border-width:1px;--ck-resizer-border-radius:2px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-tooltip-offset:10px;--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2}.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{visibility:visible}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);display:block;padding:var(--ck-spacing-small)}.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:200ms;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);outline-style:solid;outline-color:transparent;transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-editor__nested-editable{border:1px solid transparent}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;background-color:var(--ck-color-widget-editable-focus-background)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{padding:4px;box-sizing:border-box;background-color:transparent;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;transform:translateY(-100%);left:calc(0px - var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck-editor__editable>.ck-widget.ck-widget_with-selection-handle:first-child,.ck-editor__editable blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle .ck-widget__selection-handle:hover,.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck-editor__editable.ck-read-only .ck-widget{--ck-widget-outline-thickness:0}"},function(t,e,i){var n=i(1),o=i(51);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-labeled-input .ck-labeled-input__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-input .ck-labeled-input__status_error{color:var(--ck-color-base-error)}"},function(t,e,i){var n=i(1),o=i(53);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=":root{--ck-input-text-width:18em}.ck.ck-input-text{border-radius:0}.ck-rounded-corners .ck.ck-input-text,.ck.ck-input-text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-text{box-shadow:var(--ck-inner-shadow),0 0;background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-text-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .2s ease-in-out,border .2s ease-in-out}.ck.ck-input-text:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input-text[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),var(--ck-inner-shadow)}.ck.ck-input-text.ck-error{border-color:var(--ck-color-input-error-border);animation:ck-text-input-shake .3s ease both}.ck.ck-input-text.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),var(--ck-inner-shadow)}@keyframes ck-text-input-shake{20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}80%{transform:translateX(1px)}}"},function(t,e,i){var n=i(1),o=i(55);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-text-alternative-form{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-text-alternative-form .ck-labeled-input{display:inline-block}.ck.ck-text-alternative-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-text-alternative-form{flex-wrap:wrap}.ck.ck-text-alternative-form .ck-labeled-input{flex-basis:100%}.ck.ck-text-alternative-form .ck-button{flex-basis:50%}}.ck.ck-text-alternative-form{padding:var(--ck-spacing-standard)}.ck.ck-text-alternative-form:focus{outline:none}[dir=ltr] .ck.ck-text-alternative-form>:not(:first-child),[dir=rtl] .ck.ck-text-alternative-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-text-alternative-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-text-alternative-form .ck-labeled-input{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-text-alternative-form .ck-labeled-input .ck-input-text{min-width:0;width:100%}.ck.ck-text-alternative-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-text-alternative-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-text-alternative-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-text-alternative-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(t,e,i){var n=i(1),o=i(57);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=':root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:"";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{width:0;height:0;border-style:solid}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:var(--ck-balloon-arrow-height);border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:0}.ck.ck-balloon-panel[class*=arrow_n]:before{border-bottom-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-color:transparent;border-right-color:transparent;border-top-color:transparent}.ck.ck-balloon-panel[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background);margin-top:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:0;border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-top-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent}.ck.ck-balloon-panel[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background);margin-bottom:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(2*var(--ck-balloon-arrow-half-width));top:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{left:50%;margin-left:calc(-1*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{left:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{right:calc(2*var(--ck-balloon-arrow-half-width));bottom:calc(-1*var(--ck-balloon-arrow-height))}'},function(t,e,i){var n=i(1),o=i(59);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck .ck-balloon-rotator__navigation{display:flex;align-items:center;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}"},function(t,e,i){var n=i(1),o=i(61);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}"},function(t,e,i){var n=i(1),o=i(63);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck-content .image{display:table;clear:both;text-align:center;margin:1em auto}.ck-content .image>img{display:block;margin:0 auto;max-width:100%;min-width:50px}"},function(t,e,i){var n=i(1),o=i(65);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-editor__editable .image{position:relative}.ck.ck-editor__editable .image .ck-progress-bar{position:absolute;top:0;left:0}.ck.ck-editor__editable .image.ck-appear{animation:fadeIn .7s}.ck.ck-editor__editable .image .ck-progress-bar{height:2px;width:0;background:var(--ck-color-upload-bar-background);transition:width .1s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}"},function(t,e,i){var n=i(1),o=i(67);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports='.ck-image-upload-complete-icon{display:block;position:absolute;top:10px;right:10px;border-radius:50%}.ck-image-upload-complete-icon:after{content:"";position:absolute}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20px;--ck-image-upload-icon-width:2px}.ck-image-upload-complete-icon{width:var(--ck-image-upload-icon-size);height:var(--ck-image-upload-icon-size);opacity:0;background:var(--ck-color-image-upload-icon-background);animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-fill-mode:forwards,forwards;animation-duration:.5s,.5s;font-size:var(--ck-image-upload-icon-size);animation-delay:0ms,3s}.ck-image-upload-complete-icon:after{left:25%;top:50%;opacity:0;height:0;width:0;transform:scaleX(-1) rotate(135deg);transform-origin:left top;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;box-sizing:border-box}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}'},function(t,e,i){var n=i(1),o=i(69);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports='.ck .ck-upload-placeholder-loader{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0}.ck .ck-upload-placeholder-loader:before{content:"";position:relative}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-upload-placeholder-loader{width:100%;height:100%}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-radius:50%;border-top:3px solid var(--ck-color-upload-placeholder-loader);border-right:2px solid transparent;animation:ck-upload-placeholder-loader 1s linear infinite}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}'},function(t,e){t.exports=".ck.ck-heading_heading1{font-size:20px}.ck.ck-heading_heading2{font-size:17px}.ck.ck-heading_heading3{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}"},function(t,e,i){var n=i(1),o=i(72);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck-content .image>figcaption{display:table-caption;caption-side:bottom;word-break:break-word;color:#333;background-color:#f7f7f7;padding:.6em;font-size:.75em;outline-offset:-1px}"},function(t,e,i){var n=i(1),o=i(74);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=":root{--ck-image-style-spacing:1.5em}.ck-content .image-style-align-center,.ck-content .image-style-align-left,.ck-content .image-style-align-right,.ck-content .image-style-side{max-width:50%}.ck-content .image-style-side{float:right;margin-left:var(--ck-image-style-spacing)}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-image-style-spacing)}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-image-style-spacing)}"},function(t,e,i){var n=i(1),o=i(76);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-link-form{display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{flex-wrap:wrap}.ck.ck-link-form .ck-labeled-input{flex-basis:100%}.ck.ck-link-form .ck-button{flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form{padding:var(--ck-spacing-standard)}.ck.ck-link-form:focus{outline:none}[dir=ltr] .ck.ck-link-form>:not(:first-child),[dir=rtl] .ck.ck-link-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-form .ck-labeled-input{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-form .ck-labeled-input .ck-input-text{min-width:0;width:100%}.ck.ck-link-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}.ck.ck-link-form_layout-vertical{padding:0;min-width:var(--ck-input-text-width)}.ck.ck-link-form_layout-vertical .ck-labeled-input{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-input .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical .ck-button{padding:var(--ck-spacing-standard);margin:0;border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border);width:50%}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin-left:0}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{border:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}"},function(t,e,i){var n=i(1),o=i(78);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-link-actions{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){flex-basis:50%}}.ck.ck-link-actions{padding:var(--ck-spacing-standard)}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);text-overflow:ellipsis;cursor:pointer;max-width:var(--ck-input-text-width);min-width:3em;text-align:center}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}.ck.ck-link-actions:focus{outline:none}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{min-width:0;max-width:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview):last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(t,e,i){var n=i(1),o=i(80);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports='.ck-media__wrapper .ck-media__placeholder{display:flex;flex-direction:column;align-items:center}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:block}@media (hover:none){.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-tooltip{display:none}}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url:hover .ck-tooltip{visibility:visible;opacity:1}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{overflow:hidden;display:block}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder__icon *,.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck-media__placeholder__icon *{display:none}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{padding:calc(3*var(--ck-spacing-standard));background:var(--ck-color-base-foreground)}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{min-width:var(--ck-media-embed-placeholder-icon-size);height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);background-position:50%;background-size:cover}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{width:100%;height:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);white-space:nowrap;text-align:center;font-style:italic;text-overflow:ellipsis}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper[data-oembed-url*="open.spotify.com"]{max-width:300px;max-height:380px}.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMDAzLjc4IDEuNjFoNDkuNjIxYzEuNjk0IDAgMy4xOS0uNzk4IDQuMTQ2LTIuMDM3eiIgZmlsbD0iIzVjODhjNSIvPjxwYXRoIGQ9Ik0yMjYuNzQyIDIyMi45ODhjLTkuMjY2IDAtMTYuNzc3IDcuMTctMTYuNzc3IDE2LjAxNC4wMDcgMi43NjIuNjYzIDUuNDc0IDIuMDkzIDcuODc1LjQzLjcwMy44MyAxLjQwOCAxLjE5IDIuMTA3LjMzMy41MDIuNjUgMS4wMDUuOTUgMS41MDguMzQzLjQ3Ny42NzMuOTU3Ljk4OCAxLjQ0IDEuMzEgMS43NjkgMi41IDMuNTAyIDMuNjM3IDUuMTY4Ljc5MyAxLjI3NSAxLjY4MyAyLjY0IDIuNDY2IDMuOTkgMi4zNjMgNC4wOTQgNC4wMDcgOC4wOTIgNC42IDEzLjkxNHYuMDEyYy4xODIuNDEyLjUxNi42NjYuODc5LjY2Ny40MDMtLjAwMS43NjgtLjMxNC45My0uNzk5LjYwMy01Ljc1NiAyLjIzOC05LjcyOSA0LjU4NS0xMy43OTQuNzgyLTEuMzUgMS42NzMtMi43MTUgMi40NjUtMy45OSAxLjEzNy0xLjY2NiAyLjMyOC0zLjQgMy42MzgtNS4xNjkuMzE1LS40ODIuNjQ1LS45NjIuOTg4LTEuNDM5LjMtLjUwMy42MTctMS4wMDYuOTUtMS41MDguMzU5LS43Ljc2LTEuNDA0IDEuMTktMi4xMDcgMS40MjYtMi40MDIgMi01LjExNCAyLjAwNC03Ljg3NSAwLTguODQ0LTcuNTExLTE2LjAxNC0xNi43NzYtMTYuMDE0eiIgZmlsbD0iI2RkNGIzZSIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48ZWxsaXBzZSByeT0iNS41NjQiIHJ4PSI1LjgyOCIgY3k9IjIzOS4wMDIiIGN4PSIyMjYuNzQyIiBmaWxsPSIjODAyZDI3IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0xOTAuMzAxIDIzNy4yODNjLTQuNjcgMC04LjQ1NyAzLjg1My04LjQ1NyA4LjYwNnMzLjc4NiA4LjYwNyA4LjQ1NyA4LjYwN2MzLjA0MyAwIDQuODA2LS45NTggNi4zMzctMi41MTYgMS41My0xLjU1NyAyLjA4Ny0zLjkxMyAyLjA4Ny02LjI5IDAtLjM2Mi0uMDIzLS43MjItLjA2NC0xLjA3OWgtOC4yNTd2My4wNDNoNC44NWMtLjE5Ny43NTktLjUzMSAxLjQ1LTEuMDU4IDEuOTg2LS45NDIuOTU4LTIuMDI4IDEuNTQ4LTMuOTAxIDEuNTQ4LTIuODc2IDAtNS4yMDgtMi4zNzItNS4yMDgtNS4yOTkgMC0yLjkyNiAyLjMzMi01LjI5OSA1LjIwOC01LjI5OSAxLjM5OSAwIDIuNjE4LjQwNyAzLjU4NCAxLjI5M2wyLjM4MS0yLjM4YzAtLjAwMi0uMDAzLS4wMDQtLjAwNC0uMDA1LTEuNTg4LTEuNTI0LTMuNjItMi4yMTUtNS45NTUtMi4yMTV6bTQuNDMgNS42NmwuMDAzLjAwNnYtLjAwM3oiIGZpbGw9IiNmZmYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxNS4xODQgMjUxLjkyOWwtNy45OCA3Ljk3OSAyOC40NzcgMjguNDc1YTUuMjMzIDUuMjMzIDAgMDAuNDQ5LTIuMTIzdi0zMS4xNjVjLS40NjkuNjc1LS45MzQgMS4zNDktMS4zODIgMi4wMDUtLjc5MiAxLjI3NS0xLjY4MiAyLjY0LTIuNDY1IDMuOTktMi4zNDcgNC4wNjUtMy45ODIgOC4wMzgtNC41ODUgMTMuNzk0LS4xNjIuNDg1LS41MjcuNzk4LS45My43OTktLjM2My0uMDAxLS42OTctLjI1NS0uODc5LS42Njd2LS4wMTJjLS41OTMtNS44MjItMi4yMzctOS44Mi00LjYtMTMuOTE0LS43ODMtMS4zNS0xLjY3My0yLjcxNS0yLjQ2Ni0zLjk5LTEuMTM3LTEuNjY2LTIuMzI3LTMuNC0zLjYzNy01LjE2OWwtLjAwMi0uMDAzeiIgZmlsbD0iI2MzYzNjMyIvPjxwYXRoIGQ9Ik0yMTIuOTgzIDI0OC40OTVsLTM2Ljk1MiAzNi45NTN2LjgxMmE1LjIyNyA1LjIyNyAwIDAwNS4yMzggNS4yMzhoMS4wMTVsMzUuNjY2LTM1LjY2NmExMzYuMjc1IDEzNi4yNzUgMCAwMC0yLjc2NC0zLjkgMzcuNTc1IDM3LjU3NSAwIDAwLS45ODktMS40NCAzNS4xMjcgMzUuMTI3IDAgMDAtLjk1LTEuNTA4Yy0uMDgzLS4xNjItLjE3Ni0uMzI2LS4yNjQtLjQ4OXoiIGZpbGw9IiNmZGRjNGYiIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTIxMS45OTggMjYxLjA4M2wtNi4xNTIgNi4xNTEgMjQuMjY0IDI0LjI2NGguNzgxYTUuMjI3IDUuMjI3IDAgMDA1LjIzOS01LjIzOHYtMS4wNDV6IiBmaWxsPSIjZmZmIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NjcuNDg0IDBINTYuNTE3QzI1LjMwNCAwIDAgMjUuMzA0IDAgNTYuNTE3djkxMC45NjZDMCA5OTguNjk0IDI1LjI5NyAxMDI0IDU2LjUyMiAxMDI0SDU0N1Y2MjhINDE0VjQ3M2gxMzNWMzU5LjAyOWMwLTEzMi4yNjIgODAuNzczLTIwNC4yODIgMTk4Ljc1Ni0yMDQuMjgyIDU2LjUxMyAwIDEwNS4wODYgNC4yMDggMTE5LjI0NCA2LjA4OVYyOTlsLTgxLjYxNi4wMzdjLTYzLjk5MyAwLTc2LjM4NCAzMC40OTItNzYuMzg0IDc1LjIzNlY0NzNoMTUzLjQ4N2wtMTkuOTg2IDE1NUg3MDd2Mzk2aDI2MC40ODRjMzEuMjEzIDAgNTYuNTE2LTI1LjMwMyA1Ni41MTYtNTYuNTE2VjU2LjUxNUMxMDI0IDI1LjMwMyA5OTguNjk3IDAgOTY3LjQ4NCAwIiBmaWxsPSIjRkZGRkZFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*="facebook.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c8,#b900b4,#f50000)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTA0IiBoZWlnaHQ9IjUwNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIC4xNTloNTAzLjg0MVY1MDMuOTRIMHoiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvbWFzaz48cGF0aCBkPSJNMjUxLjkyMS4xNTljLTY4LjQxOCAwLTc2Ljk5Ny4yOS0xMDMuODY3IDEuNTE2LTI2LjgxNCAxLjIyMy00NS4xMjcgNS40ODItNjEuMTUxIDExLjcxLTE2LjU2NiA2LjQzNy0zMC42MTUgMTUuMDUxLTQ0LjYyMSAyOS4wNTYtMTQuMDA1IDE0LjAwNi0yMi42MTkgMjguMDU1LTI5LjA1NiA0NC42MjEtNi4yMjggMTYuMDI0LTEwLjQ4NyAzNC4zMzctMTEuNzEgNjEuMTUxQy4yOSAxNzUuMDgzIDAgMTgzLjY2MiAwIDI1Mi4wOGMwIDY4LjQxNy4yOSA3Ni45OTYgMS41MTYgMTAzLjg2NiAxLjIyMyAyNi44MTQgNS40ODIgNDUuMTI3IDExLjcxIDYxLjE1MSA2LjQzNyAxNi41NjYgMTUuMDUxIDMwLjYxNSAyOS4wNTYgNDQuNjIxIDE0LjAwNiAxNC4wMDUgMjguMDU1IDIyLjYxOSA0NC42MjEgMjkuMDU3IDE2LjAyNCA2LjIyNyAzNC4zMzcgMTAuNDg2IDYxLjE1MSAxMS43MDkgMjYuODcgMS4yMjYgMzUuNDQ5IDEuNTE2IDEwMy44NjcgMS41MTYgNjguNDE3IDAgNzYuOTk2LS4yOSAxMDMuODY2LTEuNTE2IDI2LjgxNC0xLjIyMyA0NS4xMjctNS40ODIgNjEuMTUxLTExLjcwOSAxNi41NjYtNi40MzggMzAuNjE1LTE1LjA1MiA0NC42MjEtMjkuMDU3IDE0LjAwNS0xNC4wMDYgMjIuNjE5LTI4LjA1NSAyOS4wNTctNDQuNjIxIDYuMjI3LTE2LjAyNCAxMC40ODYtMzQuMzM3IDExLjcwOS02MS4xNTEgMS4yMjYtMjYuODcgMS41MTYtMzUuNDQ5IDEuNTE2LTEwMy44NjYgMC02OC40MTgtLjI5LTc2Ljk5Ny0xLjUxNi0xMDMuODY3LTEuMjIzLTI2LjgxNC01LjQ4Mi00NS4xMjctMTEuNzA5LTYxLjE1MS02LjQzOC0xNi41NjYtMTUuMDUyLTMwLjYxNS0yOS4wNTctNDQuNjIxLTE0LjAwNi0xNC4wMDUtMjguMDU1LTIyLjYxOS00NC42MjEtMjkuMDU2LTE2LjAyNC02LjIyOC0zNC4zMzctMTAuNDg3LTYxLjE1MS0xMS43MUMzMjguOTE3LjQ0OSAzMjAuMzM4LjE1OSAyNTEuOTIxLjE1OXptMCA0NS4zOTFjNjcuMjY1IDAgNzUuMjMzLjI1NyAxMDEuNzk3IDEuNDY5IDI0LjU2MiAxLjEyIDM3LjkwMSA1LjIyNCA0Ni43NzggOC42NzQgMTEuNzU5IDQuNTcgMjAuMTUxIDEwLjAyOSAyOC45NjYgMTguODQ1IDguODE2IDguODE1IDE0LjI3NSAxNy4yMDcgMTguODQ1IDI4Ljk2NiAzLjQ1IDguODc3IDcuNTU0IDIyLjIxNiA4LjY3NCA0Ni43NzggMS4yMTIgMjYuNTY0IDEuNDY5IDM0LjUzMiAxLjQ2OSAxMDEuNzk4IDAgNjcuMjY1LS4yNTcgNzUuMjMzLTEuNDY5IDEwMS43OTctMS4xMiAyNC41NjItNS4yMjQgMzcuOTAxLTguNjc0IDQ2Ljc3OC00LjU3IDExLjc1OS0xMC4wMjkgMjAuMTUxLTE4Ljg0NSAyOC45NjYtOC44MTUgOC44MTYtMTcuMjA3IDE0LjI3NS0yOC45NjYgMTguODQ1LTguODc3IDMuNDUtMjIuMjE2IDcuNTU0LTQ2Ljc3OCA4LjY3NC0yNi41NiAxLjIxMi0zNC41MjcgMS40NjktMTAxLjc5NyAxLjQ2OS02Ny4yNzEgMC03NS4yMzctLjI1Ny0xMDEuNzk4LTEuNDY5LTI0LjU2Mi0xLjEyLTM3LjkwMS01LjIyNC00Ni43NzgtOC42NzQtMTEuNzU5LTQuNTctMjAuMTUxLTEwLjAyOS0yOC45NjYtMTguODQ1LTguODE1LTguODE1LTE0LjI3NS0xNy4yMDctMTguODQ1LTI4Ljk2Ni0zLjQ1LTguODc3LTcuNTU0LTIyLjIxNi04LjY3NC00Ni43NzgtMS4yMTItMjYuNTY0LTEuNDY5LTM0LjUzMi0xLjQ2OS0xMDEuNzk3IDAtNjcuMjY2LjI1Ny03NS4yMzQgMS40NjktMTAxLjc5OCAxLjEyLTI0LjU2MiA1LjIyNC0zNy45MDEgOC42NzQtNDYuNzc4IDQuNTctMTEuNzU5IDEwLjAyOS0yMC4xNTEgMTguODQ1LTI4Ljk2NiA4LjgxNS04LjgxNiAxNy4yMDctMTQuMjc1IDI4Ljk2Ni0xOC44NDUgOC44NzctMy40NSAyMi4yMTYtNy41NTQgNDYuNzc4LTguNjc0IDI2LjU2NC0xLjIxMiAzNC41MzItMS40NjkgMTAxLjc5OC0xLjQ2OXoiIGZpbGw9IiNGRkYiIG1hc2s9InVybCgjYikiLz48cGF0aCBkPSJNMjUxLjkyMSAzMzYuMDUzYy00Ni4zNzggMC04My45NzQtMzcuNTk2LTgzLjk3NC04My45NzMgMC00Ni4zNzggMzcuNTk2LTgzLjk3NCA4My45NzQtODMuOTc0IDQ2LjM3NyAwIDgzLjk3MyAzNy41OTYgODMuOTczIDgzLjk3NCAwIDQ2LjM3Ny0zNy41OTYgODMuOTczLTgzLjk3MyA4My45NzN6bTAtMjEzLjMzOGMtNzEuNDQ3IDAtMTI5LjM2NSA1Ny45MTgtMTI5LjM2NSAxMjkuMzY1IDAgNzEuNDQ2IDU3LjkxOCAxMjkuMzY0IDEyOS4zNjUgMTI5LjM2NCA3MS40NDYgMCAxMjkuMzY0LTU3LjkxOCAxMjkuMzY0LTEyOS4zNjQgMC03MS40NDctNTcuOTE4LTEyOS4zNjUtMTI5LjM2NC0xMjkuMzY1ek00MTYuNjI3IDExNy42MDRjMCAxNi42OTYtMTMuNTM1IDMwLjIzLTMwLjIzMSAzMC4yMy0xNi42OTUgMC0zMC4yMy0xMy41MzQtMzAuMjMtMzAuMjMgMC0xNi42OTYgMTMuNTM1LTMwLjIzMSAzMC4yMy0zMC4yMzEgMTYuNjk2IDAgMzAuMjMxIDEzLjUzNSAzMC4yMzEgMzAuMjMxIiBmaWxsPSIjRkZGIi8+PC9nPjwvc3ZnPg==)}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*="instagram.com"] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj48cGF0aCBkPSJNNDAwIDIwMGMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDBTMCAzMTAuNSAwIDIwMCA4OS41IDAgMjAwIDBzMjAwIDg5LjUgMjAwIDIwMHpNMTYzLjQgMzA1LjVjODguNyAwIDEzNy4yLTczLjUgMTM3LjItMTM3LjIgMC0yLjEgMC00LjItLjEtNi4yIDkuNC02LjggMTcuNi0xNS4zIDI0LjEtMjUtOC42IDMuOC0xNy45IDYuNC0yNy43IDcuNiAxMC02IDE3LjYtMTUuNCAyMS4yLTI2LjctOS4zIDUuNS0xOS42IDkuNS0zMC42IDExLjctOC44LTkuNC0yMS4zLTE1LjItMzUuMi0xNS4yLTI2LjYgMC00OC4yIDIxLjYtNDguMiA0OC4yIDAgMy44LjQgNy41IDEuMyAxMS00MC4xLTItNzUuNi0yMS4yLTk5LjQtNTAuNC00LjEgNy4xLTYuNSAxNS40LTYuNSAyNC4yIDAgMTYuNyA4LjUgMzEuNSAyMS41IDQwLjEtNy45LS4yLTE1LjMtMi40LTIxLjgtNnYuNmMwIDIzLjQgMTYuNiA0Mi44IDM4LjcgNDcuMy00IDEuMS04LjMgMS43LTEyLjcgMS43LTMuMSAwLTYuMS0uMy05LjEtLjkgNi4xIDE5LjIgMjMuOSAzMy4xIDQ1IDMzLjUtMTYuNSAxMi45LTM3LjMgMjAuNi01OS45IDIwLjYtMy45IDAtNy43LS4yLTExLjUtLjcgMjEuMSAxMy44IDQ2LjUgMjEuOCA3My43IDIxLjgiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*="twitter.com"] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}'},function(t,e,i){var n=i(1),o=i(82);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-media-form{display:flex;align-items:flex-start;flex-direction:row;flex-wrap:nowrap}.ck.ck-media-form .ck-labeled-input{display:inline-block}.ck.ck-media-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-input{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}.ck.ck-media-form{padding:var(--ck-spacing-standard)}.ck.ck-media-form:focus{outline:none}[dir=ltr] .ck.ck-media-form>:not(:first-child),[dir=rtl] .ck.ck-media-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-media-form{padding:0;width:calc(0.8*var(--ck-input-text-width))}.ck.ck-media-form .ck-labeled-input{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-media-form .ck-labeled-input .ck-input-text{min-width:0;width:100%}.ck.ck-media-form .ck-labeled-input .ck-labeled-input__error{white-space:normal}.ck.ck-media-form .ck-button{padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-standard);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-media-form .ck-button{margin-left:0}[dir=ltr] .ck.ck-media-form .ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-media-form .ck-button{margin-left:0}[dir=rtl] .ck.ck-media-form .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}"},function(t,e,i){var n=i(1),o=i(84);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck-content .media{clear:both;margin:1em 0;display:block;min-width:15em}"},function(t,e,i){var n=i(1),o=i(86);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=":root{--ck-color-table-focused-cell-background:#f5fafe}.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused{background:var(--ck-color-table-focused-cell-background);border-style:none;outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}"},function(t,e,i){var n=i(1),o=i(88);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck .ck-insert-table-dropdown__grid{display:flex;flex-direction:row;flex-wrap:wrap}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0}.ck .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{width:var(--ck-insert-table-dropdown-box-width);height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}"},function(t,e,i){var n=i(1),o=i(90);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck-content .table{margin:1em auto;display:table}.ck-content .table table{border-collapse:collapse;border-spacing:0;width:100%;height:100%;border:1px double #b3b3b3}.ck-content .table table td,.ck-content .table table th{min-width:2em;padding:.4em;border-color:#d9d9d9}.ck-content .table table th{font-weight:700;background:#fafafa}"},function(t,e){t.exports=".ck-content code{background-color:hsla(0,0%,78%,.3);padding:.15em;border-radius:2px}"},function(t,e,i){var n=i(1),o=i(93);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck-editor__editable .ck-horizontal-line{overflow:hidden}.ck-content hr{border:solid #5e5e5e;border-width:1px 0 0;margin:0}.ck-editor__editable .ck-horizontal-line{padding:5px 0}"},function(t,e,i){var n=i(1),o=i(95);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck .ck-widget_with-resizer{position:relative}.ck .ck-widget__resizer{display:none;position:absolute;pointer-events:none;left:0;top:0;outline:1px solid var(--ck-color-resizer)}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}.ck .ck-widget__resizer__handle{position:absolute;pointer-events:all;width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nesw-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset);cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset);cursor:nesw-resize}"},function(t,e,i){var n=i(1),o=i(97);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck-content .image.image_resized{max-width:100%;display:block;box-sizing:border-box}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}"},function(t,e,i){var n=i(1),o=i(99);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck.ck-color-grid{display:grid}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#000}.ck.ck-color-grid{grid-gap:5px;padding:8px}.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile.ck-color-table__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile .ck.ck-icon{display:none;color:var(--ck-color-color-grid-check-icon)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}"},function(t,e,i){var n=i(1),o=i(101);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".ck .ck-button.ck-color-table__remove-color{display:flex;align-items:center;width:100%}label.ck.ck-color-grid__label{font-weight:unset}.ck .ck-button.ck-color-table__remove-color{padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck .ck-button.ck-color-table__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-base-border)}[dir=ltr] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-left:var(--ck-spacing-standard)}"},function(t,e,i){var n=i(1),o=i(103);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",insert:"head",singleton:!0},r=(n(o,s),o.locals?o.locals:{});t.exports=r},function(t,e){t.exports=".text-tiny{font-size:.7em}.text-small{font-size:.85em}.text-big{font-size:1.4em}.text-huge{font-size:1.8em}"},function(t,e,i){"use strict";i.r(e);var n=i(3),o=n.a.Symbol,s=Object.prototype,r=s.hasOwnProperty,a=s.toString,c=o?o.toStringTag:void 0;var l=function(t){var e=r.call(t,c),i=t[c];try{t[c]=void 0;var n=!0}catch(t){}var o=a.call(t);return n&&(e?t[c]=i:delete t[c]),o},d=Object.prototype.toString;var h=function(t){return d.call(t)},u=o?o.toStringTag:void 0;var f=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)};var m=function(t,e){return function(i){return t(e(i))}},g=m(Object.getPrototypeOf,Object);var p=function(t){return null!=t&&"object"==typeof t},b=Function.prototype,w=Object.prototype,k=b.toString,_=w.hasOwnProperty,v=k.call(Object);var y=function(t){if(!p(t)||"[object Object]"!=f(t))return!1;var e=g(t);if(null===e)return!0;var i=_.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&k.call(i)==v};var x=function(){this.__data__=[],this.size=0};var A=function(t,e){return t===e||t!=t&&e!=e};var C=function(t,e){for(var i=t.length;i--;)if(A(t[i][0],e))return i;return-1},T=Array.prototype.splice;var P=function(t){var e=this.__data__,i=C(e,t);return!(i<0)&&(i==e.length-1?e.pop():T.call(e,i,1),--this.size,!0)};var S=function(t){var e=this.__data__,i=C(e,t);return i<0?void 0:e[i][1]};var E=function(t){return C(this.__data__,t)>-1};var M=function(t,e){var i=this.__data__,n=C(i,t);return n<0?(++this.size,i.push([t,e])):i[n][1]=e,this};function I(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t-1&&t%1==0&&t<=9007199254740991},Bt={};Bt["[object Float32Array]"]=Bt["[object Float64Array]"]=Bt["[object Int8Array]"]=Bt["[object Int16Array]"]=Bt["[object Int32Array]"]=Bt["[object Uint8Array]"]=Bt["[object Uint8ClampedArray]"]=Bt["[object Uint16Array]"]=Bt["[object Uint32Array]"]=!0,Bt["[object Arguments]"]=Bt["[object Array]"]=Bt["[object ArrayBuffer]"]=Bt["[object Boolean]"]=Bt["[object DataView]"]=Bt["[object Date]"]=Bt["[object Error]"]=Bt["[object Function]"]=Bt["[object Map]"]=Bt["[object Number]"]=Bt["[object Object]"]=Bt["[object RegExp]"]=Bt["[object Set]"]=Bt["[object String]"]=Bt["[object WeakMap]"]=!1;var Ft=function(t){return p(t)&&Vt(t.length)&&!!Bt[f(t)]};var Ht=function(t){return function(e){return t(e)}},Ut=i(5),Wt=Ut.a&&Ut.a.isTypedArray,qt=Wt?Ht(Wt):Ft,$t=Object.prototype.hasOwnProperty;var Yt=function(t,e){var i=Lt(t),n=!i&&Rt(t),o=!i&&!n&&Object(Dt.a)(t),s=!i&&!n&&!o&&qt(t),r=i||n||o||s,a=r?Et(t.length,String):[],c=a.length;for(var l in t)!e&&!$t.call(t,l)||r&&("length"==l||o&&("offset"==l||"parent"==l)||s&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||jt(l,c))||a.push(l);return a},Gt=Object.prototype;var Qt=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||Gt)},Kt=m(Object.keys,Object),Jt=Object.prototype.hasOwnProperty;var Zt=function(t){if(!Qt(t))return Kt(t);var e=[];for(var i in Object(t))Jt.call(t,i)&&"constructor"!=i&&e.push(i);return e};var Xt=function(t){return null!=t&&Vt(t.length)&&!V(t)};var te=function(t){return Xt(t)?Yt(t):Zt(t)};var ee=function(t,e){return t&&St(e,te(e),t)};var ie=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e},ne=Object.prototype.hasOwnProperty;var oe=function(t){if(!z(t))return ie(t);var e=Qt(t),i=[];for(var n in t)("constructor"!=n||!e&&ne.call(t,n))&&i.push(n);return i};var se=function(t){return Xt(t)?Yt(t,!0):oe(t)};var re=function(t,e){return t&&St(e,se(e),t)},ae=i(8);var ce=function(t,e){var i=-1,n=t.length;for(e||(e=Array(n));++i{this._setToTarget(t,n,e[n],i)})}}function oi(t){return ei(t,si)}function si(t){return ii(t)?t:void 0}var ri=function(){return function t(){t.called=!0}};class ai{constructor(t,e){this.source=t,this.name=e,this.path=[],this.stop=ri(),this.off=ri()}}const ci=new Array(256).fill().map((t,e)=>("0"+e.toString(16)).slice(-2));function li(){const t=4294967296*Math.random()>>>0,e=4294967296*Math.random()>>>0,i=4294967296*Math.random()>>>0,n=4294967296*Math.random()>>>0;return"e"+ci[t>>0&255]+ci[t>>8&255]+ci[t>>16&255]+ci[t>>24&255]+ci[e>>0&255]+ci[e>>8&255]+ci[e>>16&255]+ci[e>>24&255]+ci[i>>0&255]+ci[i>>8&255]+ci[i>>16&255]+ci[i>>24&255]+ci[n>>0&255]+ci[n>>8&255]+ci[n>>16&255]+ci[n>>24&255]}var di={get(t){return"number"!=typeof t?this[t]||this.normal:t},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5},hi=(i(6),i(0));const ui=Symbol("listeningTo"),fi=Symbol("emitterId");var mi={on(t,e,i={}){this.listenTo(this,t,e,i)},once(t,e,i){let n=!1;this.listenTo(this,t,(function(t,...i){n||(n=!0,t.off(),e.call(this,t,...i))}),i)},off(t,e){this.stopListening(this,t,e)},listenTo(t,e,i,n={}){let o,s;this[ui]||(this[ui]={});const r=this[ui];pi(t)||gi(t);const a=pi(t);(o=r[a])||(o=r[a]={emitter:t,callbacks:{}}),(s=o.callbacks[e])||(s=o.callbacks[e]=[]),s.push(i),function(t,e){const i=bi(t);if(i[e])return;let n=e,o=null;const s=[];for(;""!==n&&!i[n];)i[n]={callbacks:[],childEvents:[]},s.push(i[n]),o&&i[n].childEvents.push(o),o=n,n=n.substr(0,n.lastIndexOf(":"));if(""!==n){for(const t of s)t.callbacks=i[n].callbacks.slice();i[n].childEvents.push(o)}}(t,e);const c=wi(t,e),l=di.get(n.priority),d={callback:i,priority:l};for(const t of c){let e=!1;for(let i=0;i-1?t(e,i.substr(0,i.lastIndexOf(":"))):null;return n.callbacks}(this,n);if(i.path.push(this),o){const t=[i,...e];o=Array.from(o);for(let e=0;e{this._delegations||(this._delegations=new Map),t.forEach(t=>{const n=this._delegations.get(t);n?n.set(e,i):this._delegations.set(t,new Map([[e,i]]))})}}},stopDelegating(t,e){if(this._delegations)if(t)if(e){const i=this._delegations.get(t);i&&i.delete(e)}else this._delegations.delete(t);else this._delegations.clear()}};function gi(t,e){t[fi]||(t[fi]=e||li())}function pi(t){return t[fi]}function bi(t){return t._events||Object.defineProperty(t,"_events",{value:{}}),t._events}function wi(t,e){const i=bi(t)[e];if(!i)return[];let n=[i.callbacks];for(let e=0;e{Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e)).forEach(i=>{if(i in t.prototype)return;const n=Object.getOwnPropertyDescriptor(e,i);n.enumerable=!1,Object.defineProperty(t.prototype,i,n)})})}class yi{constructor(t={}){this._items=[],this._itemMap=new Map,this._idProperty=t.idProperty||"id",this._bindToExternalToInternalMap=new WeakMap,this._bindToInternalToExternalMap=new WeakMap,this._skippedIndexesFromExternal=[]}get length(){return this._items.length}get first(){return this._items[0]||null}get last(){return this._items[this.length-1]||null}add(t,e){let i;const n=this._idProperty;if(n in t){if(i=t[n],"string"!=typeof i)throw new hi.b("collection-add-invalid-id",this);if(this.get(i))throw new hi.b("collection-add-item-already-exists",this)}else t[n]=i=li();if(void 0===e)e=this._items.length;else if(e>this._items.length||e<0)throw new hi.b("collection-add-item-invalid-index",this);return this._items.splice(e,0,t),this._itemMap.set(i,t),this.fire("add",t,e),this}get(t){let e;if("string"==typeof t)e=this._itemMap.get(t);else{if("number"!=typeof t)throw new hi.b("collection-get-invalid-arg: Index or id must be given.",this);e=this._items[t]}return e||null}has(t){if("string"==typeof t)return this._itemMap.has(t);{const e=t[this._idProperty];return this._itemMap.has(e)}}getIndex(t){let e;return e="string"==typeof t?this._itemMap.get(t):t,this._items.indexOf(e)}remove(t){let e,i,n,o=!1;const s=this._idProperty;if("string"==typeof t?(i=t,n=this._itemMap.get(i),o=!n,n&&(e=this._items.indexOf(n))):"number"==typeof t?(e=t,n=this._items[e],o=!n,n&&(i=n[s])):(n=t,i=n[s],e=this._items.indexOf(n),o=-1==e||!this._itemMap.get(i)),o)throw new hi.b("collection-remove-404: Item not found.",this);this._items.splice(e,1),this._itemMap.delete(i);const r=this._bindToInternalToExternalMap.get(n);return this._bindToInternalToExternalMap.delete(n),this._bindToExternalToInternalMap.delete(r),this.fire("remove",n,e),n}map(t,e){return this._items.map(t,e)}find(t,e){return this._items.find(t,e)}filter(t,e){return this._items.filter(t,e)}clear(){for(this._bindToCollection&&(this.stopListening(this._bindToCollection),this._bindToCollection=null);this.length;)this.remove(0)}bindTo(t){if(this._bindToCollection)throw new hi.b("collection-bind-to-rebind: The collection cannot be bound more than once.",this);return this._bindToCollection=t,{as:t=>{this._setUpBindToBinding(e=>new t(e))},using:t=>{"function"==typeof t?this._setUpBindToBinding(e=>t(e)):this._setUpBindToBinding(e=>e[t])}}}_setUpBindToBinding(t){const e=this._bindToCollection,i=(i,n,o)=>{const s=e._bindToCollection==this,r=e._bindToInternalToExternalMap.get(n);if(s&&r)this._bindToExternalToInternalMap.set(n,r),this._bindToInternalToExternalMap.set(r,n);else{const i=t(n);if(!i)return void this._skippedIndexesFromExternal.push(o);let s=o;for(const t of this._skippedIndexesFromExternal)o>t&&s--;for(const t of e._skippedIndexesFromExternal)s>=t&&s++;this._bindToExternalToInternalMap.set(n,i),this._bindToInternalToExternalMap.set(i,n),this.add(i,s);for(let t=0;t{const n=this._bindToExternalToInternalMap.get(e);n&&this.remove(n),this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((t,e)=>(ie&&t.push(e),t),[])})}[Symbol.iterator](){return this._items[Symbol.iterator]()}}vi(yi,mi);class xi{constructor(t,e=[],i=[]){this._context=t,this._plugins=new Map,this._availablePlugins=new Map;for(const t of e)t.pluginName&&this._availablePlugins.set(t.pluginName,t);this._contextPlugins=new Map;for(const[t,e]of i)this._contextPlugins.set(t,e),this._contextPlugins.set(e,t),t.pluginName&&this._availablePlugins.set(t.pluginName,t)}*[Symbol.iterator](){for(const t of this._plugins)"function"==typeof t[0]&&(yield t)}get(t){const e=this._plugins.get(t);if(!e){const e="plugincollection-plugin-not-loaded: The requested plugin is not loaded.";let i=t;throw"function"==typeof t&&(i=t.pluginName||t.name),new hi.b(e,this._context,{plugin:i})}return e}has(t){return this._plugins.has(t)}init(t,e=[]){const i=this,n=this._context,o=new Set,s=[],r=u(t),a=u(e),c=function(t){const e=[];for(const i of t)h(i)||e.push(i);return e.length?e:null}(t);if(c){const t="plugincollection-plugin-not-found: Some plugins are not available and could not be loaded.";return console.error(Object(hi.a)(t),{plugins:c}),Promise.reject(new hi.b(t,n,{plugins:c}))}return Promise.all(r.map(l)).then(()=>d(s,"init")).then(()=>d(s,"afterInit")).then(()=>s);function l(t){if(!a.includes(t)&&!i._plugins.has(t)&&!o.has(t))return function(t){return new Promise(r=>{o.add(t),t.requires&&t.requires.forEach(i=>{const o=h(i);if(t.isContextPlugin&&!o.isContextPlugin)throw new hi.b("plugincollection-context-required: Context plugin can not require plugin which is not a context plugin",null,{plugin:o.name,requiredBy:t.name});if(e.includes(o))throw new hi.b("plugincollection-required: Cannot load a plugin because one of its dependencies is listed inthe `removePlugins` option.",n,{plugin:o.name,requiredBy:t.name});l(o)});const a=i._contextPlugins.get(t)||new t(n);i._add(t,a),s.push(a),r()})}(t).catch(e=>{throw console.error(Object(hi.a)("plugincollection-load: It was not possible to load the plugin."),{plugin:t}),e})}function d(t,e){return t.reduce((t,n)=>n[e]?i._contextPlugins.has(n)?t:t.then(n[e].bind(n)):t,Promise.resolve())}function h(t){return"function"==typeof t?t:i._availablePlugins.get(t)}function u(t){return t.map(t=>h(t)).filter(t=>!!t)}}destroy(){const t=[];for(const[,e]of this)"function"!=typeof e.destroy||this._contextPlugins.has(e)||t.push(e.destroy());return Promise.all(t)}_add(t,e){this._plugins.set(t,e);const i=t.pluginName;if(i){if(this._plugins.has(i))throw new hi.b("plugincollection-plugin-name-conflict: Two plugins with the same name were loaded.",null,{pluginName:i,plugin1:this._plugins.get(i).constructor,plugin2:t});this._plugins.set(i,e)}}}function Ai(t,e){const i=Object.keys(window.CKEDITOR_TRANSLATIONS).length;return 1===i&&(t=Object.keys(window.CKEDITOR_TRANSLATIONS)[0]),0!==i&&function(t,e){return t in window.CKEDITOR_TRANSLATIONS&&e in window.CKEDITOR_TRANSLATIONS[t]}(t,e)?window.CKEDITOR_TRANSLATIONS[t][e].replace(/ \[context: [^\]]+\]$/,""):e.replace(/ \[context: [^\]]+\]$/,"")}vi(xi,mi),window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={});const Ci=["ar","fa","he","ku","ug"];class Ti{constructor(t={}){this.uiLanguage=t.uiLanguage||"en",this.contentLanguage=t.contentLanguage||this.uiLanguage,this.uiLanguageDirection=Pi(this.uiLanguage),this.contentLanguageDirection=Pi(this.contentLanguage),this.t=(...t)=>this._t(...t)}get language(){return console.warn("locale-deprecated-language-property: The Locale#language property has been deprecated and will be removed in the near future. Please use #uiLanguage and #contentLanguage properties instead."),this.uiLanguage}_t(t,e){let i=Ai(this.uiLanguage,t);return e&&(i=i.replace(/%(\d+)/g,(t,i)=>it.destroy())).then(()=>this.plugins.destroy())}_addEditor(t,e){if(this._contextOwner)throw new hi.b("context-addEditor-private-context: Cannot add multiple editors to the context which is created by the editor.");this.editors.add(t),e&&(this._contextOwner=t)}_removeEditor(t){return this.editors.has(t)&&this.editors.remove(t),this._contextOwner===t?this.destroy():Promise.resolve()}_getEditorConfig(){const t={};for(const e of this.config.names())["plugins","removePlugins","extraPlugins"].includes(e)||(t[e]=this.config.get(e));return t}static create(t){return new Promise(e=>{const i=new this(t);e(i.initPlugins().then(()=>i))})}}function Ei(t,e){const i=Math.min(t.length,e.length);for(let n=0;nt.data.length)throw new hi.b("view-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this);if(i<0||e+i>t.data.length)throw new hi.b("view-textproxy-wrong-length: Given length value is incorrect.",this);this.data=t.data.substring(e,e+i),this.offsetInText=e}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}is(t){return"textProxy"==t||"view:textProxy"==t}getAncestors(t={includeSelf:!1,parentFirst:!1}){const e=[];let i=t.includeSelf?this.textNode:this.parent;for(;null!==i;)e[t.parentFirst?"push":"unshift"](i),i=i.parent;return e}}function Ri(t){return!(!t||!t[Symbol.iterator])}function Li(t){return Ri(t)?new Map(t):function(t){const e=new Map;for(const i in t)e.set(i,t[i]);return e}(t)}class Di{constructor(...t){this._patterns=[],this.add(...t)}add(...t){for(let e of t)("string"==typeof e||e instanceof RegExp)&&(e={name:e}),e.classes&&("string"==typeof e.classes||e.classes instanceof RegExp)&&(e.classes=[e.classes]),this._patterns.push(e)}match(...t){for(const e of t)for(const t of this._patterns){const i=zi(e,t);if(i)return{element:e,pattern:t,match:i}}return null}matchAll(...t){const e=[];for(const i of t)for(const t of this._patterns){const n=zi(i,t);n&&e.push({element:i,pattern:t,match:n})}return e.length>0?e:null}getElementName(){if(1!==this._patterns.length)return null;const t=this._patterns[0],e=t.name;return"function"==typeof t||!e||e instanceof RegExp?null:e}}function zi(t,e){if("function"==typeof e)return e(t);const i={};return e.name&&(i.name=function(t,e){if(t instanceof RegExp)return t.test(e);return t===e}(e.name,t.name),!i.name)||e.attributes&&(i.attributes=function(t,e){const i=[];for(const n in t){const o=t[n];if(!e.hasAttribute(n))return null;{const t=e.getAttribute(n);if(!0===o)i.push(n);else if(o instanceof RegExp){if(!o.test(t))return null;i.push(n)}else{if(t!==o)return null;i.push(n)}}}return i}(e.attributes,t),!i.attributes)?null:!(e.classes&&(i.classes=function(t,e){const i=[];for(const n of t)if(n instanceof RegExp){const t=e.getClassNames();for(const e of t)n.test(e)&&i.push(e);if(0===i.length)return null}else{if(!e.hasClass(n))return null;i.push(n)}return i}(e.classes,t),!i.classes))&&(!(e.styles&&(i.styles=function(t,e){const i=[];for(const n in t){const o=t[n];if(!e.hasStyle(n))return null;{const t=e.getStyle(n);if(o instanceof RegExp){if(!o.test(t))return null;i.push(n)}else{if(t!==o)return null;i.push(n)}}}return i}(e.styles,t),!i.styles))&&i)}var ji=function(t){return"symbol"==typeof t||p(t)&&"[object Symbol]"==f(t)},Vi=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Bi=/^\w*$/;var Fi=function(t,e){if(Lt(t))return!1;var i=typeof t;return!("number"!=i&&"symbol"!=i&&"boolean"!=i&&null!=t&&!ji(t))||(Bi.test(t)||!Vi.test(t)||null!=e&&t in Object(e))};function Hi(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var i=function(){var n=arguments,o=e?e.apply(this,n):n[0],s=i.cache;if(s.has(o))return s.get(o);var r=t.apply(this,n);return i.cache=s.set(o,r)||s,r};return i.cache=new(Hi.Cache||kt),i}Hi.Cache=kt;var Ui=Hi;var Wi=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,qi=/\\(\\)?/g,$i=function(t){var e=Ui(t,(function(t){return 500===i.size&&i.clear(),t})),i=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Wi,(function(t,i,n,o){e.push(n?o.replace(qi,"$1"):i||t)})),e}));var Yi=function(t,e){for(var i=-1,n=null==t?0:t.length,o=Array(n);++io?0:o+e),(i=i>o?o:i)<0&&(i+=o),o=e>i?0:i-e>>>0,e>>>=0;for(var s=Array(o);++n0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(_n);var xn=function(t,e){return yn(wn(t,e,gn),t+"")};var An=function(t,e,i){if(!z(i))return!1;var n=typeof e;return!!("number"==n?Xt(i)&&jt(e,i.length):"string"==n&&e in i)&&A(i[e],t)};var Cn=function(t){return xn((function(e,i){var n=-1,o=i.length,s=o>1?i[o-1]:void 0,r=o>2?i[2]:void 0;for(s=t.length>3&&"function"==typeof s?(o--,s):void 0,r&&An(i[0],i[1],r)&&(s=o<3?void 0:s,o=1),e=Object(e);++nEn._styleProcessor,enumerable:!1})}get isEmpty(){const t=Object.entries(this._styles);return!Array.from(t).length}get size(){return this.isEmpty?0:this.getStyleNames().length}setTo(t){this.clear();const e=Array.from(function(t){let e=null,i=0,n=0,o=null;const s=new Map;if(""===t)return s;";"!=t.charAt(t.length-1)&&(t+=";");for(let r=0;re===t);return Array.isArray(e)}set(t,e){if(z(t))for(const[e,i]of Object.entries(t))this._styleProcessor.toNormalizedForm(e,i,this._styles);else this._styleProcessor.toNormalizedForm(t,e,this._styles)}remove(t){const e=In(t);rn(this._styles,e),delete this._styles[t],this._cleanEmptyObjectsOnPath(e)}getNormalized(t){return this._styleProcessor.getNormalized(t,this._styles)}toString(){return this.isEmpty?"":this._getStylesEntries().map(t=>t.join(":")).sort().join(";")+";"}getAsString(t){if(this.isEmpty)return;if(this._styles[t]&&!z(this._styles[t]))return this._styles[t];const e=this._styleProcessor.getReducedForm(t,this._styles).find(([e])=>e===t);return Array.isArray(e)?e[1]:void 0}getStyleNames(){if(this.isEmpty)return[];return this._getStylesEntries().map(([t])=>t)}clear(){this._styles={}}static getRelatedStyles(t){return this._styleProcessor.getRelatedStyles(t)}_getStylesEntries(){const t=[],e=Object.keys(this._styles);for(const i of e)t.push(...this._styleProcessor.getReducedForm(i,this._styles));return t}_cleanEmptyObjectsOnPath(t){const e=t.split(".");if(!(e.length>1))return;const i=e.splice(0,e.length-1).join("."),n=an(this._styles,i);n&&!Array.from(Object.keys(n)).length&&this.remove(i)}static get _styleProcessor(){return this._processor||(this._processor=new Mn),this._processor}static _setProcessor(t){this._processor=t}}class Mn{constructor(){this._normalizers=new Map,this._extractors=new Map,this._reducers=new Map,this._consumables=new Map}toNormalizedForm(t,e,i){if(z(e))Nn(i,In(t),e);else if(this._normalizers.has(t)){const n=this._normalizers.get(t),{path:o,value:s}=n(e);Nn(i,o,s)}else Nn(i,t,e)}getNormalized(t,e){if(!t)return Tn({},e);if(void 0!==e[t])return e[t];if(this._extractors.has(t)){const i=this._extractors.get(t);if("string"==typeof i)return an(e,i);const n=i(t,e);if(n)return n}return an(e,In(t))}getReducedForm(t,e){const i=this.getNormalized(t,e);if(void 0===i)return[];if(this._reducers.has(t)){return this._reducers.get(t)(i)}return[[t,i]]}getRelatedStyles(t){return this._consumables.get(t)||[]}setNormalizer(t,e){this._normalizers.set(t,e)}setExtractor(t,e){this._extractors.set(t,e)}setReducer(t,e){this._reducers.set(t,e)}setStyleRelation(t,e){this._mapStyleNames(t,e);for(const i of e)this._mapStyleNames(i,[t])}_mapStyleNames(t,e){this._consumables.has(t)||this._consumables.set(t,[]),this._consumables.get(t).push(...e)}}function In(t){return t.replace("-",".")}function Nn(t,e,i){let n=i;z(i)&&(n=Tn({},an(t,e),i)),Sn(t,e,n)}class On extends Ii{constructor(t,e,i){if(super(),this.name=t,this._attrs=function(t){t=Li(t);for(const[e,i]of t)null===i?t.delete(e):"string"!=typeof i&&t.set(e,String(i));return t}(e),this._children=[],i&&this._insertChild(0,i),this._classes=new Set,this._attrs.has("class")){const t=this._attrs.get("class");Rn(this._classes,t),this._attrs.delete("class")}this._styles=new En,this._attrs.has("style")&&(this._styles.setTo(this._attrs.get("style")),this._attrs.delete("style")),this._customProperties=new Map}get childCount(){return this._children.length}get isEmpty(){return 0===this._children.length}is(t,e=null){const i=t.replace(/^view:/,"");return e?"element"==i&&e==this.name:"element"==i||i==this.name||super.is(t)}getChild(t){return this._children[t]}getChildIndex(t){return this._children.indexOf(t)}getChildren(){return this._children[Symbol.iterator]()}*getAttributeKeys(){this._classes.size>0&&(yield"class"),this._styles.isEmpty||(yield"style"),yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries(),this._classes.size>0&&(yield["class",this.getAttribute("class")]),this._styles.isEmpty||(yield["style",this.getAttribute("style")])}getAttribute(t){if("class"==t)return this._classes.size>0?[...this._classes].join(" "):void 0;if("style"==t){const t=this._styles.toString();return""==t?void 0:t}return this._attrs.get(t)}hasAttribute(t){return"class"==t?this._classes.size>0:"style"==t?!this._styles.isEmpty:this._attrs.has(t)}isSimilar(t){if(!(t instanceof On))return!1;if(this===t)return!0;if(this.name!=t.name)return!1;if(this._attrs.size!==t._attrs.size||this._classes.size!==t._classes.size||this._styles.size!==t._styles.size)return!1;for(const[e,i]of this._attrs)if(!t._attrs.has(e)||t._attrs.get(e)!==i)return!1;for(const e of this._classes)if(!t._classes.has(e))return!1;for(const e of this._styles.getStyleNames())if(!t._styles.has(e)||t._styles.getAsString(e)!==this._styles.getAsString(e))return!1;return!0}hasClass(...t){for(const e of t)if(!this._classes.has(e))return!1;return!0}getClassNames(){return this._classes.keys()}getStyle(t){return this._styles.getAsString(t)}getNormalizedStyle(t){return this._styles.getNormalized(t)}getStyleNames(){return this._styles.getStyleNames()}hasStyle(...t){for(const e of t)if(!this._styles.has(e))return!1;return!0}findAncestor(...t){const e=new Di(...t);let i=this.parent;for(;i;){if(e.match(i))return i;i=i.parent}return null}getCustomProperty(t){return this._customProperties.get(t)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const t=Array.from(this._classes).sort().join(","),e=this._styles.toString(),i=Array.from(this._attrs).map(t=>`${t[0]}="${t[1]}"`).sort().join(" ");return this.name+(""==t?"":` class="${t}"`)+(e?` style="${e}"`:"")+(""==i?"":` ${i}`)}_clone(t=!1){const e=[];if(t)for(const i of this.getChildren())e.push(i._clone(t));const i=new this.constructor(this.name,this._attrs,e);return i._classes=new Set(this._classes),i._styles.set(this._styles.getNormalized()),i._customProperties=new Map(this._customProperties),i.getFillerOffset=this.getFillerOffset,i}_appendChild(t){return this._insertChild(this.childCount,t)}_insertChild(t,e){this._fireChange("children",this);let i=0;const n=function(t){if("string"==typeof t)return[new Ni(t)];Ri(t)||(t=[t]);return Array.from(t).map(t=>"string"==typeof t?new Ni(t):t instanceof Oi?new Ni(t.data):t)}(e);for(const e of n)null!==e.parent&&e._remove(),e.parent=this,this._children.splice(t,0,e),t++,i++;return i}_removeChildren(t,e=1){this._fireChange("children",this);for(let i=t;i0&&(this._classes.clear(),!0):"style"==t?!this._styles.isEmpty&&(this._styles.clear(),!0):this._attrs.delete(t)}_addClass(t){this._fireChange("attributes",this),(t=Array.isArray(t)?t:[t]).forEach(t=>this._classes.add(t))}_removeClass(t){this._fireChange("attributes",this),(t=Array.isArray(t)?t:[t]).forEach(t=>this._classes.delete(t))}_setStyle(t,e){this._fireChange("attributes",this),this._styles.set(t,e)}_removeStyle(t){this._fireChange("attributes",this),(t=Array.isArray(t)?t:[t]).forEach(t=>this._styles.remove(t))}_setCustomProperty(t,e){this._customProperties.set(t,e)}_removeCustomProperty(t){return this._customProperties.delete(t)}}function Rn(t,e){const i=e.split(/\s+/);t.clear(),i.forEach(e=>t.add(e))}class Ln extends On{constructor(t,e,i){super(t,e,i),this.getFillerOffset=Dn}is(t,e=null){const i=t&&t.replace(/^view:/,"");return e?"containerElement"==i&&e==this.name||super.is(t,e):"containerElement"==i||super.is(t)}}function Dn(){const t=[...this.getChildren()],e=t[this.childCount-1];if(e&&e.is("element","br"))return this.childCount;for(const e of t)if(!e.is("uiElement"))return null;return this.childCount}var zn=Cn((function(t,e){St(e,se(e),t)}));const jn=Symbol("observableProperties"),Vn=Symbol("boundObservables"),Bn=Symbol("boundProperties"),Fn={set(t,e){if(z(t))return void Object.keys(t).forEach(e=>{this.set(e,t[e])},this);Un(this);const i=this[jn];if(t in this&&!i.has(t))throw new hi.b("observable-set-cannot-override: Cannot override an existing property.",this);Object.defineProperty(this,t,{enumerable:!0,configurable:!0,get:()=>i.get(t),set(e){const n=i.get(t);let o=this.fire("set:"+t,t,e,n);void 0===o&&(o=e),n===o&&i.has(t)||(i.set(t,o),this.fire("change:"+t,t,o,n))}}),this[t]=e},bind(...t){if(!t.length||!$n(t))throw new hi.b("observable-bind-wrong-properties: All properties must be strings.",this);if(new Set(t).size!==t.length)throw new hi.b("observable-bind-duplicate-properties: Properties must be unique.",this);Un(this);const e=this[Bn];t.forEach(t=>{if(e.has(t))throw new hi.b("observable-bind-rebind: Cannot bind the same property more than once.",this)});const i=new Map;return t.forEach(t=>{const n={property:t,to:[]};e.set(t,n),i.set(t,n)}),{to:Wn,toMany:qn,_observable:this,_bindProperties:t,_to:[],_bindings:i}},unbind(...t){if(!(jn in this))return;const e=this[Bn],i=this[Vn];if(t.length){if(!$n(t))throw new hi.b("observable-unbind-wrong-properties: Properties must be strings.",this);t.forEach(t=>{const n=e.get(t);if(!n)return;let o,s,r,a;n.to.forEach(t=>{o=t[0],s=t[1],r=i.get(o),a=r[s],a.delete(n),a.size||delete r[s],Object.keys(r).length||(i.delete(o),this.stopListening(o,"change"))}),e.delete(t)})}else i.forEach((t,e)=>{this.stopListening(e,"change")}),i.clear(),e.clear()},decorate(t){const e=this[t];if(!e)throw new hi.b("observablemixin-cannot-decorate-undefined: Cannot decorate an undefined method.",this,{object:this,methodName:t});this.on(t,(t,i)=>{t.return=e.apply(this,i)}),this[t]=function(...e){return this.fire(t,e)}}};zn(Fn,mi);var Hn=Fn;function Un(t){jn in t||(Object.defineProperty(t,jn,{value:new Map}),Object.defineProperty(t,Vn,{value:new Map}),Object.defineProperty(t,Bn,{value:new Map}))}function Wn(...t){const e=function(...t){if(!t.length)throw new hi.b("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null);const e={to:[]};let i;"function"==typeof t[t.length-1]&&(e.callback=t.pop());return t.forEach(t=>{if("string"==typeof t)i.properties.push(t);else{if("object"!=typeof t)throw new hi.b("observable-bind-to-parse-error: Invalid argument syntax in `to()`.",null);i={observable:t,properties:[]},e.to.push(i)}}),e}(...t),i=Array.from(this._bindings.keys()),n=i.length;if(!e.callback&&e.to.length>1)throw new hi.b("observable-bind-to-no-callback: Binding multiple observables only possible with callback.",this);if(n>1&&e.callback)throw new hi.b("observable-bind-to-extra-callback: Cannot bind multiple properties and use a callback in one binding.",this);var o;e.to.forEach(t=>{if(t.properties.length&&t.properties.length!==n)throw new hi.b("observable-bind-to-properties-length: The number of properties must match.",this);t.properties.length||(t.properties=this._bindProperties)}),this._to=e.to,e.callback&&(this._bindings.get(i[0]).callback=e.callback),o=this._observable,this._to.forEach(t=>{const e=o[Vn];let i;e.get(t.observable)||o.listenTo(t.observable,"change",(n,s)=>{i=e.get(t.observable)[s],i&&i.forEach(t=>{Yn(o,t.property)})})}),function(t){let e;t._bindings.forEach((i,n)=>{t._to.forEach(o=>{e=o.properties[i.callback?0:t._bindProperties.indexOf(n)],i.to.push([o.observable,e]),function(t,e,i,n){const o=t[Vn],s=o.get(i),r=s||{};r[n]||(r[n]=new Set);r[n].add(e),s||o.set(i,r)}(t._observable,i,o.observable,e)})})}(this),this._bindProperties.forEach(t=>{Yn(this._observable,t)})}function qn(t,e,i){if(this._bindings.size>1)throw new hi.b("observable-bind-to-many-not-one-binding: Cannot bind multiple properties with toMany().",this);this.to(...function(t,e){const i=t.map(t=>[t,e]);return Array.prototype.concat.apply([],i)}(t,e),i)}function $n(t){return t.every(t=>"string"==typeof t)}function Yn(t,e){const i=t[Bn].get(e);let n;i.callback?n=i.callback.apply(t,i.to.map(t=>t[0][t[1]])):(n=i.to[0],n=n[0][n[1]]),t.hasOwnProperty(e)?t[e]=n:t.set(e,n)}const Gn=Symbol("document");class Qn extends Ln{constructor(t,e,i){super(t,e,i),this.set("isReadOnly",!1),this.set("isFocused",!1)}is(t,e=null){const i=t&&t.replace(/^view:/,"");return e?"editableElement"==i&&e==this.name||super.is(t,e):"editableElement"==i||super.is(t)}destroy(){this.stopListening()}get document(){return this.getCustomProperty(Gn)}set _document(t){if(this.getCustomProperty(Gn))throw new hi.b("view-editableelement-document-already-set: View document is already set.",this);this._setCustomProperty(Gn,t),this.bind("isReadOnly").to(t),this.bind("isFocused").to(t,"isFocused",e=>e&&t.selection.editableElement==this),this.listenTo(t.selection,"change",()=>{this.isFocused=t.isFocused&&t.selection.editableElement==this})}}vi(Qn,Hn);const Kn=Symbol("rootName");class Jn extends Qn{constructor(t){super(t),this.rootName="main"}is(t,e=null){const i=t.replace(/^view:/,"");return e?"rootElement"==i&&e==this.name||super.is(t,e):"rootElement"==i||super.is(t)}get rootName(){return this.getCustomProperty(Kn)}set rootName(t){this._setCustomProperty(Kn,t)}set _name(t){this.name=t}}class Zn{constructor(t={}){if(!t.boundaries&&!t.startPosition)throw new hi.b("view-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null);if(t.direction&&"forward"!=t.direction&&"backward"!=t.direction)throw new hi.b("view-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",t.startPosition,{direction:t.direction});this.boundaries=t.boundaries||null,t.startPosition?this.position=Xn._createAt(t.startPosition):this.position=Xn._createAt(t.boundaries["backward"==t.direction?"end":"start"]),this.direction=t.direction||"forward",this.singleCharacters=!!t.singleCharacters,this.shallow=!!t.shallow,this.ignoreElementEnd=!!t.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}skip(t){let e,i,n;do{n=this.position,({done:e,value:i}=this.next())}while(!e&&t(i));e||(this.position=n)}next(){return"forward"==this.direction?this._next():this._previous()}_next(){let t=this.position.clone();const e=this.position,i=t.parent;if(null===i.parent&&t.offset===i.childCount)return{done:!0};if(i===this._boundaryEndParent&&t.offset==this.boundaries.end.offset)return{done:!0};let n;if(i instanceof Ni){if(t.isAtEnd)return this.position=Xn._createAfter(i),this._next();n=i.data[t.offset]}else n=i.getChild(t.offset);if(n instanceof On)return this.shallow?t.offset++:t=new Xn(n,0),this.position=t,this._formatReturnValue("elementStart",n,e,t,1);if(n instanceof Ni){if(this.singleCharacters)return t=new Xn(n,0),this.position=t,this._next();{let i,o=n.data.length;return n==this._boundaryEndParent?(o=this.boundaries.end.offset,i=new Oi(n,0,o),t=Xn._createAfter(i)):(i=new Oi(n,0,n.data.length),t.offset++),this.position=t,this._formatReturnValue("text",i,e,t,o)}}if("string"==typeof n){let n;if(this.singleCharacters)n=1;else{n=(i===this._boundaryEndParent?this.boundaries.end.offset:i.data.length)-t.offset}const o=new Oi(i,t.offset,n);return t.offset+=n,this.position=t,this._formatReturnValue("text",o,e,t,n)}return t=Xn._createAfter(i),this.position=t,this.ignoreElementEnd?this._next():this._formatReturnValue("elementEnd",i,e,t)}_previous(){let t=this.position.clone();const e=this.position,i=t.parent;if(null===i.parent&&0===t.offset)return{done:!0};if(i==this._boundaryStartParent&&t.offset==this.boundaries.start.offset)return{done:!0};let n;if(i instanceof Ni){if(t.isAtStart)return this.position=Xn._createBefore(i),this._previous();n=i.data[t.offset-1]}else n=i.getChild(t.offset-1);if(n instanceof On)return this.shallow?(t.offset--,this.position=t,this._formatReturnValue("elementStart",n,e,t,1)):(t=new Xn(n,n.childCount),this.position=t,this.ignoreElementEnd?this._previous():this._formatReturnValue("elementEnd",n,e,t));if(n instanceof Ni){if(this.singleCharacters)return t=new Xn(n,n.data.length),this.position=t,this._previous();{let i,o=n.data.length;if(n==this._boundaryStartParent){const e=this.boundaries.start.offset;i=new Oi(n,e,n.data.length-e),o=i.data.length,t=Xn._createBefore(i)}else i=new Oi(n,0,n.data.length),t.offset--;return this.position=t,this._formatReturnValue("text",i,e,t,o)}}if("string"==typeof n){let n;if(this.singleCharacters)n=1;else{const e=i===this._boundaryStartParent?this.boundaries.start.offset:0;n=t.offset-e}t.offset-=n;const o=new Oi(i,t.offset,n);return this.position=t,this._formatReturnValue("text",o,e,t,n)}return t=Xn._createBefore(i),this.position=t,this._formatReturnValue("elementStart",i,e,t,1)}_formatReturnValue(t,e,i,n,o){return e instanceof Oi&&(e.offsetInText+e.data.length==e.textNode.data.length&&("forward"!=this.direction||this.boundaries&&this.boundaries.end.isEqual(this.position)?i=Xn._createAfter(e.textNode):(n=Xn._createAfter(e.textNode),this.position=n)),0===e.offsetInText&&("backward"!=this.direction||this.boundaries&&this.boundaries.start.isEqual(this.position)?i=Xn._createBefore(e.textNode):(n=Xn._createBefore(e.textNode),this.position=n))),{done:!1,value:{type:t,item:e,previousPosition:i,nextPosition:n,length:o}}}}class Xn{constructor(t,e){this.parent=t,this.offset=e}get nodeAfter(){return this.parent.is("text")?null:this.parent.getChild(this.offset)||null}get nodeBefore(){return this.parent.is("text")?null:this.parent.getChild(this.offset-1)||null}get isAtStart(){return 0===this.offset}get isAtEnd(){const t=this.parent.is("text")?this.parent.data.length:this.parent.childCount;return this.offset===t}get root(){return this.parent.root}get editableElement(){let t=this.parent;for(;!(t instanceof Qn);){if(!t.parent)return null;t=t.parent}return t}getShiftedBy(t){const e=Xn._createAt(this),i=e.offset+t;return e.offset=i<0?0:i,e}getLastMatchingPosition(t,e={}){e.startPosition=this;const i=new Zn(e);return i.skip(t),i.position}getAncestors(){return this.parent.is("documentFragment")?[this.parent]:this.parent.getAncestors({includeSelf:!0})}getCommonAncestor(t){const e=this.getAncestors(),i=t.getAncestors();let n=0;for(;e[n]==i[n]&&e[n];)n++;return 0===n?null:e[n-1]}is(t){return"position"==t||"view:position"==t}isEqual(t){return this.parent==t.parent&&this.offset==t.offset}isBefore(t){return"before"==this.compareWith(t)}isAfter(t){return"after"==this.compareWith(t)}compareWith(t){if(this.root!==t.root)return"different";if(this.isEqual(t))return"same";const e=this.parent.is("node")?this.parent.getPath():[],i=t.parent.is("node")?t.parent.getPath():[];e.push(this.offset),i.push(t.offset);const n=Ei(e,i);switch(n){case"prefix":return"before";case"extension":return"after";default:return e[n]0?new this(i,n):new this(n,i)}static _createIn(t){return this._createFromParentsAndOffsets(t,0,t,t.childCount)}static _createOn(t){const e=t.is("textProxy")?t.offsetSize:1;return this._createFromPositionAndShift(Xn._createBefore(t),e)}}function eo(t){return!(!t.item.is("attributeElement")&&!t.item.is("uiElement"))}function io(t){let e=0;for(const i of t)e++;return e}class no{constructor(t=null,e,i){this._ranges=[],this._lastRangeBackward=!1,this._isFake=!1,this._fakeSelectionLabel="",this.setTo(t,e,i)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length)return null;const t=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?t.end:t.start).clone()}get focus(){if(!this._ranges.length)return null;const t=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?t.start:t.end).clone()}get isCollapsed(){return 1===this.rangeCount&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){return this.anchor?this.anchor.editableElement:null}*getRanges(){for(const t of this._ranges)yield t.clone()}getFirstRange(){let t=null;for(const e of this._ranges)t&&!e.start.isBefore(t.start)||(t=e);return t?t.clone():null}getLastRange(){let t=null;for(const e of this._ranges)t&&!e.end.isAfter(t.end)||(t=e);return t?t.clone():null}getFirstPosition(){const t=this.getFirstRange();return t?t.start.clone():null}getLastPosition(){const t=this.getLastRange();return t?t.end.clone():null}isEqual(t){if(this.isFake!=t.isFake)return!1;if(this.isFake&&this.fakeSelectionLabel!=t.fakeSelectionLabel)return!1;if(this.rangeCount!=t.rangeCount)return!1;if(0===this.rangeCount)return!0;if(!this.anchor.isEqual(t.anchor)||!this.focus.isEqual(t.focus))return!1;for(const e of this._ranges){let i=!1;for(const n of t._ranges)if(e.isEqual(n)){i=!0;break}if(!i)return!1}return!0}isSimilar(t){if(this.isBackward!=t.isBackward)return!1;const e=io(this.getRanges());if(e!=io(t.getRanges()))return!1;if(0==e)return!0;for(let e of this.getRanges()){e=e.getTrimmed();let i=!1;for(let n of t.getRanges())if(n=n.getTrimmed(),e.start.isEqual(n.start)&&e.end.isEqual(n.end)){i=!0;break}if(!i)return!1}return!0}getSelectedElement(){if(1!==this.rangeCount)return null;const t=this.getFirstRange();let e=t.start.nodeAfter,i=t.end.nodeBefore;return t.start.parent.is("text")&&t.start.isAtEnd&&t.start.parent.nextSibling&&(e=t.start.parent.nextSibling),t.end.parent.is("text")&&t.end.isAtStart&&t.end.parent.previousSibling&&(i=t.end.parent.previousSibling),e instanceof On&&e==i?e:null}setTo(t,e,i){if(null===t)this._setRanges([]),this._setFakeOptions(e);else if(t instanceof no||t instanceof oo)this._setRanges(t.getRanges(),t.isBackward),this._setFakeOptions({fake:t.isFake,label:t.fakeSelectionLabel});else if(t instanceof to)this._setRanges([t],e&&e.backward),this._setFakeOptions(e);else if(t instanceof Xn)this._setRanges([new to(t)]),this._setFakeOptions(e);else if(t instanceof Ii){const n=!!i&&!!i.backward;let o;if(void 0===e)throw new hi.b("view-selection-setTo-required-second-parameter: selection.setTo requires the second parameter when the first parameter is a node.",this);o="in"==e?to._createIn(t):"on"==e?to._createOn(t):new to(Xn._createAt(t,e)),this._setRanges([o],n),this._setFakeOptions(i)}else{if(!Ri(t))throw new hi.b("view-selection-setTo-not-selectable: Cannot set selection to given place.",this);this._setRanges(t,e&&e.backward),this._setFakeOptions(e)}this.fire("change")}setFocus(t,e){if(null===this.anchor)throw new hi.b("view-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",this);const i=Xn._createAt(t,e);if("same"==i.compareWith(this.focus))return;const n=this.anchor;this._ranges.pop(),"before"==i.compareWith(n)?this._addRange(new to(i,n),!0):this._addRange(new to(n,i)),this.fire("change")}is(t){return"selection"==t||"view:selection"==t}_setRanges(t,e=!1){t=Array.from(t),this._ranges=[];for(const e of t)this._addRange(e);this._lastRangeBackward=!!e}_setFakeOptions(t={}){this._isFake=!!t.fake,this._fakeSelectionLabel=t.fake&&t.label||""}_addRange(t,e=!1){if(!(t instanceof to))throw new hi.b("view-selection-add-range-not-range: Selection range set to an object that is not an instance of view.Range",this);this._pushRange(t),this._lastRangeBackward=!!e}_pushRange(t){for(const e of this._ranges)if(t.isIntersecting(e))throw new hi.b("view-selection-range-intersects: Trying to add a range that intersects with another range from selection.",this,{addedRange:t,intersectingRange:e});this._ranges.push(new to(t.start,t.end))}}vi(no,mi);class oo{constructor(t=null,e,i){this._selection=new no,this._selection.delegate("change").to(this),this._selection.setTo(t,e,i)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(t){return this._selection.isEqual(t)}isSimilar(t){return this._selection.isSimilar(t)}is(t){return"selection"==t||"documentSelection"==t||"view:selection"==t||"view:documentSelection"==t}_setTo(t,e,i){this._selection.setTo(t,e,i)}_setFocus(t,e){this._selection.setFocus(t,e)}}vi(oo,mi);class so{constructor(){this.selection=new oo,this.roots=new yi({idProperty:"rootName"}),this.set("isReadOnly",!1),this.set("isFocused",!1),this.set("isComposing",!1),this._postFixers=new Set}getRoot(t="main"){return this.roots.get(t)}registerPostFixer(t){this._postFixers.add(t)}destroy(){this.roots.map(t=>t.destroy()),this.stopListening()}addStyleProcessorRules(t){t(En._styleProcessor)}_callPostFixers(t){let e=!1;do{for(const i of this._postFixers)if(e=i(t),e)break}while(e)}}vi(so,Hn);class ro extends On{constructor(t,e,i){super(t,e,i),this.getFillerOffset=ao,this._priority=10,this._id=null,this._clonesGroup=null}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(null===this.id)throw new hi.b("attribute-element-get-elements-with-same-id-no-id: Cannot get elements with the same id for an attribute element without id.",this);return new Set(this._clonesGroup)}is(t,e=null){const i=t&&t.replace(/^view:/,"");return e?"attributeElement"==i&&e==this.name||super.is(t,e):"attributeElement"==i||super.is(t)}isSimilar(t){return null!==this.id||null!==t.id?this.id===t.id:super.isSimilar(t)&&this.priority==t.priority}_clone(t){const e=super._clone(t);return e._priority=this._priority,e._id=this._id,e}}function ao(){if(co(this))return null;let t=this.parent;for(;t&&t.is("attributeElement");){if(co(t)>1)return null;t=t.parent}return!t||co(t)>1?null:this.childCount}function co(t){return Array.from(t.getChildren()).filter(t=>!t.is("uiElement")).length}ro.DEFAULT_PRIORITY=10;class lo extends On{constructor(t,e,i){super(t,e,i),this.getFillerOffset=ho}is(t,e=null){const i=t.replace(/^view:/,"");return e?"emptyElement"==i&&e==this.name||super.is(t,e):"emptyElement"==i||super.is(t)}_insertChild(t,e){if(e&&(e instanceof Ii||Array.from(e).length>0))throw new hi.b("view-emptyelement-cannot-add: Cannot add child nodes to EmptyElement instance.",[this,e])}}function ho(){return null}const uo=navigator.userAgent.toLowerCase();var fo={isMac:function(t){return t.indexOf("macintosh")>-1}(uo),isEdge:function(t){return!!t.match(/edge\/(\d+.?\d*)/)}(uo),isGecko:function(t){return!!t.match(/gecko\/\d+/)}(uo),isSafari:function(t){return t.indexOf(" applewebkit/")>-1&&-1===t.indexOf("chrome")}(uo),isAndroid:function(t){return t.indexOf("android")>-1}(uo),features:{isRegExpUnicodePropertySupported:function(){let t=!1;try{t=0==="ć".search(new RegExp("[\\p{L}]","u"))}catch(t){}return t}()}};const mo={"⌘":"ctrl","⇧":"shift","⌥":"alt"},go={ctrl:"⌘",shift:"⇧",alt:"⌥"},po=function(){const t={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,cmd:1114112,shift:2228224,alt:4456448};for(let e=65;e<=90;e++){const i=String.fromCharCode(e);t[i.toLowerCase()]=e}for(let e=48;e<=57;e++)t[e-48]=e;for(let e=112;e<=123;e++)t["f"+(e-111)]=e;return t}();function bo(t){let e;if("string"==typeof t){if(e=po[t.toLowerCase()],!e)throw new hi.b("keyboard-unknown-key: Unknown key name.",null,{key:t})}else e=t.keyCode+(t.altKey?po.alt:0)+(t.ctrlKey?po.ctrl:0)+(t.shiftKey?po.shift:0);return e}function wo(t){return"string"==typeof t&&(t=_o(t)),t.map(t=>"string"==typeof t?bo(t):t).reduce((t,e)=>e+t,0)}function ko(t){return fo.isMac?_o(t).map(t=>go[t.toLowerCase()]||t).reduce((t,e)=>t.slice(-1)in mo?t+e:t+"+"+e):t}function _o(t){return t.split(/\s*\+\s*/)}class vo extends On{constructor(t,e,i){super(t,e,i),this.getFillerOffset=xo}is(t,e=null){const i=t.replace(/^view:/,"");return e?"uiElement"==i&&e==this.name||super.is(t,e):"uiElement"==i||super.is(t)}_insertChild(t,e){if(e&&(e instanceof Ii||Array.from(e).length>0))throw new hi.b("view-uielement-cannot-add: Cannot add child nodes to UIElement instance.",this)}render(t){return this.toDomElement(t)}toDomElement(t){const e=t.createElement(this.name);for(const t of this.getAttributeKeys())e.setAttribute(t,this.getAttribute(t));return e}}function yo(t){t.document.on("keydown",(e,i)=>function(t,e,i){if(e.keyCode==po.arrowright){const t=e.domTarget.ownerDocument.defaultView.getSelection(),n=1==t.rangeCount&&t.getRangeAt(0).collapsed;if(n||e.shiftKey){const e=t.focusNode,o=t.focusOffset,s=i.domPositionToView(e,o);if(null===s)return;let r=!1;const a=s.getLastMatchingPosition(t=>(t.item.is("uiElement")&&(r=!0),!(!t.item.is("uiElement")&&!t.item.is("attributeElement"))));if(r){const e=i.viewPositionToDom(a);n?t.collapse(e.parent,e.offset):t.extend(e.parent,e.offset)}}}}(0,i,t.domConverter))}function xo(){return null}class Ao{constructor(t){this._children=[],t&&this._insertChild(0,t)}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return 0===this.childCount}get root(){return this}get parent(){return null}is(t){return"documentFragment"==t||"view:documentFragment"==t}_appendChild(t){return this._insertChild(this.childCount,t)}getChild(t){return this._children[t]}getChildIndex(t){return this._children.indexOf(t)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(t,e){this._fireChange("children",this);let i=0;const n=function(t){if("string"==typeof t)return[new Ni(t)];Ri(t)||(t=[t]);return Array.from(t).map(t=>"string"==typeof t?new Ni(t):t instanceof Oi?new Ni(t.data):t)}(e);for(const e of n)null!==e.parent&&e._remove(),e.parent=this,this._children.splice(t,0,e),t++,i++;return i}_removeChildren(t,e=1){this._fireChange("children",this);for(let i=t;in instanceof t))throw new hi.b("view-writer-insert-invalid-node",i);n.is("text")||t(n.getChildren(),i)}})(e=Ri(e)?[...e]:[e],this.document);const i=To(t);if(!i)throw new hi.b("view-writer-invalid-position-container",this.document);const n=this._breakAttributes(t,!0),o=i._insertChild(n.offset,e);for(const t of e)this._addToClonedElementsGroup(t);const s=n.getShiftedBy(o),r=this.mergeAttributes(n);if(0===o)return new to(r,r);{r.isEqual(n)||s.offset--;const t=this.mergeAttributes(s);return new to(r,t)}}remove(t){const e=t instanceof to?t:to._createOn(t);if(Oo(e,this.document),e.isCollapsed)return new Ao;const{start:i,end:n}=this._breakAttributesRange(e,!0),o=i.parent,s=n.offset-i.offset,r=o._removeChildren(i.offset,s);for(const t of r)this._removeFromClonedElementsGroup(t);const a=this.mergeAttributes(i);return e.start=a,e.end=a.clone(),new Ao(r)}clear(t,e){Oo(t,this.document);const i=t.getWalker({direction:"backward",ignoreElementEnd:!0});for(const n of i){const i=n.item;let o;if(i.is("element")&&e.isSimilar(i))o=to._createOn(i);else if(!n.nextPosition.isAfter(t.start)&&i.is("textProxy")){const t=i.getAncestors().find(t=>t.is("element")&&e.isSimilar(t));t&&(o=to._createIn(t))}o&&(o.end.isAfter(t.end)&&(o.end=t.end),o.start.isBefore(t.start)&&(o.start=t.start),this.remove(o))}}move(t,e){let i;if(e.isAfter(t.end)){const n=(e=this._breakAttributes(e,!0)).parent,o=n.childCount;t=this._breakAttributesRange(t,!0),i=this.remove(t),e.offset+=n.childCount-o}else i=this.remove(t);return this.insert(e,i)}wrap(t,e){if(!(e instanceof ro))throw new hi.b("view-writer-wrap-invalid-attribute",this.document);if(Oo(t,this.document),t.isCollapsed){let n=t.start;n.parent.is("element")&&(i=n.parent,!Array.from(i.getChildren()).some(t=>!t.is("uiElement")))&&(n=n.getLastMatchingPosition(t=>t.item.is("uiElement"))),n=this._wrapPosition(n,e);const o=this.document.selection;return o.isCollapsed&&o.getFirstPosition().isEqual(t.start)&&this.setSelection(n),new to(n)}return this._wrapRange(t,e);var i}unwrap(t,e){if(!(e instanceof ro))throw new hi.b("view-writer-unwrap-invalid-attribute",this.document);if(Oo(t,this.document),t.isCollapsed)return t;const{start:i,end:n}=this._breakAttributesRange(t,!0),o=i.parent,s=this._unwrapChildren(o,i.offset,n.offset,e),r=this.mergeAttributes(s.start);r.isEqual(s.start)||s.end.offset--;const a=this.mergeAttributes(s.end);return new to(r,a)}rename(t,e){const i=new Ln(t,e.getAttributes());return this.insert(Xn._createAfter(e),i),this.move(to._createIn(e),Xn._createAt(i,0)),this.remove(to._createOn(e)),i}clearClonedElementsGroup(t){this._cloneGroups.delete(t)}createPositionAt(t,e){return Xn._createAt(t,e)}createPositionAfter(t){return Xn._createAfter(t)}createPositionBefore(t){return Xn._createBefore(t)}createRange(t,e){return new to(t,e)}createRangeOn(t){return to._createOn(t)}createRangeIn(t){return to._createIn(t)}createSelection(t,e,i){return new no(t,e,i)}_wrapChildren(t,e,i,n){let o=e;const s=[];for(;o!1,t.parent._insertChild(t.offset,i);const n=new to(t,t.getShiftedBy(1));this.wrap(n,e);const o=new Xn(i.parent,i.index);i._remove();const s=o.nodeBefore,r=o.nodeAfter;return s instanceof Ni&&r instanceof Ni?Mo(s,r):So(o)}_wrapAttributeElement(t,e){if(!Ro(t,e))return!1;if(t.name!==e.name||t.priority!==e.priority)return!1;for(const i of t.getAttributeKeys())if("class"!==i&&"style"!==i&&e.hasAttribute(i)&&e.getAttribute(i)!==t.getAttribute(i))return!1;for(const i of t.getStyleNames())if(e.hasStyle(i)&&e.getStyle(i)!==t.getStyle(i))return!1;for(const i of t.getAttributeKeys())"class"!==i&&"style"!==i&&(e.hasAttribute(i)||this.setAttribute(i,t.getAttribute(i),e));for(const i of t.getStyleNames())e.hasStyle(i)||this.setStyle(i,t.getStyle(i),e);for(const i of t.getClassNames())e.hasClass(i)||this.addClass(i,e);return!0}_unwrapAttributeElement(t,e){if(!Ro(t,e))return!1;if(t.name!==e.name||t.priority!==e.priority)return!1;for(const i of t.getAttributeKeys())if("class"!==i&&"style"!==i&&(!e.hasAttribute(i)||e.getAttribute(i)!==t.getAttribute(i)))return!1;if(!e.hasClass(...t.getClassNames()))return!1;for(const i of t.getStyleNames())if(!e.hasStyle(i)||e.getStyle(i)!==t.getStyle(i))return!1;for(const i of t.getAttributeKeys())"class"!==i&&"style"!==i&&this.removeAttribute(i,e);return this.removeClass(Array.from(t.getClassNames()),e),this.removeStyle(Array.from(t.getStyleNames()),e),!0}_breakAttributesRange(t,e=!1){const i=t.start,n=t.end;if(Oo(t,this.document),t.isCollapsed){const i=this._breakAttributes(t.start,e);return new to(i,i)}const o=this._breakAttributes(n,e),s=o.parent.childCount,r=this._breakAttributes(i,e);return o.offset+=o.parent.childCount-s,new to(r,o)}_breakAttributes(t,e=!1){const i=t.offset,n=t.parent;if(t.parent.is("emptyElement"))throw new hi.b("view-writer-cannot-break-empty-element",this.document);if(t.parent.is("uiElement"))throw new hi.b("view-writer-cannot-break-ui-element",this.document);if(!e&&n.is("text")&&No(n.parent))return t.clone();if(No(n))return t.clone();if(n.is("text"))return this._breakAttributes(Eo(t),e);if(i==n.childCount){const t=new Xn(n.parent,n.index+1);return this._breakAttributes(t,e)}if(0===i){const t=new Xn(n.parent,n.index);return this._breakAttributes(t,e)}{const t=n.index+1,o=n._clone();n.parent._insertChild(t,o),this._addToClonedElementsGroup(o);const s=n.childCount-i,r=n._removeChildren(i,s);o._appendChild(r);const a=new Xn(n.parent,t);return this._breakAttributes(a,e)}}_addToClonedElementsGroup(t){if(!t.root.is("rootElement"))return;if(t.is("element"))for(const e of t.getChildren())this._addToClonedElementsGroup(e);const e=t.id;if(!e)return;let i=this._cloneGroups.get(e);i||(i=new Set,this._cloneGroups.set(e,i)),i.add(t),t._clonesGroup=i}_removeFromClonedElementsGroup(t){if(t.is("element"))for(const e of t.getChildren())this._removeFromClonedElementsGroup(e);const e=t.id;if(!e)return;const i=this._cloneGroups.get(e);i&&i.delete(t)}}function To(t){let e=t.parent;for(;!No(e);){if(!e)return;e=e.parent}return e}function Po(t,e){return t.prioritye.priority)&&t.getIdentity()t.createTextNode(" "),zo=t=>{const e=t.createElement("br");return e.dataset.ckeFiller=!0,e},jo=(()=>{let t="";for(let e=0;e<7;e++)t+="​";return t})();function Vo(t){return Lo(t)&&t.data.substr(0,7)===jo}function Bo(t){return 7==t.data.length&&Vo(t)}function Fo(t){return Vo(t)?t.data.slice(7):t.data}function Ho(t,e){if(e.keyCode==po.arrowleft){const t=e.domTarget.ownerDocument.defaultView.getSelection();if(1==t.rangeCount&&t.getRangeAt(0).collapsed){const e=t.getRangeAt(0).startContainer,i=t.getRangeAt(0).startOffset;Vo(e)&&i<=7&&t.collapse(e,0)}}}function Uo(t,e,i,n=!1){i=i||function(t,e){return t===e},Array.isArray(t)||(t=Array.from(t)),Array.isArray(e)||(e=Array.from(e));const o=function(t,e,i){const n=Wo(t,e,i);if(-1===n)return{firstIndex:-1,lastIndexOld:-1,lastIndexNew:-1};const o=qo(t,n),s=qo(e,n),r=Wo(o,s,i),a=t.length-r,c=e.length-r;return{firstIndex:n,lastIndexOld:a,lastIndexNew:c}}(t,e,i);return n?function(t,e){const{firstIndex:i,lastIndexOld:n,lastIndexNew:o}=t;if(-1===i)return Array(e).fill("equal");let s=[];i>0&&(s=s.concat(Array(i).fill("equal")));o-i>0&&(s=s.concat(Array(o-i).fill("insert")));n-i>0&&(s=s.concat(Array(n-i).fill("delete")));o0&&i.push({index:n,type:"insert",values:t.slice(n,s)});o-n>0&&i.push({index:n+(s-n),type:"delete",howMany:o-n});return i}(e,o)}function Wo(t,e,i){for(let n=0;n200||o>200||n+o>300)return $o.fastDiff(t,e,i,!0);let s,r;if(ol?-1:1;d[n+u]&&(d[n]=d[n+u].slice(0)),d[n]||(d[n]=[]),d[n].push(o>l?s:r);let f=Math.max(o,l),m=f-n;for(;ml;f--)h[f]=u(f);h[l]=u(l),m++}while(h[l]!==c);return d[l].slice(1)}function Yo(t,e,i){t.insertBefore(i,t.childNodes[e]||null)}function Go(t){const e=t.parentNode;e&&e.removeChild(t)}function Qo(t){if(t){if(t.defaultView)return t instanceof t.defaultView.Document;if(t.ownerDocument&&t.ownerDocument.defaultView)return t instanceof t.ownerDocument.defaultView.Node}return!1}$o.fastDiff=Uo;class Ko{constructor(t,e){this.domDocuments=new Set,this.domConverter=t,this.markedAttributes=new Set,this.markedChildren=new Set,this.markedTexts=new Set,this.selection=e,this.isFocused=!1,this._inlineFiller=null,this._fakeSelectionContainer=null}markToSync(t,e){if("text"===t)this.domConverter.mapViewToDom(e.parent)&&this.markedTexts.add(e);else{if(!this.domConverter.mapViewToDom(e))return;if("attributes"===t)this.markedAttributes.add(e);else{if("children"!==t)throw new hi.b("view-engine-cyclic-unknown-type: Unknown type passed to Renderer.markToSync.",this);this.markedChildren.add(e)}}}render(){let t;for(const t of this.markedChildren)this._updateChildrenMappings(t);this._inlineFiller&&!this._isSelectionInInlineFiller()&&this._removeInlineFiller(),this._inlineFiller?t=this._getInlineFillerPosition():this._needsInlineFillerAtSelection()&&(t=this.selection.getFirstPosition(),this.markedChildren.add(t.parent));for(const t of this.markedAttributes)this._updateAttrs(t);for(const e of this.markedChildren)this._updateChildren(e,{inlineFillerPosition:t});for(const e of this.markedTexts)!this.markedChildren.has(e.parent)&&this.domConverter.mapViewToDom(e.parent)&&this._updateText(e,{inlineFillerPosition:t});if(t){const e=this.domConverter.viewPositionToDom(t),i=e.parent.ownerDocument;Vo(e.parent)?this._inlineFiller=e.parent:this._inlineFiller=Jo(i,e.parent,e.offset)}else this._inlineFiller=null;this._updateSelection(),this._updateFocus(),this.markedTexts.clear(),this.markedAttributes.clear(),this.markedChildren.clear()}_updateChildrenMappings(t){const e=this.domConverter.mapViewToDom(t);if(!e)return;const i=this.domConverter.mapViewToDom(t).childNodes,n=Array.from(this.domConverter.viewChildrenToDom(t,e.ownerDocument,{withChildren:!1})),o=this._diffNodeLists(i,n),s=this._findReplaceActions(o,i,n);if(-1!==s.indexOf("replace")){const e={equal:0,insert:0,delete:0};for(const o of s)if("replace"===o){const o=e.equal+e.insert,s=e.equal+e.delete,r=t.getChild(o);r&&!r.is("uiElement")&&this._updateElementMappings(r,i[s]),Go(n[o]),e.equal++}else e[o]++}}_updateElementMappings(t,e){this.domConverter.unbindDomElement(e),this.domConverter.bindElements(e,t),this.markedChildren.add(t),this.markedAttributes.add(t)}_getInlineFillerPosition(){const t=this.selection.getFirstPosition();return t.parent.is("text")?Xn._createBefore(this.selection.getFirstPosition().parent):t}_isSelectionInInlineFiller(){if(1!=this.selection.rangeCount||!this.selection.isCollapsed)return!1;const t=this.selection.getFirstPosition(),e=this.domConverter.viewPositionToDom(t);return!!(e&&Lo(e.parent)&&Vo(e.parent))}_removeInlineFiller(){const t=this._inlineFiller;if(!Vo(t))throw new hi.b("view-engine-cyclic-filler-was-lost: The inline filler node was lost.",this);Bo(t)?t.parentNode.removeChild(t):t.data=t.data.substr(7),this._inlineFiller=null}_needsInlineFillerAtSelection(){if(1!=this.selection.rangeCount||!this.selection.isCollapsed)return!1;const t=this.selection.getFirstPosition(),e=t.parent,i=t.offset;if(!this.domConverter.mapViewToDom(e.root))return!1;if(!e.is("element"))return!1;if(!function(t){if("false"==t.getAttribute("contenteditable"))return!1;const e=t.findAncestor(t=>t.hasAttribute("contenteditable"));return!e||"true"==e.getAttribute("contenteditable")}(e))return!1;if(i===e.getFillerOffset())return!1;const n=t.nodeBefore,o=t.nodeAfter;return!(n instanceof Ni||o instanceof Ni)}_updateText(t,e){const i=this.domConverter.findCorrespondingDomText(t),n=this.domConverter.viewToDom(t,i.ownerDocument),o=i.data;let s=n.data;const r=e.inlineFillerPosition;if(r&&r.parent==t.parent&&r.offset==t.index&&(s=jo+s),o!=s){const t=Uo(o,s);for(const e of t)"insert"===e.type?i.insertData(e.index,e.values.join("")):i.deleteData(e.index,e.howMany)}}_updateAttrs(t){const e=this.domConverter.mapViewToDom(t);if(!e)return;const i=Array.from(e.attributes).map(t=>t.name),n=t.getAttributeKeys();for(const i of n)e.setAttribute(i,t.getAttribute(i));for(const n of i)t.hasAttribute(n)||e.removeAttribute(n)}_updateChildren(t,e){const i=this.domConverter.mapViewToDom(t);if(!i)return;const n=e.inlineFillerPosition,o=this.domConverter.mapViewToDom(t).childNodes,s=Array.from(this.domConverter.viewChildrenToDom(t,i.ownerDocument,{bind:!0,inlineFillerPosition:n}));n&&n.parent===t&&Jo(i.ownerDocument,s,n.offset);const r=this._diffNodeLists(o,s);let a=0;const c=new Set;for(const t of r)"insert"===t?(Yo(i,a,s[a]),a++):"delete"===t?(c.add(o[a]),Go(o[a])):(this._markDescendantTextToSync(this.domConverter.domToView(s[a])),a++);for(const t of c)t.parentNode||this.domConverter.unbindDomElement(t)}_diffNodeLists(t,e){return $o(t=function(t,e){const i=Array.from(t);if(0==i.length||!e)return i;i[i.length-1]==e&&i.pop();return i}(t,this._fakeSelectionContainer),e,Xo.bind(null,this.domConverter))}_findReplaceActions(t,e,i){if(-1===t.indexOf("insert")||-1===t.indexOf("delete"))return t;let n=[],o=[],s=[];const r={equal:0,insert:0,delete:0};for(const a of t)"insert"===a?s.push(i[r.equal+r.insert]):"delete"===a?o.push(e[r.equal+r.delete]):(n=n.concat($o(o,s,Zo).map(t=>"equal"===t?"replace":t)),n.push("equal"),o=[],s=[]),r[a]++;return n.concat($o(o,s,Zo).map(t=>"equal"===t?"replace":t))}_markDescendantTextToSync(t){if(t)if(t.is("text"))this.markedTexts.add(t);else if(t.is("element"))for(const e of t.getChildren())this._markDescendantTextToSync(e)}_updateSelection(){if(0===this.selection.rangeCount)return this._removeDomSelection(),void this._removeFakeSelection();const t=this.domConverter.mapViewToDom(this.selection.editableElement);this.isFocused&&t&&(this.selection.isFake?this._updateFakeSelection(t):(this._removeFakeSelection(),this._updateDomSelection(t)))}_updateFakeSelection(t){const e=t.ownerDocument;this._fakeSelectionContainer||(this._fakeSelectionContainer=function(t){const e=t.createElement("div");return Object.assign(e.style,{position:"fixed",top:0,left:"-9999px",width:"42px"}),e.textContent=" ",e}(e));const i=this._fakeSelectionContainer;if(this.domConverter.bindFakeSelection(i,this.selection),!this._fakeSelectionNeedsUpdate(t))return;i.parentElement&&i.parentElement==t||t.appendChild(i),i.textContent=this.selection.fakeSelectionLabel||" ";const n=e.getSelection(),o=e.createRange();n.removeAllRanges(),o.selectNodeContents(i),n.addRange(o)}_updateDomSelection(t){const e=t.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(e))return;const i=this.domConverter.viewPositionToDom(this.selection.anchor),n=this.domConverter.viewPositionToDom(this.selection.focus);t.focus(),e.collapse(i.parent,i.offset),e.extend(n.parent,n.offset),fo.isGecko&&function(t,e){const i=t.parent;if(i.nodeType!=Node.ELEMENT_NODE||t.offset!=i.childNodes.length-1)return;const n=i.childNodes[t.offset];n&&"BR"==n.tagName&&e.addRange(e.getRangeAt(0))}(n,e)}_domSelectionNeedsUpdate(t){if(!this.domConverter.isDomSelectionCorrect(t))return!0;const e=t&&this.domConverter.domSelectionToView(t);return(!e||!this.selection.isEqual(e))&&!(!this.selection.isCollapsed&&this.selection.isSimilar(e))}_fakeSelectionNeedsUpdate(t){const e=this._fakeSelectionContainer,i=t.ownerDocument.getSelection();return!e||e.parentElement!==t||(i.anchorNode!==e&&!e.contains(i.anchorNode)||e.textContent!==this.selection.fakeSelectionLabel)}_removeDomSelection(){for(const t of this.domDocuments){if(t.getSelection().rangeCount){const e=t.activeElement,i=this.domConverter.mapDomToView(e);e&&i&&t.getSelection().removeAllRanges()}}}_removeFakeSelection(){const t=this._fakeSelectionContainer;t&&t.remove()}_updateFocus(){if(this.isFocused){const t=this.selection.editableElement;t&&this.domConverter.focus(t)}}}function Jo(t,e,i){const n=e instanceof Array?e:e.childNodes,o=n[i];if(Lo(o))return o.data=jo+o.data,o;{const o=t.createTextNode(jo);return Array.isArray(e)?n.splice(i,0,o):Yo(e,i,o),o}}function Zo(t,e){return Qo(t)&&Qo(e)&&!Lo(t)&&!Lo(e)&&t.tagName.toLowerCase()===e.tagName.toLowerCase()}function Xo(t,e,i){return e===i||(Lo(e)&&Lo(i)?e.data===i.data:!(!t.isBlockFiller(e)||!t.isBlockFiller(i)))}vi(Ko,Hn);var ts={window:window,document:document};function es(t){let e=0;for(;t.previousSibling;)t=t.previousSibling,e++;return e}function is(t){const e=[];for(;t&&t.nodeType!=Node.DOCUMENT_NODE;)e.unshift(t),t=t.parentNode;return e}const ns=zo(document);class os{constructor(t={}){this.blockFillerMode=t.blockFillerMode||"br",this.preElements=["pre"],this.blockElements=["p","div","h1","h2","h3","h4","h5","h6","li","dd","dt","figcaption"],this._blockFiller="br"==this.blockFillerMode?zo:Do,this._domToViewMapping=new WeakMap,this._viewToDomMapping=new WeakMap,this._fakeSelectionMapping=new WeakMap}bindFakeSelection(t,e){this._fakeSelectionMapping.set(t,new no(e))}fakeSelectionToView(t){return this._fakeSelectionMapping.get(t)}bindElements(t,e){this._domToViewMapping.set(t,e),this._viewToDomMapping.set(e,t)}unbindDomElement(t){const e=this._domToViewMapping.get(t);if(e){this._domToViewMapping.delete(t),this._viewToDomMapping.delete(e);for(const e of Array.from(t.childNodes))this.unbindDomElement(e)}}bindDocumentFragments(t,e){this._domToViewMapping.set(t,e),this._viewToDomMapping.set(e,t)}viewToDom(t,e,i={}){if(t.is("text")){const i=this._processDataFromViewText(t);return e.createTextNode(i)}{if(this.mapViewToDom(t))return this.mapViewToDom(t);let n;if(t.is("documentFragment"))n=e.createDocumentFragment(),i.bind&&this.bindDocumentFragments(n,t);else{if(t.is("uiElement"))return n=t.render(e),i.bind&&this.bindElements(n,t),n;n=t.hasAttribute("xmlns")?e.createElementNS(t.getAttribute("xmlns"),t.name):e.createElement(t.name),i.bind&&this.bindElements(n,t);for(const e of t.getAttributeKeys())n.setAttribute(e,t.getAttribute(e))}if(i.withChildren||void 0===i.withChildren)for(const o of this.viewChildrenToDom(t,e,i))n.appendChild(o);return n}}*viewChildrenToDom(t,e,i={}){const n=t.getFillerOffset&&t.getFillerOffset();let o=0;for(const s of t.getChildren())n===o&&(yield this._blockFiller(e)),yield this.viewToDom(s,e,i),o++;n===o&&(yield this._blockFiller(e))}viewRangeToDom(t){const e=this.viewPositionToDom(t.start),i=this.viewPositionToDom(t.end),n=document.createRange();return n.setStart(e.parent,e.offset),n.setEnd(i.parent,i.offset),n}viewPositionToDom(t){const e=t.parent;if(e.is("text")){const i=this.findCorrespondingDomText(e);if(!i)return null;let n=t.offset;return Vo(i)&&(n+=7),{parent:i,offset:n}}{let i,n,o;if(0===t.offset){if(i=this.mapViewToDom(e),!i)return null;o=i.childNodes[0]}else{const e=t.nodeBefore;if(n=e.is("text")?this.findCorrespondingDomText(e):this.mapViewToDom(t.nodeBefore),!n)return null;i=n.parentNode,o=n.nextSibling}if(Lo(o)&&Vo(o))return{parent:o,offset:7};return{parent:i,offset:n?es(n)+1:0}}}domToView(t,e={}){if(this.isBlockFiller(t,this.blockFillerMode))return null;const i=this.getParentUIElement(t,this._domToViewMapping);if(i)return i;if(Lo(t)){if(Bo(t))return null;{const e=this._processDataFromDomText(t);return""===e?null:new Ni(e)}}if(this.isComment(t))return null;{if(this.mapDomToView(t))return this.mapDomToView(t);let i;if(this.isDocumentFragment(t))i=new Ao,e.bind&&this.bindDocumentFragments(t,i);else{const n=e.keepOriginalCase?t.tagName:t.tagName.toLowerCase();i=new On(n),e.bind&&this.bindElements(t,i);const o=t.attributes;for(let t=o.length-1;t>=0;t--)i._setAttribute(o[t].name,o[t].value)}if(e.withChildren||void 0===e.withChildren)for(const n of this.domChildrenToView(t,e))i._appendChild(n);return i}}*domChildrenToView(t,e={}){for(let i=0;i{const{scrollLeft:e,scrollTop:i}=t;n.push([e,i])}),e.focus(),rs(e,t=>{const[e,i]=n.shift();t.scrollLeft=e,t.scrollTop=i}),ts.window.scrollTo(t,i)}}isElement(t){return t&&t.nodeType==Node.ELEMENT_NODE}isDocumentFragment(t){return t&&t.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isComment(t){return t&&t.nodeType==Node.COMMENT_NODE}isBlockFiller(t){return"br"==this.blockFillerMode?t.isEqualNode(ns):!("BR"!==t.tagName||!as(t,this.blockElements)||1!==t.parentNode.childNodes.length)||function(t,e){return Lo(t)&&" "==t.data&&as(t,e)&&1===t.parentNode.childNodes.length}(t,this.blockElements)}isDomSelectionBackward(t){if(t.isCollapsed)return!1;const e=document.createRange();e.setStart(t.anchorNode,t.anchorOffset),e.setEnd(t.focusNode,t.focusOffset);const i=e.collapsed;return e.detach(),i}getParentUIElement(t){const e=is(t);for(e.pop();e.length;){const t=e.pop(),i=this._domToViewMapping.get(t);if(i&&i.is("uiElement"))return i}return null}isDomSelectionCorrect(t){return this._isDomSelectionPositionCorrect(t.anchorNode,t.anchorOffset)&&this._isDomSelectionPositionCorrect(t.focusNode,t.focusOffset)}_isDomSelectionPositionCorrect(t,e){if(Lo(t)&&Vo(t)&&e<7)return!1;if(this.isElement(t)&&Vo(t.childNodes[e]))return!1;const i=this.mapDomToView(t);return!i||!i.is("uiElement")}_processDataFromViewText(t){let e=t.data;if(t.getAncestors().some(t=>this.preElements.includes(t.name)))return e;if(" "==e.charAt(0)){const i=this._getTouchingViewTextNode(t,!1);!(i&&this._nodeEndsWithSpace(i))&&i||(e=" "+e.substr(1))}if(" "==e.charAt(e.length-1)){const i=this._getTouchingViewTextNode(t,!0);" "!=e.charAt(e.length-2)&&i&&" "!=i.data.charAt(0)||(e=e.substr(0,e.length-1)+" ")}return e.replace(/ {2}/g,"  ")}_nodeEndsWithSpace(t){if(t.getAncestors().some(t=>this.preElements.includes(t.name)))return!1;const e=this._processDataFromViewText(t);return" "==e.charAt(e.length-1)}_processDataFromDomText(t){let e=t.data;if(ss(t,this.preElements))return Fo(t);e=e.replace(/[ \n\t\r]{1,}/g," ");const i=this._getTouchingInlineDomNode(t,!1),n=this._getTouchingInlineDomNode(t,!0),o=this._checkShouldLeftTrimDomText(i),s=this._checkShouldRightTrimDomText(t,n);return o&&(e=e.replace(/^ /,"")),s&&(e=e.replace(/ $/,"")),e=Fo(new Text(e)),e=e.replace(/ \u00A0/g," "),(/( |\u00A0)\u00A0$/.test(e)||!n||n.data&&" "==n.data.charAt(0))&&(e=e.replace(/\u00A0$/," ")),o&&(e=e.replace(/^\u00A0/," ")),e}_checkShouldLeftTrimDomText(t){return!t||(!!ii(t)||/[^\S\u00A0]/.test(t.data.charAt(t.data.length-1)))}_checkShouldRightTrimDomText(t,e){return!e&&!Vo(t)}_getTouchingViewTextNode(t,e){const i=new Zn({startPosition:e?Xn._createAfter(t):Xn._createBefore(t),direction:e?"forward":"backward"});for(const t of i){if(t.item.is("containerElement"))return null;if(t.item.is("br"))return null;if(t.item.is("textProxy"))return t.item}return null}_getTouchingInlineDomNode(t,e){if(!t.parentNode)return null;const i=e?"nextNode":"previousNode",n=t.ownerDocument,o=is(t)[0],s=n.createTreeWalker(o,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,{acceptNode:t=>Lo(t)||"BR"==t.tagName?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});s.currentNode=t;const r=s[i]();if(null!==r){const e=function(t,e){const i=is(t),n=is(e);let o=0;for(;i[o]==n[o]&&i[o];)o++;return 0===o?null:i[o-1]}(t,r);if(e&&!ss(t,this.blockElements,e)&&!ss(r,this.blockElements,e))return r}return null}}function ss(t,e,i){let n=is(t);return i&&(n=n.slice(n.indexOf(i)+1)),n.some(t=>t.tagName&&e.includes(t.tagName.toLowerCase()))}function rs(t,e){for(;t&&t!=ts.document;)e(t),t=t.parentNode}function as(t,e){const i=t.parentNode;return i&&i.tagName&&e.includes(i.tagName.toLowerCase())}function cs(t){const e=Object.prototype.toString.apply(t);return"[object Window]"==e||"[object global]"==e}var ls=zn({},mi,{listenTo(t,...e){if(Qo(t)||cs(t)){const i=this._getProxyEmitter(t)||new ds(t);i.attach(...e),t=i}mi.listenTo.call(this,t,...e)},stopListening(t,e,i){if(Qo(t)||cs(t)){const e=this._getProxyEmitter(t);if(!e)return;t=e}mi.stopListening.call(this,t,e,i),t instanceof ds&&t.detach(e)},_getProxyEmitter(t){return e=this,i=hs(t),e[ui]&&e[ui][i]?e[ui][i].emitter:null;var e,i}});class ds{constructor(t){gi(this,hs(t)),this._domNode=t}}function hs(t){return t["data-ck-expando"]||(t["data-ck-expando"]=li())}zn(ds.prototype,mi,{attach(t,e,i={}){if(this._domListeners&&this._domListeners[t])return;const n=this._createDomListener(t,!!i.useCapture);this._domNode.addEventListener(t,n,!!i.useCapture),this._domListeners||(this._domListeners={}),this._domListeners[t]=n},detach(t){let e;!this._domListeners[t]||(e=this._events[t])&&e.callbacks.length||this._domListeners[t].removeListener()},_createDomListener(t,e){const i=e=>{this.fire(t,e)};return i.removeListener=()=>{this._domNode.removeEventListener(t,i,e),delete this._domListeners[t]},i}});class us{constructor(t){this.view=t,this.document=t.document,this.isEnabled=!1}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}destroy(){this.disable(),this.stopListening()}}vi(us,ls);var fs=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};var ms=function(t){return this.__data__.has(t)};function gs(t){var e=-1,i=null==t?0:t.length;for(this.__data__=new kt;++ea))return!1;var l=s.get(t);if(l&&s.get(e))return l==e;var d=-1,h=!0,u=2&i?new ps:void 0;for(s.set(t,e),s.set(e,t);++d{this.listenTo(t,e,(t,e)=>{this.isEnabled&&this.onDomEvent(e)},{useCapture:this.useCapture})})}fire(t,e,i){this.isEnabled&&this.document.fire(t,new Ns(this.view,e,i))}}class Rs extends Os{constructor(t){super(t),this.domEventType=["keydown","keyup"]}onDomEvent(t){this.fire(t.type,t,{keyCode:t.keyCode,altKey:t.altKey,ctrlKey:t.ctrlKey||t.metaKey,shiftKey:t.shiftKey,get keystroke(){return bo(this)}})}}var Ls=function(){return n.a.Date.now()},Ds=/^\s+|\s+$/g,zs=/^[-+]0x[0-9a-f]+$/i,js=/^0b[01]+$/i,Vs=/^0o[0-7]+$/i,Bs=parseInt;var Fs=function(t){if("number"==typeof t)return t;if(ji(t))return NaN;if(z(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=z(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Ds,"");var i=js.test(t);return i||Vs.test(t)?Bs(t.slice(2),i?2:8):zs.test(t)?NaN:+t},Hs=Math.max,Us=Math.min;var Ws=function(t,e,i){var n,o,s,r,a,c,l=0,d=!1,h=!1,u=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function f(e){var i=n,s=o;return n=o=void 0,l=e,r=t.apply(s,i)}function m(t){return l=t,a=setTimeout(p,e),d?f(t):r}function g(t){var i=t-c;return void 0===c||i>=e||i<0||h&&t-l>=s}function p(){var t=Ls();if(g(t))return b(t);a=setTimeout(p,function(t){var i=e-(t-c);return h?Us(i,s-(t-l)):i}(t))}function b(t){return a=void 0,u&&n?f(t):(n=o=void 0,r)}function w(){var t=Ls(),i=g(t);if(n=arguments,o=this,c=t,i){if(void 0===a)return m(c);if(h)return clearTimeout(a),a=setTimeout(p,e),f(c)}return void 0===a&&(a=setTimeout(p,e)),r}return e=Fs(e)||0,z(i)&&(d=!!i.leading,s=(h="maxWait"in i)?Hs(Fs(i.maxWait)||0,e):s,u="trailing"in i?!!i.trailing:u),w.cancel=function(){void 0!==a&&clearTimeout(a),l=0,n=c=o=a=void 0},w.flush=function(){return void 0===a?r:b(Ls())},w};class qs extends us{constructor(t){super(t),this._fireSelectionChangeDoneDebounced=Ws(t=>this.document.fire("selectionChangeDone",t),200)}observe(){const t=this.document;t.on("keydown",(e,i)=>{var n;t.selection.isFake&&((n=i.keyCode)==po.arrowright||n==po.arrowleft||n==po.arrowup||n==po.arrowdown)&&this.isEnabled&&(i.preventDefault(),this._handleSelectionMove(i.keyCode))},{priority:"lowest"})}destroy(){super.destroy(),this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(t){const e=this.document.selection,i=new no(e.getRanges(),{backward:e.isBackward,fake:!1});t!=po.arrowleft&&t!=po.arrowup||i.setTo(i.getFirstPosition()),t!=po.arrowright&&t!=po.arrowdown||i.setTo(i.getLastPosition());const n={oldSelection:e,newSelection:i,domSelection:null};this.document.fire("selectionChange",n),this._fireSelectionChangeDoneDebounced(n)}}class $s extends us{constructor(t){super(t),this.mutationObserver=t.getObserver(Is),this.selection=this.document.selection,this.domConverter=t.domConverter,this._documents=new WeakSet,this._fireSelectionChangeDoneDebounced=Ws(t=>this.document.fire("selectionChangeDone",t),200),this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3),this._loopbackCounter=0}observe(t){const e=t.ownerDocument;this._documents.has(e)||(this.listenTo(e,"selectionchange",()=>{this._handleSelectionChange(e)}),this._documents.add(e))}destroy(){super.destroy(),clearInterval(this._clearInfiniteLoopInterval),this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionChange(t){if(!this.isEnabled)return;this.mutationObserver.flush();const e=t.defaultView.getSelection(),i=this.domConverter.domSelectionToView(e);if(0!=i.rangeCount&&!(this.selection.isEqual(i)&&this.domConverter.isDomSelectionCorrect(e)||++this._loopbackCounter>60))if(this.selection.isSimilar(i))this.view.forceRender();else{const t={oldSelection:this.selection,newSelection:i,domSelection:e};this.document.fire("selectionChange",t),this._fireSelectionChangeDoneDebounced(t)}}_clearInfiniteLoop(){this._loopbackCounter=0}}class Ys extends Os{constructor(t){super(t),this.domEventType=["focus","blur"],this.useCapture=!0;const e=this.document;e.on("focus",()=>{e.isFocused=!0,this._renderTimeoutId=setTimeout(()=>t.forceRender(),50)}),e.on("blur",(i,n)=>{const o=e.selection.editableElement;null!==o&&o!==n.target||(e.isFocused=!1,t.forceRender())})}onDomEvent(t){this.fire(t.type,t)}destroy(){this._renderTimeoutId&&clearTimeout(this._renderTimeoutId),super.destroy()}}class Gs extends Os{constructor(t){super(t),this.domEventType=["compositionstart","compositionupdate","compositionend"];const e=this.document;e.on("compositionstart",()=>{e.isComposing=!0}),e.on("compositionend",()=>{e.isComposing=!1})}onDomEvent(t){this.fire(t.type,t)}}class Qs extends Os{constructor(t){super(t),this.domEventType=["beforeinput"]}onDomEvent(t){this.fire(t.type,t)}}function Ks(t){return"[object Range]"==Object.prototype.toString.apply(t)}function Js(t){const e=t.ownerDocument.defaultView.getComputedStyle(t);return{top:parseInt(e.borderTopWidth,10),right:parseInt(e.borderRightWidth,10),bottom:parseInt(e.borderBottomWidth,10),left:parseInt(e.borderLeftWidth,10)}}const Zs=["top","right","bottom","left","width","height"];class Xs{constructor(t){const e=Ks(t);if(Object.defineProperty(this,"_source",{value:t._source||t,writable:!0,enumerable:!1}),ii(t)||e)tr(this,e?Xs.getDomRangeRects(t)[0]:t.getBoundingClientRect());else if(cs(t)){const{innerWidth:e,innerHeight:i}=t;tr(this,{top:0,right:e,bottom:i,left:0,width:e,height:i})}else tr(this,t)}clone(){return new Xs(this)}moveTo(t,e){return this.top=e,this.right=t+this.width,this.bottom=e+this.height,this.left=t,this}moveBy(t,e){return this.top+=e,this.right+=t,this.left+=t,this.bottom+=e,this}getIntersection(t){const e={top:Math.max(this.top,t.top),right:Math.min(this.right,t.right),bottom:Math.min(this.bottom,t.bottom),left:Math.max(this.left,t.left)};return e.width=e.right-e.left,e.height=e.bottom-e.top,e.width<0||e.height<0?null:new Xs(e)}getIntersectionArea(t){const e=this.getIntersection(t);return e?e.getArea():0}getArea(){return this.width*this.height}getVisible(){const t=this._source;let e=this.clone();if(!er(t)){let i=t.parentNode||t.commonAncestorContainer;for(;i&&!er(i);){const t=new Xs(i),n=e.getIntersection(t);if(!n)return null;n.getArea()hr(t,n));const r=hr(t,n);if(nr(n,r,e),n.parent!=n){if(o=n.frameElement,n=n.parent,!o)return}else n=null}}function nr(t,e,i){const n=e.clone().moveBy(0,i),o=e.clone().moveBy(0,-i),s=new Xs(t).excludeScrollbarsAndBorders();if(![o,n].every(t=>s.contains(t))){let{scrollX:r,scrollY:a}=t;rr(o,s)?a-=s.top-e.top+i:sr(n,s)&&(a+=e.bottom-s.bottom+i),ar(e,s)?r-=s.left-e.left+i:cr(e,s)&&(r+=e.right-s.right+i),t.scrollTo(r,a)}}function or(t,e){const i=lr(t);let n,o;for(;t!=i.document.body;)o=e(),n=new Xs(t).excludeScrollbarsAndBorders(),n.contains(o)||(rr(o,n)?t.scrollTop-=n.top-o.top:sr(o,n)&&(t.scrollTop+=o.bottom-n.bottom),ar(o,n)?t.scrollLeft-=n.left-o.left:cr(o,n)&&(t.scrollLeft+=o.right-n.right)),t=t.parentNode}function sr(t,e){return t.bottom>e.bottom}function rr(t,e){return t.tope.right}function lr(t){return Ks(t)?t.startContainer.ownerDocument.defaultView:t.ownerDocument.defaultView}function dr(t){if(Ks(t)){let e=t.commonAncestorContainer;return Lo(e)&&(e=e.parentNode),e}return t.parentNode}function hr(t,e){const i=lr(t),n=new Xs(t);if(i===e)return n;{let t=i;for(;t!=e;){const e=t.frameElement,i=new Xs(e).excludeScrollbarsAndBorders();n.moveBy(i.left,i.top),t=t.parent}}return n}Object.assign({},{scrollViewportToShowTarget:ir,scrollAncestorsToShowTarget:function(t){or(dr(t),()=>new Xs(t))}});class ur{constructor(){this.document=new so,this.domConverter=new os,this.domRoots=new Map,this.set("isRenderingInProgress",!1),this._renderer=new Ko(this.domConverter,this.document.selection),this._renderer.bind("isFocused").to(this.document),this._initialDomRootAttributes=new WeakMap,this._observers=new Map,this._ongoingChange=!1,this._postFixersInProgress=!1,this._renderingDisabled=!1,this._hasChangedSinceTheLastRendering=!1,this._writer=new Co(this.document),this.addObserver(Is),this.addObserver($s),this.addObserver(Ys),this.addObserver(Rs),this.addObserver(qs),this.addObserver(Gs),fo.isAndroid&&this.addObserver(Qs),this.document.on("keydown",Ho),yo(this),this.on("render",()=>{this._render(),this.document.fire("layoutChanged"),this._hasChangedSinceTheLastRendering=!1}),this.listenTo(this.document.selection,"change",()=>{this._hasChangedSinceTheLastRendering=!0})}attachDomRoot(t,e="main"){const i=this.document.getRoot(e);i._name=t.tagName.toLowerCase();const n={};for(const{name:e,value:o}of Array.from(t.attributes))n[e]=o,"class"===e?this._writer.addClass(o.split(" "),i):this._writer.setAttribute(e,o,i);this._initialDomRootAttributes.set(t,n);const o=()=>{this._writer.setAttribute("contenteditable",!i.isReadOnly,i),i.isReadOnly?this._writer.addClass("ck-read-only",i):this._writer.removeClass("ck-read-only",i)};o(),this.domRoots.set(e,t),this.domConverter.bindElements(t,i),this._renderer.markToSync("children",i),this._renderer.markToSync("attributes",i),this._renderer.domDocuments.add(t.ownerDocument),i.on("change:children",(t,e)=>this._renderer.markToSync("children",e)),i.on("change:attributes",(t,e)=>this._renderer.markToSync("attributes",e)),i.on("change:text",(t,e)=>this._renderer.markToSync("text",e)),i.on("change:isReadOnly",()=>this.change(o)),i.on("change",()=>{this._hasChangedSinceTheLastRendering=!0});for(const i of this._observers.values())i.observe(t,e)}detachDomRoot(t){const e=this.domRoots.get(t);Array.from(e.attributes).forEach(({name:t})=>e.removeAttribute(t));const i=this._initialDomRootAttributes.get(e);for(const t in i)e.setAttribute(t,i[t]);this.domRoots.delete(t),this.domConverter.unbindDomElement(e)}getDomRoot(t="main"){return this.domRoots.get(t)}addObserver(t){let e=this._observers.get(t);if(e)return e;e=new t(this),this._observers.set(t,e);for(const[t,i]of this.domRoots)e.observe(i,t);return e.enable(),e}getObserver(t){return this._observers.get(t)}disableObservers(){for(const t of this._observers.values())t.disable()}enableObservers(){for(const t of this._observers.values())t.enable()}scrollToTheSelection(){const t=this.document.selection.getFirstRange();t&&ir({target:this.domConverter.viewRangeToDom(t),viewportOffset:20})}focus(){if(!this.document.isFocused){const t=this.document.selection.editableElement;t&&(this.domConverter.focus(t),this.forceRender())}}change(t){if(this.isRenderingInProgress||this._postFixersInProgress)throw new hi.b("cannot-change-view-tree: Attempting to make changes to the view when it is in an incorrect state: rendering or post-fixers are in progress. This may cause some unexpected behavior and inconsistency between the DOM and the view.",this);try{if(this._ongoingChange)return t(this._writer);this._ongoingChange=!0;const e=t(this._writer);return this._ongoingChange=!1,!this._renderingDisabled&&this._hasChangedSinceTheLastRendering&&(this._postFixersInProgress=!0,this.document._callPostFixers(this._writer),this._postFixersInProgress=!1,this.fire("render")),e}catch(t){hi.b.rethrowUnexpectedError(t,this)}}forceRender(){this._hasChangedSinceTheLastRendering=!0,this.change(()=>{})}destroy(){for(const t of this._observers.values())t.destroy();this.document.destroy(),this.stopListening()}createPositionAt(t,e){return Xn._createAt(t,e)}createPositionAfter(t){return Xn._createAfter(t)}createPositionBefore(t){return Xn._createBefore(t)}createRange(t,e){return new to(t,e)}createRangeOn(t){return to._createOn(t)}createRangeIn(t){return to._createIn(t)}createSelection(t,e,i){return new no(t,e,i)}_disableRendering(t){this._renderingDisabled=t,0==t&&this.change(()=>{})}_render(){this.isRenderingInProgress=!0,this.disableObservers(),this._renderer.render(),this.enableObservers(),this.isRenderingInProgress=!1}}vi(ur,Hn);class fr{constructor(t){this.parent=null,this._attrs=Li(t)}get index(){let t;if(!this.parent)return null;if(null===(t=this.parent.getChildIndex(this)))throw new hi.b("model-node-not-found-in-parent: The node's parent does not contain this node.",this);return t}get startOffset(){let t;if(!this.parent)return null;if(null===(t=this.parent.getChildStartOffset(this)))throw new hi.b("model-node-not-found-in-parent: The node's parent does not contain this node.",this);return t}get offsetSize(){return 1}get endOffset(){return this.parent?this.startOffset+this.offsetSize:null}get nextSibling(){const t=this.index;return null!==t&&this.parent.getChild(t+1)||null}get previousSibling(){const t=this.index;return null!==t&&this.parent.getChild(t-1)||null}get root(){let t=this;for(;t.parent;)t=t.parent;return t}get document(){return this.root==this?null:this.root.document||null}getPath(){const t=[];let e=this;for(;e.parent;)t.unshift(e.startOffset),e=e.parent;return t}getAncestors(t={includeSelf:!1,parentFirst:!1}){const e=[];let i=t.includeSelf?this:this.parent;for(;i;)e[t.parentFirst?"push":"unshift"](i),i=i.parent;return e}getCommonAncestor(t,e={}){const i=this.getAncestors(e),n=t.getAncestors(e);let o=0;for(;i[o]==n[o]&&i[o];)o++;return 0===o?null:i[o-1]}isBefore(t){if(this==t)return!1;if(this.root!==t.root)return!1;const e=this.getPath(),i=t.getPath(),n=Ei(e,i);switch(n){case"prefix":return!0;case"extension":return!1;default:return e[n](t[e[0]]=e[1],t),{})),t}is(t){return"node"==t||"model:node"==t}_clone(){return new fr(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(t,e){this._attrs.set(t,e)}_setAttributesTo(t){this._attrs=Li(t)}_removeAttribute(t){return this._attrs.delete(t)}_clearAttributes(){this._attrs.clear()}}class mr extends fr{constructor(t,e){super(e),this._data=t||""}get offsetSize(){return this.data.length}get data(){return this._data}is(t){return"text"==t||"model:text"==t||super.is(t)}toJSON(){const t=super.toJSON();return t.data=this.data,t}_clone(){return new mr(this.data,this.getAttributes())}static fromJSON(t){return new mr(t.data,t.attributes)}}class gr{constructor(t,e,i){if(this.textNode=t,e<0||e>t.offsetSize)throw new hi.b("model-textproxy-wrong-offsetintext: Given offsetInText value is incorrect.",this);if(i<0||e+i>t.offsetSize)throw new hi.b("model-textproxy-wrong-length: Given length value is incorrect.",this);this.data=t.data.substring(e,e+i),this.offsetInText=e}get startOffset(){return null!==this.textNode.startOffset?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return null!==this.startOffset?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}is(t){return"textProxy"==t||"model:textProxy"==t}getPath(){const t=this.textNode.getPath();return t.length>0&&(t[t.length-1]+=this.offsetInText),t}getAncestors(t={includeSelf:!1,parentFirst:!1}){const e=[];let i=t.includeSelf?this:this.parent;for(;i;)e[t.parentFirst?"push":"unshift"](i),i=i.parent;return e}hasAttribute(t){return this.textNode.hasAttribute(t)}getAttribute(t){return this.textNode.getAttribute(t)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}class pr{constructor(t){this._nodes=[],t&&this._insertNodes(0,t)}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((t,e)=>t+e.offsetSize,0)}getNode(t){return this._nodes[t]||null}getNodeIndex(t){const e=this._nodes.indexOf(t);return-1==e?null:e}getNodeStartOffset(t){const e=this.getNodeIndex(t);return null===e?null:this._nodes.slice(0,e).reduce((t,e)=>t+e.offsetSize,0)}indexToOffset(t){if(t==this._nodes.length)return this.maxOffset;const e=this._nodes[t];if(!e)throw new hi.b("model-nodelist-index-out-of-bounds: Given index cannot be found in the node list.",this);return this.getNodeStartOffset(e)}offsetToIndex(t){let e=0;for(const i of this._nodes){if(t>=e&&tt.toJSON())}}class br extends fr{constructor(t,e,i){super(e),this.name=t,this._children=new pr,i&&this._insertChild(0,i)}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return 0===this.childCount}is(t,e=null){const i=t.replace(/^model:/,"");return e?"element"==i&&e==this.name:"element"==i||i==this.name||super.is(t)}getChild(t){return this._children.getNode(t)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(t){return this._children.getNodeIndex(t)}getChildStartOffset(t){return this._children.getNodeStartOffset(t)}offsetToIndex(t){return this._children.offsetToIndex(t)}getNodeByPath(t){let e=this;for(const i of t)e=e.getChild(e.offsetToIndex(i));return e}toJSON(){const t=super.toJSON();if(t.name=this.name,this._children.length>0){t.children=[];for(const e of this._children)t.children.push(e.toJSON())}return t}_clone(t=!1){const e=t?Array.from(this._children).map(t=>t._clone(!0)):null;return new br(this.name,this.getAttributes(),e)}_appendChild(t){this._insertChild(this.childCount,t)}_insertChild(t,e){const i=function(t){if("string"==typeof t)return[new mr(t)];Ri(t)||(t=[t]);return Array.from(t).map(t=>"string"==typeof t?new mr(t):t instanceof gr?new mr(t.data,t.getAttributes()):t)}(e);for(const t of i)null!==t.parent&&t._remove(),t.parent=this;this._children._insertNodes(t,i)}_removeChildren(t,e=1){const i=this._children._removeNodes(t,e);for(const t of i)t.parent=null;return i}static fromJSON(t){let e=null;if(t.children){e=[];for(const i of t.children)i.name?e.push(br.fromJSON(i)):e.push(mr.fromJSON(i))}return new br(t.name,t.attributes,e)}}class wr{constructor(t={}){if(!t.boundaries&&!t.startPosition)throw new hi.b("model-tree-walker-no-start-position: Neither boundaries nor starting position have been defined.",null);const e=t.direction||"forward";if("forward"!=e&&"backward"!=e)throw new hi.b("model-tree-walker-unknown-direction: Only `backward` and `forward` direction allowed.",t,{direction:e});this.direction=e,this.boundaries=t.boundaries||null,t.startPosition?this.position=t.startPosition.clone():this.position=_r._createAt(this.boundaries["backward"==this.direction?"end":"start"]),this.position.stickiness="toNone",this.singleCharacters=!!t.singleCharacters,this.shallow=!!t.shallow,this.ignoreElementEnd=!!t.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null,this._visitedParent=this.position.parent}[Symbol.iterator](){return this}skip(t){let e,i,n,o;do{n=this.position,o=this._visitedParent,({done:e,value:i}=this.next())}while(!e&&t(i));e||(this.position=n,this._visitedParent=o)}next(){return"forward"==this.direction?this._next():this._previous()}_next(){const t=this.position,e=this.position.clone(),i=this._visitedParent;if(null===i.parent&&e.offset===i.maxOffset)return{done:!0};if(i===this._boundaryEndParent&&e.offset==this.boundaries.end.offset)return{done:!0};const n=e.textNode?e.textNode:e.nodeAfter;if(n instanceof br)return this.shallow?e.offset++:(e.path.push(0),this._visitedParent=n),this.position=e,kr("elementStart",n,t,e,1);if(n instanceof mr){let o;if(this.singleCharacters)o=1;else{let t=n.endOffset;this._boundaryEndParent==i&&this.boundaries.end.offsett&&(t=this.boundaries.start.offset),o=e.offset-t}const s=e.offset-n.startOffset,r=new gr(n,s-o,o);return e.offset-=o,this.position=e,kr("text",r,t,e,o)}return e.path.pop(),this.position=e,this._visitedParent=i.parent,kr("elementStart",i,t,e,1)}}function kr(t,e,i,n,o){return{done:!1,value:{type:t,item:e,previousPosition:i,nextPosition:n,length:o}}}class _r{constructor(t,e,i="toNone"){if(!t.is("element")&&!t.is("documentFragment"))throw new hi.b("model-position-root-invalid: Position root invalid.",t);if(!(e instanceof Array)||0===e.length)throw new hi.b("model-position-path-incorrect-format: Position path must be an array with at least one item.",t,{path:e});e=t.getPath().concat(e),t=t.root,this.root=t,this.path=e,this.stickiness=i}get offset(){return Xi(this.path)}set offset(t){this.path[this.path.length-1]=t}get parent(){let t=this.root;for(let e=0;ei.path.length){if(e.offset!==n.maxOffset)return!1;e.path=e.path.slice(0,-1),n=n.parent,e.offset++}else{if(0!==i.offset)return!1;i.path=i.path.slice(0,-1)}}}is(t){return"position"==t||"model:position"==t}hasSameParentAs(t){if(this.root!==t.root)return!1;return"same"==Ei(this.getParentPath(),t.getParentPath())}getTransformedByOperation(t){let e;switch(t.type){case"insert":e=this._getTransformedByInsertOperation(t);break;case"move":case"remove":case"reinsert":e=this._getTransformedByMoveOperation(t);break;case"split":e=this._getTransformedBySplitOperation(t);break;case"merge":e=this._getTransformedByMergeOperation(t);break;default:e=_r._createAt(this)}return e}_getTransformedByInsertOperation(t){return this._getTransformedByInsertion(t.position,t.howMany)}_getTransformedByMoveOperation(t){return this._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany)}_getTransformedBySplitOperation(t){const e=t.movedRange;return e.containsPosition(this)||e.start.isEqual(this)&&"toNext"==this.stickiness?this._getCombined(t.splitPosition,t.moveTargetPosition):t.graveyardPosition?this._getTransformedByMove(t.graveyardPosition,t.insertionPosition,1):this._getTransformedByInsertion(t.insertionPosition,1)}_getTransformedByMergeOperation(t){const e=t.movedRange;let i;return e.containsPosition(this)||e.start.isEqual(this)?(i=this._getCombined(t.sourcePosition,t.targetPosition),t.sourcePosition.isBefore(t.targetPosition)&&(i=i._getTransformedByDeletion(t.deletionPosition,1))):i=this.isEqual(t.deletionPosition)?_r._createAt(t.deletionPosition):this._getTransformedByMove(t.deletionPosition,t.graveyardPosition,1),i}_getTransformedByDeletion(t,e){const i=_r._createAt(this);if(this.root!=t.root)return i;if("same"==Ei(t.getParentPath(),this.getParentPath())){if(t.offsetthis.offset)return null;i.offset-=e}}else if("prefix"==Ei(t.getParentPath(),this.getParentPath())){const n=t.path.length-1;if(t.offset<=this.path[n]){if(t.offset+e>this.path[n])return null;i.path[n]-=e}}return i}_getTransformedByInsertion(t,e){const i=_r._createAt(this);if(this.root!=t.root)return i;if("same"==Ei(t.getParentPath(),this.getParentPath()))(t.offsete+1;){const e=n.maxOffset-i.offset;0!==e&&t.push(new vr(i,i.getShiftedBy(e))),i.path=i.path.slice(0,-1),i.offset++,n=n.parent}for(;i.path.length<=this.end.path.length;){const e=this.end.path[i.path.length-1],n=e-i.offset;0!==n&&t.push(new vr(i,i.getShiftedBy(n))),i.offset=e,i.path.push(0)}return t}getWalker(t={}){return t.boundaries=this,new wr(t)}*getItems(t={}){t.boundaries=this,t.ignoreElementEnd=!0;const e=new wr(t);for(const t of e)yield t.item}*getPositions(t={}){t.boundaries=this;const e=new wr(t);yield e.position;for(const t of e)yield t.nextPosition}getTransformedByOperation(t){switch(t.type){case"insert":return this._getTransformedByInsertOperation(t);case"move":case"remove":case"reinsert":return this._getTransformedByMoveOperation(t);case"split":return[this._getTransformedBySplitOperation(t)];case"merge":return[this._getTransformedByMergeOperation(t)]}return[new vr(this.start,this.end)]}getTransformedByOperations(t){const e=[new vr(this.start,this.end)];for(const i of t)for(let t=0;t0?new this(i,n):new this(n,i)}static _createIn(t){return new this(_r._createAt(t,0),_r._createAt(t,t.maxOffset))}static _createOn(t){return this._createFromPositionAndShift(_r._createBefore(t),t.offsetSize)}static _createFromRanges(t){if(0===t.length)throw new hi.b("range-create-from-ranges-empty-array: At least one range has to be passed.",null);if(1==t.length)return t[0].clone();const e=t[0];t.sort((t,e)=>t.start.isAfter(e.start)?1:-1);const i=t.indexOf(e),n=new this(e.start,e.end);if(i>0)for(let e=i-1;t[e].end.isEqual(n.start);e++)n.start=_r._createAt(t[e].start);for(let e=i+1;e{if(e.viewPosition)return;const i=this._modelToViewMapping.get(e.modelPosition.parent);e.viewPosition=this._findPositionIn(i,e.modelPosition.offset)},{priority:"low"}),this.on("viewToModelPosition",(t,e)=>{if(e.modelPosition)return;const i=this.findMappedViewAncestor(e.viewPosition),n=this._viewToModelMapping.get(i),o=this._toModelOffset(e.viewPosition.parent,e.viewPosition.offset,i);e.modelPosition=_r._createAt(n,o)},{priority:"low"})}bindElements(t,e){this._modelToViewMapping.set(t,e),this._viewToModelMapping.set(e,t)}unbindViewElement(t){const e=this.toModelElement(t);if(this._viewToModelMapping.delete(t),this._elementToMarkerNames.has(t))for(const e of this._elementToMarkerNames.get(t))this._unboundMarkerNames.add(e);this._modelToViewMapping.get(e)==t&&this._modelToViewMapping.delete(e)}unbindModelElement(t){const e=this.toViewElement(t);this._modelToViewMapping.delete(t),this._viewToModelMapping.get(e)==t&&this._viewToModelMapping.delete(e)}bindElementToMarker(t,e){const i=this._markerNameToElements.get(e)||new Set;i.add(t);const n=this._elementToMarkerNames.get(t)||new Set;n.add(e),this._markerNameToElements.set(e,i),this._elementToMarkerNames.set(t,n)}unbindElementFromMarkerName(t,e){const i=this._markerNameToElements.get(e);i&&(i.delete(t),0==i.size&&this._markerNameToElements.delete(e));const n=this._elementToMarkerNames.get(t);n&&(n.delete(e),0==n.size&&this._elementToMarkerNames.delete(t))}flushUnboundMarkerNames(){const t=Array.from(this._unboundMarkerNames);return this._unboundMarkerNames.clear(),t}clearBindings(){this._modelToViewMapping=new WeakMap,this._viewToModelMapping=new WeakMap,this._markerNameToElements=new Map,this._elementToMarkerNames=new Map,this._unboundMarkerNames=new Set}toModelElement(t){return this._viewToModelMapping.get(t)}toViewElement(t){return this._modelToViewMapping.get(t)}toModelRange(t){return new vr(this.toModelPosition(t.start),this.toModelPosition(t.end))}toViewRange(t){return new to(this.toViewPosition(t.start),this.toViewPosition(t.end))}toModelPosition(t){const e={viewPosition:t,mapper:this};return this.fire("viewToModelPosition",e),e.modelPosition}toViewPosition(t,e={isPhantom:!1}){const i={modelPosition:t,mapper:this,isPhantom:e.isPhantom};return this.fire("modelToViewPosition",i),i.viewPosition}markerNameToElements(t){const e=this._markerNameToElements.get(t);if(!e)return null;const i=new Set;for(const t of e)if(t.is("attributeElement"))for(const e of t.getElementsWithSameId())i.add(e);else i.add(t);return i}registerViewToModelLength(t,e){this._viewToModelLengthCallbacks.set(t,e)}findMappedViewAncestor(t){let e=t.parent;for(;!this._viewToModelMapping.has(e);)e=e.parent;return e}_toModelOffset(t,e,i){if(i!=t){return this._toModelOffset(t.parent,t.index,i)+this._toModelOffset(t,e,t)}if(t.is("text"))return e;let n=0;for(let i=0;i1?e[0]+":"+e[1]:e[0]}class Cr{constructor(t){this.conversionApi=zn({dispatcher:this},t)}convertChanges(t,e,i){for(const e of t.getMarkersToRemove())this.convertMarkerRemove(e.name,e.range,i);for(const e of t.getChanges())"insert"==e.type?this.convertInsert(vr._createFromPositionAndShift(e.position,e.length),i):"remove"==e.type?this.convertRemove(e.position,e.length,e.name,i):this.convertAttribute(e.range,e.attributeKey,e.attributeOldValue,e.attributeNewValue,i);for(const t of this.conversionApi.mapper.flushUnboundMarkerNames()){const n=e.get(t).getRange();this.convertMarkerRemove(t,n,i),this.convertMarkerAdd(t,n,i)}for(const e of t.getMarkersToAdd())this.convertMarkerAdd(e.name,e.range,i)}convertInsert(t,e){this.conversionApi.writer=e,this.conversionApi.consumable=this._createInsertConsumable(t);for(const e of t){const t=e.item,i={item:t,range:vr._createFromPositionAndShift(e.previousPosition,e.length)};this._testAndFire("insert",i);for(const e of t.getAttributeKeys())i.attributeKey=e,i.attributeOldValue=null,i.attributeNewValue=t.getAttribute(e),this._testAndFire(`attribute:${e}`,i)}this._clearConversionApi()}convertRemove(t,e,i,n){this.conversionApi.writer=n,this.fire("remove:"+i,{position:t,length:e},this.conversionApi),this._clearConversionApi()}convertAttribute(t,e,i,n,o){this.conversionApi.writer=o,this.conversionApi.consumable=this._createConsumableForRange(t,`attribute:${e}`);for(const o of t){const t={item:o.item,range:vr._createFromPositionAndShift(o.previousPosition,o.length),attributeKey:e,attributeOldValue:i,attributeNewValue:n};this._testAndFire(`attribute:${e}`,t)}this._clearConversionApi()}convertSelection(t,e,i){const n=Array.from(e.getMarkersAtPosition(t.getFirstPosition()));if(this.conversionApi.writer=i,this.conversionApi.consumable=this._createSelectionConsumable(t,n),this.fire("selection",{selection:t},this.conversionApi),t.isCollapsed){for(const e of n){const i=e.getRange();if(!Tr(t.getFirstPosition(),e,this.conversionApi.mapper))continue;const n={item:t,markerName:e.name,markerRange:i};this.conversionApi.consumable.test(t,"addMarker:"+e.name)&&this.fire("addMarker:"+e.name,n,this.conversionApi)}for(const e of t.getAttributeKeys()){const i={item:t,range:t.getFirstRange(),attributeKey:e,attributeOldValue:null,attributeNewValue:t.getAttribute(e)};this.conversionApi.consumable.test(t,"attribute:"+i.attributeKey)&&this.fire("attribute:"+i.attributeKey+":$text",i,this.conversionApi)}this._clearConversionApi()}}convertMarkerAdd(t,e,i){if(!e.root.document||"$graveyard"==e.root.rootName)return;this.conversionApi.writer=i;const n="addMarker:"+t,o=new xr;if(o.add(e,n),this.conversionApi.consumable=o,this.fire(n,{markerName:t,markerRange:e},this.conversionApi),o.test(e,n)){this.conversionApi.consumable=this._createConsumableForRange(e,n);for(const i of e.getItems()){if(!this.conversionApi.consumable.test(i,n))continue;const o={item:i,range:vr._createOn(i),markerName:t,markerRange:e};this.fire(n,o,this.conversionApi)}this._clearConversionApi()}}convertMarkerRemove(t,e,i){e.root.document&&"$graveyard"!=e.root.rootName&&(this.conversionApi.writer=i,this.fire("removeMarker:"+t,{markerName:t,markerRange:e},this.conversionApi),this._clearConversionApi())}_createInsertConsumable(t){const e=new xr;for(const i of t){const t=i.item;e.add(t,"insert");for(const i of t.getAttributeKeys())e.add(t,"attribute:"+i)}return e}_createConsumableForRange(t,e){const i=new xr;for(const n of t.getItems())i.add(n,e);return i}_createSelectionConsumable(t,e){const i=new xr;i.add(t,"selection");for(const n of e)i.add(t,"addMarker:"+n.name);for(const e of t.getAttributeKeys())i.add(t,"attribute:"+e);return i}_testAndFire(t,e){if(!this.conversionApi.consumable.test(e.item,t))return;const i=e.item.name||"$text";this.fire(t+":"+i,e,this.conversionApi)}_clearConversionApi(){delete this.conversionApi.writer,delete this.conversionApi.consumable}}function Tr(t,e,i){const n=e.getRange(),o=Array.from(t.getAncestors());return o.shift(),o.reverse(),!o.some(t=>{if(n.containsItem(t)){return!!i.toViewElement(t).getCustomProperty("addHighlight")}})}vi(Cr,mi);class Pr{constructor(t,e,i){this._lastRangeBackward=!1,this._ranges=[],this._attrs=new Map,t&&this.setTo(t,e,i)}get anchor(){if(this._ranges.length>0){const t=this._ranges[this._ranges.length-1];return this._lastRangeBackward?t.end:t.start}return null}get focus(){if(this._ranges.length>0){const t=this._ranges[this._ranges.length-1];return this._lastRangeBackward?t.start:t.end}return null}get isCollapsed(){return 1===this._ranges.length&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(t){if(this.rangeCount!=t.rangeCount)return!1;if(0===this.rangeCount)return!0;if(!this.anchor.isEqual(t.anchor)||!this.focus.isEqual(t.focus))return!1;for(const e of this._ranges){let i=!1;for(const n of t._ranges)if(e.isEqual(n)){i=!0;break}if(!i)return!1}return!0}*getRanges(){for(const t of this._ranges)yield new vr(t.start,t.end)}getFirstRange(){let t=null;for(const e of this._ranges)t&&!e.start.isBefore(t.start)||(t=e);return t?new vr(t.start,t.end):null}getLastRange(){let t=null;for(const e of this._ranges)t&&!e.end.isAfter(t.end)||(t=e);return t?new vr(t.start,t.end):null}getFirstPosition(){const t=this.getFirstRange();return t?t.start.clone():null}getLastPosition(){const t=this.getLastRange();return t?t.end.clone():null}setTo(t,e,i){if(null===t)this._setRanges([]);else if(t instanceof Pr)this._setRanges(t.getRanges(),t.isBackward);else if(t&&"function"==typeof t.getRanges)this._setRanges(t.getRanges(),t.isBackward);else if(t instanceof vr)this._setRanges([t],!!e&&!!e.backward);else if(t instanceof _r)this._setRanges([new vr(t)]);else if(t instanceof fr){const n=!!i&&!!i.backward;let o;if("in"==e)o=vr._createIn(t);else if("on"==e)o=vr._createOn(t);else{if(void 0===e)throw new hi.b("model-selection-setTo-required-second-parameter: selection.setTo requires the second parameter when the first parameter is a node.",[this,t]);o=new vr(_r._createAt(t,e))}this._setRanges([o],n)}else{if(!Ri(t))throw new hi.b("model-selection-setTo-not-selectable: Cannot set the selection to the given place.",[this,t]);this._setRanges(t,e&&!!e.backward)}}_setRanges(t,e=!1){const i=(t=Array.from(t)).some(e=>{if(!(e instanceof vr))throw new hi.b("model-selection-set-ranges-not-range: Selection range set to an object that is not an instance of model.Range.",[this,t]);return this._ranges.every(t=>!t.isEqual(e))});if(t.length!==this._ranges.length||i){this._removeAllRanges();for(const e of t)this._pushRange(e);this._lastRangeBackward=!!e,this.fire("change:range",{directChange:!0})}}setFocus(t,e){if(null===this.anchor)throw new hi.b("model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.",[this,t]);const i=_r._createAt(t,e);if("same"==i.compareWith(this.focus))return;const n=this.anchor;this._ranges.length&&this._popRange(),"before"==i.compareWith(n)?(this._pushRange(new vr(i,n)),this._lastRangeBackward=!0):(this._pushRange(new vr(n,i)),this._lastRangeBackward=!1),this.fire("change:range",{directChange:!0})}getAttribute(t){return this._attrs.get(t)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(t){return this._attrs.has(t)}removeAttribute(t){this.hasAttribute(t)&&(this._attrs.delete(t),this.fire("change:attribute",{attributeKeys:[t],directChange:!0}))}setAttribute(t,e){this.getAttribute(t)!==e&&(this._attrs.set(t,e),this.fire("change:attribute",{attributeKeys:[t],directChange:!0}))}getSelectedElement(){if(1!==this.rangeCount)return null;const t=this.getFirstRange(),e=t.start.nodeAfter,i=t.end.nodeBefore;return e instanceof br&&e==i?e:null}is(t){return"selection"==t||"model:selection"==t}*getSelectedBlocks(){const t=new WeakSet;for(const e of this.getRanges()){const i=Mr(e.start,t);i&&Ir(i,e)&&(yield i);for(const i of e.getWalker()){const n=i.item;"elementEnd"==i.type&&Er(n,t,e)&&(yield n)}const n=Mr(e.end,t);n&&!e.end.isTouching(_r._createAt(n,0))&&Ir(n,e)&&(yield n)}}containsEntireContent(t=this.anchor.root){const e=_r._createAt(t,0),i=_r._createAt(t,"end");return e.isTouching(this.getFirstPosition())&&i.isTouching(this.getLastPosition())}_pushRange(t){this._checkRange(t),this._ranges.push(new vr(t.start,t.end))}_checkRange(t){for(let e=0;e0;)this._popRange()}_popRange(){this._ranges.pop()}}function Sr(t,e){return!e.has(t)&&(e.add(t),t.document.model.schema.isBlock(t)&&t.parent)}function Er(t,e,i){return Sr(t,e)&&Ir(t,i)}function Mr(t,e){const i=t.parent.document.model.schema,n=t.parent.getAncestors({parentFirst:!0,includeSelf:!0});let o=!1;const s=n.find(t=>!o&&(o=i.isLimit(t),!o&&Sr(t,e)));return n.forEach(t=>e.add(t)),s}function Ir(t,e){const i=function(t){const e=t.document.model.schema;let i=t.parent;for(;i;){if(e.isBlock(i))return i;i=i.parent}}(t);return!i||!e.containsRange(vr._createOn(i),!0)}vi(Pr,mi);class Nr extends vr{constructor(t,e){super(t,e),Or.call(this)}detach(){this.stopListening()}is(t){return"liveRange"==t||"model:liveRange"==t||super.is(t)}toRange(){return new vr(this.start,this.end)}static fromRange(t){return new Nr(t.start,t.end)}}function Or(){this.listenTo(this.root.document.model,"applyOperation",(t,e)=>{const i=e[0];i.isDocumentOperation&&Rr.call(this,i)},{priority:"low"})}function Rr(t){const e=this.getTransformedByOperation(t),i=vr._createFromRanges(e),n=!i.isEqual(this),o=function(t,e){switch(e.type){case"insert":return t.containsPosition(e.position);case"move":case"remove":case"reinsert":case"merge":return t.containsPosition(e.sourcePosition)||t.start.isEqual(e.sourcePosition)||t.containsPosition(e.targetPosition);case"split":return t.containsPosition(e.splitPosition)||t.containsPosition(e.insertionPosition)}return!1}(this,t);let s=null;if(n){"$graveyard"==i.root.rootName&&(s="remove"==t.type?t.sourcePosition:t.deletionPosition);const e=this.toRange();this.start=i.start,this.end=i.end,this.fire("change:range",e,{deletionPosition:s})}else o&&this.fire("change:content",this.toRange(),{deletionPosition:s})}vi(Nr,mi);class Lr{constructor(t){this._selection=new Dr(t),this._selection.delegate("change:range").to(this),this._selection.delegate("change:attribute").to(this),this._selection.delegate("change:marker").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(t){return this._selection.containsEntireContent(t)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(t){return this._selection.getAttribute(t)}hasAttribute(t){return this._selection.hasAttribute(t)}refresh(){this._selection._updateMarkers(),this._selection._updateAttributes(!1)}is(t){return"selection"==t||"model:selection"==t||"documentSelection"==t||"model:documentSelection"==t}_setFocus(t,e){this._selection.setFocus(t,e)}_setTo(t,e,i){this._selection.setTo(t,e,i)}_setAttribute(t,e){this._selection.setAttribute(t,e)}_removeAttribute(t){this._selection.removeAttribute(t)}_getStoredAttributes(){return this._selection._getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(t){this._selection.restoreGravity(t)}static _getStoreAttributeKey(t){return"selection:"+t}static _isStoreAttributeKey(t){return t.startsWith("selection:")}}vi(Lr,mi);class Dr extends Pr{constructor(t){super(),this.markers=new yi({idProperty:"name"}),this._model=t.model,this._document=t,this._attributePriority=new Map,this._fixGraveyardRangesData=[],this._hasChangedRange=!1,this._overriddenGravityRegister=new Set,this.listenTo(this._model,"applyOperation",(t,e)=>{const i=e[0];if(i.isDocumentOperation&&"marker"!=i.type&&"rename"!=i.type&&"noop"!=i.type){for(;this._fixGraveyardRangesData.length;){const{liveRange:t,sourcePosition:e}=this._fixGraveyardRangesData.shift();this._fixGraveyardSelection(t,e)}this._hasChangedRange&&(this._hasChangedRange=!1,this.fire("change:range",{directChange:!1}))}},{priority:"lowest"}),this.on("change:range",()=>{for(const t of this.getRanges())if(!this._document._validateSelectionRange(t))throw new hi.b("document-selection-wrong-position: Range from document selection starts or ends at incorrect position.",this,{range:t})}),this.listenTo(this._model.markers,"update",()=>this._updateMarkers()),this.listenTo(this._document,"change",(t,e)=>{!function(t,e){const i=t.document.differ;for(const n of i.getChanges()){if("insert"!=n.type)continue;const i=n.position.parent;n.length===i.maxOffset&&t.enqueueChange(e,t=>{const e=Array.from(i.getAttributeKeys()).filter(t=>t.startsWith("selection:"));for(const n of e)t.removeAttribute(n,i)})}}(this._model,e)})}get isCollapsed(){return 0===this._ranges.length?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let t=0;t{this._hasChangedRange=!0,e.root==this._document.graveyard&&this._fixGraveyardRangesData.push({liveRange:e,sourcePosition:n.deletionPosition})}),e}_updateMarkers(){const t=[];let e=!1;for(const e of this._model.markers){const i=e.getRange();for(const n of this.getRanges())i.containsRange(n,!n.isCollapsed)&&t.push(e)}const i=Array.from(this.markers);for(const i of t)this.markers.has(i)||(this.markers.add(i),e=!0);for(const i of Array.from(this.markers))t.includes(i)||(this.markers.remove(i),e=!0);e&&this.fire("change:marker",{oldMarkers:i,directChange:!1})}_updateAttributes(t){const e=Li(this._getSurroundingAttributes()),i=Li(this.getAttributes());if(t)this._attributePriority=new Map,this._attrs=new Map;else for(const[t,e]of this._attributePriority)"low"==e&&(this._attrs.delete(t),this._attributePriority.delete(t));this._setAttributesTo(e);const n=[];for(const[t,e]of this.getAttributes())i.has(t)&&i.get(t)===e||n.push(t);for(const[t]of i)this.hasAttribute(t)||n.push(t);n.length>0&&this.fire("change:attribute",{attributeKeys:n,directChange:!1})}_setAttribute(t,e,i=!0){const n=i?"normal":"low";return("low"!=n||"normal"!=this._attributePriority.get(t))&&(super.getAttribute(t)!==e&&(this._attrs.set(t,e),this._attributePriority.set(t,n),!0))}_removeAttribute(t,e=!0){const i=e?"normal":"low";return("low"!=i||"normal"!=this._attributePriority.get(t))&&(this._attributePriority.set(t,i),!!super.hasAttribute(t)&&(this._attrs.delete(t),!0))}_setAttributesTo(t){const e=new Set;for(const[e,i]of this.getAttributes())t.get(e)!==i&&this._removeAttribute(e,!1);for(const[i,n]of t){this._setAttribute(i,n,!1)&&e.add(i)}return e}*_getStoredAttributes(){const t=this.getFirstPosition().parent;if(this.isCollapsed&&t.isEmpty)for(const e of t.getAttributeKeys())if(e.startsWith("selection:")){const i=e.substr("selection:".length);yield[i,t.getAttribute(e)]}}_getSurroundingAttributes(){const t=this.getFirstPosition(),e=this._model.schema;let i=null;if(this.isCollapsed){const e=t.textNode?t.textNode:t.nodeBefore,n=t.textNode?t.textNode:t.nodeAfter;if(this.isGravityOverridden||(i=zr(e)),i||(i=zr(n)),!this.isGravityOverridden&&!i){let t=e;for(;t&&!i;)t=t.previousSibling,i=zr(t)}if(!i){let t=n;for(;t&&!i;)t=t.nextSibling,i=zr(t)}i||(i=this._getStoredAttributes())}else{const t=this.getFirstRange();for(const n of t){if(n.item.is("element")&&e.isObject(n.item))break;if("text"==n.type){i=n.item.getAttributes();break}}}return i}_fixGraveyardSelection(t,e){const i=e.clone(),n=this._model.schema.getNearestSelectionRange(i),o=this._ranges.indexOf(t);if(this._ranges.splice(o,1),t.detach(),n){const t=this._prepareRange(n);this._ranges.splice(o,0,t)}}}function zr(t){return t instanceof gr||t instanceof mr?t.getAttributes():null}class jr{constructor(t){this._dispatchers=t}add(t){for(const e of this._dispatchers)t(e);return this}}var Vr=function(t){return ti(t,5)};class Br extends jr{elementToElement(t){return this.add(function(t){return(t=Vr(t)).view=Hr(t.view,"container"),e=>{var i;e.on("insert:"+t.model,(i=t.view,(t,e,n)=>{const o=i(e.item,n.writer);if(!o)return;if(!n.consumable.consume(e.item,"insert"))return;const s=n.mapper.toViewPosition(e.range.start);n.mapper.bindElements(e.item,o),n.writer.insert(s,o)}),{priority:t.converterPriority||"normal"})}}(t))}attributeToElement(t){return this.add(function(t){let e="attribute:"+((t=Vr(t)).model.key?t.model.key:t.model);t.model.name&&(e+=":"+t.model.name);if(t.model.values)for(const e of t.model.values)t.view[e]=Hr(t.view[e],"attribute");else t.view=Hr(t.view,"attribute");const i=Ur(t);return n=>{n.on(e,function(t){return(e,i,n)=>{const o=t(i.attributeOldValue,n.writer),s=t(i.attributeNewValue,n.writer);if(!o&&!s)return;if(!n.consumable.consume(i.item,e.name))return;const r=n.writer,a=r.document.selection;if(i.item instanceof Pr||i.item instanceof Lr)r.wrap(a.getFirstRange(),s);else{let t=n.mapper.toViewRange(i.range);null!==i.attributeOldValue&&o&&(t=r.unwrap(t,o)),null!==i.attributeNewValue&&s&&r.wrap(t,s)}}}(i),{priority:t.converterPriority||"normal"})}}(t))}attributeToAttribute(t){return this.add(function(t){let e="attribute:"+((t=Vr(t)).model.key?t.model.key:t.model);t.model.name&&(e+=":"+t.model.name);if(t.model.values)for(const e of t.model.values)t.view[e]=Wr(t.view[e]);else t.view=Wr(t.view);const i=Ur(t);return n=>{var o;n.on(e,(o=i,(t,e,i)=>{const n=o(e.attributeOldValue,e),s=o(e.attributeNewValue,e);if(!n&&!s)return;if(!i.consumable.consume(e.item,t.name))return;const r=i.mapper.toViewElement(e.item),a=i.writer;if(!r)throw new hi.b("conversion-attribute-to-attribute-on-text: Trying to convert text node's attribute with attribute-to-attribute converter.",[e,i]);if(null!==e.attributeOldValue&&n)if("class"==n.key){const t=Array.isArray(n.value)?n.value:[n.value];for(const e of t)a.removeClass(e,r)}else if("style"==n.key){const t=Object.keys(n.value);for(const e of t)a.removeStyle(e,r)}else a.removeAttribute(n.key,r);if(null!==e.attributeNewValue&&s)if("class"==s.key){const t=Array.isArray(s.value)?s.value:[s.value];for(const e of t)a.addClass(e,r)}else if("style"==s.key){const t=Object.keys(s.value);for(const e of t)a.setStyle(e,s.value[e],r)}else a.setAttribute(s.key,s.value,r)}),{priority:t.converterPriority||"normal"})}}(t))}markerToElement(t){return this.add(function(t){return(t=Vr(t)).view=Hr(t.view,"ui"),e=>{var i;e.on("addMarker:"+t.model,(i=t.view,(t,e,n)=>{e.isOpening=!0;const o=i(e,n.writer);e.isOpening=!1;const s=i(e,n.writer);if(!o||!s)return;const r=e.markerRange;if(r.isCollapsed&&!n.consumable.consume(r,t.name))return;for(const e of r)if(!n.consumable.consume(e.item,t.name))return;const a=n.mapper,c=n.writer;c.insert(a.toViewPosition(r.start),o),n.mapper.bindElementToMarker(o,e.markerName),r.isCollapsed||(c.insert(a.toViewPosition(r.end),s),n.mapper.bindElementToMarker(s,e.markerName)),t.stop()}),{priority:t.converterPriority||"normal"}),e.on("removeMarker:"+t.model,(t.view,(t,e,i)=>{const n=i.mapper.markerNameToElements(e.markerName);if(n){for(const t of n)i.mapper.unbindElementFromMarkerName(t,e.markerName),i.writer.clear(i.writer.createRangeOn(t),t);i.writer.clearClonedElementsGroup(e.markerName),t.stop()}}),{priority:t.converterPriority||"normal"})}}(t))}markerToHighlight(t){return this.add(function(t){return e=>{var i;e.on("addMarker:"+t.model,(i=t.view,(t,e,n)=>{if(!e.item)return;if(!(e.item instanceof Pr||e.item instanceof Lr||e.item.is("textProxy")))return;const o=qr(i,e,n);if(!o)return;if(!n.consumable.consume(e.item,t.name))return;const s=Fr(o),r=n.writer,a=r.document.selection;if(e.item instanceof Pr||e.item instanceof Lr)r.wrap(a.getFirstRange(),s,a);else{const t=n.mapper.toViewRange(e.range),i=r.wrap(t,s);for(const t of i.getItems())if(t.is("attributeElement")&&t.isSimilar(s)){n.mapper.bindElementToMarker(t,e.markerName);break}}}),{priority:t.converterPriority||"normal"}),e.on("addMarker:"+t.model,function(t){return(e,i,n)=>{if(!i.item)return;if(!(i.item instanceof br))return;const o=qr(t,i,n);if(!o)return;if(!n.consumable.test(i.item,e.name))return;const s=n.mapper.toViewElement(i.item);if(s&&s.getCustomProperty("addHighlight")){n.consumable.consume(i.item,e.name);for(const t of vr._createIn(i.item))n.consumable.consume(t.item,e.name);s.getCustomProperty("addHighlight")(s,o,n.writer),n.mapper.bindElementToMarker(s,i.markerName)}}}(t.view),{priority:t.converterPriority||"normal"}),e.on("removeMarker:"+t.model,function(t){return(e,i,n)=>{if(i.markerRange.isCollapsed)return;const o=qr(t,i,n);if(!o)return;const s=Fr(o),r=n.mapper.markerNameToElements(i.markerName);if(r){for(const t of r)n.mapper.unbindElementFromMarkerName(t,i.markerName),t.is("attributeElement")?n.writer.unwrap(n.writer.createRangeOn(t),s):t.getCustomProperty("removeHighlight")(t,o.id,n.writer);n.writer.clearClonedElementsGroup(i.markerName),e.stop()}}}(t.view),{priority:t.converterPriority||"normal"})}}(t))}}function Fr(t){const e=new ro("span",t.attributes);return t.classes&&e._addClass(t.classes),t.priority&&(e._priority=t.priority),e._id=t.id,e}function Hr(t,e){return"function"==typeof t?t:(i,n)=>function(t,e,i){"string"==typeof t&&(t={name:t});let n;const o=Object.assign({},t.attributes);if("container"==i)n=e.createContainerElement(t.name,o);else if("attribute"==i){const i={priority:t.priority||ro.DEFAULT_PRIORITY};n=e.createAttributeElement(t.name,o,i)}else n=e.createUIElement(t.name,o);if(t.styles){const i=Object.keys(t.styles);for(const o of i)e.setStyle(o,t.styles[o],n)}if(t.classes){const i=t.classes;if("string"==typeof i)e.addClass(i,n);else for(const t of i)e.addClass(t,n)}return n}(t,n,e)}function Ur(t){return t.model.values?(e,i)=>{const n=t.view[e];return n?n(e,i):null}:t.view}function Wr(t){return"string"==typeof t?e=>({key:t,value:e}):"object"==typeof t?t.value?()=>t:e=>({key:t.key,value:e}):t}function qr(t,e,i){const n="function"==typeof t?t(e,i):t;return n?(n.priority||(n.priority=10),n.id||(n.id=e.markerName),n):null}class $r extends jr{elementToElement(t){return this.add(Yr(t))}elementToAttribute(t){return this.add(function(t){Qr(t=Vr(t));const e=Kr(t,!1),i=Gr(t.view),n=i?"element:"+i:"element";return i=>{i.on(n,e,{priority:t.converterPriority||"low"})}}(t))}attributeToAttribute(t){return this.add(function(t){t=Vr(t);let e=null;("string"==typeof t.view||t.view.key)&&(e=function(t){"string"==typeof t.view&&(t.view={key:t.view});const e=t.view.key;let i;if("class"==e||"style"==e){i={["class"==e?"classes":"styles"]:t.view.value}}else{const n=void 0===t.view.value?/[\s\S]*/:t.view.value;i={attributes:{[e]:n}}}t.view.name&&(i.name=t.view.name);return t.view=i,e}(t));Qr(t,e);const i=Kr(t,!0);return e=>{e.on("element",i,{priority:t.converterPriority||"low"})}}(t))}elementToMarker(t){return this.add(function(t){return function(t){const e=t.model;t.model=(t,i)=>{const n="string"==typeof e?e:e(t);return i.createElement("$marker",{"data-name":n})}}(t=Vr(t)),Yr(t)}(t))}}function Yr(t){const e=function(t){const e=t.view?new Di(t.view):null;return(i,n,o)=>{let s={};if(e){const t=e.match(n.viewItem);if(!t)return;s=t.match}s.name=!0;const r=(a=t.model,c=n.viewItem,l=o.writer,a instanceof Function?a(c,l):l.createElement(a));var a,c,l;if(!r)return;if(!o.consumable.test(n.viewItem,s))return;const d=o.splitToAllowedParent(r,n.modelCursor);if(!d)return;o.writer.insert(r,d.position),o.convertChildren(n.viewItem,o.writer.createPositionAt(r,0)),o.consumable.consume(n.viewItem,s);const h=o.getSplitParts(r);n.modelRange=new vr(o.writer.createPositionBefore(r),o.writer.createPositionAfter(h[h.length-1])),d.cursorParent?n.modelCursor=o.writer.createPositionAt(d.cursorParent,0):n.modelCursor=n.modelRange.end}}(t=Vr(t)),i=Gr(t.view),n=i?"element:"+i:"element";return i=>{i.on(n,e,{priority:t.converterPriority||"normal"})}}function Gr(t){return"string"==typeof t?t:"object"==typeof t&&"string"==typeof t.name?t.name:null}function Qr(t,e=null){const i=null===e||(t=>t.getAttribute(e)),n="object"!=typeof t.model?t.model:t.model.key,o="object"!=typeof t.model||void 0===t.model.value?i:t.model.value;t.model={key:n,value:o}}function Kr(t,e){const i=new Di(t.view);return(n,o,s)=>{const r=i.match(o.viewItem);if(!r)return;const a=t.model.key,c="function"==typeof t.model.value?t.model.value(o.viewItem):t.model.value;null!==c&&(!function(t,e){const i="function"==typeof t?t(e):t;if("object"==typeof i&&!Gr(i))return!1;return!i.classes&&!i.attributes&&!i.styles}(t.view,o.viewItem)?delete r.match.name:r.match.name=!0,s.consumable.test(o.viewItem,r.match)&&(o.modelRange||(o=Object.assign(o,s.convertChildren(o.viewItem,o.modelCursor))),function(t,e,i,n){let o=!1;for(const s of Array.from(t.getItems({shallow:i})))n.schema.checkAttribute(s,e.key)&&(n.writer.setAttribute(e.key,e.value,s),o=!0);return o}(o.modelRange,{key:a,value:c},e,s)&&s.consumable.consume(o.viewItem,r.match)))}}class Jr{constructor(t){this.model=t,this.view=new ur,this.mapper=new yr,this.downcastDispatcher=new Cr({mapper:this.mapper});const e=this.model.document,i=e.selection,n=this.model.markers;this.listenTo(this.model,"_beforeChanges",()=>{this.view._disableRendering(!0)},{priority:"highest"}),this.listenTo(this.model,"_afterChanges",()=>{this.view._disableRendering(!1)},{priority:"lowest"}),this.listenTo(e,"change",()=>{this.view.change(t=>{this.downcastDispatcher.convertChanges(e.differ,n,t),this.downcastDispatcher.convertSelection(i,n,t)})},{priority:"low"}),this.listenTo(this.view.document,"selectionChange",function(t,e){return(i,n)=>{const o=n.newSelection,s=new Pr,r=[];for(const t of o.getRanges())r.push(e.toModelRange(t));s.setTo(r,{backward:o.isBackward}),s.isEqual(t.document.selection)||t.change(t=>{t.setSelection(s)})}}(this.model,this.mapper)),this.downcastDispatcher.on("insert:$text",(t,e,i)=>{if(!i.consumable.consume(e.item,"insert"))return;const n=i.writer,o=i.mapper.toViewPosition(e.range.start),s=n.createText(e.item.data);n.insert(o,s)},{priority:"lowest"}),this.downcastDispatcher.on("remove",(t,e,i)=>{const n=i.mapper.toViewPosition(e.position),o=e.position.getShiftedBy(e.length),s=i.mapper.toViewPosition(o,{isPhantom:!0}),r=i.writer.createRange(n,s),a=i.writer.remove(r.getTrimmed());for(const t of i.writer.createRangeIn(a).getItems())i.mapper.unbindViewElement(t)},{priority:"low"}),this.downcastDispatcher.on("selection",(t,e,i)=>{const n=i.writer,o=n.document.selection;for(const t of o.getRanges())t.isCollapsed&&t.end.parent.document&&i.writer.mergeAttributes(t.start);n.setSelection(null)},{priority:"low"}),this.downcastDispatcher.on("selection",(t,e,i)=>{const n=e.selection;if(n.isCollapsed)return;if(!i.consumable.consume(n,"selection"))return;const o=[];for(const t of n.getRanges()){const e=i.mapper.toViewRange(t);o.push(e)}i.writer.setSelection(o,{backward:n.isBackward})},{priority:"low"}),this.downcastDispatcher.on("selection",(t,e,i)=>{const n=e.selection;if(!n.isCollapsed)return;if(!i.consumable.consume(n,"selection"))return;const o=i.writer,s=n.getFirstPosition(),r=i.mapper.toViewPosition(s),a=o.breakAttributes(r);o.setSelection(a)},{priority:"low"}),this.view.document.roots.bindTo(this.model.document.roots).using(t=>{if("$graveyard"==t.rootName)return null;const e=new Jn(t.name);return e.rootName=t.rootName,e._document=this.view.document,this.mapper.bindElements(t,e),e})}destroy(){this.view.destroy(),this.stopListening()}}vi(Jr,Hn);class Zr{constructor(){this._commands=new Map}add(t,e){this._commands.set(t,e)}get(t){return this._commands.get(t)}execute(t,...e){const i=this.get(t);if(!i)throw new hi.b("commandcollection-command-not-found: Command does not exist.",this,{commandName:t});i.execute(...e)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const t of this.commands())t.destroy()}}class Xr{constructor(){this._consumables=new Map}add(t,e){let i;t.is("text")||t.is("documentFragment")?this._consumables.set(t,!0):(this._consumables.has(t)?i=this._consumables.get(t):(i=new ta,this._consumables.set(t,i)),i.add(e))}test(t,e){const i=this._consumables.get(t);return void 0===i?null:t.is("text")||t.is("documentFragment")?i:i.test(e)}consume(t,e){return!!this.test(t,e)&&(t.is("text")||t.is("documentFragment")?this._consumables.set(t,!1):this._consumables.get(t).consume(e),!0)}revert(t,e){const i=this._consumables.get(t);void 0!==i&&(t.is("text")||t.is("documentFragment")?this._consumables.set(t,!0):i.revert(e))}static consumablesFromElement(t){const e={name:!0,attributes:[],classes:[],styles:[]},i=t.getAttributeKeys();for(const t of i)"style"!=t&&"class"!=t&&e.attributes.push(t);const n=t.getClassNames();for(const t of n)e.classes.push(t);const o=t.getStyleNames();for(const t of o)e.styles.push(t);return e}static createFrom(t,e){if(e||(e=new Xr),t.is("text"))return e.add(t),e;t.is("element")&&e.add(t,Xr.consumablesFromElement(t)),t.is("documentFragment")&&e.add(t);for(const i of t.getChildren())e=Xr.createFrom(i,e);return e}}class ta{constructor(){this._canConsumeName=null,this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(t){t.name&&(this._canConsumeName=!0);for(const e in this._consumables)e in t&&this._add(e,t[e])}test(t){if(t.name&&!this._canConsumeName)return this._canConsumeName;for(const e in this._consumables)if(e in t){const i=this._test(e,t[e]);if(!0!==i)return i}return!0}consume(t){t.name&&(this._canConsumeName=!1);for(const e in this._consumables)e in t&&this._consume(e,t[e])}revert(t){t.name&&(this._canConsumeName=!0);for(const e in this._consumables)e in t&&this._revert(e,t[e])}_add(t,e){const i=Lt(e)?e:[e],n=this._consumables[t];for(const e of i){if("attributes"===t&&("class"===e||"style"===e))throw new hi.b("viewconsumable-invalid-attribute: Classes and styles should be handled separately.",this);if(n.set(e,!0),"styles"===t)for(const t of En.getRelatedStyles(e))n.set(t,!0)}}_test(t,e){const i=Lt(e)?e:[e],n=this._consumables[t];for(const e of i)if("attributes"!==t||"class"!==e&&"style"!==e){const t=n.get(e);if(void 0===t)return null;if(!t)return!1}else{const t="class"==e?"classes":"styles",i=this._test(t,[...this._consumables[t].keys()]);if(!0!==i)return i}return!0}_consume(t,e){const i=Lt(e)?e:[e],n=this._consumables[t];for(const e of i)if("attributes"!==t||"class"!==e&&"style"!==e){if(n.set(e,!1),"styles"==t)for(const t of En.getRelatedStyles(e))n.set(t,!1)}else{const t="class"==e?"classes":"styles";this._consume(t,[...this._consumables[t].keys()])}}_revert(t,e){const i=Lt(e)?e:[e],n=this._consumables[t];for(const e of i)if("attributes"!==t||"class"!==e&&"style"!==e){!1===n.get(e)&&n.set(e,!0)}else{const t="class"==e?"classes":"styles";this._revert(t,[...this._consumables[t].keys()])}}}class ea{constructor(){this._sourceDefinitions={},this._attributeProperties={},this.decorate("checkChild"),this.decorate("checkAttribute"),this.on("checkAttribute",(t,e)=>{e[0]=new ia(e[0])},{priority:"highest"}),this.on("checkChild",(t,e)=>{e[0]=new ia(e[0]),e[1]=this.getDefinition(e[1])},{priority:"highest"})}register(t,e){if(this._sourceDefinitions[t])throw new hi.b("schema-cannot-register-item-twice: A single item cannot be registered twice in the schema.",this,{itemName:t});this._sourceDefinitions[t]=[Object.assign({},e)],this._clearCache()}extend(t,e){if(!this._sourceDefinitions[t])throw new hi.b("schema-cannot-extend-missing-item: Cannot extend an item which was not registered yet.",this,{itemName:t});this._sourceDefinitions[t].push(Object.assign({},e)),this._clearCache()}getDefinitions(){return this._compiledDefinitions||this._compile(),this._compiledDefinitions}getDefinition(t){let e;return e="string"==typeof t?t:t.is&&(t.is("text")||t.is("textProxy"))?"$text":t.name,this.getDefinitions()[e]}isRegistered(t){return!!this.getDefinition(t)}isBlock(t){const e=this.getDefinition(t);return!(!e||!e.isBlock)}isLimit(t){const e=this.getDefinition(t);return!!e&&!(!e.isLimit&&!e.isObject)}isObject(t){const e=this.getDefinition(t);return!(!e||!e.isObject)}isInline(t){const e=this.getDefinition(t);return!(!e||!e.isInline)}checkChild(t,e){return!!e&&this._checkContextMatch(e,t)}checkAttribute(t,e){const i=this.getDefinition(t.last);return!!i&&i.allowAttributes.includes(e)}checkMerge(t,e=null){if(t instanceof _r){const e=t.nodeBefore,i=t.nodeAfter;if(!(e instanceof br))throw new hi.b("schema-check-merge-no-element-before: The node before the merge position must be an element.",this);if(!(i instanceof br))throw new hi.b("schema-check-merge-no-element-after: The node after the merge position must be an element.",this);return this.checkMerge(e,i)}for(const i of e.getChildren())if(!this.checkChild(t,i))return!1;return!0}addChildCheck(t){this.on("checkChild",(e,[i,n])=>{if(!n)return;const o=t(i,n);"boolean"==typeof o&&(e.stop(),e.return=o)},{priority:"high"})}addAttributeCheck(t){this.on("checkAttribute",(e,[i,n])=>{const o=t(i,n);"boolean"==typeof o&&(e.stop(),e.return=o)},{priority:"high"})}setAttributeProperties(t,e){this._attributeProperties[t]=Object.assign(this.getAttributeProperties(t),e)}getAttributeProperties(t){return this._attributeProperties[t]||{}}getLimitElement(t){let e;if(t instanceof _r)e=t.parent;else{e=(t instanceof vr?[t]:Array.from(t.getRanges())).reduce((t,e)=>{const i=e.getCommonAncestor();return t?t.getCommonAncestor(i,{includeSelf:!0}):i},null)}for(;!this.isLimit(e)&&e.parent;)e=e.parent;return e}checkAttributeInSelection(t,e){if(t.isCollapsed){const i=[...t.getFirstPosition().getAncestors(),new mr("",t.getAttributes())];return this.checkAttribute(i,e)}{const i=t.getRanges();for(const t of i)for(const i of t)if(this.checkAttribute(i.item,e))return!0}return!1}*getValidRanges(t,e){t=function*(t){for(const e of t)yield*e.getMinimalFlatRanges()}(t);for(const i of t)yield*this._getValidRangesForRange(i,e)}getNearestSelectionRange(t,e="both"){if(this.checkChild(t,"$text"))return new vr(t);let i,n;"both"!=e&&"backward"!=e||(i=new wr({startPosition:t,direction:"backward"})),"both"!=e&&"forward"!=e||(n=new wr({startPosition:t}));for(const t of function*(t,e){let i=!1;for(;!i;){if(i=!0,t){const e=t.next();e.done||(i=!1,yield{walker:t,value:e.value})}if(e){const t=e.next();t.done||(i=!1,yield{walker:e,value:t.value})}}}(i,n)){const e=t.walker==i?"elementEnd":"elementStart",n=t.value;if(n.type==e&&this.isObject(n.item))return vr._createOn(n.item);if(this.checkChild(n.nextPosition,"$text"))return new vr(n.nextPosition)}return null}findAllowedParent(t,e){let i=t.parent;for(;i;){if(this.checkChild(i,e))return i;if(this.isLimit(i))return null;i=i.parent}return null}removeDisallowedAttributes(t,e){for(const i of t)if(i.is("text"))fa(this,i,e);else{const t=vr._createIn(i).getPositions();for(const i of t){fa(this,i.nodeBefore||i.parent,e)}}}createContext(t){return new ia(t)}_clearCache(){this._compiledDefinitions=null}_compile(){const t={},e=this._sourceDefinitions,i=Object.keys(e);for(const n of i)t[n]=na(e[n],n);for(const e of i)oa(t,e);for(const e of i)sa(t,e);for(const e of i)ra(t,e),aa(t,e);for(const e of i)ca(t,e),la(t,e);this._compiledDefinitions=t}_checkContextMatch(t,e,i=e.length-1){const n=e.getItem(i);if(t.allowIn.includes(n.name)){if(0==i)return!0;{const t=this.getDefinition(n);return this._checkContextMatch(t,e,i-1)}}return!1}*_getValidRangesForRange(t,e){let i=t.start,n=t.start;for(const o of t.getItems({shallow:!0}))o.is("element")&&(yield*this._getValidRangesForRange(vr._createIn(o),e)),this.checkAttribute(o,e)||(i.isEqual(n)||(yield new vr(i,n)),i=_r._createAfter(o)),n=_r._createAfter(o);i.isEqual(n)||(yield new vr(i,n))}}vi(ea,Hn);class ia{constructor(t){if(t instanceof ia)return t;"string"==typeof t?t=[t]:Array.isArray(t)||(t=t.getAncestors({includeSelf:!0})),t[0]&&"string"!=typeof t[0]&&t[0].is("documentFragment")&&t.shift(),this._items=t.map(ua)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(t){const e=new ia([t]);return e._items=[...this._items,...e._items],e}getItem(t){return this._items[t]}*getNames(){yield*this._items.map(t=>t.name)}endsWith(t){return Array.from(this.getNames()).join(" ").endsWith(t)}startsWith(t){return Array.from(this.getNames()).join(" ").startsWith(t)}}function na(t,e){const i={name:e,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],inheritTypesFrom:[]};return function(t,e){for(const i of t){const t=Object.keys(i).filter(t=>t.startsWith("is"));for(const n of t)e[n]=i[n]}}(t,i),da(t,i,"allowIn"),da(t,i,"allowContentOf"),da(t,i,"allowWhere"),da(t,i,"allowAttributes"),da(t,i,"allowAttributesOf"),da(t,i,"inheritTypesFrom"),function(t,e){for(const i of t){const t=i.inheritAllFrom;t&&(e.allowContentOf.push(t),e.allowWhere.push(t),e.allowAttributesOf.push(t),e.inheritTypesFrom.push(t))}}(t,i),i}function oa(t,e){for(const i of t[e].allowContentOf)if(t[i]){ha(t,i).forEach(t=>{t.allowIn.push(e)})}delete t[e].allowContentOf}function sa(t,e){for(const i of t[e].allowWhere){const n=t[i];if(n){const i=n.allowIn;t[e].allowIn.push(...i)}}delete t[e].allowWhere}function ra(t,e){for(const i of t[e].allowAttributesOf){const n=t[i];if(n){const i=n.allowAttributes;t[e].allowAttributes.push(...i)}}delete t[e].allowAttributesOf}function aa(t,e){const i=t[e];for(const e of i.inheritTypesFrom){const n=t[e];if(n){const t=Object.keys(n).filter(t=>t.startsWith("is"));for(const e of t)e in i||(i[e]=n[e])}}delete i.inheritTypesFrom}function ca(t,e){const i=t[e],n=i.allowIn.filter(e=>t[e]);i.allowIn=Array.from(new Set(n))}function la(t,e){const i=t[e];i.allowAttributes=Array.from(new Set(i.allowAttributes))}function da(t,e,i){for(const n of t)"string"==typeof n[i]?e[i].push(n[i]):Array.isArray(n[i])&&e[i].push(...n[i])}function ha(t,e){const i=t[e];return(n=t,Object.keys(n).map(t=>n[t])).filter(t=>t.allowIn.includes(i.name));var n}function ua(t){return"string"==typeof t?{name:t,*getAttributeKeys(){},getAttribute(){}}:{name:t.is("element")?t.name:"$text",*getAttributeKeys(){yield*t.getAttributeKeys()},getAttribute:e=>t.getAttribute(e)}}function fa(t,e,i){for(const n of e.getAttributeKeys())t.checkAttribute(e,n)||i.removeAttribute(n,e)}class ma{constructor(t={}){this._splitParts=new Map,this._modelCursor=null,this.conversionApi=Object.assign({},t),this.conversionApi.convertItem=this._convertItem.bind(this),this.conversionApi.convertChildren=this._convertChildren.bind(this),this.conversionApi.splitToAllowedParent=this._splitToAllowedParent.bind(this),this.conversionApi.getSplitParts=this._getSplitParts.bind(this)}convert(t,e,i=["$root"]){this.fire("viewCleanup",t),this._modelCursor=function(t,e){let i;for(const n of new ia(t)){const t={};for(const e of n.getAttributeKeys())t[e]=n.getAttribute(e);const o=e.createElement(n.name,t);i&&e.append(o,i),i=_r._createAt(o,0)}return i}(i,e),this.conversionApi.writer=e,this.conversionApi.consumable=Xr.createFrom(t),this.conversionApi.store={};const{modelRange:n}=this._convertItem(t,this._modelCursor),o=e.createDocumentFragment();if(n){this._removeEmptyElements();for(const t of Array.from(this._modelCursor.parent.getChildren()))e.append(t,o);o.markers=function(t,e){const i=new Set,n=new Map,o=vr._createIn(t).getItems();for(const t of o)"$marker"==t.name&&i.add(t);for(const t of i){const i=t.getAttribute("data-name"),o=e.createPositionBefore(t);n.has(i)?n.get(i).end=o.clone():n.set(i,new vr(o.clone())),e.remove(t)}return n}(o,e)}return this._modelCursor=null,this._splitParts.clear(),this.conversionApi.writer=null,this.conversionApi.store=null,o}_convertItem(t,e){const i=Object.assign({viewItem:t,modelCursor:e,modelRange:null});if(t.is("element")?this.fire("element:"+t.name,i,this.conversionApi):t.is("text")?this.fire("text",i,this.conversionApi):this.fire("documentFragment",i,this.conversionApi),i.modelRange&&!(i.modelRange instanceof vr))throw new hi.b("view-conversion-dispatcher-incorrect-result: Incorrect conversion result was dropped.",this);return{modelRange:i.modelRange,modelCursor:i.modelCursor}}_convertChildren(t,e){const i=new vr(e);let n=e;for(const e of Array.from(t.getChildren())){const t=this._convertItem(e,n);t.modelRange instanceof vr&&(i.end=t.modelRange.end,n=t.modelCursor)}return{modelRange:i,modelCursor:n}}_splitToAllowedParent(t,e){const i=this.conversionApi.schema.findAllowedParent(e,t);if(!i)return null;if(i===e.parent)return{position:e};if(this._modelCursor.parent.getAncestors().includes(i))return null;const n=this.conversionApi.writer.split(e,i),o=[];for(const t of n.range.getWalker())if("elementEnd"==t.type)o.push(t.item);else{const e=o.pop(),i=t.item;this._registerSplitPair(e,i)}return{position:n.position,cursorParent:n.range.end.parent}}_registerSplitPair(t,e){this._splitParts.has(t)||this._splitParts.set(t,[t]);const i=this._splitParts.get(t);this._splitParts.set(e,i),i.push(e)}_getSplitParts(t){let e;return e=this._splitParts.has(t)?this._splitParts.get(t):[t],e}_removeEmptyElements(){let t=!1;for(const e of this._splitParts.keys())e.isEmpty&&(this.conversionApi.writer.remove(e),this._splitParts.delete(e),t=!0);t&&this._removeEmptyElements()}}vi(ma,mi);class ga{constructor(t,e){this.model=t,this.processor=e,this.mapper=new yr,this.downcastDispatcher=new Cr({mapper:this.mapper}),this.downcastDispatcher.on("insert:$text",(t,e,i)=>{if(!i.consumable.consume(e.item,"insert"))return;const n=i.writer,o=i.mapper.toViewPosition(e.range.start),s=n.createText(e.item.data);n.insert(o,s)},{priority:"lowest"}),this.upcastDispatcher=new ma({schema:t.schema}),this.upcastDispatcher.on("text",(t,e,i)=>{if(i.schema.checkChild(e.modelCursor,"$text")&&i.consumable.consume(e.viewItem)){const t=i.writer.createText(e.viewItem.data);i.writer.insert(t,e.modelCursor),e.modelRange=vr._createFromPositionAndShift(e.modelCursor,t.offsetSize),e.modelCursor=e.modelRange.end}},{priority:"lowest"}),this.upcastDispatcher.on("element",(t,e,i)=>{if(!e.modelRange&&i.consumable.consume(e.viewItem,{name:!0})){const{modelRange:t,modelCursor:n}=i.convertChildren(e.viewItem,e.modelCursor);e.modelRange=t,e.modelCursor=n}},{priority:"lowest"}),this.upcastDispatcher.on("documentFragment",(t,e,i)=>{if(!e.modelRange&&i.consumable.consume(e.viewItem,{name:!0})){const{modelRange:t,modelCursor:n}=i.convertChildren(e.viewItem,e.modelCursor);e.modelRange=t,e.modelCursor=n}},{priority:"lowest"}),this.decorate("init"),this.on("init",()=>{this.fire("ready")},{priority:"lowest"})}get(t){const{rootName:e="main",trim:i="empty"}=t||{};if(!this._checkIfRootsExists([e]))throw new hi.b("datacontroller-get-non-existent-root: Attempting to get data from a non-existing root.",this);const n=this.model.document.getRoot(e);return"empty"!==i||this.model.hasContent(n,{ignoreWhitespaces:!0})?this.stringify(n):""}stringify(t){const e=this.toView(t);return this.processor.toData(e)}toView(t){this.mapper.clearBindings();const e=vr._createIn(t),i=new Ao,n=new Co(new so);if(this.mapper.bindElements(t,i),this.downcastDispatcher.convertInsert(e,n),!t.is("documentFragment")){const e=function(t){const e=[],i=t.root.document;if(!i)return[];const n=vr._createIn(t);for(const t of i.model.markers){const i=n.getIntersection(t.getRange());i&&e.push([t.name,i])}return e}(t);for(const[t,i]of e)this.downcastDispatcher.convertMarkerAdd(t,i,n)}return i}init(t){if(this.model.document.version)throw new hi.b("datacontroller-init-document-not-empty: Trying to set initial data to not empty document.",this);let e={};if("string"==typeof t?e.main=t:e=t,!this._checkIfRootsExists(Object.keys(e)))throw new hi.b("datacontroller-init-non-existent-root: Attempting to init data on a non-existing root.",this);return this.model.enqueueChange("transparent",t=>{for(const i of Object.keys(e)){const n=this.model.document.getRoot(i);t.insert(this.parse(e[i],n),n,0)}}),Promise.resolve()}set(t){let e={};if("string"==typeof t?e.main=t:e=t,!this._checkIfRootsExists(Object.keys(e)))throw new hi.b("datacontroller-set-non-existent-root: Attempting to set data on a non-existing root.",this);this.model.enqueueChange("transparent",t=>{t.setSelection(null),t.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const i of Object.keys(e)){const n=this.model.document.getRoot(i);t.remove(t.createRangeIn(n)),t.insert(this.parse(e[i],n),n,0)}})}parse(t,e="$root"){const i=this.processor.toView(t);return this.toModel(i,e)}toModel(t,e="$root"){return this.model.change(i=>this.upcastDispatcher.convert(t,i,e))}destroy(){this.stopListening()}_checkIfRootsExists(t){for(const e of t)if(!this.model.document.getRootNames().includes(e))return!1;return!0}}vi(ga,Hn);class pa{constructor(t,e){this._helpers=new Map,this._downcast=Array.isArray(t)?t:[t],this._createConversionHelpers({name:"downcast",dispatchers:this._downcast,isDowncast:!0}),this._upcast=Array.isArray(e)?e:[e],this._createConversionHelpers({name:"upcast",dispatchers:this._upcast,isDowncast:!1})}addAlias(t,e){const i=this._downcast.includes(e);if(!this._upcast.includes(e)&&!i)throw new hi.b("conversion-add-alias-dispatcher-not-registered: Trying to register and alias for a dispatcher that nas not been registered.",this);this._createConversionHelpers({name:t,dispatchers:[e],isDowncast:i})}for(t){if(!this._helpers.has(t))throw new hi.b("conversion-for-unknown-group: Trying to add a converter to an unknown dispatchers group.",this);return this._helpers.get(t)}elementToElement(t){this.for("downcast").elementToElement(t);for(const{model:e,view:i}of ba(t))this.for("upcast").elementToElement({model:e,view:i,converterPriority:t.converterPriority})}attributeToElement(t){this.for("downcast").attributeToElement(t);for(const{model:e,view:i}of ba(t))this.for("upcast").elementToAttribute({view:i,model:e,converterPriority:t.converterPriority})}attributeToAttribute(t){this.for("downcast").attributeToAttribute(t);for(const{model:e,view:i}of ba(t))this.for("upcast").attributeToAttribute({view:i,model:e})}_createConversionHelpers({name:t,dispatchers:e,isDowncast:i}){if(this._helpers.has(t))throw new hi.b("conversion-group-exists: Trying to register a group name that has already been registered.",this);const n=i?new Br(e):new $r(e);this._helpers.set(t,n)}}function*ba(t){if(t.model.values)for(const e of t.model.values){const i={key:t.model.key,value:e},n=t.view[e],o=t.upcastAlso?t.upcastAlso[e]:void 0;yield*wa(i,n,o)}else yield*wa(t.model,t.view,t.upcastAlso)}function*wa(t,e,i){if(yield{model:t,view:e},i){i=Array.isArray(i)?i:[i];for(const e of i)yield{model:t,view:e}}}class ka{constructor(t="default"){this.operations=[],this.type=t}get baseVersion(){for(const t of this.operations)if(null!==t.baseVersion)return t.baseVersion;return null}addOperation(t){return t.batch=this,this.operations.push(t),t}}class _a{constructor(t){this.baseVersion=t,this.isDocumentOperation=null!==this.baseVersion,this.batch=null}_validate(){}toJSON(){const t=Object.assign({},this);return t.__className=this.constructor.className,delete t.batch,delete t.isDocumentOperation,t}static get className(){return"Operation"}static fromJSON(t){return new this(t.baseVersion)}}class va{constructor(t){this.markers=new Map,this._children=new pr,t&&this._insertChild(0,t)}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return 0===this.childCount}get root(){return this}get parent(){return null}is(t){return"documentFragment"==t||"model:documentFragment"==t}getChild(t){return this._children.getNode(t)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(t){return this._children.getNodeIndex(t)}getChildStartOffset(t){return this._children.getNodeStartOffset(t)}getPath(){return[]}getNodeByPath(t){let e=this;for(const i of t)e=e.getChild(e.offsetToIndex(i));return e}offsetToIndex(t){return this._children.offsetToIndex(t)}toJSON(){const t=[];for(const e of this._children)t.push(e.toJSON());return t}static fromJSON(t){const e=[];for(const i of t)i.name?e.push(br.fromJSON(i)):e.push(mr.fromJSON(i));return new va(e)}_appendChild(t){this._insertChild(this.childCount,t)}_insertChild(t,e){const i=function(t){if("string"==typeof t)return[new mr(t)];Ri(t)||(t=[t]);return Array.from(t).map(t=>"string"==typeof t?new mr(t):t instanceof gr?new mr(t.data,t.getAttributes()):t)}(e);for(const t of i)null!==t.parent&&t._remove(),t.parent=this;this._children._insertNodes(t,i)}_removeChildren(t,e=1){const i=this._children._removeNodes(t,e);for(const t of i)t.parent=null;return i}}function ya(t,e){const i=(e=Ca(e)).reduce((t,e)=>t+e.offsetSize,0),n=t.parent;Pa(t);const o=t.index;return n._insertChild(o,e),Ta(n,o+e.length),Ta(n,o),new vr(t,t.getShiftedBy(i))}function xa(t){if(!t.isFlat)throw new hi.b("operation-utils-remove-range-not-flat: Trying to remove a range which starts and ends in different element.",this);const e=t.start.parent;Pa(t.start),Pa(t.end);const i=e._removeChildren(t.start.index,t.end.index-t.start.index);return Ta(e,t.start.index),i}function Aa(t,e){if(!t.isFlat)throw new hi.b("operation-utils-move-range-not-flat: Trying to move a range which starts and ends in different element.",this);const i=xa(t);return ya(e=e._getTransformedByDeletion(t.start,t.end.offset-t.start.offset),i)}function Ca(t){const e=[];t instanceof Array||(t=[t]);for(let i=0;it.maxOffset)throw new hi.b("move-operation-nodes-do-not-exist: The nodes which should be moved do not exist.",this);if(t===e&&i=i&&this.targetPosition.path[t]t._clone(!0))),e=new Oa(this.position,t,this.baseVersion);return e.shouldReceiveAttributes=this.shouldReceiveAttributes,e}getReversed(){const t=this.position.root.document.graveyard,e=new _r(t,[0]);return new Na(this.position,this.nodes.maxOffset,e,this.baseVersion+1)}_validate(){const t=this.position.parent;if(!t||t.maxOffsett._clone(!0))),ya(this.position,t)}toJSON(){const t=super.toJSON();return t.position=this.position.toJSON(),t.nodes=this.nodes.toJSON(),t}static get className(){return"InsertOperation"}static fromJSON(t,e){const i=[];for(const e of t.nodes)e.name?i.push(br.fromJSON(e)):i.push(mr.fromJSON(e));const n=new Oa(_r.fromJSON(t.position,e),i,t.baseVersion);return n.shouldReceiveAttributes=t.shouldReceiveAttributes,n}}class Ra extends _a{constructor(t,e,i,n,o,s){super(s),this.name=t,this.oldRange=e?e.clone():null,this.newRange=i?i.clone():null,this.affectsData=o,this._markers=n}get type(){return"marker"}clone(){return new Ra(this.name,this.oldRange,this.newRange,this._markers,this.affectsData,this.baseVersion)}getReversed(){return new Ra(this.name,this.newRange,this.oldRange,this._markers,this.affectsData,this.baseVersion+1)}_execute(){const t=this.newRange?"_set":"_remove";this._markers[t](this.name,this.newRange,!0,this.affectsData)}toJSON(){const t=super.toJSON();return this.oldRange&&(t.oldRange=this.oldRange.toJSON()),this.newRange&&(t.newRange=this.newRange.toJSON()),delete t._markers,t}static get className(){return"MarkerOperation"}static fromJSON(t,e){return new Ra(t.name,t.oldRange?vr.fromJSON(t.oldRange,e):null,t.newRange?vr.fromJSON(t.newRange,e):null,e.model.markers,t.affectsData,t.baseVersion)}}class La extends _a{constructor(t,e,i,n){super(n),this.position=t,this.position.stickiness="toNext",this.oldName=e,this.newName=i}get type(){return"rename"}clone(){return new La(this.position.clone(),this.oldName,this.newName,this.baseVersion)}getReversed(){return new La(this.position.clone(),this.newName,this.oldName,this.baseVersion+1)}_validate(){const t=this.position.nodeAfter;if(!(t instanceof br))throw new hi.b("rename-operation-wrong-position: Given position is invalid or node after it is not an instance of Element.",this);if(t.name!==this.oldName)throw new hi.b("rename-operation-wrong-name: Element to change has different name than operation's old name.",this)}_execute(){this.position.nodeAfter.name=this.newName}toJSON(){const t=super.toJSON();return t.position=this.position.toJSON(),t}static get className(){return"RenameOperation"}static fromJSON(t,e){return new La(_r.fromJSON(t.position,e),t.oldName,t.newName,t.baseVersion)}}class Da extends _a{constructor(t,e,i,n,o){super(o),this.root=t,this.key=e,this.oldValue=i,this.newValue=n}get type(){return null===this.oldValue?"addRootAttribute":null===this.newValue?"removeRootAttribute":"changeRootAttribute"}clone(){return new Da(this.root,this.key,this.oldValue,this.newValue,this.baseVersion)}getReversed(){return new Da(this.root,this.key,this.newValue,this.oldValue,this.baseVersion+1)}_validate(){if(this.root!=this.root.root||this.root.is("documentFragment"))throw new hi.b("rootattribute-operation-not-a-root: The element to change is not a root element.",this,{root:this.root,key:this.key});if(null!==this.oldValue&&this.root.getAttribute(this.key)!==this.oldValue)throw new hi.b("rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation's old attribute value.",this,{root:this.root,key:this.key});if(null===this.oldValue&&null!==this.newValue&&this.root.hasAttribute(this.key))throw new hi.b("rootattribute-operation-attribute-exists: The attribute with given key already exists.",this,{root:this.root,key:this.key})}_execute(){null!==this.newValue?this.root._setAttribute(this.key,this.newValue):this.root._removeAttribute(this.key)}toJSON(){const t=super.toJSON();return t.root=this.root.toJSON(),t}static get className(){return"RootAttributeOperation"}static fromJSON(t,e){if(!e.getRoot(t.root))throw new hi.b("rootattribute-operation-fromjson-no-root: Cannot create RootAttributeOperation. Root with specified name does not exist.",this,{rootName:t.root});return new Da(e.getRoot(t.root),t.key,t.oldValue,t.newValue,t.baseVersion)}}class za extends _a{constructor(t,e,i,n,o){super(o),this.sourcePosition=t.clone(),this.sourcePosition.stickiness="toPrevious",this.howMany=e,this.targetPosition=i.clone(),this.targetPosition.stickiness="toNext",this.graveyardPosition=n.clone()}get type(){return"merge"}get deletionPosition(){return new _r(this.sourcePosition.root,this.sourcePosition.path.slice(0,-1))}get movedRange(){const t=this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);return new vr(this.sourcePosition,t)}clone(){return new this.constructor(this.sourcePosition,this.howMany,this.targetPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const t=this.targetPosition._getTransformedByMergeOperation(this),e=this.sourcePosition.path.slice(0,-1),i=new _r(this.sourcePosition.root,e)._getTransformedByMergeOperation(this),n=new ja(t,this.howMany,this.graveyardPosition,this.baseVersion+1);return n.insertionPosition=i,n}_validate(){const t=this.sourcePosition.parent,e=this.targetPosition.parent;if(!t.parent)throw new hi.b("merge-operation-source-position-invalid: Merge source position is invalid.",this);if(!e.parent)throw new hi.b("merge-operation-target-position-invalid: Merge target position is invalid.",this);if(this.howMany!=t.maxOffset)throw new hi.b("merge-operation-how-many-invalid: Merge operation specifies wrong number of nodes to move.",this)}_execute(){const t=this.sourcePosition.parent;Aa(vr._createIn(t),this.targetPosition),Aa(vr._createOn(t),this.graveyardPosition)}toJSON(){const t=super.toJSON();return t.sourcePosition=t.sourcePosition.toJSON(),t.targetPosition=t.targetPosition.toJSON(),t.graveyardPosition=t.graveyardPosition.toJSON(),t}static get className(){return"MergeOperation"}static fromJSON(t,e){const i=_r.fromJSON(t.sourcePosition,e),n=_r.fromJSON(t.targetPosition,e),o=_r.fromJSON(t.graveyardPosition,e);return new this(i,t.howMany,n,o,t.baseVersion)}}class ja extends _a{constructor(t,e,i,n){super(n),this.splitPosition=t.clone(),this.splitPosition.stickiness="toNext",this.howMany=e,this.insertionPosition=ja.getInsertionPosition(t),this.insertionPosition.stickiness="toNone",this.graveyardPosition=i?i.clone():null,this.graveyardPosition&&(this.graveyardPosition.stickiness="toNext")}get type(){return"split"}get moveTargetPosition(){const t=this.insertionPosition.path.slice();return t.push(0),new _r(this.insertionPosition.root,t)}get movedRange(){const t=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new vr(this.splitPosition,t)}clone(){const t=new this.constructor(this.splitPosition,this.howMany,this.graveyardPosition,this.baseVersion);return t.insertionPosition=this.insertionPosition,t}getReversed(){const t=this.splitPosition.root.document.graveyard,e=new _r(t,[0]);return new za(this.moveTargetPosition,this.howMany,this.splitPosition,e,this.baseVersion+1)}_validate(){const t=this.splitPosition.parent,e=this.splitPosition.offset;if(!t||t.maxOffset{for(const e of t.getAttributeKeys())this.removeAttribute(e,t)};if(t instanceof vr)for(const i of t.getItems())e(i);else e(t)}move(t,e,i){if(this._assertWriterUsedCorrectly(),!(t instanceof vr))throw new hi.b("writer-move-invalid-range: Invalid range to move.",this);if(!t.isFlat)throw new hi.b("writer-move-range-not-flat: Range to move is not flat.",this);const n=_r._createAt(e,i);if(n.isEqual(t.start))return;if(this._addOperationForAffectedMarkers("move",t),!qa(t.root,n.root))throw new hi.b("writer-move-different-document: Range is going to be moved between different documents.",this);const o=t.root.document?t.root.document.version:null,s=new Na(t.start,t.end.offset-t.start.offset,n,o);this.batch.addOperation(s),this.model.applyOperation(s)}remove(t){this._assertWriterUsedCorrectly();const e=(t instanceof vr?t:vr._createOn(t)).getMinimalFlatRanges().reverse();for(const t of e)this._addOperationForAffectedMarkers("move",t),Wa(t.start,t.end.offset-t.start.offset,this.batch,this.model)}merge(t){this._assertWriterUsedCorrectly();const e=t.nodeBefore,i=t.nodeAfter;if(this._addOperationForAffectedMarkers("merge",t),!(e instanceof br))throw new hi.b("writer-merge-no-element-before: Node before merge position must be an element.",this);if(!(i instanceof br))throw new hi.b("writer-merge-no-element-after: Node after merge position must be an element.",this);t.root.document?this._merge(t):this._mergeDetached(t)}createPositionFromPath(t,e,i){return this.model.createPositionFromPath(t,e,i)}createPositionAt(t,e){return this.model.createPositionAt(t,e)}createPositionAfter(t){return this.model.createPositionAfter(t)}createPositionBefore(t){return this.model.createPositionBefore(t)}createRange(t,e){return this.model.createRange(t,e)}createRangeIn(t){return this.model.createRangeIn(t)}createRangeOn(t){return this.model.createRangeOn(t)}createSelection(t,e,i){return this.model.createSelection(t,e,i)}_mergeDetached(t){const e=t.nodeBefore,i=t.nodeAfter;this.move(vr._createIn(i),_r._createAt(e,"end")),this.remove(i)}_merge(t){const e=_r._createAt(t.nodeBefore,"end"),i=_r._createAt(t.nodeAfter,0),n=t.root.document.graveyard,o=new _r(n,[0]),s=t.root.document.version,r=new za(i,t.nodeAfter.maxOffset,e,o,s);this.batch.addOperation(r),this.model.applyOperation(r)}rename(t,e){if(this._assertWriterUsedCorrectly(),!(t instanceof br))throw new hi.b("writer-rename-not-element-instance: Trying to rename an object which is not an instance of Element.",this);const i=t.root.document?t.root.document.version:null,n=new La(_r._createBefore(t),t.name,e,i);this.batch.addOperation(n),this.model.applyOperation(n)}split(t,e){this._assertWriterUsedCorrectly();let i,n,o=t.parent;if(!o.parent)throw new hi.b("writer-split-element-no-parent: Element with no parent can not be split.",this);if(e||(e=o.parent),!t.parent.getAncestors({includeSelf:!0}).includes(e))throw new hi.b("writer-split-invalid-limit-element: Limit element is not a position ancestor.",this);do{const e=o.root.document?o.root.document.version:null,s=o.maxOffset-t.offset,r=new ja(t,s,null,e);this.batch.addOperation(r),this.model.applyOperation(r),i||n||(i=o,n=t.parent.nextSibling),o=(t=this.createPositionAfter(t.parent)).parent}while(o!==e);return{position:t,range:new vr(_r._createAt(i,"end"),_r._createAt(n,0))}}wrap(t,e){if(this._assertWriterUsedCorrectly(),!t.isFlat)throw new hi.b("writer-wrap-range-not-flat: Range to wrap is not flat.",this);const i=e instanceof br?e:new br(e);if(i.childCount>0)throw new hi.b("writer-wrap-element-not-empty: Element to wrap with is not empty.",this);if(null!==i.parent)throw new hi.b("writer-wrap-element-attached: Element to wrap with is already attached to tree model.",this);this.insert(i,t.start);const n=new vr(t.start.getShiftedBy(1),t.end.getShiftedBy(1));this.move(n,_r._createAt(i,0))}unwrap(t){if(this._assertWriterUsedCorrectly(),null===t.parent)throw new hi.b("writer-unwrap-element-no-parent: Trying to unwrap an element which has no parent.",this);this.move(vr._createIn(t),this.createPositionAfter(t)),this.remove(t)}addMarker(t,e){if(this._assertWriterUsedCorrectly(),!e||"boolean"!=typeof e.usingOperation)throw new hi.b("writer-addMarker-no-usingOperation: The options.usingOperation parameter is required when adding a new marker.",this);const i=e.usingOperation,n=e.range,o=void 0!==e.affectsData&&e.affectsData;if(this.model.markers.has(t))throw new hi.b("writer-addMarker-marker-exists: Marker with provided name already exists.",this);if(!n)throw new hi.b("writer-addMarker-no-range: Range parameter is required when adding a new marker.",this);return i?(Ua(this,t,null,n,o),this.model.markers.get(t)):this.model.markers._set(t,n,i,o)}updateMarker(t,e){this._assertWriterUsedCorrectly();const i="string"==typeof t?t:t.name,n=this.model.markers.get(i);if(!n)throw new hi.b("writer-updateMarker-marker-not-exists: Marker with provided name does not exists.",this);if(!e)return void this.model.markers._refresh(n);const o="boolean"==typeof e.usingOperation,s="boolean"==typeof e.affectsData,r=s?e.affectsData:n.affectsData;if(!o&&!e.range&&!s)throw new hi.b("writer-updateMarker-wrong-options: One of the options is required - provide range, usingOperations or affectsData.",this);const a=n.getRange(),c=e.range?e.range:a;o&&e.usingOperation!==n.managedUsingOperations?e.usingOperation?Ua(this,i,null,c,r):(Ua(this,i,a,null,r),this.model.markers._set(i,c,void 0,r)):n.managedUsingOperations?Ua(this,i,a,c,r):this.model.markers._set(i,c,void 0,r)}removeMarker(t){this._assertWriterUsedCorrectly();const e="string"==typeof t?t:t.name;if(!this.model.markers.has(e))throw new hi.b("writer-removeMarker-no-marker: Trying to remove marker which does not exist.",this);const i=this.model.markers.get(e);i.managedUsingOperations?Ua(this,e,i.getRange(),null,i.affectsData):this.model.markers._remove(e)}setSelection(t,e,i){this._assertWriterUsedCorrectly(),this.model.document.selection._setTo(t,e,i)}setSelectionFocus(t,e){this._assertWriterUsedCorrectly(),this.model.document.selection._setFocus(t,e)}setSelectionAttribute(t,e){if(this._assertWriterUsedCorrectly(),"string"==typeof t)this._setSelectionAttribute(t,e);else for(const[e,i]of Li(t))this._setSelectionAttribute(e,i)}removeSelectionAttribute(t){if(this._assertWriterUsedCorrectly(),"string"==typeof t)this._removeSelectionAttribute(t);else for(const e of t)this._removeSelectionAttribute(e)}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(t){this.model.document.selection._restoreGravity(t)}_setSelectionAttribute(t,e){const i=this.model.document.selection;if(i.isCollapsed&&i.anchor.parent.isEmpty){const n=Lr._getStoreAttributeKey(t);this.setAttribute(n,e,i.anchor.parent)}i._setAttribute(t,e)}_removeSelectionAttribute(t){const e=this.model.document.selection;if(e.isCollapsed&&e.anchor.parent.isEmpty){const i=Lr._getStoreAttributeKey(t);this.removeAttribute(i,e.anchor.parent)}e._removeAttribute(t)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this)throw new hi.b("writer-incorrect-use: Trying to use a writer outside the change() block.",this)}_addOperationForAffectedMarkers(t,e){for(const i of this.model.markers){if(!i.managedUsingOperations)continue;const n=i.getRange();let o=!1;if("move"==t)o=e.containsPosition(n.start)||e.start.isEqual(n.start)||e.containsPosition(n.end)||e.end.isEqual(n.end);else{const t=e.nodeBefore,i=e.nodeAfter,s=n.start.parent==t&&n.start.isAtEnd,r=n.end.parent==i&&0==n.end.offset,a=n.end.nodeAfter==i,c=n.start.nodeAfter==i;o=s||r||a||c}o&&this.updateMarker(i.name,{range:n})}}}function Fa(t,e,i,n){const o=t.model,s=o.document;let r,a,c,l=n.start;for(const t of n.getWalker({shallow:!0}))c=t.item.getAttribute(e),r&&a!=c&&(a!=i&&d(),l=r),r=t.nextPosition,a=c;function d(){const n=new vr(l,r),c=n.root.document?s.version:null,d=new Ma(n,e,a,i,c);t.batch.addOperation(d),o.applyOperation(d)}r instanceof _r&&r!=l&&a!=i&&d()}function Ha(t,e,i,n){const o=t.model,s=o.document,r=n.getAttribute(e);let a,c;if(r!=i){if(n.root===n){const t=n.document?s.version:null;c=new Da(n,e,r,i,t)}else{a=new vr(_r._createBefore(n),t.createPositionAfter(n));const o=a.root.document?s.version:null;c=new Ma(a,e,r,i,o)}t.batch.addOperation(c),o.applyOperation(c)}}function Ua(t,e,i,n,o){const s=t.model,r=s.document,a=new Ra(e,i,n,s.markers,o,r.version);t.batch.addOperation(a),s.applyOperation(a)}function Wa(t,e,i,n){let o;if(t.root.document){const i=n.document,s=new _r(i.graveyard,[0]);o=new Na(t,e,s,i.version)}else o=new Ia(t,e);i.addOperation(o),n.applyOperation(o)}function qa(t,e){return t===e||t instanceof Va&&e instanceof Va}class $a{constructor(t){this._markerCollection=t,this._changesInElement=new Map,this._elementSnapshots=new Map,this._changedMarkers=new Map,this._changeCount=0,this._cachedChanges=null,this._cachedChangesWithGraveyard=null}get isEmpty(){return 0==this._changesInElement.size&&0==this._changedMarkers.size}refreshItem(t){if(this._isInInsertedElement(t.parent))return;this._markRemove(t.parent,t.startOffset,t.offsetSize),this._markInsert(t.parent,t.startOffset,t.offsetSize);const e=vr._createOn(t);for(const t of this._markerCollection.getMarkersIntersectingRange(e)){const e=t.getRange();this.bufferMarkerChange(t.name,e,e,t.affectsData)}this._cachedChanges=null}bufferOperation(t){switch(t.type){case"insert":if(this._isInInsertedElement(t.position.parent))return;this._markInsert(t.position.parent,t.position.offset,t.nodes.maxOffset);break;case"addAttribute":case"removeAttribute":case"changeAttribute":for(const e of t.range.getItems({shallow:!0}))this._isInInsertedElement(e.parent)||this._markAttribute(e);break;case"remove":case"move":case"reinsert":{if(t.sourcePosition.isEqual(t.targetPosition)||t.sourcePosition.getShiftedBy(t.howMany).isEqual(t.targetPosition))return;const e=this._isInInsertedElement(t.sourcePosition.parent),i=this._isInInsertedElement(t.targetPosition.parent);e||this._markRemove(t.sourcePosition.parent,t.sourcePosition.offset,t.howMany),i||this._markInsert(t.targetPosition.parent,t.getMovedRangeStart().offset,t.howMany);break}case"rename":{if(this._isInInsertedElement(t.position.parent))return;this._markRemove(t.position.parent,t.position.offset,1),this._markInsert(t.position.parent,t.position.offset,1);const e=vr._createFromPositionAndShift(t.position,1);for(const t of this._markerCollection.getMarkersIntersectingRange(e)){const e=t.getRange();this.bufferMarkerChange(t.name,e,e,t.affectsData)}break}case"split":{const e=t.splitPosition.parent;this._isInInsertedElement(e)||this._markRemove(e,t.splitPosition.offset,t.howMany),this._isInInsertedElement(t.insertionPosition.parent)||this._markInsert(t.insertionPosition.parent,t.insertionPosition.offset,1),t.graveyardPosition&&this._markRemove(t.graveyardPosition.parent,t.graveyardPosition.offset,1);break}case"merge":{const e=t.sourcePosition.parent;this._isInInsertedElement(e.parent)||this._markRemove(e.parent,e.startOffset,1);const i=t.graveyardPosition.parent;this._markInsert(i,t.graveyardPosition.offset,1);const n=t.targetPosition.parent;this._isInInsertedElement(n)||this._markInsert(n,t.targetPosition.offset,e.maxOffset);break}}this._cachedChanges=null}bufferMarkerChange(t,e,i,n){const o=this._changedMarkers.get(t);o?(o.newRange=i,o.affectsData=n,null==o.oldRange&&null==o.newRange&&this._changedMarkers.delete(t)):this._changedMarkers.set(t,{oldRange:e,newRange:i,affectsData:n})}getMarkersToRemove(){const t=[];for(const[e,i]of this._changedMarkers)null!=i.oldRange&&t.push({name:e,range:i.oldRange});return t}getMarkersToAdd(){const t=[];for(const[e,i]of this._changedMarkers)null!=i.newRange&&t.push({name:e,range:i.newRange});return t}getChangedMarkers(){return Array.from(this._changedMarkers).map(t=>({name:t[0],data:{oldRange:t[1].oldRange,newRange:t[1].newRange}}))}hasDataChanges(){for(const[,t]of this._changedMarkers)if(t.affectsData)return!0;return this._changesInElement.size>0}getChanges(t={includeChangesInGraveyard:!1}){if(this._cachedChanges)return t.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice();const e=[];for(const t of this._changesInElement.keys()){const i=this._changesInElement.get(t).sort((t,e)=>t.offset===e.offset?t.type!=e.type?"remove"==t.type?-1:1:0:t.offsett.position.root!=e.position.root?t.position.root.rootNamei.offset){if(n>o){const t={type:"attribute",offset:o,howMany:n-o,count:this._changeCount++};this._handleChange(t,e),e.push(t)}t.nodesToHandle=i.offset-t.offset,t.howMany=t.nodesToHandle}else t.offset>=i.offset&&t.offseto?(t.nodesToHandle=n-o,t.offset=o):t.nodesToHandle=0);if("remove"==i.type&&t.offseti.offset){const o={type:"attribute",offset:i.offset,howMany:n-i.offset,count:this._changeCount++};this._handleChange(o,e),e.push(o),t.nodesToHandle=i.offset-t.offset,t.howMany=t.nodesToHandle}"attribute"==i.type&&(t.offset>=i.offset&&n<=o?(t.nodesToHandle=0,t.howMany=0,t.offset=0):t.offset<=i.offset&&n>=o&&(i.howMany=0))}}t.howMany=t.nodesToHandle,delete t.nodesToHandle}_getInsertDiff(t,e,i){return{type:"insert",position:_r._createAt(t,e),name:i,length:1,changeCount:this._changeCount++}}_getRemoveDiff(t,e,i){return{type:"remove",position:_r._createAt(t,e),name:i,length:1,changeCount:this._changeCount++}}_getAttributesDiff(t,e,i){const n=[];i=new Map(i);for(const[o,s]of e){const e=i.has(o)?i.get(o):null;e!==s&&n.push({type:"attribute",position:t.start,range:t.clone(),length:1,attributeKey:o,attributeOldValue:s,attributeNewValue:e,changeCount:this._changeCount++}),i.delete(o)}for(const[e,o]of i)n.push({type:"attribute",position:t.start,range:t.clone(),length:1,attributeKey:e,attributeOldValue:null,attributeNewValue:o,changeCount:this._changeCount++});return n}_isInInsertedElement(t){const e=t.parent;if(!e)return!1;const i=this._changesInElement.get(e),n=t.startOffset;if(i)for(const t of i)if("insert"==t.type&&n>=t.offset&&nn){for(let e=0;e{const i=e[0];if(i.isDocumentOperation&&i.baseVersion!==this.version)throw new hi.b("model-document-applyOperation-wrong-version: Only operations with matching versions can be applied.",this,{operation:i})},{priority:"highest"}),this.listenTo(t,"applyOperation",(t,e)=>{const i=e[0];i.isDocumentOperation&&this.differ.bufferOperation(i)},{priority:"high"}),this.listenTo(t,"applyOperation",(t,e)=>{const i=e[0];i.isDocumentOperation&&(this.version++,this.history.addOperation(i))},{priority:"low"}),this.listenTo(this.selection,"change",()=>{this._hasSelectionChangedFromTheLastChangeBlock=!0}),this.listenTo(t.markers,"update",(t,e,i,n)=>{this.differ.bufferMarkerChange(e.name,i,n,e.affectsData),null===i&&e.on("change",(t,i)=>{this.differ.bufferMarkerChange(e.name,i,e.getRange(),e.affectsData)})})}get graveyard(){return this.getRoot("$graveyard")}createRoot(t="$root",e="main"){if(this.roots.get(e))throw new hi.b("model-document-createRoot-name-exists: Root with specified name already exists.",this,{name:e});const i=new Va(this,t,e);return this.roots.add(i),i}destroy(){this.selection.destroy(),this.stopListening()}getRoot(t="main"){return this.roots.get(t)}getRootNames(){return Array.from(this.roots,t=>t.rootName).filter(t=>"$graveyard"!=t)}registerPostFixer(t){this._postFixers.add(t)}toJSON(){const t=Mi(this);return t.selection="[engine.model.DocumentSelection]",t.model="[engine.model.Model]",t}_handleChangeBlock(t){this._hasDocumentChangedFromTheLastChangeBlock()&&(this._callPostFixers(t),this.selection.refresh(),this.differ.hasDataChanges()?this.fire("change:data",t.batch):this.fire("change",t.batch),this.selection.refresh(),this.differ.reset()),this._hasSelectionChangedFromTheLastChangeBlock=!1}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){for(const t of this.roots)if(t!==this.graveyard)return t;return this.graveyard}_getDefaultRange(){const t=this._getDefaultRoot(),e=this.model,i=e.schema,n=e.createPositionFromPath(t,[0]);return i.getNearestSelectionRange(n)||e.createRange(n)}_validateSelectionRange(t){return tc(t.start)&&tc(t.end)}_callPostFixers(t){let e=!1;do{for(const i of this._postFixers)if(this.selection.refresh(),e=i(t),e)break}while(e)}}function tc(t){const e=t.textNode;if(e){const i=e.data,n=t.offset-e.startOffset;return!Ja(i,n)&&!Za(i,n)}return!0}vi(Xa,mi);class ec{constructor(){this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(t){return this._markers.has(t)}get(t){return this._markers.get(t)||null}_set(t,e,i=!1,n=!1){const o=t instanceof ic?t.name:t,s=this._markers.get(o);if(s){const t=s.getRange();let r=!1;return t.isEqual(e)||(s._attachLiveRange(Nr.fromRange(e)),r=!0),i!=s.managedUsingOperations&&(s._managedUsingOperations=i,r=!0),"boolean"==typeof n&&n!=s.affectsData&&(s._affectsData=n,r=!0),r&&this.fire("update:"+o,s,t,e),s}const r=Nr.fromRange(e),a=new ic(o,r,i,n);return this._markers.set(o,a),this.fire("update:"+o,a,null,e),a}_remove(t){const e=t instanceof ic?t.name:t,i=this._markers.get(e);return!!i&&(this._markers.delete(e),this.fire("update:"+e,i,i.getRange(),null),this._destroyMarker(i),!0)}_refresh(t){const e=t instanceof ic?t.name:t,i=this._markers.get(e);if(!i)throw new hi.b("markercollection-refresh-marker-not-exists: Marker with provided name does not exists.",this);const n=i.getRange();this.fire("update:"+e,i,n,n,i.managedUsingOperations,i.affectsData)}*getMarkersAtPosition(t){for(const e of this)e.getRange().containsPosition(t)&&(yield e)}*getMarkersIntersectingRange(t){for(const e of this)null!==e.getRange().getIntersection(t)&&(yield e)}destroy(){for(const t of this._markers.values())this._destroyMarker(t);this._markers=null,this.stopListening()}*getMarkersGroup(t){for(const e of this._markers.values())e.name.startsWith(t+":")&&(yield e)}_destroyMarker(t){t.stopListening(),t._detachLiveRange()}}vi(ec,mi);class ic{constructor(t,e,i,n){this.name=t,this._liveRange=this._attachLiveRange(e),this._managedUsingOperations=i,this._affectsData=n}get managedUsingOperations(){if(!this._liveRange)throw new hi.b("marker-destroyed: Cannot use a destroyed marker instance.",this);return this._managedUsingOperations}get affectsData(){if(!this._liveRange)throw new hi.b("marker-destroyed: Cannot use a destroyed marker instance.",this);return this._affectsData}getStart(){if(!this._liveRange)throw new hi.b("marker-destroyed: Cannot use a destroyed marker instance.",this);return this._liveRange.start.clone()}getEnd(){if(!this._liveRange)throw new hi.b("marker-destroyed: Cannot use a destroyed marker instance.",this);return this._liveRange.end.clone()}getRange(){if(!this._liveRange)throw new hi.b("marker-destroyed: Cannot use a destroyed marker instance.",this);return this._liveRange.toRange()}is(t){return"marker"==t||"model:marker"==t}_attachLiveRange(t){return this._liveRange&&this._detachLiveRange(),t.delegate("change:range").to(this),t.delegate("change:content").to(this),this._liveRange=t,t}_detachLiveRange(){this._liveRange.stopDelegating("change:range",this),this._liveRange.stopDelegating("change:content",this),this._liveRange.detach(),this._liveRange=null}}vi(ic,mi);class nc extends _a{get type(){return"noop"}clone(){return new nc(this.baseVersion)}getReversed(){return new nc(this.baseVersion+1)}_execute(){}static get className(){return"NoOperation"}}const oc={};oc[Ma.className]=Ma,oc[Oa.className]=Oa,oc[Ra.className]=Ra,oc[Na.className]=Na,oc[nc.className]=nc,oc[_a.className]=_a,oc[La.className]=La,oc[Da.className]=Da,oc[ja.className]=ja,oc[za.className]=za;class sc extends _r{constructor(t,e,i="toNone"){if(super(t,e,i),!this.root.is("rootElement"))throw new hi.b("model-liveposition-root-not-rootelement: LivePosition's root has to be an instance of RootElement.",t);rc.call(this)}detach(){this.stopListening()}is(t){return"livePosition"==t||"model:livePosition"==t||super.is(t)}toPosition(){return new _r(this.root,this.path.slice(),this.stickiness)}static fromPosition(t,e){return new this(t.root,t.path.slice(),e||t.stickiness)}}function rc(){this.listenTo(this.root.document.model,"applyOperation",(t,e)=>{const i=e[0];i.isDocumentOperation&&ac.call(this,i)},{priority:"low"})}function ac(t){const e=this.getTransformedByOperation(t);if(!this.isEqual(e)){const t=this.toPosition();this.path=e.path,this.root=e.root,this.fire("change",t)}}vi(sc,mi);class cc{constructor(t,e,i){this.model=t,this.writer=e,this.position=i,this.canMergeWith=new Set([this.position.parent]),this.schema=t.schema,this._filterAttributesOf=[],this._affectedStart=null,this._affectedEnd=null}handleNodes(t,e){t=Array.from(t);for(let i=0;i{if(!i.doNotResetEntireContent&&function(t,e){const i=t.getLimitElement(e);if(!e.containsEntireContent(i))return!1;const n=e.getFirstRange();if(n.start.parent==n.end.parent)return!1;return t.checkChild(i,"paragraph")}(o,e))return void function(t,e){const i=t.model.schema.getLimitElement(e);t.remove(t.createRangeIn(i)),dc(t,t.createPositionAt(i,0),e)}(t,e);const s=n.start,r=sc.fromPosition(n.end,"toNext");if(n.start.isTouching(n.end)||t.remove(n),i.leaveUnmerged||(!function t(e,i,n){const o=i.parent,s=n.parent;if(o==s)return;if(e.model.schema.isLimit(o)||e.model.schema.isLimit(s))return;if(!function(t,e,i){const n=new vr(t,e);for(const t of n.getWalker())if(i.isLimit(t.item))return!1;return!0}(i,n,e.model.schema))return;i=e.createPositionAfter(o),(n=e.createPositionBefore(s)).isEqual(i)||e.insert(s,i);e.merge(i);for(;n.parent.isEmpty;){const t=n.parent;n=e.createPositionBefore(t),e.remove(t)}t(e,i,n)}(t,s,r),o.removeDisallowedAttributes(s.parent.getChildren(),t)),hc(t,e,s),function(t,e){const i=t.checkChild(e,"$text"),n=t.checkChild(e,"paragraph");return!i&&n}(o,s)){const n=o.getNearestSelectionRange(s);i.doNotAutoparagraph&&n?hc(t,e,n):dc(t,s,e)}r.detach()})}function dc(t,e,i){const n=t.createElement("paragraph");t.insert(n,e),hc(t,i,t.createPositionAt(n,0))}function hc(t,e,i){e instanceof Lr?t.setSelection(i):e.setTo(i)}function uc(t,e){if("text"==e.type)return"word"===t.unit?function(t,e){let i=t.position.textNode;if(i){let n=t.position.offset-i.startOffset;for(;!mc(i.data,n,e)&&!gc(i,n,e);){t.next();const o=e?t.position.nodeAfter:t.position.nodeBefore;if(o&&o.is("text")){const n=o.data.charAt(e?0:o.data.length-1);' ,.?!:;"-()'.includes(n)||(t.next(),i=t.position.textNode)}n=t.position.offset-i.startOffset}}return t.position}(t.walker,t.isForward):function(t,e){const i=t.position.textNode;if(i){const n=i.data;let o=t.position.offset-i.startOffset;for(;Ja(n,o)||"character"==e&&Za(n,o);)t.next(),o=t.position.offset-i.startOffset}return t.position}(t.walker,t.unit,t.isForward);if(e.type==(t.isForward?"elementStart":"elementEnd")){if(t.schema.isObject(e.item))return _r._createAt(e.item,t.isForward?"after":"before");if(t.schema.checkChild(e.nextPosition,"$text"))return e.nextPosition}else{if(t.schema.isLimit(e.item))return void t.walker.skip(()=>!0);if(t.schema.checkChild(e.nextPosition,"$text"))return e.nextPosition}}function fc(t,e){const i=t.root,n=_r._createAt(i,e?"end":0);return e?new vr(t,n):new vr(n,t)}function mc(t,e,i){const n=e+(i?0:-1);return' ,.?!:;"-()'.includes(t.charAt(n))}function gc(t,e,i){return e===(i?t.endOffset:0)}function pc(t,e){const i=[];Array.from(t.getItems({direction:"backward"})).map(t=>e.createRangeOn(t)).filter(e=>(e.start.isAfter(t.start)||e.start.isEqual(t.start))&&(e.end.isBefore(t.end)||e.end.isEqual(t.end))).forEach(t=>{i.push(t.start.parent),e.remove(t)}),i.forEach(t=>{let i=t;for(;i.parent&&i.isEmpty;){const t=e.createRangeOn(i);i=i.parent,e.remove(t)}})}function bc(t){t.document.registerPostFixer(e=>function(t,e){const i=e.document.selection,n=e.schema,o=[];let s=!1;for(const t of i.getRanges()){const e=wc(t,n);e?(o.push(e),s=!0):o.push(t)}s&&t.setSelection(function(t){const e=[];e.push(t.shift());for(const i of t){const t=e.pop();if(i.isIntersecting(t)){const n=t.start.isAfter(i.start)?i.start:t.start,o=t.end.isAfter(i.end)?t.end:i.end,s=new vr(n,o);e.push(s)}else e.push(t),e.push(i)}return e}(o),{backward:i.isBackward})}(e,t))}function wc(t,e){return t.isCollapsed?function(t,e){const i=t.start,n=e.getNearestSelectionRange(i);if(!n)return null;if(!n.isCollapsed)return n;const o=n.start;if(i.isEqual(o))return null;return new vr(o)}(t,e):function(t,e){const i=t.start,n=t.end,o=e.checkChild(i,"$text"),s=e.checkChild(n,"$text"),r=e.getLimitElement(i),a=e.getLimitElement(n);if(r===a){if(o&&s)return null;if(function(t,e,i){const n=t.nodeAfter&&!i.isLimit(t.nodeAfter)||i.checkChild(t,"$text"),o=e.nodeBefore&&!i.isLimit(e.nodeBefore)||i.checkChild(e,"$text");return n||o}(i,n,e)){const t=i.nodeAfter&&e.isObject(i.nodeAfter)?null:e.getNearestSelectionRange(i,"forward"),o=n.nodeBefore&&e.isObject(n.nodeBefore)?null:e.getNearestSelectionRange(n,"backward"),s=t?t.start:i,r=o?o.start:n;return new vr(s,r)}}const c=r&&!r.is("rootElement"),l=a&&!a.is("rootElement");if(c||l){const t=i.nodeAfter&&n.nodeBefore&&i.nodeAfter.parent===n.nodeBefore.parent,o=c&&(!t||!_c(i.nodeAfter,e)),s=l&&(!t||!_c(n.nodeBefore,e));let d=i,h=n;return o&&(d=_r._createBefore(kc(r,e))),s&&(h=_r._createAfter(kc(a,e))),new vr(d,h)}return null}(t,e)}function kc(t,e){let i=t,n=i;for(;e.isLimit(n)&&n.parent;)i=n,n=n.parent;return i}function _c(t,e){return t&&e.isObject(t)}class vc{constructor(){this.markers=new ec,this.document=new Xa(this),this.schema=new ea,this._pendingChanges=[],this._currentWriter=null,["insertContent","deleteContent","modifySelection","getSelectedContent","applyOperation"].forEach(t=>this.decorate(t)),this.on("applyOperation",(t,e)=>{e[0]._validate()},{priority:"highest"}),this.schema.register("$root",{isLimit:!0}),this.schema.register("$block",{allowIn:"$root",isBlock:!0}),this.schema.register("$text",{allowIn:"$block",isInline:!0}),this.schema.register("$clipboardHolder",{allowContentOf:"$root",isLimit:!0}),this.schema.extend("$text",{allowIn:"$clipboardHolder"}),this.schema.register("$marker"),this.schema.addChildCheck((t,e)=>{if("$marker"===e.name)return!0}),bc(this)}change(t){try{return 0===this._pendingChanges.length?(this._pendingChanges.push({batch:new ka,callback:t}),this._runPendingChanges()[0]):t(this._currentWriter)}catch(t){hi.b.rethrowUnexpectedError(t,this)}}enqueueChange(t,e){try{"string"==typeof t?t=new ka(t):"function"==typeof t&&(e=t,t=new ka),this._pendingChanges.push({batch:t,callback:e}),1==this._pendingChanges.length&&this._runPendingChanges()}catch(t){hi.b.rethrowUnexpectedError(t,this)}}applyOperation(t){t._execute()}insertContent(t,e,i){return function(t,e,i,n){return t.change(o=>{let s;s=i?i instanceof Pr||i instanceof Lr?i:o.createSelection(i,n):t.document.selection;const r=s.getFirstPosition();s.isCollapsed||t.deleteContent(s,{doNotAutoparagraph:!0});const a=new cc(t,o,r);let c;c=e.is("documentFragment")?e.getChildren():[e],a.handleNodes(c,{isFirst:!0,isLast:!0});const l=a.getSelectionRange();l&&(s instanceof Lr?o.setSelection(l):s.setTo(l));const d=a.getAffectedRange()||t.createRange(r);return a.destroy(),d})}(this,t,e,i)}deleteContent(t,e){lc(this,t,e)}modifySelection(t,e){!function(t,e,i={}){const n=t.schema,o="backward"!=i.direction,s=i.unit?i.unit:"character",r=e.focus,a=new wr({boundaries:fc(r,o),singleCharacters:!0,direction:o?"forward":"backward"}),c={walker:a,schema:n,isForward:o,unit:s};let l;for(;l=a.next();){if(l.done)return;const i=uc(c,l.value);if(i)return void(e instanceof Lr?t.change(t=>{t.setSelectionFocus(i)}):e.setFocus(i))}}(this,t,e)}getSelectedContent(t){return function(t,e){return t.change(t=>{const i=t.createDocumentFragment(),n=e.getFirstRange();if(!n||n.isCollapsed)return i;const o=n.start.root,s=n.start.getCommonPath(n.end),r=o.getNodeByPath(s);let a;a=n.start.parent==n.end.parent?n:t.createRange(t.createPositionAt(r,n.start.path[s.length]),t.createPositionAt(r,n.end.path[s.length]+1));const c=a.end.offset-a.start.offset;for(const e of a.getItems({shallow:!0}))e.is("textProxy")?t.appendText(e.data,e.getAttributes(),i):t.append(e._clone(!0),i);if(a!=n){const e=n._getTransformedByMove(a.start,t.createPositionAt(i,0),c)[0],o=t.createRange(t.createPositionAt(i,0),e.start);pc(t.createRange(e.end,t.createPositionAt(i,"end")),t),pc(o,t)}return i})}(this,t)}hasContent(t,e){const i=t instanceof br?vr._createIn(t):t;if(i.isCollapsed)return!1;for(const t of this.markers.getMarkersIntersectingRange(i))if(t.affectsData)return!0;const{ignoreWhitespaces:n=!1}=e||{};for(const t of i.getItems())if(t.is("textProxy")){if(!n)return!0;if(-1!==t.data.search(/\S/))return!0}else if(this.schema.isObject(t))return!0;return!1}createPositionFromPath(t,e,i){return new _r(t,e,i)}createPositionAt(t,e){return _r._createAt(t,e)}createPositionAfter(t){return _r._createAfter(t)}createPositionBefore(t){return _r._createBefore(t)}createRange(t,e){return new vr(t,e)}createRangeIn(t){return vr._createIn(t)}createRangeOn(t){return vr._createOn(t)}createSelection(t,e,i){return new Pr(t,e,i)}createBatch(t){return new ka(t)}createOperationFromJSON(t){return class{static fromJSON(t,e){return oc[t.__className].fromJSON(t,e)}}.fromJSON(t,this.document)}destroy(){this.document.destroy(),this.stopListening()}_runPendingChanges(){const t=[];for(this.fire("_beforeChanges");this._pendingChanges.length;){const e=this._pendingChanges[0].batch;this._currentWriter=new Ba(this,e);const i=this._pendingChanges[0].callback(this._currentWriter);t.push(i),this.document._handleChangeBlock(this._currentWriter),this._pendingChanges.shift(),this._currentWriter=null}return this.fire("_afterChanges"),t}}vi(vc,Hn);class yc{constructor(){this._listener=Object.create(ls)}listenTo(t){this._listener.listenTo(t,"keydown",(t,e)=>{this._listener.fire("_keydown:"+bo(e),e)})}set(t,e,i={}){const n=wo(t),o=i.priority;this._listener.listenTo(this._listener,"_keydown:"+n,(t,i)=>{e(i,()=>{i.preventDefault(),i.stopPropagation(),t.stop()}),t.return=!0},{priority:o})}press(t){return!!this._listener.fire("_keydown:"+bo(t),t)}destroy(){this._listener.stopListening()}}class xc extends yc{constructor(t){super(),this.editor=t}set(t,e,i={}){if("string"==typeof e){const t=e;e=(e,i)=>{this.editor.execute(t),i()}}super.set(t,e,i)}}class Ac{constructor(t={}){this._context=t.context||new Si({language:t.language}),this._context._addEditor(this,!t.context);const e=Array.from(this.constructor.builtinPlugins||[]);this.config=new ni(t,this.constructor.defaultConfig),this.config.define("plugins",e),this.config.define(this._context._getEditorConfig()),this.plugins=new xi(this,e,this._context.plugins),this.locale=this._context.locale,this.t=this.locale.t,this.commands=new Zr,this.set("state","initializing"),this.once("ready",()=>this.state="ready",{priority:"high"}),this.once("destroy",()=>this.state="destroyed",{priority:"high"}),this.set("isReadOnly",!1),this.model=new vc,this.data=new ga(this.model),this.editing=new Jr(this.model),this.editing.view.document.bind("isReadOnly").to(this),this.conversion=new pa([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher),this.conversion.addAlias("dataDowncast",this.data.downcastDispatcher),this.conversion.addAlias("editingDowncast",this.editing.downcastDispatcher),this.keystrokes=new xc(this),this.keystrokes.listenTo(this.editing.view.document)}initPlugins(){const t=this.config,e=t.get("plugins"),i=t.get("removePlugins")||[],n=t.get("extraPlugins")||[];return this.plugins.init(e.concat(n),i)}destroy(){let t=Promise.resolve();return"initializing"==this.state&&(t=new Promise(t=>this.once("ready",t))),t.then(()=>{this.fire("destroy"),this.stopListening(),this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy(),this.data.destroy(),this.editing.destroy(),this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(...t){try{this.commands.execute(...t)}catch(t){hi.b.rethrowUnexpectedError(t,this)}}}vi(Ac,Hn);var Cc={setData(t){this.data.set(t)},getData(t){return this.data.get(t)}};var Tc={updateSourceElement(){if(!this.sourceElement)throw new hi.b("editor-missing-sourceelement: Cannot update the source element of a detached editor.",this);var t,e;t=this.sourceElement,e=this.data.get(),t instanceof HTMLTextAreaElement&&(t.value=e),t.innerHTML=e}};class Pc{getHtml(t){const e=document.implementation.createHTMLDocument("").createElement("div");return e.appendChild(t),e.innerHTML}}class Sc{constructor(){this._domParser=new DOMParser,this._domConverter=new os({blockFillerMode:"nbsp"}),this._htmlWriter=new Pc}toData(t){const e=this._domConverter.viewToDom(t,document);return this._htmlWriter.getHtml(e)}toView(t){const e=this._toDom(t);return this._domConverter.domToView(e)}_toDom(t){const e=this._domParser.parseFromString(t,"text/html"),i=e.createDocumentFragment(),n=e.body.childNodes;for(;n.length>0;)i.appendChild(n[0]);return i}}class Ec{constructor(t){this.editor=t,this._components=new Map}*names(){for(const t of this._components.values())yield t.originalName}add(t,e){if(this.has(t))throw new hi.b("componentfactory-item-exists: The item already exists in the component factory.",this,{name:t});this._components.set(Mc(t),{callback:e,originalName:t})}create(t){if(!this.has(t))throw new hi.b("componentfactory-item-missing: The required component is not registered in the factory.",this,{name:t});return this._components.get(Mc(t)).callback(this.editor.locale)}has(t){return this._components.has(Mc(t))}}function Mc(t){return String(t).toLowerCase()}class Ic{constructor(){this.set("isFocused",!1),this.set("focusedElement",null),this._elements=new Set,this._nextEventLoopTimeout=null}add(t){if(this._elements.has(t))throw new hi.b("focusTracker-add-element-already-exist",this);this.listenTo(t,"focus",()=>this._focus(t),{useCapture:!0}),this.listenTo(t,"blur",()=>this._blur(),{useCapture:!0}),this._elements.add(t)}remove(t){t===this.focusedElement&&this._blur(t),this._elements.has(t)&&(this.stopListening(t),this._elements.delete(t))}destroy(){this.stopListening()}_focus(t){clearTimeout(this._nextEventLoopTimeout),this.focusedElement=t,this.isFocused=!0}_blur(){clearTimeout(this._nextEventLoopTimeout),this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null,this.isFocused=!1},0)}}vi(Ic,ls),vi(Ic,Hn);class Nc{constructor(t){this.editor=t,this.componentFactory=new Ec(t),this.focusTracker=new Ic,this._editableElementsMap=new Map,this.listenTo(t.editing.view.document,"layoutChanged",()=>this.update())}get element(){return null}update(){this.fire("update")}destroy(){this.stopListening(),this.focusTracker.destroy();for(const t of this._editableElementsMap.values())t.ckeditorInstance=null;this._editableElementsMap=new Map}setEditableElement(t,e){this._editableElementsMap.set(t,e),e.ckeditorInstance||(e.ckeditorInstance=this.editor)}getEditableElement(t="main"){return this._editableElementsMap.get(t)}getEditableElementsNames(){return this._editableElementsMap.keys()}get _editableElements(){return console.warn("editor-ui-deprecated-editable-elements: The EditorUI#_editableElements property has been deprecated and will be removed in the near future.",{editorUI:this}),this._editableElementsMap}}vi(Nc,mi);i(14);const Oc=new WeakMap;function Rc(t){const{view:e,element:i,text:n,isDirectHost:o=!0}=t,s=e.document;Oc.has(s)||(Oc.set(s,new Map),s.registerPostFixer(t=>Dc(s,t))),Oc.get(s).set(i,{text:n,isDirectHost:o}),e.change(t=>Dc(s,t))}function Lc(t,e){return!!e.hasClass("ck-placeholder")&&(t.removeClass("ck-placeholder",e),!0)}function Dc(t,e){const i=Oc.get(t);let n=!1;for(const[t,o]of i)zc(e,t,o)&&(n=!0);return n}function zc(t,e,i){const{text:n,isDirectHost:o}=i,s=o?e:function(t){if(1===t.childCount){const e=t.getChild(0);if(e.is("element")&&!e.is("uiElement"))return e}return null}(e);let r=!1;return!!s&&(i.hostElement=s,s.getAttribute("data-placeholder")!==n&&(t.setAttribute("data-placeholder",n,s),r=!0),!function(t){const e=t.document;if(!e)return!1;const i=!Array.from(t.getChildren()).some(t=>!t.is("uiElement"));if(!e.isFocused&&i)return!0;const n=e.selection.anchor;return!(!i||!n||n.parent===t)}(s)?Lc(t,s)&&(r=!0):function(t,e){return!e.hasClass("ck-placeholder")&&(t.addClass("ck-placeholder",e),!0)}(t,s)&&(r=!0),r)}class jc{constructor(){this._replacedElements=[]}replace(t,e){this._replacedElements.push({element:t,newElement:e}),t.style.display="none",e&&t.parentNode.insertBefore(e,t.nextSibling)}restore(){this._replacedElements.forEach(({element:t,newElement:e})=>{t.style.display="",e&&e.remove()}),this._replacedElements=[]}}class Vc extends Nc{constructor(t,e){var i;super(t),this.view=e,this._toolbarConfig=(i=t.config.get("toolbar"),Array.isArray(i)?{items:i}:i?Object.assign({items:[]},i):{items:[]}),this._elementReplacer=new jc}get element(){return this.view.element}init(t){const e=this.editor,i=this.view,n=e.editing.view,o=i.editable,s=n.document.getRoot();o.name=s.rootName,i.render();const r=o.element;this.setEditableElement(o.name,r),this.focusTracker.add(r),i.editable.bind("isFocused").to(this.focusTracker),n.attachDomRoot(r),t&&this._elementReplacer.replace(t,this.element),this._initPlaceholder(),this._initToolbar(),this.fire("ready")}destroy(){const t=this.view,e=this.editor.editing.view;this._elementReplacer.restore(),e.detachDomRoot(t.editable.name),t.destroy(),super.destroy()}_initToolbar(){const t=this.editor,e=this.view,i=t.editing.view;e.stickyPanel.bind("isActive").to(this.focusTracker,"isFocused"),e.stickyPanel.limiterElement=e.element,this._toolbarConfig.viewportTopOffset&&(e.stickyPanel.viewportTopOffset=this._toolbarConfig.viewportTopOffset),e.toolbar.fillFromConfig(this._toolbarConfig.items,this.componentFactory),function({origin:t,originKeystrokeHandler:e,originFocusTracker:i,toolbar:n,beforeFocus:o,afterBlur:s}){i.add(n.element),e.set("Alt+F10",(t,e)=>{i.isFocused&&!n.focusTracker.isFocused&&(o&&o(),n.focus(),e())}),n.keystrokes.set("Esc",(e,i)=>{n.focusTracker.isFocused&&(t.focus(),s&&s(),i())})}({origin:i,originFocusTracker:this.focusTracker,originKeystrokeHandler:t.keystrokes,toolbar:e.toolbar})}_initPlaceholder(){const t=this.editor,e=t.editing.view,i=e.document.getRoot(),n=t.sourceElement,o=t.config.get("placeholder")||n&&"textarea"===n.tagName.toLowerCase()&&n.getAttribute("placeholder");o&&Rc({view:e,element:i,text:o,isDirectHost:!1})}}class Bc extends yi{constructor(t){super({idProperty:"viewUid"}),this.on("add",(t,e,i)=>{e.isRendered||e.render(),e.element&&this._parentElement&&this._parentElement.insertBefore(e.element,this._parentElement.children[i])}),this.on("remove",(t,e)=>{e.element&&this._parentElement&&e.element.remove()}),this.locale=t,this._parentElement=null}destroy(){this.map(t=>t.destroy())}setParent(t){this._parentElement=t}delegate(...t){if(!t.length||!t.every(t=>"string"==typeof t))throw new hi.b("ui-viewcollection-delegate-wrong-events: All event names must be strings.",this);return{to:e=>{for(const i of this)for(const n of t)i.delegate(n).to(e);this.on("add",(i,n)=>{for(const i of t)n.delegate(i).to(e)}),this.on("remove",(i,n)=>{for(const i of t)n.stopDelegating(i,e)})}}}}class Fc{constructor(t){Object.assign(this,Jc(Kc(t))),this._isRendered=!1,this._revertData=null}render(){const t=this._renderNode({intoFragment:!0});return this._isRendered=!0,t}apply(t){return this._revertData={children:[],bindings:[],attributes:{}},this._renderNode({node:t,isApplying:!0,revertData:this._revertData}),t}revert(t){if(!this._revertData)throw new hi.b("ui-template-revert-not-applied: Attempting to revert a template which has not been applied yet.",[this,t]);this._revertTemplateFromNode(t,this._revertData)}*getViews(){yield*function*t(e){if(e.children)for(const i of e.children)il(i)?yield i:nl(i)&&(yield*t(i))}(this)}static bind(t,e){return{to:(i,n)=>new Uc({eventNameOrFunction:i,attribute:i,observable:t,emitter:e,callback:n}),if:(i,n,o)=>new Wc({observable:t,emitter:e,attribute:i,valueIfTrue:n,callback:o})}}static extend(t,e){if(t._isRendered)throw new hi.b("template-extend-render: Attempting to extend a template which has already been rendered.",[this,t]);!function t(e,i){i.attributes&&(e.attributes||(e.attributes={}),tl(e.attributes,i.attributes));i.eventListeners&&(e.eventListeners||(e.eventListeners={}),tl(e.eventListeners,i.eventListeners));i.text&&e.text.push(...i.text);if(i.children&&i.children.length){if(e.children.length!=i.children.length)throw new hi.b("ui-template-extend-children-mismatch: The number of children in extended definition does not match.",e);let n=0;for(const o of i.children)t(e.children[n++],o)}}(t,Jc(Kc(e)))}_renderNode(t){let e;if(e=t.node?this.tag&&this.text:this.tag?this.text:!this.text,e)throw new hi.b('ui-template-wrong-syntax: Node definition must have either "tag" or "text" when rendering a new Node.',this);return this.text?this._renderText(t):this._renderElement(t)}_renderElement(t){let e=t.node;return e||(e=t.node=document.createElementNS(this.ns||"http://www.w3.org/1999/xhtml",this.tag)),this._renderAttributes(t),this._renderElementChildren(t),this._setUpListeners(t),e}_renderText(t){let e=t.node;return e?t.revertData.text=e.textContent:e=t.node=document.createTextNode(""),qc(this.text)?this._bindToObservable({schema:this.text,updater:Yc(e),data:t}):e.textContent=this.text.join(""),e}_renderAttributes(t){let e,i,n,o;if(!this.attributes)return;const s=t.node,r=t.revertData;for(e in this.attributes)if(n=s.getAttribute(e),i=this.attributes[e],r&&(r.attributes[e]=n),o=z(i[0])&&i[0].ns?i[0].ns:null,qc(i)){const a=o?i[0].value:i;r&&sl(e)&&a.unshift(n),this._bindToObservable({schema:a,updater:Gc(s,e,o),data:t})}else"style"==e&&"string"!=typeof i[0]?this._renderStyleAttribute(i[0],t):(r&&n&&sl(e)&&i.unshift(n),i=i.map(t=>t&&t.value||t).reduce((t,e)=>t.concat(e),[]).reduce(Xc,""),el(i)||s.setAttributeNS(o,e,i))}_renderStyleAttribute(t,e){const i=e.node;for(const n in t){const o=t[n];qc(o)?this._bindToObservable({schema:[o],updater:Qc(i,n),data:e}):i.style[n]=o}}_renderElementChildren(t){const e=t.node,i=t.intoFragment?document.createDocumentFragment():e,n=t.isApplying;let o=0;for(const s of this.children)if(ol(s)){if(!n){s.setParent(e);for(const t of s)i.appendChild(t.element)}}else if(il(s))n||(s.isRendered||s.render(),i.appendChild(s.element));else if(Qo(s))i.appendChild(s);else if(n){const e={children:[],bindings:[],attributes:{}};t.revertData.children.push(e),s._renderNode({node:i.childNodes[o++],isApplying:!0,revertData:e})}else i.appendChild(s.render());t.intoFragment&&e.appendChild(i)}_setUpListeners(t){if(this.eventListeners)for(const e in this.eventListeners){const i=this.eventListeners[e].map(i=>{const[n,o]=e.split("@");return i.activateDomEventListener(n,o,t)});t.revertData&&t.revertData.bindings.push(i)}}_bindToObservable({schema:t,updater:e,data:i}){const n=i.revertData;$c(t,e,i);const o=t.filter(t=>!el(t)).filter(t=>t.observable).map(n=>n.activateAttributeListener(t,e,i));n&&n.bindings.push(o)}_revertTemplateFromNode(t,e){for(const t of e.bindings)for(const e of t)e();if(e.text)t.textContent=e.text;else{for(const i in e.attributes){const n=e.attributes[i];null===n?t.removeAttribute(i):t.setAttribute(i,n)}for(let i=0;i$c(t,e,i);return this.emitter.listenTo(this.observable,"change:"+this.attribute,n),()=>{this.emitter.stopListening(this.observable,"change:"+this.attribute,n)}}}class Uc extends Hc{activateDomEventListener(t,e,i){const n=(t,i)=>{e&&!i.target.matches(e)||("function"==typeof this.eventNameOrFunction?this.eventNameOrFunction(i):this.observable.fire(this.eventNameOrFunction,i))};return this.emitter.listenTo(i.node,t,n),()=>{this.emitter.stopListening(i.node,t,n)}}}class Wc extends Hc{getValue(t){return!el(super.getValue(t))&&(this.valueIfTrue||!0)}}function qc(t){return!!t&&(t.value&&(t=t.value),Array.isArray(t)?t.some(qc):t instanceof Hc)}function $c(t,e,{node:i}){let n=function(t,e){return t.map(t=>t instanceof Hc?t.getValue(e):t)}(t,i);n=1==t.length&&t[0]instanceof Wc?n[0]:n.reduce(Xc,""),el(n)?e.remove():e.set(n)}function Yc(t){return{set(e){t.textContent=e},remove(){t.textContent=""}}}function Gc(t,e,i){return{set(n){t.setAttributeNS(i,e,n)},remove(){t.removeAttributeNS(i,e)}}}function Qc(t,e){return{set(i){t.style[e]=i},remove(){t.style[e]=null}}}function Kc(t){return ei(t,t=>{if(t&&(t instanceof Hc||nl(t)||il(t)||ol(t)))return t})}function Jc(t){if("string"==typeof t?t=function(t){return{text:[t]}}(t):t.text&&function(t){Array.isArray(t.text)||(t.text=[t.text])}(t),t.on&&(t.eventListeners=function(t){for(const e in t)Zc(t,e);return t}(t.on),delete t.on),!t.text){t.attributes&&function(t){for(const e in t)t[e].value&&(t[e].value=[].concat(t[e].value)),Zc(t,e)}(t.attributes);const e=[];if(t.children)if(ol(t.children))e.push(t.children);else for(const i of t.children)nl(i)||il(i)||Qo(i)?e.push(i):e.push(new Fc(i));t.children=e}return t}function Zc(t,e){Array.isArray(t[e])||(t[e]=[t[e]])}function Xc(t,e){return el(e)?t:el(t)?e:`${t} ${e}`}function tl(t,e){for(const i in e)t[i]?t[i].push(...e[i]):t[i]=e[i]}function el(t){return!t&&0!==t}function il(t){return t instanceof rl}function nl(t){return t instanceof Fc}function ol(t){return t instanceof Bc}function sl(t){return"class"==t||"style"==t}i(16);class rl{constructor(t){this.element=null,this.isRendered=!1,this.locale=t,this.t=t&&t.t,this._viewCollections=new yi,this._unboundChildren=this.createCollection(),this._viewCollections.on("add",(e,i)=>{i.locale=t}),this.decorate("render")}get bindTemplate(){return this._bindTemplate?this._bindTemplate:this._bindTemplate=Fc.bind(this,this)}createCollection(){const t=new Bc;return this._viewCollections.add(t),t}registerChild(t){Ri(t)||(t=[t]);for(const e of t)this._unboundChildren.add(e)}deregisterChild(t){Ri(t)||(t=[t]);for(const e of t)this._unboundChildren.remove(e)}setTemplate(t){this.template=new Fc(t)}extendTemplate(t){Fc.extend(this.template,t)}render(){if(this.isRendered)throw new hi.b("ui-view-render-already-rendered: This View has already been rendered.",this);this.template&&(this.element=this.template.render(),this.registerChild(this.template.getViews())),this.isRendered=!0}destroy(){this.stopListening(),this._viewCollections.map(t=>t.destroy()),this.template&&this.template._revertData&&this.template.revert(this.element)}}vi(rl,ls),vi(rl,Hn);var al=function(t){return"string"==typeof t||!Lt(t)&&p(t)&&"[object String]"==f(t)};class cl extends Bc{attachToDom(){this._bodyCollectionContainer=new Fc({tag:"div",attributes:{class:["ck","ck-reset_all","ck-body","ck-rounded-corners"],dir:this.locale.uiLanguageDirection},children:this}).render();let t=document.querySelector(".ck-body-wrapper");t||(t=function(t,e,i={},n=[]){const o=i&&i.xmlns,s=o?t.createElementNS(o,e):t.createElement(e);for(const t in i)s.setAttribute(t,i[t]);!al(n)&&Ri(n)||(n=[n]);for(let e of n)al(e)&&(e=t.createTextNode(e)),s.appendChild(e);return s}(document,"div",{class:"ck-body-wrapper"}),document.body.appendChild(t)),t.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy(),this._bodyCollectionContainer&&this._bodyCollectionContainer.remove();const t=document.querySelector(".ck-body-wrapper");t&&0==t.childElementCount&&t.remove()}}i(18);class ll extends rl{constructor(t){super(t),this.body=new cl(t)}render(){super.render(),this.body.attachToDom()}destroy(){return this.body.detachFromDom(),super.destroy()}}i(20);class dl extends rl{constructor(t){super(t),this.set("text"),this.set("for"),this.id=`ck-editor__label_${li()}`;const e=this.bindTemplate;this.setTemplate({tag:"label",attributes:{class:["ck","ck-label"],id:this.id,for:e.to("for")},children:[{text:e.to("text")}]})}}class hl extends ll{constructor(t){super(t),this.top=this.createCollection(),this.main=this.createCollection(),this._voiceLabelView=this._createVoiceLabel(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-editor","ck-rounded-corners"],role:"application",dir:t.uiLanguageDirection,lang:t.uiLanguage,"aria-labelledby":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:"div",attributes:{class:["ck","ck-editor__top","ck-reset_all"],role:"presentation"},children:this.top},{tag:"div",attributes:{class:["ck","ck-editor__main"],role:"presentation"},children:this.main}]})}_createVoiceLabel(){const t=this.t,e=new dl;return e.text=t("bn"),e.extendTemplate({attributes:{class:"ck-voice-label"}}),e}}class ul extends rl{constructor(t,e,i){super(t),this.setTemplate({tag:"div",attributes:{class:["ck","ck-content","ck-editor__editable","ck-rounded-corners"],lang:t.contentLanguage,dir:t.contentLanguageDirection}}),this.name=null,this.set("isFocused",!1),this._editableElement=i,this._hasExternalElement=!!this._editableElement,this._editingView=e}render(){super.render(),this._hasExternalElement?this.template.apply(this.element=this._editableElement):this._editableElement=this.element,this.on("change:isFocused",()=>this._updateIsFocusedClasses()),this._updateIsFocusedClasses()}destroy(){this._hasExternalElement&&this.template.revert(this._editableElement),super.destroy()}_updateIsFocusedClasses(){const t=this._editingView;function e(e){t.change(i=>{const n=t.document.getRoot(e.name);i.addClass(e.isFocused?"ck-focused":"ck-blurred",n),i.removeClass(e.isFocused?"ck-blurred":"ck-focused",n)})}t.isRenderingInProgress?function i(n){t.once("change:isRenderingInProgress",(t,o,s)=>{s?i(n):e(n)})}(this):e(this)}}class fl extends ul{constructor(t,e,i){super(t,e,i),this.extendTemplate({attributes:{role:"textbox",class:"ck-editor__editable_inline"}})}render(){super.render();const t=this._editingView,e=this.t;t.change(i=>{const n=t.document.getRoot(this.name);i.setAttribute("aria-label",e("bo",[this.name]),n)})}}function ml(t){return e=>e+t}i(22);const gl=ml("px");class pl extends rl{constructor(t){super(t);const e=this.bindTemplate;this.set("isActive",!1),this.set("isSticky",!1),this.set("limiterElement",null),this.set("limiterBottomOffset",50),this.set("viewportTopOffset",0),this.set("_marginLeft",null),this.set("_isStickyToTheLimiter",!1),this.set("_hasViewportTopOffset",!1),this.content=this.createCollection(),this._contentPanelPlaceholder=new Fc({tag:"div",attributes:{class:["ck","ck-sticky-panel__placeholder"],style:{display:e.to("isSticky",t=>t?"block":"none"),height:e.to("isSticky",t=>t?gl(this._panelRect.height):null)}}}).render(),this._contentPanel=new Fc({tag:"div",attributes:{class:["ck","ck-sticky-panel__content",e.if("isSticky","ck-sticky-panel__content_sticky"),e.if("_isStickyToTheLimiter","ck-sticky-panel__content_sticky_bottom-limit")],style:{width:e.to("isSticky",t=>t?gl(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:e.to("_hasViewportTopOffset",t=>t?gl(this.viewportTopOffset):null),bottom:e.to("_isStickyToTheLimiter",t=>t?gl(this.limiterBottomOffset):null),marginLeft:e.to("_marginLeft")}},children:this.content}).render(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-sticky-panel"]},children:[this._contentPanelPlaceholder,this._contentPanel]})}render(){super.render(),this._checkIfShouldBeSticky(),this.listenTo(ts.window,"scroll",()=>{this._checkIfShouldBeSticky()}),this.listenTo(this,"change:isActive",()=>{this._checkIfShouldBeSticky()})}_checkIfShouldBeSticky(){const t=this._panelRect=this._contentPanel.getBoundingClientRect();let e;this.limiterElement?(e=this._limiterRect=this.limiterElement.getBoundingClientRect(),this.isSticky=this.isActive&&e.top{this[e](),i()})}}get first(){return this.focusables.find(wl)||null}get last(){return this.focusables.filter(wl).slice(-1)[0]||null}get next(){return this._getFocusableItem(1)}get previous(){return this._getFocusableItem(-1)}get current(){let t=null;return null===this.focusTracker.focusedElement?null:(this.focusables.find((e,i)=>{const n=e.element===this.focusTracker.focusedElement;return n&&(t=i),n}),t)}focusFirst(){this._focus(this.first)}focusLast(){this._focus(this.last)}focusNext(){this._focus(this.next)}focusPrevious(){this._focus(this.previous)}_focus(t){t&&t.focus()}_getFocusableItem(t){const e=this.current,i=this.focusables.length;if(!i)return null;if(null===e)return this[1===t?"first":"last"];let n=(e+i+t)%i;do{const e=this.focusables.get(n);if(wl(e))return e;n=(n+i+t)%i}while(n!==e);return null}}function wl(t){return!(!t.focus||"none"==ts.window.getComputedStyle(t.element).display)}class kl extends rl{constructor(t){super(t),this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__separator"]}})}}class _l{constructor(t,e){_l._observerInstance||_l._createObserver(),this._element=t,this._callback=e,_l._addElementCallback(t,e),_l._observerInstance.observe(t)}destroy(){_l._deleteElementCallback(this._element,this._callback)}static _addElementCallback(t,e){_l._elementCallbacks||(_l._elementCallbacks=new Map);let i=_l._elementCallbacks.get(t);i||(i=new Set,_l._elementCallbacks.set(t,i)),i.add(e)}static _deleteElementCallback(t,e){const i=_l._getElementCallbacks(t);i&&(i.delete(e),i.size||(_l._elementCallbacks.delete(t),_l._observerInstance.unobserve(t))),_l._elementCallbacks&&!_l._elementCallbacks.size&&(_l._observerInstance=null,_l._elementCallbacks=null)}static _getElementCallbacks(t){return _l._elementCallbacks?_l._elementCallbacks.get(t):null}static _createObserver(){let t;t="function"==typeof ts.window.ResizeObserver?ts.window.ResizeObserver:vl,_l._observerInstance=new t(t=>{for(const e of t){const t=_l._getElementCallbacks(e.target);if(t)for(const i of t)i(e)}})}}_l._observerInstance=null,_l._elementCallbacks=null;class vl{constructor(t){this._callback=t,this._elements=new Set,this._previousRects=new Map,this._periodicCheckTimeout=null}observe(t){this._elements.add(t),this._checkElementRectsAndExecuteCallback(),1===this._elements.size&&this._startPeriodicCheck()}unobserve(t){this._elements.delete(t),this._previousRects.delete(t),this._elements.size||this._stopPeriodicCheck()}_startPeriodicCheck(){const t=()=>{this._checkElementRectsAndExecuteCallback(),this._periodicCheckTimeout=setTimeout(t,100)};this.listenTo(ts.window,"resize",()=>{this._checkElementRectsAndExecuteCallback()}),this._periodicCheckTimeout=setTimeout(t,100)}_stopPeriodicCheck(){clearTimeout(this._periodicCheckTimeout),this.stopListening(),this._previousRects.clear()}_checkElementRectsAndExecuteCallback(){const t=[];for(const e of this._elements)this._hasRectChanged(e)&&t.push({target:e,contentRect:this._previousRects.get(e)});t.length&&this._callback(t)}_hasRectChanged(t){if(!t.ownerDocument.body.contains(t))return!1;const e=new Xs(t),i=this._previousRects.get(t),n=!i||!i.isEqual(e);return this._previousRects.set(t,e),n}}vi(vl,ls);class yl extends rl{constructor(t){super(t);const e=this.bindTemplate;this.set("isVisible",!1),this.set("position","se"),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-dropdown__panel",e.to("position",t=>`ck-dropdown__panel_${t}`),e.if("isVisible","ck-dropdown__panel-visible")]},children:this.children,on:{selectstart:e.to(t=>t.preventDefault())}})}focus(){this.children.length&&this.children.first.focus()}focusLast(){if(this.children.length){const t=this.children.last;"function"==typeof t.focusLast?t.focusLast():t.focus()}}}i(24);function xl({element:t,target:e,positions:i,limiter:n,fitInViewport:o}){V(e)&&(e=e()),V(n)&&(n=n());const s=function(t){for(;t&&"html"!=t.tagName.toLowerCase();){if("static"!=ts.window.getComputedStyle(t).position)return t;t=t.parentElement}return null}(t.parentElement),r=new Xs(t),a=new Xs(e);let c,l;if(n||o){const t=n&&new Xs(n).getVisible(),e=o&&new Xs(ts.window);[l,c]=function(t,e,i,n,o){let s,r,a=0,c=0;const l=i.getArea();return t.some(t=>{const[d,h]=Al(t,e,i);let u,f;if(n)if(o){const t=n.getIntersection(o);u=t?t.getIntersectionArea(h):0}else u=n.getIntersectionArea(h);function m(){c=f,a=u,s=h,r=d}return o&&(f=o.getIntersectionArea(h)),o&&!n?f>c&&m():!o&&n?u>a&&m():(f>c&&u>=a||f>=c&&u>a)&&m(),u===l}),s?[r,s]:null}(i,a,r,t,e)||Al(i[0],a,r)}else[l,c]=Al(i[0],a,r);let{left:d,top:h}=Cl(c);if(s){const t=Cl(new Xs(s)),e=Js(s);d-=t.left,h-=t.top,d+=s.scrollLeft,h+=s.scrollTop,d-=e.left,h-=e.top}return{left:d,top:h,name:l}}function Al(t,e,i){const{left:n,top:o,name:s}=t(e,i);return[s,i.clone().moveTo(n,o)]}function Cl({left:t,top:e}){const{scrollX:i,scrollY:n}=ts.window;return{left:t+i,top:e+n}}class Tl extends rl{constructor(t,e,i){super(t);const n=this.bindTemplate;this.buttonView=e,this.panelView=i,this.set("isOpen",!1),this.set("isEnabled",!0),this.set("class"),this.set("id"),this.set("panelPosition","auto"),this.focusTracker=new Ic,this.keystrokes=new yc,this.setTemplate({tag:"div",attributes:{class:["ck","ck-dropdown",n.to("class"),n.if("isEnabled","ck-disabled",t=>!t)],id:n.to("id"),"aria-describedby":n.to("ariaDescribedById")},children:[e,i]}),e.extendTemplate({attributes:{class:["ck-dropdown__button"]}})}render(){super.render(),this.listenTo(this.buttonView,"open",()=>{this.isOpen=!this.isOpen}),this.panelView.bind("isVisible").to(this,"isOpen"),this.on("change:isOpen",()=>{this.isOpen&&("auto"===this.panelPosition?this.panelView.position=Tl._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:!0,positions:this._panelPositions}).name:this.panelView.position=this.panelPosition)}),this.keystrokes.listenTo(this.element),this.focusTracker.add(this.element);const t=(t,e)=>{this.isOpen&&(this.buttonView.focus(),this.isOpen=!1,e())};this.keystrokes.set("arrowdown",(t,e)=>{this.buttonView.isEnabled&&!this.isOpen&&(this.isOpen=!0,e())}),this.keystrokes.set("arrowright",(t,e)=>{this.isOpen&&e()}),this.keystrokes.set("arrowleft",t),this.keystrokes.set("esc",t)}focus(){this.buttonView.focus()}get _panelPositions(){const{southEast:t,southWest:e,northEast:i,northWest:n}=Tl.defaultPanelPositions;return"ltr"===this.locale.uiLanguageDirection?[t,e,i,n]:[e,t,n,i]}}Tl.defaultPanelPositions={southEast:t=>({top:t.bottom,left:t.left,name:"se"}),southWest:(t,e)=>({top:t.bottom,left:t.left-e.width+t.width,name:"sw"}),northEast:(t,e)=>({top:t.top-e.height,left:t.left,name:"ne"}),northWest:(t,e)=>({top:t.bottom-e.height,left:t.left-e.width+t.width,name:"nw"})},Tl._getOptimalPosition=xl;i(26);class Pl extends rl{constructor(){super();const t=this.bindTemplate;this.set("content",""),this.set("viewBox","0 0 20 20"),this.set("fillColor",""),this.setTemplate({tag:"svg",ns:"http://www.w3.org/2000/svg",attributes:{class:["ck","ck-icon"],viewBox:t.to("viewBox")}})}render(){super.render(),this._updateXMLContent(),this._colorFillPaths(),this.on("change:content",()=>{this._updateXMLContent(),this._colorFillPaths()}),this.on("change:fillColor",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const t=(new DOMParser).parseFromString(this.content.trim(),"image/svg+xml").querySelector("svg"),e=t.getAttribute("viewBox");for(e&&(this.viewBox=e),this.element.innerHTML="";t.childNodes.length>0;)this.element.appendChild(t.childNodes[0])}}_colorFillPaths(){this.fillColor&&this.element.querySelectorAll(".ck-icon__fill").forEach(t=>{t.style.fill=this.fillColor})}}i(28);class Sl extends rl{constructor(t){super(t),this.set("text",""),this.set("position","s");const e=this.bindTemplate;this.setTemplate({tag:"span",attributes:{class:["ck","ck-tooltip",e.to("position",t=>"ck-tooltip_"+t),e.if("text","ck-hidden",t=>!t.trim())]},children:[{tag:"span",attributes:{class:["ck","ck-tooltip__text"]},children:[{text:e.to("text")}]}]})}}i(30);class El extends rl{constructor(t){super(t);const e=this.bindTemplate,i=li();this.set("class"),this.set("labelStyle"),this.set("icon"),this.set("isEnabled",!0),this.set("isOn",!1),this.set("isVisible",!0),this.set("isToggleable",!1),this.set("keystroke"),this.set("label"),this.set("tabindex",-1),this.set("tooltip"),this.set("tooltipPosition","s"),this.set("type","button"),this.set("withText",!1),this.set("withKeystroke",!1),this.children=this.createCollection(),this.tooltipView=this._createTooltipView(),this.labelView=this._createLabelView(i),this.iconView=new Pl,this.iconView.extendTemplate({attributes:{class:"ck-button__icon"}}),this.keystrokeView=this._createKeystrokeView(),this.bind("_tooltipString").to(this,"tooltip",this,"label",this,"keystroke",this._getTooltipString.bind(this)),this.setTemplate({tag:"button",attributes:{class:["ck","ck-button",e.to("class"),e.if("isEnabled","ck-disabled",t=>!t),e.if("isVisible","ck-hidden",t=>!t),e.to("isOn",t=>t?"ck-on":"ck-off"),e.if("withText","ck-button_with-text"),e.if("withKeystroke","ck-button_with-keystroke")],type:e.to("type",t=>t||"button"),tabindex:e.to("tabindex"),"aria-labelledby":`ck-editor__aria-label_${i}`,"aria-disabled":e.if("isEnabled",!0,t=>!t),"aria-pressed":e.to("isOn",t=>!!this.isToggleable&&String(t))},children:this.children,on:{mousedown:e.to(t=>{t.preventDefault()}),click:e.to(t=>{this.isEnabled?this.fire("execute"):t.preventDefault()})}})}render(){super.render(),this.icon&&(this.iconView.bind("content").to(this,"icon"),this.children.add(this.iconView)),this.children.add(this.tooltipView),this.children.add(this.labelView),this.withKeystroke&&this.children.add(this.keystrokeView)}focus(){this.element.focus()}_createTooltipView(){const t=new Sl;return t.bind("text").to(this,"_tooltipString"),t.bind("position").to(this,"tooltipPosition"),t}_createLabelView(t){const e=new rl,i=this.bindTemplate;return e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__label"],style:i.to("labelStyle"),id:`ck-editor__aria-label_${t}`},children:[{text:this.bindTemplate.to("label")}]}),e}_createKeystrokeView(){const t=new rl;return t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__keystroke"]},children:[{text:this.bindTemplate.to("keystroke",t=>ko(t))}]}),t}_getTooltipString(t,e,i){return t?"string"==typeof t?t:(i&&(i=ko(i)),t instanceof Function?t(e,i):`${e}${i?` (${i})`:""}`):""}}class Ml extends El{constructor(t){super(t),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{"aria-haspopup":!0}}),this.delegate("execute").to(this,"open")}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){const t=new Pl;return t.content='',t.extendTemplate({attributes:{class:"ck-dropdown__arrow"}}),t}}i(32);class Il extends rl{constructor(){super(),this.items=this.createCollection(),this.focusTracker=new Ic,this.keystrokes=new yc,this._focusCycler=new bl({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}}),this.setTemplate({tag:"ul",attributes:{class:["ck","ck-reset","ck-list"]},children:this.items})}render(){super.render();for(const t of this.items)this.focusTracker.add(t.element);this.items.on("add",(t,e)=>{this.focusTracker.add(e.element)}),this.items.on("remove",(t,e)=>{this.focusTracker.remove(e.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}}class Nl extends rl{constructor(t){super(t),this.children=this.createCollection(),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__item"]},children:this.children})}focus(){this.children.first.focus()}}class Ol extends rl{constructor(t){super(t),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__separator"]}})}}i(34);class Rl extends El{constructor(t){super(t),this.isToggleable=!0,this.toggleSwitchView=this._createToggleView(),this.extendTemplate({attributes:{class:"ck-switchbutton"}})}render(){super.render(),this.children.add(this.toggleSwitchView)}_createToggleView(){const t=new rl;return t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__toggle"]},children:[{tag:"span",attributes:{class:["ck","ck-button__toggle__inner"]}}]}),t}}function Ll({emitter:t,activator:e,callback:i,contextElements:n}){t.listenTo(document,"mousedown",(t,{target:o})=>{if(e()){for(const t of n)if(t.contains(o))return;i()}})}i(36),i(38);function Dl(t,e=Ml){const i=new e(t),n=new yl(t),o=new Tl(t,i,n);return i.bind("isEnabled").to(o),i instanceof Ml?i.bind("isOn").to(o,"isOpen"):i.arrowView.bind("isOn").to(o,"isOpen"),function(t){(function(t){t.on("render",()=>{Ll({emitter:t,activator:()=>t.isOpen,callback:()=>{t.isOpen=!1},contextElements:[t.element]})})})(t),function(t){t.on("execute",e=>{e.source instanceof Rl||(t.isOpen=!1)})}(t),function(t){t.keystrokes.set("arrowdown",(e,i)=>{t.isOpen&&(t.panelView.focus(),i())}),t.keystrokes.set("arrowup",(e,i)=>{t.isOpen&&(t.panelView.focusLast(),i())})}(t)}(o),o}function zl(t,e){const i=t.locale,n=i.t,o=t.toolbarView=new Vl(i);o.set("ariaLabel",n("ca")),t.extendTemplate({attributes:{class:["ck-toolbar-dropdown"]}}),e.map(t=>o.items.add(t)),t.panelView.children.add(o),o.items.delegate("execute").to(t)}function jl(t,e){const i=t.locale,n=t.listView=new Il(i);n.items.bindTo(e).using(({type:t,model:e})=>{if("separator"===t)return new Ol(i);if("button"===t||"switchbutton"===t){const n=new Nl(i);let o;return o="button"===t?new El(i):new Rl(i),o.bind(...Object.keys(e)).to(e),o.delegate("execute").to(n),n.children.add(o),n}}),t.panelView.children.add(n),n.items.delegate("execute").to(t)}i(40);class Vl extends rl{constructor(t,e){super(t);const i=this.bindTemplate,n=this.t;var o;this.options=e||{},this.set("ariaLabel",n("by")),this.items=this.createCollection(),this.focusTracker=new Ic,this.keystrokes=new yc,this.set("class"),this.set("isCompact",!1),this.itemsView=new Bl(t),this.children=this.createCollection(),this.children.add(this.itemsView),this.focusables=this.createCollection(),this._focusCycler=new bl({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:["arrowleft","arrowup"],focusNext:["arrowright","arrowdown"]}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar",i.to("class"),i.if("isCompact","ck-toolbar_compact")],role:"toolbar","aria-label":i.to("ariaLabel")},children:this.children,on:{mousedown:(o=this,o.bindTemplate.to(t=>{t.target===o.element&&t.preventDefault()}))}}),this._behavior=this.options.shouldGroupWhenFull?new Hl(this):new Fl(this)}render(){super.render();for(const t of this.items)this.focusTracker.add(t.element);this.items.on("add",(t,e)=>{this.focusTracker.add(e.element)}),this.items.on("remove",(t,e)=>{this.focusTracker.remove(e.element)}),this.keystrokes.listenTo(this.element),this._behavior.render(this)}destroy(){return this._behavior.destroy(),super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(t,e){t.map(t=>{"|"==t?this.items.add(new kl):e.has(t)?this.items.add(e.create(t)):console.warn(Object(hi.a)("toolbarview-item-unavailable: The requested toolbar item is unavailable."),{name:t})})}}class Bl extends rl{constructor(t){super(t),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar__items"]},children:this.children})}}class Fl{constructor(t){const e=t.bindTemplate;t.set("isVertical",!1),t.itemsView.children.bindTo(t.items).using(t=>t),t.focusables.bindTo(t.items).using(t=>t),t.extendTemplate({attributes:{class:[e.if("isVertical","ck-toolbar_vertical")]}})}render(){}destroy(){}}class Hl{constructor(t){this.viewChildren=t.children,this.viewFocusables=t.focusables,this.viewItemsView=t.itemsView,this.viewFocusTracker=t.focusTracker,this.viewLocale=t.locale,this.ungroupedItems=t.createCollection(),this.groupedItems=t.createCollection(),this.groupedItemsDropdown=this._createGroupedItemsDropdown(),this.resizeObserver=null,this.cachedPadding=null,t.itemsView.children.bindTo(this.ungroupedItems).using(t=>t),this.ungroupedItems.on("add",this._updateFocusCycleableItems.bind(this)),this.ungroupedItems.on("remove",this._updateFocusCycleableItems.bind(this)),t.children.on("add",this._updateFocusCycleableItems.bind(this)),t.children.on("remove",this._updateFocusCycleableItems.bind(this)),t.items.on("add",(t,e,i)=>{i>this.ungroupedItems.length?this.groupedItems.add(e,i-this.ungroupedItems.length):this.ungroupedItems.add(e,i),this._updateGrouping()}),t.items.on("remove",(t,e,i)=>{i>this.ungroupedItems.length?this.groupedItems.remove(e):this.ungroupedItems.remove(e),this._updateGrouping()}),t.extendTemplate({attributes:{class:["ck-toolbar_grouping"]}})}render(t){this.viewElement=t.element,this._enableGroupingOnResize()}destroy(){this.groupedItemsDropdown.destroy(),this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement))return;let t;for(;this._areItemsOverflowing;)this._groupLastItem(),t=!0;if(!t&&this.groupedItems.length){for(;this.groupedItems.length&&!this._areItemsOverflowing;)this._ungroupFirstItem();this._areItemsOverflowing&&this._groupLastItem()}}get _areItemsOverflowing(){if(!this.ungroupedItems.length)return!1;const t=this.viewElement,e=this.viewLocale.uiLanguageDirection,i=new Xs(t.lastChild),n=new Xs(t);if(!this.cachedPadding){const i=ts.window.getComputedStyle(t),n="ltr"===e?"paddingRight":"paddingLeft";this.cachedPadding=Number.parseInt(i[n])}return"ltr"===e?i.right>n.right-this.cachedPadding:i.left{t&&t===e.contentRect.width||(this._updateGrouping(),t=e.contentRect.width)}),this._updateGrouping()}_groupLastItem(){this.groupedItems.length||(this.viewChildren.add(new kl),this.viewChildren.add(this.groupedItemsDropdown),this.viewFocusTracker.add(this.groupedItemsDropdown.element)),this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first)),this.groupedItems.length||(this.viewChildren.remove(this.groupedItemsDropdown),this.viewChildren.remove(this.viewChildren.last),this.viewFocusTracker.remove(this.groupedItemsDropdown.element))}_createGroupedItemsDropdown(){const t=this.viewLocale,e=t.t,i=Dl(t);return i.class="ck-toolbar__grouped-dropdown",i.panelPosition="ltr"===t.uiLanguageDirection?"sw":"se",zl(i,[]),i.buttonView.set({label:e("bz"),tooltip:!0,icon:''}),i.toolbarView.items.bindTo(this.groupedItems).using(t=>t),i}_updateFocusCycleableItems(){this.viewFocusables.clear(),this.ungroupedItems.map(t=>{this.viewFocusables.add(t)}),this.groupedItems.length&&this.viewFocusables.add(this.groupedItemsDropdown)}}i(42);class Ul extends hl{constructor(t,e,i={}){super(t),this.stickyPanel=new pl(t),this.toolbar=new Vl(t,{shouldGroupWhenFull:i.shouldToolbarGroupWhenFull}),this.editable=new fl(t,e)}render(){super.render(),this.stickyPanel.content.add(this.toolbar),this.top.add(this.stickyPanel),this.main.add(this.editable)}}class Wl extends Ac{constructor(t,e){super(e),ii(t)&&(this.sourceElement=t),this.data.processor=new Sc,this.model.document.createRoot();const i=!this.config.get("toolbar.shouldNotGroupWhenFull"),n=new Ul(this.locale,this.editing.view,{shouldToolbarGroupWhenFull:i});this.ui=new Vc(this,n),function(t){if(!V(t.updateSourceElement))throw new hi.b("attachtoform-missing-elementapi-interface: Editor passed to attachToForm() must implement ElementApi.",t);const e=t.sourceElement;if(e&&"textarea"===e.tagName.toLowerCase()&&e.form){let i;const n=e.form,o=()=>t.updateSourceElement();V(n.submit)&&(i=n.submit,n.submit=()=>{o(),i.apply(n)}),n.addEventListener("submit",o),t.on("destroy",()=>{n.removeEventListener("submit",o),i&&(n.submit=i)})}}(this)}destroy(){return this.sourceElement&&this.updateSourceElement(),this.ui.destroy(),super.destroy()}static create(t,e={}){return new Promise(i=>{const n=new this(t,e);i(n.initPlugins().then(()=>n.ui.init(ii(t)?t:null)).then(()=>{if(!ii(t)&&e.initialData)throw new hi.b("editor-create-initial-data: The config.initialData option cannot be used together with initial data passed in Editor.create().",null);const i=e.initialData||function(t){return ii(t)?(e=t,e instanceof HTMLTextAreaElement?e.value:e.innerHTML):t;var e}(t);return n.data.init(i)}).then(()=>n.fire("ready")).then(()=>n))})}}vi(Wl,Cc),vi(Wl,Tc);class ql{constructor(t){this.editor=t,this.set("isEnabled",!0),this._disableStack=new Set}forceDisabled(t){this._disableStack.add(t),1==this._disableStack.size&&(this.on("set:isEnabled",$l,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(t){this._disableStack.delete(t),0==this._disableStack.size&&(this.off("set:isEnabled",$l),this.isEnabled=!0)}destroy(){this.stopListening()}static get isContextPlugin(){return!1}}function $l(t){t.return=!1,t.stop()}vi(ql,Hn);class Yl{constructor(t){this.files=function(t){const e=t.files?Array.from(t.files):[],i=t.items?Array.from(t.items):[];if(e.length)return e;return i.filter(t=>"file"===t.kind).map(t=>t.getAsFile())}(t),this._native=t}get types(){return this._native.types}getData(t){return this._native.getData(t)}setData(t,e){this._native.setData(t,e)}}class Gl extends Os{constructor(t){super(t);const e=this.document;function i(t,i){i.preventDefault();const n=i.dropRange?[i.dropRange]:Array.from(e.selection.getRanges()),o=new ai(e,"clipboardInput");e.fire(o,{dataTransfer:i.dataTransfer,targetRanges:n}),o.stop.called&&i.stopPropagation()}this.domEventType=["paste","copy","cut","drop","dragover"],this.listenTo(e,"paste",i,{priority:"low"}),this.listenTo(e,"drop",i,{priority:"low"})}onDomEvent(t){const e={dataTransfer:new Yl(t.clipboardData?t.clipboardData:t.dataTransfer)};"drop"==t.type&&(e.dropRange=function(t,e){const i=e.target.ownerDocument,n=e.clientX,o=e.clientY;let s;i.caretRangeFromPoint&&i.caretRangeFromPoint(n,o)?s=i.caretRangeFromPoint(n,o):e.rangeParent&&(s=i.createRange(),s.setStart(e.rangeParent,e.rangeOffset),s.collapse(!0));return s?t.domConverter.domRangeToView(s):t.document.selection.getFirstRange()}(this.view,t)),this.fire(t.type,t,e)}}const Ql=["figcaption","li"];class Kl extends ql{static get pluginName(){return"Clipboard"}init(){const t=this.editor,e=t.model.document,i=t.editing.view,n=i.document;function o(i,o){const s=o.dataTransfer;o.preventDefault();const r=t.data.toView(t.model.getSelectedContent(e.selection));n.fire("clipboardOutput",{dataTransfer:s,content:r,method:i.name})}this._htmlDataProcessor=new Sc,i.addObserver(Gl),this.listenTo(n,"clipboardInput",e=>{t.isReadOnly&&e.stop()},{priority:"highest"}),this.listenTo(n,"clipboardInput",(t,e)=>{const n=e.dataTransfer;let o="";var s;n.getData("text/html")?o=function(t){return t.replace(/(\s+)<\/span>/g,(t,e)=>1==e.length?" ":e)}(n.getData("text/html")):n.getData("text/plain")&&((s=(s=n.getData("text/plain")).replace(//g,">").replace(/\n/g,"

").replace(/^\s/," ").replace(/\s$/," ").replace(/\s\s/g,"  ")).indexOf("

")>-1&&(s=`

${s}

`),o=s),o=this._htmlDataProcessor.toView(o),this.fire("inputTransformation",{content:o,dataTransfer:n}),i.scrollToTheSelection()},{priority:"low"}),this.listenTo(this,"inputTransformation",(t,e)=>{if(!e.content.isEmpty){const t=this.editor.data,i=this.editor.model,n=t.toModel(e.content,"$clipboardHolder");if(0==n.childCount)return;i.insertContent(n)}},{priority:"low"}),this.listenTo(n,"copy",o,{priority:"low"}),this.listenTo(n,"cut",(e,i)=>{t.isReadOnly?i.preventDefault():o(e,i)},{priority:"low"}),this.listenTo(n,"clipboardOutput",(i,n)=>{n.content.isEmpty||(n.dataTransfer.setData("text/html",this._htmlDataProcessor.toData(n.content)),n.dataTransfer.setData("text/plain",function t(e){let i="";if(e.is("text")||e.is("textProxy"))i=e.data;else if(e.is("img")&&e.hasAttribute("alt"))i=e.getAttribute("alt");else{let n=null;for(const o of e.getChildren()){const e=t(o);n&&(n.is("containerElement")||o.is("containerElement"))&&(Ql.includes(n.name)||Ql.includes(o.name)?i+="\n":i+="\n\n"),i+=e,n=o}}return i}(n.content))),"cut"==n.method&&t.model.deleteContent(e.selection)},{priority:"low"})}}class Jl{constructor(t){this.editor=t,this.set("value",void 0),this.set("isEnabled",!1),this._disableStack=new Set,this.decorate("execute"),this.listenTo(this.editor.model.document,"change",()=>{this.refresh()}),this.on("execute",t=>{this.isEnabled||t.stop()},{priority:"high"}),this.listenTo(t,"change:isReadOnly",(t,e,i)=>{i?this.forceDisabled("readOnlyMode"):this.clearForceDisabled("readOnlyMode")})}refresh(){this.isEnabled=!0}forceDisabled(t){this._disableStack.add(t),1==this._disableStack.size&&(this.on("set:isEnabled",Zl,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(t){this._disableStack.delete(t),0==this._disableStack.size&&(this.off("set:isEnabled",Zl),this.refresh())}execute(){}destroy(){this.stopListening()}}function Zl(t){t.return=!1,t.stop()}function*Xl(t,e){for(const i of e)i&&t.getAttributeProperties(i[0]).copyOnEnter&&(yield i)}vi(Jl,Hn);class td extends Jl{execute(){const t=this.editor.model,e=t.document;t.change(i=>{!function(t,e,i,n){const o=i.isCollapsed,s=i.getFirstRange(),r=s.start.parent,a=s.end.parent;if(n.isLimit(r)||n.isLimit(a))return void(o||r!=a||t.deleteContent(i));if(o){const t=Xl(e.model.schema,i.getAttributes());ed(e,s.start),e.setSelectionAttribute(t)}else{const n=!(s.start.isAtStart&&s.end.isAtEnd),o=r==a;t.deleteContent(i,{leaveUnmerged:n}),n&&(o?ed(e,i.focus):e.setSelection(a,0))}}(this.editor.model,i,e.selection,t.schema),this.fire("afterExecute",{writer:i})})}}function ed(t,e){t.split(e),t.setSelection(e.parent.nextSibling,0)}class id extends us{constructor(t){super(t);const e=this.document;e.on("keydown",(t,i)=>{if(this.isEnabled&&i.keyCode==po.enter){let n;e.once("enter",t=>n=t,{priority:"highest"}),e.fire("enter",new Ns(e,i.domEvent,{isSoft:i.shiftKey})),n&&n.stop.called&&t.stop()}})}observe(){}}class nd extends ql{static get pluginName(){return"Enter"}init(){const t=this.editor,e=t.editing.view,i=e.document;e.addObserver(id),t.commands.add("enter",new td(t)),this.listenTo(i,"enter",(i,n)=>{n.preventDefault(),n.isSoft||(t.execute("enter"),e.scrollToTheSelection())},{priority:"low"})}}class od extends Jl{execute(){const t=this.editor.model,e=t.document;t.change(i=>{!function(t,e,i){const n=i.isCollapsed,o=i.getFirstRange(),s=o.start.parent,r=o.end.parent,a=s==r;if(n){const n=Xl(t.schema,i.getAttributes());sd(t,e,o.end),e.removeSelectionAttribute(i.getAttributeKeys()),e.setSelectionAttribute(n)}else{const n=!(o.start.isAtStart&&o.end.isAtEnd);t.deleteContent(i,{leaveUnmerged:n}),a?sd(t,e,i.focus):n&&e.setSelection(r,0)}}(t,i,e.selection),this.fire("afterExecute",{writer:i})})}refresh(){const t=this.editor.model,e=t.document;this.isEnabled=function(t,e){if(e.rangeCount>1)return!1;const i=e.anchor;if(!i||!t.checkChild(i,"softBreak"))return!1;const n=e.getFirstRange(),o=n.start.parent,s=n.end.parent;if((rd(o,t)||rd(s,t))&&o!==s)return!1;return!0}(t.schema,e.selection)}}function sd(t,e,i){const n=e.createElement("softBreak");t.insertContent(n,i),e.setSelection(n,"after")}function rd(t,e){return!t.is("rootElement")&&(e.isLimit(t)||rd(t.parent,e))}class ad extends ql{static get pluginName(){return"ShiftEnter"}init(){const t=this.editor,e=t.model.schema,i=t.conversion,n=t.editing.view,o=n.document;e.register("softBreak",{allowWhere:"$text",isInline:!0}),i.for("upcast").elementToElement({model:"softBreak",view:"br"}),i.for("downcast").elementToElement({model:"softBreak",view:(t,e)=>e.createEmptyElement("br")}),n.addObserver(id),t.commands.add("shiftEnter",new od(t)),this.listenTo(o,"enter",(e,i)=>{i.preventDefault(),i.isSoft&&(t.execute("shiftEnter"),n.scrollToTheSelection())},{priority:"low"})}}class cd{constructor(t,e=20){this.model=t,this.size=0,this.limit=e,this.isLocked=!1,this._changeCallback=(t,e)=>{"transparent"!=e.type&&e!==this._batch&&this._reset(!0)},this._selectionChangeCallback=()=>{this._reset()},this.model.document.on("change",this._changeCallback),this.model.document.selection.on("change:range",this._selectionChangeCallback),this.model.document.selection.on("change:attribute",this._selectionChangeCallback)}get batch(){return this._batch||(this._batch=this.model.createBatch()),this._batch}input(t){this.size+=t,this.size>=this.limit&&this._reset(!0)}lock(){this.isLocked=!0}unlock(){this.isLocked=!1}destroy(){this.model.document.off("change",this._changeCallback),this.model.document.selection.off("change:range",this._selectionChangeCallback),this.model.document.selection.off("change:attribute",this._selectionChangeCallback)}_reset(t){this.isLocked&&!t||(this._batch=null,this.size=0)}}class ld extends Jl{constructor(t,e){super(t),this._buffer=new cd(t.model,e),this._batches=new WeakSet}get buffer(){return this._buffer}destroy(){super.destroy(),this._buffer.destroy()}execute(t={}){const e=this.editor.model,i=e.document,n=t.text||"",o=n.length,s=t.range||i.selection.getFirstRange(),r=t.resultRange;e.enqueueChange(this._buffer.batch,t=>{const a=s.isCollapsed;this._buffer.lock(),e.deleteContent(e.createSelection(s)),n&&e.insertContent(t.createText(n,i.selection.getAttributes()),s.start),r?t.setSelection(r):a&&t.setSelection(s.start.getShiftedBy(o)),this._buffer.unlock(),this._buffer.input(o),this._batches.add(this._buffer.batch)})}}function dd(t){let e=null;const i=t.model,n=t.editing.view,o=t.commands.get("input");function s(t){const s=i.document,a=n.document.isComposing,c=e&&e.isEqual(s.selection);e=null,o.isEnabled&&(function(t){if(t.ctrlKey)return!0;return hd.includes(t.keyCode)}(t)||s.selection.isCollapsed||a&&229===t.keyCode||!a&&229===t.keyCode&&c||r())}function r(){const t=o.buffer;t.lock(),i.enqueueChange(t.batch,()=>{i.deleteContent(i.document.selection)}),t.unlock()}fo.isAndroid?n.document.on("beforeinput",(t,e)=>s(e),{priority:"lowest"}):n.document.on("keydown",(t,e)=>s(e),{priority:"lowest"}),n.document.on("compositionstart",(function(){const t=i.document,e=1!==t.selection.rangeCount||t.selection.getFirstRange().isFlat;if(t.selection.isCollapsed||e)return;r()}),{priority:"lowest"}),n.document.on("compositionend",()=>{e=i.createSelection(i.document.selection)},{priority:"lowest"})}const hd=[bo("arrowUp"),bo("arrowRight"),bo("arrowDown"),bo("arrowLeft"),9,16,17,18,19,20,27,33,34,35,36,45,91,93,144,145,173,174,175,176,177,178,179,255];for(let t=112;t<=135;t++)hd.push(t);function ud(t){if(t.newChildren.length-t.oldChildren.length!=1)return;const e=function(t,e){const i=[];let n,o=0;return t.forEach(t=>{"equal"==t?(s(),o++):"insert"==t?(r("insert")?n.values.push(e[o]):(s(),n={type:"insert",index:o,values:[e[o]]}),o++):r("delete")?n.howMany++:(s(),n={type:"delete",index:o,howMany:1})}),s(),i;function s(){n&&(i.push(n),n=null)}function r(t){return n&&n.type==t}}($o(t.oldChildren,t.newChildren,fd),t.newChildren);if(e.length>1)return;const i=e[0];return i.values[0]&&i.values[0].is("text")?i:void 0}function fd(t,e){return t&&t.is("text")&&e&&e.is("text")?t.data===e.data:t===e}class md{constructor(t){this.editor=t,this.editing=this.editor.editing}handle(t,e){if(function(t){if(0==t.length)return!1;for(const e of t)if("children"===e.type&&!ud(e))return!0;return!1}(t))this._handleContainerChildrenMutations(t,e);else for(const i of t)this._handleTextMutation(i,e),this._handleTextNodeInsertion(i)}_handleContainerChildrenMutations(t,e){const i=function(t){const e=t.map(t=>t.node).reduce((t,e)=>t.getCommonAncestor(e,{includeSelf:!0}));if(!e)return;return e.getAncestors({includeSelf:!0,parentFirst:!0}).find(t=>t.is("containerElement")||t.is("rootElement"))}(t);if(!i)return;const n=this.editor.editing.view.domConverter.mapViewToDom(i),o=new os,s=this.editor.data.toModel(o.domToView(n)).getChild(0),r=this.editor.editing.mapper.toModelElement(i);if(!r)return;const a=Array.from(s.getChildren()),c=Array.from(r.getChildren()),l=a[a.length-1],d=c[c.length-1];l&&l.is("softBreak")&&d&&!d.is("softBreak")&&a.pop();const h=this.editor.model.schema;if(!gd(a,h)||!gd(c,h))return;const u=a.map(t=>t.is("text")?t.data:"@").join("").replace(/\u00A0/g," "),f=c.map(t=>t.is("text")?t.data:"@").join("").replace(/\u00A0/g," ");if(f===u)return;const m=$o(f,u),{firstChangeAt:g,insertions:p,deletions:b}=pd(m);let w=null;e&&(w=this.editing.mapper.toModelRange(e.getFirstRange()));const k=u.substr(g,p),_=this.editor.model.createRange(this.editor.model.createPositionAt(r,g),this.editor.model.createPositionAt(r,g+b));this.editor.execute("input",{text:k,range:_,resultRange:w})}_handleTextMutation(t,e){if("text"!=t.type)return;const i=t.newText.replace(/\u00A0/g," "),n=t.oldText.replace(/\u00A0/g," ");if(n===i)return;const o=$o(n,i),{firstChangeAt:s,insertions:r,deletions:a}=pd(o);let c=null;e&&(c=this.editing.mapper.toModelRange(e.getFirstRange()));const l=this.editing.view.createPositionAt(t.node,s),d=this.editing.mapper.toModelPosition(l),h=this.editor.model.createRange(d,d.getShiftedBy(a)),u=i.substr(s,r);this.editor.execute("input",{text:u,range:h,resultRange:c})}_handleTextNodeInsertion(t){if("children"!=t.type)return;const e=ud(t),i=this.editing.view.createPositionAt(t.node,e.index),n=this.editing.mapper.toModelPosition(i),o=e.values[0].data;this.editor.execute("input",{text:o.replace(/\u00A0/g," "),range:this.editor.model.createRange(n)})}}function gd(t,e){return t.every(t=>e.isInline(t))}function pd(t){let e=null,i=null;for(let n=0;n{new md(t).handle(i,n)})}(t)}isInput(t){return this.editor.commands.get("input")._batches.has(t)}}class wd extends Jl{constructor(t,e){super(t),this.direction=e,this._buffer=new cd(t.model,t.config.get("typing.undoStep"))}get buffer(){return this._buffer}execute(t={}){const e=this.editor.model,i=e.document;e.enqueueChange(this._buffer.batch,n=>{this._buffer.lock();const o=n.createSelection(t.selection||i.selection),s=o.isCollapsed;if(o.isCollapsed&&e.modifySelection(o,{direction:this.direction,unit:t.unit}),this._shouldEntireContentBeReplacedWithParagraph(t.sequence||1))return void this._replaceEntireContentWithParagraph(n);if(o.isCollapsed)return;let r=0;o.getFirstRange().getMinimalFlatRanges().forEach(t=>{r+=io(t.getWalker({singleCharacters:!0,ignoreElementEnd:!0,shallow:!0}))}),e.deleteContent(o,{doNotResetEntireContent:s}),this._buffer.input(r),n.setSelection(o),this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(t){if(t>1)return!1;const e=this.editor.model,i=e.document.selection,n=e.schema.getLimitElement(i);if(!(i.isCollapsed&&i.containsEntireContent(n)))return!1;if(!e.schema.checkChild(n,"paragraph"))return!1;const o=n.getChild(0);return!o||"paragraph"!==o.name}_replaceEntireContentWithParagraph(t){const e=this.editor.model,i=e.document.selection,n=e.schema.getLimitElement(i),o=t.createElement("paragraph");t.remove(t.createRangeIn(n)),t.insert(o,n),t.setSelection(o,0)}}class kd extends us{constructor(t){super(t);const e=t.document;let i=0;function n(t,i,n){let o;e.once("delete",t=>o=t,{priority:Number.POSITIVE_INFINITY}),e.fire("delete",new Ns(e,i,n)),o&&o.stop.called&&t.stop()}e.on("keyup",(t,e)=>{e.keyCode!=po.delete&&e.keyCode!=po.backspace||(i=0)}),e.on("keydown",(t,e)=>{const o={};if(e.keyCode==po.delete)o.direction="forward",o.unit="character";else{if(e.keyCode!=po.backspace)return;o.direction="backward",o.unit="codePoint"}const s=fo.isMac?e.altKey:e.ctrlKey;o.unit=s?"word":o.unit,o.sequence=++i,n(t,e.domEvent,o)}),fo.isAndroid&&e.on("beforeinput",(e,i)=>{if("deleteContentBackward"!=i.domEvent.inputType)return;const o={unit:"codepoint",direction:"backward",sequence:1},s=i.domTarget.ownerDocument.defaultView.getSelection();s.anchorNode==s.focusNode&&s.anchorOffset+1!=s.focusOffset&&(o.selectionToRemove=t.domConverter.domSelectionToView(s)),n(e,i.domEvent,o)})}observe(){}}class _d extends ql{static get pluginName(){return"Delete"}init(){const t=this.editor,e=t.editing.view,i=e.document;if(e.addObserver(kd),t.commands.add("forwardDelete",new wd(t,"forward")),t.commands.add("delete",new wd(t,"backward")),this.listenTo(i,"delete",(i,n)=>{const o={unit:n.unit,sequence:n.sequence};if(n.selectionToRemove){const e=t.model.createSelection(),i=[];for(const e of n.selectionToRemove.getRanges())i.push(t.editing.mapper.toModelRange(e));e.setTo(i),o.selection=e}t.execute("forward"==n.direction?"forwardDelete":"delete",o),n.preventDefault(),e.scrollToTheSelection()}),fo.isAndroid){let t=null;this.listenTo(i,"delete",(e,i)=>{const n=i.domTarget.ownerDocument.defaultView.getSelection();t={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}},{priority:"lowest"}),this.listenTo(i,"keyup",(e,i)=>{if(t){const e=i.domTarget.ownerDocument.defaultView.getSelection();e.collapse(t.anchorNode,t.anchorOffset),e.extend(t.focusNode,t.focusOffset),t=null}})}}}class vd extends ql{static get requires(){return[bd,_d]}static get pluginName(){return"Typing"}}const yd=new Map;function xd(t,e,i){let n=yd.get(t);n||(n=new Map,yd.set(t,n)),n.set(e,i)}function Ad(t){return[t]}function Cd(t,e,i={}){const n=function(t,e){const i=yd.get(t);return i&&i.has(e)?i.get(e):Ad}(t.constructor,e.constructor);try{return n(t=t.clone(),e,i)}catch(t){throw t}}function Td(t,e,i){t=t.slice(),e=e.slice();const n=new Pd(i.document,i.useRelations,i.forceWeakRemove);n.setOriginalOperations(t),n.setOriginalOperations(e);const o=n.originalOperations;if(0==t.length||0==e.length)return{operationsA:t,operationsB:e,originalOperations:o};const s=new WeakMap;for(const e of t)s.set(e,0);const r={nextBaseVersionA:t[t.length-1].baseVersion+1,nextBaseVersionB:e[e.length-1].baseVersion+1,originalOperationsACount:t.length,originalOperationsBCount:e.length};let a=0;for(;a{if(t.key===e.key){const n=t.range.getDifference(e.range).map(e=>new Ma(e,t.key,t.oldValue,t.newValue,0)),o=t.range.getIntersection(e.range);return o&&i.aIsStrong&&n.push(new Ma(o,e.key,e.newValue,t.newValue,0)),0==n.length?[new nc(0)]:n}return[t]}),xd(Ma,Oa,(t,e)=>{if(t.range.start.hasSameParentAs(e.position)&&t.range.containsPosition(e.position)){const i=t.range._getTransformedByInsertion(e.position,e.howMany,!e.shouldReceiveAttributes).map(e=>new Ma(e,t.key,t.oldValue,t.newValue,t.baseVersion));if(e.shouldReceiveAttributes){const n=Md(e,t.key,t.oldValue);n&&i.unshift(n)}return i}return t.range=t.range._getTransformedByInsertion(e.position,e.howMany,!1)[0],[t]}),xd(Ma,za,(t,e)=>{const i=[];t.range.start.hasSameParentAs(e.deletionPosition)&&(t.range.containsPosition(e.deletionPosition)||t.range.start.isEqual(e.deletionPosition))&&i.push(vr._createFromPositionAndShift(e.graveyardPosition,1));const n=t.range._getTransformedByMergeOperation(e);return n.isCollapsed||i.push(n),i.map(e=>new Ma(e,t.key,t.oldValue,t.newValue,t.baseVersion))}),xd(Ma,Na,(t,e)=>function(t,e){const i=vr._createFromPositionAndShift(e.sourcePosition,e.howMany);let n=null,o=[];i.containsRange(t,!0)?n=t:t.start.hasSameParentAs(i.start)?(o=t.getDifference(i),n=t.getIntersection(i)):o=[t];const s=[];for(let t of o){t=t._getTransformedByDeletion(e.sourcePosition,e.howMany);const i=e.getMovedRangeStart(),n=t.start.hasSameParentAs(i);t=t._getTransformedByInsertion(i,e.howMany,n),s.push(...t)}n&&s.push(n._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany,!1)[0]);return s}(t.range,e).map(e=>new Ma(e,t.key,t.oldValue,t.newValue,t.baseVersion))),xd(Ma,ja,(t,e)=>{if(t.range.end.isEqual(e.insertionPosition))return e.graveyardPosition||t.range.end.offset++,[t];if(t.range.start.hasSameParentAs(e.splitPosition)&&t.range.containsPosition(e.splitPosition)){const i=t.clone();return i.range=new vr(e.moveTargetPosition.clone(),t.range.end._getCombined(e.splitPosition,e.moveTargetPosition)),t.range.end=e.splitPosition.clone(),t.range.end.stickiness="toPrevious",[t,i]}return t.range=t.range._getTransformedBySplitOperation(e),[t]}),xd(Oa,Ma,(t,e)=>{const i=[t];if(t.shouldReceiveAttributes&&t.position.hasSameParentAs(e.range.start)&&e.range.containsPosition(t.position)){const n=Md(t,e.key,e.newValue);n&&i.push(n)}return i}),xd(Oa,Oa,(t,e,i)=>(t.position.isEqual(e.position)&&i.aIsStrong||(t.position=t.position._getTransformedByInsertOperation(e)),[t])),xd(Oa,Na,(t,e)=>(t.position=t.position._getTransformedByMoveOperation(e),[t])),xd(Oa,ja,(t,e)=>(t.position=t.position._getTransformedBySplitOperation(e),[t])),xd(Oa,za,(t,e)=>(t.position=t.position._getTransformedByMergeOperation(e),[t])),xd(Ra,Oa,(t,e)=>(t.oldRange&&(t.oldRange=t.oldRange._getTransformedByInsertOperation(e)[0]),t.newRange&&(t.newRange=t.newRange._getTransformedByInsertOperation(e)[0]),[t])),xd(Ra,Ra,(t,e,i)=>{if(t.name==e.name){if(!i.aIsStrong)return[new nc(0)];t.oldRange=e.newRange?e.newRange.clone():null}return[t]}),xd(Ra,za,(t,e)=>(t.oldRange&&(t.oldRange=t.oldRange._getTransformedByMergeOperation(e)),t.newRange&&(t.newRange=t.newRange._getTransformedByMergeOperation(e)),[t])),xd(Ra,Na,(t,e,i)=>{if(t.oldRange&&(t.oldRange=vr._createFromRanges(t.oldRange._getTransformedByMoveOperation(e))),t.newRange){if(i.abRelation){const n=vr._createFromRanges(t.newRange._getTransformedByMoveOperation(e));if("left"==i.abRelation.side&&e.targetPosition.isEqual(t.newRange.start))return t.newRange.start.path=i.abRelation.path,t.newRange.end=n.end,[t];if("right"==i.abRelation.side&&e.targetPosition.isEqual(t.newRange.end))return t.newRange.start=n.start,t.newRange.end.path=i.abRelation.path,[t]}t.newRange=vr._createFromRanges(t.newRange._getTransformedByMoveOperation(e))}return[t]}),xd(Ra,ja,(t,e,i)=>{if(t.oldRange&&(t.oldRange=t.oldRange._getTransformedBySplitOperation(e)),t.newRange){if(i.abRelation){const n=t.newRange._getTransformedBySplitOperation(e);return t.newRange.start.isEqual(e.splitPosition)&&i.abRelation.wasStartBeforeMergedElement?t.newRange.start=_r._createAt(e.insertionPosition):t.newRange.start.isEqual(e.splitPosition)&&!i.abRelation.wasInLeftElement&&(t.newRange.start=_r._createAt(e.moveTargetPosition)),t.newRange.end.isEqual(e.splitPosition)&&i.abRelation.wasInRightElement?t.newRange.end=_r._createAt(e.moveTargetPosition):t.newRange.end.isEqual(e.splitPosition)&&i.abRelation.wasEndBeforeMergedElement?t.newRange.end=_r._createAt(e.insertionPosition):t.newRange.end=n.end,[t]}t.newRange=t.newRange._getTransformedBySplitOperation(e)}return[t]}),xd(za,Oa,(t,e)=>(t.sourcePosition.hasSameParentAs(e.position)&&(t.howMany+=e.howMany),t.sourcePosition=t.sourcePosition._getTransformedByInsertOperation(e),t.targetPosition=t.targetPosition._getTransformedByInsertOperation(e),[t])),xd(za,za,(t,e,i)=>{if(t.sourcePosition.isEqual(e.sourcePosition)&&t.targetPosition.isEqual(e.targetPosition)){if(i.bWasUndone){const i=e.graveyardPosition.path.slice();return i.push(0),t.sourcePosition=new _r(e.graveyardPosition.root,i),t.howMany=0,[t]}return[new nc(0)]}if(t.sourcePosition.isEqual(e.sourcePosition)&&!t.targetPosition.isEqual(e.targetPosition)&&!i.bWasUndone&&"splitAtSource"!=i.abRelation){const n="$graveyard"==t.targetPosition.root.rootName,o="$graveyard"==e.targetPosition.root.rootName,s=n&&!o;if(o&&!n||!s&&i.aIsStrong){const i=e.targetPosition._getTransformedByMergeOperation(e),n=t.targetPosition._getTransformedByMergeOperation(e);return[new Na(i,t.howMany,n,0)]}return[new nc(0)]}return t.sourcePosition.hasSameParentAs(e.targetPosition)&&(t.howMany+=e.howMany),t.sourcePosition=t.sourcePosition._getTransformedByMergeOperation(e),t.targetPosition=t.targetPosition._getTransformedByMergeOperation(e),t.graveyardPosition.isEqual(e.graveyardPosition)&&i.aIsStrong||(t.graveyardPosition=t.graveyardPosition._getTransformedByMergeOperation(e)),[t]}),xd(za,Na,(t,e,i)=>{const n=vr._createFromPositionAndShift(e.sourcePosition,e.howMany);return"remove"==e.type&&!i.bWasUndone&&!i.forceWeakRemove&&t.deletionPosition.hasSameParentAs(e.sourcePosition)&&n.containsPosition(t.sourcePosition)?[new nc(0)]:(t.sourcePosition.hasSameParentAs(e.targetPosition)&&(t.howMany+=e.howMany),t.sourcePosition.hasSameParentAs(e.sourcePosition)&&(t.howMany-=e.howMany),t.sourcePosition=t.sourcePosition._getTransformedByMoveOperation(e),t.targetPosition=t.targetPosition._getTransformedByMoveOperation(e),t.graveyardPosition.isEqual(e.targetPosition)||(t.graveyardPosition=t.graveyardPosition._getTransformedByMoveOperation(e)),[t])}),xd(za,ja,(t,e,i)=>{if(e.graveyardPosition&&(t.graveyardPosition=t.graveyardPosition._getTransformedByDeletion(e.graveyardPosition,1),t.deletionPosition.isEqual(e.graveyardPosition)&&(t.howMany=e.howMany)),t.targetPosition.isEqual(e.splitPosition)){const n=0!=e.howMany,o=e.graveyardPosition&&t.deletionPosition.isEqual(e.graveyardPosition);if(n||o||"mergeTargetNotMoved"==i.abRelation)return t.sourcePosition=t.sourcePosition._getTransformedBySplitOperation(e),[t]}if(t.sourcePosition.isEqual(e.splitPosition)){if("mergeSourceNotMoved"==i.abRelation)return t.howMany=0,t.targetPosition=t.targetPosition._getTransformedBySplitOperation(e),[t];if("mergeSameElement"==i.abRelation||t.sourcePosition.offset>0)return t.sourcePosition=e.moveTargetPosition.clone(),t.targetPosition=t.targetPosition._getTransformedBySplitOperation(e),[t]}return t.sourcePosition.hasSameParentAs(e.splitPosition)&&(t.howMany=e.splitPosition.offset),t.sourcePosition=t.sourcePosition._getTransformedBySplitOperation(e),t.targetPosition=t.targetPosition._getTransformedBySplitOperation(e),[t]}),xd(Na,Oa,(t,e)=>{const i=vr._createFromPositionAndShift(t.sourcePosition,t.howMany)._getTransformedByInsertOperation(e,!1)[0];return t.sourcePosition=i.start,t.howMany=i.end.offset-i.start.offset,t.targetPosition.isEqual(e.position)||(t.targetPosition=t.targetPosition._getTransformedByInsertOperation(e)),[t]}),xd(Na,Na,(t,e,i)=>{const n=vr._createFromPositionAndShift(t.sourcePosition,t.howMany),o=vr._createFromPositionAndShift(e.sourcePosition,e.howMany);let s,r=i.aIsStrong,a=!i.aIsStrong;if("insertBefore"==i.abRelation||"insertAfter"==i.baRelation?a=!0:"insertAfter"!=i.abRelation&&"insertBefore"!=i.baRelation||(a=!1),s=t.targetPosition.isEqual(e.targetPosition)&&a?t.targetPosition._getTransformedByDeletion(e.sourcePosition,e.howMany):t.targetPosition._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany),Id(t,e)&&Id(e,t))return[e.getReversed()];if(n.containsPosition(e.targetPosition)&&n.containsRange(o,!0))return n.start=n.start._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany),n.end=n.end._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany),Nd([n],s);if(o.containsPosition(t.targetPosition)&&o.containsRange(n,!0))return n.start=n.start._getCombined(e.sourcePosition,e.getMovedRangeStart()),n.end=n.end._getCombined(e.sourcePosition,e.getMovedRangeStart()),Nd([n],s);const c=Ei(t.sourcePosition.getParentPath(),e.sourcePosition.getParentPath());if("prefix"==c||"extension"==c)return n.start=n.start._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany),n.end=n.end._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany),Nd([n],s);"remove"!=t.type||"remove"==e.type||i.aWasUndone||i.forceWeakRemove?"remove"==t.type||"remove"!=e.type||i.bWasUndone||i.forceWeakRemove||(r=!1):r=!0;const l=[],d=n.getDifference(o);for(const t of d){t.start=t.start._getTransformedByDeletion(e.sourcePosition,e.howMany),t.end=t.end._getTransformedByDeletion(e.sourcePosition,e.howMany);const i="same"==Ei(t.start.getParentPath(),e.getMovedRangeStart().getParentPath()),n=t._getTransformedByInsertion(e.getMovedRangeStart(),e.howMany,i);l.push(...n)}const h=n.getIntersection(o);return null!==h&&r&&(h.start=h.start._getCombined(e.sourcePosition,e.getMovedRangeStart()),h.end=h.end._getCombined(e.sourcePosition,e.getMovedRangeStart()),0===l.length?l.push(h):1==l.length?o.start.isBefore(n.start)||o.start.isEqual(n.start)?l.unshift(h):l.push(h):l.splice(1,0,h)),0===l.length?[new nc(t.baseVersion)]:Nd(l,s)}),xd(Na,ja,(t,e,i)=>{let n=t.targetPosition.clone();t.targetPosition.isEqual(e.insertionPosition)&&e.graveyardPosition&&"moveTargetAfter"!=i.abRelation||(n=t.targetPosition._getTransformedBySplitOperation(e));const o=vr._createFromPositionAndShift(t.sourcePosition,t.howMany);if(o.end.isEqual(e.insertionPosition))return e.graveyardPosition||t.howMany++,t.targetPosition=n,[t];if(o.start.hasSameParentAs(e.splitPosition)&&o.containsPosition(e.splitPosition)){let t=new vr(e.splitPosition,o.end);return t=t._getTransformedBySplitOperation(e),Nd([new vr(o.start,e.splitPosition),t],n)}t.targetPosition.isEqual(e.splitPosition)&&"insertAtSource"==i.abRelation&&(n=e.moveTargetPosition),t.targetPosition.isEqual(e.insertionPosition)&&"insertBetween"==i.abRelation&&(n=t.targetPosition);const s=[o._getTransformedBySplitOperation(e)];if(e.graveyardPosition){const n=o.start.isEqual(e.graveyardPosition)||o.containsPosition(e.graveyardPosition);t.howMany>1&&n&&!i.aWasUndone&&s.push(vr._createFromPositionAndShift(e.insertionPosition,1))}return Nd(s,n)}),xd(Na,za,(t,e,i)=>{const n=vr._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.deletionPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.sourcePosition))if("remove"!=t.type||i.forceWeakRemove){if(1==t.howMany)return i.bWasUndone?(t.sourcePosition=e.graveyardPosition.clone(),t.targetPosition=t.targetPosition._getTransformedByMergeOperation(e),[t]):[new nc(0)]}else if(!i.aWasUndone){const i=[];let n=e.graveyardPosition.clone(),o=e.targetPosition._getTransformedByMergeOperation(e);t.howMany>1&&(i.push(new Na(t.sourcePosition,t.howMany-1,t.targetPosition,0)),n=n._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany-1),o=o._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany-1));const s=e.deletionPosition._getCombined(t.sourcePosition,t.targetPosition),r=new Na(n,1,s,0),a=r.getMovedRangeStart().path.slice();a.push(0);const c=new _r(r.targetPosition.root,a);o=o._getTransformedByMove(n,s,1);const l=new Na(o,e.howMany,c,0);return i.push(r),i.push(l),i}const o=vr._createFromPositionAndShift(t.sourcePosition,t.howMany)._getTransformedByMergeOperation(e);return t.sourcePosition=o.start,t.howMany=o.end.offset-o.start.offset,t.targetPosition=t.targetPosition._getTransformedByMergeOperation(e),[t]}),xd(La,Oa,(t,e)=>(t.position=t.position._getTransformedByInsertOperation(e),[t])),xd(La,za,(t,e)=>t.position.isEqual(e.deletionPosition)?(t.position=e.graveyardPosition.clone(),t.position.stickiness="toNext",[t]):(t.position=t.position._getTransformedByMergeOperation(e),[t])),xd(La,Na,(t,e)=>(t.position=t.position._getTransformedByMoveOperation(e),[t])),xd(La,La,(t,e,i)=>{if(t.position.isEqual(e.position)){if(!i.aIsStrong)return[new nc(0)];t.oldName=e.newName}return[t]}),xd(La,ja,(t,e)=>{if("same"==Ei(t.position.path,e.splitPosition.getParentPath())&&!e.graveyardPosition){const e=new La(t.position.getShiftedBy(1),t.oldName,t.newName,0);return[t,e]}return t.position=t.position._getTransformedBySplitOperation(e),[t]}),xd(Da,Da,(t,e,i)=>{if(t.root===e.root&&t.key===e.key){if(!i.aIsStrong||t.newValue===e.newValue)return[new nc(0)];t.oldValue=e.newValue}return[t]}),xd(ja,Oa,(t,e)=>(t.splitPosition.hasSameParentAs(e.position)&&t.splitPosition.offset{if(!t.graveyardPosition&&!i.bWasUndone&&t.splitPosition.hasSameParentAs(e.sourcePosition)){const i=e.graveyardPosition.path.slice();i.push(0);const n=new _r(e.graveyardPosition.root,i),o=ja.getInsertionPosition(new _r(e.graveyardPosition.root,i)),s=new ja(n,0,null,0);return s.insertionPosition=o,t.splitPosition=t.splitPosition._getTransformedByMergeOperation(e),t.insertionPosition=ja.getInsertionPosition(t.splitPosition),t.graveyardPosition=s.insertionPosition.clone(),t.graveyardPosition.stickiness="toNext",[s,t]}return t.splitPosition.hasSameParentAs(e.deletionPosition)&&!t.splitPosition.isAfter(e.deletionPosition)&&t.howMany--,t.splitPosition.hasSameParentAs(e.targetPosition)&&(t.howMany+=e.howMany),t.splitPosition=t.splitPosition._getTransformedByMergeOperation(e),t.insertionPosition=ja.getInsertionPosition(t.splitPosition),t.graveyardPosition&&(t.graveyardPosition=t.graveyardPosition._getTransformedByMergeOperation(e)),[t]}),xd(ja,Na,(t,e,i)=>{const n=vr._createFromPositionAndShift(e.sourcePosition,e.howMany);if(t.graveyardPosition){const o=n.start.isEqual(t.graveyardPosition)||n.containsPosition(t.graveyardPosition);if(!i.bWasUndone&&o){const i=t.splitPosition._getTransformedByMoveOperation(e),n=t.graveyardPosition._getTransformedByMoveOperation(e),o=n.path.slice();o.push(0);const s=new _r(n.root,o);return[new Na(i,t.howMany,s,0)]}t.graveyardPosition=t.graveyardPosition._getTransformedByMoveOperation(e)}if(t.splitPosition.hasSameParentAs(e.sourcePosition)&&n.containsPosition(t.splitPosition)){const i=e.howMany-(t.splitPosition.offset-e.sourcePosition.offset);return t.howMany-=i,t.splitPosition.hasSameParentAs(e.targetPosition)&&t.splitPosition.offset{if(t.splitPosition.isEqual(e.splitPosition)){if(!t.graveyardPosition&&!e.graveyardPosition)return[new nc(0)];if(t.graveyardPosition&&e.graveyardPosition&&t.graveyardPosition.isEqual(e.graveyardPosition))return[new nc(0)];if("splitBefore"==i.abRelation)return t.howMany=0,t.graveyardPosition=t.graveyardPosition._getTransformedBySplitOperation(e),[t]}if(t.graveyardPosition&&e.graveyardPosition&&t.graveyardPosition.isEqual(e.graveyardPosition)){const n="$graveyard"==t.splitPosition.root.rootName,o="$graveyard"==e.splitPosition.root.rootName,s=n&&!o;if(o&&!n||!s&&i.aIsStrong){const i=[];return e.howMany&&i.push(new Na(e.moveTargetPosition,e.howMany,e.splitPosition,0)),t.howMany&&i.push(new Na(t.splitPosition,t.howMany,t.moveTargetPosition,0)),i}return[new nc(0)]}if(t.graveyardPosition&&(t.graveyardPosition=t.graveyardPosition._getTransformedBySplitOperation(e)),t.splitPosition.isEqual(e.insertionPosition)&&"splitBefore"==i.abRelation)return t.howMany++,[t];if(e.splitPosition.isEqual(t.insertionPosition)&&"splitBefore"==i.baRelation){const i=e.insertionPosition.path.slice();i.push(0);const n=new _r(e.insertionPosition.root,i);return[t,new Na(t.insertionPosition,1,n,0)]}return t.splitPosition.hasSameParentAs(e.splitPosition)&&t.splitPosition.offset0}addBatch(t){const e=this.editor.model.document.selection,i={ranges:e.hasOwnRange?Array.from(e.getRanges()):[],isBackward:e.isBackward};this._stack.push({batch:t,selection:i}),this.refresh()}clearStack(){this._stack=[],this.refresh()}_restoreSelection(t,e,i){const n=this.editor.model,o=n.document,s=[];for(const e of t){const t=Rd(e,i).find(t=>t.start.root!=o.graveyard);t&&s.push(t)}s.length&&n.change(t=>{t.setSelection(s,{backward:e})})}_undo(t,e){const i=this.editor.model,n=i.document;this._createdBatches.add(e);const o=t.operations.slice().filter(t=>t.isDocumentOperation);o.reverse();for(const t of o){const o=t.baseVersion+1,s=Array.from(n.history.getOperations(o)),r=Td([t.getReversed()],s,{useRelations:!0,document:this.editor.model.document,padWithNoOps:!1,forceWeakRemove:!0}).operationsA;for(const o of r)e.addOperation(o),i.applyOperation(o),n.history.setOperationAsUndone(t,o)}}}function Rd(t,e){const i=t.getTransformedByOperations(e);i.sort((t,e)=>t.start.isBefore(e.start)?-1:1);for(let t=1;te.batch==t):this._stack.length-1,i=this._stack.splice(e,1)[0],n=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(n,()=>{this._undo(i.batch,n);const t=this.editor.model.document.history.getOperations(i.batch.baseVersion);this._restoreSelection(i.selection.ranges,i.selection.isBackward,t),this.fire("revert",i.batch,n)}),this.refresh()}}class Dd extends Od{execute(){const t=this._stack.pop(),e=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(e,()=>{const i=t.batch.operations[t.batch.operations.length-1].baseVersion+1,n=this.editor.model.document.history.getOperations(i);this._restoreSelection(t.selection.ranges,t.selection.isBackward,n),this._undo(t.batch,e)}),this.refresh()}}class zd extends ql{static get pluginName(){return"UndoEditing"}constructor(t){super(t),this._batchRegistry=new WeakSet}init(){const t=this.editor;this._undoCommand=new Ld(t),this._redoCommand=new Dd(t),t.commands.add("undo",this._undoCommand),t.commands.add("redo",this._redoCommand),this.listenTo(t.model,"applyOperation",(t,e)=>{const i=e[0];if(!i.isDocumentOperation)return;const n=i.batch,o=this._redoCommand._createdBatches.has(n),s=this._undoCommand._createdBatches.has(n);this._batchRegistry.has(n)||"transparent"==n.type&&!o&&!s||(o?this._undoCommand.addBatch(n):s||(this._undoCommand.addBatch(n),this._redoCommand.clearStack()),this._batchRegistry.add(n))},{priority:"highest"}),this.listenTo(this._undoCommand,"revert",(t,e,i)=>{this._redoCommand.addBatch(i)}),t.keystrokes.set("CTRL+Z","undo"),t.keystrokes.set("CTRL+Y","redo"),t.keystrokes.set("CTRL+SHIFT+Z","redo")}}var jd='',Vd='';class Bd extends ql{init(){const t=this.editor,e=t.locale,i=t.t,n="ltr"==e.uiLanguageDirection?jd:Vd,o="ltr"==e.uiLanguageDirection?Vd:jd;this._addButton("undo",i("di"),"CTRL+Z",n),this._addButton("redo",i("dj"),"CTRL+Y",o)}_addButton(t,e,i,n){const o=this.editor;o.ui.componentFactory.add(t,s=>{const r=o.commands.get(t),a=new El(s);return a.set({label:e,icon:n,keystroke:i,tooltip:!0}),a.bind("isEnabled").to(r,"isEnabled"),this.listenTo(a,"execute",()=>{o.execute(t),o.editing.view.focus()}),a})}}class Fd extends ql{static get requires(){return[zd,Bd]}static get pluginName(){return"Undo"}}class Hd{constructor(t){this.context=t}destroy(){this.stopListening()}static get isContextPlugin(){return!0}}vi(Hd,Hn);class Ud extends Hd{static get pluginName(){return"PendingActions"}init(){this.set("hasAny",!1),this._actions=new yi({idProperty:"_id"}),this._actions.delegate("add","remove").to(this)}add(t){if("string"!=typeof t)throw new hi.b("pendingactions-add-invalid-message: The message must be a string.",this);const e=Object.create(Hn);return e.set("message",t),this._actions.add(e),this.hasAny=!0,e}remove(t){this._actions.remove(t),this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}class Wd{constructor(){const t=new window.FileReader;this._reader=t,this._data=void 0,this.set("loaded",0),t.onprogress=t=>{this.loaded=t.loaded}}get error(){return this._reader.error}get data(){return this._data}read(t){const e=this._reader;return this.total=t.size,new Promise((i,n)=>{e.onload=()=>{const t=e.result;this._data=t,i(t)},e.onerror=()=>{n("error")},e.onabort=()=>{n("aborted")},this._reader.readAsDataURL(t)})}abort(){this._reader.abort()}}vi(Wd,Hn);class qd extends ql{static get pluginName(){return"FileRepository"}static get requires(){return[Ud]}init(){this.loaders=new yi,this.loaders.on("add",()=>this._updatePendingAction()),this.loaders.on("remove",()=>this._updatePendingAction()),this._loadersMap=new Map,this._pendingAction=null,this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(t,e)=>e?t/e*100:0)}getLoader(t){return this._loadersMap.get(t)||null}createLoader(t){if(!this.createUploadAdapter)return console.warn(Object(hi.a)("filerepository-no-upload-adapter: Upload adapter is not defined.")),null;const e=new $d(Promise.resolve(t),this.createUploadAdapter);return this.loaders.add(e),this._loadersMap.set(t,e),t instanceof Promise&&e.file.then(t=>{this._loadersMap.set(t,e)}).catch(()=>{}),e.on("change:uploaded",()=>{let t=0;for(const e of this.loaders)t+=e.uploaded;this.uploaded=t}),e.on("change:uploadTotal",()=>{let t=0;for(const e of this.loaders)e.uploadTotal&&(t+=e.uploadTotal);this.uploadTotal=t}),e}destroyLoader(t){const e=t instanceof $d?t:this.getLoader(t);e._destroy(),this.loaders.remove(e),this._loadersMap.forEach((t,i)=>{t===e&&this._loadersMap.delete(i)})}_updatePendingAction(){const t=this.editor.plugins.get(Ud);if(this.loaders.length){if(!this._pendingAction){const e=this.editor.t,i=t=>`${e("ai")} ${parseInt(t)}%.`;this._pendingAction=t.add(i(this.uploadedPercent)),this._pendingAction.bind("message").to(this,"uploadedPercent",i)}}else t.remove(this._pendingAction),this._pendingAction=null}}vi(qd,Hn);class $d{constructor(t,e){this.id=li(),this._filePromiseWrapper=this._createFilePromiseWrapper(t),this._adapter=e(this),this._reader=new Wd,this.set("status","idle"),this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(t,e)=>e?t/e*100:0),this.set("uploadResponse",null)}get file(){return this._filePromiseWrapper?this._filePromiseWrapper.promise.then(t=>this._filePromiseWrapper?t:null):Promise.resolve(null)}get data(){return this._reader.data}read(){if("idle"!=this.status)throw new hi.b("filerepository-read-wrong-status: You cannot call read if the status is different than idle.",this);return this.status="reading",this.file.then(t=>this._reader.read(t)).then(t=>(this.status="idle",t)).catch(t=>{if("aborted"===t)throw this.status="aborted","aborted";throw this.status="error",this._reader.error?this._reader.error:t})}upload(){if("idle"!=this.status)throw new hi.b("filerepository-upload-wrong-status: You cannot call upload if the status is different than idle.",this);return this.status="uploading",this.file.then(()=>this._adapter.upload()).then(t=>(this.uploadResponse=t,this.status="idle",t)).catch(t=>{if("aborted"===this.status)throw"aborted";throw this.status="error",t})}abort(){const t=this.status;this.status="aborted",this._filePromiseWrapper.isFulfilled?"reading"==t?this._reader.abort():"uploading"==t&&this._adapter.abort&&this._adapter.abort():(this._filePromiseWrapper.promise.catch(()=>{}),this._filePromiseWrapper.rejecter("aborted")),this._destroy()}_destroy(){this._filePromiseWrapper=void 0,this._reader=void 0,this._adapter=void 0,this.uploadResponse=void 0}_createFilePromiseWrapper(t){const e={};return e.promise=new Promise((i,n)=>{e.rejecter=n,e.isFulfilled=!1,t.then(t=>{e.isFulfilled=!0,i(t)}).catch(t=>{e.isFulfilled=!0,n(t)})}),e}}vi($d,Hn);function Yd(){let t=function(t){t=t.toLowerCase();const e=document.cookie.split(";");for(const i of e){const e=i.split("=");if(decodeURIComponent(e[0].trim().toLowerCase())===t)return decodeURIComponent(e[1])}return null}("ckCsrfToken");var e,i;return t&&40==t.length||(t=function(t){let e="";const i=new Uint8Array(t);window.crypto.getRandomValues(i);for(let t=0;t.5?n.toUpperCase():n}return e}(40),e="ckCsrfToken",i=t,document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(i)+";path=/"),t}class Gd extends ql{static get requires(){return[qd]}static get pluginName(){return"CKFinderUploadAdapter"}init(){const t=this.editor.config.get("ckfinder.uploadUrl");t&&(this.editor.plugins.get(qd).createUploadAdapter=e=>new Qd(e,t,this.editor.t))}}class Qd{constructor(t,e,i){this.loader=t,this.url=e,this.t=i}upload(){return this.loader.file.then(t=>new Promise((e,i)=>{this._initRequest(),this._initListeners(e,i,t),this._sendRequest(t)}))}abort(){this.xhr&&this.xhr.abort()}_initRequest(){const t=this.xhr=new XMLHttpRequest;t.open("POST",this.url,!0),t.responseType="json"}_initListeners(t,e,i){const n=this.xhr,o=this.loader,s=(0,this.t)("a")+` ${i.name}.`;n.addEventListener("error",()=>e(s)),n.addEventListener("abort",()=>e()),n.addEventListener("load",()=>{const i=n.response;if(!i||!i.uploaded)return e(i&&i.error&&i.error.message?i.error.message:s);t({default:i.url})}),n.upload&&n.upload.addEventListener("progress",t=>{t.lengthComputable&&(o.uploadTotal=t.total,o.uploaded=t.loaded)})}_sendRequest(t){const e=new FormData;e.append("upload",t),e.append("ckCsrfToken",Yd()),this.xhr.send(e)}}class Kd{static get pluginName(){return"BlockAutoformatEditing"}constructor(t,e,i){let n,o=null;"function"==typeof i?n=i:(o=t.commands.get(i),n=()=>{t.execute(i)}),t.model.document.on("change",(i,s)=>{if(o&&!o.isEnabled)return;if("transparent"==s.type)return;const r=Array.from(t.model.document.differ.getChanges()),a=r[0];if(1!=r.length||"insert"!==a.type||"$text"!=a.name||1!=a.length)return;const c=a.position.parent;if(!c.is("paragraph")||1!==c.childCount)return;const l=e.exec(c.getChild(0).data);l&&t.model.enqueueChange(t=>{const e=t.createPositionAt(c,0),i=t.createPositionAt(c,l[0].length),o=new Nr(e,i);!1!==n({match:l})&&t.remove(o),o.detach()})})}}class Jd{static get pluginName(){return"InlineAutoformatEditing"}constructor(t,e,i){let n,o,s,r;e instanceof RegExp?n=e:s=e,"string"==typeof i?o=i:r=i,s=s||(t=>{let e;const i=[],o=[];for(;null!==(e=n.exec(t))&&!(e&&e.length<4);){let{index:t,1:n,2:s,3:r}=e;const a=n+s+r;t+=e[0].length-a.length;const c=[t,t+n.length],l=[t+n.length+s.length,t+n.length+s.length+r.length];i.push(c),i.push(l),o.push([t+n.length,t+n.length+s.length])}return{remove:i,format:o}}),r=r||((e,i)=>{const n=t.model.schema.getValidRanges(i,o);for(const t of n)e.setAttribute(o,!0,t);e.removeSelectionAttribute(o)}),t.model.document.on("change",(e,i)=>{if("transparent"==i.type)return;const n=t.model,o=n.document.selection;if(!o.isCollapsed)return;const a=Array.from(n.document.differ.getChanges()),c=a[0];if(1!=a.length||"insert"!==c.type||"$text"!=c.name||1!=c.length)return;const l=o.focus,d=l.parent,{text:h,range:u}=function(t,e){let i=t.start;return{text:Array.from(t.getItems()).reduce((t,n)=>n.is("text")||n.is("textProxy")?t+n.data:(i=e.createPositionAfter(n),""),""),range:e.createRange(i,t.end)}}(n.createRange(n.createPositionAt(d,0),l),n),f=s(h),m=Zd(u.start,f.format,n),g=Zd(u.start,f.remove,n);m.length&&g.length&&n.enqueueChange(t=>{if(!1!==r(t,m))for(const e of g.reverse())t.remove(e)})})}}function Zd(t,e,i){return e.filter(t=>void 0!==t[0]&&void 0!==t[1]).map(e=>i.createRange(t.getShiftedBy(e[0]),t.getShiftedBy(e[1])))}function Xd(t,e){return(i,n)=>{if(!t.commands.get(e).isEnabled)return!1;const o=t.model.schema.getValidRanges(n,e);for(const t of o)i.setAttribute(e,!0,t);i.removeSelectionAttribute(e)}}class th extends Jl{constructor(t,e){super(t),this.attributeKey=e}refresh(){const t=this.editor.model,e=t.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=t.schema.checkAttributeInSelection(e.selection,this.attributeKey)}execute(t={}){const e=this.editor.model,i=e.document.selection,n=void 0===t.forceValue?!this.value:t.forceValue;e.change(t=>{if(i.isCollapsed)n?t.setSelectionAttribute(this.attributeKey,!0):t.removeSelectionAttribute(this.attributeKey);else{const o=e.schema.getValidRanges(i.getRanges(),this.attributeKey);for(const e of o)n?t.setAttribute(this.attributeKey,n,e):t.removeAttribute(this.attributeKey,e)}})}_getValueFromFirstAllowedNode(){const t=this.editor.model,e=t.schema,i=t.document.selection;if(i.isCollapsed)return i.hasAttribute(this.attributeKey);for(const t of i.getRanges())for(const i of t.getItems())if(e.checkAttribute(i,this.attributeKey))return i.hasAttribute(this.attributeKey);return!1}}class eh extends ql{static get pluginName(){return"BoldEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"bold"}),t.model.schema.setAttributeProperties("bold",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"bold",view:"strong",upcastAlso:["b",t=>{const e=t.getStyle("font-weight");return e?"bold"==e||Number(e)>=600?{name:!0,styles:["font-weight"]}:void 0:null}]}),t.commands.add("bold",new th(t,"bold")),t.keystrokes.set("CTRL+B","bold")}}class ih extends ql{init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("bold",i=>{const n=t.commands.get("bold"),o=new El(i);return o.set({label:e("g"),icon:'',keystroke:"CTRL+B",tooltip:!0,isToggleable:!0}),o.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(o,"execute",()=>{t.execute("bold"),t.editing.view.focus()}),o})}}class nh extends ql{static get pluginName(){return"ItalicEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"italic"}),t.model.schema.setAttributeProperties("italic",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"italic",view:"i",upcastAlso:["em",{styles:{"font-style":"italic"}}]}),t.commands.add("italic",new th(t,"italic")),t.keystrokes.set("CTRL+I","italic")}}class oh extends ql{init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("italic",i=>{const n=t.commands.get("italic"),o=new El(i);return o.set({label:e("d"),icon:'',keystroke:"CTRL+I",tooltip:!0,isToggleable:!0}),o.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(o,"execute",()=>{t.execute("italic"),t.editing.view.focus()}),o})}}function sh(t){const e=t.next();return e.done?null:e.value}class rh extends Jl{refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,i=e.schema,n=e.document.selection,o=Array.from(n.getSelectedBlocks()),s=void 0===t.forceValue?!this.value:t.forceValue;e.change(t=>{if(s){const e=o.filter(t=>ah(t)||lh(i,t));this._applyQuote(t,e)}else this._removeQuote(t,o.filter(ah))})}_getValue(){const t=sh(this.editor.model.document.selection.getSelectedBlocks());return!(!t||!ah(t))}_checkEnabled(){if(this.value)return!0;const t=this.editor.model.document.selection,e=this.editor.model.schema,i=sh(t.getSelectedBlocks());return!!i&&lh(e,i)}_removeQuote(t,e){ch(t,e).reverse().forEach(e=>{if(e.start.isAtStart&&e.end.isAtEnd)return void t.unwrap(e.start.parent);if(e.start.isAtStart){const i=t.createPositionBefore(e.start.parent);return void t.move(e,i)}e.end.isAtEnd||t.split(e.end);const i=t.createPositionAfter(e.end.parent);t.move(e,i)})}_applyQuote(t,e){const i=[];ch(t,e).reverse().forEach(e=>{let n=ah(e.start);n||(n=t.createElement("blockQuote"),t.wrap(e,n)),i.push(n)}),i.reverse().reduce((e,i)=>e.nextSibling==i?(t.merge(t.createPositionAfter(e)),e):i)}}function ah(t){return"blockQuote"==t.parent.name?t.parent:null}function ch(t,e){let i,n=0;const o=[];for(;n{if(t.endsWith("blockQuote")&&"blockQuote"==e.name)return!1}),t.conversion.elementToElement({model:"blockQuote",view:"blockquote"}),t.model.document.registerPostFixer(i=>{const n=t.model.document.differ.getChanges();for(const t of n)if("insert"==t.type){const n=t.position.nodeAfter;if(!n)continue;if(n.is("blockQuote")&&n.isEmpty)return i.remove(n),!0;if(n.is("blockQuote")&&!e.checkChild(t.position,n))return i.unwrap(n),!0;if(n.is("element")){const t=i.createRangeIn(n);for(const n of t.getItems())if(n.is("blockQuote")&&!e.checkChild(i.createPositionBefore(n),n))return i.unwrap(n),!0}}else if("remove"==t.type){const e=t.position.parent;if(e.is("blockQuote")&&e.isEmpty)return i.remove(e),!0}return!1})}afterInit(){const t=this.editor.commands.get("blockQuote");this.listenTo(this.editor.editing.view.document,"enter",(e,i)=>{const n=this.editor.model.document,o=n.selection.getLastPosition().parent;n.selection.isCollapsed&&o.isEmpty&&t.value&&(this.editor.execute("blockQuote"),this.editor.editing.view.scrollToTheSelection(),i.preventDefault(),e.stop())})}}i(44);class hh extends ql{init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("blockQuote",i=>{const n=t.commands.get("blockQuote"),o=new El(i);return o.set({label:e("k"),icon:'',tooltip:!0,isToggleable:!0}),o.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(o,"execute",()=>{t.execute("blockQuote"),t.editing.view.focus()}),o})}}class uh extends ql{static get pluginName(){return"CKFinderUI"}init(){const t=this.editor,e=t.ui.componentFactory,i=t.t;e.add("ckfinder",e=>{const n=t.commands.get("ckfinder"),o=new El(e);return o.set({label:i("t"),icon:'',tooltip:!0}),o.bind("isEnabled").to(n),o.on("execute",()=>{t.execute("ckfinder"),t.editing.view.focus()}),o})}}class fh extends us{observe(t){this.listenTo(t,"load",(t,e)=>{"IMG"==e.target.tagName&&this._fireEvents(e)},{useCapture:!0})}_fireEvents(t){this.isEnabled&&(this.document.fire("layoutChanged"),this.document.fire("imageLoaded",t))}}function mh(t){return i=>{i.on(`attribute:${t}:image`,e)};function e(t,e,i){if(!i.consumable.consume(e.item,t.name))return;const n=i.writer,o=i.mapper.toViewElement(e.item).getChild(0);null!==e.attributeNewValue?n.setAttribute(e.attributeKey,e.attributeNewValue,o):n.removeAttribute(e.attributeKey,o)}}class gh{constructor(){this._stack=[]}add(t,e){const i=this._stack,n=i[0];this._insertDescriptor(t);const o=i[0];n===o||ph(n,o)||this.fire("change:top",{oldDescriptor:n,newDescriptor:o,writer:e})}remove(t,e){const i=this._stack,n=i[0];this._removeDescriptor(t);const o=i[0];n===o||ph(n,o)||this.fire("change:top",{oldDescriptor:n,newDescriptor:o,writer:e})}_insertDescriptor(t){const e=this._stack,i=e.findIndex(e=>e.id===t.id);if(ph(t,e[i]))return;i>-1&&e.splice(i,1);let n=0;for(;e[n]&&bh(e[n],t);)n++;e.splice(n,0,t)}_removeDescriptor(t){const e=this._stack,i=e.findIndex(e=>e.id===t);i>-1&&e.splice(i,1)}}function ph(t,e){return t&&e&&t.priority==e.priority&&wh(t.classes)==wh(e.classes)}function bh(t,e){return t.priority>e.priority||!(t.prioritywh(e.classes)}function wh(t){return Array.isArray(t)?t.sort().join(","):t}vi(gh,mi);function kh(t){return!!t.is("element")&&!!t.getCustomProperty("widget")}function _h(t,e,i={}){return fo.isEdge||e.setAttribute("contenteditable","false",t),e.addClass("ck-widget",t),e.setCustomProperty("widget",!0,t),t.getFillerOffset=Ah,i.label&&function(t,e,i){i.setCustomProperty("widgetLabel",e,t)}(t,i.label,e),i.hasSelectionHandle&&function(t,e){const i=e.createUIElement("div",{class:"ck ck-widget__selection-handle"},(function(t){const e=this.toDomElement(t),i=new Pl;return i.set("content",''),i.render(),e.appendChild(i.element),e}));e.insert(e.createPositionAt(t,0),i),e.addClass(["ck-widget_with-selection-handle"],t)}(t,e),function(t,e,i,n){const o=new gh;o.on("change:top",(e,o)=>{o.oldDescriptor&&n(t,o.oldDescriptor,o.writer),o.newDescriptor&&i(t,o.newDescriptor,o.writer)}),e.setCustomProperty("addHighlight",(t,e,i)=>o.add(e,i),t),e.setCustomProperty("removeHighlight",(t,e,i)=>o.remove(e,i),t)}(t,e,(t,e,i)=>i.addClass(n(e.classes),t),(t,e,i)=>i.removeClass(n(e.classes),t)),t;function n(t){return Array.isArray(t)?t:[t]}}function vh(t){const e=t.getCustomProperty("widgetLabel");return e?"function"==typeof e?e():e:""}function yh(t,e){return e.addClass(["ck-editor__editable","ck-editor__nested-editable"],t),fo.isEdge||(e.setAttribute("contenteditable",t.isReadOnly?"false":"true",t),t.on("change:isReadOnly",(i,n,o)=>{e.setAttribute("contenteditable",o?"false":"true",t)})),t.on("change:isFocused",(i,n,o)=>{o?e.addClass("ck-editor__nested-editable_focused",t):e.removeClass("ck-editor__nested-editable_focused",t)}),t}function xh(t,e){const i=t.getSelectedElement();if(i&&e.schema.isBlock(i))return e.createPositionAfter(i);const n=t.getSelectedBlocks().next().value;if(n){if(n.isEmpty)return e.createPositionAt(n,0);const i=e.createPositionAfter(n);return t.focus.isTouching(i)?i:e.createPositionBefore(n)}return t.focus}function Ah(){return null}function Ch(t){const e=t.getSelectedElement();return e&&function(t){return!!t.getCustomProperty("image")&&kh(t)}(e)?e:null}function Th(t){return!!t&&t.is("image")}function Ph(t,e,i={}){const n=t.createElement("image",i),o=xh(e.document.selection,e);e.insertContent(n,o),n.parent&&t.setSelection(n,"on")}function Sh(t){const e=t.schema,i=t.document.selection;return function(t,e,i){const n=function(t,e){const i=xh(t,e).parent;if(i.isEmpty&&!i.is("$root"))return i.parent;return i}(t,i);return e.checkChild(n,"image")}(i,e,t)&&!function(t,e){const i=t.getSelectedElement();return i&&e.isObject(i)}(i,e)&&function(t){return[...t.focus.getAncestors()].every(t=>!t.is("image"))}(i)}class Eh extends Jl{refresh(){this.isEnabled=Sh(this.editor.model)}execute(t){const e=this.editor.model;e.change(i=>{const n=Array.isArray(t.source)?t.source:[t.source];for(const t of n)Ph(i,e,{src:t})})}}class Mh extends ql{static get pluginName(){return"ImageEditing"}init(){const t=this.editor,e=t.model.schema,i=t.t,n=t.conversion;t.editing.view.addObserver(fh),e.register("image",{isObject:!0,isBlock:!0,allowWhere:"$block",allowAttributes:["alt","src","srcset"]}),n.for("dataDowncast").elementToElement({model:"image",view:(t,e)=>Ih(e)}),n.for("editingDowncast").elementToElement({model:"image",view:(t,e)=>{return n=Ih(e),o=e,s=i("s"),o.setCustomProperty("image",!0,n),_h(n,o,{label:function(){const t=n.getChild(0).getAttribute("alt");return t?`${t} ${s}`:s}});var n,o,s}}),n.for("downcast").add(mh("src")).add(mh("alt")).add(function(){return e=>{e.on("attribute:srcset:image",t)};function t(t,e,i){if(!i.consumable.consume(e.item,t.name))return;const n=i.writer,o=i.mapper.toViewElement(e.item).getChild(0);if(null===e.attributeNewValue){const t=e.attributeOldValue;t.data&&(n.removeAttribute("srcset",o),n.removeAttribute("sizes",o),t.width&&n.removeAttribute("width",o))}else{const t=e.attributeNewValue;t.data&&(n.setAttribute("srcset",t.data,o),n.setAttribute("sizes","100vw",o),t.width&&n.setAttribute("width",t.width,o))}}}()),n.for("upcast").elementToElement({view:{name:"img",attributes:{src:!0}},model:(t,e)=>e.createElement("image",{src:t.getAttribute("src")})}).attributeToAttribute({view:{name:"img",key:"alt"},model:"alt"}).attributeToAttribute({view:{name:"img",key:"srcset"},model:{key:"srcset",value:t=>{const e={data:t.getAttribute("srcset")};return t.hasAttribute("width")&&(e.width=t.getAttribute("width")),e}}}).add(function(){return e=>{e.on("element:figure",t)};function t(t,e,i){if(!i.consumable.test(e.viewItem,{name:!0,classes:"image"}))return;const n=Array.from(e.viewItem.getChildren()).find(t=>t.is("img"));if(!n||!n.hasAttribute("src")||!i.consumable.test(n,{name:!0}))return;const o=i.convertItem(n,e.modelCursor),s=sh(o.modelRange.getItems());s&&(i.convertChildren(e.viewItem,i.writer.createPositionAt(s,0)),e.modelRange=o.modelRange,e.modelCursor=o.modelCursor)}}()),t.commands.add("imageInsert",new Eh(t))}}function Ih(t){const e=t.createEmptyElement("img"),i=t.createContainerElement("figure",{class:"image"});return t.insert(t.createPositionAt(i,0),e),i}function Nh(t,e,i){return i.createRange(Oh(t,e,!0,i),Oh(t,e,!1,i))}function Oh(t,e,i,n){let o=t.textNode||(i?t.nodeBefore:t.nodeAfter),s=null;for(;o&&o.getAttribute("linkHref")==e;)s=o,o=i?o.previousSibling:o.nextSibling;return s?n.createPositionAt(s,i?"before":"after"):t}class Rh extends Jl{constructor(t){super(t),this.manualDecorators=new yi}restoreManualDecoratorStates(){for(const t of this.manualDecorators)t.value=this._getDecoratorStateFromModel(t.id)}refresh(){const t=this.editor.model,e=t.document;this.value=e.selection.getAttribute("linkHref");for(const t of this.manualDecorators)t.value=this._getDecoratorStateFromModel(t.id);this.isEnabled=t.schema.checkAttributeInSelection(e.selection,"linkHref")}execute(t,e={}){const i=this.editor.model,n=i.document.selection,o=[],s=[];for(const t in e)e[t]?o.push(t):s.push(t);i.change(e=>{if(n.isCollapsed){const r=n.getFirstPosition();if(n.hasAttribute("linkHref")){const a=Nh(r,n.getAttribute("linkHref"),i);e.setAttribute("linkHref",t,a),o.forEach(t=>{e.setAttribute(t,!0,a)}),s.forEach(t=>{e.removeAttribute(t,a)}),e.setSelection(a)}else if(""!==t){const s=Li(n.getAttributes());s.set("linkHref",t),o.forEach(t=>{s.set(t,!0)});const a=e.createText(t,s);i.insertContent(a,r),e.setSelection(e.createRangeOn(a))}}else{const r=i.schema.getValidRanges(n.getRanges(),"linkHref");for(const i of r)e.setAttribute("linkHref",t,i),o.forEach(t=>{e.setAttribute(t,!0,i)}),s.forEach(t=>{e.removeAttribute(t,i)})}})}_getDecoratorStateFromModel(t){return this.editor.model.document.selection.getAttribute(t)||!1}}class Lh extends Jl{refresh(){this.isEnabled=this.editor.model.document.selection.hasAttribute("linkHref")}execute(){const t=this.editor,e=this.editor.model,i=e.document.selection,n=t.commands.get("link");e.change(t=>{const o=i.isCollapsed?[Nh(i.getFirstPosition(),i.getAttribute("linkHref"),e)]:i.getRanges();for(const e of o)if(t.removeAttribute("linkHref",e),n)for(const i of n.manualDecorators)t.removeAttribute(i.id,e)})}}var Dh=function(t,e,i){var n=t.length;return i=void 0===i?n:i,!e&&i>=n?t:nn(t,e,i)},zh=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var jh=function(t){return zh.test(t)};var Vh=function(t){return t.split("")},Bh="[\\ud800-\\udfff]",Fh="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Hh="\\ud83c[\\udffb-\\udfff]",Uh="[^\\ud800-\\udfff]",Wh="(?:\\ud83c[\\udde6-\\uddff]){2}",qh="[\\ud800-\\udbff][\\udc00-\\udfff]",$h="(?:"+Fh+"|"+Hh+")"+"?",Yh="[\\ufe0e\\ufe0f]?"+$h+("(?:\\u200d(?:"+[Uh,Wh,qh].join("|")+")[\\ufe0e\\ufe0f]?"+$h+")*"),Gh="(?:"+[Uh+Fh+"?",Fh,Wh,qh,Bh].join("|")+")",Qh=RegExp(Hh+"(?="+Hh+")|"+Gh+Yh,"g");var Kh=function(t){return t.match(Qh)||[]};var Jh=function(t){return jh(t)?Kh(t):Vh(t)};var Zh=function(t){return function(e){e=Ji(e);var i=jh(e)?Jh(e):void 0,n=i?i[0]:e.charAt(0),o=i?Dh(i,1).join(""):e.slice(1);return n[t]()+o}}("toUpperCase");const Xh=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,tu=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i;function eu(t,e){const i=e.createAttributeElement("a",{href:t},{priority:5});return e.setCustomProperty("link",!0,i),i}function iu(t){return function(t){return t.replace(Xh,"").match(tu)}(t=String(t))?t:"#"}class nu{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(t){Array.isArray(t)?t.forEach(t=>this._definitions.add(t)):this._definitions.add(t)}getDispatcher(){return t=>{t.on("attribute:linkHref",(t,e,i)=>{if(!i.consumable.test(e.item,"attribute:linkHref"))return;const n=i.writer,o=n.document.selection;for(const t of this._definitions){const s=n.createAttributeElement("a",t.attributes,{priority:5});n.setCustomProperty("link",!0,s),t.callback(e.attributeNewValue)?e.item.is("selection")?n.wrap(o.getFirstRange(),s):n.wrap(i.mapper.toViewRange(e.range),s):n.unwrap(i.mapper.toViewRange(e.range),s)}},{priority:"high"})}}}class ou{constructor({id:t,label:e,attributes:i}){this.id=t,this.set("value"),this.label=e,this.attributes=i}}vi(ou,Hn);class su{constructor(t,e,i){this.model=t,this.attribute=i,this._modelSelection=t.document.selection,this._overrideUid=null,this._isNextGravityRestorationSkipped=!1,e.listenTo(this._modelSelection,"change:range",(t,e)=>{this._isNextGravityRestorationSkipped?this._isNextGravityRestorationSkipped=!1:this._isGravityOverridden&&(!e.directChange&&ru(this._modelSelection.getFirstPosition(),i)||this._restoreGravity())})}handleForwardMovement(t,e){const i=this.attribute;if(!(this._isGravityOverridden||t.isAtStart&&this._hasSelectionAttribute))return lu(t,i)&&this._hasSelectionAttribute?(this._preventCaretMovement(e),this._removeSelectionAttribute(),!0):au(t,i)||cu(t,i)&&this._hasSelectionAttribute?(this._preventCaretMovement(e),this._overrideGravity(),!0):void 0}handleBackwardMovement(t,e){const i=this.attribute;return this._isGravityOverridden?lu(t,i)&&this._hasSelectionAttribute?(this._preventCaretMovement(e),this._restoreGravity(),this._removeSelectionAttribute(),!0):(this._preventCaretMovement(e),this._restoreGravity(),t.isAtStart&&this._removeSelectionAttribute(),!0):lu(t,i)&&!this._hasSelectionAttribute?(this._preventCaretMovement(e),this._setSelectionAttributeFromTheNodeBefore(t),!0):t.isAtEnd&&cu(t,i)?this._hasSelectionAttribute?void(du(t,i)&&(this._skipNextAutomaticGravityRestoration(),this._overrideGravity())):(this._preventCaretMovement(e),this._setSelectionAttributeFromTheNodeBefore(t),!0):t.isAtStart?this._hasSelectionAttribute?(this._removeSelectionAttribute(),this._preventCaretMovement(e),!0):void 0:void(du(t,i)&&(this._skipNextAutomaticGravityRestoration(),this._overrideGravity()))}get _isGravityOverridden(){return!!this._overrideUid}get _hasSelectionAttribute(){return this._modelSelection.hasAttribute(this.attribute)}_overrideGravity(){this._overrideUid=this.model.change(t=>t.overrideSelectionGravity())}_restoreGravity(){this.model.change(t=>{t.restoreSelectionGravity(this._overrideUid),this._overrideUid=null})}_preventCaretMovement(t){t.preventDefault()}_removeSelectionAttribute(){this.model.change(t=>{t.removeSelectionAttribute(this.attribute)})}_setSelectionAttributeFromTheNodeBefore(t){const e=this.attribute;this.model.change(i=>{i.setSelectionAttribute(this.attribute,t.nodeBefore.getAttribute(e))})}_skipNextAutomaticGravityRestoration(){this._isNextGravityRestorationSkipped=!0}}function ru(t,e){return au(t,e)||cu(t,e)}function au(t,e){const{nodeBefore:i,nodeAfter:n}=t,o=!!i&&i.hasAttribute(e);return!!n&&n.hasAttribute(e)&&(!o||i.getAttribute(e)!==n.getAttribute(e))}function cu(t,e){const{nodeBefore:i,nodeAfter:n}=t,o=!!i&&i.hasAttribute(e),s=!!n&&n.hasAttribute(e);return o&&(!s||i.getAttribute(e)!==n.getAttribute(e))}function lu(t,e){const{nodeBefore:i,nodeAfter:n}=t,o=!!i&&i.hasAttribute(e);if(!!n&&n.hasAttribute(e)&&o)return n.getAttribute(e)!==i.getAttribute(e)}function du(t,e){return ru(t.getShiftedBy(-1),e)}i(46);const hu=/^(https?:)?\/\//;class uu extends ql{static get pluginName(){return"LinkEditing"}constructor(t){super(t),t.config.define("link",{addTargetToExternalLinks:!1})}init(){const t=this.editor,e=t.locale;t.model.schema.extend("$text",{allowAttributes:"linkHref"}),t.conversion.for("dataDowncast").attributeToElement({model:"linkHref",view:eu}),t.conversion.for("editingDowncast").attributeToElement({model:"linkHref",view:(t,e)=>eu(iu(t),e)}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{href:!0}},model:{key:"linkHref",value:t=>t.getAttribute("href")}}),t.commands.add("link",new Rh(t)),t.commands.add("unlink",new Lh(t));const i=function(t,e){const i={"Open in a new tab":t("dg"),Downloadable:t("dh")};return e.forEach(t=>(t.label&&i[t.label]&&(t.label=i[t.label]),t)),e}(t.t,function(t){const e=[];if(t)for(const[i,n]of Object.entries(t)){const t=Object.assign({},n,{id:`link${Zh(i)}`});e.push(t)}return e}(t.config.get("link.decorators")));this._enableAutomaticDecorators(i.filter(t=>"automatic"===t.mode)),this._enableManualDecorators(i.filter(t=>"manual"===t.mode)),function({view:t,model:e,emitter:i,attribute:n,locale:o}){const s=new su(e,i,n),r=e.document.selection;i.listenTo(t.document,"keydown",(t,e)=>{if(!r.isCollapsed)return;if(e.shiftKey||e.altKey||e.ctrlKey)return;const i=e.keyCode==po.arrowright,n=e.keyCode==po.arrowleft;if(!i&&!n)return;const a=r.getFirstPosition(),c=o.contentLanguageDirection;let l;l="ltr"===c&&i||"rtl"===c&&n?s.handleForwardMovement(a,e):s.handleBackwardMovement(a,e),l&&t.stop()},{priority:di.get("high")+1})}({view:t.editing.view,model:t.model,emitter:this,attribute:"linkHref",locale:e}),this._setupLinkHighlight()}_enableAutomaticDecorators(t){const e=this.editor,i=new nu;e.config.get("link.addTargetToExternalLinks")&&i.add({id:"linkIsExternal",mode:"automatic",callback:t=>hu.test(t),attributes:{target:"_blank",rel:"noopener noreferrer"}}),i.add(t),i.length&&e.conversion.for("downcast").add(i.getDispatcher())}_enableManualDecorators(t){if(!t.length)return;const e=this.editor,i=e.commands.get("link").manualDecorators;t.forEach(t=>{e.model.schema.extend("$text",{allowAttributes:t.id}),i.add(new ou(t)),e.conversion.for("downcast").attributeToElement({model:t.id,view:(e,n)=>{if(e){const e=i.get(t.id).attributes,o=n.createAttributeElement("a",e,{priority:5});return n.setCustomProperty("link",!0,o),o}}}),e.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:i.get(t.id).attributes},model:{key:t.id}})})}_setupLinkHighlight(){const t=this.editor,e=t.editing.view,i=new Set;e.document.registerPostFixer(e=>{const n=t.model.document.selection;let o=!1;if(n.hasAttribute("linkHref")){const s=Nh(n.getFirstPosition(),n.getAttribute("linkHref"),t.model),r=t.editing.mapper.toViewRange(s);for(const t of r.getItems())t.is("a")&&!t.hasClass("ck-link_selected")&&(e.addClass("ck-link_selected",t),i.add(t),o=!0)}return o}),t.conversion.for("editingDowncast").add(t=>{function n(){e.change(t=>{for(const e of i.values())t.removeClass("ck-link_selected",e),i.delete(e)})}t.on("insert",n,{priority:"highest"}),t.on("remove",n,{priority:"highest"}),t.on("attribute",n,{priority:"highest"}),t.on("selection",n,{priority:"highest"})})}}class fu extends Hd{static get pluginName(){return"Notification"}init(){this.on("show:warning",(t,e)=>{window.alert(e.message)},{priority:"lowest"})}showSuccess(t,e={}){this._showNotification({message:t,type:"success",namespace:e.namespace,title:e.title})}showInfo(t,e={}){this._showNotification({message:t,type:"info",namespace:e.namespace,title:e.title})}showWarning(t,e={}){this._showNotification({message:t,type:"warning",namespace:e.namespace,title:e.title})}_showNotification(t){const e=`show:${t.type}`+(t.namespace?`:${t.namespace}`:"");this.fire(e,{message:t.message,type:t.type,title:t.title||""})}}class mu extends Jl{constructor(t){super(t),this.stopListening(this.editor.model.document,"change"),this.listenTo(this.editor.model.document,"change",()=>this.refresh(),{priority:"low"})}refresh(){const t=this.editor.commands.get("imageInsert"),e=this.editor.commands.get("link");this.isEnabled=t.isEnabled||e.isEnabled}execute(){const t=this.editor,e=this.editor.config.get("ckfinder.openerMethod")||"modal";if("popup"!=e&&"modal"!=e)throw new hi.b('ckfinder-unknown-openerMethod: The openerMethod config option must by "popup" or "modal".',t);const i=this.editor.config.get("ckfinder.options")||{};i.chooseFiles=!0;const n=i.onInit;i.language||(i.language=t.locale.uiLanguage),i.onInit=e=>{n&&n(e),e.on("files:choose",i=>{const n=i.data.files.toArray(),o=n.filter(t=>!t.isImage()),s=n.filter(t=>t.isImage());for(const e of o)t.execute("link",e.getUrl());const r=[];for(const t of s){const i=t.getUrl();r.push(i||e.request("file:getProxyUrl",{file:t}))}r.length&&gu(t,r)}),e.on("file:choose:resizedImage",e=>{const i=e.data.resizedUrl;if(i)gu(t,[i]);else{const e=t.plugins.get("Notification"),i=t.locale.t;e.showWarning(i("bj"),{title:i("bk"),namespace:"ckfinder"})}})},window.CKFinder[e](i)}}function gu(t,e){if(t.commands.get("imageInsert").isEnabled)t.execute("imageInsert",{source:e});else{const e=t.plugins.get("Notification"),i=t.locale.t;e.showWarning(i("bl"),{title:i("bm"),namespace:"ckfinder"})}}class pu extends ql{static get pluginName(){return"CKFinderEditing"}static get requires(){return[fu,Mh,uu]}init(){const t=this.editor;t.commands.add("ckfinder",new mu(t))}}const bu=/^data:(\S*?);base64,/;class wu{constructor(t,e,i){if(!t)throw new hi.b("fileuploader-missing-file: File must be provided as the first argument",null);if(!e)throw new hi.b("fileuploader-missing-token: Token must be provided as the second argument.",null);if(!i)throw new hi.b("fileuploader-missing-api-address: Api address must be provided as the third argument.",null);this.file=function(t){if("string"!=typeof t)return!1;const e=t.match(bu);return!(!e||!e.length)}(t)?function(t,e=512){try{const i=t.match(bu)[1],n=atob(t.replace(bu,"")),o=[];for(let t=0;tt(i)),this}onError(t){return this.once("error",(e,i)=>t(i)),this}abort(){this.xhr.abort()}send(){return this._prepareRequest(),this._attachXHRListeners(),this._sendRequest()}_prepareRequest(){const t=new XMLHttpRequest;t.open("POST",this._apiAddress),t.setRequestHeader("Authorization",this._token.value),t.responseType="json",this.xhr=t}_attachXHRListeners(){const t=this,e=this.xhr;function i(e){return()=>t.fire("error",e)}e.addEventListener("error",i("Network Error")),e.addEventListener("abort",i("Abort")),e.upload&&e.upload.addEventListener("progress",t=>{t.lengthComputable&&this.fire("progress",{total:t.total,uploaded:t.loaded})}),e.addEventListener("load",()=>{const t=e.status,i=e.response;if(t<200||t>299)return this.fire("error",i.message||i.error)})}_sendRequest(){const t=new FormData,e=this.xhr;return t.append("file",this.file),new Promise((i,n)=>{e.addEventListener("load",()=>{const t=e.status,o=e.response;return t<200||t>299?o.message?n(new hi.b("fileuploader-uploading-data-failed: Uploading file failed.",this,{message:o.message})):n(o.error):i(o)}),e.addEventListener("error",()=>n(new Error("Network Error"))),e.addEventListener("abort",()=>n(new Error("Abort"))),e.send(t)})}}vi(wu,mi);const ku={refreshInterval:36e5,autoRefresh:!0};class _u{constructor(t,e=ku){if(!t)throw new hi.b("token-missing-token-url: A `tokenUrl` must be provided as the first constructor argument.",this);this.set("value",e.initValue),this._refresh="function"==typeof t?t:()=>{return e=t,new Promise((t,i)=>{const n=new XMLHttpRequest;n.open("GET",e),n.addEventListener("load",()=>{const e=n.status,o=n.response;return e<200||e>299?i(new hi.b("token-cannot-download-new-token: Cannot download new token from the provided url.",null)):t(o)}),n.addEventListener("error",()=>i(new Error("Network Error"))),n.addEventListener("abort",()=>i(new Error("Abort"))),n.send()});var e},this._options=Object.assign({},ku,e)}init(){return new Promise((t,e)=>{this._options.autoRefresh&&this._startRefreshing(),this.value?t(this):this._refreshToken().then(t).catch(e)})}_refreshToken(){return this._refresh().then(t=>this.set("value",t)).then(()=>this)}destroy(){this._stopRefreshing()}_startRefreshing(){this._refreshInterval=setInterval(()=>this._refreshToken(),this._options.refreshInterval)}_stopRefreshing(){clearInterval(this._refreshInterval)}static create(t,e=ku){return new _u(t,e).init()}}vi(_u,Hn);var vu=_u;class yu extends Hd{static get pluginName(){return"CloudServices"}init(){const t=this.context.config.get("cloudServices")||{};for(const e in t)this[e]=t[e];if(this.tokenUrl)return this.token=new yu.Token(this.tokenUrl),this.token.init();this.token=null}}yu.Token=vu;class xu extends ql{static get requires(){return[qd,yu]}init(){const t=this.editor,e=t.plugins.get(yu),i=e.token,n=e.uploadUrl;i&&(this._uploadGateway=new xu._UploadGateway(i,n),t.plugins.get(qd).createUploadAdapter=t=>new Au(this._uploadGateway,t))}}class Au{constructor(t,e){this.uploadGateway=t,this.loader=e}upload(){return this.loader.file.then(t=>(this.fileUploader=this.uploadGateway.upload(t),this.fileUploader.on("progress",(t,e)=>{this.loader.uploadTotal=e.total,this.loader.uploaded=e.uploaded}),this.fileUploader.send()))}abort(){this.fileUploader.abort()}}xu._UploadGateway=class{constructor(t,e){if(!t)throw new hi.b("uploadgateway-missing-token: Token must be provided.",null);if(!e)throw new hi.b("uploadgateway-missing-api-address: Api address must be provided.",null);this._token=t,this._apiAddress=e}upload(t){return new wu(t,this._token,this._apiAddress)}};class Cu extends Os{constructor(t){super(t),this.domEventType="mousedown"}onDomEvent(t){this.fire(t.type,t)}}i(48);const Tu=wo("Ctrl+A");class Pu extends ql{static get pluginName(){return"Widget"}init(){const t=this.editor.editing.view,e=t.document;this._previouslySelected=new Set,this.editor.editing.downcastDispatcher.on("selection",(t,e,i)=>{this._clearPreviouslySelectedWidgets(i.writer);const n=i.writer,o=n.document.selection,s=o.getSelectedElement();let r=null;for(const t of o.getRanges())for(const e of t){const t=e.item;kh(t)&&!Su(t,r)&&(n.addClass("ck-widget_selected",t),this._previouslySelected.add(t),r=t,t==s&&n.setSelection(o.getRanges(),{fake:!0,label:vh(s)}))}},{priority:"low"}),t.addObserver(Cu),this.listenTo(e,"mousedown",(...t)=>this._onMousedown(...t)),this.listenTo(e,"keydown",(...t)=>this._onKeydown(...t),{priority:"high"}),this.listenTo(e,"delete",(t,e)=>{this._handleDelete("forward"==e.direction)&&(e.preventDefault(),t.stop())},{priority:"high"})}_onMousedown(t,e){const i=this.editor,n=i.editing.view,o=n.document;let s=e.target;if(function(t){for(;t;){if(t.is("editableElement")&&!t.is("rootElement"))return!0;if(kh(t))return!1;t=t.parent}return!1}(s)){if(fo.isSafari&&e.domEvent.detail>=3){const t=i.editing.mapper.toModelElement(s);this.editor.model.change(i=>{e.preventDefault(),i.setSelection(t,"in")})}return}if(!kh(s)&&(s=s.findAncestor(kh),!s))return;e.preventDefault(),o.isFocused||n.focus();const r=i.editing.mapper.toModelElement(s);this._setSelectionOverElement(r)}_onKeydown(t,e){const i=e.keyCode,n="ltr"===this.editor.locale.contentLanguageDirection,o=i==po.arrowdown||i==po[n?"arrowright":"arrowleft"];let s=!1;!function(t){return t==po.arrowright||t==po.arrowleft||t==po.arrowup||t==po.arrowdown}(i)?!function(t){return bo(t)==Tu}(e)?i===po.enter&&(s=this._handleEnterKey(e.shiftKey)):s=this._selectAllNestedEditableContent()||this._selectAllContent():s=this._handleArrowKeys(o),s&&(e.preventDefault(),t.stop())}_handleDelete(t){if(this.editor.isReadOnly)return;const e=this.editor.model.document.selection;if(!e.isCollapsed)return;const i=this._getObjectElementNextToSelection(t);return i?(this.editor.model.change(t=>{let n=e.anchor.parent;for(;n.isEmpty;){const e=n;n=e.parent,t.remove(e)}this._setSelectionOverElement(i)}),!0):void 0}_handleArrowKeys(t){const e=this.editor.model,i=e.schema,n=e.document.selection,o=n.getSelectedElement();if(o&&i.isObject(o)){const o=t?n.getLastPosition():n.getFirstPosition(),s=i.getNearestSelectionRange(o,t?"forward":"backward");return s&&e.change(t=>{t.setSelection(s)}),!0}if(!n.isCollapsed)return;const s=this._getObjectElementNextToSelection(t);return s&&i.isObject(s)?(this._setSelectionOverElement(s),!0):void 0}_handleEnterKey(t){const e=this.editor.model,i=e.document.selection.getSelectedElement();if(n=i,o=e.schema,n&&o.isObject(n)&&!o.isInline(n))return e.change(n=>{let o=n.createPositionAt(i,t?"before":"after");const s=n.createElement("paragraph");if(e.schema.isBlock(i.parent)){const t=e.schema.findAllowedParent(o,s);o=n.split(o,t).position}n.insert(s,o),n.setSelection(s,"in")}),!0;var n,o}_selectAllNestedEditableContent(){const t=this.editor.model,e=t.document.selection,i=t.schema.getLimitElement(e);return e.getFirstRange().root!=i&&(t.change(t=>{t.setSelection(t.createRangeIn(i))}),!0)}_selectAllContent(){const t=this.editor.model,e=this.editor.editing,i=e.view.document.selection.getSelectedElement();if(i&&kh(i)){const n=e.mapper.toModelElement(i.parent);return t.change(t=>{t.setSelection(t.createRangeIn(n))}),!0}return!1}_setSelectionOverElement(t){this.editor.model.change(e=>{e.setSelection(e.createRangeOn(t))})}_getObjectElementNextToSelection(t){const e=this.editor.model,i=e.schema,n=e.document.selection,o=e.createSelection(n);e.modifySelection(o,{direction:t?"forward":"backward"});const s=t?o.focus.nodeBefore:o.focus.nodeAfter;return s&&i.isObject(s)?s:null}_clearPreviouslySelectedWidgets(t){for(const e of this._previouslySelected)t.removeClass("ck-widget_selected",e);this._previouslySelected.clear()}}function Su(t,e){return!!e&&Array.from(t.getAncestors()).includes(e)}class Eu extends Jl{refresh(){const t=this.editor.model.document.selection.getSelectedElement();this.isEnabled=Th(t),Th(t)&&t.hasAttribute("alt")?this.value=t.getAttribute("alt"):this.value=!1}execute(t){const e=this.editor.model,i=e.document.selection.getSelectedElement();e.change(e=>{e.setAttribute("alt",t.newValue,i)})}}class Mu extends ql{static get pluginName(){return"ImageTextAlternativeEditing"}init(){this.editor.commands.add("imageTextAlternative",new Eu(this.editor))}}i(50);class Iu extends rl{constructor(t,e){super(t);const i=`ck-input-${li()}`,n=`ck-status-${li()}`;this.set("label"),this.set("value"),this.set("isReadOnly",!1),this.set("errorText",null),this.set("infoText",null),this.labelView=this._createLabelView(i),this.inputView=this._createInputView(e,i,n),this.statusView=this._createStatusView(n),this.bind("_statusText").to(this,"errorText",this,"infoText",(t,e)=>t||e);const o=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-input",o.if("isReadOnly","ck-disabled")]},children:[this.labelView,this.inputView,this.statusView]})}_createLabelView(t){const e=new dl(this.locale);return e.for=t,e.bind("text").to(this,"label"),e}_createInputView(t,e,i){const n=new t(this.locale,i);return n.id=e,n.ariaDescribedById=i,n.bind("value").to(this),n.bind("isReadOnly").to(this),n.bind("hasError").to(this,"errorText",t=>!!t),n.on("input",()=>{this.errorText=null}),n}_createStatusView(t){const e=new rl(this.locale),i=this.bindTemplate;return e.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-input__status",i.if("errorText","ck-labeled-input__status_error"),i.if("_statusText","ck-hidden",t=>!t)],id:t,role:i.if("errorText","alert")},children:[{text:i.to("_statusText")}]}),e}select(){this.inputView.select()}focus(){this.inputView.focus()}}i(52);class Nu extends rl{constructor(t){super(t),this.set("value"),this.set("id"),this.set("placeholder"),this.set("isReadOnly",!1),this.set("hasError",!1),this.set("ariaDescribedById");const e=this.bindTemplate;this.setTemplate({tag:"input",attributes:{type:"text",class:["ck","ck-input","ck-input-text",e.if("hasError","ck-error")],id:e.to("id"),placeholder:e.to("placeholder"),readonly:e.to("isReadOnly"),"aria-invalid":e.if("hasError",!0),"aria-describedby":e.to("ariaDescribedById")},on:{input:e.to("input")}})}render(){super.render();const t=t=>{this.element.value=t||0===t?t:""};t(this.value),this.on("change:value",(e,i,n)=>{t(n)})}select(){this.element.select()}focus(){this.element.focus()}}function Ou({view:t}){t.listenTo(t.element,"submit",(e,i)=>{i.preventDefault(),t.fire("submit")},{useCapture:!0})}var Ru='',Lu='';i(54);class Du extends rl{constructor(t){super(t);const e=this.locale.t;this.focusTracker=new Ic,this.keystrokes=new yc,this.labeledInput=this._createLabeledInputView(),this.saveButtonView=this._createButton(e("cf"),Ru,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(e("cg"),Lu,"ck-button-cancel","cancel"),this._focusables=new Bc,this._focusCycler=new bl({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]})}render(){super.render(),this.keystrokes.listenTo(this.element),Ou({view:this}),[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)})}_createButton(t,e,i,n){const o=new El(this.locale);return o.set({label:t,icon:e,tooltip:!0}),o.extendTemplate({attributes:{class:i}}),n&&o.delegate("execute").to(this,n),o}_createLabeledInputView(){const t=this.locale.t,e=new Iu(this.locale,Nu);return e.label=t("cl"),e.inputView.placeholder=t("cl"),e}}i(56);const zu=ml("px"),ju=ts.document.body;class Vu extends rl{constructor(t){super(t);const e=this.bindTemplate;this.set("top",0),this.set("left",0),this.set("position","arrow_nw"),this.set("isVisible",!1),this.set("withArrow",!0),this.set("class"),this.content=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-panel",e.to("position",t=>`ck-balloon-panel_${t}`),e.if("isVisible","ck-balloon-panel_visible"),e.if("withArrow","ck-balloon-panel_with-arrow"),e.to("class")],style:{top:e.to("top",zu),left:e.to("left",zu)}},children:this.content})}show(){this.isVisible=!0}hide(){this.isVisible=!1}attachTo(t){this.show();const e=Vu.defaultPositions,i=Object.assign({},{element:this.element,positions:[e.southArrowNorth,e.southArrowNorthWest,e.southArrowNorthEast,e.northArrowSouth,e.northArrowSouthWest,e.northArrowSouthEast],limiter:ju,fitInViewport:!0},t),n=Vu._getOptimalPosition(i),o=parseInt(n.left),s=parseInt(n.top),r=n.name;Object.assign(this,{top:s,left:o,position:r})}pin(t){this.unpin(),this._pinWhenIsVisibleCallback=()=>{this.isVisible?this._startPinning(t):this._stopPinning()},this._startPinning(t),this.listenTo(this,"change:isVisible",this._pinWhenIsVisibleCallback)}unpin(){this._pinWhenIsVisibleCallback&&(this._stopPinning(),this.stopListening(this,"change:isVisible",this._pinWhenIsVisibleCallback),this._pinWhenIsVisibleCallback=null,this.hide())}_startPinning(t){this.attachTo(t);const e=Bu(t.target),i=t.limiter?Bu(t.limiter):ju;this.listenTo(ts.document,"scroll",(n,o)=>{const s=o.target,r=e&&s.contains(e),a=i&&s.contains(i);!r&&!a&&e&&i||this.attachTo(t)},{useCapture:!0}),this.listenTo(ts.window,"resize",()=>{this.attachTo(t)})}_stopPinning(){this.stopListening(ts.document,"scroll"),this.stopListening(ts.window,"resize")}}function Bu(t){return ii(t)?t:Ks(t)?t.commonAncestorContainer:"function"==typeof t?Bu(t()):null}function Fu(t,e){return t.top-e.height-Vu.arrowVerticalOffset}function Hu(t){return t.bottom+Vu.arrowVerticalOffset}Vu.arrowHorizontalOffset=25,Vu.arrowVerticalOffset=10,Vu._getOptimalPosition=xl,Vu.defaultPositions={northArrowSouth:(t,e)=>({top:Fu(t,e),left:t.left+t.width/2-e.width/2,name:"arrow_s"}),northArrowSouthEast:(t,e)=>({top:Fu(t,e),left:t.left+t.width/2-e.width+Vu.arrowHorizontalOffset,name:"arrow_se"}),northArrowSouthWest:(t,e)=>({top:Fu(t,e),left:t.left+t.width/2-Vu.arrowHorizontalOffset,name:"arrow_sw"}),northWestArrowSouth:(t,e)=>({top:Fu(t,e),left:t.left-e.width/2,name:"arrow_s"}),northWestArrowSouthWest:(t,e)=>({top:Fu(t,e),left:t.left-Vu.arrowHorizontalOffset,name:"arrow_sw"}),northWestArrowSouthEast:(t,e)=>({top:Fu(t,e),left:t.left-e.width+Vu.arrowHorizontalOffset,name:"arrow_se"}),northEastArrowSouth:(t,e)=>({top:Fu(t,e),left:t.right-e.width/2,name:"arrow_s"}),northEastArrowSouthEast:(t,e)=>({top:Fu(t,e),left:t.right-e.width+Vu.arrowHorizontalOffset,name:"arrow_se"}),northEastArrowSouthWest:(t,e)=>({top:Fu(t,e),left:t.right-Vu.arrowHorizontalOffset,name:"arrow_sw"}),southArrowNorth:(t,e)=>({top:Hu(t),left:t.left+t.width/2-e.width/2,name:"arrow_n"}),southArrowNorthEast:(t,e)=>({top:Hu(t),left:t.left+t.width/2-e.width+Vu.arrowHorizontalOffset,name:"arrow_ne"}),southArrowNorthWest:(t,e)=>({top:Hu(t),left:t.left+t.width/2-Vu.arrowHorizontalOffset,name:"arrow_nw"}),southWestArrowNorth:(t,e)=>({top:Hu(t),left:t.left-e.width/2,name:"arrow_n"}),southWestArrowNorthWest:(t,e)=>({top:Hu(t),left:t.left-Vu.arrowHorizontalOffset,name:"arrow_nw"}),southWestArrowNorthEast:(t,e)=>({top:Hu(t),left:t.left-e.width+Vu.arrowHorizontalOffset,name:"arrow_ne"}),southEastArrowNorth:(t,e)=>({top:Hu(t),left:t.right-e.width/2,name:"arrow_n"}),southEastArrowNorthEast:(t,e)=>({top:Hu(t),left:t.right-e.width+Vu.arrowHorizontalOffset,name:"arrow_ne"}),southEastArrowNorthWest:(t,e)=>({top:Hu(t),left:t.right-Vu.arrowHorizontalOffset,name:"arrow_nw"})};i(58),i(60);const Uu=ml("px");class Wu extends ql{static get pluginName(){return"ContextualBalloon"}constructor(t){super(t),this.positionLimiter=()=>{const t=this.editor.editing.view,e=t.document.selection.editableElement;return e?t.domConverter.mapViewToDom(e.root):null},this.set("visibleView",null),this.view=new Vu(t.locale),t.ui.view.body.add(this.view),t.ui.focusTracker.add(this.view.element),this._viewToStack=new Map,this._idToStack=new Map,this.set("_numberOfStacks",0),this.set("_singleViewMode",!1),this._rotatorView=this._createRotatorView(),this._fakePanelsView=this._createFakePanelsView()}hasView(t){return Array.from(this._viewToStack.keys()).includes(t)}add(t){if(this.hasView(t.view))throw new hi.b("contextualballoon-add-view-exist: Cannot add configuration of the same view twice.",[this,t]);const e=t.stackId||"main";if(!this._idToStack.has(e))return this._idToStack.set(e,new Map([[t.view,t]])),this._viewToStack.set(t.view,this._idToStack.get(e)),this._numberOfStacks=this._idToStack.size,void(this._visibleStack&&!t.singleViewMode||this.showStack(e));const i=this._idToStack.get(e);t.singleViewMode&&this.showStack(e),i.set(t.view,t),this._viewToStack.set(t.view,i),i===this._visibleStack&&this._showView(t)}remove(t){if(!this.hasView(t))throw new hi.b("contextualballoon-remove-view-not-exist: Cannot remove the configuration of a non-existent view.",[this,t]);const e=this._viewToStack.get(t);this._singleViewMode&&this.visibleView===t&&(this._singleViewMode=!1),this.visibleView===t&&(1===e.size?this._idToStack.size>1?this._showNextStack():(this.view.hide(),this.visibleView=null,this._rotatorView.hideView()):this._showView(Array.from(e.values())[e.size-2])),1===e.size?(this._idToStack.delete(this._getStackId(e)),this._numberOfStacks=this._idToStack.size):e.delete(t),this._viewToStack.delete(t)}updatePosition(t){t&&(this._visibleStack.get(this.visibleView).position=t),this.view.pin(this._getBalloonPosition()),this._fakePanelsView.updatePosition()}showStack(t){this.visibleStack=t;const e=this._idToStack.get(t);if(!e)throw new hi.b("contextualballoon-showstack-stack-not-exist: Cannot show a stack that does not exist.",this);this._visibleStack!==e&&this._showView(Array.from(e.values()).pop())}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(t){return Array.from(this._idToStack.entries()).find(e=>e[1]===t)[0]}_showNextStack(){const t=Array.from(this._idToStack.values());let e=t.indexOf(this._visibleStack)+1;t[e]||(e=0),this.showStack(this._getStackId(t[e]))}_showPrevStack(){const t=Array.from(this._idToStack.values());let e=t.indexOf(this._visibleStack)-1;t[e]||(e=t.length-1),this.showStack(this._getStackId(t[e]))}_createRotatorView(){const t=new qu(this.editor.locale),e=this.editor.locale.t;return this.view.content.add(t),t.bind("isNavigationVisible").to(this,"_numberOfStacks",this,"_singleViewMode",(t,e)=>!e&&t>1),t.on("change:isNavigationVisible",()=>this.updatePosition(),{priority:"low"}),t.bind("counter").to(this,"visibleView",this,"_numberOfStacks",(t,i)=>{if(i<2)return"";const n=Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1;return e("cm",[n,i])}),t.buttonNextView.on("execute",()=>{t.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showNextStack()}),t.buttonPrevView.on("execute",()=>{t.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showPrevStack()}),t}_createFakePanelsView(){const t=new $u(this.editor.locale,this.view);return t.bind("numberOfPanels").to(this,"_numberOfStacks",this,"_singleViewMode",(t,e)=>!e&&t>=2?Math.min(t-1,2):0),t.listenTo(this.view,"change:top",()=>t.updatePosition()),t.listenTo(this.view,"change:left",()=>t.updatePosition()),this.editor.ui.view.body.add(t),t}_showView({view:t,balloonClassName:e="",withArrow:i=!0,singleViewMode:n=!1}){this.view.class=e,this.view.withArrow=i,this._rotatorView.showView(t),this.visibleView=t,this.view.pin(this._getBalloonPosition()),this._fakePanelsView.updatePosition(),n&&(this._singleViewMode=!0)}_getBalloonPosition(){let t=Array.from(this._visibleStack.values()).pop().position;return t&&!t.limiter&&(t=Object.assign({},t,{limiter:this.positionLimiter})),t}}class qu extends rl{constructor(t){super(t);const e=t.t,i=this.bindTemplate;this.set("isNavigationVisible",!0),this.focusTracker=new Ic,this.buttonPrevView=this._createButtonView(e("cn"),''),this.buttonNextView=this._createButtonView(e("co"),''),this.content=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-rotator"],"z-index":"-1"},children:[{tag:"div",attributes:{class:["ck-balloon-rotator__navigation",i.to("isNavigationVisible",t=>t?"":"ck-hidden")]},children:[this.buttonPrevView,{tag:"span",attributes:{class:["ck-balloon-rotator__counter"]},children:[{text:i.to("counter")}]},this.buttonNextView]},{tag:"div",attributes:{class:"ck-balloon-rotator__content"},children:this.content}]})}render(){super.render(),this.focusTracker.add(this.element)}showView(t){this.hideView(),this.content.add(t)}hideView(){this.content.clear()}_createButtonView(t,e){const i=new El(this.locale);return i.set({label:t,icon:e,tooltip:!0}),i}}class $u extends rl{constructor(t,e){super(t);const i=this.bindTemplate;this.set("top",0),this.set("left",0),this.set("height",0),this.set("width",0),this.set("numberOfPanels",0),this.content=this.createCollection(),this._balloonPanelView=e,this.setTemplate({tag:"div",attributes:{class:["ck-fake-panel",i.to("numberOfPanels",t=>t?"":"ck-hidden")],style:{top:i.to("top",Uu),left:i.to("left",Uu),width:i.to("width",Uu),height:i.to("height",Uu)}},children:this.content}),this.on("change:numberOfPanels",(t,e,i,n)=>{i>n?this._addPanels(i-n):this._removePanels(n-i),this.updatePosition()})}_addPanels(t){for(;t--;){const t=new rl;t.setTemplate({tag:"div"}),this.content.add(t),this.registerChild(t)}}_removePanels(t){for(;t--;){const t=this.content.last;this.content.remove(t),this.deregisterChild(t),t.destroy()}}updatePosition(){if(this.numberOfPanels){const{top:t,left:e}=this._balloonPanelView,{width:i,height:n}=new Xs(this._balloonPanelView.element);Object.assign(this,{top:t,left:e,width:i,height:n})}}}function Yu(t){const e=t.editing.view,i=Vu.defaultPositions;return{target:e.domConverter.viewToDom(e.document.selection.getSelectedElement()),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast]}}class Gu extends ql{static get requires(){return[Wu]}static get pluginName(){return"ImageTextAlternativeUI"}init(){this._createButton(),this._createForm()}destroy(){super.destroy(),this._form.destroy()}_createButton(){const t=this.editor,e=t.t;t.ui.componentFactory.add("imageTextAlternative",i=>{const n=t.commands.get("imageTextAlternative"),o=new El(i);return o.set({label:e("bi"),icon:'',tooltip:!0}),o.bind("isEnabled").to(n,"isEnabled"),this.listenTo(o,"execute",()=>{this._showForm()}),o})}_createForm(){const t=this.editor,e=t.editing.view.document;this._balloon=this.editor.plugins.get("ContextualBalloon"),this._form=new Du(t.locale),this._form.render(),this.listenTo(this._form,"submit",()=>{t.execute("imageTextAlternative",{newValue:this._form.labeledInput.inputView.element.value}),this._hideForm(!0)}),this.listenTo(this._form,"cancel",()=>{this._hideForm(!0)}),this._form.keystrokes.set("Esc",(t,e)=>{this._hideForm(!0),e()}),this.listenTo(t.ui,"update",()=>{Ch(e.selection)?this._isVisible&&function(t){const e=t.plugins.get("ContextualBalloon");if(Ch(t.editing.view.document.selection)){const i=Yu(t);e.updatePosition(i)}}(t):this._hideForm(!0)}),Ll({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;const t=this.editor,e=t.commands.get("imageTextAlternative"),i=this._form.labeledInput;this._isInBalloon||this._balloon.add({view:this._form,position:Yu(t)}),i.value=i.inputView.element.value=e.value||"",this._form.labeledInput.select()}_hideForm(t){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),t&&this.editor.editing.view.focus())}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class Qu extends ql{static get requires(){return[Mu,Gu]}static get pluginName(){return"ImageTextAlternative"}}i(62);class Ku extends ql{static get requires(){return[Mh,Pu,Qu]}static get pluginName(){return"Image"}}class Ju extends rl{constructor(t){super(t),this.buttonView=new El(t),this._fileInputView=new Zu(t),this._fileInputView.bind("acceptedType").to(this),this._fileInputView.bind("allowMultipleFiles").to(this),this._fileInputView.delegate("done").to(this),this.setTemplate({tag:"span",attributes:{class:"ck-file-dialog-button"},children:[this.buttonView,this._fileInputView]}),this.buttonView.on("execute",()=>{this._fileInputView.open()})}focus(){this.buttonView.focus()}}class Zu extends rl{constructor(t){super(t),this.set("acceptedType"),this.set("allowMultipleFiles",!1);const e=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck-hidden"],type:"file",tabindex:"-1",accept:e.to("acceptedType"),multiple:e.to("allowMultipleFiles")},on:{change:e.to(()=>{this.element&&this.element.files&&this.element.files.length&&this.fire("done",this.element.files),this.element.value=""})}})}open(){this.element.click()}}function Xu(t){const e=t.map(t=>t.replace("+","\\+"));return new RegExp(`^image\\/(${e.join("|")})$`)}function tf(t){return new Promise((e,i)=>{const n=t.getAttribute("src");fetch(n).then(t=>t.blob()).then(t=>{const o=function(t,e){return t.type?t.type:e.match(/data:(image\/\w+);base64/)?e.match(/data:(image\/\w+);base64/)[1].toLowerCase():"image/jpeg"}(t,n),s=function(t,e,i){try{return new File([t],e,{type:i})}catch(t){return null}}(t,`image.${o.replace("image/","")}`,o);s?e(s):i()}).catch(i)})}class ef extends ql{init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("imageUpload",i=>{const n=new Ju(i),o=t.commands.get("imageUpload"),s=t.config.get("image.upload.types"),r=Xu(s);return n.set({acceptedType:s.map(t=>`image/${t}`).join(","),allowMultipleFiles:!0}),n.buttonView.set({label:e("y"),icon:'',tooltip:!0}),n.buttonView.bind("isEnabled").to(o),n.on("done",(e,i)=>{const n=Array.from(i).filter(t=>r.test(t.type));n.length&&t.execute("imageUpload",{file:n})}),n})}}i(64),i(66),i(68);class nf extends ql{constructor(t){super(t),this.placeholder="data:image/svg+xml;utf8,"+encodeURIComponent('')}init(){this.editor.editing.downcastDispatcher.on("attribute:uploadStatus:image",(...t)=>this.uploadStatusChange(...t))}uploadStatusChange(t,e,i){const n=this.editor,o=e.item,s=o.getAttribute("uploadId");if(!i.consumable.consume(e.item,t.name))return;const r=n.plugins.get(qd),a=s?e.attributeNewValue:null,c=this.placeholder,l=n.editing.mapper.toViewElement(o),d=i.writer;if("reading"==a)return of(l,d),void sf(c,l,d);if("uploading"==a){const t=r.loaders.get(s);return of(l,d),void(t?(rf(l,d),function(t,e,i,n){const o=function(t){const e=t.createUIElement("div",{class:"ck-progress-bar"});return t.setCustomProperty("progressBar",!0,e),e}(e);e.insert(e.createPositionAt(t,"end"),o),i.on("change:uploadedPercent",(t,e,i)=>{n.change(t=>{t.setStyle("width",i+"%",o)})})}(l,d,t,n.editing.view),function(t,e,i){if(i.data){const n=t.getChild(0);e.setAttribute("src",i.data,n)}}(l,d,t)):sf(c,l,d))}"complete"==a&&r.loaders.get(s)&&!fo.isEdge&&function(t,e,i){const n=e.createUIElement("div",{class:"ck-image-upload-complete-icon"});e.insert(e.createPositionAt(t,"end"),n),setTimeout(()=>{i.change(t=>t.remove(t.createRangeOn(n)))},3e3)}(l,d,n.editing.view),function(t,e){cf(t,e,"progressBar")}(l,d),rf(l,d),function(t,e){e.removeClass("ck-appear",t)}(l,d)}}function of(t,e){t.hasClass("ck-appear")||e.addClass("ck-appear",t)}function sf(t,e,i){e.hasClass("ck-image-upload-placeholder")||i.addClass("ck-image-upload-placeholder",e);const n=e.getChild(0);n.getAttribute("src")!==t&&i.setAttribute("src",t,n),af(e,"placeholder")||i.insert(i.createPositionAfter(n),function(t){const e=t.createUIElement("div",{class:"ck-upload-placeholder-loader"});return t.setCustomProperty("placeholder",!0,e),e}(i))}function rf(t,e){t.hasClass("ck-image-upload-placeholder")&&e.removeClass("ck-image-upload-placeholder",t),cf(t,e,"placeholder")}function af(t,e){for(const i of t.getChildren())if(i.getCustomProperty(e))return i}function cf(t,e,i){const n=af(t,i);n&&e.remove(e.createRangeOn(n))}class lf{createDocumentFragment(t){return new Ao(t)}createElement(t,e,i){return new On(t,e,i)}createText(t){return new Ni(t)}clone(t,e=!1){return t._clone(e)}appendChild(t,e){return e._appendChild(t)}insertChild(t,e,i){return i._insertChild(t,e)}removeChildren(t,e,i){return i._removeChildren(t,e)}remove(t){const e=t.parent;return e?this.removeChildren(e.getChildIndex(t),1,e):[]}replace(t,e){const i=t.parent;if(i){const n=i.getChildIndex(t);return this.removeChildren(n,1,i),this.insertChild(n,e,i),!0}return!1}unwrapElement(t){const e=t.parent;if(e){const i=e.getChildIndex(t);this.remove(t),this.insertChild(i,t.getChildren(),e)}}rename(t,e){const i=new On(t,e.getAttributes(),e.getChildren());return this.replace(e,i)?i:null}setAttribute(t,e,i){i._setAttribute(t,e)}removeAttribute(t,e){e._removeAttribute(t)}addClass(t,e){e._addClass(t)}removeClass(t,e){e._removeClass(t)}setStyle(t,e,i){y(t)&&void 0===i&&(i=e),i._setStyle(t,e)}removeStyle(t,e){e._removeStyle(t)}setCustomProperty(t,e,i){i._setCustomProperty(t,e)}removeCustomProperty(t,e){return e._removeCustomProperty(t)}createPositionAt(t,e){return Xn._createAt(t,e)}createPositionAfter(t){return Xn._createAfter(t)}createPositionBefore(t){return Xn._createBefore(t)}createRange(t,e){return new to(t,e)}createRangeOn(t){return to._createOn(t)}createRangeIn(t){return to._createIn(t)}createSelection(t,e,i){return new no(t,e,i)}}class df extends Jl{refresh(){this.isEnabled=Sh(this.editor.model)}execute(t){const e=this.editor,i=e.model,n=e.plugins.get(qd);i.change(e=>{const o=Array.isArray(t.file)?t.file:[t.file];for(const t of o)hf(e,i,n,t)})}}function hf(t,e,i,n){const o=i.createLoader(n);o&&Ph(t,e,{uploadId:o.id})}class uf extends ql{static get requires(){return[qd,fu,Kl]}static get pluginName(){return"ImageUploadEditing"}constructor(t){super(t),t.config.define("image",{upload:{types:["jpeg","png","gif","bmp","webp","tiff"]}})}init(){const t=this.editor,e=t.model.document,i=t.model.schema,n=t.conversion,o=t.plugins.get(qd),s=Xu(t.config.get("image.upload.types"));i.extend("image",{allowAttributes:["uploadId","uploadStatus"]}),t.commands.add("imageUpload",new df(t)),n.for("upcast").attributeToAttribute({view:{name:"img",key:"uploadId"},model:"uploadId"}),this.listenTo(t.editing.view.document,"clipboardInput",(e,i)=>{if(n=i.dataTransfer,Array.from(n.types).includes("text/html")&&""!==n.getData("text/html"))return;var n;const o=Array.from(i.dataTransfer.files).filter(t=>!!t&&s.test(t.type)),r=i.targetRanges.map(e=>t.editing.mapper.toModelRange(e));t.model.change(i=>{i.setSelection(r),o.length&&(e.stop(),t.model.enqueueChange("default",()=>{t.execute("imageUpload",{file:o})}))})}),this.listenTo(t.plugins.get(Kl),"inputTransformation",(e,i)=>{const n=Array.from(t.editing.view.createRangeIn(i.content)).filter(t=>{return!(!(e=t.item).is("element","img")||!e.getAttribute("src"))&&(e.getAttribute("src").match(/^data:image\/\w+;base64,/g)||e.getAttribute("src").match(/^blob:/g))&&!t.item.getAttribute("uploadProcessed");var e}).map(t=>({promise:tf(t.item),imageElement:t.item}));if(!n.length)return;const s=new lf;for(const t of n){s.setAttribute("uploadProcessed",!0,t.imageElement);const e=o.createLoader(t.promise);e&&(s.setAttribute("src","",t.imageElement),s.setAttribute("uploadId",e.id,t.imageElement))}}),t.editing.view.document.on("dragover",(t,e)=>{e.preventDefault()}),e.on("change",()=>{const i=e.differ.getChanges({includeChangesInGraveyard:!0});for(const e of i)if("insert"==e.type&&"$text"!=e.name){const i=e.position.nodeAfter,n="$graveyard"==e.position.root.rootName;for(const e of ff(t,i)){const t=e.getAttribute("uploadId");if(!t)continue;const i=o.loaders.get(t);i&&(n?i.abort():"idle"==i.status&&this._readAndUpload(i,e))}}})}_readAndUpload(t,e){const i=this.editor,n=i.model,o=i.locale.t,s=i.plugins.get(qd),r=i.plugins.get(fu);return n.enqueueChange("transparent",t=>{t.setAttribute("uploadStatus","reading",e)}),t.read().then(()=>{const o=t.upload();if(fo.isSafari){const t=i.editing.mapper.toViewElement(e).getChild(0);i.editing.view.once("render",()=>{if(!t.parent)return;const e=i.editing.view.domConverter.mapViewToDom(t.parent);if(!e)return;const n=e.style.display;e.style.display="none",e._ckHack=e.offsetHeight,e.style.display=n})}return n.enqueueChange("transparent",t=>{t.setAttribute("uploadStatus","uploading",e)}),o}).then(t=>{n.enqueueChange("transparent",i=>{i.setAttributes({uploadStatus:"complete",src:t.default},e),this._parseAndSetSrcsetAttributeOnImage(t,e,i)}),a()}).catch(i=>{if("error"!==t.status&&"aborted"!==t.status)throw i;"error"==t.status&&i&&r.showWarning(i,{title:o("ag"),namespace:"upload"}),a(),n.enqueueChange("transparent",t=>{t.remove(e)})});function a(){n.enqueueChange("transparent",t=>{t.removeAttribute("uploadId",e),t.removeAttribute("uploadStatus",e)}),s.destroyLoader(t)}}_parseAndSetSrcsetAttributeOnImage(t,e,i){let n=0;const o=Object.keys(t).filter(t=>{const e=parseInt(t,10);if(!isNaN(e))return n=Math.max(n,e),!0}).map(e=>`${t[e]} ${e}w`).join(", ");""!=o&&i.setAttribute("srcset",{data:o,width:n},e)}}function ff(t,e){return Array.from(t.model.createRangeOn(e)).filter(t=>t.item.is("image")).map(t=>t.item)}class mf extends ql{static get pluginName(){return"ImageUpload"}static get requires(){return[uf,ef,nf]}}class gf extends Jl{refresh(){const t=this.editor.model,e=sh(t.document.selection.getSelectedBlocks());this.value=!!e&&e.is("paragraph"),this.isEnabled=!!e&&pf(e,t.schema)}execute(t={}){const e=this.editor.model,i=e.document;e.change(n=>{const o=(t.selection||i.selection).getSelectedBlocks();for(const t of o)!t.is("paragraph")&&pf(t,e.schema)&&n.rename(t,"paragraph")})}}function pf(t,e){return e.checkChild(t.parent,"paragraph")&&!e.isObject(t)}class bf extends ql{static get pluginName(){return"Paragraph"}init(){const t=this.editor,e=t.model,i=t.data;t.commands.add("paragraph",new gf(t)),e.schema.register("paragraph",{inheritAllFrom:"$block"}),t.conversion.elementToElement({model:"paragraph",view:"p"}),t.conversion.for("upcast").elementToElement({model:(t,e)=>bf.paragraphLikeElements.has(t.name)?t.isEmpty?null:e.createElement("paragraph"):null,converterPriority:"low"}),i.upcastDispatcher.on("element",(t,e,i)=>{i.consumable.test(e.viewItem,{name:e.viewItem.name})&&kf(e.viewItem,e.modelCursor,i.schema)&&Object.assign(e,wf(e.viewItem,e.modelCursor,i))},{priority:"low"}),i.upcastDispatcher.on("text",(t,e,i)=>{e.modelRange||kf(e.viewItem,e.modelCursor,i.schema)&&Object.assign(e,wf(e.viewItem,e.modelCursor,i))},{priority:"lowest"}),e.document.registerPostFixer(t=>this._autoparagraphEmptyRoots(t)),t.data.on("ready",()=>{e.enqueueChange("transparent",t=>this._autoparagraphEmptyRoots(t))},{priority:"lowest"})}_autoparagraphEmptyRoots(t){const e=this.editor.model;for(const i of e.document.getRootNames()){const n=e.document.getRoot(i);if(n.isEmpty&&"$graveyard"!=n.rootName&&e.schema.checkChild(n,"paragraph"))return t.insertElement("paragraph",n),!0}}}function wf(t,e,i){const n=i.writer.createElement("paragraph");return i.writer.insert(n,e),i.convertItem(t,i.writer.createPositionAt(n,0))}function kf(t,e,i){const n=i.createContext(e);return!!i.checkChild(n,"paragraph")&&!!i.checkChild(n.push("paragraph"),t)}bf.paragraphLikeElements=new Set(["blockquote","dd","div","dt","h1","h2","h3","h4","h5","h6","li","p","td"]);class _f extends Jl{constructor(t,e){super(t),this.modelElements=e}refresh(){const t=sh(this.editor.model.document.selection.getSelectedBlocks());this.value=!!t&&this.modelElements.includes(t.name)&&t.name,this.isEnabled=!!t&&this.modelElements.some(e=>vf(t,e,this.editor.model.schema))}execute(t){const e=this.editor.model,i=e.document,n=t.value;e.change(t=>{const o=Array.from(i.selection.getSelectedBlocks()).filter(t=>vf(t,n,e.schema));for(const e of o)e.is(n)||t.rename(e,n)})}}function vf(t,e,i){return i.checkChild(t.parent,e)&&!i.isObject(t)}class yf extends ql{static get pluginName(){return"HeadingEditing"}constructor(t){super(t),t.config.define("heading",{options:[{model:"paragraph",title:"Paragraph",class:"ck-heading_paragraph"},{model:"heading1",view:"h2",title:"Heading 1",class:"ck-heading_heading1"},{model:"heading2",view:"h3",title:"Heading 2",class:"ck-heading_heading2"},{model:"heading3",view:"h4",title:"Heading 3",class:"ck-heading_heading3"}]})}static get requires(){return[bf]}init(){const t=this.editor,e=t.config.get("heading.options"),i=[];for(const n of e)"paragraph"!==n.model&&(t.model.schema.register(n.model,{inheritAllFrom:"$block"}),t.conversion.elementToElement(n),i.push(n.model));this._addDefaultH1Conversion(t),t.commands.add("heading",new _f(t,i))}afterInit(){const t=this.editor,e=t.commands.get("enter"),i=t.config.get("heading.options");e&&this.listenTo(e,"afterExecute",(e,n)=>{const o=t.model.document.selection.getFirstPosition().parent;i.some(t=>o.is(t.model))&&!o.is("paragraph")&&0===o.childCount&&n.writer.rename(o,"paragraph")})}_addDefaultH1Conversion(t){t.conversion.for("upcast").elementToElement({model:"heading1",view:"h1",converterPriority:di.get("low")+1})}}class xf{constructor(t,e){e&&zn(this,e),t&&this.set(t)}}vi(xf,Hn);i(11);class Af extends ql{init(){const t=this.editor,e=t.t,i=function(t){const e=t.t,i={Paragraph:e("dk"),"Heading 1":e("dl"),"Heading 2":e("dm"),"Heading 3":e("dn"),"Heading 4":e("do"),"Heading 5":e("dp"),"Heading 6":e("dq")};return t.config.get("heading.options").map(t=>{const e=i[t.title];return e&&e!=t.title&&(t.title=e),t})}(t),n=e("l"),o=e("m");t.ui.componentFactory.add("heading",e=>{const s={},r=new yi,a=t.commands.get("heading"),c=t.commands.get("paragraph"),l=[a];for(const t of i){const e={type:"button",model:new xf({label:t.title,class:t.class,withText:!0})};"paragraph"===t.model?(e.model.bind("isOn").to(c,"value"),e.model.set("commandName","paragraph"),l.push(c)):(e.model.bind("isOn").to(a,"value",e=>e===t.model),e.model.set({commandName:"heading",commandValue:t.model})),r.add(e),s[t.model]=t.title}const d=Dl(e);return jl(d,r),d.buttonView.set({isOn:!1,withText:!0,tooltip:o}),d.extendTemplate({attributes:{class:["ck-heading-dropdown"]}}),d.bind("isEnabled").toMany(l,"isEnabled",(...t)=>t.some(t=>t)),d.buttonView.bind("label").to(a,"value",c,"value",(t,e)=>{const i=t||e&&"paragraph";return s[i]?s[i]:n}),this.listenTo(d,"execute",e=>{t.execute(e.source.commandName,e.source.commandValue?{value:e.source.commandValue}:void 0),t.editing.view.focus()}),d})}}function Cf(t){for(const e of t.getChildren())if(e&&e.is("caption"))return e;return null}function Tf(t){const e=t.parent;return"figcaption"==t.name&&e&&"figure"==e.name&&e.hasClass("image")?{name:!0}:null}class Pf extends ql{static get pluginName(){return"ImageCaptionEditing"}init(){const t=this.editor,e=t.editing.view,i=t.model.schema,n=t.data,o=t.editing,s=t.t;i.register("caption",{allowIn:"image",allowContentOf:"$block",isLimit:!0}),t.model.document.registerPostFixer(t=>this._insertMissingModelCaptionElement(t)),t.conversion.for("upcast").elementToElement({view:Tf,model:"caption"});n.downcastDispatcher.on("insert:caption",Sf(t=>t.createContainerElement("figcaption"),!1));const r=function(t,e){return i=>{const n=i.createEditableElement("figcaption");return i.setCustomProperty("imageCaption",!0,n),Rc({view:t,element:n,text:e}),yh(n,i)}}(e,s("z"));o.downcastDispatcher.on("insert:caption",Sf(r)),o.downcastDispatcher.on("insert",this._fixCaptionVisibility(t=>t.item),{priority:"high"}),o.downcastDispatcher.on("remove",this._fixCaptionVisibility(t=>t.position.parent),{priority:"high"}),e.document.registerPostFixer(t=>this._updateCaptionVisibility(t))}_updateCaptionVisibility(t){const e=this.editor.editing.mapper,i=this._lastSelectedCaption;let n;const o=this.editor.model.document.selection,s=o.getSelectedElement();if(s&&s.is("image")){const t=Cf(s);n=e.toViewElement(t)}const r=Ef(o.getFirstPosition().parent);if(r&&(n=e.toViewElement(r)),n)return i?(i===n||(Mf(i,t),this._lastSelectedCaption=n),If(n,t)):(this._lastSelectedCaption=n,If(n,t));if(i){const e=Mf(i,t);return this._lastSelectedCaption=null,e}return!1}_fixCaptionVisibility(t){return(e,i,n)=>{const o=Ef(t(i)),s=this.editor.editing.mapper,r=n.writer;if(o){const t=s.toViewElement(o);t&&(o.childCount?r.removeClass("ck-hidden",t):r.addClass("ck-hidden",t))}}}_insertMissingModelCaptionElement(t){const e=this.editor.model,i=e.document.differ.getChanges(),n=[];for(const t of i)if("insert"==t.type&&"$text"!=t.name){const i=t.position.nodeAfter;if(i.is("image")&&!Cf(i)&&n.push(i),!i.is("image")&&i.childCount)for(const t of e.createRangeIn(i).getItems())t.is("image")&&!Cf(t)&&n.push(t)}for(const e of n)t.appendElement("caption",e);return!!n.length}}function Sf(t,e=!0){return(i,n,o)=>{const s=n.item;if((s.childCount||e)&&Th(s.parent)){if(!o.consumable.consume(n.item,"insert"))return;const e=o.mapper.toViewElement(n.range.start.parent),i=t(o.writer),r=o.writer;s.childCount||r.addClass("ck-hidden",i),function(t,e,i,n){const o=n.writer.createPositionAt(i,"end");n.writer.insert(o,t),n.mapper.bindElements(e,t)}(i,n.item,e,o)}}}function Ef(t){const e=t.getAncestors({includeSelf:!0}).find(t=>"caption"==t.name);return e&&e.parent&&"image"==e.parent.name?e:null}function Mf(t,e){return!t.childCount&&!t.hasClass("ck-hidden")&&(e.addClass("ck-hidden",t),!0)}function If(t,e){return!!t.hasClass("ck-hidden")&&(e.removeClass("ck-hidden",t),!0)}i(71);class Nf extends Jl{constructor(t,e){super(t),this.defaultStyle=!1,this.styles=e.reduce((t,e)=>(t[e.name]=e,e.isDefault&&(this.defaultStyle=e.name),t),{})}refresh(){const t=this.editor.model.document.selection.getSelectedElement();if(this.isEnabled=Th(t),t)if(t.hasAttribute("imageStyle")){const e=t.getAttribute("imageStyle");this.value=!!this.styles[e]&&e}else this.value=this.defaultStyle;else this.value=!1}execute(t){const e=t.value,i=this.editor.model,n=i.document.selection.getSelectedElement();i.change(t=>{this.styles[e].isDefault?t.removeAttribute("imageStyle",n):t.setAttribute("imageStyle",e,n)})}}function Of(t,e){for(const i of e)if(i.name===t)return i}var Rf='',Lf='',Df='',zf='';const jf={full:{name:"full",title:"Full size image",icon:Rf,isDefault:!0},side:{name:"side",title:"Side image",icon:zf,className:"image-style-side"},alignLeft:{name:"alignLeft",title:"Left aligned image",icon:Lf,className:"image-style-align-left"},alignCenter:{name:"alignCenter",title:"Centered image",icon:Df,className:"image-style-align-center"},alignRight:{name:"alignRight",title:"Right aligned image",icon:zf,className:"image-style-align-right"}},Vf={full:Rf,left:Lf,right:zf,center:Df};function Bf(t=[]){return t.map(Ff)}function Ff(t){if("string"==typeof t){const e=t;jf[e]?t=Object.assign({},jf[e]):(console.warn(Object(hi.a)("image-style-not-found: There is no such image style of given name."),{name:e}),t={name:e})}else if(jf[t.name]){const e=jf[t.name],i=Object.assign({},t);for(const n in e)t.hasOwnProperty(n)||(i[n]=e[n]);t=i}return"string"==typeof t.icon&&Vf[t.icon]&&(t.icon=Vf[t.icon]),t}class Hf extends ql{static get pluginName(){return"ImageStyleEditing"}init(){const t=this.editor,e=t.model.schema,i=t.data,n=t.editing;t.config.define("image.styles",["full","side"]);const o=Bf(t.config.get("image.styles"));e.extend("image",{allowAttributes:"imageStyle"});const s=function(t){return(e,i,n)=>{if(!n.consumable.consume(i.item,e.name))return;const o=Of(i.attributeNewValue,t),s=Of(i.attributeOldValue,t),r=n.mapper.toViewElement(i.item),a=n.writer;s&&a.removeClass(s.className,r),o&&a.addClass(o.className,r)}}(o);n.downcastDispatcher.on("attribute:imageStyle:image",s),i.downcastDispatcher.on("attribute:imageStyle:image",s),i.upcastDispatcher.on("element:figure",function(t){const e=t.filter(t=>!t.isDefault);return(t,i,n)=>{if(!i.modelRange)return;const o=i.viewItem,s=sh(i.modelRange.getItems());if(n.schema.checkAttribute(s,"imageStyle"))for(const t of e)n.consumable.consume(o,{classes:t.className})&&n.writer.setAttribute("imageStyle",t.name,s)}}(o),{priority:"low"}),t.commands.add("imageStyle",new Nf(t,o))}}i(73);class Uf extends ql{static get pluginName(){return"ImageStyleUI"}get localizedDefaultStylesTitles(){const t=this.editor.t;return{"Full size image":t("n"),"Side image":t("o"),"Left aligned image":t("p"),"Centered image":t("q"),"Right aligned image":t("r")}}init(){const t=function(t,e){for(const i of t)e[i.title]&&(i.title=e[i.title]);return t}(Bf(this.editor.config.get("image.styles")),this.localizedDefaultStylesTitles);for(const e of t)this._createButton(e)}_createButton(t){const e=this.editor,i=`imageStyle:${t.name}`;e.ui.componentFactory.add(i,i=>{const n=e.commands.get("imageStyle"),o=new El(i);return o.set({label:t.title,icon:t.icon,tooltip:!0,isToggleable:!0}),o.bind("isEnabled").to(n,"isEnabled"),o.bind("isOn").to(n,"value",e=>e===t.name),this.listenTo(o,"execute",()=>{e.execute("imageStyle",{value:t.name}),e.editing.view.focus()}),o})}}class Wf extends ql{static get requires(){return[Wu]}static get pluginName(){return"WidgetToolbarRepository"}init(){const t=this.editor;if(t.plugins.has("BalloonToolbar")){const e=t.plugins.get("BalloonToolbar");this.listenTo(e,"show",e=>{(function(t){const e=t.getSelectedElement();return!(!e||!kh(e))})(t.editing.view.document.selection)&&e.stop()},{priority:"high"})}this._toolbarDefinitions=new Map,this._balloon=this.editor.plugins.get("ContextualBalloon"),this.on("change:isEnabled",()=>{this._updateToolbarsVisibility()}),this.listenTo(t.ui,"update",()=>{this._updateToolbarsVisibility()}),this.listenTo(t.ui.focusTracker,"change:isFocused",()=>{this._updateToolbarsVisibility()},{priority:"low"})}destroy(){super.destroy();for(const t of this._toolbarDefinitions.values())t.view.destroy()}register(t,{ariaLabel:e,items:i,getRelatedElement:n,balloonClassName:o="ck-toolbar-container"}){const s=this.editor,r=s.t,a=new Vl(s.locale);if(a.ariaLabel=e||r("aj"),this._toolbarDefinitions.has(t))throw new hi.b("widget-toolbar-duplicated: Toolbar with the given id was already added.",this,{toolbarId:t});a.fillFromConfig(i,s.ui.componentFactory),this._toolbarDefinitions.set(t,{view:a,getRelatedElement:n,balloonClassName:o})}_updateToolbarsVisibility(){let t=0,e=null,i=null;for(const n of this._toolbarDefinitions.values()){const o=n.getRelatedElement(this.editor.editing.view.document.selection);if(this.isEnabled&&o)if(this.editor.ui.focusTracker.isFocused){const s=o.getAncestors().length;s>t&&(t=s,e=o,i=n)}else this._isToolbarVisible(n)&&this._hideToolbar(n);else this._isToolbarInBalloon(n)&&this._hideToolbar(n)}i&&this._showToolbar(i,e)}_hideToolbar(t){this._balloon.remove(t.view),this.stopListening(this._balloon,"change:visibleView")}_showToolbar(t,e){this._isToolbarVisible(t)?qf(this.editor,e):this._isToolbarInBalloon(t)||(this._balloon.add({view:t.view,position:$f(this.editor,e),balloonClassName:t.balloonClassName}),this.listenTo(this._balloon,"change:visibleView",()=>{for(const t of this._toolbarDefinitions.values())if(this._isToolbarVisible(t)){const e=t.getRelatedElement(this.editor.editing.view.document.selection);qf(this.editor,e)}}))}_isToolbarVisible(t){return this._balloon.visibleView===t.view}_isToolbarInBalloon(t){return this._balloon.hasView(t.view)}}function qf(t,e){const i=t.plugins.get("ContextualBalloon"),n=$f(t,e);i.updatePosition(n)}function $f(t,e){const i=t.editing.view,n=Vu.defaultPositions;return{target:i.domConverter.mapViewToDom(e),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast]}}class Yf extends Jl{constructor(t){super(t),this._childCommands=[]}refresh(){}execute(...t){this._getFirstEnabledCommand().execute(t)}registerChildCommand(t){this._childCommands.push(t),t.on("change:isEnabled",()=>this._checkEnabled()),this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){return this._childCommands.find(t=>t.isEnabled)}}class Gf extends ql{static get pluginName(){return"IndentEditing"}init(){const t=this.editor;t.commands.add("indent",new Yf(t)),t.commands.add("outdent",new Yf(t))}}var Qf='',Kf='';class Jf extends ql{static get pluginName(){return"IndentUI"}init(){const t=this.editor,e=t.locale,i=t.t,n="ltr"==e.uiLanguageDirection?Qf:Kf,o="ltr"==e.uiLanguageDirection?Kf:Qf;this._defineButton("indent",i("u"),n),this._defineButton("outdent",i("v"),o)}_defineButton(t,e,i){const n=this.editor;n.ui.componentFactory.add(t,o=>{const s=n.commands.get(t),r=new El(o);return r.set({label:e,icon:i,tooltip:!0}),r.bind("isOn","isEnabled").to(s,"value","isEnabled"),this.listenTo(r,"execute",()=>{n.execute(t),n.editing.view.focus()}),r})}}class Zf extends Os{constructor(t){super(t),this.domEventType="click"}onDomEvent(t){this.fire(t.type,t)}}i(75);class Xf extends rl{constructor(t,e=[]){super(t);const i=t.t;this.focusTracker=new Ic,this.keystrokes=new yc,this.urlInputView=this._createUrlInput(),this.saveButtonView=this._createButton(i("cf"),Ru,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(i("cg"),Lu,"ck-button-cancel","cancel"),this._manualDecoratorSwitches=this._createManualDecoratorSwitches(e),this.children=this._createFormChildren(e),this._focusables=new Bc,this._focusCycler=new bl({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});const n=["ck","ck-link-form"];e.length&&n.push("ck-link-form_layout-vertical"),this.setTemplate({tag:"form",attributes:{class:n,tabindex:"-1"},children:this.children})}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((t,e)=>(t[e.name]=e.isOn,t),{})}render(){super.render(),Ou({view:this}),[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createUrlInput(){const t=this.locale.t,e=new Iu(this.locale,Nu);return e.label=t("ck"),e.inputView.placeholder="https://example.com",e}_createButton(t,e,i,n){const o=new El(this.locale);return o.set({label:t,icon:e,tooltip:!0}),o.extendTemplate({attributes:{class:i}}),n&&o.delegate("execute").to(this,n),o}_createManualDecoratorSwitches(t){const e=this.createCollection();for(const i of t){const t=new Rl(this.locale);t.set({name:i.id,label:i.label,withText:!0}),t.bind("isOn").to(i,"value"),t.on("execute",()=>{i.set("value",!t.isOn)}),e.add(t)}return e}_createFormChildren(t){const e=this.createCollection();if(e.add(this.urlInputView),t.length){const t=new rl;t.setTemplate({tag:"ul",children:this._manualDecoratorSwitches.map(t=>({tag:"li",children:[t],attributes:{class:["ck","ck-list__item"]}})),attributes:{class:["ck","ck-reset","ck-list"]}}),e.add(t)}return e.add(this.saveButtonView),e.add(this.cancelButtonView),e}}i(77);class tm extends rl{constructor(t){super(t);const e=t.t;this.focusTracker=new Ic,this.keystrokes=new yc,this.previewButtonView=this._createPreviewButton(),this.unlinkButtonView=this._createButton(e("cb"),'',"unlink"),this.editButtonView=this._createButton(e("cc"),'',"edit"),this.set("href"),this._focusables=new Bc,this._focusCycler=new bl({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-link-actions"],tabindex:"-1"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render(),[this.previewButtonView,this.editButtonView,this.unlinkButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createButton(t,e,i){const n=new El(this.locale);return n.set({label:t,icon:e,tooltip:!0}),n.delegate("execute").to(this,i),n}_createPreviewButton(){const t=new El(this.locale),e=this.bindTemplate,i=this.t;return t.set({withText:!0,tooltip:i("cd")}),t.extendTemplate({attributes:{class:["ck","ck-link-actions__preview"],href:e.to("href",t=>t&&iu(t)),target:"_blank",rel:"noopener noreferrer"}}),t.bind("label").to(this,"href",t=>t||i("ce")),t.bind("isEnabled").to(this,"href",t=>!!t),t.template.tag="a",t.template.eventListeners={},t}}class em extends ql{static get requires(){return[Wu]}static get pluginName(){return"LinkUI"}init(){const t=this.editor;t.editing.view.addObserver(Zf),this.actionsView=this._createActionsView(),this.formView=this._createFormView(),this._balloon=t.plugins.get(Wu),this._createToolbarLinkButton(),this._enableUserBalloonInteractions()}destroy(){super.destroy(),this.formView.destroy()}_createActionsView(){const t=this.editor,e=new tm(t.locale),i=t.commands.get("link"),n=t.commands.get("unlink");return e.bind("href").to(i,"value"),e.editButtonView.bind("isEnabled").to(i),e.unlinkButtonView.bind("isEnabled").to(n),this.listenTo(e,"edit",()=>{this._addFormView()}),this.listenTo(e,"unlink",()=>{t.execute("unlink"),this._hideUI()}),e.keystrokes.set("Esc",(t,e)=>{this._hideUI(),e()}),e.keystrokes.set("Ctrl+K",(t,e)=>{this._addFormView(),e()}),e}_createFormView(){const t=this.editor,e=t.commands.get("link"),i=new Xf(t.locale,e.manualDecorators);return i.urlInputView.bind("value").to(e,"value"),i.urlInputView.bind("isReadOnly").to(e,"isEnabled",t=>!t),i.saveButtonView.bind("isEnabled").to(e),this.listenTo(i,"submit",()=>{t.execute("link",i.urlInputView.inputView.element.value,i.getDecoratorSwitchesState()),this._closeFormView()}),this.listenTo(i,"cancel",()=>{this._closeFormView()}),i.keystrokes.set("Esc",(t,e)=>{this._closeFormView(),e()}),i}_createToolbarLinkButton(){const t=this.editor,e=t.commands.get("link"),i=t.t;t.keystrokes.set("Ctrl+K",(t,e)=>{e(),this._showUI(!0)}),t.ui.componentFactory.add("link",t=>{const n=new El(t);return n.isEnabled=!0,n.label=i("bh"),n.icon='',n.keystroke="Ctrl+K",n.tooltip=!0,n.isToggleable=!0,n.bind("isEnabled").to(e,"isEnabled"),n.bind("isOn").to(e,"value",t=>!!t),this.listenTo(n,"execute",()=>this._showUI(!0)),n})}_enableUserBalloonInteractions(){const t=this.editor.editing.view.document;this.listenTo(t,"click",()=>{this._getSelectedLinkElement()&&this._showUI()}),this.editor.keystrokes.set("Tab",(t,e)=>{this._areActionsVisible&&!this.actionsView.focusTracker.isFocused&&(this.actionsView.focus(),e())},{priority:"high"}),this.editor.keystrokes.set("Esc",(t,e)=>{this._isUIVisible&&(this._hideUI(),e())}),Ll({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){this._areActionsInPanel||this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this._isFormInPanel)return;const t=this.editor.commands.get("link");this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this._balloon.visibleView===this.formView&&this.formView.urlInputView.select(),this.formView.urlInputView.inputView.element.value=t.value||""}_closeFormView(){const t=this.editor.commands.get("link");t.restoreManualDecoratorStates(),void 0!==t.value?this._removeFormView():this._hideUI()}_removeFormView(){this._isFormInPanel&&(this.formView.saveButtonView.focus(),this._balloon.remove(this.formView),this.editor.editing.view.focus())}_showUI(t=!1){this._getSelectedLinkElement()?(this._areActionsVisible?this._addFormView():this._addActionsView(),t&&this._balloon.showStack("main")):(this._addActionsView(),t&&this._balloon.showStack("main"),this._addFormView()),this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel)return;const t=this.editor;this.stopListening(t.ui,"update"),this.stopListening(this._balloon,"change:visibleView"),t.editing.view.focus(),this._removeFormView(),this._balloon.remove(this.actionsView)}_startUpdatingUI(){const t=this.editor,e=t.editing.view.document;let i=this._getSelectedLinkElement(),n=s();const o=()=>{const t=this._getSelectedLinkElement(),e=s();i&&!t||!i&&e!==n?this._hideUI():this._isUIVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),i=t,n=e};function s(){return e.selection.focus.getAncestors().reverse().find(t=>t.is("element"))}this.listenTo(t.ui,"update",o),this.listenTo(this._balloon,"change:visibleView",o)}get _isFormInPanel(){return this._balloon.hasView(this.formView)}get _areActionsInPanel(){return this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){return this._balloon.visibleView==this.formView||this._areActionsVisible}_getBalloonPositionData(){const t=this.editor.editing.view,e=t.document,i=this._getSelectedLinkElement();return{target:i?t.domConverter.mapViewToDom(i):t.domConverter.viewRangeToDom(e.selection.getFirstRange())}}_getSelectedLinkElement(){const t=this.editor.editing.view,e=t.document.selection;if(e.isCollapsed)return im(e.getFirstPosition());{const i=e.getFirstRange().getTrimmed(),n=im(i.start),o=im(i.end);return n&&n==o&&t.createRangeIn(n).getTrimmed().isEqual(i)?n:null}}}function im(t){return t.getAncestors().find(t=>{return(e=t).is("attributeElement")&&!!e.getCustomProperty("link");var e})}class nm extends Jl{constructor(t,e){super(t),this.type=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=t.document,i=Array.from(e.selection.getSelectedBlocks()).filter(e=>sm(e,t.schema)),n=!0===this.value;t.change(t=>{if(n){let e=i[i.length-1].nextSibling,n=Number.POSITIVE_INFINITY,o=[];for(;e&&"listItem"==e.name&&0!==e.getAttribute("listIndent");){const t=e.getAttribute("listIndent");t=i;)s>o.getAttribute("listIndent")&&(s=o.getAttribute("listIndent")),o.getAttribute("listIndent")==s&&t[e?"unshift":"push"](o),o=o[e?"previousSibling":"nextSibling"]}}function sm(t,e){return e.checkChild(t.parent,"listItem")&&!e.isObject(t)}class rm extends Jl{constructor(t,e){super(t),this._indentBy="forward"==e?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=t.document;let i=Array.from(e.selection.getSelectedBlocks());t.change(t=>{const e=i[i.length-1];let n=e.nextSibling;for(;n&&"listItem"==n.name&&n.getAttribute("listIndent")>e.getAttribute("listIndent");)i.push(n),n=n.nextSibling;this._indentBy<0&&(i=i.reverse());for(const e of i){const i=e.getAttribute("listIndent")+this._indentBy;i<0?t.rename(e,"paragraph"):t.setAttribute("listIndent",i,e)}})}_checkEnabled(){const t=sh(this.editor.model.document.selection.getSelectedBlocks());if(!t||!t.is("listItem"))return!1;if(this._indentBy>0){const e=t.getAttribute("listIndent"),i=t.getAttribute("listType");let n=t.previousSibling;for(;n&&n.is("listItem")&&n.getAttribute("listIndent")>=e;){if(n.getAttribute("listIndent")==e)return n.getAttribute("listType")==i;n=n.previousSibling}return!1}return!0}}function am(t,e){const i=e.mapper,n=e.writer,o="numbered"==t.getAttribute("listType")?"ol":"ul",s=function(t){const e=t.createContainerElement("li");return e.getFillerOffset=fm,e}(n),r=n.createContainerElement(o,null);return n.insert(n.createPositionAt(r,0),s),i.bindElements(t,s),s}function cm(t,e,i,n){const o=e.parent,s=i.mapper,r=i.writer;let a=s.toViewPosition(n.createPositionBefore(t));const c=hm(t.previousSibling,{sameIndent:!0,smallerIndent:!0,listIndent:t.getAttribute("listIndent")}),l=t.previousSibling;if(c&&c.getAttribute("listIndent")==t.getAttribute("listIndent")){const t=s.toViewElement(c);a=r.breakContainer(r.createPositionAfter(t))}else a=l&&"listItem"==l.name?s.toViewPosition(n.createPositionAt(l,"end")):s.toViewPosition(n.createPositionBefore(t));if(a=dm(a),r.insert(a,o),l&&"listItem"==l.name){const t=s.toViewElement(l),i=r.createRange(r.createPositionAt(t,0),a).getWalker({ignoreElementEnd:!0});for(const t of i)if(t.item.is("li")){const n=r.breakContainer(r.createPositionBefore(t.item)),o=t.item.parent,s=r.createPositionAt(e,"end");lm(r,s.nodeBefore,s.nodeAfter),r.move(r.createRangeOn(o),s),i.position=n}}else{const i=o.nextSibling;if(i&&(i.is("ul")||i.is("ol"))){let n=null;for(const e of i.getChildren()){const i=s.toModelElement(e);if(!(i&&i.getAttribute("listIndent")>t.getAttribute("listIndent")))break;n=e}n&&(r.breakContainer(r.createPositionAfter(n)),r.move(r.createRangeOn(n.parent),r.createPositionAt(e,"end")))}}lm(r,o,o.nextSibling),lm(r,o.previousSibling,o)}function lm(t,e,i){return!e||!i||"ul"!=e.name&&"ol"!=e.name||e.name!=i.name||e.getAttribute("class")!==i.getAttribute("class")?null:t.mergeContainers(t.createPositionAfter(e))}function dm(t){return t.getLastMatchingPosition(t=>t.item.is("uiElement"))}function hm(t,e){const i=!!e.sameIndent,n=!!e.smallerIndent,o=e.listIndent;let s=t;for(;s&&"listItem"==s.name;){const t=s.getAttribute("listIndent");if(i&&o==t||n&&o>t)return s;s=s.previousSibling}return null}function um(t,e,i,n){t.ui.componentFactory.add(e,o=>{const s=t.commands.get(e),r=new El(o);return r.set({label:i,icon:n,tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(s,"value","isEnabled"),r.on("execute",()=>{t.execute(e),t.editing.view.focus()}),r})}function fm(){const t=!this.isEmpty&&("ul"==this.getChild(0).name||"ol"==this.getChild(0).name);return this.isEmpty||t?0:Dn.call(this)}function mm(t){return(e,i,n)=>{const o=n.consumable;if(!o.test(i.item,"insert")||!o.test(i.item,"attribute:listType")||!o.test(i.item,"attribute:listIndent"))return;o.consume(i.item,"insert"),o.consume(i.item,"attribute:listType"),o.consume(i.item,"attribute:listIndent");const s=i.item;cm(s,am(s,n),n,t)}}function gm(t,e,i){if(!i.consumable.consume(e.item,"attribute:listType"))return;const n=i.mapper.toViewElement(e.item),o=i.writer;o.breakContainer(o.createPositionBefore(n)),o.breakContainer(o.createPositionAfter(n));const s=n.parent,r="numbered"==e.attributeNewValue?"ol":"ul";o.rename(r,s)}function pm(t,e,i){const n=i.mapper.toViewElement(e.item).parent,o=i.writer;lm(o,n,n.nextSibling),lm(o,n.previousSibling,n);for(const t of e.item.getChildren())i.consumable.consume(t,"insert")}function bm(t,e,i){if("listItem"!=e.item.name){let t=i.mapper.toViewPosition(e.range.start);const n=i.writer,o=[];for(;("ul"==t.parent.name||"ol"==t.parent.name)&&(t=n.breakContainer(t),"li"==t.parent.name);){const e=t,i=n.createPositionAt(t.parent,"end");if(!e.isEqual(i)){const t=n.remove(n.createRange(e,i));o.push(t)}t=n.createPositionAfter(t.parent)}if(o.length>0){for(let e=0;e0){const e=lm(n,i,i.nextSibling);e&&e.parent==i&&t.offset--}}lm(n,t.nodeBefore,t.nodeAfter)}}}function wm(t,e,i){const n=i.mapper.toViewPosition(e.position),o=n.nodeBefore,s=n.nodeAfter;lm(i.writer,o,s)}function km(t,e,i){if(i.consumable.consume(e.viewItem,{name:!0})){const t=i.writer,n=t.createElement("listItem"),o=function(t){let e=0,i=t.parent;for(;i;){if(i.is("li"))e++;else{const t=i.previousSibling;t&&t.is("li")&&e++}i=i.parent}return e}(e.viewItem);t.setAttribute("listIndent",o,n);const s=e.viewItem.parent&&"ol"==e.viewItem.parent.name?"numbered":"bulleted";t.setAttribute("listType",s,n);const r=i.splitToAllowedParent(n,e.modelCursor);if(!r)return;t.insert(n,r.position);const a=function(t,e,i){const{writer:n,schema:o}=i;let s=n.createPositionAfter(t);for(const r of e)if("ul"==r.name||"ol"==r.name)s=i.convertItem(r,s).modelCursor;else{const e=i.convertItem(r,n.createPositionAt(t,"end")),a=e.modelRange.start.nodeAfter;a&&a.is("element")&&!o.checkChild(t,a.name)&&(t=e.modelCursor.parent.is("listItem")?e.modelCursor.parent:Am(e.modelCursor),s=n.createPositionAfter(t))}return s}(n,e.viewItem.getChildren(),i);e.modelRange=t.createRange(e.modelCursor,a),r.cursorParent?e.modelCursor=t.createPositionAt(r.cursorParent,0):e.modelCursor=e.modelRange.end}}function _m(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){const t=Array.from(e.viewItem.getChildren());for(const e of t){!(e.is("li")||Tm(e))&&e._remove()}}}function vm(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){if(0===e.viewItem.childCount)return;const t=[...e.viewItem.getChildren()];let i=!1,n=!0;for(const e of t)i&&!Tm(e)&&e._remove(),e.is("text")?(n&&(e._data=e.data.replace(/^\s+/,"")),e.nextSibling&&!Tm(e.nextSibling)||(e._data=e.data.replace(/\s+$/,""))):Tm(e)&&(i=!0),n=!1}}function ym(t){return(e,i)=>{if(i.isPhantom)return;const n=i.modelPosition.nodeBefore;if(n&&n.is("listItem")){const e=i.mapper.toViewElement(n),o=e.getAncestors().find(Tm),s=t.createPositionAt(e,0).getWalker();for(const t of s){if("elementStart"==t.type&&t.item.is("li")){i.viewPosition=t.previousPosition;break}if("elementEnd"==t.type&&t.item==o){i.viewPosition=t.nextPosition;break}}}}}function xm(t,[e,i]){let n,o=e.is("documentFragment")?e.getChild(0):e;if(n=i?this.createSelection(i):this.document.selection,o&&o.is("listItem")){const t=n.getFirstPosition();let e=null;if(t.parent.is("listItem")?e=t.parent:t.nodeBefore&&t.nodeBefore.is("listItem")&&(e=t.nodeBefore),e){const t=e.getAttribute("listIndent");if(t>0)for(;o&&o.is("listItem");)o._setAttribute("listIndent",o.getAttribute("listIndent")+t),o=o.nextSibling}}}function Am(t){const e=new wr({startPosition:t});let i;do{i=e.next()}while(!i.value.item.is("listItem"));return i.value.item}function Cm(t,e,i,n,o,s){const r=hm(e.nodeBefore,{sameIndent:!0,smallerIndent:!0,listIndent:t,foo:"b"}),a=o.mapper,c=o.writer,l=r?r.getAttribute("listIndent"):null;let d;if(r)if(l==t){const t=a.toViewElement(r).parent;d=c.createPositionAfter(t)}else{const t=s.createPositionAt(r,"end");d=a.toViewPosition(t)}else d=i;d=dm(d);for(const t of[...n.getChildren()])Tm(t)&&(d=c.move(c.createRangeOn(t),d).end,lm(c,t,t.nextSibling),lm(c,t.previousSibling,t))}function Tm(t){return t.is("ol")||t.is("ul")}class Pm extends ql{static get pluginName(){return"ListEditing"}static get requires(){return[bf]}init(){const t=this.editor;t.model.schema.register("listItem",{inheritAllFrom:"$block",allowAttributes:["listType","listIndent"]});const e=t.data,i=t.editing;var n;t.model.document.registerPostFixer(e=>function(t,e){const i=t.document.differ.getChanges(),n=new Map;let o=!1;for(const n of i)if("insert"==n.type&&"listItem"==n.name)s(n.position);else if("insert"==n.type&&"listItem"!=n.name){if("$text"!=n.name){const i=n.position.nodeAfter;i.hasAttribute("listIndent")&&(e.removeAttribute("listIndent",i),o=!0),i.hasAttribute("listType")&&(e.removeAttribute("listType",i),o=!0);for(const e of Array.from(t.createRangeIn(i)).filter(t=>t.item.is("listItem")))s(e.previousPosition)}s(n.position.getShiftedBy(n.length))}else"remove"==n.type&&"listItem"==n.name?s(n.position):("attribute"==n.type&&"listIndent"==n.attributeKey||"attribute"==n.type&&"listType"==n.attributeKey)&&s(n.range.start);for(const t of n.values())r(t),a(t);return o;function s(t){const e=t.nodeBefore;if(e&&e.is("listItem")){let i=e;if(n.has(i))return;for(;i.previousSibling&&i.previousSibling.is("listItem");)if(i=i.previousSibling,n.has(i))return;n.set(t.nodeBefore,i)}else{const e=t.nodeAfter;e&&e.is("listItem")&&n.set(e,e)}}function r(t){let i=0,n=null;for(;t&&t.is("listItem");){const s=t.getAttribute("listIndent");if(s>i){let r;null===n?(n=s-i,r=i):(n>s&&(n=s),r=s-n),e.setAttribute("listIndent",r,t),o=!0}else n=null,i=t.getAttribute("listIndent")+1;t=t.nextSibling}}function a(t){let i=[],n=null;for(;t&&t.is("listItem");){const s=t.getAttribute("listIndent");if(n&&n.getAttribute("listIndent")>s&&(i=i.slice(0,s+1)),0!=s)if(i[s]){const n=i[s];t.getAttribute("listType")!=n&&(e.setAttribute("listType",n,t),o=!0)}else i[s]=t.getAttribute("listType");n=t,t=t.nextSibling}}}(t.model,e)),i.mapper.registerViewToModelLength("li",Sm),e.mapper.registerViewToModelLength("li",Sm),i.mapper.on("modelToViewPosition",ym(i.view)),i.mapper.on("viewToModelPosition",(n=t.model,(t,e)=>{const i=e.viewPosition,o=i.parent,s=e.mapper;if("ul"==o.name||"ol"==o.name){if(i.isAtEnd){const t=s.toModelElement(i.nodeBefore),o=s.getModelLength(i.nodeBefore);e.modelPosition=n.createPositionBefore(t).getShiftedBy(o)}else{const t=s.toModelElement(i.nodeAfter);e.modelPosition=n.createPositionBefore(t)}t.stop()}else if("li"==o.name&&i.nodeBefore&&("ul"==i.nodeBefore.name||"ol"==i.nodeBefore.name)){const r=s.toModelElement(o);let a=1,c=i.nodeBefore;for(;c&&Tm(c);)a+=s.getModelLength(c),c=c.previousSibling;e.modelPosition=n.createPositionBefore(r).getShiftedBy(a),t.stop()}})),e.mapper.on("modelToViewPosition",ym(i.view)),t.conversion.for("editingDowncast").add(e=>{e.on("insert",bm,{priority:"high"}),e.on("insert:listItem",mm(t.model)),e.on("attribute:listType:listItem",gm,{priority:"high"}),e.on("attribute:listType:listItem",pm,{priority:"low"}),e.on("attribute:listIndent:listItem",function(t){return(e,i,n)=>{if(!n.consumable.consume(i.item,"attribute:listIndent"))return;const o=n.mapper.toViewElement(i.item),s=n.writer;s.breakContainer(s.createPositionBefore(o)),s.breakContainer(s.createPositionAfter(o));const r=o.parent,a=r.previousSibling,c=s.createRangeOn(r);s.remove(c),a&&a.nextSibling&&lm(s,a,a.nextSibling),Cm(i.attributeOldValue+1,i.range.start,c.start,o,n,t),cm(i.item,o,n,t);for(const t of i.item.getChildren())n.consumable.consume(t,"insert")}}(t.model)),e.on("remove:listItem",function(t){return(e,i,n)=>{const o=n.mapper.toViewPosition(i.position).getLastMatchingPosition(t=>!t.item.is("li")).nodeAfter,s=n.writer;s.breakContainer(s.createPositionBefore(o)),s.breakContainer(s.createPositionAfter(o));const r=o.parent,a=r.previousSibling,c=s.createRangeOn(r),l=s.remove(c);a&&a.nextSibling&&lm(s,a,a.nextSibling),Cm(n.mapper.toModelElement(o).getAttribute("listIndent")+1,i.position,c.start,o,n,t);for(const t of s.createRangeIn(l).getItems())n.mapper.unbindViewElement(t);e.stop()}}(t.model)),e.on("remove",wm,{priority:"low"})}),t.conversion.for("dataDowncast").add(e=>{e.on("insert",bm,{priority:"high"}),e.on("insert:listItem",mm(t.model))}),t.conversion.for("upcast").add(t=>{t.on("element:ul",_m,{priority:"high"}),t.on("element:ol",_m,{priority:"high"}),t.on("element:li",vm,{priority:"high"}),t.on("element:li",km)}),t.model.on("insertContent",xm,{priority:"high"}),t.commands.add("numberedList",new nm(t,"numbered")),t.commands.add("bulletedList",new nm(t,"bulleted")),t.commands.add("indentList",new rm(t,"forward")),t.commands.add("outdentList",new rm(t,"backward"));const o=i.view.document;this.listenTo(o,"enter",(t,e)=>{const i=this.editor.model.document,n=i.selection.getLastPosition().parent;i.selection.isCollapsed&&"listItem"==n.name&&n.isEmpty&&(this.editor.execute("outdentList"),e.preventDefault(),t.stop())}),this.listenTo(o,"delete",(t,e)=>{if("backward"!==e.direction)return;const i=this.editor.model.document.selection;if(!i.isCollapsed)return;const n=i.getFirstPosition();if(!n.isAtStart)return;const o=n.parent;"listItem"===o.name&&(o.previousSibling&&"listItem"===o.previousSibling.name||(this.editor.execute("outdentList"),e.preventDefault(),t.stop()))},{priority:"high"});const s=t=>(e,i)=>{this.editor.commands.get(t).isEnabled&&(this.editor.execute(t),i())};t.keystrokes.set("Tab",s("indentList")),t.keystrokes.set("Shift+Tab",s("outdentList"))}afterInit(){const t=this.editor.commands,e=t.get("indent"),i=t.get("outdent");e&&e.registerChildCommand(t.get("indentList")),i&&i.registerChildCommand(t.get("outdentList"))}}function Sm(t){let e=1;for(const i of t.getChildren())if("ul"==i.name||"ol"==i.name)for(const t of i.getChildren())e+=Sm(t);return e}class Em extends ql{init(){const t=this.editor.t;um(this.editor,"numberedList",t("w"),''),um(this.editor,"bulletedList",t("x"),'')}}function Mm(t,e){return t=>{t.on("attribute:url:media",i)};function i(i,n,o){if(!o.consumable.consume(n.item,i.name))return;const s=n.attributeNewValue,r=o.writer,a=o.mapper.toViewElement(n.item);r.remove(r.createRangeIn(a));const c=t.getMediaViewElement(r,s,e);r.insert(r.createPositionAt(a,0),c)}}function Im(t,e,i,n){const o=t.createContainerElement("figure",{class:"media"});return o.getFillerOffset=Rm,t.insert(t.createPositionAt(o,0),e.getMediaViewElement(t,i,n)),o}function Nm(t){const e=t.getSelectedElement();return e&&e.is("media")?e:null}function Om(t,e,i){t.change(n=>{const o=n.createElement("media",{url:e});t.insertContent(o,i),n.setSelection(o,"on")})}function Rm(){return null}class Lm extends Jl{refresh(){const t=this.editor.model,e=t.document.selection,i=t.schema,n=e.getFirstPosition(),o=Nm(e);let s=n.parent;s!=s.root&&(s=s.parent),this.value=o?o.getAttribute("url"):null,this.isEnabled=i.checkChild(s,"media")}execute(t){const e=this.editor.model,i=e.document.selection,n=Nm(i);if(n)e.change(e=>{e.setAttribute("url",t,n)});else{const n=xh(i,e);Om(e,t,n)}}}class Dm{constructor(t,e){const i=e.providers,n=e.extraProviders||[],o=new Set(e.removeProviders),s=i.concat(n).filter(t=>{const e=t.name;return e?!o.has(e):(console.warn(Object(hi.a)("media-embed-no-provider-name: The configured media provider has no name and cannot be used."),{provider:t}),!1)});this.locale=t,this.providerDefinitions=s}hasMedia(t){return!!this._getMedia(t)}getMediaViewElement(t,e,i){return this._getMedia(e).getViewElement(t,i)}_getMedia(t){if(!t)return new zm(this.locale);t=t.trim();for(const e of this.providerDefinitions){const i=e.html;let n=e.url;Array.isArray(n)||(n=[n]);for(const e of n){const n=this._getUrlMatches(t,e);if(n)return new zm(this.locale,t,n,i)}}return null}_getUrlMatches(t,e){let i=t.match(e);if(i)return i;let n=t.replace(/^https?:\/\//,"");return i=n.match(e),i||(n=n.replace(/^www\./,""),i=n.match(e),i||null)}}class zm{constructor(t,e,i,n){this.url=this._getValidUrl(e),this._t=t.t,this._match=i,this._previewRenderer=n}getViewElement(t,e){const i={};if(e.renderForEditingView||e.renderMediaPreview&&this.url&&this._previewRenderer){this.url&&(i["data-oembed-url"]=this.url),e.renderForEditingView&&(i.class="ck-media__wrapper");const n=this._getPreviewHtml(e);return t.createUIElement("div",i,(function(t){const e=this.toDomElement(t);return e.innerHTML=n,e}))}return this.url&&(i.url=this.url),t.createEmptyElement("oembed",i)}_getPreviewHtml(t){return this._previewRenderer?this._previewRenderer(this._match):this.url&&t.renderForEditingView?this._getPlaceholderHtml():""}_getPlaceholderHtml(){const t=new Sl,e=new Pl;return t.text=this._t("Open media in new tab"),e.content='',e.viewBox="0 0 64 42",new Fc({tag:"div",attributes:{class:"ck ck-reset_all ck-media__placeholder"},children:[{tag:"div",attributes:{class:"ck-media__placeholder__icon"},children:[e]},{tag:"a",attributes:{class:"ck-media__placeholder__url",target:"_blank",rel:"noopener noreferrer",href:this.url},children:[{tag:"span",attributes:{class:"ck-media__placeholder__url__text"},children:[this.url]},t]}]}).render().outerHTML}_getValidUrl(t){return t?t.match(/^https?/)?t:"https://"+t:null}}i(79);class jm extends ql{static get pluginName(){return"MediaEmbedEditing"}constructor(t){super(t),t.config.define("mediaEmbed",{providers:[{name:"dailymotion",url:/^dailymotion\.com\/video\/(\w+)/,html:t=>'
'+`
'},{name:"spotify",url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:t=>'
'+`
'},{name:"youtube",url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)/,/^youtube\.com\/embed\/([\w-]+)/,/^youtu\.be\/([\w-]+)/],html:t=>'
'+`
'},{name:"vimeo",url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:t=>'
'+`
'},{name:"instagram",url:/^instagram\.com\/p\/(\w+)/},{name:"twitter",url:/^twitter\.com/},{name:"googleMaps",url:/^google\.com\/maps/},{name:"flickr",url:/^flickr\.com/},{name:"facebook",url:/^facebook\.com/}]}),this.registry=new Dm(t.locale,t.config.get("mediaEmbed"))}init(){const t=this.editor,e=t.model.schema,i=t.t,n=t.conversion,o=t.config.get("mediaEmbed.previewsInData"),s=this.registry;t.commands.add("mediaEmbed",new Lm(t)),e.register("media",{isObject:!0,isBlock:!0,allowWhere:"$block",allowAttributes:["url"]}),n.for("dataDowncast").elementToElement({model:"media",view:(t,e)=>{const i=t.getAttribute("url");return Im(e,s,i,{renderMediaPreview:i&&o})}}),n.for("dataDowncast").add(Mm(s,{renderMediaPreview:o})),n.for("editingDowncast").elementToElement({model:"media",view:(t,e)=>{const n=t.getAttribute("url"),o=Im(e,s,n,{renderForEditingView:!0});return r=o,a=e,c=i("ah"),a.setCustomProperty("media",!0,r),_h(r,a,{label:c});var r,a,c}}),n.for("editingDowncast").add(Mm(s,{renderForEditingView:!0})),n.for("upcast").elementToElement({view:{name:"oembed",attributes:{url:!0}},model:(t,e)=>{const i=t.getAttribute("url");if(s.hasMedia(i))return e.createElement("media",{url:i})}}).elementToElement({view:{name:"div",attributes:{"data-oembed-url":!0}},model:(t,e)=>{const i=t.getAttribute("data-oembed-url");if(s.hasMedia(i))return e.createElement("media",{url:i})}})}}const Vm=/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]+$/;class Bm extends ql{static get requires(){return[Kl,Fd]}static get pluginName(){return"AutoMediaEmbed"}constructor(t){super(t),this._timeoutId=null,this._positionToInsert=null}init(){const t=this.editor,e=t.model.document;this.listenTo(t.plugins.get(Kl),"inputTransformation",()=>{const t=e.selection.getFirstRange(),i=sc.fromPosition(t.start);i.stickiness="toPrevious";const n=sc.fromPosition(t.end);n.stickiness="toNext",e.once("change:data",()=>{this._embedMediaBetweenPositions(i,n),i.detach(),n.detach()},{priority:"high"})}),t.commands.get("undo").on("execute",()=>{this._timeoutId&&(ts.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:"high"})}_embedMediaBetweenPositions(t,e){const i=this.editor,n=i.plugins.get(jm).registry,o=new Nr(t,e),s=o.getWalker({ignoreElementEnd:!0});let r="";for(const t of s)t.item.is("textProxy")&&(r+=t.item.data);if(r=r.trim(),!r.match(Vm))return;if(!n.hasMedia(r))return;i.commands.get("mediaEmbed").isEnabled&&(this._positionToInsert=sc.fromPosition(t),this._timeoutId=ts.window.setTimeout(()=>{i.model.change(t=>{let e;this._timeoutId=null,t.remove(o),"$graveyard"!==this._positionToInsert.root.rootName&&(e=this._positionToInsert),Om(i.model,r,e),this._positionToInsert.detach(),this._positionToInsert=null})},100))}}i(81);class Fm extends rl{constructor(t,e){super(e);const i=e.t;this.focusTracker=new Ic,this.keystrokes=new yc,this.urlInputView=this._createUrlInput(),this.saveButtonView=this._createButton(i("cf"),Ru,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(i("cg"),Lu,"ck-button-cancel","cancel"),this._focusables=new Bc,this._focusCycler=new bl({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this._validators=t,this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-form"],tabindex:"-1"},children:[this.urlInputView,this.saveButtonView,this.cancelButtonView]})}render(){super.render(),Ou({view:this}),[this.urlInputView,this.saveButtonView,this.cancelButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)}),this.keystrokes.listenTo(this.element);const t=t=>t.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t),this.listenTo(this.urlInputView.element,"selectstart",(t,e)=>{e.stopPropagation()},{priority:"high"})}focus(){this._focusCycler.focusFirst()}get url(){return this.urlInputView.inputView.element.value.trim()}set url(t){this.urlInputView.inputView.element.value=t.trim()}isValid(){this.resetFormStatus();for(const t of this._validators){const e=t(this);if(e)return this.urlInputView.errorText=e,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null,this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){const t=this.locale.t,e=new Iu(this.locale,Nu),i=e.inputView;return this._urlInputViewInfoDefault=t("ch"),this._urlInputViewInfoTip=t("ci"),e.label=t("cj"),e.infoText=this._urlInputViewInfoDefault,i.placeholder="https://example.com",i.on("input",()=>{e.infoText=i.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault}),e}_createButton(t,e,i,n){const o=new El(this.locale);return o.set({label:t,icon:e,tooltip:!0}),o.extendTemplate({attributes:{class:i}}),n&&o.delegate("execute").to(this,n),o}}class Hm extends ql{static get requires(){return[jm]}static get pluginName(){return"MediaEmbedUI"}init(){const t=this.editor,e=t.commands.get("mediaEmbed"),i=t.plugins.get(jm).registry;this.form=new Fm(function(t,e){return[e=>{if(!e.url.length)return t("am")},i=>{if(!e.hasMedia(i.url))return t("an")}]}(t.t,i),t.locale),t.ui.componentFactory.add("mediaEmbed",i=>{const n=Dl(i);return this._setUpDropdown(n,this.form,e,t),this._setUpForm(this.form,n,e),n})}_setUpDropdown(t,e,i){const n=this.editor,o=n.t,s=t.buttonView;function r(){n.editing.view.focus(),t.isOpen=!1}t.bind("isEnabled").to(i),t.panelView.children.add(e),s.set({label:o("al"),icon:'',tooltip:!0}),s.on("open",()=>{e.url=i.value||"",e.urlInputView.select(),e.focus()},{priority:"low"}),t.on("submit",()=>{e.isValid()&&(n.execute("mediaEmbed",e.url),r())}),t.on("change:isOpen",()=>e.resetFormStatus()),t.on("cancel",()=>r())}_setUpForm(t,e,i){t.delegate("submit","cancel").to(e),t.urlInputView.bind("value").to(i,"value"),t.urlInputView.bind("isReadOnly").to(i,"isEnabled",t=>!t),t.saveButtonView.bind("isEnabled").to(i)}}i(83);function Um(t,e){if(!t.childCount)return;const i=new lf,n=function(t,e){const i=e.createRangeIn(t),n=new Di({name:/^p|h\d+$/,styles:{"mso-list":/.*/}}),o=[];for(const t of i)if("elementStart"===t.type&&n.match(t.item)){const e=Wm(t.item);o.push({element:t.item,id:e.id,order:e.order,indent:e.indent})}return o}(t,i);if(!n.length)return;let o=null;n.forEach((t,s)=>{if(!o||function(t,e){if(t.id!==e.id)return!0;const i=e.element.previousSibling;if(!i)return!0;return n=i,!(n.is("ol")||n.is("ul"));var n}(n[s-1],t)){const n=function(t,e){const i=new RegExp(`@list l${t.id}:level${t.indent}\\s*({[^}]*)`,"gi"),n=/mso-level-number-format:([^;]*);/gi,o=i.exec(e);let s="decimal";if(o&&o[1]){const t=n.exec(o[1]);t&&t[1]&&(s=t[1].trim())}return{type:"bullet"!==s&&"image"!==s?"ol":"ul",style:s}}(t,e);o=function(t,e,i){const n=new On(t.type),o=e.parent.getChildIndex(e);return i.insertChild(o,n,e.parent),n}(n,t.element,i)}const r=function(t,e){return function(t,e){const i=new Di({name:"span",styles:{"mso-list":"Ignore"}}),n=e.createRangeIn(t);for(const t of n)"elementStart"===t.type&&i.match(t.item)&&e.remove(t.item)}(t,e),e.rename("li",t)}(t.element,i);i.appendChild(r,o)})}function Wm(t){const e={},i=t.getStyle("mso-list");if(i){const t=i.match(/(^|\s+)l(\d+)/i),n=i.match(/\s*lfo(\d+)/i),o=i.match(/\s*level(\d+)/i);t&&n&&o&&(e.id=t[2],e.order=n[1],e.indent=o[1])}return e}const qm=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;class $m{isActive(t){return qm.test(t)}execute(t){const e=new lf;!function(t,e){for(const i of t.getChildren())if(i.is("b")&&"normal"===i.getStyle("font-weight")){const n=t.getChildIndex(i);e.remove(i),e.insertChild(n,i.getChildren(),t)}}(t.content,e),function(t,e){for(const i of e.createRangeIn(t)){const t=i.item;if(t.is("li")){const i=t.getChild(0);i.is("p")&&e.unwrapElement(i)}}}(t.content,e)}}function Ym(t){return t.replace(/(\s+)<\/span>/g,(t,e)=>1===e.length?" ":Array(e.length+1).join("  ").substr(0,e.length))}function Gm(t){const e=new DOMParser,i=function(t){return Ym(Ym(t)).replace(/([\s]*?)[\r\n]+(\s*<\/span>)/g,"$1$2").replace(/<\/span>/g,"").replace(/ <\//g," <\/o:p>/g," ").replace(/( |\u00A0)<\/o:p>/g,"").replace(/>(\s*[\r\n]\s*)<")}(function(t){const e=t.match(/<\/body>(.*?)(<\/html>|$)/);e&&e[1]&&(t=t.slice(0,e.index)+t.slice(e.index).replace(e[1],""));return t}(t=t.replace(/

abc

\n\t\t\t//\n\t\t\tif ( isAttribute && this._wrapAttributeElement( wrapElement, child ) ) {\n\t\t\t\twrapPositions.push( new Position( parent, i ) );\n\t\t\t}\n\t\t\t//\n\t\t\t// Wrap the child if it is not an attribute element or if it is an attribute element that should be inside\n\t\t\t// `wrapElement` (due to priority).\n\t\t\t//\n\t\t\t//

abc

-->

abc

\n\t\t\t//

abc

-->

abc

\n\t\t\t//\n\t\t\telse if ( isText || isEmpty || isUI || ( isAttribute && shouldABeOutsideB( wrapElement, child ) ) ) {\n\t\t\t\t// Clone attribute.\n\t\t\t\tconst newAttribute = wrapElement._clone();\n\n\t\t\t\t// Wrap current node with new attribute.\n\t\t\t\tchild._remove();\n\t\t\t\tnewAttribute._appendChild( child );\n\n\t\t\t\tparent._insertChild( i, newAttribute );\n\t\t\t\tthis._addToClonedElementsGroup( newAttribute );\n\n\t\t\t\twrapPositions.push( new Position( parent, i ) );\n\t\t\t}\n\t\t\t//\n\t\t\t// If other nested attribute is found and it wasn't wrapped (see above), continue wrapping inside it.\n\t\t\t//\n\t\t\t//

abc

-->

abc

\n\t\t\t//\n\t\t\telse if ( isAttribute ) {\n\t\t\t\tthis._wrapChildren( child, 0, child.childCount, wrapElement );\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\n\t\t// Merge at each wrap.\n\t\tlet offsetChange = 0;\n\n\t\tfor ( const position of wrapPositions ) {\n\t\t\tposition.offset -= offsetChange;\n\n\t\t\t// Do not merge with elements outside selected children.\n\t\t\tif ( position.offset == startOffset ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newPosition = this.mergeAttributes( position );\n\n\t\t\t// If nodes were merged - other merge offsets will change.\n\t\t\tif ( !newPosition.isEqual( position ) ) {\n\t\t\t\toffsetChange++;\n\t\t\t\tendOffset--;\n\t\t\t}\n\t\t}\n\n\t\treturn Range._createFromParentsAndOffsets( parent, startOffset, parent, endOffset );\n\t}\n\n\t/**\n\t * Unwraps children from provided `unwrapElement`. Only children contained in `parent` element between\n\t * `startOffset` and `endOffset` will be unwrapped.\n\t *\n\t * @private\n\t * @param {module:engine/view/element~Element} parent\n\t * @param {Number} startOffset\n\t * @param {Number} endOffset\n\t * @param {module:engine/view/element~Element} unwrapElement\n\t */\n\t_unwrapChildren( parent, startOffset, endOffset, unwrapElement ) {\n\t\tlet i = startOffset;\n\t\tconst unwrapPositions = [];\n\n\t\t// Iterate over each element between provided offsets inside parent.\n\t\t// We don't use tree walker or range iterator because we will be removing and merging potentially multiple nodes,\n\t\t// so it could get messy. It is safer to it manually in this case.\n\t\twhile ( i < endOffset ) {\n\t\t\tconst child = parent.getChild( i );\n\n\t\t\t// Skip all text nodes. There should be no container element's here either.\n\t\t\tif ( !child.is( 'attributeElement' ) ) {\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// (In all examples, assume that `unwrapElement` is `` element.)\n\t\t\t//\n\t\t\t// If the child is similar to the given attribute element, unwrap it - it will be completely removed.\n\t\t\t//\n\t\t\t//

abcxyz

-->

abcxyz

\n\t\t\t//\n\t\t\tif ( child.isSimilar( unwrapElement ) ) {\n\t\t\t\tconst unwrapped = child.getChildren();\n\t\t\t\tconst count = child.childCount;\n\n\t\t\t\t// Replace wrapper element with its children\n\t\t\t\tchild._remove();\n\t\t\t\tparent._insertChild( i, unwrapped );\n\n\t\t\t\tthis._removeFromClonedElementsGroup( child );\n\n\t\t\t\t// Save start and end position of moved items.\n\t\t\t\tunwrapPositions.push(\n\t\t\t\t\tnew Position( parent, i ),\n\t\t\t\t\tnew Position( parent, i + count )\n\t\t\t\t);\n\n\t\t\t\t// Skip elements that were unwrapped. Assuming there won't be another element to unwrap in child elements.\n\t\t\t\ti += count;\n\t\t\t\tendOffset += count - 1;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// If the child is not similar but is an attribute element, try partial unwrapping - remove the same attributes/styles/classes.\n\t\t\t// Partial unwrapping will happen only if the elements have the same name.\n\t\t\t//\n\t\t\t//

abcxyz

-->

abcxyz

\n\t\t\t//

abcxyz

-->

abcxyz

\n\t\t\t//\n\t\t\tif ( this._unwrapAttributeElement( unwrapElement, child ) ) {\n\t\t\t\tunwrapPositions.push(\n\t\t\t\t\tnew Position( parent, i ),\n\t\t\t\t\tnew Position( parent, i + 1 )\n\t\t\t\t);\n\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// If other nested attribute is found, look through it's children for elements to unwrap.\n\t\t\t//\n\t\t\t//

abc

-->

abc

\n\t\t\t//\n\t\t\tthis._unwrapChildren( child, 0, child.childCount, unwrapElement );\n\n\t\t\ti++;\n\t\t}\n\n\t\t// Merge at each unwrap.\n\t\tlet offsetChange = 0;\n\n\t\tfor ( const position of unwrapPositions ) {\n\t\t\tposition.offset -= offsetChange;\n\n\t\t\t// Do not merge with elements outside selected children.\n\t\t\tif ( position.offset == startOffset || position.offset == endOffset ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newPosition = this.mergeAttributes( position );\n\n\t\t\t// If nodes were merged - other merge offsets will change.\n\t\t\tif ( !newPosition.isEqual( position ) ) {\n\t\t\t\toffsetChange++;\n\t\t\t\tendOffset--;\n\t\t\t}\n\t\t}\n\n\t\treturn Range._createFromParentsAndOffsets( parent, startOffset, parent, endOffset );\n\t}\n\n\t/**\n\t * Helper function for `view.writer.wrap`. Wraps range with provided attribute element.\n\t * This method will also merge newly added attribute element with its siblings whenever possible.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n\t * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n\t *\n\t * @private\n\t * @param {module:engine/view/range~Range} range\n\t * @param {module:engine/view/attributeelement~AttributeElement} attribute\n\t * @returns {module:engine/view/range~Range} New range after wrapping, spanning over wrapping attribute element.\n\t */\n\t_wrapRange( range, attribute ) {\n\t\t// Break attributes at range start and end.\n\t\tconst { start: breakStart, end: breakEnd } = this._breakAttributesRange( range, true );\n\t\tconst parentContainer = breakStart.parent;\n\n\t\t// Wrap all children with attribute.\n\t\tconst newRange = this._wrapChildren( parentContainer, breakStart.offset, breakEnd.offset, attribute );\n\n\t\t// Merge attributes at the both ends and return a new range.\n\t\tconst start = this.mergeAttributes( newRange.start );\n\n\t\t// If start position was merged - move end position back.\n\t\tif ( !start.isEqual( newRange.start ) ) {\n\t\t\tnewRange.end.offset--;\n\t\t}\n\t\tconst end = this.mergeAttributes( newRange.end );\n\n\t\treturn new Range( start, end );\n\t}\n\n\t/**\n\t * Helper function for {@link #wrap}. Wraps position with provided attribute element.\n\t * This method will also merge newly added attribute element with its siblings whenever possible.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n\t * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n\t *\n\t * @private\n\t * @param {module:engine/view/position~Position} position\n\t * @param {module:engine/view/attributeelement~AttributeElement} attribute\n\t * @returns {module:engine/view/position~Position} New position after wrapping.\n\t */\n\t_wrapPosition( position, attribute ) {\n\t\t// Return same position when trying to wrap with attribute similar to position parent.\n\t\tif ( attribute.isSimilar( position.parent ) ) {\n\t\t\treturn movePositionToTextNode( position.clone() );\n\t\t}\n\n\t\t// When position is inside text node - break it and place new position between two text nodes.\n\t\tif ( position.parent.is( 'text' ) ) {\n\t\t\tposition = breakTextNode( position );\n\t\t}\n\n\t\t// Create fake element that will represent position, and will not be merged with other attributes.\n\t\tconst fakePosition = this.createAttributeElement();\n\t\tfakePosition._priority = Number.POSITIVE_INFINITY;\n\t\tfakePosition.isSimilar = () => false;\n\n\t\t// Insert fake element in position location.\n\t\tposition.parent._insertChild( position.offset, fakePosition );\n\n\t\t// Range around inserted fake attribute element.\n\t\tconst wrapRange = new Range( position, position.getShiftedBy( 1 ) );\n\n\t\t// Wrap fake element with attribute (it will also merge if possible).\n\t\tthis.wrap( wrapRange, attribute );\n\n\t\t// Remove fake element and place new position there.\n\t\tconst newPosition = new Position( fakePosition.parent, fakePosition.index );\n\t\tfakePosition._remove();\n\n\t\t// If position is placed between text nodes - merge them and return position inside.\n\t\tconst nodeBefore = newPosition.nodeBefore;\n\t\tconst nodeAfter = newPosition.nodeAfter;\n\n\t\tif ( nodeBefore instanceof Text && nodeAfter instanceof Text ) {\n\t\t\treturn mergeTextNodes( nodeBefore, nodeAfter );\n\t\t}\n\n\t\t// If position is next to text node - move position inside.\n\t\treturn movePositionToTextNode( newPosition );\n\t}\n\n\t/**\n\t * \tWraps one {@link module:engine/view/attributeelement~AttributeElement AttributeElement} into another by\n\t * \tmerging them if possible. When merging is possible - all attributes, styles and classes are moved from wrapper\n\t * \telement to element being wrapped.\n\t *\n\t * \t@private\n\t * \t@param {module:engine/view/attributeelement~AttributeElement} wrapper Wrapper AttributeElement.\n\t * \t@param {module:engine/view/attributeelement~AttributeElement} toWrap AttributeElement to wrap using wrapper element.\n\t * \t@returns {Boolean} Returns `true` if elements are merged.\n\t */\n\t_wrapAttributeElement( wrapper, toWrap ) {\n\t\tif ( !canBeJoined( wrapper, toWrap ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Can't merge if name or priority differs.\n\t\tif ( wrapper.name !== toWrap.name || wrapper.priority !== toWrap.priority ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if attributes can be merged.\n\t\tfor ( const key of wrapper.getAttributeKeys() ) {\n\t\t\t// Classes and styles should be checked separately.\n\t\t\tif ( key === 'class' || key === 'style' ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If some attributes are different we cannot wrap.\n\t\t\tif ( toWrap.hasAttribute( key ) && toWrap.getAttribute( key ) !== wrapper.getAttribute( key ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// Check if styles can be merged.\n\t\tfor ( const key of wrapper.getStyleNames() ) {\n\t\t\tif ( toWrap.hasStyle( key ) && toWrap.getStyle( key ) !== wrapper.getStyle( key ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// Move all attributes/classes/styles from wrapper to wrapped AttributeElement.\n\t\tfor ( const key of wrapper.getAttributeKeys() ) {\n\t\t\t// Classes and styles should be checked separately.\n\t\t\tif ( key === 'class' || key === 'style' ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Move only these attributes that are not present - other are similar.\n\t\t\tif ( !toWrap.hasAttribute( key ) ) {\n\t\t\t\tthis.setAttribute( key, wrapper.getAttribute( key ), toWrap );\n\t\t\t}\n\t\t}\n\n\t\tfor ( const key of wrapper.getStyleNames() ) {\n\t\t\tif ( !toWrap.hasStyle( key ) ) {\n\t\t\t\tthis.setStyle( key, wrapper.getStyle( key ), toWrap );\n\t\t\t}\n\t\t}\n\n\t\tfor ( const key of wrapper.getClassNames() ) {\n\t\t\tif ( !toWrap.hasClass( key ) ) {\n\t\t\t\tthis.addClass( key, toWrap );\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Unwraps {@link module:engine/view/attributeelement~AttributeElement AttributeElement} from another by removing\n\t * corresponding attributes, classes and styles. All attributes, classes and styles from wrapper should be present\n\t * inside element being unwrapped.\n\t *\n\t * @private\n\t * @param {module:engine/view/attributeelement~AttributeElement} wrapper Wrapper AttributeElement.\n\t * @param {module:engine/view/attributeelement~AttributeElement} toUnwrap AttributeElement to unwrap using wrapper element.\n\t * @returns {Boolean} Returns `true` if elements are unwrapped.\n\t **/\n\t_unwrapAttributeElement( wrapper, toUnwrap ) {\n\t\tif ( !canBeJoined( wrapper, toUnwrap ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Can't unwrap if name or priority differs.\n\t\tif ( wrapper.name !== toUnwrap.name || wrapper.priority !== toUnwrap.priority ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if AttributeElement has all wrapper attributes.\n\t\tfor ( const key of wrapper.getAttributeKeys() ) {\n\t\t\t// Classes and styles should be checked separately.\n\t\t\tif ( key === 'class' || key === 'style' ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If some attributes are missing or different we cannot unwrap.\n\t\t\tif ( !toUnwrap.hasAttribute( key ) || toUnwrap.getAttribute( key ) !== wrapper.getAttribute( key ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// Check if AttributeElement has all wrapper classes.\n\t\tif ( !toUnwrap.hasClass( ...wrapper.getClassNames() ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if AttributeElement has all wrapper styles.\n\t\tfor ( const key of wrapper.getStyleNames() ) {\n\t\t\t// If some styles are missing or different we cannot unwrap.\n\t\t\tif ( !toUnwrap.hasStyle( key ) || toUnwrap.getStyle( key ) !== wrapper.getStyle( key ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// Remove all wrapper's attributes from unwrapped element.\n\t\tfor ( const key of wrapper.getAttributeKeys() ) {\n\t\t\t// Classes and styles should be checked separately.\n\t\t\tif ( key === 'class' || key === 'style' ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.removeAttribute( key, toUnwrap );\n\t\t}\n\n\t\t// Remove all wrapper's classes from unwrapped element.\n\t\tthis.removeClass( Array.from( wrapper.getClassNames() ), toUnwrap );\n\n\t\t// Remove all wrapper's styles from unwrapped element.\n\t\tthis.removeStyle( Array.from( wrapper.getStyleNames() ), toUnwrap );\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at the boundaries of given range.\n\t *\n\t * @private\n\t * @param {module:engine/view/range~Range} range Range which `start` and `end` positions will be used to break attributes.\n\t * @param {Boolean} [forceSplitText=false] If set to `true`, will break text nodes even if they are directly in container element.\n\t * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n\t * @returns {module:engine/view/range~Range} New range with located at break positions.\n\t */\n\t_breakAttributesRange( range, forceSplitText = false ) {\n\t\tconst rangeStart = range.start;\n\t\tconst rangeEnd = range.end;\n\n\t\tvalidateRangeContainer( range, this.document );\n\n\t\t// Break at the collapsed position. Return new collapsed range.\n\t\tif ( range.isCollapsed ) {\n\t\t\tconst position = this._breakAttributes( range.start, forceSplitText );\n\n\t\t\treturn new Range( position, position );\n\t\t}\n\n\t\tconst breakEnd = this._breakAttributes( rangeEnd, forceSplitText );\n\t\tconst count = breakEnd.parent.childCount;\n\t\tconst breakStart = this._breakAttributes( rangeStart, forceSplitText );\n\n\t\t// Calculate new break end offset.\n\t\tbreakEnd.offset += breakEnd.parent.childCount - count;\n\n\t\treturn new Range( breakStart, breakEnd );\n\t}\n\n\t/**\n\t * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at given position.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-empty-element` when break position\n\t * is placed inside {@link module:engine/view/emptyelement~EmptyElement EmptyElement}.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-ui-element` when break position\n\t * is placed inside {@link module:engine/view/uielement~UIElement UIElement}.\n\t *\n\t * @private\n\t * @param {module:engine/view/position~Position} position Position where to break attributes.\n\t * @param {Boolean} [forceSplitText=false] If set to `true`, will break text nodes even if they are directly in container element.\n\t * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n\t * @returns {module:engine/view/position~Position} New position after breaking the attributes.\n\t */\n\t_breakAttributes( position, forceSplitText = false ) {\n\t\tconst positionOffset = position.offset;\n\t\tconst positionParent = position.parent;\n\n\t\t// If position is placed inside EmptyElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'emptyElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break inside EmptyElement instance.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-empty-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-empty-element', this.document );\n\t\t}\n\n\t\t// If position is placed inside UIElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'uiElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break inside UIElement instance.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-ui-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-ui-element', this.document );\n\t\t}\n\n\t\t// There are no attributes to break and text nodes breaking is not forced.\n\t\tif ( !forceSplitText && positionParent.is( 'text' ) && isContainerOrFragment( positionParent.parent ) ) {\n\t\t\treturn position.clone();\n\t\t}\n\n\t\t// Position's parent is container, so no attributes to break.\n\t\tif ( isContainerOrFragment( positionParent ) ) {\n\t\t\treturn position.clone();\n\t\t}\n\n\t\t// Break text and start again in new position.\n\t\tif ( positionParent.is( 'text' ) ) {\n\t\t\treturn this._breakAttributes( breakTextNode( position ), forceSplitText );\n\t\t}\n\n\t\tconst length = positionParent.childCount;\n\n\t\t//

foobar{}

\n\t\t//

foobar[]

\n\t\t//

foobar[]

\n\t\tif ( positionOffset == length ) {\n\t\t\tconst newPosition = new Position( positionParent.parent, positionParent.index + 1 );\n\n\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t} else {\n\t\t\t//

foo{}bar

\n\t\t\t//

foo[]bar

\n\t\t\t//

foo{}bar

\n\t\t\tif ( positionOffset === 0 ) {\n\t\t\t\tconst newPosition = new Position( positionParent.parent, positionParent.index );\n\n\t\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t\t}\n\t\t\t//

foob{}ar

\n\t\t\t//

foob[]ar

\n\t\t\t//

foob[]ar

\n\t\t\t//

foob[]ar

\n\t\t\telse {\n\t\t\t\tconst offsetAfter = positionParent.index + 1;\n\n\t\t\t\t// Break element.\n\t\t\t\tconst clonedNode = positionParent._clone();\n\n\t\t\t\t// Insert cloned node to position's parent node.\n\t\t\t\tpositionParent.parent._insertChild( offsetAfter, clonedNode );\n\t\t\t\tthis._addToClonedElementsGroup( clonedNode );\n\n\t\t\t\t// Get nodes to move.\n\t\t\t\tconst count = positionParent.childCount - positionOffset;\n\t\t\t\tconst nodesToMove = positionParent._removeChildren( positionOffset, count );\n\n\t\t\t\t// Move nodes to cloned node.\n\t\t\t\tclonedNode._appendChild( nodesToMove );\n\n\t\t\t\t// Create new position to work on.\n\t\t\t\tconst newPosition = new Position( positionParent.parent, offsetAfter );\n\n\t\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Stores the information that an {@link module:engine/view/attributeelement~AttributeElement attribute element} was\n\t * added to the tree. Saves the reference to the group in the given element and updates the group, so other elements\n\t * from the group now keep a reference to the given attribute element.\n\t *\n\t * The clones group can be obtained using {@link module:engine/view/attributeelement~AttributeElement#getElementsWithSameId}.\n\t *\n\t * Does nothing if added element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n\t *\n\t * @private\n\t * @param {module:engine/view/attributeelement~AttributeElement} element Attribute element to save.\n\t */\n\t_addToClonedElementsGroup( element ) {\n\t\t// Add only if the element is in document tree.\n\t\tif ( !element.root.is( 'rootElement' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Traverse the element's children recursively to find other attribute elements that also might got inserted.\n\t\t// The loop is at the beginning so we can make fast returns later in the code.\n\t\tif ( element.is( 'element' ) ) {\n\t\t\tfor ( const child of element.getChildren() ) {\n\t\t\t\tthis._addToClonedElementsGroup( child );\n\t\t\t}\n\t\t}\n\n\t\tconst id = element.id;\n\n\t\tif ( !id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet group = this._cloneGroups.get( id );\n\n\t\tif ( !group ) {\n\t\t\tgroup = new Set();\n\t\t\tthis._cloneGroups.set( id, group );\n\t\t}\n\n\t\tgroup.add( element );\n\t\telement._clonesGroup = group;\n\t}\n\n\t/**\n\t * Removes all the information about the given {@link module:engine/view/attributeelement~AttributeElement attribute element}\n\t * from its clones group.\n\t *\n\t * Keep in mind, that the element will still keep a reference to the group (but the group will not keep a reference to it).\n\t * This allows to reference the whole group even if the element was already removed from the tree.\n\t *\n\t * Does nothing if the element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n\t *\n\t * @private\n\t * @param {module:engine/view/attributeelement~AttributeElement} element Attribute element to remove.\n\t */\n\t_removeFromClonedElementsGroup( element ) {\n\t\t// Traverse the element's children recursively to find other attribute elements that also got removed.\n\t\t// The loop is at the beginning so we can make fast returns later in the code.\n\t\tif ( element.is( 'element' ) ) {\n\t\t\tfor ( const child of element.getChildren() ) {\n\t\t\t\tthis._removeFromClonedElementsGroup( child );\n\t\t\t}\n\t\t}\n\n\t\tconst id = element.id;\n\n\t\tif ( !id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = this._cloneGroups.get( id );\n\n\t\tif ( !group ) {\n\t\t\treturn;\n\t\t}\n\n\t\tgroup.delete( element );\n\t\t// Not removing group from element on purpose!\n\t\t// If other parts of code have reference to this element, they will be able to get references to other elements from the group.\n\t}\n}\n\n// Helper function for `view.writer.wrap`. Checks if given element has any children that are not ui elements.\nfunction _hasNonUiChildren( parent ) {\n\treturn Array.from( parent.getChildren() ).some( child => !child.is( 'uiElement' ) );\n}\n\n/**\n * Attribute element need to be instance of attribute element.\n *\n * @error view-writer-wrap-invalid-attribute\n */\n\n// Returns first parent container of specified {@link module:engine/view/position~Position Position}.\n// Position's parent node is checked as first, then next parents are checked.\n// Note that {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment} is treated like a container.\n//\n// @param {module:engine/view/position~Position} position Position used as a start point to locate parent container.\n// @returns {module:engine/view/containerelement~ContainerElement|module:engine/view/documentfragment~DocumentFragment|undefined}\n// Parent container element or `undefined` if container is not found.\nfunction getParentContainer( position ) {\n\tlet parent = position.parent;\n\n\twhile ( !isContainerOrFragment( parent ) ) {\n\t\tif ( !parent ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\n\treturn parent;\n}\n\n// Checks if first {@link module:engine/view/attributeelement~AttributeElement AttributeElement} provided to the function\n// can be wrapped otuside second element. It is done by comparing elements'\n// {@link module:engine/view/attributeelement~AttributeElement#priority priorities}, if both have same priority\n// {@link module:engine/view/element~Element#getIdentity identities} are compared.\n//\n// @param {module:engine/view/attributeelement~AttributeElement} a\n// @param {module:engine/view/attributeelement~AttributeElement} b\n// @returns {Boolean}\nfunction shouldABeOutsideB( a, b ) {\n\tif ( a.priority < b.priority ) {\n\t\treturn true;\n\t} else if ( a.priority > b.priority ) {\n\t\treturn false;\n\t}\n\n\t// When priorities are equal and names are different - use identities.\n\treturn a.getIdentity() < b.getIdentity();\n}\n\n// Returns new position that is moved to near text node. Returns same position if there is no text node before of after\n// specified position.\n//\n//\t\t

foo[]

->

foo{}

\n//\t\t

[]foo

->

{}foo

\n//\n// @param {module:engine/view/position~Position} position\n// @returns {module:engine/view/position~Position} Position located inside text node or same position if there is no text nodes\n// before or after position location.\nfunction movePositionToTextNode( position ) {\n\tconst nodeBefore = position.nodeBefore;\n\n\tif ( nodeBefore && nodeBefore.is( 'text' ) ) {\n\t\treturn new Position( nodeBefore, nodeBefore.data.length );\n\t}\n\n\tconst nodeAfter = position.nodeAfter;\n\n\tif ( nodeAfter && nodeAfter.is( 'text' ) ) {\n\t\treturn new Position( nodeAfter, 0 );\n\t}\n\n\treturn position;\n}\n\n// Breaks text node into two text nodes when possible.\n//\n//\t\t

foo{}bar

->

foo[]bar

\n//\t\t

{}foobar

->

[]foobar

\n//\t\t

foobar{}

->

foobar[]

\n//\n// @param {module:engine/view/position~Position} position Position that need to be placed inside text node.\n// @returns {module:engine/view/position~Position} New position after breaking text node.\nfunction breakTextNode( position ) {\n\tif ( position.offset == position.parent.data.length ) {\n\t\treturn new Position( position.parent.parent, position.parent.index + 1 );\n\t}\n\n\tif ( position.offset === 0 ) {\n\t\treturn new Position( position.parent.parent, position.parent.index );\n\t}\n\n\t// Get part of the text that need to be moved.\n\tconst textToMove = position.parent.data.slice( position.offset );\n\n\t// Leave rest of the text in position's parent.\n\tposition.parent._data = position.parent.data.slice( 0, position.offset );\n\n\t// Insert new text node after position's parent text node.\n\tposition.parent.parent._insertChild( position.parent.index + 1, new Text( textToMove ) );\n\n\t// Return new position between two newly created text nodes.\n\treturn new Position( position.parent.parent, position.parent.index + 1 );\n}\n\n// Merges two text nodes into first node. Removes second node and returns merge position.\n//\n// @param {module:engine/view/text~Text} t1 First text node to merge. Data from second text node will be moved at the end of\n// this text node.\n// @param {module:engine/view/text~Text} t2 Second text node to merge. This node will be removed after merging.\n// @returns {module:engine/view/position~Position} Position after merging text nodes.\nfunction mergeTextNodes( t1, t2 ) {\n\t// Merge text data into first text node and remove second one.\n\tconst nodeBeforeLength = t1.data.length;\n\tt1._data += t2.data;\n\tt2._remove();\n\n\treturn new Position( t1, nodeBeforeLength );\n}\n\n// Checks if provided nodes are valid to insert. Checks if each node is an instance of\n// {@link module:engine/view/text~Text Text} or {@link module:engine/view/attributeelement~AttributeElement AttributeElement},\n// {@link module:engine/view/containerelement~ContainerElement ContainerElement},\n// {@link module:engine/view/emptyelement~EmptyElement EmptyElement} or\n// {@link module:engine/view/uielement~UIElement UIElement}.\n//\n// Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n// contains instances that are not {@link module:engine/view/text~Text Texts},\n// {@link module:engine/view/emptyelement~EmptyElement EmptyElements},\n// {@link module:engine/view/uielement~UIElement UIElements},\n// {@link module:engine/view/attributeelement~AttributeElement AttributeElements} or\n// {@link module:engine/view/containerelement~ContainerElement ContainerElements}.\n//\n// @param Iterable. nodes\n// @param {Object} errorContext\nfunction validateNodesToInsert( nodes, errorContext ) {\n\tfor ( const node of nodes ) {\n\t\tif ( !validNodesToInsert.some( ( validNode => node instanceof validNode ) ) ) { // eslint-disable-line no-use-before-define\n\t\t\t/**\n\t\t\t * Inserted nodes should be valid to insert. of {@link module:engine/view/attributeelement~AttributeElement AttributeElement},\n\t\t\t * {@link module:engine/view/containerelement~ContainerElement ContainerElement},\n\t\t\t * {@link module:engine/view/emptyelement~EmptyElement EmptyElement},\n\t\t\t * {@link module:engine/view/uielement~UIElement UIElement}, {@link module:engine/view/text~Text Text}.\n\t\t\t *\n\t\t\t * @error view-writer-insert-invalid-node\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-insert-invalid-node', errorContext );\n\t\t}\n\n\t\tif ( !node.is( 'text' ) ) {\n\t\t\tvalidateNodesToInsert( node.getChildren(), errorContext );\n\t\t}\n\t}\n}\n\nconst validNodesToInsert = [ Text, AttributeElement, ContainerElement, EmptyElement, UIElement ];\n\n// Checks if node is ContainerElement or DocumentFragment, because in most cases they should be treated the same way.\n//\n// @param {module:engine/view/node~Node} node\n// @returns {Boolean} Returns `true` if node is instance of ContainerElement or DocumentFragment.\nfunction isContainerOrFragment( node ) {\n\treturn node && ( node.is( 'containerElement' ) || node.is( 'documentFragment' ) );\n}\n\n// Checks if {@link module:engine/view/range~Range#start range start} and {@link module:engine/view/range~Range#end range end} are placed\n// inside same {@link module:engine/view/containerelement~ContainerElement container element}.\n// Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when validation fails.\n//\n// @param {module:engine/view/range~Range} range\n// @param {Object} errorContext\nfunction validateRangeContainer( range, errorContext ) {\n\tconst startContainer = getParentContainer( range.start );\n\tconst endContainer = getParentContainer( range.end );\n\n\tif ( !startContainer || !endContainer || startContainer !== endContainer ) {\n\t\t/**\n\t\t * Range container is invalid. This can happen if {@link module:engine/view/range~Range#start range start} and\n\t\t * {@link module:engine/view/range~Range#end range end} positions are not placed inside same container or\n\t\t * parent container for these positions cannot be found.\n\t\t *\n\t\t * @error view-writer-invalid-range-container\n\t\t */\n\n\t\tthrow new CKEditorError( 'view-writer-invalid-range-container', errorContext );\n\t}\n}\n\n// Checks if two attribute elements can be joined together. Elements can be joined together if, and only if\n// they do not have ids specified.\n//\n// @private\n// @param {module:engine/view/element~Element} a\n// @param {module:engine/view/element~Element} b\n// @returns {Boolean}\nfunction canBeJoined( a, b ) {\n\treturn a.id === null && b.id === null;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/istext\n */\n\n/**\n * Checks if the object is a native DOM Text node.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isText( obj ) {\n\treturn Object.prototype.toString.call( obj ) == '[object Text]';\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport isText from '@ckeditor/ckeditor5-utils/src/dom/istext';\n\n/**\n * Set of utils related to block and inline fillers handling.\n *\n * Browsers do not allow to put caret in elements which does not have height. Because of it, we need to fill all\n * empty elements which should be selectable with elements or characters called \"fillers\". Unfortunately there is no one\n * universal filler, this is why two types are uses:\n *\n * * Block filler is an element which fill block elements, like `

`. CKEditor uses `
` as a block filler during the editing,\n * as browsers do natively. So instead of an empty `

` there will be `


`. The advantage of block filler is that\n * it is transparent for the selection, so when the caret is before the `
` and user presses right arrow he will be\n * moved to the next paragraph, not after the `
`. The disadvantage is that it breaks a block, so it can not be used\n * in the middle of a line of text. The {@link module:engine/view/filler~BR_FILLER `
` filler} can be replaced with any other\n * character in the data output, for instance {@link module:engine/view/filler~NBSP_FILLER non-breaking space}.\n *\n * * Inline filler is a filler which does not break a line of text, so it can be used inside the text, for instance in the empty\n * `` surrendered by text: `foobar`, if we want to put the caret there. CKEditor uses a sequence of the zero-width\n * spaces as an {@link module:engine/view/filler~INLINE_FILLER inline filler} having the predetermined\n * {@link module:engine/view/filler~INLINE_FILLER_LENGTH length}. A sequence is used, instead of a single character to\n * avoid treating random zero-width spaces as the inline filler. Disadvantage of the inline filler is that it is not\n * transparent for the selection. The arrow key moves the caret between zero-width spaces characters, so the additional\n * code is needed to handle the caret.\n *\n * Both inline and block fillers are handled by the {@link module:engine/view/renderer~Renderer renderer} and are not present in the\n * view.\n *\n * @module engine/view/filler\n */\n\n/**\n * Non-breaking space filler creator. This is a function which creates ` ` text node.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~BR_FILLER\n * @function\n */\nexport const NBSP_FILLER = domDocument => domDocument.createTextNode( '\\u00A0' );\n\n/**\n * `
` filler creator. This is a function which creates `
` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @function\n */\nexport const BR_FILLER = domDocument => {\n\tconst fillerBr = domDocument.createElement( 'br' );\n\tfillerBr.dataset.ckeFiller = true;\n\n\treturn fillerBr;\n};\n\n/**\n * Length of the {@link module:engine/view/filler~INLINE_FILLER INLINE_FILLER}.\n */\nexport const INLINE_FILLER_LENGTH = 7;\n\n/**\n * Inline filler which is a sequence of the zero width spaces.\n */\nexport const INLINE_FILLER = ( () => {\n\tlet inlineFiller = '';\n\n\tfor ( let i = 0; i < INLINE_FILLER_LENGTH; i++ ) {\n\t\tinlineFiller += '\\u200b';\n\t}\n\n\treturn inlineFiller;\n} )(); // Usu IIF so the INLINE_FILLER appears as a constant in the docs.\n\n/**\n * Checks if the node is a text node which starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n *\t\tstartsWithFiller( document.createTextNode( INLINE_FILLER ) ); // true\n *\t\tstartsWithFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // true\n *\t\tstartsWithFiller( document.createTextNode( 'foo' ) ); // false\n *\t\tstartsWithFiller( document.createElement( 'p' ) ); // false\n *\n * @param {Node} domNode DOM node.\n * @returns {Boolean} True if the text node starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n */\nexport function startsWithFiller( domNode ) {\n\treturn isText( domNode ) && ( domNode.data.substr( 0, INLINE_FILLER_LENGTH ) === INLINE_FILLER );\n}\n\n/**\n * Checks if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n *\t\tisInlineFiller( document.createTextNode( INLINE_FILLER ) ); // true\n *\t\tisInlineFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // false\n *\n * @param {Text} domText DOM text node.\n * @returns {Boolean} True if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n */\nexport function isInlineFiller( domText ) {\n\treturn domText.data.length == INLINE_FILLER_LENGTH && startsWithFiller( domText );\n}\n\n/**\n * Get string data from the text node, removing an {@link module:engine/view/filler~INLINE_FILLER inline filler} from it,\n * if text node contains it.\n *\n *\t\tgetDataWithoutFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ) == 'foo' // true\n *\t\tgetDataWithoutFiller( document.createTextNode( 'foo' ) ) == 'foo' // true\n *\n * @param {Text} domText DOM text node, possible with inline filler.\n * @returns {String} Data without filler.\n */\nexport function getDataWithoutFiller( domText ) {\n\tif ( startsWithFiller( domText ) ) {\n\t\treturn domText.data.slice( INLINE_FILLER_LENGTH );\n\t} else {\n\t\treturn domText.data;\n\t}\n}\n\n/**\n * Assign key observer which move cursor from the end of the inline filler to the beginning of it when\n * the left arrow is pressed, so the filler does not break navigation.\n *\n * @param {module:engine/view/view~View} view View controller instance we should inject quirks handling on.\n */\nexport function injectQuirksHandling( view ) {\n\tview.document.on( 'keydown', jumpOverInlineFiller );\n}\n\n// Move cursor from the end of the inline filler to the beginning of it when, so the filler does not break navigation.\nfunction jumpOverInlineFiller( evt, data ) {\n\tif ( data.keyCode == keyCodes.arrowleft ) {\n\t\tconst domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n\n\t\tif ( domSelection.rangeCount == 1 && domSelection.getRangeAt( 0 ).collapsed ) {\n\t\t\tconst domParent = domSelection.getRangeAt( 0 ).startContainer;\n\t\t\tconst domOffset = domSelection.getRangeAt( 0 ).startOffset;\n\n\t\t\tif ( startsWithFiller( domParent ) && domOffset <= INLINE_FILLER_LENGTH ) {\n\t\t\t\tdomSelection.collapse( domParent, 0 );\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/fastdiff\n */\n\n/**\n * Finds positions of the first and last change in the given string/array and generates a set of changes:\n *\n *\t\tfastDiff( '12a', '12xyza' );\n *\t\t// [ { index: 2, type: 'insert', values: [ 'x', 'y', 'z' ] } ]\n *\n *\t\tfastDiff( '12a', '12aa' );\n *\t\t// [ { index: 3, type: 'insert', values: [ 'a' ] } ]\n *\n *\t\tfastDiff( '12xyza', '12a' );\n *\t\t// [ { index: 2, type: 'delete', howMany: 3 } ]\n *\n *\t\tfastDiff( [ '1', '2', 'a', 'a' ], [ '1', '2', 'a' ] );\n *\t\t// [ { index: 3, type: 'delete', howMany: 1 } ]\n *\n *\t\tfastDiff( [ '1', '2', 'a', 'b', 'c', '3' ], [ '2', 'a', 'b' ] );\n *\t\t// [ { index: 0, type: 'insert', values: [ '2', 'a', 'b' ] }, { index: 3, type: 'delete', howMany: 6 } ]\n *\n * Passed arrays can contain any type of data, however to compare them correctly custom comparator function\n * should be passed as a third parameter:\n *\n *\t\tfastDiff( [ { value: 1 }, { value: 2 } ], [ { value: 1 }, { value: 3 } ], ( a, b ) => {\n *\t\t\treturn a.value === b.value;\n *\t\t} );\n *\t\t// [ { index: 1, type: 'insert', values: [ { value: 3 } ] }, { index: 2, type: 'delete', howMany: 1 } ]\n *\n * The resulted set of changes can be applied to the input in order to transform it into the output, for example:\n *\n *\t\tlet input = '12abc3';\n *\t\tconst output = '2ab';\n *\t\tconst changes = fastDiff( input, output );\n *\n *\t\tchanges.forEach( change => {\n *\t\t\tif ( change.type == 'insert' ) {\n *\t\t\t\tinput = input.substring( 0, change.index ) + change.values.join( '' ) + input.substring( change.index );\n *\t\t\t} else if ( change.type == 'delete' ) {\n *\t\t\t\tinput = input.substring( 0, change.index ) + input.substring( change.index + change.howMany );\n *\t\t\t}\n *\t\t} );\n *\n *\t\t// input equals output now\n *\n * or in case of arrays:\n *\n *\t\tlet input = [ '1', '2', 'a', 'b', 'c', '3' ];\n *\t\tconst output = [ '2', 'a', 'b' ];\n *\t\tconst changes = fastDiff( input, output );\n *\n *\t\tchanges.forEach( change => {\n *\t\t\tif ( change.type == 'insert' ) {\n *\t\t\t\tinput = input.slice( 0, change.index ).concat( change.values, input.slice( change.index ) );\n *\t\t\t} else if ( change.type == 'delete' ) {\n *\t\t\t\tinput = input.slice( 0, change.index ).concat( input.slice( change.index + change.howMany ) );\n *\t\t\t}\n *\t\t} );\n *\n *\t\t// input equals output now\n *\n * By passing `true` as the fourth parameter (`atomicChanges`) the output of this function will become compatible with\n * the {@link module:utils/diff~diff `diff()`} function:\n *\n *\t\tfastDiff( '12a', '12xyza' );\n *\t\t// [ 'equal', 'equal', 'insert', 'insert', 'insert', 'equal' ]\n *\n * The default output format of this function is compatible with the output format of\n * {@link module:utils/difftochanges~diffToChanges `diffToChanges()`}. The `diffToChanges()` input format is, in turn,\n * compatible with the output of {@link module:utils/diff~diff `diff()`}:\n *\n *\t\tconst a = '1234';\n *\t\tconst b = '12xyz34';\n *\n *\t\t// Both calls will return the same results (grouped changes format).\n *\t\tfastDiff( a, b );\n *\t\tdiffToChanges( diff( a, b ) );\n *\n *\t\t// Again, both calls will return the same results (atomic changes format).\n *\t\tfastDiff( a, b, null, true );\n *\t\tdiff( a, b );\n *\n *\n * @param {Array|String} a Input array or string.\n * @param {Array|String} b Input array or string.\n * @param {Function} [cmp] Optional function used to compare array values, by default `===` (strict equal operator) is used.\n * @param {Boolean} [atomicChanges=false] Whether an array of `inset|delete|equal` operations should\n * be returned instead of changes set. This makes this function compatible with {@link module:utils/diff~diff `diff()`}.\n * @returns {Array} Array of changes.\n */\nexport default function fastDiff( a, b, cmp, atomicChanges = false ) {\n\t// Set the comparator function.\n\tcmp = cmp || function( a, b ) {\n\t\treturn a === b;\n\t};\n\n\t// Transform text or any iterable into arrays for easier, consistent processing.\n\tif ( !Array.isArray( a ) ) {\n\t\ta = Array.from( a );\n\t}\n\n\tif ( !Array.isArray( b ) ) {\n\t\tb = Array.from( b );\n\t}\n\n\t// Find first and last change.\n\tconst changeIndexes = findChangeBoundaryIndexes( a, b, cmp );\n\n\t// Transform into changes array.\n\treturn atomicChanges ? changeIndexesToAtomicChanges( changeIndexes, b.length ) : changeIndexesToChanges( b, changeIndexes );\n}\n\n// Finds position of the first and last change in the given arrays. For example:\n//\n//\t\tconst indexes = findChangeBoundaryIndexes( [ '1', '2', '3', '4' ], [ '1', '3', '4', '2', '4' ] );\n//\t\tconsole.log( indexes ); // { firstIndex: 1, lastIndexOld: 3, lastIndexNew: 4 }\n//\n// The above indexes means that in the first array the modified part is `1[23]4` and in the second array it is `1[342]4`.\n// Based on such indexes, array with `insert`/`delete` operations which allows transforming first value into the second one\n// can be generated.\n//\n// @param {Array} arr1\n// @param {Array} arr2\n// @param {Function} cmp Comparator function.\n// @returns {Object}\n// @returns {Number} return.firstIndex Index of the first change in both values (always the same for both).\n// @returns {Number} result.lastIndexOld Index of the last common value in `arr1`.\n// @returns {Number} result.lastIndexNew Index of the last common value in `arr2`.\nfunction findChangeBoundaryIndexes( arr1, arr2, cmp ) {\n\t// Find the first difference between passed values.\n\tconst firstIndex = findFirstDifferenceIndex( arr1, arr2, cmp );\n\n\t// If arrays are equal return -1 indexes object.\n\tif ( firstIndex === -1 ) {\n\t\treturn { firstIndex: -1, lastIndexOld: -1, lastIndexNew: -1 };\n\t}\n\n\t// Remove the common part of each value and reverse them to make it simpler to find the last difference between them.\n\tconst oldArrayReversed = cutAndReverse( arr1, firstIndex );\n\tconst newArrayReversed = cutAndReverse( arr2, firstIndex );\n\n\t// Find the first difference between reversed values.\n\t// It should be treated as \"how many elements from the end the last difference occurred\".\n\t//\n\t// For example:\n\t//\n\t// \t\t\t\tinitial\t->\tafter cut\t-> reversed:\n\t// oldValue:\t'321ba'\t->\t'21ba'\t\t-> 'ab12'\n\t// newValue:\t'31xba'\t->\t'1xba'\t\t-> 'abx1'\n\t// lastIndex:\t\t\t\t\t\t\t-> 2\n\t//\n\t// So the last change occurred two characters from the end of the arrays.\n\tconst lastIndex = findFirstDifferenceIndex( oldArrayReversed, newArrayReversed, cmp );\n\n\t// Use `lastIndex` to calculate proper offset, starting from the beginning (`lastIndex` kind of starts from the end).\n\tconst lastIndexOld = arr1.length - lastIndex;\n\tconst lastIndexNew = arr2.length - lastIndex;\n\n\treturn { firstIndex, lastIndexOld, lastIndexNew };\n}\n\n// Returns a first index on which given arrays differ. If both arrays are the same, -1 is returned.\n//\n// @param {Array} arr1\n// @param {Array} arr2\n// @param {Function} cmp Comparator function.\n// @returns {Number}\nfunction findFirstDifferenceIndex( arr1, arr2, cmp ) {\n\tfor ( let i = 0; i < Math.max( arr1.length, arr2.length ); i++ ) {\n\t\tif ( arr1[ i ] === undefined || arr2[ i ] === undefined || !cmp( arr1[ i ], arr2[ i ] ) ) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn -1; // Return -1 if arrays are equal.\n}\n\n// Returns a copy of the given array with `howMany` elements removed starting from the beginning and in reversed order.\n//\n// @param {Array} arr Array to be processed.\n// @param {Number} howMany How many elements from array beginning to remove.\n// @returns {Array} Shortened and reversed array.\nfunction cutAndReverse( arr, howMany ) {\n\treturn arr.slice( howMany ).reverse();\n}\n\n// Generates changes array based on change indexes from `findChangeBoundaryIndexes` function. This function will\n// generate array with 0 (no changes), 1 (deletion or insertion) or 2 records (insertion and deletion).\n//\n// @param {Array} newArray New array for which change indexes were calculated.\n// @param {Object} changeIndexes Change indexes object from `findChangeBoundaryIndexes` function.\n// @returns {Array.} Array of changes compatible with {@link module:utils/difftochanges~diffToChanges} format.\nfunction changeIndexesToChanges( newArray, changeIndexes ) {\n\tconst result = [];\n\tconst { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes;\n\n\t// Order operations as 'insert', 'delete' array to keep compatibility with {@link module:utils/difftochanges~diffToChanges}\n\t// in most cases. However, 'diffToChanges' does not stick to any order so in some cases\n\t// (for example replacing '12345' with 'abcd') it will generate 'delete', 'insert' order.\n\tif ( lastIndexNew - firstIndex > 0 ) {\n\t\tresult.push( {\n\t\t\tindex: firstIndex,\n\t\t\ttype: 'insert',\n\t\t\tvalues: newArray.slice( firstIndex, lastIndexNew )\n\t\t} );\n\t}\n\n\tif ( lastIndexOld - firstIndex > 0 ) {\n\t\tresult.push( {\n\t\t\tindex: firstIndex + ( lastIndexNew - firstIndex ), // Increase index of what was inserted.\n\t\t\ttype: 'delete',\n\t\t\thowMany: lastIndexOld - firstIndex\n\t\t} );\n\t}\n\n\treturn result;\n}\n\n// Generates array with set `equal|insert|delete` operations based on change indexes from `findChangeBoundaryIndexes` function.\n//\n// @param {Object} changeIndexes Change indexes object from `findChangeBoundaryIndexes` function.\n// @param {Number} newLength Length of the new array on which `findChangeBoundaryIndexes` calculated change indexes.\n// @returns {Array.} Array of changes compatible with {@link module:utils/diff~diff} format.\nfunction changeIndexesToAtomicChanges( changeIndexes, newLength ) {\n\tconst { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes;\n\n\t// No changes.\n\tif ( firstIndex === -1 ) {\n\t\treturn Array( newLength ).fill( 'equal' );\n\t}\n\n\tlet result = [];\n\tif ( firstIndex > 0 ) {\n\t\tresult = result.concat( Array( firstIndex ).fill( 'equal' ) );\n\t}\n\n\tif ( lastIndexNew - firstIndex > 0 ) {\n\t\tresult = result.concat( Array( lastIndexNew - firstIndex ).fill( 'insert' ) );\n\t}\n\n\tif ( lastIndexOld - firstIndex > 0 ) {\n\t\tresult = result.concat( Array( lastIndexOld - firstIndex ).fill( 'delete' ) );\n\t}\n\n\tif ( lastIndexNew < newLength ) {\n\t\tresult = result.concat( Array( newLength - lastIndexNew ).fill( 'equal' ) );\n\t}\n\n\treturn result;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/diff\n */\n\nimport fastDiff from '../src/fastdiff';\n\n// The following code is based on the \"O(NP) Sequence Comparison Algorithm\"\n// by Sun Wu, Udi Manber, Gene Myers, Webb Miller.\n\n/**\n * Calculates the difference between two arrays or strings producing an array containing a list of changes\n * necessary to transform input into output.\n *\n *\t\tdiff( 'aba', 'acca' ); // [ 'equal', 'insert', 'insert', 'delete', 'equal' ]\n *\n * This function is based on the \"O(NP) Sequence Comparison Algorithm\" by Sun Wu, Udi Manber, Gene Myers, Webb Miller.\n * Unfortunately, while it gives the most precise results, its to complex for longer strings/arrow (above 200 items).\n * Therefore, `diff()` automatically switches to {@link module:utils/fastdiff~fastDiff `fastDiff()`} when detecting\n * such a scenario. The return formats of both functions are identical.\n *\n * @param {Array|String} a Input array or string.\n * @param {Array|String} b Output array or string.\n * @param {Function} [cmp] Optional function used to compare array values, by default === is used.\n * @returns {Array} Array of changes.\n */\nexport default function diff( a, b, cmp ) {\n\t// Set the comparator function.\n\tcmp = cmp || function( a, b ) {\n\t\treturn a === b;\n\t};\n\n\tconst aLength = a.length;\n\tconst bLength = b.length;\n\n\t// Perform `fastDiff` for longer strings/arrays (see #269).\n\tif ( aLength > 200 || bLength > 200 || aLength + bLength > 300 ) {\n\t\treturn diff.fastDiff( a, b, cmp, true );\n\t}\n\n\t// Temporary action type statics.\n\tlet _insert, _delete;\n\n\t// Swapped the arrays to use the shorter one as the first one.\n\tif ( bLength < aLength ) {\n\t\tconst tmp = a;\n\n\t\ta = b;\n\t\tb = tmp;\n\n\t\t// We swap the action types as well.\n\t\t_insert = 'delete';\n\t\t_delete = 'insert';\n\t} else {\n\t\t_insert = 'insert';\n\t\t_delete = 'delete';\n\t}\n\n\tconst m = a.length;\n\tconst n = b.length;\n\tconst delta = n - m;\n\n\t// Edit scripts, for each diagonal.\n\tconst es = {};\n\t// Furthest points, the furthest y we can get on each diagonal.\n\tconst fp = {};\n\n\tfunction snake( k ) {\n\t\t// We use -1 as an alternative below to handle initial values ( instead of filling the fp with -1 first ).\n\t\t// Furthest points (y) on the diagonal below k.\n\t\tconst y1 = ( fp[ k - 1 ] !== undefined ? fp[ k - 1 ] : -1 ) + 1;\n\t\t// Furthest points (y) on the diagonal above k.\n\t\tconst y2 = fp[ k + 1 ] !== undefined ? fp[ k + 1 ] : -1;\n\t\t// The way we should go to get further.\n\t\tconst dir = y1 > y2 ? -1 : 1;\n\n\t\t// Clone previous changes array (if any).\n\t\tif ( es[ k + dir ] ) {\n\t\t\tes[ k ] = es[ k + dir ].slice( 0 );\n\t\t}\n\n\t\t// Create changes array.\n\t\tif ( !es[ k ] ) {\n\t\t\tes[ k ] = [];\n\t\t}\n\n\t\t// Push the action.\n\t\tes[ k ].push( y1 > y2 ? _insert : _delete );\n\n\t\t// Set the beginning coordinates.\n\t\tlet y = Math.max( y1, y2 );\n\t\tlet x = y - k;\n\n\t\t// Traverse the diagonal as long as the values match.\n\t\twhile ( x < m && y < n && cmp( a[ x ], b[ y ] ) ) {\n\t\t\tx++;\n\t\t\ty++;\n\t\t\t// Push no change action.\n\t\t\tes[ k ].push( 'equal' );\n\t\t}\n\n\t\treturn y;\n\t}\n\n\tlet p = 0;\n\tlet k;\n\n\t// Traverse the graph until we reach the end of the longer string.\n\tdo {\n\t\t// Updates furthest points and edit scripts for diagonals below delta.\n\t\tfor ( k = -p; k < delta; k++ ) {\n\t\t\tfp[ k ] = snake( k );\n\t\t}\n\n\t\t// Updates furthest points and edit scripts for diagonals above delta.\n\t\tfor ( k = delta + p; k > delta; k-- ) {\n\t\t\tfp[ k ] = snake( k );\n\t\t}\n\n\t\t// Updates furthest point and edit script for the delta diagonal.\n\t\t// note that the delta diagonal is the one which goes through the sink (m, n).\n\t\tfp[ delta ] = snake( delta );\n\n\t\tp++;\n\t} while ( fp[ delta ] !== n );\n\n\t// Return the final list of edit changes.\n\t// We remove the first item that represents the action for the injected nulls.\n\treturn es[ delta ].slice( 1 );\n}\n\n// Store the API in static property to easily overwrite it in tests.\n// Too bad dependency injection does not work in Webpack + ES 6 (const) + Babel.\ndiff.fastDiff = fastDiff;\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/insertat\n */\n\n/**\n * Inserts node to the parent at given index.\n *\n * @param {Element} parentElement Parent element.\n * @param {Number} index Insertions index.\n * @param {Node} nodeToInsert Node to insert.\n */\nexport default function insertAt( parentElement, index, nodeToInsert ) {\n\tparentElement.insertBefore( nodeToInsert, parentElement.childNodes[ index ] || null );\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/remove\n */\n\n/**\n * Removes given node from parent.\n *\n * @param {Node} node Node to remove.\n */\nexport default function remove( node ) {\n\tconst parent = node.parentNode;\n\n\tif ( parent ) {\n\t\tparent.removeChild( node );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/isnode\n */\n\n/**\n * Checks if the object is a native DOM Node.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isNode( obj ) {\n\tif ( obj ) {\n\t\tif ( obj.defaultView ) {\n\t\t\treturn obj instanceof obj.defaultView.Document;\n\t\t} else if ( obj.ownerDocument && obj.ownerDocument.defaultView ) {\n\t\t\treturn obj instanceof obj.ownerDocument.defaultView.Node;\n\t\t}\n\t}\n\n\treturn false;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals Node */\n\n/**\n * @module engine/view/renderer\n */\n\nimport ViewText from './text';\nimport ViewPosition from './position';\nimport { INLINE_FILLER, INLINE_FILLER_LENGTH, startsWithFiller, isInlineFiller } from './filler';\n\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport diff from '@ckeditor/ckeditor5-utils/src/diff';\nimport insertAt from '@ckeditor/ckeditor5-utils/src/dom/insertat';\nimport remove from '@ckeditor/ckeditor5-utils/src/dom/remove';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';\nimport isText from '@ckeditor/ckeditor5-utils/src/dom/istext';\nimport isNode from '@ckeditor/ckeditor5-utils/src/dom/isnode';\nimport fastDiff from '@ckeditor/ckeditor5-utils/src/fastdiff';\nimport env from '@ckeditor/ckeditor5-utils/src/env';\n\n/**\n * Renderer is responsible for updating the DOM structure and the DOM selection based on\n * the {@link module:engine/view/renderer~Renderer#markToSync information about updated view nodes}.\n * In other words, it renders the view to the DOM.\n *\n * Its main responsibility is to make only the necessary, minimal changes to the DOM. However, unlike in many\n * virtual DOM implementations, the primary reason for doing minimal changes is not the performance but ensuring\n * that native editing features such as text composition, autocompletion, spell checking, selection's x-index are\n * affected as little as possible.\n *\n * Renderer uses {@link module:engine/view/domconverter~DomConverter} to transform view nodes and positions\n * to and from the DOM.\n */\nexport default class Renderer {\n\t/**\n\t * Creates a renderer instance.\n\t *\n\t * @param {module:engine/view/domconverter~DomConverter} domConverter Converter instance.\n\t * @param {module:engine/view/documentselection~DocumentSelection} selection View selection.\n\t */\n\tconstructor( domConverter, selection ) {\n\t\t/**\n\t\t * Set of DOM Documents instances.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Set.}\n\t\t */\n\t\tthis.domDocuments = new Set();\n\n\t\t/**\n\t\t * Converter instance.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/domconverter~DomConverter}\n\t\t */\n\t\tthis.domConverter = domConverter;\n\n\t\t/**\n\t\t * Set of nodes which attributes changed and may need to be rendered.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Set.}\n\t\t */\n\t\tthis.markedAttributes = new Set();\n\n\t\t/**\n\t\t * Set of elements which child lists changed and may need to be rendered.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Set.}\n\t\t */\n\t\tthis.markedChildren = new Set();\n\n\t\t/**\n\t\t * Set of text nodes which text data changed and may need to be rendered.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Set.}\n\t\t */\n\t\tthis.markedTexts = new Set();\n\n\t\t/**\n\t\t * View selection. Renderer updates DOM selection based on the view selection.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/documentselection~DocumentSelection}\n\t\t */\n\t\tthis.selection = selection;\n\n\t\t/**\n\t\t * Indicates if the view document is focused and selection can be rendered. Selection will not be rendered if\n\t\t * this is set to `false`.\n\t\t *\n\t\t * @member {Boolean}\n\t\t */\n\t\tthis.isFocused = false;\n\n\t\t/**\n\t\t * The text node in which the inline filler was rendered.\n\t\t *\n\t\t * @private\n\t\t * @member {Text}\n\t\t */\n\t\tthis._inlineFiller = null;\n\n\t\t/**\n\t\t * DOM element containing fake selection.\n\t\t *\n\t\t * @private\n\t\t * @type {null|HTMLElement}\n\t\t */\n\t\tthis._fakeSelectionContainer = null;\n\t}\n\n\t/**\n\t * Marks a view node to be updated in the DOM by {@link #render `render()`}.\n\t *\n\t * Note that only view nodes whose parents have corresponding DOM elements need to be marked to be synchronized.\n\t *\n\t * @see #markedAttributes\n\t * @see #markedChildren\n\t * @see #markedTexts\n\t *\n\t * @param {module:engine/view/document~ChangeType} type Type of the change.\n\t * @param {module:engine/view/node~Node} node Node to be marked.\n\t */\n\tmarkToSync( type, node ) {\n\t\tif ( type === 'text' ) {\n\t\t\tif ( this.domConverter.mapViewToDom( node.parent ) ) {\n\t\t\t\tthis.markedTexts.add( node );\n\t\t\t}\n\t\t} else {\n\t\t\t// If the node has no DOM element it is not rendered yet,\n\t\t\t// its children/attributes do not need to be marked to be sync.\n\t\t\tif ( !this.domConverter.mapViewToDom( node ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( type === 'attributes' ) {\n\t\t\t\tthis.markedAttributes.add( node );\n\t\t\t} else if ( type === 'children' ) {\n\t\t\t\tthis.markedChildren.add( node );\n\t\t\t} else {\n\t\t\t\t/**\n\t\t\t\t * Unknown type passed to Renderer.markToSync.\n\t\t\t\t *\n\t\t\t\t * @error renderer-unknown-type\n\t\t\t\t */\n\t\t\t\tthrow new CKEditorError( 'view-renderer-unknown-type: Unknown type passed to Renderer.markToSync.', this );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Renders all buffered changes ({@link #markedAttributes}, {@link #markedChildren} and {@link #markedTexts}) and\n\t * the current view selection (if needed) to the DOM by applying a minimal set of changes to it.\n\t *\n\t * Renderer tries not to break the text composition (e.g. IME) and x-index of the selection,\n\t * so it does as little as it is needed to update the DOM.\n\t *\n\t * Renderer also handles {@link module:engine/view/filler fillers}. Especially, it checks if the inline filler is needed\n\t * at the selection position and adds or removes it. To prevent breaking text composition inline filler will not be\n\t * removed as long as the selection is in the text node which needed it at first.\n\t */\n\trender() {\n\t\tlet inlineFillerPosition;\n\n\t\t// Refresh mappings.\n\t\tfor ( const element of this.markedChildren ) {\n\t\t\tthis._updateChildrenMappings( element );\n\t\t}\n\n\t\t// There was inline filler rendered in the DOM but it's not\n\t\t// at the selection position any more, so we can remove it\n\t\t// (cause even if it's needed, it must be placed in another location).\n\t\tif ( this._inlineFiller && !this._isSelectionInInlineFiller() ) {\n\t\t\tthis._removeInlineFiller();\n\t\t}\n\n\t\t// If we've got the filler, let's try to guess its position in the view.\n\t\tif ( this._inlineFiller ) {\n\t\t\tinlineFillerPosition = this._getInlineFillerPosition();\n\t\t}\n\t\t// Otherwise, if it's needed, create it at the selection position.\n\t\telse if ( this._needsInlineFillerAtSelection() ) {\n\t\t\tinlineFillerPosition = this.selection.getFirstPosition();\n\n\t\t\t// Do not use `markToSync` so it will be added even if the parent is already added.\n\t\t\tthis.markedChildren.add( inlineFillerPosition.parent );\n\t\t}\n\n\t\tfor ( const element of this.markedAttributes ) {\n\t\t\tthis._updateAttrs( element );\n\t\t}\n\n\t\tfor ( const element of this.markedChildren ) {\n\t\t\tthis._updateChildren( element, { inlineFillerPosition } );\n\t\t}\n\n\t\tfor ( const node of this.markedTexts ) {\n\t\t\tif ( !this.markedChildren.has( node.parent ) && this.domConverter.mapViewToDom( node.parent ) ) {\n\t\t\t\tthis._updateText( node, { inlineFillerPosition } );\n\t\t\t}\n\t\t}\n\n\t\t// Check whether the inline filler is required and where it really is in the DOM.\n\t\t// At this point in most cases it will be in the DOM, but there are exceptions.\n\t\t// For example, if the inline filler was deep in the created DOM structure, it will not be created.\n\t\t// Similarly, if it was removed at the beginning of this function and then neither text nor children were updated,\n\t\t// it will not be present.\n\t\t// Fix those and similar scenarios.\n\t\tif ( inlineFillerPosition ) {\n\t\t\tconst fillerDomPosition = this.domConverter.viewPositionToDom( inlineFillerPosition );\n\t\t\tconst domDocument = fillerDomPosition.parent.ownerDocument;\n\n\t\t\tif ( !startsWithFiller( fillerDomPosition.parent ) ) {\n\t\t\t\t// Filler has not been created at filler position. Create it now.\n\t\t\t\tthis._inlineFiller = addInlineFiller( domDocument, fillerDomPosition.parent, fillerDomPosition.offset );\n\t\t\t} else {\n\t\t\t\t// Filler has been found, save it.\n\t\t\t\tthis._inlineFiller = fillerDomPosition.parent;\n\t\t\t}\n\t\t} else {\n\t\t\t// There is no filler needed.\n\t\t\tthis._inlineFiller = null;\n\t\t}\n\n\t\tthis._updateSelection();\n\t\tthis._updateFocus();\n\n\t\tthis.markedTexts.clear();\n\t\tthis.markedAttributes.clear();\n\t\tthis.markedChildren.clear();\n\t}\n\n\t/**\n\t * Updates mappings of view element's children.\n\t *\n\t * Children that were replaced in the view structure by similar elements (same tag name) are treated as 'replaced'.\n\t * This means that their mappings can be updated so the new view elements are mapped to the existing DOM elements.\n\t * Thanks to that these elements do not need to be re-rendered completely.\n\t *\n\t * @private\n\t * @param {module:engine/view/node~Node} viewElement The view element whose children mappings will be updated.\n\t */\n\t_updateChildrenMappings( viewElement ) {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that it was already removed from DOM and there is no need to process it.\n\t\t\treturn;\n\t\t}\n\n\t\tconst actualDomChildren = this.domConverter.mapViewToDom( viewElement ).childNodes;\n\t\tconst expectedDomChildren = Array.from(\n\t\t\tthis.domConverter.viewChildrenToDom( viewElement, domElement.ownerDocument, { withChildren: false } )\n\t\t);\n\t\tconst diff = this._diffNodeLists( actualDomChildren, expectedDomChildren );\n\t\tconst actions = this._findReplaceActions( diff, actualDomChildren, expectedDomChildren );\n\n\t\tif ( actions.indexOf( 'replace' ) !== -1 ) {\n\t\t\tconst counter = { equal: 0, insert: 0, delete: 0 };\n\n\t\t\tfor ( const action of actions ) {\n\t\t\t\tif ( action === 'replace' ) {\n\t\t\t\t\tconst insertIndex = counter.equal + counter.insert;\n\t\t\t\t\tconst deleteIndex = counter.equal + counter.delete;\n\t\t\t\t\tconst viewChild = viewElement.getChild( insertIndex );\n\n\t\t\t\t\t// The 'uiElement' is a special one and its children are not stored in a view (#799),\n\t\t\t\t\t// so we cannot use it with replacing flow (since it uses view children during rendering\n\t\t\t\t\t// which will always result in rendering empty element).\n\t\t\t\t\tif ( viewChild && !viewChild.is( 'uiElement' ) ) {\n\t\t\t\t\t\tthis._updateElementMappings( viewChild, actualDomChildren[ deleteIndex ] );\n\t\t\t\t\t}\n\n\t\t\t\t\tremove( expectedDomChildren[ insertIndex ] );\n\t\t\t\t\tcounter.equal++;\n\t\t\t\t} else {\n\t\t\t\t\tcounter[ action ]++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Updates mappings of a given view element.\n\t *\n\t * @private\n\t * @param {module:engine/view/node~Node} viewElement The view element whose mappings will be updated.\n\t * @param {Node} domElement The DOM element representing the given view element.\n\t */\n\t_updateElementMappings( viewElement, domElement ) {\n\t\t// Remap 'DomConverter' bindings.\n\t\tthis.domConverter.unbindDomElement( domElement );\n\t\tthis.domConverter.bindElements( domElement, viewElement );\n\n\t\t// View element may have children which needs to be updated, but are not marked, mark them to update.\n\t\tthis.markedChildren.add( viewElement );\n\n\t\t// Because we replace new view element mapping with the existing one, the corresponding DOM element\n\t\t// will not be rerendered. The new view element may have different attributes than the previous one.\n\t\t// Since its corresponding DOM element will not be rerendered, new attributes will not be added\n\t\t// to the DOM, so we need to mark it here to make sure its attributes gets updated. See #1427 for more\n\t\t// detailed case study.\n\t\t// Also there are cases where replaced element is removed from the view structure and then has\n\t\t// its attributes changed or removed. In such cases the element will not be present in `markedAttributes`\n\t\t// and also may be the same (`element.isSimilar()`) as the reused element not having its attributes updated.\n\t\t// To prevent such situations we always mark reused element to have its attributes rerenderd (#1560).\n\t\tthis.markedAttributes.add( viewElement );\n\t}\n\n\t/**\n\t * Gets the position of the inline filler based on the current selection.\n\t * Here, we assume that we know that the filler is needed and\n\t * {@link #_isSelectionInInlineFiller is at the selection position}, and, since it is needed,\n\t * it is somewhere at the selection position.\n\t *\n\t * Note: The filler position cannot be restored based on the filler's DOM text node, because\n\t * when this method is called (before rendering), the bindings will often be broken. View-to-DOM\n\t * bindings are only dependable after rendering.\n\t *\n\t * @private\n\t * @returns {module:engine/view/position~Position}\n\t */\n\t_getInlineFillerPosition() {\n\t\tconst firstPos = this.selection.getFirstPosition();\n\n\t\tif ( firstPos.parent.is( 'text' ) ) {\n\t\t\treturn ViewPosition._createBefore( this.selection.getFirstPosition().parent );\n\t\t} else {\n\t\t\treturn firstPos;\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if the selection has not left the inline filler's text node.\n\t * If it is `true`, it means that the filler had been added for a reason and the selection did not\n\t * leave the filler's text node. For example, the user can be in the middle of a composition so it should not be touched.\n\t *\n\t * @private\n\t * @returns {Boolean} `true` if the inline filler and selection are in the same place.\n\t */\n\t_isSelectionInInlineFiller() {\n\t\tif ( this.selection.rangeCount != 1 || !this.selection.isCollapsed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Note, we can't check if selection's position equals position of the\n\t\t// this._inlineFiller node, because of #663. We may not be able to calculate\n\t\t// the filler's position in the view at this stage.\n\t\t// Instead, we check it the other way – whether selection is anchored in\n\t\t// that text node or next to it.\n\n\t\t// Possible options are:\n\t\t// \"FILLER{}\"\n\t\t// \"FILLERadded-text{}\"\n\t\tconst selectionPosition = this.selection.getFirstPosition();\n\t\tconst position = this.domConverter.viewPositionToDom( selectionPosition );\n\n\t\tif ( position && isText( position.parent ) && startsWithFiller( position.parent ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Removes the inline filler.\n\t *\n\t * @private\n\t */\n\t_removeInlineFiller() {\n\t\tconst domFillerNode = this._inlineFiller;\n\n\t\t// Something weird happened and the stored node doesn't contain the filler's text.\n\t\tif ( !startsWithFiller( domFillerNode ) ) {\n\t\t\t/**\n\t\t\t * The inline filler node was lost. Most likely, something overwrote the filler text node\n\t\t\t * in the DOM.\n\t\t\t *\n\t\t\t * @error view-renderer-filler-was-lost\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-renderer-filler-was-lost: The inline filler node was lost.', this );\n\t\t}\n\n\t\tif ( isInlineFiller( domFillerNode ) ) {\n\t\t\tdomFillerNode.parentNode.removeChild( domFillerNode );\n\t\t} else {\n\t\t\tdomFillerNode.data = domFillerNode.data.substr( INLINE_FILLER_LENGTH );\n\t\t}\n\n\t\tthis._inlineFiller = null;\n\t}\n\n\t/**\n\t * Checks if the inline {@link module:engine/view/filler filler} should be added.\n\t *\n\t * @private\n\t * @returns {Boolean} `true` if the inline filler should be added.\n\t */\n\t_needsInlineFillerAtSelection() {\n\t\tif ( this.selection.rangeCount != 1 || !this.selection.isCollapsed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst selectionPosition = this.selection.getFirstPosition();\n\t\tconst selectionParent = selectionPosition.parent;\n\t\tconst selectionOffset = selectionPosition.offset;\n\n\t\t// If there is no DOM root we do not care about fillers.\n\t\tif ( !this.domConverter.mapViewToDom( selectionParent.root ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !( selectionParent.is( 'element' ) ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Prevent adding inline filler inside elements with contenteditable=false.\n\t\t// https://github.com/ckeditor/ckeditor5-engine/issues/1170\n\t\tif ( !isEditable( selectionParent ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// We have block filler, we do not need inline one.\n\t\tif ( selectionOffset === selectionParent.getFillerOffset() ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst nodeBefore = selectionPosition.nodeBefore;\n\t\tconst nodeAfter = selectionPosition.nodeAfter;\n\n\t\tif ( nodeBefore instanceof ViewText || nodeAfter instanceof ViewText ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks if text needs to be updated and possibly updates it.\n\t *\n\t * @private\n\t * @param {module:engine/view/text~Text} viewText View text to update.\n\t * @param {Object} options\n\t * @param {module:engine/view/position~Position} options.inlineFillerPosition The position where the inline\n\t * filler should be rendered.\n\t */\n\t_updateText( viewText, options ) {\n\t\tconst domText = this.domConverter.findCorrespondingDomText( viewText );\n\t\tconst newDomText = this.domConverter.viewToDom( viewText, domText.ownerDocument );\n\n\t\tconst actualText = domText.data;\n\t\tlet expectedText = newDomText.data;\n\n\t\tconst filler = options.inlineFillerPosition;\n\n\t\tif ( filler && filler.parent == viewText.parent && filler.offset == viewText.index ) {\n\t\t\texpectedText = INLINE_FILLER + expectedText;\n\t\t}\n\n\t\tif ( actualText != expectedText ) {\n\t\t\tconst actions = fastDiff( actualText, expectedText );\n\n\t\t\tfor ( const action of actions ) {\n\t\t\t\tif ( action.type === 'insert' ) {\n\t\t\t\t\tdomText.insertData( action.index, action.values.join( '' ) );\n\t\t\t\t} else { // 'delete'\n\t\t\t\t\tdomText.deleteData( action.index, action.howMany );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if attribute list needs to be updated and possibly updates it.\n\t *\n\t * @private\n\t * @param {module:engine/view/element~Element} viewElement The view element to update.\n\t */\n\t_updateAttrs( viewElement ) {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that 'viewElement' is outdated as its mapping was updated\n\t\t\t// in 'this._updateChildrenMappings()'. There is no need to process it as new view element which\n\t\t\t// replaced old 'viewElement' mapping was also added to 'this.markedAttributes'\n\t\t\t// in 'this._updateChildrenMappings()' so it will be processed separately.\n\t\t\treturn;\n\t\t}\n\n\t\tconst domAttrKeys = Array.from( domElement.attributes ).map( attr => attr.name );\n\t\tconst viewAttrKeys = viewElement.getAttributeKeys();\n\n\t\t// Add or overwrite attributes.\n\t\tfor ( const key of viewAttrKeys ) {\n\t\t\tdomElement.setAttribute( key, viewElement.getAttribute( key ) );\n\t\t}\n\n\t\t// Remove from DOM attributes which do not exists in the view.\n\t\tfor ( const key of domAttrKeys ) {\n\t\t\tif ( !viewElement.hasAttribute( key ) ) {\n\t\t\t\tdomElement.removeAttribute( key );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if elements child list needs to be updated and possibly updates it.\n\t *\n\t * @private\n\t * @param {module:engine/view/element~Element} viewElement View element to update.\n\t * @param {Object} options\n\t * @param {module:engine/view/position~Position} options.inlineFillerPosition The position where the inline\n\t * filler should be rendered.\n\t */\n\t_updateChildren( viewElement, options ) {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that it was already removed from DOM.\n\t\t\t// There is no need to process it. It will be processed when re-inserted.\n\t\t\treturn;\n\t\t}\n\n\t\tconst inlineFillerPosition = options.inlineFillerPosition;\n\t\tconst actualDomChildren = this.domConverter.mapViewToDom( viewElement ).childNodes;\n\t\tconst expectedDomChildren = Array.from(\n\t\t\tthis.domConverter.viewChildrenToDom( viewElement, domElement.ownerDocument, { bind: true, inlineFillerPosition } )\n\t\t);\n\n\t\t// Inline filler element has to be created as it is present in the DOM, but not in the view. It is required\n\t\t// during diffing so text nodes could be compared correctly and also during rendering to maintain\n\t\t// proper order and indexes while updating the DOM.\n\t\tif ( inlineFillerPosition && inlineFillerPosition.parent === viewElement ) {\n\t\t\taddInlineFiller( domElement.ownerDocument, expectedDomChildren, inlineFillerPosition.offset );\n\t\t}\n\n\t\tconst diff = this._diffNodeLists( actualDomChildren, expectedDomChildren );\n\n\t\tlet i = 0;\n\t\tconst nodesToUnbind = new Set();\n\n\t\tfor ( const action of diff ) {\n\t\t\tif ( action === 'insert' ) {\n\t\t\t\tinsertAt( domElement, i, expectedDomChildren[ i ] );\n\t\t\t\ti++;\n\t\t\t} else if ( action === 'delete' ) {\n\t\t\t\tnodesToUnbind.add( actualDomChildren[ i ] );\n\t\t\t\tremove( actualDomChildren[ i ] );\n\t\t\t} else { // 'equal'\n\t\t\t\t// Force updating text nodes inside elements which did not change and do not need to be re-rendered (#1125).\n\t\t\t\tthis._markDescendantTextToSync( this.domConverter.domToView( expectedDomChildren[ i ] ) );\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\t// Unbind removed nodes. When node does not have a parent it means that it was removed from DOM tree during\n\t\t// comparision with the expected DOM. We don't need to check child nodes, because if child node was reinserted,\n\t\t// it was moved to DOM tree out of the removed node.\n\t\tfor ( const node of nodesToUnbind ) {\n\t\t\tif ( !node.parentNode ) {\n\t\t\t\tthis.domConverter.unbindDomElement( node );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shorthand for diffing two arrays or node lists of DOM nodes.\n\t *\n\t * @private\n\t * @param {Array.|NodeList} actualDomChildren Actual DOM children\n\t * @param {Array.|NodeList} expectedDomChildren Expected DOM children.\n\t * @returns {Array.} The list of actions based on the {@link module:utils/diff~diff} function.\n\t */\n\t_diffNodeLists( actualDomChildren, expectedDomChildren ) {\n\t\tactualDomChildren = filterOutFakeSelectionContainer( actualDomChildren, this._fakeSelectionContainer );\n\n\t\treturn diff( actualDomChildren, expectedDomChildren, sameNodes.bind( null, this.domConverter ) );\n\t}\n\n\t/**\n\t * Finds DOM nodes that were replaced with the similar nodes (same tag name) in the view. All nodes are compared\n\t * within one `insert`/`delete` action group, for example:\n\t *\n\t * \t\tActual DOM:\t\t

FooBarBazBax

\n\t * \t\tExpected DOM:\t

Bar123Baz456

\n\t * \t\tInput actions:\t[ insert, insert, delete, delete, equal, insert, delete ]\n\t * \t\tOutput actions:\t[ insert, replace, delete, equal, replace ]\n\t *\n\t * @private\n\t * @param {Array.} actions Actions array which is a result of the {@link module:utils/diff~diff} function.\n\t * @param {Array.|NodeList} actualDom Actual DOM children\n\t * @param {Array.} expectedDom Expected DOM children.\n\t * @returns {Array.} Actions array modified with the `replace` actions.\n\t */\n\t_findReplaceActions( actions, actualDom, expectedDom ) {\n\t\t// If there is no both 'insert' and 'delete' actions, no need to check for replaced elements.\n\t\tif ( actions.indexOf( 'insert' ) === -1 || actions.indexOf( 'delete' ) === -1 ) {\n\t\t\treturn actions;\n\t\t}\n\n\t\tlet newActions = [];\n\t\tlet actualSlice = [];\n\t\tlet expectedSlice = [];\n\n\t\tconst counter = { equal: 0, insert: 0, delete: 0 };\n\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action === 'insert' ) {\n\t\t\t\texpectedSlice.push( expectedDom[ counter.equal + counter.insert ] );\n\t\t\t} else if ( action === 'delete' ) {\n\t\t\t\tactualSlice.push( actualDom[ counter.equal + counter.delete ] );\n\t\t\t} else { // equal\n\t\t\t\tnewActions = newActions.concat( diff( actualSlice, expectedSlice, areSimilar ).map( x => x === 'equal' ? 'replace' : x ) );\n\t\t\t\tnewActions.push( 'equal' );\n\t\t\t\t// Reset stored elements on 'equal'.\n\t\t\t\tactualSlice = [];\n\t\t\t\texpectedSlice = [];\n\t\t\t}\n\t\t\tcounter[ action ]++;\n\t\t}\n\n\t\treturn newActions.concat( diff( actualSlice, expectedSlice, areSimilar ).map( x => x === 'equal' ? 'replace' : x ) );\n\t}\n\n\t/**\n\t * Marks text nodes to be synchronized.\n\t *\n\t * If a text node is passed, it will be marked. If an element is passed, all descendant text nodes inside it will be marked.\n\t *\n\t * @private\n\t * @param {module:engine/view/node~Node} viewNode View node to sync.\n\t */\n\t_markDescendantTextToSync( viewNode ) {\n\t\tif ( !viewNode ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( viewNode.is( 'text' ) ) {\n\t\t\tthis.markedTexts.add( viewNode );\n\t\t} else if ( viewNode.is( 'element' ) ) {\n\t\t\tfor ( const child of viewNode.getChildren() ) {\n\t\t\t\tthis._markDescendantTextToSync( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the selection needs to be updated and possibly updates it.\n\t *\n\t * @private\n\t */\n\t_updateSelection() {\n\t\t// If there is no selection - remove DOM and fake selections.\n\t\tif ( this.selection.rangeCount === 0 ) {\n\t\t\tthis._removeDomSelection();\n\t\t\tthis._removeFakeSelection();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst domRoot = this.domConverter.mapViewToDom( this.selection.editableElement );\n\n\t\t// Do nothing if there is no focus, or there is no DOM element corresponding to selection's editable element.\n\t\tif ( !this.isFocused || !domRoot ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Render selection.\n\t\tif ( this.selection.isFake ) {\n\t\t\tthis._updateFakeSelection( domRoot );\n\t\t} else {\n\t\t\tthis._removeFakeSelection();\n\t\t\tthis._updateDomSelection( domRoot );\n\t\t}\n\t}\n\n\t/**\n\t * Updates the fake selection.\n\t *\n\t * @private\n\t * @param {HTMLElement} domRoot A valid DOM root where the fake selection container should be added.\n\t */\n\t_updateFakeSelection( domRoot ) {\n\t\tconst domDocument = domRoot.ownerDocument;\n\n\t\tif ( !this._fakeSelectionContainer ) {\n\t\t\tthis._fakeSelectionContainer = createFakeSelectionContainer( domDocument );\n\t\t}\n\n\t\tconst container = this._fakeSelectionContainer;\n\n\t\t// Bind fake selection container with the current selection *position*.\n\t\tthis.domConverter.bindFakeSelection( container, this.selection );\n\n\t\tif ( !this._fakeSelectionNeedsUpdate( domRoot ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !container.parentElement || container.parentElement != domRoot ) {\n\t\t\tdomRoot.appendChild( container );\n\t\t}\n\n\t\tcontainer.textContent = this.selection.fakeSelectionLabel || '\\u00A0';\n\n\t\tconst domSelection = domDocument.getSelection();\n\t\tconst domRange = domDocument.createRange();\n\n\t\tdomSelection.removeAllRanges();\n\t\tdomRange.selectNodeContents( container );\n\t\tdomSelection.addRange( domRange );\n\t}\n\n\t/**\n\t * Updates the DOM selection.\n\t *\n\t * @private\n\t * @param {HTMLElement} domRoot A valid DOM root where the DOM selection should be rendered.\n\t */\n\t_updateDomSelection( domRoot ) {\n\t\tconst domSelection = domRoot.ownerDocument.defaultView.getSelection();\n\n\t\t// Let's check whether DOM selection needs updating at all.\n\t\tif ( !this._domSelectionNeedsUpdate( domSelection ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Multi-range selection is not available in most browsers, and, at least in Chrome, trying to\n\t\t// set such selection, that is not continuous, throws an error. Because of that, we will just use anchor\n\t\t// and focus of view selection.\n\t\t// Since we are not supporting multi-range selection, we also do not need to check if proper editable is\n\t\t// selected. If there is any editable selected, it is okay (editable is taken from selection anchor).\n\t\tconst anchor = this.domConverter.viewPositionToDom( this.selection.anchor );\n\t\tconst focus = this.domConverter.viewPositionToDom( this.selection.focus );\n\n\t\t// Focus the new editing host.\n\t\t// Otherwise, FF may throw an error (https://github.com/ckeditor/ckeditor5/issues/721).\n\t\tdomRoot.focus();\n\n\t\tdomSelection.collapse( anchor.parent, anchor.offset );\n\t\tdomSelection.extend( focus.parent, focus.offset );\n\n\t\t// Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n\t\tif ( env.isGecko ) {\n\t\t\tfixGeckoSelectionAfterBr( focus, domSelection );\n\t\t}\n\t}\n\n\t/**\n\t * Checks whether a given DOM selection needs to be updated.\n\t *\n\t * @private\n\t * @param {Selection} domSelection The DOM selection to check.\n\t * @returns {Boolean}\n\t */\n\t_domSelectionNeedsUpdate( domSelection ) {\n\t\tif ( !this.domConverter.isDomSelectionCorrect( domSelection ) ) {\n\t\t\t// Current DOM selection is in incorrect position. We need to update it.\n\t\t\treturn true;\n\t\t}\n\n\t\tconst oldViewSelection = domSelection && this.domConverter.domSelectionToView( domSelection );\n\n\t\tif ( oldViewSelection && this.selection.isEqual( oldViewSelection ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If selection is not collapsed, it does not need to be updated if it is similar.\n\t\tif ( !this.selection.isCollapsed && this.selection.isSimilar( oldViewSelection ) ) {\n\t\t\t// Selection did not changed and is correct, do not update.\n\t\t\treturn false;\n\t\t}\n\n\t\t// Selections are not similar.\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks whether the fake selection needs to be updated.\n\t *\n\t * @private\n\t * @param {HTMLElement} domRoot A valid DOM root where a new fake selection container should be added.\n\t * @returns {Boolean}\n\t */\n\t_fakeSelectionNeedsUpdate( domRoot ) {\n\t\tconst container = this._fakeSelectionContainer;\n\t\tconst domSelection = domRoot.ownerDocument.getSelection();\n\n\t\t// Fake selection needs to be updated if there's no fake selection container, or the container currently sits\n\t\t// in a different root.\n\t\tif ( !container || container.parentElement !== domRoot ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Make sure that the selection actually is within the fake selection.\n\t\tif ( domSelection.anchorNode !== container && !container.contains( domSelection.anchorNode ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn container.textContent !== this.selection.fakeSelectionLabel;\n\t}\n\n\t/**\n\t * Removes the DOM selection.\n\t *\n\t * @private\n\t */\n\t_removeDomSelection() {\n\t\tfor ( const doc of this.domDocuments ) {\n\t\t\tconst domSelection = doc.getSelection();\n\n\t\t\tif ( domSelection.rangeCount ) {\n\t\t\t\tconst activeDomElement = doc.activeElement;\n\t\t\t\tconst viewElement = this.domConverter.mapDomToView( activeDomElement );\n\n\t\t\t\tif ( activeDomElement && viewElement ) {\n\t\t\t\t\tdoc.getSelection().removeAllRanges();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Removes the fake selection.\n\t *\n\t * @private\n\t */\n\t_removeFakeSelection() {\n\t\tconst container = this._fakeSelectionContainer;\n\n\t\tif ( container ) {\n\t\t\tcontainer.remove();\n\t\t}\n\t}\n\n\t/**\n\t * Checks if focus needs to be updated and possibly updates it.\n\t *\n\t * @private\n\t */\n\t_updateFocus() {\n\t\tif ( this.isFocused ) {\n\t\t\tconst editable = this.selection.editableElement;\n\n\t\t\tif ( editable ) {\n\t\t\t\tthis.domConverter.focus( editable );\n\t\t\t}\n\t\t}\n\t}\n}\n\nmix( Renderer, ObservableMixin );\n\n// Checks if provided element is editable.\n//\n// @private\n// @param {module:engine/view/element~Element} element\n// @returns {Boolean}\nfunction isEditable( element ) {\n\tif ( element.getAttribute( 'contenteditable' ) == 'false' ) {\n\t\treturn false;\n\t}\n\n\tconst parent = element.findAncestor( element => element.hasAttribute( 'contenteditable' ) );\n\n\treturn !parent || parent.getAttribute( 'contenteditable' ) == 'true';\n}\n\n// Adds inline filler at a given position.\n//\n// The position can be given as an array of DOM nodes and an offset in that array,\n// or a DOM parent element and an offset in that element.\n//\n// @private\n// @param {Document} domDocument\n// @param {Element|Array.} domParentOrArray\n// @param {Number} offset\n// @returns {Text} The DOM text node that contains an inline filler.\nfunction addInlineFiller( domDocument, domParentOrArray, offset ) {\n\tconst childNodes = domParentOrArray instanceof Array ? domParentOrArray : domParentOrArray.childNodes;\n\tconst nodeAfterFiller = childNodes[ offset ];\n\n\tif ( isText( nodeAfterFiller ) ) {\n\t\tnodeAfterFiller.data = INLINE_FILLER + nodeAfterFiller.data;\n\n\t\treturn nodeAfterFiller;\n\t} else {\n\t\tconst fillerNode = domDocument.createTextNode( INLINE_FILLER );\n\n\t\tif ( Array.isArray( domParentOrArray ) ) {\n\t\t\tchildNodes.splice( offset, 0, fillerNode );\n\t\t} else {\n\t\t\tinsertAt( domParentOrArray, offset, fillerNode );\n\t\t}\n\n\t\treturn fillerNode;\n\t}\n}\n\n// Whether two DOM nodes should be considered as similar.\n// Nodes are considered similar if they have the same tag name.\n//\n// @private\n// @param {Node} node1\n// @param {Node} node2\n// @returns {Boolean}\nfunction areSimilar( node1, node2 ) {\n\treturn isNode( node1 ) && isNode( node2 ) &&\n\t\t!isText( node1 ) && !isText( node2 ) &&\n\t\tnode1.tagName.toLowerCase() === node2.tagName.toLowerCase();\n}\n\n// Whether two dom nodes should be considered as the same.\n// Two nodes which are considered the same are:\n//\n//\t\t* Text nodes with the same text.\n//\t\t* Element nodes represented by the same object.\n//\t\t* Two block filler elements.\n//\n// @private\n// @param {String} blockFillerMode Block filler mode, see {@link module:engine/view/domconverter~DomConverter#blockFillerMode}.\n// @param {Node} node1\n// @param {Node} node2\n// @returns {Boolean}\nfunction sameNodes( domConverter, actualDomChild, expectedDomChild ) {\n\t// Elements.\n\tif ( actualDomChild === expectedDomChild ) {\n\t\treturn true;\n\t}\n\t// Texts.\n\telse if ( isText( actualDomChild ) && isText( expectedDomChild ) ) {\n\t\treturn actualDomChild.data === expectedDomChild.data;\n\t}\n\t// Block fillers.\n\telse if ( domConverter.isBlockFiller( actualDomChild ) &&\n\t\tdomConverter.isBlockFiller( expectedDomChild ) ) {\n\t\treturn true;\n\t}\n\n\t// Not matching types.\n\treturn false;\n}\n\n// The following is a Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n// When the native DOM selection is at the end of the block and preceded by
e.g.\n//\n//\t\t

foo
[]

\n//\n// which happens a lot when using the soft line break, the browser fails to (visually) move the\n// caret to the new line. A quick fix is as simple as force–refreshing the selection with the same range.\nfunction fixGeckoSelectionAfterBr( focus, domSelection ) {\n\tconst parent = focus.parent;\n\n\t// This fix works only when the focus point is at the very end of an element.\n\t// There is no point in running it in cases unrelated to the browser bug.\n\tif ( parent.nodeType != Node.ELEMENT_NODE || focus.offset != parent.childNodes.length - 1 ) {\n\t\treturn;\n\t}\n\n\tconst childAtOffset = parent.childNodes[ focus.offset ];\n\n\t// To stay on the safe side, the fix being as specific as possible, it targets only the\n\t// selection which is at the very end of the element and preceded by
.\n\tif ( childAtOffset && childAtOffset.tagName == 'BR' ) {\n\t\tdomSelection.addRange( domSelection.getRangeAt( 0 ) );\n\t}\n}\n\nfunction filterOutFakeSelectionContainer( domChildList, fakeSelectionContainer ) {\n\tconst childList = Array.from( domChildList );\n\n\tif ( childList.length == 0 || !fakeSelectionContainer ) {\n\t\treturn childList;\n\t}\n\n\tconst last = childList[ childList.length - 1 ];\n\n\tif ( last == fakeSelectionContainer ) {\n\t\tchildList.pop();\n\t}\n\n\treturn childList;\n}\n\n// Creates a fake selection container for a given document.\n//\n// @private\n// @param {Document} domDocument\n// @returns {HTMLElement}\nfunction createFakeSelectionContainer( domDocument ) {\n\tconst container = domDocument.createElement( 'div' );\n\n\tObject.assign( container.style, {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: '-9999px',\n\t\t// See https://github.com/ckeditor/ckeditor5/issues/752.\n\t\twidth: '42px'\n\t} );\n\n\t// Fill it with a text node so we can update it later.\n\tcontainer.textContent = '\\u00A0';\n\n\treturn container;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals window, document */\n\n/**\n * @module utils/dom/global\n */\n\n/**\n * A helper (module) giving an access to the global DOM objects such as `window` and\n * `document`. Accessing these objects using this helper allows easy and bulletproof\n * testing, i.e. stubbing native properties:\n *\n *\t\timport global from 'ckeditor5/utils/dom/global.js';\n *\n *\t\t// This stub will work for any code using global module.\n *\t\ttestUtils.sinon.stub( global, 'window', {\n *\t\t\tinnerWidth: 10000\n *\t\t} );\n *\n *\t\tconsole.log( global.window.innerWidth );\n */\nexport default { window, document };\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/indexof\n */\n\n/**\n * Returns index of the node in the parent element.\n *\n * @param {Node} node Node which index is tested.\n * @returns {Number} Index of the node in the parent element. Returns 0 if node has no parent.\n */\nexport default function indexOf( node ) {\n\tlet index = 0;\n\n\twhile ( node.previousSibling ) {\n\t\tnode = node.previousSibling;\n\t\tindex++;\n\t}\n\n\treturn index;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* globals Node */\n\n/**\n * @module utils/dom/getancestors\n */\n\n/**\n * Returns all ancestors of given DOM node, starting from the top-most (root). Includes the given node itself. If the\n * node is a part of `DocumentFragment` that `DocumentFragment` will be returned. In contrary, if the node is\n * appended to a `Document`, that `Document` will not be returned (algorithms operating on DOM tree care for `Document#documentElement`\n * at most, which will be returned).\n *\n * @param {Node} node DOM node.\n * @returns {Array.} Array of given `node` parents.\n */\nexport default function getAncestors( node ) {\n\tconst nodes = [];\n\n\t// We are interested in `Node`s `DocumentFragment`s only.\n\twhile ( node && node.nodeType != Node.DOCUMENT_NODE ) {\n\t\tnodes.unshift( node );\n\t\tnode = node.parentNode;\n\t}\n\n\treturn nodes;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/domconverter\n */\n\n/* globals document, Node, NodeFilter, Text */\n\nimport ViewText from './text';\nimport ViewElement from './element';\nimport ViewPosition from './position';\nimport ViewRange from './range';\nimport ViewSelection from './selection';\nimport ViewDocumentFragment from './documentfragment';\nimport ViewTreeWalker from './treewalker';\nimport { BR_FILLER, getDataWithoutFiller, INLINE_FILLER_LENGTH, isInlineFiller, NBSP_FILLER, startsWithFiller } from './filler';\n\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\nimport indexOf from '@ckeditor/ckeditor5-utils/src/dom/indexof';\nimport getAncestors from '@ckeditor/ckeditor5-utils/src/dom/getancestors';\nimport getCommonAncestor from '@ckeditor/ckeditor5-utils/src/dom/getcommonancestor';\nimport isText from '@ckeditor/ckeditor5-utils/src/dom/istext';\nimport { isElement } from 'lodash-es';\n\n// eslint-disable-next-line new-cap\nconst BR_FILLER_REF = BR_FILLER( document );\n\n/**\n * DomConverter is a set of tools to do transformations between DOM nodes and view nodes. It also handles\n * {@link module:engine/view/domconverter~DomConverter#bindElements binding} these nodes.\n *\n * The instance of DOMConverter is available in {@link module:engine/view/view~View#domConverter `editor.editing.view.domConverter`}.\n *\n * DomConverter does not check which nodes should be rendered (use {@link module:engine/view/renderer~Renderer}), does not keep a\n * state of a tree nor keeps synchronization between tree view and DOM tree (use {@link module:engine/view/document~Document}).\n *\n * DomConverter keeps DOM elements to View element bindings, so when the converter will be destroyed, the binding will\n * be lost. Two converters will keep separate binding maps, so one tree view can be bound with two DOM trees.\n */\nexport default class DomConverter {\n\t/**\n\t * Creates DOM converter.\n\t *\n\t * @param {Object} options Object with configuration options.\n\t * @param {module:engine/view/filler~BlockFillerMode} [options.blockFillerMode='br'] The type of the block filler to use.\n\t */\n\tconstructor( options = {} ) {\n\t\t/**\n\t\t * The mode of a block filler used by DOM converter.\n\t\t *\n\t\t * @readonly\n\t\t * @member {'br'|'nbsp'} module:engine/view/domconverter~DomConverter#blockFillerMode\n\t\t */\n\t\tthis.blockFillerMode = options.blockFillerMode || 'br';\n\n\t\t/**\n\t\t * Elements which are considered pre-formatted elements.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Array.} module:engine/view/domconverter~DomConverter#preElements\n\t\t */\n\t\tthis.preElements = [ 'pre' ];\n\n\t\t/**\n\t\t * Elements which are considered block elements (and hence should be filled with a\n\t\t * {@link #isBlockFiller block filler}).\n\t\t *\n\t\t * Whether an element is considered a block element also affects handling of trailing whitespaces.\n\t\t *\n\t\t * You can extend this array if you introduce support for block elements which are not yet recognized here.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Array.} module:engine/view/domconverter~DomConverter#blockElements\n\t\t */\n\t\tthis.blockElements = [ 'p', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'dd', 'dt', 'figcaption' ];\n\n\t\t/**\n\t\t * Block {@link module:engine/view/filler filler} creator, which is used to create all block fillers during the\n\t\t * view to DOM conversion and to recognize block fillers during the DOM to view conversion.\n\t\t *\n\t\t * @readonly\n\t\t * @private\n\t\t * @member {Function} module:engine/view/domconverter~DomConverter#_blockFiller\n\t\t */\n\t\tthis._blockFiller = this.blockFillerMode == 'br' ? BR_FILLER : NBSP_FILLER;\n\n\t\t/**\n\t\t * DOM to View mapping.\n\t\t *\n\t\t * @private\n\t\t * @member {WeakMap} module:engine/view/domconverter~DomConverter#_domToViewMapping\n\t\t */\n\t\tthis._domToViewMapping = new WeakMap();\n\n\t\t/**\n\t\t * View to DOM mapping.\n\t\t *\n\t\t * @private\n\t\t * @member {WeakMap} module:engine/view/domconverter~DomConverter#_viewToDomMapping\n\t\t */\n\t\tthis._viewToDomMapping = new WeakMap();\n\n\t\t/**\n\t\t * Holds mapping between fake selection containers and corresponding view selections.\n\t\t *\n\t\t * @private\n\t\t * @member {WeakMap} module:engine/view/domconverter~DomConverter#_fakeSelectionMapping\n\t\t */\n\t\tthis._fakeSelectionMapping = new WeakMap();\n\t}\n\n\t/**\n\t * Binds given DOM element that represents fake selection to a **position** of a\n\t * {@link module:engine/view/documentselection~DocumentSelection document selection}.\n\t * Document selection copy is stored and can be retrieved by\n\t * {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView} method.\n\t *\n\t * @param {HTMLElement} domElement\n\t * @param {module:engine/view/documentselection~DocumentSelection} viewDocumentSelection\n\t */\n\tbindFakeSelection( domElement, viewDocumentSelection ) {\n\t\tthis._fakeSelectionMapping.set( domElement, new ViewSelection( viewDocumentSelection ) );\n\t}\n\n\t/**\n\t * Returns {@link module:engine/view/selection~Selection view selection} instance corresponding to\n\t * given DOM element that represents fake selection. Returns `undefined` if binding to given DOM element does not exists.\n\t *\n\t * @param {HTMLElement} domElement\n\t * @returns {module:engine/view/selection~Selection|undefined}\n\t */\n\tfakeSelectionToView( domElement ) {\n\t\treturn this._fakeSelectionMapping.get( domElement );\n\t}\n\n\t/**\n\t * Binds DOM and View elements, so it will be possible to get corresponding elements using\n\t * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n\t * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n\t *\n\t * @param {HTMLElement} domElement DOM element to bind.\n\t * @param {module:engine/view/element~Element} viewElement View element to bind.\n\t */\n\tbindElements( domElement, viewElement ) {\n\t\tthis._domToViewMapping.set( domElement, viewElement );\n\t\tthis._viewToDomMapping.set( viewElement, domElement );\n\t}\n\n\t/**\n\t * Unbinds given `domElement` from the view element it was bound to. Unbinding is deep, meaning that all children of\n\t * `domElement` will be unbound too.\n\t *\n\t * @param {HTMLElement} domElement DOM element to unbind.\n\t */\n\tunbindDomElement( domElement ) {\n\t\tconst viewElement = this._domToViewMapping.get( domElement );\n\n\t\tif ( viewElement ) {\n\t\t\tthis._domToViewMapping.delete( domElement );\n\t\t\tthis._viewToDomMapping.delete( viewElement );\n\n\t\t\t// Use Array.from because of MS Edge (#923).\n\t\t\tfor ( const child of Array.from( domElement.childNodes ) ) {\n\t\t\t\tthis.unbindDomElement( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Binds DOM and View document fragments, so it will be possible to get corresponding document fragments using\n\t * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n\t * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n\t *\n\t * @param {DocumentFragment} domFragment DOM document fragment to bind.\n\t * @param {module:engine/view/documentfragment~DocumentFragment} viewFragment View document fragment to bind.\n\t */\n\tbindDocumentFragments( domFragment, viewFragment ) {\n\t\tthis._domToViewMapping.set( domFragment, viewFragment );\n\t\tthis._viewToDomMapping.set( viewFragment, domFragment );\n\t}\n\n\t/**\n\t * Converts view to DOM. For all text nodes, not bound elements and document fragments new items will\n\t * be created. For bound elements and document fragments function will return corresponding items.\n\t *\n\t * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} viewNode\n\t * View node or document fragment to transform.\n\t * @param {Document} domDocument Document which will be used to create DOM nodes.\n\t * @param {Object} [options] Conversion options.\n\t * @param {Boolean} [options.bind=false] Determines whether new elements will be bound.\n\t * @param {Boolean} [options.withChildren=true] If `true`, node's and document fragment's children will be converted too.\n\t * @returns {Node|DocumentFragment} Converted node or DocumentFragment.\n\t */\n\tviewToDom( viewNode, domDocument, options = {} ) {\n\t\tif ( viewNode.is( 'text' ) ) {\n\t\t\tconst textData = this._processDataFromViewText( viewNode );\n\n\t\t\treturn domDocument.createTextNode( textData );\n\t\t} else {\n\t\t\tif ( this.mapViewToDom( viewNode ) ) {\n\t\t\t\treturn this.mapViewToDom( viewNode );\n\t\t\t}\n\n\t\t\tlet domElement;\n\n\t\t\tif ( viewNode.is( 'documentFragment' ) ) {\n\t\t\t\t// Create DOM document fragment.\n\t\t\t\tdomElement = domDocument.createDocumentFragment();\n\n\t\t\t\tif ( options.bind ) {\n\t\t\t\t\tthis.bindDocumentFragments( domElement, viewNode );\n\t\t\t\t}\n\t\t\t} else if ( viewNode.is( 'uiElement' ) ) {\n\t\t\t\t// UIElement has its own render() method (see #799).\n\t\t\t\tdomElement = viewNode.render( domDocument );\n\n\t\t\t\tif ( options.bind ) {\n\t\t\t\t\tthis.bindElements( domElement, viewNode );\n\t\t\t\t}\n\n\t\t\t\treturn domElement;\n\t\t\t} else {\n\t\t\t\t// Create DOM element.\n\t\t\t\tif ( viewNode.hasAttribute( 'xmlns' ) ) {\n\t\t\t\t\tdomElement = domDocument.createElementNS( viewNode.getAttribute( 'xmlns' ), viewNode.name );\n\t\t\t\t} else {\n\t\t\t\t\tdomElement = domDocument.createElement( viewNode.name );\n\t\t\t\t}\n\n\t\t\t\tif ( options.bind ) {\n\t\t\t\t\tthis.bindElements( domElement, viewNode );\n\t\t\t\t}\n\n\t\t\t\t// Copy element's attributes.\n\t\t\t\tfor ( const key of viewNode.getAttributeKeys() ) {\n\t\t\t\t\tdomElement.setAttribute( key, viewNode.getAttribute( key ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( options.withChildren || options.withChildren === undefined ) {\n\t\t\t\tfor ( const child of this.viewChildrenToDom( viewNode, domDocument, options ) ) {\n\t\t\t\t\tdomElement.appendChild( child );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn domElement;\n\t\t}\n\t}\n\n\t/**\n\t * Converts children of the view element to DOM using the\n\t * {@link module:engine/view/domconverter~DomConverter#viewToDom} method.\n\t * Additionally, this method adds block {@link module:engine/view/filler filler} to the list of children, if needed.\n\t *\n\t * @param {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment} viewElement Parent view element.\n\t * @param {Document} domDocument Document which will be used to create DOM nodes.\n\t * @param {Object} options See {@link module:engine/view/domconverter~DomConverter#viewToDom} options parameter.\n\t * @returns {Iterable.} DOM nodes.\n\t */\n\t* viewChildrenToDom( viewElement, domDocument, options = {} ) {\n\t\tconst fillerPositionOffset = viewElement.getFillerOffset && viewElement.getFillerOffset();\n\t\tlet offset = 0;\n\n\t\tfor ( const childView of viewElement.getChildren() ) {\n\t\t\tif ( fillerPositionOffset === offset ) {\n\t\t\t\tyield this._blockFiller( domDocument );\n\t\t\t}\n\n\t\t\tyield this.viewToDom( childView, domDocument, options );\n\n\t\t\toffset++;\n\t\t}\n\n\t\tif ( fillerPositionOffset === offset ) {\n\t\t\tyield this._blockFiller( domDocument );\n\t\t}\n\t}\n\n\t/**\n\t * Converts view {@link module:engine/view/range~Range} to DOM range.\n\t * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n\t *\n\t * @param {module:engine/view/range~Range} viewRange View range.\n\t * @returns {Range} DOM range.\n\t */\n\tviewRangeToDom( viewRange ) {\n\t\tconst domStart = this.viewPositionToDom( viewRange.start );\n\t\tconst domEnd = this.viewPositionToDom( viewRange.end );\n\n\t\tconst domRange = document.createRange();\n\t\tdomRange.setStart( domStart.parent, domStart.offset );\n\t\tdomRange.setEnd( domEnd.parent, domEnd.offset );\n\n\t\treturn domRange;\n\t}\n\n\t/**\n\t * Converts view {@link module:engine/view/position~Position} to DOM parent and offset.\n\t *\n\t * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n\t * If the converted position is directly before inline filler it is moved inside the filler.\n\t *\n\t * @param {module:engine/view/position~Position} viewPosition View position.\n\t * @returns {Object|null} position DOM position or `null` if view position could not be converted to DOM.\n\t * @returns {Node} position.parent DOM position parent.\n\t * @returns {Number} position.offset DOM position offset.\n\t */\n\tviewPositionToDom( viewPosition ) {\n\t\tconst viewParent = viewPosition.parent;\n\n\t\tif ( viewParent.is( 'text' ) ) {\n\t\t\tconst domParent = this.findCorrespondingDomText( viewParent );\n\n\t\t\tif ( !domParent ) {\n\t\t\t\t// Position is in a view text node that has not been rendered to DOM yet.\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet offset = viewPosition.offset;\n\n\t\t\tif ( startsWithFiller( domParent ) ) {\n\t\t\t\toffset += INLINE_FILLER_LENGTH;\n\t\t\t}\n\n\t\t\treturn { parent: domParent, offset };\n\t\t} else {\n\t\t\t// viewParent is instance of ViewElement.\n\t\t\tlet domParent, domBefore, domAfter;\n\n\t\t\tif ( viewPosition.offset === 0 ) {\n\t\t\t\tdomParent = this.mapViewToDom( viewParent );\n\n\t\t\t\tif ( !domParent ) {\n\t\t\t\t\t// Position is in a view element that has not been rendered to DOM yet.\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tdomAfter = domParent.childNodes[ 0 ];\n\t\t\t} else {\n\t\t\t\tconst nodeBefore = viewPosition.nodeBefore;\n\n\t\t\t\tdomBefore = nodeBefore.is( 'text' ) ?\n\t\t\t\t\tthis.findCorrespondingDomText( nodeBefore ) :\n\t\t\t\t\tthis.mapViewToDom( viewPosition.nodeBefore );\n\n\t\t\t\tif ( !domBefore ) {\n\t\t\t\t\t// Position is after a view element that has not been rendered to DOM yet.\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tdomParent = domBefore.parentNode;\n\t\t\t\tdomAfter = domBefore.nextSibling;\n\t\t\t}\n\n\t\t\t// If there is an inline filler at position return position inside the filler. We should never return\n\t\t\t// the position before the inline filler.\n\t\t\tif ( isText( domAfter ) && startsWithFiller( domAfter ) ) {\n\t\t\t\treturn { parent: domAfter, offset: INLINE_FILLER_LENGTH };\n\t\t\t}\n\n\t\t\tconst offset = domBefore ? indexOf( domBefore ) + 1 : 0;\n\n\t\t\treturn { parent: domParent, offset };\n\t\t}\n\t}\n\n\t/**\n\t * Converts DOM to view. For all text nodes, not bound elements and document fragments new items will\n\t * be created. For bound elements and document fragments function will return corresponding items. For\n\t * {@link module:engine/view/filler fillers} `null` will be returned.\n\t * For all DOM elements rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n\t *\n\t * @param {Node|DocumentFragment} domNode DOM node or document fragment to transform.\n\t * @param {Object} [options] Conversion options.\n\t * @param {Boolean} [options.bind=false] Determines whether new elements will be bound.\n\t * @param {Boolean} [options.withChildren=true] If `true`, node's and document fragment's children will be converted too.\n\t * @param {Boolean} [options.keepOriginalCase=false] If `false`, node's tag name will be converter to lower case.\n\t * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null} Converted node or document fragment\n\t * or `null` if DOM node is a {@link module:engine/view/filler filler} or the given node is an empty text node.\n\t */\n\tdomToView( domNode, options = {} ) {\n\t\tif ( this.isBlockFiller( domNode, this.blockFillerMode ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// When node is inside UIElement return that UIElement as it's view representation.\n\t\tconst uiElement = this.getParentUIElement( domNode, this._domToViewMapping );\n\n\t\tif ( uiElement ) {\n\t\t\treturn uiElement;\n\t\t}\n\n\t\tif ( isText( domNode ) ) {\n\t\t\tif ( isInlineFiller( domNode ) ) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tconst textData = this._processDataFromDomText( domNode );\n\n\t\t\t\treturn textData === '' ? null : new ViewText( textData );\n\t\t\t}\n\t\t} else if ( this.isComment( domNode ) ) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\tif ( this.mapDomToView( domNode ) ) {\n\t\t\t\treturn this.mapDomToView( domNode );\n\t\t\t}\n\n\t\t\tlet viewElement;\n\n\t\t\tif ( this.isDocumentFragment( domNode ) ) {\n\t\t\t\t// Create view document fragment.\n\t\t\t\tviewElement = new ViewDocumentFragment();\n\n\t\t\t\tif ( options.bind ) {\n\t\t\t\t\tthis.bindDocumentFragments( domNode, viewElement );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Create view element.\n\t\t\t\tconst viewName = options.keepOriginalCase ? domNode.tagName : domNode.tagName.toLowerCase();\n\t\t\t\tviewElement = new ViewElement( viewName );\n\n\t\t\t\tif ( options.bind ) {\n\t\t\t\t\tthis.bindElements( domNode, viewElement );\n\t\t\t\t}\n\n\t\t\t\t// Copy element's attributes.\n\t\t\t\tconst attrs = domNode.attributes;\n\n\t\t\t\tfor ( let i = attrs.length - 1; i >= 0; i-- ) {\n\t\t\t\t\tviewElement._setAttribute( attrs[ i ].name, attrs[ i ].value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( options.withChildren || options.withChildren === undefined ) {\n\t\t\t\tfor ( const child of this.domChildrenToView( domNode, options ) ) {\n\t\t\t\t\tviewElement._appendChild( child );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn viewElement;\n\t\t}\n\t}\n\n\t/**\n\t * Converts children of the DOM element to view nodes using\n\t * the {@link module:engine/view/domconverter~DomConverter#domToView} method.\n\t * Additionally this method omits block {@link module:engine/view/filler filler}, if it exists in the DOM parent.\n\t *\n\t * @param {HTMLElement} domElement Parent DOM element.\n\t * @param {Object} options See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n\t * @returns {Iterable.} View nodes.\n\t */\n\t* domChildrenToView( domElement, options = {} ) {\n\t\tfor ( let i = 0; i < domElement.childNodes.length; i++ ) {\n\t\t\tconst domChild = domElement.childNodes[ i ];\n\t\t\tconst viewChild = this.domToView( domChild, options );\n\n\t\t\tif ( viewChild !== null ) {\n\t\t\t\tyield viewChild;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Converts DOM selection to view {@link module:engine/view/selection~Selection}.\n\t * Ranges which cannot be converted will be omitted.\n\t *\n\t * @param {Selection} domSelection DOM selection.\n\t * @returns {module:engine/view/selection~Selection} View selection.\n\t */\n\tdomSelectionToView( domSelection ) {\n\t\t// DOM selection might be placed in fake selection container.\n\t\t// If container contains fake selection - return corresponding view selection.\n\t\tif ( domSelection.rangeCount === 1 ) {\n\t\t\tlet container = domSelection.getRangeAt( 0 ).startContainer;\n\n\t\t\t// The DOM selection might be moved to the text node inside the fake selection container.\n\t\t\tif ( isText( container ) ) {\n\t\t\t\tcontainer = container.parentNode;\n\t\t\t}\n\n\t\t\tconst viewSelection = this.fakeSelectionToView( container );\n\n\t\t\tif ( viewSelection ) {\n\t\t\t\treturn viewSelection;\n\t\t\t}\n\t\t}\n\n\t\tconst isBackward = this.isDomSelectionBackward( domSelection );\n\n\t\tconst viewRanges = [];\n\n\t\tfor ( let i = 0; i < domSelection.rangeCount; i++ ) {\n\t\t\t// DOM Range have correct start and end, no matter what is the DOM Selection direction. So we don't have to fix anything.\n\t\t\tconst domRange = domSelection.getRangeAt( i );\n\t\t\tconst viewRange = this.domRangeToView( domRange );\n\n\t\t\tif ( viewRange ) {\n\t\t\t\tviewRanges.push( viewRange );\n\t\t\t}\n\t\t}\n\n\t\treturn new ViewSelection( viewRanges, { backward: isBackward } );\n\t}\n\n\t/**\n\t * Converts DOM Range to view {@link module:engine/view/range~Range}.\n\t * If the start or end position can not be converted `null` is returned.\n\t *\n\t * @param {Range} domRange DOM range.\n\t * @returns {module:engine/view/range~Range|null} View range.\n\t */\n\tdomRangeToView( domRange ) {\n\t\tconst viewStart = this.domPositionToView( domRange.startContainer, domRange.startOffset );\n\t\tconst viewEnd = this.domPositionToView( domRange.endContainer, domRange.endOffset );\n\n\t\tif ( viewStart && viewEnd ) {\n\t\t\treturn new ViewRange( viewStart, viewEnd );\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Converts DOM parent and offset to view {@link module:engine/view/position~Position}.\n\t *\n\t * If the position is inside a {@link module:engine/view/filler filler} which has no corresponding view node,\n\t * position of the filler will be converted and returned.\n\t *\n\t * If the position is inside DOM element rendered by {@link module:engine/view/uielement~UIElement}\n\t * that position will be converted to view position before that UIElement.\n\t *\n\t * If structures are too different and it is not possible to find corresponding position then `null` will be returned.\n\t *\n\t * @param {Node} domParent DOM position parent.\n\t * @param {Number} domOffset DOM position offset.\n\t * @returns {module:engine/view/position~Position} viewPosition View position.\n\t */\n\tdomPositionToView( domParent, domOffset ) {\n\t\tif ( this.isBlockFiller( domParent, this.blockFillerMode ) ) {\n\t\t\treturn this.domPositionToView( domParent.parentNode, indexOf( domParent ) );\n\t\t}\n\n\t\t// If position is somewhere inside UIElement - return position before that element.\n\t\tconst viewElement = this.mapDomToView( domParent );\n\n\t\tif ( viewElement && viewElement.is( 'uiElement' ) ) {\n\t\t\treturn ViewPosition._createBefore( viewElement );\n\t\t}\n\n\t\tif ( isText( domParent ) ) {\n\t\t\tif ( isInlineFiller( domParent ) ) {\n\t\t\t\treturn this.domPositionToView( domParent.parentNode, indexOf( domParent ) );\n\t\t\t}\n\n\t\t\tconst viewParent = this.findCorrespondingViewText( domParent );\n\t\t\tlet offset = domOffset;\n\n\t\t\tif ( !viewParent ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( startsWithFiller( domParent ) ) {\n\t\t\t\toffset -= INLINE_FILLER_LENGTH;\n\t\t\t\toffset = offset < 0 ? 0 : offset;\n\t\t\t}\n\n\t\t\treturn new ViewPosition( viewParent, offset );\n\t\t}\n\t\t// domParent instanceof HTMLElement.\n\t\telse {\n\t\t\tif ( domOffset === 0 ) {\n\t\t\t\tconst viewParent = this.mapDomToView( domParent );\n\n\t\t\t\tif ( viewParent ) {\n\t\t\t\t\treturn new ViewPosition( viewParent, 0 );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst domBefore = domParent.childNodes[ domOffset - 1 ];\n\t\t\t\tconst viewBefore = isText( domBefore ) ?\n\t\t\t\t\tthis.findCorrespondingViewText( domBefore ) :\n\t\t\t\t\tthis.mapDomToView( domBefore );\n\n\t\t\t\t// TODO #663\n\t\t\t\tif ( viewBefore && viewBefore.parent ) {\n\t\t\t\t\treturn new ViewPosition( viewBefore.parent, viewBefore.index + 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Returns corresponding view {@link module:engine/view/element~Element Element} or\n\t * {@link module:engine/view/documentfragment~DocumentFragment} for provided DOM element or\n\t * document fragment. If there is no view item {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n\t * to the given DOM - `undefined` is returned.\n\t * For all DOM elements rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n\t *\n\t * @param {DocumentFragment|Element} domElementOrDocumentFragment DOM element or document fragment.\n\t * @returns {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment|undefined}\n\t * Corresponding view element, document fragment or `undefined` if no element was bound.\n\t */\n\tmapDomToView( domElementOrDocumentFragment ) {\n\t\treturn this.getParentUIElement( domElementOrDocumentFragment ) || this._domToViewMapping.get( domElementOrDocumentFragment );\n\t}\n\n\t/**\n\t * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n\t * corresponding text node is returned based on the sibling or parent.\n\t *\n\t * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n\t * to find the corresponding text node.\n\t *\n\t * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n\t * element, it is used to find the corresponding text node.\n\t *\n\t * For all text nodes rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n\t *\n\t * Otherwise `null` is returned.\n\t *\n\t * Note that for the block or inline {@link module:engine/view/filler filler} this method returns `null`.\n\t *\n\t * @param {Text} domText DOM text node.\n\t * @returns {module:engine/view/text~Text|null} Corresponding view text node or `null`, if it was not possible to find a\n\t * corresponding node.\n\t */\n\tfindCorrespondingViewText( domText ) {\n\t\tif ( isInlineFiller( domText ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// If DOM text was rendered by UIElement - return that element.\n\t\tconst uiElement = this.getParentUIElement( domText );\n\n\t\tif ( uiElement ) {\n\t\t\treturn uiElement;\n\t\t}\n\n\t\tconst previousSibling = domText.previousSibling;\n\n\t\t// Try to use previous sibling to find the corresponding text node.\n\t\tif ( previousSibling ) {\n\t\t\tif ( !( this.isElement( previousSibling ) ) ) {\n\t\t\t\t// The previous is text or comment.\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst viewElement = this.mapDomToView( previousSibling );\n\n\t\t\tif ( viewElement ) {\n\t\t\t\tconst nextSibling = viewElement.nextSibling;\n\n\t\t\t\t// It might be filler which has no corresponding view node.\n\t\t\t\tif ( nextSibling instanceof ViewText ) {\n\t\t\t\t\treturn viewElement.nextSibling;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Try to use parent to find the corresponding text node.\n\t\telse {\n\t\t\tconst viewElement = this.mapDomToView( domText.parentNode );\n\n\t\t\tif ( viewElement ) {\n\t\t\t\tconst firstChild = viewElement.getChild( 0 );\n\n\t\t\t\t// It might be filler which has no corresponding view node.\n\t\t\t\tif ( firstChild instanceof ViewText ) {\n\t\t\t\t\treturn firstChild;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns corresponding DOM item for provided {@link module:engine/view/element~Element Element} or\n\t * {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment}.\n\t * To find a corresponding text for {@link module:engine/view/text~Text view Text instance}\n\t * use {@link #findCorrespondingDomText}.\n\t *\n\t * @param {module:engine/view/element~Element|module:engine/view/documentfragment~DocumentFragment} viewNode\n\t * View element or document fragment.\n\t * @returns {Node|DocumentFragment|undefined} Corresponding DOM node or document fragment.\n\t */\n\tmapViewToDom( documentFragmentOrElement ) {\n\t\treturn this._viewToDomMapping.get( documentFragmentOrElement );\n\t}\n\n\t/**\n\t * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n\t * corresponding text node is returned based on the sibling or parent.\n\t *\n\t * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n\t * to find the corresponding text node.\n\t *\n\t * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n\t * element, it is used to find the corresponding text node.\n\t *\n\t * Otherwise `null` is returned.\n\t *\n\t * @param {module:engine/view/text~Text} viewText View text node.\n\t * @returns {Text|null} Corresponding DOM text node or `null`, if it was not possible to find a corresponding node.\n\t */\n\tfindCorrespondingDomText( viewText ) {\n\t\tconst previousSibling = viewText.previousSibling;\n\n\t\t// Try to use previous sibling to find the corresponding text node.\n\t\tif ( previousSibling && this.mapViewToDom( previousSibling ) ) {\n\t\t\treturn this.mapViewToDom( previousSibling ).nextSibling;\n\t\t}\n\n\t\t// If this is a first node, try to use parent to find the corresponding text node.\n\t\tif ( !previousSibling && viewText.parent && this.mapViewToDom( viewText.parent ) ) {\n\t\t\treturn this.mapViewToDom( viewText.parent ).childNodes[ 0 ];\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Focuses DOM editable that is corresponding to provided {@link module:engine/view/editableelement~EditableElement}.\n\t *\n\t * @param {module:engine/view/editableelement~EditableElement} viewEditable\n\t */\n\tfocus( viewEditable ) {\n\t\tconst domEditable = this.mapViewToDom( viewEditable );\n\n\t\tif ( domEditable && domEditable.ownerDocument.activeElement !== domEditable ) {\n\t\t\t// Save the scrollX and scrollY positions before the focus.\n\t\t\tconst { scrollX, scrollY } = global.window;\n\t\t\tconst scrollPositions = [];\n\n\t\t\t// Save all scrollLeft and scrollTop values starting from domEditable up to\n\t\t\t// document#documentElement.\n\t\t\tforEachDomNodeAncestor( domEditable, node => {\n\t\t\t\tconst { scrollLeft, scrollTop } = node;\n\n\t\t\t\tscrollPositions.push( [ scrollLeft, scrollTop ] );\n\t\t\t} );\n\n\t\t\tdomEditable.focus();\n\n\t\t\t// Restore scrollLeft and scrollTop values starting from domEditable up to\n\t\t\t// document#documentElement.\n\t\t\t// https://github.com/ckeditor/ckeditor5-engine/issues/951\n\t\t\t// https://github.com/ckeditor/ckeditor5-engine/issues/957\n\t\t\tforEachDomNodeAncestor( domEditable, node => {\n\t\t\t\tconst [ scrollLeft, scrollTop ] = scrollPositions.shift();\n\n\t\t\t\tnode.scrollLeft = scrollLeft;\n\t\t\t\tnode.scrollTop = scrollTop;\n\t\t\t} );\n\n\t\t\t// Restore the scrollX and scrollY positions after the focus.\n\t\t\t// https://github.com/ckeditor/ckeditor5-engine/issues/951\n\t\t\tglobal.window.scrollTo( scrollX, scrollY );\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` when `node.nodeType` equals `Node.ELEMENT_NODE`.\n\t *\n\t * @param {Node} node Node to check.\n\t * @returns {Boolean}\n\t */\n\tisElement( node ) {\n\t\treturn node && node.nodeType == Node.ELEMENT_NODE;\n\t}\n\n\t/**\n\t * Returns `true` when `node.nodeType` equals `Node.DOCUMENT_FRAGMENT_NODE`.\n\t *\n\t * @param {Node} node Node to check.\n\t * @returns {Boolean}\n\t */\n\tisDocumentFragment( node ) {\n\t\treturn node && node.nodeType == Node.DOCUMENT_FRAGMENT_NODE;\n\t}\n\n\t/**\n\t * Returns `true` when `node.nodeType` equals `Node.COMMENT_NODE`.\n\t *\n\t * @param {Node} node Node to check.\n\t * @returns {Boolean}\n\t */\n\tisComment( node ) {\n\t\treturn node && node.nodeType == Node.COMMENT_NODE;\n\t}\n\n\t/**\n\t * Checks if the node is an instance of the block filler for this DOM converter.\n\t *\n\t *\t\tconst converter = new DomConverter( { blockFillerMode: 'br' } );\n\t *\n\t *\t\tconverter.isBlockFiller( BR_FILLER( document ) ); // true\n\t *\t\tconverter.isBlockFiller( NBSP_FILLER( document ) ); // false\n\t *\n\t * **Note:**: For the `'nbsp'` mode the method also checks context of a node so it cannot be a detached node.\n\t *\n\t * **Note:** A special case in the `'nbsp'` mode exists where the `
` in `


` is treated as a block filler.\n\t *\n\t * @param {Node} domNode DOM node to check.\n\t * @returns {Boolean} True if a node is considered a block filler for given mode.\n\t */\n\tisBlockFiller( domNode ) {\n\t\tif ( this.blockFillerMode == 'br' ) {\n\t\t\treturn domNode.isEqualNode( BR_FILLER_REF );\n\t\t}\n\n\t\t// Special case for


in which case the
should be treated as filler even\n\t\t// when we're in the 'nbsp' mode. See ckeditor5#5564.\n\t\tif ( domNode.tagName === 'BR' && hasBlockParent( domNode, this.blockElements ) && domNode.parentNode.childNodes.length === 1 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn isNbspBlockFiller( domNode, this.blockElements );\n\t}\n\n\t/**\n\t * Returns `true` if given selection is a backward selection, that is, if it's `focus` is before `anchor`.\n\t *\n\t * @param {Selection} DOM Selection instance to check.\n\t * @returns {Boolean}\n\t */\n\tisDomSelectionBackward( selection ) {\n\t\tif ( selection.isCollapsed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Since it takes multiple lines of code to check whether a \"DOM Position\" is before/after another \"DOM Position\",\n\t\t// we will use the fact that range will collapse if it's end is before it's start.\n\t\tconst range = document.createRange();\n\n\t\trange.setStart( selection.anchorNode, selection.anchorOffset );\n\t\trange.setEnd( selection.focusNode, selection.focusOffset );\n\n\t\tconst backward = range.collapsed;\n\n\t\trange.detach();\n\n\t\treturn backward;\n\t}\n\n\t/**\n\t * Returns parent {@link module:engine/view/uielement~UIElement} for provided DOM node. Returns `null` if there is no\n\t * parent UIElement.\n\t *\n\t * @param {Node} domNode\n\t * @returns {module:engine/view/uielement~UIElement|null}\n\t */\n\tgetParentUIElement( domNode ) {\n\t\tconst ancestors = getAncestors( domNode );\n\n\t\t// Remove domNode from the list.\n\t\tancestors.pop();\n\n\t\twhile ( ancestors.length ) {\n\t\t\tconst domNode = ancestors.pop();\n\t\t\tconst viewNode = this._domToViewMapping.get( domNode );\n\n\t\t\tif ( viewNode && viewNode.is( 'uiElement' ) ) {\n\t\t\t\treturn viewNode;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Checks if given selection's boundaries are at correct places.\n\t *\n\t * The following places are considered as incorrect for selection boundaries:\n\t * * before or in the middle of the inline filler sequence,\n\t * * inside the DOM element which represents {@link module:engine/view/uielement~UIElement a view ui element}.\n\t *\n\t * @param {Selection} domSelection DOM Selection object to be checked.\n\t * @returns {Boolean} `true` if the given selection is at a correct place, `false` otherwise.\n\t */\n\tisDomSelectionCorrect( domSelection ) {\n\t\treturn this._isDomSelectionPositionCorrect( domSelection.anchorNode, domSelection.anchorOffset ) &&\n\t\t\tthis._isDomSelectionPositionCorrect( domSelection.focusNode, domSelection.focusOffset );\n\t}\n\n\t/**\n\t * Checks if the given DOM position is a correct place for selection boundary. See {@link #isDomSelectionCorrect}.\n\t *\n\t * @private\n\t * @param {Element} domParent Position parent.\n\t * @param {Number} offset Position offset.\n\t * @returns {Boolean} `true` if given position is at a correct place for selection boundary, `false` otherwise.\n\t */\n\t_isDomSelectionPositionCorrect( domParent, offset ) {\n\t\t// If selection is before or in the middle of inline filler string, it is incorrect.\n\t\tif ( isText( domParent ) && startsWithFiller( domParent ) && offset < INLINE_FILLER_LENGTH ) {\n\t\t\t// Selection in a text node, at wrong position (before or in the middle of filler).\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.isElement( domParent ) && startsWithFiller( domParent.childNodes[ offset ] ) ) {\n\t\t\t// Selection in an element node, before filler text node.\n\t\t\treturn false;\n\t\t}\n\n\t\tconst viewParent = this.mapDomToView( domParent );\n\n\t\t// If selection is in `view.UIElement`, it is incorrect. Note that `mapDomToView()` returns `view.UIElement`\n\t\t// also for any dom element that is inside the view ui element (so we don't need to perform any additional checks).\n\t\tif ( viewParent && viewParent.is( 'uiElement' ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Takes text data from a given {@link module:engine/view/text~Text#data} and processes it so\n\t * it is correctly displayed in the DOM.\n\t *\n\t * Following changes are done:\n\t *\n\t * * a space at the beginning is changed to ` ` if this is the first text node in its container\n\t * element or if a previous text node ends with a space character,\n\t * * space at the end of the text node is changed to ` ` if there are two spaces at the end of a node or if next node\n\t * starts with a space or if it is the last text node in its container,\n\t * * remaining spaces are replaced to a chain of spaces and ` ` (e.g. `'x x'` becomes `'x   x'`).\n\t *\n\t * Content of {@link #preElements} is not processed.\n\t *\n\t * @private\n\t * @param {module:engine/view/text~Text} node View text node to process.\n\t * @returns {String} Processed text data.\n\t */\n\t_processDataFromViewText( node ) {\n\t\tlet data = node.data;\n\n\t\t// If any of node ancestors has a name which is in `preElements` array, then currently processed\n\t\t// view text node is (will be) in preformatted element. We should not change whitespaces then.\n\t\tif ( node.getAncestors().some( parent => this.preElements.includes( parent.name ) ) ) {\n\t\t\treturn data;\n\t\t}\n\n\t\t// 1. Replace the first space with a nbsp if the previous node ends with a space or there is no previous node\n\t\t// (container element boundary).\n\t\tif ( data.charAt( 0 ) == ' ' ) {\n\t\t\tconst prevNode = this._getTouchingViewTextNode( node, false );\n\t\t\tconst prevEndsWithSpace = prevNode && this._nodeEndsWithSpace( prevNode );\n\n\t\t\tif ( prevEndsWithSpace || !prevNode ) {\n\t\t\t\tdata = '\\u00A0' + data.substr( 1 );\n\t\t\t}\n\t\t}\n\n\t\t// 2. Replace the last space with nbsp if there are two spaces at the end or if the next node starts with space or there is no\n\t\t// next node (container element boundary).\n\t\t//\n\t\t// Keep in mind that Firefox prefers $nbsp; before tag, not inside it:\n\t\t//\n\t\t// Foo  bar <-- bad.\n\t\t// Foo  bar <-- good.\n\t\t//\n\t\t// More here: https://github.com/ckeditor/ckeditor5-engine/issues/1747.\n\t\tif ( data.charAt( data.length - 1 ) == ' ' ) {\n\t\t\tconst nextNode = this._getTouchingViewTextNode( node, true );\n\n\t\t\tif ( data.charAt( data.length - 2 ) == ' ' || !nextNode || nextNode.data.charAt( 0 ) == ' ' ) {\n\t\t\t\tdata = data.substr( 0, data.length - 1 ) + '\\u00A0';\n\t\t\t}\n\t\t}\n\n\t\t// 3. Create space+nbsp pairs.\n\t\treturn data.replace( / {2}/g, ' \\u00A0' );\n\t}\n\n\t/**\n\t * Checks whether given node ends with a space character after changing appropriate space characters to ` `s.\n\t *\n\t * @private\n\t * @param {module:engine/view/text~Text} node Node to check.\n\t * @returns {Boolean} `true` if given `node` ends with space, `false` otherwise.\n\t */\n\t_nodeEndsWithSpace( node ) {\n\t\tif ( node.getAncestors().some( parent => this.preElements.includes( parent.name ) ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst data = this._processDataFromViewText( node );\n\n\t\treturn data.charAt( data.length - 1 ) == ' ';\n\t}\n\n\t/**\n\t * Takes text data from native `Text` node and processes it to a correct {@link module:engine/view/text~Text view text node} data.\n\t *\n\t * Following changes are done:\n\t *\n\t * * multiple whitespaces are replaced to a single space,\n\t * * space at the beginning of a text node is removed if it is the first text node in its container\n\t * element or if the previous text node ends with a space character,\n\t * * space at the end of the text node is removed if there are two spaces at the end of a node or if next node\n\t * starts with a space or if it is the last text node in its container\n\t * * nbsps are converted to spaces.\n\t *\n\t * @param {Node} node DOM text node to process.\n\t * @returns {String} Processed data.\n\t * @private\n\t */\n\t_processDataFromDomText( node ) {\n\t\tlet data = node.data;\n\n\t\tif ( _hasDomParentOfType( node, this.preElements ) ) {\n\t\t\treturn getDataWithoutFiller( node );\n\t\t}\n\n\t\t// Change all consecutive whitespace characters (from the [ \\n\\t\\r] set –\n\t\t// see https://github.com/ckeditor/ckeditor5-engine/issues/822#issuecomment-311670249) to a single space character.\n\t\t// That's how multiple whitespaces are treated when rendered, so we normalize those whitespaces.\n\t\t// We're replacing 1+ (and not 2+) to also normalize singular \\n\\t\\r characters (#822).\n\t\tdata = data.replace( /[ \\n\\t\\r]{1,}/g, ' ' );\n\n\t\tconst prevNode = this._getTouchingInlineDomNode( node, false );\n\t\tconst nextNode = this._getTouchingInlineDomNode( node, true );\n\n\t\tconst shouldLeftTrim = this._checkShouldLeftTrimDomText( prevNode );\n\t\tconst shouldRightTrim = this._checkShouldRightTrimDomText( node, nextNode );\n\n\t\t// If the previous dom text node does not exist or it ends by whitespace character, remove space character from the beginning\n\t\t// of this text node. Such space character is treated as a whitespace.\n\t\tif ( shouldLeftTrim ) {\n\t\t\tdata = data.replace( /^ /, '' );\n\t\t}\n\n\t\t// If the next text node does not exist remove space character from the end of this text node.\n\t\tif ( shouldRightTrim ) {\n\t\t\tdata = data.replace( / $/, '' );\n\t\t}\n\n\t\t// At the beginning and end of a block element, Firefox inserts normal space +
instead of non-breaking space.\n\t\t// This means that the text node starts/end with normal space instead of non-breaking space.\n\t\t// This causes a problem because the normal space would be removed in `.replace` calls above. To prevent that,\n\t\t// the inline filler is removed only after the data is initially processed (by the `.replace` above). See ckeditor5#692.\n\t\tdata = getDataWithoutFiller( new Text( data ) );\n\n\t\t// At this point we should have removed all whitespaces from DOM text data.\n\t\t//\n\t\t// Now, We will reverse the process that happens in `_processDataFromViewText`.\n\t\t//\n\t\t// We have to change   chars, that were in DOM text data because of rendering reasons, to spaces.\n\t\t// First, change all ` \\u00A0` pairs (space +  ) to two spaces. DOM converter changes two spaces from model/view to\n\t\t// ` \\u00A0` to ensure proper rendering. Since here we convert back, we recognize those pairs and change them back to ` `.\n\t\tdata = data.replace( / \\u00A0/g, ' ' );\n\n\t\t// Then, let's change the last nbsp to a space.\n\t\tif ( /( |\\u00A0)\\u00A0$/.test( data ) || !nextNode || ( nextNode.data && nextNode.data.charAt( 0 ) == ' ' ) ) {\n\t\t\tdata = data.replace( /\\u00A0$/, ' ' );\n\t\t}\n\n\t\t// Then, change   character that is at the beginning of the text node to space character.\n\t\t// We do that replacement only if this is the first node or the previous node ends on whitespace character.\n\t\tif ( shouldLeftTrim ) {\n\t\t\tdata = data.replace( /^\\u00A0/, ' ' );\n\t\t}\n\n\t\t// At this point, all whitespaces should be removed and all   created for rendering reasons should be\n\t\t// changed to normal space. All left   are   inserted intentionally.\n\t\treturn data;\n\t}\n\n\t/**\n\t * Helper function which checks if a DOM text node, preceded by the given `prevNode` should\n\t * be trimmed from the left side.\n\t *\n\t * @param {Node} prevNode\n\t */\n\t_checkShouldLeftTrimDomText( prevNode ) {\n\t\tif ( !prevNode ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( isElement( prevNode ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn /[^\\S\\u00A0]/.test( prevNode.data.charAt( prevNode.data.length - 1 ) );\n\t}\n\n\t/**\n\t * Helper function which checks if a DOM text node, succeeded by the given `nextNode` should\n\t * be trimmed from the right side.\n\t *\n\t * @param {Node} node\n\t * @param {Node} nextNode\n\t */\n\t_checkShouldRightTrimDomText( node, nextNode ) {\n\t\tif ( nextNode ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn !startsWithFiller( node );\n\t}\n\n\t/**\n\t * Helper function. For given {@link module:engine/view/text~Text view text node}, it finds previous or next sibling\n\t * that is contained in the same container element. If there is no such sibling, `null` is returned.\n\t *\n\t * @param {module:engine/view/text~Text} node Reference node.\n\t * @param {Boolean} getNext\n\t * @returns {module:engine/view/text~Text|null} Touching text node or `null` if there is no next or previous touching text node.\n\t */\n\t_getTouchingViewTextNode( node, getNext ) {\n\t\tconst treeWalker = new ViewTreeWalker( {\n\t\t\tstartPosition: getNext ? ViewPosition._createAfter( node ) : ViewPosition._createBefore( node ),\n\t\t\tdirection: getNext ? 'forward' : 'backward'\n\t\t} );\n\n\t\tfor ( const value of treeWalker ) {\n\t\t\t// ViewContainerElement is found on a way to next ViewText node, so given `node` was first/last\n\t\t\t// text node in its container element.\n\t\t\tif ( value.item.is( 'containerElement' ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t//
found – it works like a block boundary, so do not scan further.\n\t\t\telse if ( value.item.is( 'br' ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// Found a text node in the same container element.\n\t\t\telse if ( value.item.is( 'textProxy' ) ) {\n\t\t\t\treturn value.item;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Helper function. For the given text node, it finds the closest touching node which is either\n\t * a text node or a `
`. The search is terminated at block element boundaries and if a matching node\n\t * wasn't found so far, `null` is returned.\n\t *\n\t * In the following DOM structure:\n\t *\n\t *\t\t

foobar
bom

\n\t *\n\t * * `foo` doesn't have its previous touching inline node (`null` is returned),\n\t * * `foo`'s next touching inline node is `bar`\n\t * * `bar`'s next touching inline node is `
`\n\t *\n\t * This method returns text nodes and `
` elements because these types of nodes affect how\n\t * spaces in the given text node need to be converted.\n\t *\n\t * @private\n\t * @param {Text} node\n\t * @param {Boolean} getNext\n\t * @returns {Text|Element|null}\n\t */\n\t_getTouchingInlineDomNode( node, getNext ) {\n\t\tif ( !node.parentNode ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst direction = getNext ? 'nextNode' : 'previousNode';\n\t\tconst document = node.ownerDocument;\n\t\tconst topmostParent = getAncestors( node )[ 0 ];\n\n\t\tconst treeWalker = document.createTreeWalker( topmostParent, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT, {\n\t\t\tacceptNode( node ) {\n\t\t\t\tif ( isText( node ) ) {\n\t\t\t\t\treturn NodeFilter.FILTER_ACCEPT;\n\t\t\t\t}\n\n\t\t\t\tif ( node.tagName == 'BR' ) {\n\t\t\t\t\treturn NodeFilter.FILTER_ACCEPT;\n\t\t\t\t}\n\n\t\t\t\treturn NodeFilter.FILTER_SKIP;\n\t\t\t}\n\t\t} );\n\n\t\ttreeWalker.currentNode = node;\n\n\t\tconst touchingNode = treeWalker[ direction ]();\n\n\t\tif ( touchingNode !== null ) {\n\t\t\tconst lca = getCommonAncestor( node, touchingNode );\n\n\t\t\t// If there is common ancestor between the text node and next/prev text node,\n\t\t\t// and there are no block elements on a way from the text node to that ancestor,\n\t\t\t// and there are no block elements on a way from next/prev text node to that ancestor...\n\t\t\tif (\n\t\t\t\tlca &&\n\t\t\t\t!_hasDomParentOfType( node, this.blockElements, lca ) &&\n\t\t\t\t!_hasDomParentOfType( touchingNode, this.blockElements, lca )\n\t\t\t) {\n\t\t\t\t// Then they are in the same container element.\n\t\t\t\treturn touchingNode;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n// Helper function.\n// Used to check if given native `Element` or `Text` node has parent with tag name from `types` array.\n//\n// @param {Node} node\n// @param {Array.} types\n// @param {Boolean} [boundaryParent] Can be given if parents should be checked up to a given element (excluding that element).\n// @returns {Boolean} `true` if such parent exists or `false` if it does not.\nfunction _hasDomParentOfType( node, types, boundaryParent ) {\n\tlet parents = getAncestors( node );\n\n\tif ( boundaryParent ) {\n\t\tparents = parents.slice( parents.indexOf( boundaryParent ) + 1 );\n\t}\n\n\treturn parents.some( parent => parent.tagName && types.includes( parent.tagName.toLowerCase() ) );\n}\n\n// A helper that executes given callback for each DOM node's ancestor, starting from the given node\n// and ending in document#documentElement.\n//\n// @param {Node} node\n// @param {Function} callback A callback to be executed for each ancestor.\nfunction forEachDomNodeAncestor( node, callback ) {\n\twhile ( node && node != global.document ) {\n\t\tcallback( node );\n\t\tnode = node.parentNode;\n\t}\n}\n\n// Checks if given node is a nbsp block filler.\n//\n// A   is a block filler only if it is a single child of a block element.\n//\n// @param {Node} domNode DOM node.\n// @returns {Boolean}\nfunction isNbspBlockFiller( domNode, blockElements ) {\n\tconst isNBSP = isText( domNode ) && domNode.data == '\\u00A0';\n\n\treturn isNBSP && hasBlockParent( domNode, blockElements ) && domNode.parentNode.childNodes.length === 1;\n}\n\n// Checks if domNode has block parent.\n//\n// @param {Node} domNode DOM node.\n// @returns {Boolean}\nfunction hasBlockParent( domNode, blockElements ) {\n\tconst parent = domNode.parentNode;\n\n\treturn parent && parent.tagName && blockElements.includes( parent.tagName.toLowerCase() );\n}\n\n/**\n * Enum representing type of the block filler.\n *\n * Possible values:\n *\n * * `br` - for `
` block filler used in editing view,\n * * `nbsp` - for ` ` block fillers used in the data.\n *\n * @typedef {String} module:engine/view/filler~BlockFillerMode\n */\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/getcommonancestor\n */\n\nimport getAncestors from './getancestors';\n\n/**\n * Searches and returns the lowest common ancestor of two given nodes.\n *\n * @param {Node} nodeA First node.\n * @param {Node} nodeB Second node.\n * @returns {Node|DocumentFragment|Document|null} Lowest common ancestor of both nodes or `null` if nodes do not have a common ancestor.\n */\nexport default function getCommonAncestor( nodeA, nodeB ) {\n\tconst ancestorsA = getAncestors( nodeA );\n\tconst ancestorsB = getAncestors( nodeB );\n\n\tlet i = 0;\n\n\t// It does not matter which array is shorter.\n\twhile ( ancestorsA[ i ] == ancestorsB[ i ] && ancestorsA[ i ] ) {\n\t\ti++;\n\t}\n\n\treturn i === 0 ? null : ancestorsA[ i - 1 ];\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/iswindow\n */\n\n/**\n * Checks if the object is a native DOM Window.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isWindow( obj ) {\n\tconst stringifiedObject = Object.prototype.toString.apply( obj );\n\n\t// Returns `true` for the `window` object in browser environments.\n\tif ( stringifiedObject == '[object Window]' ) {\n\t\treturn true;\n\t}\n\n\t// Returns `true` for the `window` object in the Electron environment.\n\tif ( stringifiedObject == '[object global]' ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/emittermixin\n */\n\nimport { default as EmitterMixin, _getEmitterListenedTo, _setEmitterId } from '../emittermixin';\nimport uid from '../uid';\nimport isNode from './isnode';\nimport isWindow from './iswindow';\nimport { extend } from 'lodash-es';\n\n/**\n * Mixin that injects the DOM events API into its host. It provides the API\n * compatible with {@link module:utils/emittermixin~EmitterMixin}.\n *\n * DOM emitter mixin is by default available in the {@link module:ui/view~View} class,\n * but it can also be mixed into any other class:\n *\n *\t\timport mix from '../utils/mix.js';\n *\t\timport DomEmitterMixin from '../utils/dom/emittermixin.js';\n *\n *\t\tclass SomeView {}\n *\t\tmix( SomeView, DomEmitterMixin );\n *\n *\t\tconst view = new SomeView();\n *\t\tview.listenTo( domElement, ( evt, domEvt ) => {\n *\t\t\tconsole.log( evt, domEvt );\n *\t\t} );\n *\n * @mixin EmitterMixin\n * @mixes module:utils/emittermixin~EmitterMixin\n * @implements module:utils/dom/emittermixin~Emitter\n */\nconst DomEmitterMixin = extend( {}, EmitterMixin, {\n\t/**\n\t * Registers a callback function to be executed when an event is fired in a specific Emitter or DOM Node.\n\t * It is backwards compatible with {@link module:utils/emittermixin~EmitterMixin#listenTo}.\n\t *\n\t * @param {module:utils/emittermixin~Emitter|Node} emitter The object that fires the event.\n\t * @param {String} event The name of the event.\n\t * @param {Function} callback The function to be called on event.\n\t * @param {Object} [options={}] Additional options.\n\t * @param {module:utils/priorities~PriorityString|Number} [options.priority='normal'] The priority of this event callback. The higher\n\t * the priority value the sooner the callback will be fired. Events having the same priority are called in the\n\t * order they were added.\n\t * @param {Boolean} [options.useCapture=false] Indicates that events of this type will be dispatched to the registered\n\t * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n\t */\n\tlistenTo( emitter, ...rest ) {\n\t\t// Check if emitter is an instance of DOM Node. If so, replace the argument with\n\t\t// corresponding ProxyEmitter (or create one if not existing).\n\t\tif ( isNode( emitter ) || isWindow( emitter ) ) {\n\t\t\tconst proxy = this._getProxyEmitter( emitter ) || new ProxyEmitter( emitter );\n\n\t\t\tproxy.attach( ...rest );\n\n\t\t\temitter = proxy;\n\t\t}\n\n\t\t// Execute parent class method with Emitter (or ProxyEmitter) instance.\n\t\tEmitterMixin.listenTo.call( this, emitter, ...rest );\n\t},\n\n\t/**\n\t * Stops listening for events. It can be used at different levels:\n\t * It is backwards compatible with {@link module:utils/emittermixin~EmitterMixin#listenTo}.\n\t *\n\t * * To stop listening to a specific callback.\n\t * * To stop listening to a specific event.\n\t * * To stop listening to all events fired by a specific object.\n\t * * To stop listening to all events fired by all object.\n\t *\n\t * @param {module:utils/emittermixin~Emitter|Node} [emitter] The object to stop listening to. If omitted, stops it for all objects.\n\t * @param {String} [event] (Requires the `emitter`) The name of the event to stop listening to. If omitted, stops it\n\t * for all events from `emitter`.\n\t * @param {Function} [callback] (Requires the `event`) The function to be removed from the call list for the given\n\t * `event`.\n\t */\n\tstopListening( emitter, event, callback ) {\n\t\t// Check if emitter is an instance of DOM Node. If so, replace the argument with corresponding ProxyEmitter.\n\t\tif ( isNode( emitter ) || isWindow( emitter ) ) {\n\t\t\tconst proxy = this._getProxyEmitter( emitter );\n\n\t\t\t// Element has no listeners.\n\t\t\tif ( !proxy ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\temitter = proxy;\n\t\t}\n\n\t\t// Execute parent class method with Emitter (or ProxyEmitter) instance.\n\t\tEmitterMixin.stopListening.call( this, emitter, event, callback );\n\n\t\tif ( emitter instanceof ProxyEmitter ) {\n\t\t\temitter.detach( event );\n\t\t}\n\t},\n\n\t/**\n\t * Retrieves ProxyEmitter instance for given DOM Node residing in this Host.\n\t *\n\t * @private\n\t * @param {Node} node DOM Node of the ProxyEmitter.\n\t * @returns {module:utils/dom/emittermixin~ProxyEmitter} ProxyEmitter instance or null.\n\t */\n\t_getProxyEmitter( node ) {\n\t\treturn _getEmitterListenedTo( this, getNodeUID( node ) );\n\t}\n} );\n\nexport default DomEmitterMixin;\n\n/**\n * Creates a ProxyEmitter instance. Such an instance is a bridge between a DOM Node firing events\n * and any Host listening to them. It is backwards compatible with {@link module:utils/emittermixin~EmitterMixin#on}.\n *\n * listenTo( click, ... )\n * +-----------------------------------------+\n * | stopListening( ... ) |\n * +----------------------------+ | addEventListener( click, ... )\n * | Host | | +---------------------------------------------+\n * +----------------------------+ | | removeEventListener( click, ... ) |\n * | _listeningTo: { | +----------v-------------+ |\n * | UID: { | | ProxyEmitter | |\n * | emitter: ProxyEmitter, | +------------------------+ +------------v----------+\n * | callbacks: { | | events: { | | Node (HTMLElement) |\n * | click: [ callbacks ] | | click: [ callbacks ] | +-----------------------+\n * | } | | }, | | data-ck-expando: UID |\n * | } | | _domNode: Node, | +-----------------------+\n * | } | | _domListeners: {}, | |\n * | +------------------------+ | | _emitterId: UID | |\n * | | DomEmitterMixin | | +--------------^---------+ |\n * | +------------------------+ | | | |\n * +--------------^-------------+ | +---------------------------------------------+\n * | | click (DOM Event)\n * +-----------------------------------------+\n * fire( click, DOM Event )\n *\n * @mixes module:utils/emittermixin~EmitterMixin\n * @implements module:utils/dom/emittermixin~Emitter\n * @private\n */\nclass ProxyEmitter {\n\t/**\n\t * @param {Node} node DOM Node that fires events.\n\t * @returns {Object} ProxyEmitter instance bound to the DOM Node.\n\t */\n\tconstructor( node ) {\n\t\t// Set emitter ID to match DOM Node \"expando\" property.\n\t\t_setEmitterId( this, getNodeUID( node ) );\n\n\t\t// Remember the DOM Node this ProxyEmitter is bound to.\n\t\tthis._domNode = node;\n\t}\n}\n\nextend( ProxyEmitter.prototype, EmitterMixin, {\n\t/**\n\t * Collection of native DOM listeners.\n\t *\n\t * @private\n\t * @member {Object} module:utils/dom/emittermixin~ProxyEmitter#_domListeners\n\t */\n\n\t/**\n\t * Registers a callback function to be executed when an event is fired.\n\t *\n\t * It attaches a native DOM listener to the DOM Node. When fired,\n\t * a corresponding Emitter event will also fire with DOM Event object as an argument.\n\t *\n\t * @method module:utils/dom/emittermixin~ProxyEmitter#attach\n\t * @param {String} event The name of the event.\n\t * @param {Function} callback The function to be called on event.\n\t * @param {Object} [options={}] Additional options.\n\t * @param {Boolean} [options.useCapture=false] Indicates that events of this type will be dispatched to the registered\n\t * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n\t */\n\tattach( event, callback, options = {} ) {\n\t\t// If the DOM Listener for given event already exist it is pointless\n\t\t// to attach another one.\n\t\tif ( this._domListeners && this._domListeners[ event ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst domListener = this._createDomListener( event, !!options.useCapture );\n\n\t\t// Attach the native DOM listener to DOM Node.\n\t\tthis._domNode.addEventListener( event, domListener, !!options.useCapture );\n\n\t\tif ( !this._domListeners ) {\n\t\t\tthis._domListeners = {};\n\t\t}\n\n\t\t// Store the native DOM listener in this ProxyEmitter. It will be helpful\n\t\t// when stopping listening to the event.\n\t\tthis._domListeners[ event ] = domListener;\n\t},\n\n\t/**\n\t * Stops executing the callback on the given event.\n\t *\n\t * @method module:utils/dom/emittermixin~ProxyEmitter#detach\n\t * @param {String} event The name of the event.\n\t */\n\tdetach( event ) {\n\t\tlet events;\n\n\t\t// Remove native DOM listeners which are orphans. If no callbacks\n\t\t// are awaiting given event, detach native DOM listener from DOM Node.\n\t\t// See: {@link attach}.\n\n\t\tif ( this._domListeners[ event ] && ( !( events = this._events[ event ] ) || !events.callbacks.length ) ) {\n\t\t\tthis._domListeners[ event ].removeListener();\n\t\t}\n\t},\n\n\t/**\n\t * Creates a native DOM listener callback. When the native DOM event\n\t * is fired it will fire corresponding event on this ProxyEmitter.\n\t * Note: A native DOM Event is passed as an argument.\n\t *\n\t * @private\n\t * @method module:utils/dom/emittermixin~ProxyEmitter#_createDomListener\n\t * @param {String} event The name of the event.\n\t * @param {Boolean} useCapture Indicates whether the listener was created for capturing event.\n\t * @returns {Function} The DOM listener callback.\n\t */\n\t_createDomListener( event, useCapture ) {\n\t\tconst domListener = domEvt => {\n\t\t\tthis.fire( event, domEvt );\n\t\t};\n\n\t\t// Supply the DOM listener callback with a function that will help\n\t\t// detach it from the DOM Node, when it is no longer necessary.\n\t\t// See: {@link detach}.\n\t\tdomListener.removeListener = () => {\n\t\t\tthis._domNode.removeEventListener( event, domListener, useCapture );\n\t\t\tdelete this._domListeners[ event ];\n\t\t};\n\n\t\treturn domListener;\n\t}\n} );\n\n// Gets an unique DOM Node identifier. The identifier will be set if not defined.\n//\n// @private\n// @param {Node} node\n// @returns {String} UID for given DOM Node.\nfunction getNodeUID( node ) {\n\treturn node[ 'data-ck-expando' ] || ( node[ 'data-ck-expando' ] = uid() );\n}\n\n/**\n * Interface representing classes which mix in {@link module:utils/dom/emittermixin~EmitterMixin}.\n *\n * @interface Emitter\n */\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/observer\n */\n\nimport DomEmitterMixin from '@ckeditor/ckeditor5-utils/src/dom/emittermixin';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\n\n/**\n * Abstract base observer class. Observers are classes which listen to DOM events, do the preliminary\n * processing and fire events on the {@link module:engine/view/document~Document} objects.\n * Observers can also add features to the view, for instance by updating its status or marking elements\n * which need refresh on DOM events.\n *\n * @abstract\n */\nexport default class Observer {\n\t/**\n\t * Creates an instance of the observer.\n\t *\n\t * @param {module:engine/view/view~View} view\n\t */\n\tconstructor( view ) {\n\t\t/**\n\t\t * Instance of the view controller.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/view~View}\n\t\t */\n\t\tthis.view = view;\n\n\t\t/**\n\t\t * Reference to the {@link module:engine/view/document~Document} object.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/document~Document}\n\t\t */\n\t\tthis.document = view.document;\n\n\t\t/**\n\t\t * State of the observer. If it is disabled events will not be fired.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Boolean}\n\t\t */\n\t\tthis.isEnabled = false;\n\t}\n\n\t/**\n\t * Enables the observer. This method is called when the observer is registered to the\n\t * {@link module:engine/view/view~View} and after {@link module:engine/view/view~View#forceRender rendering}\n\t * (all observers are {@link #disable disabled} before rendering).\n\t *\n\t * A typical use case for disabling observers is that mutation observers need to be disabled for the rendering.\n\t * However, a child class may not need to be disabled, so it can implement an empty method.\n\t *\n\t * @see module:engine/view/observer/observer~Observer#disable\n\t */\n\tenable() {\n\t\tthis.isEnabled = true;\n\t}\n\n\t/**\n\t * Disables the observer. This method is called before\n\t * {@link module:engine/view/view~View#forceRender rendering} to prevent firing events during rendering.\n\t *\n\t * @see module:engine/view/observer/observer~Observer#enable\n\t */\n\tdisable() {\n\t\tthis.isEnabled = false;\n\t}\n\n\t/**\n\t * Disables and destroys the observer, among others removes event listeners created by the observer.\n\t */\n\tdestroy() {\n\t\tthis.disable();\n\t\tthis.stopListening();\n\t}\n\n\t/**\n\t * Starts observing the given root element.\n\t *\n\t * @method #observe\n\t * @param {HTMLElement} domElement\n\t * @param {String} name The name of the root element.\n\t */\n}\n\nmix( Observer, DomEmitterMixin );\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nexport default isEqualWith;\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/mutationobserver\n */\n\n/* globals window */\n\nimport Observer from './observer';\nimport ViewSelection from '../selection';\nimport { startsWithFiller, getDataWithoutFiller } from '../filler';\nimport { isEqualWith } from 'lodash-es';\n\n/**\n * Mutation observer class observes changes in the DOM, fires {@link module:engine/view/document~Document#event:mutations} event, mark view\n * elements as changed and call {@link module:engine/view/renderer~Renderer#render}.\n * Because all mutated nodes are marked as \"to be rendered\" and the\n * {@link module:engine/view/renderer~Renderer#render} is called, all changes will be reverted, unless the mutation will be handled by the\n * {@link module:engine/view/document~Document#event:mutations} event listener. It means user will see only handled changes, and the editor\n * will block all changes which are not handled.\n *\n * Mutation Observer also take care of reducing number of mutations which are fired. It removes duplicates and\n * mutations on elements which do not have corresponding view elements. Also\n * {@link module:engine/view/observer/mutationobserver~MutatedText text mutation} is fired only if parent element do not change child list.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nexport default class MutationObserver extends Observer {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\t/**\n\t\t * Native mutation observer config.\n\t\t *\n\t\t * @private\n\t\t * @member {Object}\n\t\t */\n\t\tthis._config = {\n\t\t\tchildList: true,\n\t\t\tcharacterData: true,\n\t\t\tcharacterDataOldValue: true,\n\t\t\tsubtree: true\n\t\t};\n\n\t\t/**\n\t\t * Reference to the {@link module:engine/view/view~View#domConverter}.\n\t\t *\n\t\t * @member {module:engine/view/domconverter~DomConverter}\n\t\t */\n\t\tthis.domConverter = view.domConverter;\n\n\t\t/**\n\t\t * Reference to the {@link module:engine/view/view~View#_renderer}.\n\t\t *\n\t\t * @member {module:engine/view/renderer~Renderer}\n\t\t */\n\t\tthis.renderer = view._renderer;\n\n\t\t/**\n\t\t * Observed DOM elements.\n\t\t *\n\t\t * @private\n\t\t * @member {Array.}\n\t\t */\n\t\tthis._domElements = [];\n\n\t\t/**\n\t\t * Native mutation observer.\n\t\t *\n\t\t * @private\n\t\t * @member {MutationObserver}\n\t\t */\n\t\tthis._mutationObserver = new window.MutationObserver( this._onMutations.bind( this ) );\n\t}\n\n\t/**\n\t * Synchronously fires {@link module:engine/view/document~Document#event:mutations} event with all mutations in record queue.\n\t * At the same time empties the queue so mutations will not be fired twice.\n\t */\n\tflush() {\n\t\tthis._onMutations( this._mutationObserver.takeRecords() );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tobserve( domElement ) {\n\t\tthis._domElements.push( domElement );\n\n\t\tif ( this.isEnabled ) {\n\t\t\tthis._mutationObserver.observe( domElement, this._config );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tenable() {\n\t\tsuper.enable();\n\n\t\tfor ( const domElement of this._domElements ) {\n\t\t\tthis._mutationObserver.observe( domElement, this._config );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdisable() {\n\t\tsuper.disable();\n\n\t\tthis._mutationObserver.disconnect();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tsuper.destroy();\n\n\t\tthis._mutationObserver.disconnect();\n\t}\n\n\t/**\n\t * Handles mutations. Deduplicates, mark view elements to sync, fire event and call render.\n\t *\n\t * @private\n\t * @param {Array.} domMutations Array of native mutations.\n\t */\n\t_onMutations( domMutations ) {\n\t\t// As a result of this.flush() we can have an empty collection.\n\t\tif ( domMutations.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst domConverter = this.domConverter;\n\n\t\t// Use map and set for deduplication.\n\t\tconst mutatedTexts = new Map();\n\t\tconst mutatedElements = new Set();\n\n\t\t// Handle `childList` mutations first, so we will be able to check if the `characterData` mutation is in the\n\t\t// element with changed structure anyway.\n\t\tfor ( const mutation of domMutations ) {\n\t\t\tif ( mutation.type === 'childList' ) {\n\t\t\t\tconst element = domConverter.mapDomToView( mutation.target );\n\n\t\t\t\t// Do not collect mutations from UIElements.\n\t\t\t\tif ( element && element.is( 'uiElement' ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( element && !this._isBogusBrMutation( mutation ) ) {\n\t\t\t\t\tmutatedElements.add( element );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle `characterData` mutations later, when we have the full list of nodes which changed structure.\n\t\tfor ( const mutation of domMutations ) {\n\t\t\tconst element = domConverter.mapDomToView( mutation.target );\n\n\t\t\t// Do not collect mutations from UIElements.\n\t\t\tif ( element && element.is( 'uiElement' ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( mutation.type === 'characterData' ) {\n\t\t\t\tconst text = domConverter.findCorrespondingViewText( mutation.target );\n\n\t\t\t\tif ( text && !mutatedElements.has( text.parent ) ) {\n\t\t\t\t\t// Use text as a key, for deduplication. If there will be another mutation on the same text element\n\t\t\t\t\t// we will have only one in the map.\n\t\t\t\t\tmutatedTexts.set( text, {\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\toldText: text.data,\n\t\t\t\t\t\tnewText: getDataWithoutFiller( mutation.target ),\n\t\t\t\t\t\tnode: text\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\t// When we added first letter to the text node which had only inline filler, for the DOM it is mutation\n\t\t\t\t// on text, but for the view, where filler text node did not existed, new text node was created, so we\n\t\t\t\t// need to fire 'children' mutation instead of 'text'.\n\t\t\t\telse if ( !text && startsWithFiller( mutation.target ) ) {\n\t\t\t\t\tmutatedElements.add( domConverter.mapDomToView( mutation.target.parentNode ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Now we build the list of mutations to fire and mark elements. We did not do it earlier to avoid marking the\n\t\t// same node multiple times in case of duplication.\n\n\t\t// List of mutations we will fire.\n\t\tconst viewMutations = [];\n\n\t\tfor ( const mutatedText of mutatedTexts.values() ) {\n\t\t\tthis.renderer.markToSync( 'text', mutatedText.node );\n\t\t\tviewMutations.push( mutatedText );\n\t\t}\n\n\t\tfor ( const viewElement of mutatedElements ) {\n\t\t\tconst domElement = domConverter.mapViewToDom( viewElement );\n\t\t\tconst viewChildren = Array.from( viewElement.getChildren() );\n\t\t\tconst newViewChildren = Array.from( domConverter.domChildrenToView( domElement, { withChildren: false } ) );\n\n\t\t\t// It may happen that as a result of many changes (sth was inserted and then removed),\n\t\t\t// both elements haven't really changed. #1031\n\t\t\tif ( !isEqualWith( viewChildren, newViewChildren, sameNodes ) ) {\n\t\t\t\tthis.renderer.markToSync( 'children', viewElement );\n\n\t\t\t\tviewMutations.push( {\n\t\t\t\t\ttype: 'children',\n\t\t\t\t\toldChildren: viewChildren,\n\t\t\t\t\tnewChildren: newViewChildren,\n\t\t\t\t\tnode: viewElement\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t// Retrieve `domSelection` using `ownerDocument` of one of mutated nodes.\n\t\t// There should not be simultaneous mutation in multiple documents, so it's fine.\n\t\tconst domSelection = domMutations[ 0 ].target.ownerDocument.getSelection();\n\n\t\tlet viewSelection = null;\n\n\t\tif ( domSelection && domSelection.anchorNode ) {\n\t\t\t// If `domSelection` is inside a dom node that is already bound to a view node from view tree, get\n\t\t\t// corresponding selection in the view and pass it together with `viewMutations`. The `viewSelection` may\n\t\t\t// be used by features handling mutations.\n\t\t\t// Only one range is supported.\n\n\t\t\tconst viewSelectionAnchor = domConverter.domPositionToView( domSelection.anchorNode, domSelection.anchorOffset );\n\t\t\tconst viewSelectionFocus = domConverter.domPositionToView( domSelection.focusNode, domSelection.focusOffset );\n\n\t\t\t// Anchor and focus has to be properly mapped to view.\n\t\t\tif ( viewSelectionAnchor && viewSelectionFocus ) {\n\t\t\t\tviewSelection = new ViewSelection( viewSelectionAnchor );\n\t\t\t\tviewSelection.setFocus( viewSelectionFocus );\n\t\t\t}\n\t\t}\n\n\t\t// In case only non-relevant mutations were recorded it skips the event and force render (#5600).\n\t\tif ( viewMutations.length ) {\n\t\t\tthis.document.fire( 'mutations', viewMutations, viewSelection );\n\n\t\t\t// If nothing changes on `mutations` event, at this point we have \"dirty DOM\" (changed) and de-synched\n\t\t\t// view (which has not been changed). In order to \"reset DOM\" we render the view again.\n\t\t\tthis.view.forceRender();\n\t\t}\n\n\t\tfunction sameNodes( child1, child2 ) {\n\t\t\t// First level of comparison (array of children vs array of children) – use the Lodash's default behavior.\n\t\t\tif ( Array.isArray( child1 ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Elements.\n\t\t\tif ( child1 === child2 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t// Texts.\n\t\t\telse if ( child1.is( 'text' ) && child2.is( 'text' ) ) {\n\t\t\t\treturn child1.data === child2.data;\n\t\t\t}\n\n\t\t\t// Not matching types.\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Checks if mutation was generated by the browser inserting bogus br on the end of the block element.\n\t * Such mutations are generated while pressing space or performing native spellchecker correction\n\t * on the end of the block element in Firefox browser.\n\t *\n\t * @private\n\t * @param {Object} mutation Native mutation object.\n\t * @returns {Boolean}\n\t */\n\t_isBogusBrMutation( mutation ) {\n\t\tlet addedNode = null;\n\n\t\t// Check if mutation added only one node on the end of its parent.\n\t\tif ( mutation.nextSibling === null && mutation.removedNodes.length === 0 && mutation.addedNodes.length == 1 ) {\n\t\t\taddedNode = this.domConverter.domToView( mutation.addedNodes[ 0 ], {\n\t\t\t\twithChildren: false\n\t\t\t} );\n\t\t}\n\n\t\treturn addedNode && addedNode.is( 'element', 'br' );\n\t}\n}\n\n/**\n * Fired when mutation occurred. If tree view is not changed on this event, DOM will be reverted to the state before\n * mutation, so all changes which should be applied, should be handled on this event.\n *\n * Introduced by {@link module:engine/view/observer/mutationobserver~MutationObserver}.\n *\n * Note that because {@link module:engine/view/observer/mutationobserver~MutationObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/mutationobserver~MutationObserver\n * @event module:engine/view/document~Document#event:mutations\n * @param {Array.}\n * viewMutations Array of mutations.\n * For mutated texts it will be {@link module:engine/view/observer/mutationobserver~MutatedText} and for mutated elements it will be\n * {@link module:engine/view/observer/mutationobserver~MutatedChildren}. You can recognize the type based on the `type` property.\n * @param {module:engine/view/selection~Selection|null} viewSelection View selection that is a result of converting DOM selection to view.\n * Keep in\n * mind that the DOM selection is already \"updated\", meaning that it already acknowledges changes done in mutation.\n */\n\n/**\n * Mutation item for text.\n *\n * @see module:engine/view/document~Document#event:mutations\n * @see module:engine/view/observer/mutationobserver~MutatedChildren\n *\n * @typedef {Object} module:engine/view/observer/mutationobserver~MutatedText\n *\n * @property {String} type For text mutations it is always 'text'.\n * @property {module:engine/view/text~Text} node Mutated text node.\n * @property {String} oldText Old text.\n * @property {String} newText New text.\n */\n\n/**\n * Mutation item for child nodes.\n *\n * @see module:engine/view/document~Document#event:mutations\n * @see module:engine/view/observer/mutationobserver~MutatedText\n *\n * @typedef {Object} module:engine/view/observer/mutationobserver~MutatedChildren\n *\n * @property {String} type For child nodes mutations it is always 'children'.\n * @property {module:engine/view/element~Element} node Parent of the mutated children.\n * @property {Array.} oldChildren Old child nodes.\n * @property {Array.} newChildren New child nodes.\n */\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/domeventdata\n */\n\nimport { extend } from 'lodash-es';\n\n/**\n * Information about a DOM event in context of the {@link module:engine/view/document~Document}.\n * It wraps the native event, which usually should not be used as the wrapper contains\n * additional data (like key code for keyboard events).\n */\nexport default class DomEventData {\n\t/**\n\t * @param {module:engine/view/view~View} view The instance of the view controller.\n\t * @param {Event} domEvent The DOM event.\n\t * @param {Object} [additionalData] Additional properties that the instance should contain.\n\t */\n\tconstructor( view, domEvent, additionalData ) {\n\t\t/**\n\t\t * Instance of the view controller.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/view~View} module:engine/view/observer/observer~Observer.DomEvent#view\n\t\t */\n\t\tthis.view = view;\n\n\t\t/**\n\t\t * The instance of the document.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/document~Document} module:engine/view/observer/observer~Observer.DomEvent#document\n\t\t */\n\t\tthis.document = view.document;\n\n\t\t/**\n\t\t * The DOM event.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Event} module:engine/view/observer/observer~Observer.DomEvent#domEvent\n\t\t */\n\t\tthis.domEvent = domEvent;\n\n\t\t/**\n\t\t * The DOM target.\n\t\t *\n\t\t * @readonly\n\t\t * @member {HTMLElement} module:engine/view/observer/observer~Observer.DomEvent#target\n\t\t */\n\t\tthis.domTarget = domEvent.target;\n\n\t\textend( this, additionalData );\n\t}\n\n\t/**\n\t * The tree view element representing the target.\n\t *\n\t * @readonly\n\t * @type module:engine/view/element~Element\n\t */\n\tget target() {\n\t\treturn this.view.domConverter.mapDomToView( this.domTarget );\n\t}\n\n\t/**\n\t * Prevents the native's event default action.\n\t */\n\tpreventDefault() {\n\t\tthis.domEvent.preventDefault();\n\t}\n\n\t/**\n\t * Stops native event propagation.\n\t */\n\tstopPropagation() {\n\t\tthis.domEvent.stopPropagation();\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/domeventobserver\n */\n\nimport Observer from './observer';\nimport DomEventData from './domeventdata';\n\n/**\n * Base class for DOM event observers. This class handles\n * {@link module:engine/view/observer/observer~Observer#observe adding} listeners to DOM elements,\n * {@link module:engine/view/observer/observer~Observer#disable disabling} and\n * {@link module:engine/view/observer/observer~Observer#enable re-enabling} events.\n * Child class needs to define\n * {@link module:engine/view/observer/domeventobserver~DomEventObserver#domEventType DOM event type} and\n * {@link module:engine/view/observer/domeventobserver~DomEventObserver#onDomEvent callback}.\n *\n * For instance:\n *\n *\t\tclass ClickObserver extends DomEventObserver {\n *\t\t\t// It can also be defined as a normal property in the constructor.\n *\t\t\tget domEventType() {\n *\t\t\t\treturn 'click';\n *\t\t\t}\n *\n *\t\t\tonDomEvent( domEvent ) {\n *\t\t\t\tthis.fire( 'click', domEvent );\n *\t\t\t}\n *\t\t}\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nexport default class DomEventObserver extends Observer {\n\t/**\n\t * Type of the DOM event the observer should listen on. Array of types can be defined\n\t * if the obsever should listen to multiple DOM events.\n\t *\n\t * @readonly\n\t * @member {String|Array.} #domEventType\n\t */\n\n\t/**\n\t * Callback which should be called when the DOM event occurred. Note that the callback will not be called if\n\t * observer {@link #isEnabled is not enabled}.\n\t *\n\t * @see #domEventType\n\t * @abstract\n\t * @method #onDomEvent\n\t */\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\t/**\n\t\t * If set to `true` DOM events will be listened on the capturing phase.\n\t\t * Default value is `false`.\n\t\t *\n\t\t * @member {Boolean}\n\t\t */\n\t\tthis.useCapture = false;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tobserve( domElement ) {\n\t\tconst types = typeof this.domEventType == 'string' ? [ this.domEventType ] : this.domEventType;\n\n\t\ttypes.forEach( type => {\n\t\t\tthis.listenTo( domElement, type, ( eventInfo, domEvent ) => {\n\t\t\t\tif ( this.isEnabled ) {\n\t\t\t\t\tthis.onDomEvent( domEvent );\n\t\t\t\t}\n\t\t\t}, { useCapture: this.useCapture } );\n\t\t} );\n\t}\n\n\t/**\n\t * Calls `Document#fire()` if observer {@link #isEnabled is enabled}.\n\t *\n\t * @see module:utils/emittermixin~EmitterMixin#fire\n\t * @param {String} eventType The event type (name).\n\t * @param {Event} domEvent The DOM event.\n\t * @param {Object} [additionalData] The additional data which should extend the\n\t * {@link module:engine/view/observer/domeventdata~DomEventData event data} object.\n\t */\n\tfire( eventType, domEvent, additionalData ) {\n\t\tif ( this.isEnabled ) {\n\t\t\tthis.document.fire( eventType, new DomEventData( this.view, domEvent, additionalData ) );\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/keyobserver\n */\n\nimport DomEventObserver from './domeventobserver';\nimport { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';\n\n/**\n * Observer for events connected with pressing keyboard keys.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class KeyObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'keydown', 'keyup' ];\n\t}\n\n\tonDomEvent( domEvt ) {\n\t\tthis.fire( domEvt.type, domEvt, {\n\t\t\tkeyCode: domEvt.keyCode,\n\n\t\t\taltKey: domEvt.altKey,\n\t\t\tctrlKey: domEvt.ctrlKey || domEvt.metaKey,\n\t\t\tshiftKey: domEvt.shiftKey,\n\n\t\t\tget keystroke() {\n\t\t\t\treturn getCode( this );\n\t\t\t}\n\t\t} );\n\t}\n}\n\n/**\n * Fired when a key has been pressed.\n *\n * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.\n *\n * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/keyobserver~KeyObserver\n * @event module:engine/view/document~Document#event:keydown\n * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData\n */\n\n/**\n * Fired when a key has been released.\n *\n * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.\n *\n * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/keyobserver~KeyObserver\n * @event module:engine/view/document~Document#event:keyup\n * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData\n */\n\n/**\n * The value of both events - {@link module:engine/view/document~Document#event:keydown} and\n * {@link module:engine/view/document~Document#event:keyup}.\n *\n * @class module:engine/view/observer/keyobserver~KeyEventData\n * @extends module:engine/view/observer/domeventdata~DomEventData\n * @implements module:utils/keyboard~KeystrokeInfo\n */\n\n/**\n * Code of the whole keystroke. See {@link module:utils/keyboard~getCode}.\n *\n * @readonly\n * @member {Number} module:engine/view/observer/keyobserver~KeyEventData#keystroke\n */\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/fakeselectionobserver\n */\n\nimport Observer from './observer';\nimport ViewSelection from '../selection';\nimport { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';\nimport { debounce } from 'lodash-es';\n\n/**\n * Fake selection observer class. If view selection is fake it is placed in dummy DOM container. This observer listens\n * on {@link module:engine/view/document~Document#event:keydown keydown} events and handles moving fake view selection to the correct place\n * if arrow keys are pressed.\n * Fires {@link module:engine/view/document~Document#event:selectionChange selectionChange event} simulating natural behaviour of\n * {@link module:engine/view/observer/selectionobserver~SelectionObserver SelectionObserver}.\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nexport default class FakeSelectionObserver extends Observer {\n\t/**\n\t * Creates new FakeSelectionObserver instance.\n\t *\n\t * @param {module:engine/view/view~View} view\n\t */\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\t/**\n\t\t * Fires debounced event `selectionChangeDone`. It uses `lodash#debounce` method to delay function call.\n\t\t *\n\t\t * @private\n\t\t * @param {Object} data Selection change data.\n\t\t * @method #_fireSelectionChangeDoneDebounced\n\t\t */\n\t\tthis._fireSelectionChangeDoneDebounced = debounce( data => this.document.fire( 'selectionChangeDone', data ), 200 );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tobserve() {\n\t\tconst document = this.document;\n\n\t\tdocument.on( 'keydown', ( eventInfo, data ) => {\n\t\t\tconst selection = document.selection;\n\n\t\t\tif ( selection.isFake && _isArrowKeyCode( data.keyCode ) && this.isEnabled ) {\n\t\t\t\t// Prevents default key down handling - no selection change will occur.\n\t\t\t\tdata.preventDefault();\n\n\t\t\t\tthis._handleSelectionMove( data.keyCode );\n\t\t\t}\n\t\t}, { priority: 'lowest' } );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tsuper.destroy();\n\n\t\tthis._fireSelectionChangeDoneDebounced.cancel();\n\t}\n\n\t/**\n\t * Handles collapsing view selection according to given key code. If left or up key is provided - new selection will be\n\t * collapsed to left. If right or down key is pressed - new selection will be collapsed to right.\n\t *\n\t * This method fires {@link module:engine/view/document~Document#event:selectionChange} and\n\t * {@link module:engine/view/document~Document#event:selectionChangeDone} events imitating behaviour of\n\t * {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n\t *\n\t * @private\n\t * @param {Number} keyCode\n\t * @fires module:engine/view/document~Document#event:selectionChange\n\t * @fires module:engine/view/document~Document#event:selectionChangeDone\n\t */\n\t_handleSelectionMove( keyCode ) {\n\t\tconst selection = this.document.selection;\n\t\tconst newSelection = new ViewSelection( selection.getRanges(), { backward: selection.isBackward, fake: false } );\n\n\t\t// Left or up arrow pressed - move selection to start.\n\t\tif ( keyCode == keyCodes.arrowleft || keyCode == keyCodes.arrowup ) {\n\t\t\tnewSelection.setTo( newSelection.getFirstPosition() );\n\t\t}\n\n\t\t// Right or down arrow pressed - move selection to end.\n\t\tif ( keyCode == keyCodes.arrowright || keyCode == keyCodes.arrowdown ) {\n\t\t\tnewSelection.setTo( newSelection.getLastPosition() );\n\t\t}\n\n\t\tconst data = {\n\t\t\toldSelection: selection,\n\t\t\tnewSelection,\n\t\t\tdomSelection: null\n\t\t};\n\n\t\t// Fire dummy selection change event.\n\t\tthis.document.fire( 'selectionChange', data );\n\n\t\t// Call` #_fireSelectionChangeDoneDebounced` every time when `selectionChange` event is fired.\n\t\t// This function is debounced what means that `selectionChangeDone` event will be fired only when\n\t\t// defined int the function time will elapse since the last time the function was called.\n\t\t// So `selectionChangeDone` will be fired when selection will stop changing.\n\t\tthis._fireSelectionChangeDoneDebounced( data );\n\t}\n}\n\n// Checks if one of the arrow keys is pressed.\n//\n// @private\n// @param {Number} keyCode\n// @returns {Boolean}\nfunction _isArrowKeyCode( keyCode ) {\n\treturn keyCode == keyCodes.arrowright ||\n\t\tkeyCode == keyCodes.arrowleft ||\n\t\tkeyCode == keyCodes.arrowup ||\n\t\tkeyCode == keyCodes.arrowdown;\n}\n\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/selectionobserver\n */\n\n/* global setInterval, clearInterval */\n\nimport Observer from './observer';\nimport MutationObserver from './mutationobserver';\nimport { debounce } from 'lodash-es';\n\n/**\n * Selection observer class observes selection changes in the document. If selection changes on the document this\n * observer checks if there are any mutations and if DOM selection is different than the\n * {@link module:engine/view/document~Document#selection view selection}. Selection observer fires\n * {@link module:engine/view/document~Document#event:selectionChange} event only if selection change was the only change in the document\n * and DOM selection is different then the view selection.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @see module:engine/view/observer/mutationobserver~MutationObserver\n * @extends module:engine/view/observer/observer~Observer\n */\nexport default class SelectionObserver extends Observer {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\t/**\n\t\t * Instance of the mutation observer. Selection observer calls\n\t\t * {@link module:engine/view/observer/mutationobserver~MutationObserver#flush} to ensure that the mutations will be handled\n\t\t * before the {@link module:engine/view/document~Document#event:selectionChange} event is fired.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/observer/mutationobserver~MutationObserver}\n\t\t * module:engine/view/observer/selectionobserver~SelectionObserver#mutationObserver\n\t\t */\n\t\tthis.mutationObserver = view.getObserver( MutationObserver );\n\n\t\t/**\n\t\t * Reference to the view {@link module:engine/view/documentselection~DocumentSelection} object used to compare\n\t\t * new selection with it.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/documentselection~DocumentSelection}\n\t\t * module:engine/view/observer/selectionobserver~SelectionObserver#selection\n\t\t */\n\t\tthis.selection = this.document.selection;\n\n\t\t/* eslint-disable max-len */\n\t\t/**\n\t\t * Reference to the {@link module:engine/view/view~View#domConverter}.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:engine/view/domconverter~DomConverter} module:engine/view/observer/selectionobserver~SelectionObserver#domConverter\n\t\t */\n\t\t/* eslint-enable max-len */\n\t\tthis.domConverter = view.domConverter;\n\n\t\t/**\n\t\t * Set of documents which have added \"selectionchange\" listener to avoid adding listener twice to the same\n\t\t * document.\n\t\t *\n\t\t * @private\n\t\t * @member {WeakSet.} module:engine/view/observer/selectionobserver~SelectionObserver#_documents\n\t\t */\n\t\tthis._documents = new WeakSet();\n\n\t\t/**\n\t\t * Fires debounced event `selectionChangeDone`. It uses `lodash#debounce` method to delay function call.\n\t\t *\n\t\t * @private\n\t\t * @param {Object} data Selection change data.\n\t\t * @method #_fireSelectionChangeDoneDebounced\n\t\t */\n\t\tthis._fireSelectionChangeDoneDebounced = debounce( data => this.document.fire( 'selectionChangeDone', data ), 200 );\n\n\t\tthis._clearInfiniteLoopInterval = setInterval( () => this._clearInfiniteLoop(), 1000 );\n\n\t\t/**\n\t\t * Private property to check if the code does not enter infinite loop.\n\t\t *\n\t\t * @private\n\t\t * @member {Number} module:engine/view/observer/selectionobserver~SelectionObserver#_loopbackCounter\n\t\t */\n\t\tthis._loopbackCounter = 0;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tobserve( domElement ) {\n\t\tconst domDocument = domElement.ownerDocument;\n\n\t\t// Add listener once per each document.\n\t\tif ( this._documents.has( domDocument ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.listenTo( domDocument, 'selectionchange', () => {\n\t\t\tthis._handleSelectionChange( domDocument );\n\t\t} );\n\n\t\tthis._documents.add( domDocument );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tsuper.destroy();\n\n\t\tclearInterval( this._clearInfiniteLoopInterval );\n\t\tthis._fireSelectionChangeDoneDebounced.cancel();\n\t}\n\n\t/**\n\t * Selection change listener. {@link module:engine/view/observer/mutationobserver~MutationObserver#flush Flush} mutations, check if\n\t * selection changes and fires {@link module:engine/view/document~Document#event:selectionChange} event on every change\n\t * and {@link module:engine/view/document~Document#event:selectionChangeDone} when selection stop changing.\n\t *\n\t * @private\n\t * @param {Document} domDocument DOM document.\n\t */\n\t_handleSelectionChange( domDocument ) {\n\t\tif ( !this.isEnabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ensure the mutation event will be before selection event on all browsers.\n\t\tthis.mutationObserver.flush();\n\n\t\t// If there were mutations then the view will be re-rendered by the mutation observer and selection\n\t\t// will be updated, so selections will equal and event will not be fired, as expected.\n\t\tconst domSelection = domDocument.defaultView.getSelection();\n\t\tconst newViewSelection = this.domConverter.domSelectionToView( domSelection );\n\n\t\t// Do not convert selection change if the new view selection has no ranges in it.\n\t\t//\n\t\t// It means that the DOM selection is in some way incorrect. Ranges that were in the DOM selection could not be\n\t\t// converted to the view. This happens when the DOM selection was moved outside of the editable element.\n\t\tif ( newViewSelection.rangeCount == 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.selection.isEqual( newViewSelection ) && this.domConverter.isDomSelectionCorrect( domSelection ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ensure we are not in the infinite loop (#400).\n\t\t// This counter is reset each second. 60 selection changes in 1 second is enough high number\n\t\t// to be very difficult (impossible) to achieve using just keyboard keys (during normal editor use).\n\t\tif ( ++this._loopbackCounter > 60 ) {\n\t\t\t// Selection change observer detected an infinite rendering loop.\n\t\t\t// Most probably you try to put the selection in the position which is not allowed\n\t\t\t// by the browser and browser fixes it automatically what causes `selectionchange` event on\n\t\t\t// which a loopback through a model tries to re-render the wrong selection and again.\n\t\t\t//\n\t\t\t// @if CK_DEBUG // console.warn( 'Selection change observer detected an infinite rendering loop.' );\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.selection.isSimilar( newViewSelection ) ) {\n\t\t\t// If selection was equal and we are at this point of algorithm, it means that it was incorrect.\n\t\t\t// Just re-render it, no need to fire any events, etc.\n\t\t\tthis.view.forceRender();\n\t\t} else {\n\t\t\tconst data = {\n\t\t\t\toldSelection: this.selection,\n\t\t\t\tnewSelection: newViewSelection,\n\t\t\t\tdomSelection\n\t\t\t};\n\n\t\t\t// Prepare data for new selection and fire appropriate events.\n\t\t\tthis.document.fire( 'selectionChange', data );\n\n\t\t\t// Call` #_fireSelectionChangeDoneDebounced` every time when `selectionChange` event is fired.\n\t\t\t// This function is debounced what means that `selectionChangeDone` event will be fired only when\n\t\t\t// defined int the function time will elapse since the last time the function was called.\n\t\t\t// So `selectionChangeDone` will be fired when selection will stop changing.\n\t\t\tthis._fireSelectionChangeDoneDebounced( data );\n\t\t}\n\t}\n\n\t/**\n\t * Clears `SelectionObserver` internal properties connected with preventing infinite loop.\n\t *\n\t * @protected\n\t */\n\t_clearInfiniteLoop() {\n\t\tthis._loopbackCounter = 0;\n\t}\n}\n\n/**\n * Fired when selection has changed. This event is fired only when the selection change was the only change that happened\n * in the document, and old selection is different then the new selection.\n *\n * Introduced by {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n *\n * Note that because {@link module:engine/view/observer/selectionobserver~SelectionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/selectionobserver~SelectionObserver\n * @event module:engine/view/document~Document#event:selectionChange\n * @param {Object} data\n * @param {module:engine/view/documentselection~DocumentSelection} data.oldSelection Old View selection which is\n * {@link module:engine/view/document~Document#selection}.\n * @param {module:engine/view/selection~Selection} data.newSelection New View selection which is converted DOM selection.\n * @param {Selection} data.domSelection Native DOM selection.\n */\n\n/**\n * Fired when selection stops changing.\n *\n * Introduced by {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n *\n * Note that because {@link module:engine/view/observer/selectionobserver~SelectionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/selectionobserver~SelectionObserver\n * @event module:engine/view/document~Document#event:selectionChangeDone\n * @param {Object} data\n * @param {module:engine/view/documentselection~DocumentSelection} data.oldSelection Old View selection which is\n * {@link module:engine/view/document~Document#selection}.\n * @param {module:engine/view/selection~Selection} data.newSelection New View selection which is converted DOM selection.\n * @param {Selection} data.domSelection Native DOM selection.\n */\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/focusobserver\n */\n\n/* globals setTimeout, clearTimeout */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * {@link module:engine/view/document~Document#event:focus Focus}\n * and {@link module:engine/view/document~Document#event:blur blur} events observer.\n * Focus observer handle also {@link module:engine/view/rooteditableelement~RootEditableElement#isFocused isFocused} property of the\n * {@link module:engine/view/rooteditableelement~RootEditableElement root elements}.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class FocusObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'focus', 'blur' ];\n\t\tthis.useCapture = true;\n\t\tconst document = this.document;\n\n\t\tdocument.on( 'focus', () => {\n\t\t\tdocument.isFocused = true;\n\n\t\t\t// Unfortunately native `selectionchange` event is fired asynchronously.\n\t\t\t// We need to wait until `SelectionObserver` handle the event and then render. Otherwise rendering will\n\t\t\t// overwrite new DOM selection with selection from the view.\n\t\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/795 for more details.\n\t\t\t// Long timeout is needed to solve #676 and https://github.com/ckeditor/ckeditor5-engine/issues/1157 issues.\n\t\t\tthis._renderTimeoutId = setTimeout( () => view.forceRender(), 50 );\n\t\t} );\n\n\t\tdocument.on( 'blur', ( evt, data ) => {\n\t\t\tconst selectedEditable = document.selection.editableElement;\n\n\t\t\tif ( selectedEditable === null || selectedEditable === data.target ) {\n\t\t\t\tdocument.isFocused = false;\n\n\t\t\t\t// Re-render the document to update view elements.\n\t\t\t\tview.forceRender();\n\t\t\t}\n\t\t} );\n\n\t\t/**\n\t\t * Identifier of the timeout currently used by focus listener to delay rendering execution.\n\t\t *\n\t\t * @private\n\t\t * @member {Number} #_renderTimeoutId\n\t\t */\n\t}\n\n\tonDomEvent( domEvent ) {\n\t\tthis.fire( domEvent.type, domEvent );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tif ( this._renderTimeoutId ) {\n\t\t\tclearTimeout( this._renderTimeoutId );\n\t\t}\n\n\t\tsuper.destroy();\n\t}\n}\n\n/**\n * Fired when one of the editables gets focus.\n *\n * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.\n *\n * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/focusobserver~FocusObserver\n * @event module:engine/view/document~Document#event:focus\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n\n/**\n * Fired when one of the editables loses focus.\n *\n * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.\n *\n * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/focusobserver~FocusObserver\n * @event module:engine/view/document~Document#event:blur\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/compositionobserver\n */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * {@link module:engine/view/document~Document#event:compositionstart Compositionstart},\n * {@link module:engine/view/document~Document#event:compositionupdate compositionupdate} and\n * {@link module:engine/view/document~Document#event:compositionend compositionend} events observer.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class CompositionObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'compositionstart', 'compositionupdate', 'compositionend' ];\n\t\tconst document = this.document;\n\n\t\tdocument.on( 'compositionstart', () => {\n\t\t\tdocument.isComposing = true;\n\t\t} );\n\n\t\tdocument.on( 'compositionend', () => {\n\t\t\tdocument.isComposing = false;\n\t\t} );\n\t}\n\n\tonDomEvent( domEvent ) {\n\t\tthis.fire( domEvent.type, domEvent );\n\t}\n}\n\n/**\n * Fired when composition starts inside one of the editables.\n *\n * Introduced by {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n *\n * Note that because {@link module:engine/view/observer/compositionobserver~CompositionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/compositionobserver~CompositionObserver\n * @event module:engine/view/document~Document#event:compositionstart\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n\n/**\n * Fired when composition is updated inside one of the editables.\n *\n * Introduced by {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n *\n * Note that because {@link module:engine/view/observer/compositionobserver~CompositionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/compositionobserver~CompositionObserver\n * @event module:engine/view/document~Document#event:compositionupdate\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n\n/**\n * Fired when composition ends inside one of the editables.\n *\n * Introduced by {@link module:engine/view/observer/compositionobserver~CompositionObserver}.\n *\n * Note that because {@link module:engine/view/observer/compositionobserver~CompositionObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/compositionobserver~CompositionObserver\n * @event module:engine/view/document~Document#event:compositionend\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n\n/**\n * @module engine/view/observer/inputobserver\n */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * Observer for events connected with data input.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class InputObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'beforeinput' ];\n\t}\n\n\tonDomEvent( domEvent ) {\n\t\tthis.fire( domEvent.type, domEvent );\n\t}\n}\n\n/**\n * Fired before browser inputs (or deletes) some data.\n *\n * This event is available only on browsers which support DOM `beforeinput` event.\n *\n * Introduced by {@link module:engine/view/observer/inputobserver~InputObserver}.\n *\n * Note that because {@link module:engine/view/observer/inputobserver~InputObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/inputobserver~InputObserver\n * @event module:engine/view/document~Document#event:beforeinput\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/isrange\n */\n\n/**\n * Checks if the object is a native DOM Range.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isRange( obj ) {\n\treturn Object.prototype.toString.apply( obj ) == '[object Range]';\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/getborderwidths\n */\n\n/**\n * Returns an object containing CSS border widths of a specified HTML element.\n *\n * @param {HTMLElement} element An element which has CSS borders.\n * @returns {Object} An object containing `top`, `left`, `right` and `bottom` properties\n * with numerical values of the `border-[top,left,right,bottom]-width` CSS styles.\n */\nexport default function getBorderWidths( element ) {\n\t// Call getComputedStyle on the window the element document belongs to.\n\tconst style = element.ownerDocument.defaultView.getComputedStyle( element );\n\n\treturn {\n\t\ttop: parseInt( style.borderTopWidth, 10 ),\n\t\tright: parseInt( style.borderRightWidth, 10 ),\n\t\tbottom: parseInt( style.borderBottomWidth, 10 ),\n\t\tleft: parseInt( style.borderLeftWidth, 10 )\n\t};\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/rect\n */\n\nimport isRange from './isrange';\nimport isWindow from './iswindow';\nimport getBorderWidths from './getborderwidths';\nimport isText from './istext';\nimport { isElement } from 'lodash-es';\n\nconst rectProperties = [ 'top', 'right', 'bottom', 'left', 'width', 'height' ];\n\n/**\n * A helper class representing a `ClientRect` object, e.g. value returned by\n * the native `object.getBoundingClientRect()` method. Provides a set of methods\n * to manipulate the rect and compare it against other rect instances.\n */\nexport default class Rect {\n\t/**\n\t * Creates an instance of rect.\n\t *\n\t *\t\t// Rect of an HTMLElement.\n\t *\t\tconst rectA = new Rect( document.body );\n\t *\n\t *\t\t// Rect of a DOM Range.\n\t *\t\tconst rectB = new Rect( document.getSelection().getRangeAt( 0 ) );\n\t *\n\t *\t\t// Rect of a window (web browser viewport).\n\t *\t\tconst rectC = new Rect( window );\n\t *\n\t *\t\t// Rect out of an object.\n\t *\t\tconst rectD = new Rect( { top: 0, right: 10, bottom: 10, left: 0, width: 10, height: 10 } );\n\t *\n\t *\t\t// Rect out of another Rect instance.\n\t *\t\tconst rectE = new Rect( rectD );\n\t *\n\t *\t\t// Rect out of a ClientRect.\n\t *\t\tconst rectF = new Rect( document.body.getClientRects().item( 0 ) );\n\t *\n\t * **Note**: By default a rect of an HTML element includes its CSS borders and scrollbars (if any)\n\t * ant the rect of a `window` includes scrollbars too. Use {@link #excludeScrollbarsAndBorders}\n\t * to get the inner part of the rect.\n\t *\n\t * @param {HTMLElement|Range|Window|ClientRect|module:utils/dom/rect~Rect|Object} source A source object to create the rect.\n\t */\n\tconstructor( source ) {\n\t\tconst isSourceRange = isRange( source );\n\n\t\t/**\n\t\t * The object this rect is for.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {HTMLElement|Range|ClientRect|module:utils/dom/rect~Rect|Object} #_source\n\t\t */\n\t\tObject.defineProperty( this, '_source', {\n\t\t\t// If the source is a Rect instance, copy it's #_source.\n\t\t\tvalue: source._source || source,\n\t\t\twritable: true,\n\t\t\tenumerable: false\n\t\t} );\n\n\t\tif ( isElement( source ) || isSourceRange ) {\n\t\t\t// The `Rect` class depends on `getBoundingClientRect` and `getClientRects` DOM methods. If the source\n\t\t\t// of a rect in an HTML element or a DOM range but it does not belong to any rendered DOM tree, these methods\n\t\t\t// will fail to obtain the geometry and the rect instance makes little sense to the features using it.\n\t\t\t// To get rid of this warning make sure the source passed to the constructor is a descendant of `window.document.body`.\n\t\t\t// @if CK_DEBUG // const sourceNode = isSourceRange ? source.startContainer : source;\n\t\t\t// @if CK_DEBUG // if ( !sourceNode.ownerDocument || !sourceNode.ownerDocument.body.contains( sourceNode ) ) {\n\t\t\t// @if CK_DEBUG // \tconsole.warn(\n\t\t\t// @if CK_DEBUG // \t\t'rect-source-not-in-dom: The source of this rect does not belong to any rendered DOM tree.',\n\t\t\t// @if CK_DEBUG // \t\t{ source } );\n\t\t\t// @if CK_DEBUG // }\n\n\t\t\tif ( isSourceRange ) {\n\t\t\t\tcopyRectProperties( this, Rect.getDomRangeRects( source )[ 0 ] );\n\t\t\t} else {\n\t\t\t\tcopyRectProperties( this, source.getBoundingClientRect() );\n\t\t\t}\n\t\t} else if ( isWindow( source ) ) {\n\t\t\tconst { innerWidth, innerHeight } = source;\n\n\t\t\tcopyRectProperties( this, {\n\t\t\t\ttop: 0,\n\t\t\t\tright: innerWidth,\n\t\t\t\tbottom: innerHeight,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: innerWidth,\n\t\t\t\theight: innerHeight\n\t\t\t} );\n\t\t} else {\n\t\t\tcopyRectProperties( this, source );\n\t\t}\n\n\t\t/**\n\t\t * The \"top\" value of the rect.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Number} #top\n\t\t */\n\n\t\t/**\n\t\t * The \"right\" value of the rect.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Number} #right\n\t\t */\n\n\t\t/**\n\t\t * The \"bottom\" value of the rect.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Number} #bottom\n\t\t */\n\n\t\t/**\n\t\t * The \"left\" value of the rect.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Number} #left\n\t\t */\n\n\t\t/**\n\t\t * The \"width\" value of the rect.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Number} #width\n\t\t */\n\n\t\t/**\n\t\t * The \"height\" value of the rect.\n\t\t *\n\t\t * @readonly\n\t\t * @member {Number} #height\n\t\t */\n\t}\n\n\t/**\n\t * Returns a clone of the rect.\n\t *\n\t * @returns {module:utils/dom/rect~Rect} A cloned rect.\n\t */\n\tclone() {\n\t\treturn new Rect( this );\n\t}\n\n\t/**\n\t * Moves the rect so that its upper–left corner lands in desired `[ x, y ]` location.\n\t *\n\t * @param {Number} x Desired horizontal location.\n\t * @param {Number} y Desired vertical location.\n\t * @returns {module:utils/dom/rect~Rect} A rect which has been moved.\n\t */\n\tmoveTo( x, y ) {\n\t\tthis.top = y;\n\t\tthis.right = x + this.width;\n\t\tthis.bottom = y + this.height;\n\t\tthis.left = x;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Moves the rect in–place by a dedicated offset.\n\t *\n\t * @param {Number} x A horizontal offset.\n\t * @param {Number} y A vertical offset\n\t * @returns {module:utils/dom/rect~Rect} A rect which has been moved.\n\t */\n\tmoveBy( x, y ) {\n\t\tthis.top += y;\n\t\tthis.right += x;\n\t\tthis.left += x;\n\t\tthis.bottom += y;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns a new rect a a result of intersection with another rect.\n\t *\n\t * @param {module:utils/dom/rect~Rect} anotherRect\n\t * @returns {module:utils/dom/rect~Rect}\n\t */\n\tgetIntersection( anotherRect ) {\n\t\tconst rect = {\n\t\t\ttop: Math.max( this.top, anotherRect.top ),\n\t\t\tright: Math.min( this.right, anotherRect.right ),\n\t\t\tbottom: Math.min( this.bottom, anotherRect.bottom ),\n\t\t\tleft: Math.max( this.left, anotherRect.left )\n\t\t};\n\n\t\trect.width = rect.right - rect.left;\n\t\trect.height = rect.bottom - rect.top;\n\n\t\tif ( rect.width < 0 || rect.height < 0 ) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn new Rect( rect );\n\t\t}\n\t}\n\n\t/**\n\t * Returns the area of intersection with another rect.\n\t *\n\t * @param {module:utils/dom/rect~Rect} anotherRect [description]\n\t * @returns {Number} Area of intersection.\n\t */\n\tgetIntersectionArea( anotherRect ) {\n\t\tconst rect = this.getIntersection( anotherRect );\n\n\t\tif ( rect ) {\n\t\t\treturn rect.getArea();\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the area of the rect.\n\t *\n\t * @returns {Number}\n\t */\n\tgetArea() {\n\t\treturn this.width * this.height;\n\t}\n\n\t/**\n\t * Returns a new rect, a part of the original rect, which is actually visible to the user,\n\t * e.g. an original rect cropped by parent element rects which have `overflow` set in CSS\n\t * other than `\"visible\"`.\n\t *\n\t * If there's no such visible rect, which is when the rect is limited by one or many of\n\t * the ancestors, `null` is returned.\n\t *\n\t * @returns {module:utils/dom/rect~Rect|null} A visible rect instance or `null`, if there's none.\n\t */\n\tgetVisible() {\n\t\tconst source = this._source;\n\t\tlet visibleRect = this.clone();\n\n\t\t// There's no ancestor to crop with the overflow.\n\t\tif ( !isBody( source ) ) {\n\t\t\tlet parent = source.parentNode || source.commonAncestorContainer;\n\n\t\t\t// Check the ancestors all the way up to the .\n\t\t\twhile ( parent && !isBody( parent ) ) {\n\t\t\t\tconst parentRect = new Rect( parent );\n\t\t\t\tconst intersectionRect = visibleRect.getIntersection( parentRect );\n\n\t\t\t\tif ( intersectionRect ) {\n\t\t\t\t\tif ( intersectionRect.getArea() < visibleRect.getArea() ) {\n\t\t\t\t\t\t// Reduce the visible rect to the intersection.\n\t\t\t\t\t\tvisibleRect = intersectionRect;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// There's no intersection, the rect is completely invisible.\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tparent = parent.parentNode;\n\t\t\t}\n\t\t}\n\n\t\treturn visibleRect;\n\t}\n\n\t/**\n\t * Checks if all property values ({@link #top}, {@link #left}, {@link #right},\n\t * {@link #bottom}, {@link #width} and {@link #height}) are the equal in both rect\n\t * instances.\n\t *\n\t * @param {module:utils/dom/rect~Rect} rect A rect instance to compare with.\n\t * @returns {Boolean} `true` when Rects are equal. `false` otherwise.\n\t */\n\tisEqual( anotherRect ) {\n\t\tfor ( const prop of rectProperties ) {\n\t\t\tif ( this[ prop ] !== anotherRect[ prop ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks whether a rect fully contains another rect instance.\n\t *\n\t * @param {module:utils/dom/rect~Rect} anotherRect\n\t * @returns {Boolean} `true` if contains, `false` otherwise.\n\t */\n\tcontains( anotherRect ) {\n\t\tconst intersectRect = this.getIntersection( anotherRect );\n\n\t\treturn !!( intersectRect && intersectRect.isEqual( anotherRect ) );\n\t}\n\n\t/**\n\t * Excludes scrollbars and CSS borders from the rect.\n\t *\n\t * * Borders are removed when {@link #_source} is an HTML element.\n\t * * Scrollbars are excluded from HTML elements and the `window`.\n\t *\n\t * @returns {module:utils/dom/rect~Rect} A rect which has been updated.\n\t */\n\texcludeScrollbarsAndBorders() {\n\t\tconst source = this._source;\n\t\tlet scrollBarWidth, scrollBarHeight, direction;\n\n\t\tif ( isWindow( source ) ) {\n\t\t\tscrollBarWidth = source.innerWidth - source.document.documentElement.clientWidth;\n\t\t\tscrollBarHeight = source.innerHeight - source.document.documentElement.clientHeight;\n\t\t\tdirection = source.getComputedStyle( source.document.documentElement ).direction;\n\t\t} else {\n\t\t\tconst borderWidths = getBorderWidths( this._source );\n\n\t\t\tscrollBarWidth = source.offsetWidth - source.clientWidth - borderWidths.left - borderWidths.right;\n\t\t\tscrollBarHeight = source.offsetHeight - source.clientHeight - borderWidths.top - borderWidths.bottom;\n\t\t\tdirection = source.ownerDocument.defaultView.getComputedStyle( source ).direction;\n\n\t\t\tthis.left += borderWidths.left;\n\t\t\tthis.top += borderWidths.top;\n\t\t\tthis.right -= borderWidths.right;\n\t\t\tthis.bottom -= borderWidths.bottom;\n\t\t\tthis.width = this.right - this.left;\n\t\t\tthis.height = this.bottom - this.top;\n\t\t}\n\n\t\tthis.width -= scrollBarWidth;\n\n\t\tif ( direction === 'ltr' ) {\n\t\t\tthis.right -= scrollBarWidth;\n\t\t} else {\n\t\t\tthis.left += scrollBarWidth;\n\t\t}\n\n\t\tthis.height -= scrollBarHeight;\n\t\tthis.bottom -= scrollBarHeight;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns an array of rects of the given native DOM Range.\n\t *\n\t * @param {Range} range A native DOM range.\n\t * @returns {Array.} DOM Range rects.\n\t */\n\tstatic getDomRangeRects( range ) {\n\t\tconst rects = [];\n\t\t// Safari does not iterate over ClientRectList using for...of loop.\n\t\tconst clientRects = Array.from( range.getClientRects() );\n\n\t\tif ( clientRects.length ) {\n\t\t\tfor ( const rect of clientRects ) {\n\t\t\t\trects.push( new Rect( rect ) );\n\t\t\t}\n\t\t}\n\t\t// If there's no client rects for the Range, use parent container's bounding rect\n\t\t// instead and adjust rect's width to simulate the actual geometry of such range.\n\t\t// https://github.com/ckeditor/ckeditor5-utils/issues/153\n\t\t// https://github.com/ckeditor/ckeditor5-ui/issues/317\n\t\telse {\n\t\t\tlet startContainer = range.startContainer;\n\n\t\t\tif ( isText( startContainer ) ) {\n\t\t\t\tstartContainer = startContainer.parentNode;\n\t\t\t}\n\n\t\t\tconst rect = new Rect( startContainer.getBoundingClientRect() );\n\t\t\trect.right = rect.left;\n\t\t\trect.width = 0;\n\n\t\t\trects.push( rect );\n\t\t}\n\n\t\treturn rects;\n\t}\n}\n\n// Acquires all the rect properties from the passed source.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} rect\n// @param {ClientRect|module:utils/dom/rect~Rect|Object} source\nfunction copyRectProperties( rect, source ) {\n\tfor ( const p of rectProperties ) {\n\t\trect[ p ] = source[ p ];\n\t}\n}\n\n// Checks if provided object is a HTML element.\n//\n// @private\n// @param {HTMLElement|Range} elementOrRange\n// @returns {Boolean}\nfunction isBody( elementOrRange ) {\n\tif ( !isElement( elementOrRange ) ) {\n\t\treturn false;\n\t}\n\n\treturn elementOrRange === elementOrRange.ownerDocument.body;\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/scroll\n */\n\nimport isRange from './isrange';\nimport Rect from './rect';\nimport isText from './istext';\n\nconst utils = {};\n\n/**\n * Makes any page `HTMLElement` or `Range` (`target`) visible inside the browser viewport.\n * This helper will scroll all `target` ancestors and the web browser viewport to reveal the target to\n * the user. If the `target` is already visible, nothing will happen.\n *\n * @param {HTMLElement|Range} options.target A target, which supposed to become visible to the user.\n * @param {Number} [options.viewportOffset] An offset from the edge of the viewport (in pixels)\n * the `target` will be moved by when the viewport is scrolled. It enhances the user experience\n * by keeping the `target` some distance from the edge of the viewport and thus making it easier to\n * read or edit by the user.\n */\nexport function scrollViewportToShowTarget( { target, viewportOffset = 0 } ) {\n\tconst targetWindow = getWindow( target );\n\tlet currentWindow = targetWindow;\n\tlet currentFrame = null;\n\n\t// Iterate over all windows, starting from target's parent window up to window#top.\n\twhile ( currentWindow ) {\n\t\tlet firstAncestorToScroll;\n\n\t\t// Let's scroll target's ancestors first to reveal it. Then, once the ancestor scrolls\n\t\t// settled down, the algorithm can eventually scroll the viewport of the current window.\n\t\t//\n\t\t// Note: If the current window is target's **original** window (e.g. the first one),\n\t\t// start scrolling the closest parent of the target. If not, scroll the closest parent\n\t\t// of an iframe that resides in the current window.\n\t\tif ( currentWindow == targetWindow ) {\n\t\t\tfirstAncestorToScroll = getParentElement( target );\n\t\t} else {\n\t\t\tfirstAncestorToScroll = getParentElement( currentFrame );\n\t\t}\n\n\t\t// Scroll the target's ancestors first. Once done, scrolling the viewport is easy.\n\t\tscrollAncestorsToShowRect( firstAncestorToScroll, () => {\n\t\t\t// Note: If the target does not belong to the current window **directly**,\n\t\t\t// i.e. it resides in an iframe belonging to the window, obtain the target's rect\n\t\t\t// in the coordinates of the current window. By default, a Rect returns geometry\n\t\t\t// relative to the current window's viewport. To make it work in a parent window,\n\t\t\t// it must be shifted.\n\t\t\treturn getRectRelativeToWindow( target, currentWindow );\n\t\t} );\n\n\t\t// Obtain the rect of the target after it has been scrolled within its ancestors.\n\t\t// It's time to scroll the viewport.\n\t\tconst targetRect = getRectRelativeToWindow( target, currentWindow );\n\n\t\tscrollWindowToShowRect( currentWindow, targetRect, viewportOffset );\n\n\t\tif ( currentWindow.parent != currentWindow ) {\n\t\t\t// Keep the reference to the ' + '';\n }\n },\n {\n name: 'spotify',\n url: [\n /^open\\.spotify\\.com\\/(artist\\/\\w+)/,\n /^open\\.spotify\\.com\\/(album\\/\\w+)/,\n /^open\\.spotify\\.com\\/(track\\/\\w+)/\n ],\n html: match => {\n const id = match[1];\n return '
' + `' + '
';\n }\n },\n {\n name: 'youtube',\n url: [\n /^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)/,\n /^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)/,\n /^youtube\\.com\\/embed\\/([\\w-]+)/,\n /^youtu\\.be\\/([\\w-]+)/\n ],\n html: match => {\n const id = match[1];\n return '
' + `' + '
';\n }\n },\n {\n name: 'vimeo',\n url: [\n /^vimeo\\.com\\/(\\d+)/,\n /^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,\n /^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,\n /^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,\n /^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,\n /^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,\n /^player\\.vimeo\\.com\\/video\\/(\\d+)/\n ],\n html: match => {\n const id = match[1];\n return '
' + `' + '
';\n }\n },\n {\n name: 'instagram',\n url: /^instagram\\.com\\/p\\/(\\w+)/\n },\n {\n name: 'twitter',\n url: /^twitter\\.com/\n },\n {\n name: 'googleMaps',\n url: /^google\\.com\\/maps/\n },\n {\n name: 'flickr',\n url: /^flickr\\.com/\n },\n {\n name: 'facebook',\n url: /^facebook\\.com/\n }\n ]\n });\n /**\n\t\t * The media registry managing the media providers in the editor.\n\t\t *\n\t\t * @member {module:media-embed/mediaregistry~MediaRegistry} #registry\n\t\t */\n this.registry = new MediaRegistry(editor.locale, editor.config.get('mediaEmbed'));\n }\n /**\n\t * @inheritDoc\n\t */\n init() {\n const editor = this.editor;\n const schema = editor.model.schema;\n const t = editor.t;\n const conversion = editor.conversion;\n const renderMediaPreview = editor.config.get('mediaEmbed.previewsInData');\n const registry = this.registry;\n editor.commands.add('mediaEmbed', new MediaEmbedCommand(editor));\n // Configure the schema.\n schema.register('media', {\n isObject: true,\n isBlock: true,\n allowWhere: '$block',\n allowAttributes: ['url']\n });\n // Model -> Data\n conversion.for('dataDowncast').elementToElement({\n model: 'media',\n view: (modelElement, viewWriter) => {\n const url = modelElement.getAttribute('url');\n return createMediaFigureElement(viewWriter, registry, url, { renderMediaPreview: url && renderMediaPreview });\n }\n });\n // Model -> Data (url -> data-oembed-url)\n conversion.for('dataDowncast').add(modelToViewUrlAttributeConverter(registry, { renderMediaPreview }));\n // Model -> View (element)\n conversion.for('editingDowncast').elementToElement({\n model: 'media',\n view: (modelElement, viewWriter) => {\n const url = modelElement.getAttribute('url');\n const figure = createMediaFigureElement(viewWriter, registry, url, { renderForEditingView: true });\n return toMediaWidget(figure, viewWriter, t('ah'));\n }\n });\n // Model -> View (url -> data-oembed-url)\n conversion.for('editingDowncast').add(modelToViewUrlAttributeConverter(registry, { renderForEditingView: true }));\n // View -> Model (data-oembed-url -> url)\n conversion.for('upcast') // Upcast semantic media.\n.elementToElement({\n view: {\n name: 'oembed',\n attributes: { url: true }\n },\n model: (viewMedia, modelWriter) => {\n const url = viewMedia.getAttribute('url');\n if (registry.hasMedia(url)) {\n return modelWriter.createElement('media', { url });\n }\n }\n }) // Upcast non-semantic media.\n.elementToElement({\n view: {\n name: 'div',\n attributes: { 'data-oembed-url': true }\n },\n model: (viewMedia, modelWriter) => {\n const url = viewMedia.getAttribute('data-oembed-url');\n if (registry.hasMedia(url)) {\n return modelWriter.createElement('media', { url });\n }\n }\n });\n }\n}","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module media-embed/automediaembed\n */\n\nimport MediaEmbedEditing from './mediaembedediting';\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport Clipboard from '@ckeditor/ckeditor5-clipboard/src/clipboard';\nimport LiveRange from '@ckeditor/ckeditor5-engine/src/model/liverange';\nimport LivePosition from '@ckeditor/ckeditor5-engine/src/model/liveposition';\nimport Undo from '@ckeditor/ckeditor5-undo/src/undo';\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\nimport { insertMedia } from './utils';\n\nconst URL_REGEXP = /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w.-]+)+[\\w\\-._~:/?#[\\]@!$&'()*+,;=]+$/;\n\n/**\n * The auto-media embed plugin. It recognizes media links in the pasted content and embeds\n * them shortly after they are injected into the document.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class AutoMediaEmbed extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get requires() {\n\t\treturn [ Clipboard, Undo ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'AutoMediaEmbed';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor ) {\n\t\tsuper( editor );\n\n\t\t/**\n\t\t * The paste–to–embed `setTimeout` ID. Stored as a property to allow\n\t\t * cleaning of the timeout.\n\t\t *\n\t\t * @private\n\t\t * @member {Number} #_timeoutId\n\t\t */\n\t\tthis._timeoutId = null;\n\n\t\t/**\n\t\t * The position where the `` element will be inserted after the timeout,\n\t\t * determined each time the new content is pasted into the document.\n\t\t *\n\t\t * @private\n\t\t * @member {module:engine/model/liveposition~LivePosition} #_positionToInsert\n\t\t */\n\t\tthis._positionToInsert = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst modelDocument = editor.model.document;\n\n\t\t// We need to listen on `Clipboard#inputTransformation` because we need to save positions of selection.\n\t\t// After pasting, the content between those positions will be checked for a URL that could be transformed\n\t\t// into media.\n\t\tthis.listenTo( editor.plugins.get( Clipboard ), 'inputTransformation', () => {\n\t\t\tconst firstRange = modelDocument.selection.getFirstRange();\n\n\t\t\tconst leftLivePosition = LivePosition.fromPosition( firstRange.start );\n\t\t\tleftLivePosition.stickiness = 'toPrevious';\n\n\t\t\tconst rightLivePosition = LivePosition.fromPosition( firstRange.end );\n\t\t\trightLivePosition.stickiness = 'toNext';\n\n\t\t\tmodelDocument.once( 'change:data', () => {\n\t\t\t\tthis._embedMediaBetweenPositions( leftLivePosition, rightLivePosition );\n\n\t\t\t\tleftLivePosition.detach();\n\t\t\t\trightLivePosition.detach();\n\t\t\t}, { priority: 'high' } );\n\t\t} );\n\n\t\teditor.commands.get( 'undo' ).on( 'execute', () => {\n\t\t\tif ( this._timeoutId ) {\n\t\t\t\tglobal.window.clearTimeout( this._timeoutId );\n\t\t\t\tthis._positionToInsert.detach();\n\n\t\t\t\tthis._timeoutId = null;\n\t\t\t\tthis._positionToInsert = null;\n\t\t\t}\n\t\t}, { priority: 'high' } );\n\t}\n\n\t/**\n\t * Analyzes the part of the document between provided positions in search for a URL representing media.\n\t * When the URL is found, it is automatically converted into media.\n\t *\n\t * @protected\n\t * @param {module:engine/model/liveposition~LivePosition} leftPosition Left position of the selection.\n\t * @param {module:engine/model/liveposition~LivePosition} rightPosition Right position of the selection.\n\t */\n\t_embedMediaBetweenPositions( leftPosition, rightPosition ) {\n\t\tconst editor = this.editor;\n\t\tconst mediaRegistry = editor.plugins.get( MediaEmbedEditing ).registry;\n\t\t// TODO: Use marker instead of LiveRange & LivePositions.\n\t\tconst urlRange = new LiveRange( leftPosition, rightPosition );\n\t\tconst walker = urlRange.getWalker( { ignoreElementEnd: true } );\n\n\t\tlet url = '';\n\n\t\tfor ( const node of walker ) {\n\t\t\tif ( node.item.is( 'textProxy' ) ) {\n\t\t\t\turl += node.item.data;\n\t\t\t}\n\t\t}\n\n\t\turl = url.trim();\n\n\t\t// If the URL does not match to universal URL regexp, let's skip that.\n\t\tif ( !url.match( URL_REGEXP ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the URL represents a media, let's use it.\n\t\tif ( !mediaRegistry.hasMedia( url ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mediaEmbedCommand = editor.commands.get( 'mediaEmbed' );\n\n\t\t// Do not anything if media element cannot be inserted at the current position (#47).\n\t\tif ( !mediaEmbedCommand.isEnabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Position won't be available in the `setTimeout` function so let's clone it.\n\t\tthis._positionToInsert = LivePosition.fromPosition( leftPosition );\n\n\t\t// This action mustn't be executed if undo was called between pasting and auto-embedding.\n\t\tthis._timeoutId = global.window.setTimeout( () => {\n\t\t\teditor.model.change( writer => {\n\t\t\t\tthis._timeoutId = null;\n\n\t\t\t\twriter.remove( urlRange );\n\n\t\t\t\tlet insertionPosition;\n\n\t\t\t\t// Check if position where the media element should be inserted is still valid.\n\t\t\t\t// Otherwise leave it as undefined to use document.selection - default behavior of model.insertContent().\n\t\t\t\tif ( this._positionToInsert.root.rootName !== '$graveyard' ) {\n\t\t\t\t\tinsertionPosition = this._positionToInsert;\n\t\t\t\t}\n\n\t\t\t\tinsertMedia( editor.model, url, insertionPosition );\n\n\t\t\t\tthis._positionToInsert.detach();\n\t\t\t\tthis._positionToInsert = null;\n\t\t\t} );\n\t\t}, 100 );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module media-embed/ui/mediaformview\n */\nimport View from '@ckeditor/ckeditor5-ui/src/view';\nimport ViewCollection from '@ckeditor/ckeditor5-ui/src/viewcollection';\nimport ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';\nimport LabeledInputView from '@ckeditor/ckeditor5-ui/src/labeledinput/labeledinputview';\nimport InputTextView from '@ckeditor/ckeditor5-ui/src/inputtext/inputtextview';\nimport submitHandler from '@ckeditor/ckeditor5-ui/src/bindings/submithandler';\nimport FocusTracker from '@ckeditor/ckeditor5-utils/src/focustracker';\nimport FocusCycler from '@ckeditor/ckeditor5-ui/src/focuscycler';\nimport KeystrokeHandler from '@ckeditor/ckeditor5-utils/src/keystrokehandler';\nimport checkIcon from '@ckeditor/ckeditor5-core/theme/icons/check.svg';\nimport cancelIcon from '@ckeditor/ckeditor5-core/theme/icons/cancel.svg';\nimport '../../theme/mediaform.css';\n/**\n * The media form view controller class.\n *\n * See {@link module:media-embed/ui/mediaformview~MediaFormView}.\n *\n * @extends module:ui/view~View\n */\nexport default class MediaFormView extends View {\n /**\n\t * @param {Array.} validators Form validators used by {@link #isValid}.\n\t * @param {module:utils/locale~Locale} [locale] The localization services instance.\n\t */\n constructor(validators, locale) {\n super(locale);\n const t = locale.t;\n /**\n\t\t * Tracks information about DOM focus in the form.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:utils/focustracker~FocusTracker}\n\t\t */\n this.focusTracker = new FocusTracker();\n /**\n\t\t * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n\t\t *\n\t\t * @readonly\n\t\t * @member {module:utils/keystrokehandler~KeystrokeHandler}\n\t\t */\n this.keystrokes = new KeystrokeHandler();\n /**\n\t\t * The URL input view.\n\t\t *\n\t\t * @member {module:ui/labeledinput/labeledinputview~LabeledInputView}\n\t\t */\n this.urlInputView = this._createUrlInput();\n /**\n\t\t * The Save button view.\n\t\t *\n\t\t * @member {module:ui/button/buttonview~ButtonView}\n\t\t */\n this.saveButtonView = this._createButton(t('cf'), checkIcon, 'ck-button-save');\n this.saveButtonView.type = 'submit';\n /**\n\t\t * The Cancel button view.\n\t\t *\n\t\t * @member {module:ui/button/buttonview~ButtonView}\n\t\t */\n this.cancelButtonView = this._createButton(t('cg'), cancelIcon, 'ck-button-cancel', 'cancel');\n /**\n\t\t * A collection of views that can be focused in the form.\n\t\t *\n\t\t * @readonly\n\t\t * @protected\n\t\t * @member {module:ui/viewcollection~ViewCollection}\n\t\t */\n this._focusables = new ViewCollection();\n /**\n\t\t * Helps cycling over {@link #_focusables} in the form.\n\t\t *\n\t\t * @readonly\n\t\t * @protected\n\t\t * @member {module:ui/focuscycler~FocusCycler}\n\t\t */\n this._focusCycler = new FocusCycler({\n focusables: this._focusables,\n focusTracker: this.focusTracker,\n keystrokeHandler: this.keystrokes,\n actions: {\n // Navigate form fields backwards using the Shift + Tab keystroke.\n focusPrevious: 'shift + tab',\n // Navigate form fields forwards using the Tab key.\n focusNext: 'tab'\n }\n });\n /**\n\t\t * An array of form validators used by {@link #isValid}.\n\t\t *\n\t\t * @readonly\n\t\t * @protected\n\t\t * @member {Array.}\n\t\t */\n this._validators = validators;\n this.setTemplate({\n tag: 'form',\n attributes: {\n class: [\n 'ck',\n 'ck-media-form'\n ],\n tabindex: '-1'\n },\n children: [\n this.urlInputView,\n this.saveButtonView,\n this.cancelButtonView\n ]\n }); /**\n\t\t * The default info text for the {@link #urlInputView}.\n\t\t *\n\t\t * @private\n\t\t * @member {String} #_urlInputViewInfoDefault\n\t\t */\n /**\n\t\t * The info text with an additional tip for the {@link #urlInputView},\n\t\t * displayed when the input has some value.\n\t\t *\n\t\t * @private\n\t\t * @member {String} #_urlInputViewInfoTip\n\t\t */\n }\n /**\n\t * @inheritDoc\n\t */\n render() {\n super.render();\n submitHandler({ view: this });\n const childViews = [\n this.urlInputView,\n this.saveButtonView,\n this.cancelButtonView\n ];\n childViews.forEach(v => {\n // Register the view as focusable.\n this._focusables.add(v);\n // Register the view in the focus tracker.\n this.focusTracker.add(v.element);\n });\n // Start listening for the keystrokes coming from #element.\n this.keystrokes.listenTo(this.element);\n const stopPropagation = data => data.stopPropagation();\n // Since the form is in the dropdown panel which is a child of the toolbar, the toolbar's\n // keystroke handler would take over the key management in the URL input. We need to prevent\n // this ASAP. Otherwise, the basic caret movement using the arrow keys will be impossible.\n this.keystrokes.set('arrowright', stopPropagation);\n this.keystrokes.set('arrowleft', stopPropagation);\n this.keystrokes.set('arrowup', stopPropagation);\n this.keystrokes.set('arrowdown', stopPropagation);\n // Intercept the \"selectstart\" event, which is blocked by default because of the default behavior\n // of the DropdownView#panelView.\n // TODO: blocking \"selectstart\" in the #panelView should be configurable per–drop–down instance.\n this.listenTo(this.urlInputView.element, 'selectstart', (evt, domEvt) => {\n domEvt.stopPropagation();\n }, { priority: 'high' });\n }\n /**\n\t * Focuses the fist {@link #_focusables} in the form.\n\t */\n focus() {\n this._focusCycler.focusFirst();\n }\n /**\n\t * The native DOM `value` of the {@link #urlInputView} element.\n\t *\n\t * **Note**: Do not confuse it with the {@link module:ui/inputtext/inputtextview~InputTextView#value}\n\t * which works one way only and may not represent the actual state of the component in the DOM.\n\t *\n\t * @type {Number}\n\t */\n get url() {\n return this.urlInputView.inputView.element.value.trim();\n }\n /**\n\t * Sets the native DOM `value` of the {@link #urlInputView} element.\n\t *\n\t * **Note**: Do not confuse it with the {@link module:ui/inputtext/inputtextview~InputTextView#value}\n\t * which works one way only and may not represent the actual state of the component in the DOM.\n\t *\n\t * @param {String} url\n\t */\n set url(url) {\n this.urlInputView.inputView.element.value = url.trim();\n }\n /**\n\t * Validates the form and returns `false` when some fields are invalid.\n\t *\n\t * @returns {Boolean}\n\t */\n isValid() {\n this.resetFormStatus();\n for (const validator of this._validators) {\n const errorText = validator(this);\n // One error per field is enough.\n if (errorText) {\n // Apply updated error.\n this.urlInputView.errorText = errorText;\n return false;\n }\n }\n return true;\n }\n /**\n\t * Cleans up the supplementary error and information text of the {@link #urlInputView}\n\t * bringing them back to the state when the form has been displayed for the first time.\n\t *\n\t * See {@link #isValid}.\n\t */\n resetFormStatus() {\n this.urlInputView.errorText = null;\n this.urlInputView.infoText = this._urlInputViewInfoDefault;\n }\n /**\n\t * Creates a labeled input view.\n\t *\n\t * @private\n\t * @returns {module:ui/labeledinput/labeledinputview~LabeledInputView} Labeled input view instance.\n\t */\n _createUrlInput() {\n const t = this.locale.t;\n const labeledInput = new LabeledInputView(this.locale, InputTextView);\n const inputView = labeledInput.inputView;\n this._urlInputViewInfoDefault = t('ch');\n this._urlInputViewInfoTip = t('ci');\n labeledInput.label = t('cj');\n labeledInput.infoText = this._urlInputViewInfoDefault;\n inputView.placeholder = 'https://example.com';\n inputView.on('input', () => {\n // Display the tip text only when there's some value. Otherwise fall back to the default info text.\n labeledInput.infoText = inputView.element.value ? this._urlInputViewInfoTip : this._urlInputViewInfoDefault;\n });\n return labeledInput;\n }\n /**\n\t * Creates a button view.\n\t *\n\t * @private\n\t * @param {String} label The button label.\n\t * @param {String} icon The button icon.\n\t * @param {String} className The additional button CSS class name.\n\t * @param {String} [eventName] An event name that the `ButtonView#execute` event will be delegated to.\n\t * @returns {module:ui/button/buttonview~ButtonView} The button view instance.\n\t */\n _createButton(label, icon, className, eventName) {\n const button = new ButtonView(this.locale);\n button.set({\n label,\n icon,\n tooltip: true\n });\n button.extendTemplate({ attributes: { class: className } });\n if (eventName) {\n button.delegate('execute').to(this, eventName);\n }\n return button;\n }\n} /**\n * Fired when the form view is submitted (when one of the children triggered the submit event),\n * e.g. click on {@link #saveButtonView}.\n *\n * @event submit\n */\n /**\n * Fired when the form view is canceled, e.g. click on {@link #cancelButtonView}.\n *\n * @event cancel\n */","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n/**\n * @module media-embed/mediaembedui\n */\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport { createDropdown } from '@ckeditor/ckeditor5-ui/src/dropdown/utils';\nimport MediaFormView from './ui/mediaformview';\nimport MediaEmbedEditing from './mediaembedediting';\nimport mediaIcon from '../theme/icons/media.svg';\n/**\n * The media embed UI plugin.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class MediaEmbedUI extends Plugin {\n /**\n\t * @inheritDoc\n\t */\n static get requires() {\n return [MediaEmbedEditing];\n }\n /**\n\t * @inheritDoc\n\t */\n static get pluginName() {\n return 'MediaEmbedUI';\n }\n /**\n\t * @inheritDoc\n\t */\n init() {\n const editor = this.editor;\n const command = editor.commands.get('mediaEmbed');\n const registry = editor.plugins.get(MediaEmbedEditing).registry;\n /**\n\t\t * The form view displayed inside the drop-down.\n\t\t *\n\t\t * @member {module:media-embed/ui/mediaformview~MediaFormView}\n\t\t */\n this.form = new MediaFormView(getFormValidators(editor.t, registry), editor.locale);\n // Setup `imageUpload` button.\n editor.ui.componentFactory.add('mediaEmbed', locale => {\n const dropdown = createDropdown(locale);\n this._setUpDropdown(dropdown, this.form, command, editor);\n this._setUpForm(this.form, dropdown, command);\n return dropdown;\n });\n }\n _setUpDropdown(dropdown, form, command) {\n const editor = this.editor;\n const t = editor.t;\n const button = dropdown.buttonView;\n dropdown.bind('isEnabled').to(command);\n dropdown.panelView.children.add(form);\n button.set({\n label: t('al'),\n icon: mediaIcon,\n tooltip: true\n });\n // Note: Use the low priority to make sure the following listener starts working after the\n // default action of the drop-down is executed (i.e. the panel showed up). Otherwise, the\n // invisible form/input cannot be focused/selected.\n button.on('open', () => {\n // Make sure that each time the panel shows up, the URL field remains in sync with the value of\n // the command. If the user typed in the input, then canceled (`urlInputView#value` stays\n // unaltered) and re-opened it without changing the value of the media command (e.g. because they\n // didn't change the selection), they would see the old value instead of the actual value of the\n // command.\n form.url = command.value || '';\n form.urlInputView.select();\n form.focus();\n }, { priority: 'low' });\n dropdown.on('submit', () => {\n if (form.isValid()) {\n editor.execute('mediaEmbed', form.url);\n closeUI();\n }\n });\n dropdown.on('change:isOpen', () => form.resetFormStatus());\n dropdown.on('cancel', () => closeUI());\n function closeUI() {\n editor.editing.view.focus();\n dropdown.isOpen = false;\n }\n }\n _setUpForm(form, dropdown, command) {\n form.delegate('submit', 'cancel').to(dropdown);\n form.urlInputView.bind('value').to(command, 'value');\n // Form elements should be read-only when corresponding commands are disabled.\n form.urlInputView.bind('isReadOnly').to(command, 'isEnabled', value => !value);\n form.saveButtonView.bind('isEnabled').to(command);\n }\n}\nfunction getFormValidators(t, registry) {\n return [\n form => {\n if (!form.url.length) {\n return t('am');\n }\n },\n form => {\n if (!registry.hasMedia(form.url)) {\n return t('an');\n }\n }\n ];\n}","export default \"\"","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module paste-from-office/filters/list\n */\n\nimport Element from '@ckeditor/ckeditor5-engine/src/view/element';\nimport Matcher from '@ckeditor/ckeditor5-engine/src/view/matcher';\nimport UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';\n\n/**\n * Transforms Word specific list-like elements to the semantic HTML lists.\n *\n * Lists in Word are represented by block elements with special attributes like:\n *\n *\t\t

...

// Paragraph based list.\n *\t\t

...

// Heading 1 based list.\n *\n * @param {module:engine/view/documentfragment~DocumentFragment} documentFragment The view structure which to transform.\n * @param {String} stylesString Styles from which list-like elements styling will be extracted.\n */\nexport function transformListItemLikeElementsIntoLists( documentFragment, stylesString ) {\n\tif ( !documentFragment.childCount ) {\n\t\treturn;\n\t}\n\n\tconst writer = new UpcastWriter();\n\tconst itemLikeElements = findAllItemLikeElements( documentFragment, writer );\n\n\tif ( !itemLikeElements.length ) {\n\t\treturn;\n\t}\n\n\tlet currentList = null;\n\n\titemLikeElements.forEach( ( itemLikeElement, i ) => {\n\t\tif ( !currentList || isNewListNeeded( itemLikeElements[ i - 1 ], itemLikeElement ) ) {\n\t\t\tconst listStyle = detectListStyle( itemLikeElement, stylesString );\n\n\t\t\tcurrentList = insertNewEmptyList( listStyle, itemLikeElement.element, writer );\n\t\t}\n\n\t\tconst listItem = transformElementIntoListItem( itemLikeElement.element, writer );\n\n\t\twriter.appendChild( listItem, currentList );\n\t} );\n}\n\n/**\n * Removes paragraph wrapping content inside a list item.\n *\n * @param {module:engine/view/documentfragment~DocumentFragment} documentFragment\n * @param {module:engine/view/upcastwriter~UpcastWriter} writer\n */\nexport function unwrapParagraphInListItem( documentFragment, writer ) {\n\tfor ( const value of writer.createRangeIn( documentFragment ) ) {\n\t\tconst element = value.item;\n\n\t\tif ( element.is( 'li' ) ) {\n\t\t\t// Google Docs allows on single paragraph inside LI.\n\t\t\tconst firstChild = element.getChild( 0 );\n\n\t\t\tif ( firstChild.is( 'p' ) ) {\n\t\t\t\twriter.unwrapElement( firstChild );\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Finds all list-like elements in a given document fragment.\n//\n// @param {module:engine/view/documentfragment~DocumentFragment} documentFragment Document fragment\n// in which to look for list-like nodes.\n// @param {module:engine/view/upcastwriter~UpcastWriter} writer\n// @returns {Array.} Array of found list-like items. Each item is an object containing:\n//\n//\t\t* {module:engine/src/view/element~Element} element List-like element.\n//\t\t* {Number} id List item id parsed from `mso-list` style (see `getListItemData()` function).\n//\t\t* {Number} order List item creation order parsed from `mso-list` style (see `getListItemData()` function).\n//\t\t* {Number} indent List item indentation level parsed from `mso-list` style (see `getListItemData()` function).\nfunction findAllItemLikeElements( documentFragment, writer ) {\n\tconst range = writer.createRangeIn( documentFragment );\n\n\t// Matcher for finding list-like elements.\n\tconst itemLikeElementsMatcher = new Matcher( {\n\t\tname: /^p|h\\d+$/,\n\t\tstyles: {\n\t\t\t'mso-list': /.*/\n\t\t}\n\t} );\n\n\tconst itemLikeElements = [];\n\n\tfor ( const value of range ) {\n\t\tif ( value.type === 'elementStart' && itemLikeElementsMatcher.match( value.item ) ) {\n\t\t\tconst itemData = getListItemData( value.item );\n\n\t\t\titemLikeElements.push( {\n\t\t\t\telement: value.item,\n\t\t\t\tid: itemData.id,\n\t\t\t\torder: itemData.order,\n\t\t\t\tindent: itemData.indent\n\t\t\t} );\n\t\t}\n\t}\n\n\treturn itemLikeElements;\n}\n\n// Extracts list item style from the provided CSS.\n//\n// List item style is extracted from CSS stylesheet. Each list with its specific style attribute\n// value (`mso-list:l1 level1 lfo1`) has its dedicated properties in a CSS stylesheet defined with a selector like:\n//\n// \t\t@list l1:level1 { ... }\n//\n// It contains `mso-level-number-format` property which defines list numbering/bullet style. If this property\n// is not defined it means default `decimal` numbering.\n//\n// Here CSS string representation is used as `mso-level-number-format` property is an invalid CSS property\n// and will be removed during CSS parsing.\n//\n// @param {Object} listLikeItem List-like item for which list style will be searched for. Usually\n// a result of `findAllItemLikeElements()` function.\n// @param {String} stylesString CSS stylesheet.\n// @returns {Object} result\n// @returns {String} result.type List type, could be `ul` or `ol`.\n// @returns {String} result.style List style, for example: `decimal`, `lower-roman`, etc. It is extracted\n// directly from Word stylesheet without further processing and may be not compatible\n// with CSS `list-style-type` property accepted values.\nfunction detectListStyle( listLikeItem, stylesString ) {\n\tconst listStyleRegexp = new RegExp( `@list l${ listLikeItem.id }:level${ listLikeItem.indent }\\\\s*({[^}]*)`, 'gi' );\n\tconst listStyleTypeRegex = /mso-level-number-format:([^;]*);/gi;\n\n\tconst listStyleMatch = listStyleRegexp.exec( stylesString );\n\n\tlet listStyleType = 'decimal'; // Decimal is default one.\n\tif ( listStyleMatch && listStyleMatch[ 1 ] ) {\n\t\tconst listStyleTypeMatch = listStyleTypeRegex.exec( listStyleMatch[ 1 ] );\n\n\t\tif ( listStyleTypeMatch && listStyleTypeMatch[ 1 ] ) {\n\t\t\tlistStyleType = listStyleTypeMatch[ 1 ].trim();\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: listStyleType !== 'bullet' && listStyleType !== 'image' ? 'ol' : 'ul',\n\t\tstyle: listStyleType\n\t};\n}\n\n// Creates empty list of a given type and inserts it after a specified element.\n//\n// @param {Object} listStyle List style object which determines the type of newly created list.\n// Usually a result of `detectListStyle()` function.\n// @param {module:engine/view/element~Element} element Element before which list is inserted.\n// @param {module:engine/view/upcastwriter~UpcastWriter} writer\n// @returns {module:engine/view/element~Element} Newly created list element.\nfunction insertNewEmptyList( listStyle, element, writer ) {\n\tconst list = new Element( listStyle.type );\n\tconst position = element.parent.getChildIndex( element );\n\n\twriter.insertChild( position, list, element.parent );\n\n\treturn list;\n}\n\n// Transforms given element into a semantic list item. As the function operates on a provided\n// {module:engine/src/view/element~Element element} it will modify the view structure to which this element belongs.\n//\n// @param {module:engine/view/element~Element} element Element which will be transformed into list item.\n// @param {module:engine/view/upcastwriter~UpcastWriter} writer\n// @returns {module:engine/view/element~Element} New element to which the given one was transformed. It is\n// inserted in place of the old element (the reference to the old element is lost due to renaming).\nfunction transformElementIntoListItem( element, writer ) {\n\tremoveBulletElement( element, writer );\n\n\treturn writer.rename( 'li', element );\n}\n\n// Extracts list item information from Word specific list-like element style:\n//\n//\t\t`style=\"mso-list:l1 level1 lfo1\"`\n//\n// where:\n//\n//\t\t* `l1` is a list id (however it does not mean this is a continuous list - see #43),\n//\t\t* `level1` is a list item indentation level,\n//\t\t* `lfo1` is a list insertion order in a document.\n//\n// @param {module:engine/view/element~Element} element Element from which style data is extracted.\n// @returns {Object} result\n// @returns {Number} result.id Parent list id.\n// @returns {Number} result.order List item creation order.\n// @returns {Number} result.indent List item indentation level.\nfunction getListItemData( element ) {\n\tconst data = {};\n\tconst listStyle = element.getStyle( 'mso-list' );\n\n\tif ( listStyle ) {\n\t\tconst idMatch = listStyle.match( /(^|\\s+)l(\\d+)/i );\n\t\tconst orderMatch = listStyle.match( /\\s*lfo(\\d+)/i );\n\t\tconst indentMatch = listStyle.match( /\\s*level(\\d+)/i );\n\n\t\tif ( idMatch && orderMatch && indentMatch ) {\n\t\t\tdata.id = idMatch[ 2 ];\n\t\t\tdata.order = orderMatch[ 1 ];\n\t\t\tdata.indent = indentMatch[ 1 ];\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// Removes span with a numbering/bullet from a given element.\n//\n// @param {module:engine/view/element~Element} element\n// @param {module:engine/view/upcastwriter~UpcastWriter} writer\nfunction removeBulletElement( element, writer ) {\n\t// Matcher for finding `span` elements holding lists numbering/bullets.\n\tconst bulletMatcher = new Matcher( {\n\t\tname: 'span',\n\t\tstyles: {\n\t\t\t'mso-list': 'Ignore'\n\t\t}\n\t} );\n\n\tconst range = writer.createRangeIn( element );\n\n\tfor ( const value of range ) {\n\t\tif ( value.type === 'elementStart' && bulletMatcher.match( value.item ) ) {\n\t\t\twriter.remove( value.item );\n\t\t}\n\t}\n}\n\n// Whether previous and current item belongs to the same list. It is determined based on `item.id`\n// (extracted from `mso-list` style, see #getListItemData) and previous sibling of the current item.\n//\n// @param {Object} previousItem\n// @param {Object} currentItem\n// @returns {Boolean}\nfunction isNewListNeeded( previousItem, currentItem ) {\n\tif ( previousItem.id !== currentItem.id ) {\n\t\treturn true;\n\t}\n\n\tconst previousSibling = currentItem.element.previousSibling;\n\n\tif ( !previousSibling ) {\n\t\treturn true;\n\t}\n\n\t// Even with the same id the list does not have to be continuous (#43).\n\treturn !isList( previousSibling );\n}\n\nfunction isList( element ) {\n\treturn element.is( 'ol' ) || element.is( 'ul' );\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module paste-from-office/normalizers/googledocsnormalizer\n */\n\nimport removeBoldWrapper from '../filters/removeboldwrapper';\nimport { unwrapParagraphInListItem } from '../filters/list';\nimport UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';\n\nconst googleDocsMatch = /id=(\"|')docs-internal-guid-[-0-9a-f]+(\"|')/i;\n\n/**\n * Normalizer for the content pasted from Google Docs.\n *\n * @implements module:paste-from-office/normalizer~Normalizer\n */\nexport default class GoogleDocsNormalizer {\n\t/**\n\t * @inheritDoc\n\t */\n\tisActive( htmlString ) {\n\t\treturn googleDocsMatch.test( htmlString );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\texecute( data ) {\n\t\tconst writer = new UpcastWriter();\n\n\t\tremoveBoldWrapper( data.content, writer );\n\t\tunwrapParagraphInListItem( data.content, writer );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module paste-from-office/filters/removeboldwrapper\n */\n\n/**\n * Removes `` tag wrapper added by Google Docs to a copied content.\n *\n * @param {module:engine/view/documentfragment~DocumentFragment} documentFragment element `data.content` obtained from clipboard\n * @param {module:engine/view/upcastwriter~UpcastWriter} writer\n */\nexport default function removeBoldWrapper( documentFragment, writer ) {\n\tfor ( const child of documentFragment.getChildren() ) {\n\t\tif ( child.is( 'b' ) && child.getStyle( 'font-weight' ) === 'normal' ) {\n\t\t\tconst childIndex = documentFragment.getChildIndex( child );\n\n\t\t\twriter.remove( child );\n\t\t\twriter.insertChild( childIndex, child.getChildren(), documentFragment );\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module paste-from-office/filters/space\n */\n\n/**\n * Replaces last space preceding elements closing tag with ` `. Such operation prevents spaces from being removed\n * during further DOM/View processing (see especially {@link module:engine/view/domconverter~DomConverter#_processDataFromDomText}).\n * This method also takes into account Word specific `` empty tags.\n * Additionally multiline sequences of spaces and new lines between tags are removed (see #39 and #40).\n *\n * @param {String} htmlString HTML string in which spacing should be normalized.\n * @returns {String} Input HTML with spaces normalized.\n */\nexport function normalizeSpacing( htmlString ) {\n\t// Run normalizeSafariSpaceSpans() two times to cover nested spans.\n\treturn normalizeSafariSpaceSpans( normalizeSafariSpaceSpans( htmlString ) )\n\t\t// Remove all \\r\\n from \"spacerun spans\" so the last replace line doesn't strip all whitespaces.\n\t\t.replace( /([\\s]*?)[\\r\\n]+(\\s*<\\/span>)/g, '$1$2' )\n\t\t.replace( /<\\/span>/g, '' )\n\t\t.replace( / <\\//g, '\\u00A0<\\/o:p>/g, '\\u00A0' )\n\t\t// Remove block filler from empty paragraph. Safari uses \\u00A0 instead of  .\n\t\t.replace( /( |\\u00A0)<\\/o:p>/g, '' )\n\t\t// Remove all whitespaces when they contain any \\r or \\n.\n\t\t.replace( />(\\s*[\\r\\n]\\s*)<' );\n}\n\n/**\n * Normalizes spacing in special Word `spacerun spans` (`\\s+`) by replacing\n * all spaces with `  ` pairs. This prevents spaces from being removed during further DOM/View processing\n * (see especially {@link module:engine/view/domconverter~DomConverter#_processDataFromDomText}).\n *\n * @param {Document} htmlDocument Native `Document` object in which spacing should be normalized.\n */\nexport function normalizeSpacerunSpans( htmlDocument ) {\n\thtmlDocument.querySelectorAll( 'span[style*=spacerun]' ).forEach( el => {\n\t\t// Use `el.childNodes[ 0 ].data.length` instead of `el.innerText.length`. For `el.innerText.length` which\n\t\t// contains spaces mixed with ` ` Edge browser returns incorrect length.\n\t\tconst innerTextLength = ( el.childNodes &&\n\t\t\tel.childNodes[ 0 ] &&\n\t\t\tel.childNodes[ 0 ].data &&\n\t\t\tel.childNodes[ 0 ].data.length ) || 0;\n\n\t\tel.innerHTML = Array( innerTextLength + 1 ).join( '\\u00A0 ' ).substr( 0, innerTextLength );\n\t} );\n}\n\n// Normalizes specific spacing generated by Safari when content pasted from Word (` `)\n// by replacing all spaces sequences longer than 1 space with `  ` pairs. This prevents spaces from being removed during\n// further DOM/View processing (see especially {@link module:engine/view/domconverter~DomConverter#_processDataFromDomText}).\n//\n// This function is similar to {@link module:clipboard/utils/normalizeclipboarddata normalizeClipboardData util} but uses\n// regular spaces /   sequence for replacement.\n//\n// @param {String} htmlString HTML string in which spacing should be normalized\n// @returns {String} Input HTML with spaces normalized.\nfunction normalizeSafariSpaceSpans( htmlString ) {\n\treturn htmlString.replace( /(\\s+)<\\/span>/g, ( fullMatch, spaces ) => {\n\t\treturn spaces.length === 1 ? ' ' : Array( spaces.length + 1 ).join( '\\u00A0 ' ).substr( 0, spaces.length );\n\t} );\n}\n","/**\n * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module paste-from-office/filters/parse\n */\n\n/* globals DOMParser */\n\nimport DomConverter from '@ckeditor/ckeditor5-engine/src/view/domconverter';\n\nimport { normalizeSpacing, normalizeSpacerunSpans } from './space';\n\n/**\n * Parses provided HTML extracting contents of `` and ` - - -

GNU GENERAL PUBLIC LICENSE

-

Version 3, 29 June 2007

- -

Copyright © 2007 Free Software Foundation, Inc. - <https://fsf.org/>

- Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed.

- -

Preamble

- -

The GNU General Public License is a free, copyleft license for -software and other kinds of works.

- -

The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too.

- -

When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things.

- -

To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others.

- -

For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights.

- -

Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it.

- -

For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions.

- -

Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users.

- -

Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free.

- -

The precise terms and conditions for copying, distribution and -modification follow.

- -

TERMS AND CONDITIONS

- -

0. Definitions.

- -

“This License” refers to version 3 of the GNU General Public License.

- -

“Copyright” also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks.

- -

“The Program” refers to any copyrightable work licensed under this -License. Each licensee is addressed as “you”. “Licensees” and -“recipients” may be individuals or organizations.

- -

To “modify” a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a “modified version” of the -earlier work or a work “based on” the earlier work.

- -

A “covered work” means either the unmodified Program or a work based -on the Program.

- -

To “propagate” a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well.

- -

To “convey” a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying.

- -

An interactive user interface displays “Appropriate Legal Notices” -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion.

- -

1. Source Code.

- -

The “source code” for a work means the preferred form of the work -for making modifications to it. “Object code” means any non-source -form of a work.

- -

A “Standard Interface” means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language.

- -

The “System Libraries” of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -“Major Component”, in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it.

- -

The “Corresponding Source” for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work.

- -

The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source.

- -

The Corresponding Source for a work in source code form is that -same work.

- -

2. Basic Permissions.

- -

All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law.

- -

You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you.

- -

Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary.

- -

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

- -

No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures.

- -

When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures.

- -

4. Conveying Verbatim Copies.

- -

You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program.

- -

You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee.

- -

5. Conveying Modified Source Versions.

- -

You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions:

- -
    -
  • a) The work must carry prominent notices stating that you modified - it, and giving a relevant date.
  • - -
  • b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - “keep intact all notices”.
  • - -
  • c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it.
  • - -
  • d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so.
  • -
- -

A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -“aggregate” if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate.

- -

6. Conveying Non-Source Forms.

- -

You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways:

- -
    -
  • a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange.
  • - -
  • b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge.
  • - -
  • c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b.
  • - -
  • d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements.
  • - -
  • e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d.
  • -
- -

A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work.

- -

A “User Product” is either (1) a “consumer product”, which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, “normally used” refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product.

- -

“Installation Information” for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made.

- -

If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM).

- -

The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network.

- -

Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying.

- -

7. Additional Terms.

- -

“Additional permissions” are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions.

- -

When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission.

- -

Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms:

- -
    -
  • a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or
  • - -
  • b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or
  • - -
  • c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or
  • - -
  • d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or
  • - -
  • e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or
  • - -
  • f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors.
  • -
- -

All other non-permissive additional terms are considered “further -restrictions” within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying.

- -

If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms.

- -

Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way.

- -

8. Termination.

- -

You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11).

- -

However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation.

- -

Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice.

- -

Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10.

- -

9. Acceptance Not Required for Having Copies.

- -

You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so.

- -

10. Automatic Licensing of Downstream Recipients.

- -

Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License.

- -

An “entity transaction” is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts.

- -

You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it.

- -

11. Patents.

- -

A “contributor” is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's “contributor version”.

- -

A contributor's “essential patent claims” are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, “control” includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License.

- -

Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version.

- -

In the following three paragraphs, a “patent license” is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To “grant” such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party.

- -

If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. “Knowingly relying” means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid.

- -

If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it.

- -

A patent license is “discriminatory” if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007.

- -

Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law.

- -

12. No Surrender of Others' Freedom.

- -

If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program.

- -

13. Use with the GNU Affero General Public License.

- -

Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such.

- -

14. Revised Versions of this License.

- -

The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns.

- -

Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License “or any later version” applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation.

- -

If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program.

- -

Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version.

- -

15. Disclaimer of Warranty.

- -

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

- -

16. Limitation of Liability.

- -

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES.

- -

17. Interpretation of Sections 15 and 16.

- -

If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee.

- -

END OF TERMS AND CONDITIONS

- -

How to Apply These Terms to Your New Programs

- -

If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms.

- -

To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the “copyright” line and a pointer to where the full notice is found.

- -
    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
- -

Also add information on how to contact you by electronic and paper mail.

- -

If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode:

- -
    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
- -

The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an “about box”.

- -

You should also get your employer (if you work as a programmer) or school, -if any, to sign a “copyright disclaimer” for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<https://www.gnu.org/licenses/>.

- -

The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<https://www.gnu.org/licenses/why-not-lgpl.html>.

- - - \ No newline at end of file diff --git a/Neutron-trunk/resources/lib/material/iconfont.css b/Neutron-trunk/resources/lib/material/iconfont.css deleted file mode 100644 index 1691243..0000000 --- a/Neutron-trunk/resources/lib/material/iconfont.css +++ /dev/null @@ -1,41 +0,0 @@ -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: url("./material-classic.woff2") format('woff2'); -} - -@font-face { - font-family: 'Material Icons Outlined'; - font-style: normal; - font-weight: 400; - src: url("./material-outlined.woff2") format('woff2'); -} - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; -} - -.material-icons-outlined { - font-family: 'Material Icons Outlined'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; -} \ No newline at end of file diff --git a/Neutron-trunk/resources/lib/material/material-classic.woff2 b/Neutron-trunk/resources/lib/material/material-classic.woff2 deleted file mode 100644 index 2546ee6..0000000 Binary files a/Neutron-trunk/resources/lib/material/material-classic.woff2 and /dev/null differ diff --git a/Neutron-trunk/resources/lib/material/material-components-web.min.css b/Neutron-trunk/resources/lib/material/material-components-web.min.css deleted file mode 100644 index e9b7f76..0000000 --- a/Neutron-trunk/resources/lib/material/material-components-web.min.css +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://github.com/material-components/material-components-web/blob/master/LICENSE - */ - .mdc-touch-target-wrapper{display:inline}.mdc-elevation-overlay{position:absolute;border-radius:inherit;opacity:0;pointer-events:none;transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff}.mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);padding:0 8px 0 8px;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;overflow:visible;vertical-align:middle;border-radius:4px}.mdc-button .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button .mdc-button__ripple{border-radius:4px}.mdc-button:not(:disabled){background-color:transparent}.mdc-button:disabled{background-color:transparent}.mdc-button .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;width:18px;height:18px;font-size:18px;vertical-align:top}[dir=rtl] .mdc-button .mdc-button__icon,.mdc-button .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.mdc-button .mdc-button__touch{position:absolute;top:50%;right:0;height:48px;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.mdc-button:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button:disabled{color:rgba(0,0,0,.38)}.mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .mdc-button__label+.mdc-button__icon,.mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}svg.mdc-button__icon{fill:currentColor}.mdc-button--raised .mdc-button__icon,.mdc-button--unelevated .mdc-button__icon,.mdc-button--outlined .mdc-button__icon{margin-left:-4px;margin-right:8px}[dir=rtl] .mdc-button--raised .mdc-button__icon,.mdc-button--raised .mdc-button__icon[dir=rtl],[dir=rtl] .mdc-button--unelevated .mdc-button__icon,.mdc-button--unelevated .mdc-button__icon[dir=rtl],[dir=rtl] .mdc-button--outlined .mdc-button__icon,.mdc-button--outlined .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:-4px}.mdc-button--raised .mdc-button__label+.mdc-button__icon,.mdc-button--unelevated .mdc-button__label+.mdc-button__icon,.mdc-button--outlined .mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:-4px}[dir=rtl] .mdc-button--raised .mdc-button__label+.mdc-button__icon,.mdc-button--raised .mdc-button__label+.mdc-button__icon[dir=rtl],[dir=rtl] .mdc-button--unelevated .mdc-button__label+.mdc-button__icon,.mdc-button--unelevated .mdc-button__label+.mdc-button__icon[dir=rtl],[dir=rtl] .mdc-button--outlined .mdc-button__label+.mdc-button__icon,.mdc-button--outlined .mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:-4px;margin-right:8px}.mdc-button--raised,.mdc-button--unelevated{padding:0 16px 0 16px}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{background-color:rgba(0,0,0,.12)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{color:rgba(0,0,0,.38)}.mdc-button--raised{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--raised:hover,.mdc-button--raised:focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12)}.mdc-button--outlined{padding:0 15px 0 15px;border-width:1px;border-style:solid}.mdc-button--outlined .mdc-button__ripple{top:-1px;left:-1px;border:1px solid transparent}.mdc-button--outlined .mdc-button__touch{left:-1px;width:calc(100% + 2 * 1px)}.mdc-button--outlined:not(:disabled){border-color:rgba(0,0,0,.12)}.mdc-button--outlined:disabled{border-color:rgba(0,0,0,.12)}.mdc-button--touch{margin-top:6px;margin-bottom:6px}@-webkit-keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@-webkit-keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@-webkit-keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}@keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.mdc-button{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-button .mdc-button__ripple::before,.mdc-button .mdc-button__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-button .mdc-button__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-button.mdc-ripple-upgraded--unbounded .mdc-button__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-button.mdc-ripple-upgraded--foreground-activation .mdc-button__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-button.mdc-ripple-upgraded--foreground-deactivation .mdc-button__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-button .mdc-button__ripple::before,.mdc-button .mdc-button__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-button .mdc-button__ripple::before,.mdc-button .mdc-button__ripple::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-button:hover .mdc-button__ripple::before{opacity:.04}.mdc-button.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before,.mdc-button:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before{transition-duration:75ms;opacity:.12}.mdc-button:not(.mdc-ripple-upgraded) .mdc-button__ripple::after{transition:opacity 150ms linear}.mdc-button:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after{transition-duration:75ms;opacity:.12}.mdc-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-button .mdc-button__ripple{position:absolute;box-sizing:content-box;width:100%;height:100%;overflow:hidden}.mdc-button:not(.mdc-button--outlined) .mdc-button__ripple{top:0;left:0}.mdc-button--raised .mdc-button__ripple::before,.mdc-button--raised .mdc-button__ripple::after,.mdc-button--unelevated .mdc-button__ripple::before,.mdc-button--unelevated .mdc-button__ripple::after{background-color:#fff;background-color:var(--mdc-theme-on-primary, #fff)}.mdc-button--raised:hover .mdc-button__ripple::before,.mdc-button--unelevated:hover .mdc-button__ripple::before{opacity:.08}.mdc-button--raised.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before,.mdc-button--raised:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before,.mdc-button--unelevated.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before,.mdc-button--unelevated:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before{transition-duration:75ms;opacity:.24}.mdc-button--raised:not(.mdc-ripple-upgraded) .mdc-button__ripple::after,.mdc-button--unelevated:not(.mdc-ripple-upgraded) .mdc-button__ripple::after{transition:opacity 150ms linear}.mdc-button--raised:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after,.mdc-button--unelevated:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after{transition-duration:75ms;opacity:.24}.mdc-button--raised.mdc-ripple-upgraded,.mdc-button--unelevated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.24}.mdc-button{height:36px}.mdc-card{border-radius:4px;background-color:#fff;background-color:var(--mdc-theme-surface, #fff);position:relative;box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0,0,0,.12);display:flex;flex-direction:column;box-sizing:border-box}.mdc-card .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-card--outlined{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12);border-width:1px;border-style:solid;border-color:#e0e0e0}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card__media--square::before{margin-top:100%}.mdc-card__media--16-9::before{margin-top:56.25%}.mdc-card__media-content{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box}.mdc-card__primary-action{display:flex;flex-direction:column;box-sizing:border-box;position:relative;outline:none;color:inherit;text-decoration:none;cursor:pointer;overflow:hidden}.mdc-card__primary-action:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__primary-action:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card__actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mdc-card__actions--full-bleed{padding:0}.mdc-card__action-buttons,.mdc-card__action-icons{display:flex;flex-direction:row;align-items:center;box-sizing:border-box}.mdc-card__action-icons{color:rgba(0,0,0,.6);flex-grow:1;justify-content:flex-end}.mdc-card__action-buttons+.mdc-card__action-icons{margin-left:16px;margin-right:0}[dir=rtl] .mdc-card__action-buttons+.mdc-card__action-icons,.mdc-card__action-buttons+.mdc-card__action-icons[dir=rtl]{margin-left:0;margin-right:16px}.mdc-card__action{display:inline-flex;flex-direction:row;align-items:center;box-sizing:border-box;justify-content:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdc-card__action:focus{outline:none}.mdc-card__action--button{margin-left:0;margin-right:8px;padding:0 8px}[dir=rtl] .mdc-card__action--button,.mdc-card__action--button[dir=rtl]{margin-left:8px;margin-right:0}.mdc-card__action--button:last-child{margin-left:0;margin-right:0}[dir=rtl] .mdc-card__action--button:last-child,.mdc-card__action--button:last-child[dir=rtl]{margin-left:0;margin-right:0}.mdc-card__actions--full-bleed .mdc-card__action--button{justify-content:space-between;width:100%;height:auto;max-height:none;margin:0;padding:8px 16px;text-align:left}[dir=rtl] .mdc-card__actions--full-bleed .mdc-card__action--button,.mdc-card__actions--full-bleed .mdc-card__action--button[dir=rtl]{text-align:right}.mdc-card__action--icon{margin:-6px 0;padding:12px}.mdc-card__action--icon:not(:disabled){color:rgba(0,0,0,.6)}.mdc-card__primary-action{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-card__primary-action::before,.mdc-card__primary-action::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-card__primary-action::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-card__primary-action.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-card__primary-action.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-card__primary-action.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-card__primary-action.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-card__primary-action.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-card__primary-action::before,.mdc-card__primary-action::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-card__primary-action.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-card__primary-action::before,.mdc-card__primary-action::after{background-color:#000}.mdc-card__primary-action:hover::before{opacity:.04}.mdc-card__primary-action.mdc-ripple-upgraded--background-focused::before,.mdc-card__primary-action:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-card__primary-action:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-card__primary-action:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-card__primary-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}@-webkit-keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@-webkit-keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{-webkit-transform:scaleX(0);transform:scaleX(0)}68.2%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0, 1);animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{-webkit-transform:scaleX(0);transform:scaleX(0)}68.2%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0, 1);animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 1, 1);animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 1, 1);animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@-webkit-keyframes mdc-checkbox-checked-indeterminate-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@-webkit-keyframes mdc-checkbox-indeterminate-checked-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:rotate(360deg);transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:rotate(360deg);transform:rotate(360deg);opacity:1}}@-webkit-keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{-webkit-animation-timing-function:mdc-animation-deceleration-curve-timing-function;animation-timing-function:mdc-animation-deceleration-curve-timing-function;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{-webkit-animation-timing-function:mdc-animation-deceleration-curve-timing-function;animation-timing-function:mdc-animation-deceleration-curve-timing-function;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}}@-webkit-keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:0}}@-webkit-keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}32.8%,100%{-webkit-transform:scaleX(0);transform:scaleX(0);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}32.8%,100%{-webkit-transform:scaleX(0);transform:scaleX(0);opacity:0}}.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:11px}.mdc-checkbox .mdc-checkbox__native-control:checked~.mdc-checkbox__background::before,.mdc-checkbox .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background::before,.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background::before{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before{opacity:.04}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:.12}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:.12}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-checkbox .mdc-checkbox__background{top:11px;left:11px}.mdc-checkbox .mdc-checkbox__background::before{top:-13px;left:-13px;width:40px;height:40px}.mdc-checkbox .mdc-checkbox__native-control{top:0px;right:0px;left:0px;width:40px;height:40px}.mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0,0,0,.54);background-color:transparent}.mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786);background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}@-webkit-keyframes mdc-checkbox-fade-in-background-8A000000secondary00000000secondary{0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786);background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}}@keyframes mdc-checkbox-fade-in-background-8A000000secondary00000000secondary{0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786);background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}}@-webkit-keyframes mdc-checkbox-fade-out-background-8A000000secondary00000000secondary{0%,80%{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786);background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}100%{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-8A000000secondary00000000secondary{0%,80%{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786);background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}100%{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-8A000000secondary00000000secondary;animation-name:mdc-checkbox-fade-in-background-8A000000secondary00000000secondary}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-8A000000secondary00000000secondary;animation-name:mdc-checkbox-fade-out-background-8A000000secondary00000000secondary}.mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0,0,0,.38);background-color:transparent}.mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff}.mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff}@media screen and (-ms-high-contrast: active){.mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:GrayText;background-color:transparent}.mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background{border-color:GrayText;background-color:transparent}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:GrayText}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:GrayText}.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:transparent;pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__background .mdc-checkbox__background::before{background-color:#000;background-color:var(--mdc-theme-on-surface, #000)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--upgraded .mdc-checkbox__checkmark{opacity:1}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;-webkit-transform:scaleX(0) rotate(0deg);transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--upgraded .mdc-checkbox__background,.mdc-checkbox--upgraded .mdc-checkbox__checkmark,.mdc-checkbox--upgraded .mdc-checkbox__checkmark-path,.mdc-checkbox--upgraded .mdc-checkbox__mixedmark{transition:none !important}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{-webkit-animation-duration:180ms;animation-duration:180ms;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{-webkit-animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s;animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{-webkit-animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{-webkit-animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{-webkit-animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s;animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s;animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s;animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background{transition:border-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__background::before{position:absolute;-webkit-transform:scale(0, 0);transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:"";will-change:opacity,transform;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:focus~.mdc-checkbox__background::before{-webkit-transform:scale(1);transform:scale(1);opacity:.12;transition:opacity 80ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 80ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 80ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 80ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 80ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 80ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 80ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit}.mdc-checkbox__native-control:disabled{cursor:default;pointer-events:none}.mdc-checkbox--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-checkbox--touch .mdc-checkbox__native-control{top:-4px;right:-4px;left:-4px;width:48px;height:48px}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark{transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__mixedmark{-webkit-transform:scaleX(1) rotate(-45deg);transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__mixedmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__mixedmark{-webkit-transform:scaleX(1) rotate(0deg);transform:scaleX(1) rotate(0deg);opacity:1}.mdc-checkbox{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-checkbox .mdc-checkbox__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-checkbox.mdc-ripple-upgraded--unbounded .mdc-checkbox__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-checkbox.mdc-ripple-upgraded--foreground-activation .mdc-checkbox__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-checkbox.mdc-ripple-upgraded--foreground-deactivation .mdc-checkbox__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{background-color:#000;background-color:var(--mdc-theme-on-surface, #000)}.mdc-checkbox:hover .mdc-checkbox__ripple::before{opacity:.04}.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:.12}.mdc-checkbox:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-checkbox:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:.12}.mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-checkbox__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-ripple-upgraded--background-focused .mdc-checkbox__background::before{content:none}.mdc-chip-trailing-action__touch{width:26px}.mdc-chip-trailing-action__touch{position:absolute;top:50%;right:0;height:48px;left:50%;width:48px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.mdc-chip-trailing-action{border:none;display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;padding:0;outline:none;cursor:pointer;-webkit-appearance:none;background:none}.mdc-chip-trailing-action .mdc-chip-trailing-action__icon{height:18px;width:18px;font-size:18px}.mdc-chip-trailing-action .mdc-chip-trailing-action{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-chip-trailing-action .mdc-chip-trailing-action__icon{fill:currentColor;color:inherit}.mdc-chip-trailing-action{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple::before,.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-chip-trailing-action.mdc-ripple-upgraded .mdc-chip-trailing-action__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip-trailing-action.mdc-ripple-upgraded .mdc-chip-trailing-action__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-chip-trailing-action.mdc-ripple-upgraded--unbounded .mdc-chip-trailing-action__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-chip-trailing-action.mdc-ripple-upgraded--foreground-activation .mdc-chip-trailing-action__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-chip-trailing-action.mdc-ripple-upgraded--foreground-deactivation .mdc-chip-trailing-action__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple::before,.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-chip-trailing-action.mdc-ripple-upgraded .mdc-chip-trailing-action__ripple::before,.mdc-chip-trailing-action.mdc-ripple-upgraded .mdc-chip-trailing-action__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-chip-trailing-action.mdc-ripple-upgraded .mdc-chip-trailing-action__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple::before,.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple::after{background-color:#000;background-color:var(--mdc-theme-on-surface, #000)}.mdc-chip-trailing-action:hover .mdc-chip-trailing-action__ripple::before{opacity:.04}.mdc-chip-trailing-action.mdc-ripple-upgraded--background-focused .mdc-chip-trailing-action__ripple::before,.mdc-chip-trailing-action:not(.mdc-ripple-upgraded):focus .mdc-chip-trailing-action__ripple::before{transition-duration:75ms;opacity:.12}.mdc-chip-trailing-action:not(.mdc-ripple-upgraded) .mdc-chip-trailing-action__ripple::after{transition:opacity 150ms linear}.mdc-chip-trailing-action:not(.mdc-ripple-upgraded):active .mdc-chip-trailing-action__ripple::after{transition-duration:75ms;opacity:.12}.mdc-chip-trailing-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-chip-trailing-action .mdc-chip-trailing-action__ripple{position:absolute;box-sizing:content-box;width:100%;height:100%;overflow:hidden}.mdc-chip__icon--leading{color:rgba(0,0,0,.54)}.mdc-chip-trailing-action{color:#000}.mdc-chip__icon--trailing{color:rgba(0,0,0,.54)}.mdc-chip__icon--trailing:hover{color:rgba(0,0,0,.62)}.mdc-chip__icon--trailing:focus{color:rgba(0,0,0,.87)}.mdc-chip__icon.mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden){width:20px;height:20px;font-size:20px}.mdc-chip-trailing-action__icon{height:18px;width:18px;font-size:18px}.mdc-chip__icon.mdc-chip__icon--trailing{width:18px;height:18px;font-size:18px}.mdc-chip-trailing-action{margin-left:4px;margin-right:-4px}[dir=rtl] .mdc-chip-trailing-action,.mdc-chip-trailing-action[dir=rtl]{margin-left:-4px;margin-right:4px}.mdc-chip__icon--trailing{margin-left:4px;margin-right:-4px}[dir=rtl] .mdc-chip__icon--trailing,.mdc-chip__icon--trailing[dir=rtl]{margin-left:-4px;margin-right:4px}.mdc-chip{border-radius:16px;background-color:#e0e0e0;color:rgba(0,0,0,.87);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);height:32px;position:relative;display:inline-flex;align-items:center;box-sizing:border-box;padding:0 12px;border-width:0;outline:none;cursor:pointer;-webkit-appearance:none}.mdc-chip .mdc-chip__ripple{border-radius:16px}.mdc-chip:hover{color:rgba(0,0,0,.87)}.mdc-chip.mdc-chip--selected .mdc-chip__checkmark,.mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden){margin-left:-4px;margin-right:4px}[dir=rtl] .mdc-chip.mdc-chip--selected .mdc-chip__checkmark,.mdc-chip.mdc-chip--selected .mdc-chip__checkmark[dir=rtl],[dir=rtl] .mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden),.mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden)[dir=rtl]{margin-left:4px;margin-right:-4px}.mdc-chip .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-chip::-moz-focus-inner{padding:0;border:0}.mdc-chip:hover{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-chip .mdc-chip__touch{position:absolute;top:50%;right:0;height:48px;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.mdc-chip--exit{transition:opacity 75ms cubic-bezier(0.4, 0, 0.2, 1),width 150ms cubic-bezier(0, 0, 0.2, 1),padding 100ms linear,margin 100ms linear;opacity:0}.mdc-chip__text{white-space:nowrap}.mdc-chip__icon{border-radius:50%;outline:none;vertical-align:middle}.mdc-chip__checkmark{height:20px}.mdc-chip__checkmark-path{transition:stroke-dashoffset 150ms 50ms cubic-bezier(0.4, 0, 0.6, 1);stroke-width:2px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-chip__primary-action:focus{outline:none}.mdc-chip--selected .mdc-chip__checkmark-path{stroke-dashoffset:0}.mdc-chip__icon--leading,.mdc-chip__icon--trailing{position:relative}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__icon--leading{color:rgba(98,0,238,.54)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip .mdc-chip__checkmark-path{stroke:#6200ee;stroke:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip--selected{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-chip__checkmark-svg{width:0;height:20px;transition:width 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-chip--selected .mdc-chip__checkmark-svg{width:20px}.mdc-chip-set--filter .mdc-chip__icon--leading{transition:opacity 75ms linear;transition-delay:-50ms;opacity:1}.mdc-chip-set--filter .mdc-chip__icon--leading+.mdc-chip__checkmark{transition:opacity 75ms linear;transition-delay:80ms;opacity:0}.mdc-chip-set--filter .mdc-chip__icon--leading+.mdc-chip__checkmark .mdc-chip__checkmark-svg{transition:width 0ms}.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading{opacity:0}.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading+.mdc-chip__checkmark{width:0;opacity:1}.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading{width:0;opacity:0}.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading+.mdc-chip__checkmark{width:20px}.mdc-chip{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-chip .mdc-chip__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-chip.mdc-ripple-upgraded--unbounded .mdc-chip__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-chip.mdc-ripple-upgraded--foreground-activation .mdc-chip__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-chip.mdc-ripple-upgraded--foreground-deactivation .mdc-chip__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{background-color:rgba(0,0,0,.87)}.mdc-chip:hover .mdc-chip__ripple::before{opacity:.04}.mdc-chip.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before,.mdc-chip.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before,.mdc-chip:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before,.mdc-chip:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before{transition-duration:75ms;opacity:.12}.mdc-chip:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after{transition:opacity 150ms linear}.mdc-chip:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after{transition-duration:75ms;opacity:.12}.mdc-chip.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-chip .mdc-chip__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before{opacity:.08}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover .mdc-chip__ripple::before{opacity:.12}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before{transition-duration:75ms;opacity:.2}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after{transition:opacity 150ms linear}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after{transition-duration:75ms;opacity:.2}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.2}@-webkit-keyframes mdc-chip-entry{from{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:.4}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes mdc-chip-entry{from{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:.4}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.mdc-chip-set{padding:4px;display:flex;flex-wrap:wrap;box-sizing:border-box}.mdc-chip-set .mdc-chip{margin:4px}.mdc-chip-set .mdc-chip--touch{margin-top:8px;margin-bottom:8px}.mdc-chip-set--input .mdc-chip{-webkit-animation:mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1);animation:mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__determinate-circle,.mdc-circular-progress__indeterminate-circle-graphic{stroke:#6200ee;stroke:var(--mdc-theme-primary, #6200ee)}@-webkit-keyframes mdc-circular-progress-container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdc-circular-progress-container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}100%{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}100%{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdc-circular-progress-color-1-fade-in-out{from{opacity:.99}25%{opacity:.99}26%{opacity:0}89%{opacity:0}90%{opacity:.99}to{opacity:.99}}@keyframes mdc-circular-progress-color-1-fade-in-out{from{opacity:.99}25%{opacity:.99}26%{opacity:0}89%{opacity:0}90%{opacity:.99}to{opacity:.99}}@-webkit-keyframes mdc-circular-progress-color-2-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:.99}50%{opacity:.99}51%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-2-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:.99}50%{opacity:.99}51%{opacity:0}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-color-3-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:.99}75%{opacity:.99}76%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-3-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:.99}75%{opacity:.99}76%{opacity:0}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-color-4-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:.99}90%{opacity:.99}to{opacity:0}}@keyframes mdc-circular-progress-color-4-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:.99}90%{opacity:.99}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-left-spin{from{-webkit-transform:rotate(265deg);transform:rotate(265deg)}50%{-webkit-transform:rotate(130deg);transform:rotate(130deg)}to{-webkit-transform:rotate(265deg);transform:rotate(265deg)}}@keyframes mdc-circular-progress-left-spin{from{-webkit-transform:rotate(265deg);transform:rotate(265deg)}50%{-webkit-transform:rotate(130deg);transform:rotate(130deg)}to{-webkit-transform:rotate(265deg);transform:rotate(265deg)}}@-webkit-keyframes mdc-circular-progress-right-spin{from{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}50%{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}to{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}}@keyframes mdc-circular-progress-right-spin{from{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}50%{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}to{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}}.mdc-circular-progress{width:48px;height:48px;display:inline-block;position:relative;direction:ltr;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-circular-progress .mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:4px}.mdc-circular-progress .mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:3.2px}.mdc-circular-progress--small{width:24px;height:24px}.mdc-circular-progress--small .mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress--small .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:2.5px}.mdc-circular-progress--small .mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:2px}.mdc-circular-progress--medium{width:36px;height:36px}.mdc-circular-progress--medium .mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress--medium .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:3px}.mdc-circular-progress--medium .mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:2.4px}.mdc-circular-progress--large{width:48px;height:48px}.mdc-circular-progress--large .mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress--large .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:4px}.mdc-circular-progress--large .mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{stroke-width:3.2px}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.mdc-circular-progress__indeterminate-container{opacity:0}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:transparent}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.mdc-circular-progress__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{-webkit-animation:mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite;animation:mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-1{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-2{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-3{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-4{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{-webkit-animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{-webkit-animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--closed{opacity:0}.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit)}.mdc-data-table{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);border-radius:4px;border-width:1px;border-style:solid;border-color:rgba(0,0,0,.12);-webkit-overflow-scrolling:touch;display:inline-flex;flex-direction:column;box-sizing:border-box;overflow-x:auto;position:relative}.mdc-data-table__row{background-color:inherit}.mdc-data-table__header-row{background-color:inherit}.mdc-data-table__row--selected{background-color:rgba(98,0,238,.04)}.mdc-data-table__row,.mdc-data-table__pagination{border-top-color:rgba(0,0,0,.12)}.mdc-data-table__row,.mdc-data-table__pagination{border-top-width:1px;border-top-style:solid}.mdc-data-table__row:not(.mdc-data-table__row--selected):hover{background-color:rgba(0,0,0,.04)}.mdc-data-table__header-cell{color:rgba(0,0,0,.87)}.mdc-data-table__cell{color:rgba(0,0,0,.87)}.mdc-data-table__cell,.mdc-data-table__pagination{height:52px}.mdc-data-table__header-cell{height:56px}.mdc-data-table__cell,.mdc-data-table__header-cell{padding-right:16px;padding-left:16px}.mdc-data-table__header-cell--checkbox,.mdc-data-table__cell--checkbox{padding-left:16px;padding-right:0}[dir=rtl] .mdc-data-table__header-cell--checkbox,.mdc-data-table__header-cell--checkbox[dir=rtl],[dir=rtl] .mdc-data-table__cell--checkbox,.mdc-data-table__cell--checkbox[dir=rtl]{padding-left:0;padding-right:16px}.mdc-data-table__sort-icon-button{color:rgba(0,0,0,.6)}.mdc-data-table__sort-icon-button::before,.mdc-data-table__sort-icon-button::after{background-color:rgba(0,0,0,.6)}.mdc-data-table__sort-icon-button:hover::before{opacity:.04}.mdc-data-table__sort-icon-button.mdc-ripple-upgraded--background-focused::before,.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-data-table__sort-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{color:rgba(0,0,0,.87)}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button::before,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button::after{background-color:rgba(0,0,0,.87)}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:hover::before{opacity:.04}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-upgraded--background-focused::before,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-data-table__table{min-width:100%;border:0;white-space:nowrap;border-collapse:collapse;table-layout:fixed}.mdc-data-table__cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);box-sizing:border-box;text-overflow:ellipsis;overflow:hidden}.mdc-data-table__cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__cell--numeric,.mdc-data-table__cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__header-cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height, 1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit);box-sizing:border-box;text-align:left;text-overflow:ellipsis;overflow:hidden;outline:none}[dir=rtl] .mdc-data-table__header-cell,.mdc-data-table__header-cell[dir=rtl]{text-align:right}.mdc-data-table__header-cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__header-cell--numeric,.mdc-data-table__header-cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__sort-icon-button{width:28px;height:28px;padding:2px;margin-left:4px;margin-right:0;transition:-webkit-transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}[dir=rtl] .mdc-data-table__sort-icon-button,.mdc-data-table__sort-icon-button[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__header-cell--sorted-descending .mdc-data-table__sort-icon-button{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.mdc-data-table__sort-icon-button:focus,.mdc-data-table__header-cell:hover .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{opacity:1}.mdc-data-table__header-cell-wrapper{display:inline-flex;align-items:center}.mdc-data-table__header-cell--with-sort{cursor:pointer}.mdc-data-table__progress-indicator{display:none;position:absolute;width:100%}.mdc-data-table--in-progress .mdc-data-table__progress-indicator{display:block}.mdc-data-table__scrim{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);height:100%;opacity:.32;position:absolute;top:0;width:100%}.mdc-data-table__pagination{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);box-sizing:border-box;display:flex;justify-content:flex-end}.mdc-data-table__pagination-trailing{margin-left:4px;margin-right:0;align-items:center;display:flex}[dir=rtl] .mdc-data-table__pagination-trailing,.mdc-data-table__pagination-trailing[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__pagination-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__pagination-button .mdc-button__icon,.mdc-data-table__pagination-button .mdc-button__icon[dir=rtl]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}[dir=rtl] .mdc-data-table__pagination-button,.mdc-data-table__pagination-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__pagination-total{margin-left:0;margin-right:36px;white-space:nowrap}[dir=rtl] .mdc-data-table__pagination-total,.mdc-data-table__pagination-total[dir=rtl]{margin-left:36px;margin-right:0}.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:checked~.mdc-checkbox__background::before,.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background::before,.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background::before,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:checked~.mdc-checkbox__background::before,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background::before,.mdc-data-table__row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background::before{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__header-row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before{opacity:.04}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:.12}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:.12}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded,.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-data-table__header-row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__header-row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0,0,0,.54);background-color:transparent}.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee);background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}@-webkit-keyframes mdc-checkbox-fade-in-background-8A000000primary00000000primary{0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee);background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}}@keyframes mdc-checkbox-fade-in-background-8A000000primary00000000primary{0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee);background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}}@-webkit-keyframes mdc-checkbox-fade-out-background-8A000000primary00000000primary{0%,80%{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee);background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}100%{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-8A000000primary00000000primary{0%,80%{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee);background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}100%{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-8A000000primary00000000primary;animation-name:mdc-checkbox-fade-in-background-8A000000primary00000000primary}.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-8A000000primary00000000primary;animation-name:mdc-checkbox-fade-out-background-8A000000primary00000000primary}.mdc-dialog,.mdc-dialog__scrim{position:fixed;top:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.mdc-dialog{display:none;z-index:7}.mdc-dialog .mdc-dialog__surface{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-dialog .mdc-dialog__scrim{background-color:rgba(0,0,0,.32)}.mdc-dialog .mdc-dialog__title{color:rgba(0,0,0,.87)}.mdc-dialog .mdc-dialog__content{color:rgba(0,0,0,.6)}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title,.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__actions{border-color:rgba(0,0,0,.12)}.mdc-dialog .mdc-dialog__surface{min-width:280px}@media(max-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:calc(100vw - 32px)}}@media(min-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:560px}}.mdc-dialog .mdc-dialog__surface{max-height:calc(100% - 32px)}.mdc-dialog .mdc-dialog__surface{border-radius:4px}.mdc-dialog__scrim{opacity:0;z-index:-1}.mdc-dialog__container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0;pointer-events:none}.mdc-dialog__surface{position:relative;box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0,0,0,.12);display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;max-width:100%;max-height:100%;pointer-events:auto;overflow-y:auto}.mdc-dialog__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-dialog[dir=rtl] .mdc-dialog__surface,[dir=rtl] .mdc-dialog .mdc-dialog__surface{text-align:right}.mdc-dialog__title{display:block;margin-top:0;line-height:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit);position:relative;flex-shrink:0;box-sizing:border-box;margin:0;padding:0 24px 9px;border-bottom:1px solid transparent}.mdc-dialog__title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-dialog[dir=rtl] .mdc-dialog__title,[dir=rtl] .mdc-dialog .mdc-dialog__title{text-align:right}.mdc-dialog--scrollable .mdc-dialog__title{padding-bottom:15px}.mdc-dialog__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size, 1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height, 1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing, 0.03125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform, inherit);flex-grow:1;box-sizing:border-box;margin:0;padding:20px 24px;overflow:auto;-webkit-overflow-scrolling:touch}.mdc-dialog__content>:first-child{margin-top:0}.mdc-dialog__content>:last-child{margin-bottom:0}.mdc-dialog__title+.mdc-dialog__content{padding-top:0}.mdc-dialog--scrollable .mdc-dialog__content{padding-top:8px;padding-bottom:8px}.mdc-dialog__content .mdc-list:first-child:last-child{padding:6px 0 0}.mdc-dialog--scrollable .mdc-dialog__content .mdc-list:first-child:last-child{padding:0}.mdc-dialog__actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid transparent}.mdc-dialog--stacked .mdc-dialog__actions{flex-direction:column;align-items:flex-end}.mdc-dialog__button{margin-left:8px;margin-right:0;max-width:100%;text-align:right}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{margin-left:0;margin-right:8px}.mdc-dialog__button:first-child{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button:first-child,.mdc-dialog__button:first-child[dir=rtl]{margin-left:0;margin-right:0}.mdc-dialog[dir=rtl] .mdc-dialog__button,[dir=rtl] .mdc-dialog .mdc-dialog__button{text-align:left}.mdc-dialog--stacked .mdc-dialog__button:not(:first-child){margin-top:12px}.mdc-dialog--open,.mdc-dialog--opening,.mdc-dialog--closing{display:flex}.mdc-dialog--opening .mdc-dialog__scrim{transition:opacity 150ms linear}.mdc-dialog--opening .mdc-dialog__container{transition:opacity 75ms linear,-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-dialog--closing .mdc-dialog__scrim,.mdc-dialog--closing .mdc-dialog__container{transition:opacity 75ms linear}.mdc-dialog--closing .mdc-dialog__container{-webkit-transform:scale(1);transform:scale(1)}.mdc-dialog--open .mdc-dialog__scrim{opacity:1}.mdc-dialog--open .mdc-dialog__container{-webkit-transform:scale(1);transform:scale(1);opacity:1}.mdc-dialog-scroll-lock{overflow:hidden}.mdc-drawer{border-color:rgba(0,0,0,.12);background-color:#fff;border-radius:0 0 0 0;z-index:6;width:256px;display:flex;flex-direction:column;flex-shrink:0;box-sizing:border-box;height:100%;border-right-width:1px;border-right-style:solid;overflow:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform, -webkit-transform;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)}.mdc-drawer .mdc-drawer__title{color:rgba(0,0,0,.87)}.mdc-drawer .mdc-list-group__subheader{color:rgba(0,0,0,.6)}.mdc-drawer .mdc-drawer__subtitle{color:rgba(0,0,0,.6)}.mdc-drawer .mdc-list-item__graphic{color:rgba(0,0,0,.6)}.mdc-drawer .mdc-list-item{color:rgba(0,0,0,.87)}.mdc-drawer .mdc-list-item--activated .mdc-list-item__graphic{color:#6200ee}.mdc-drawer .mdc-list-item--activated{color:rgba(98,0,238,.87)}[dir=rtl] .mdc-drawer,.mdc-drawer[dir=rtl]{border-radius:0 0 0 0}.mdc-drawer .mdc-list-item{border-radius:4px}.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content{margin-left:256px;margin-right:0}[dir=rtl] .mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content,.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content[dir=rtl]{margin-left:0;margin-right:256px}[dir=rtl] .mdc-drawer,.mdc-drawer[dir=rtl]{border-right-width:0;border-left-width:1px;border-right-style:none;border-left-style:solid}.mdc-drawer .mdc-list-item{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height, 1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit);height:calc(48px - 2 * 4px);margin:8px 8px;padding:0 8px}.mdc-drawer .mdc-list-item:nth-child(1){margin-top:2px}.mdc-drawer .mdc-list-item:nth-last-child(1){margin-bottom:0}.mdc-drawer .mdc-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin:0;padding:0 16px}.mdc-drawer .mdc-list-group__subheader::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-drawer .mdc-list-divider{margin:3px 0 4px}.mdc-drawer .mdc-list-item__text,.mdc-drawer .mdc-list-item__graphic{pointer-events:none}.mdc-drawer--animate{-webkit-transform:translateX(-100%);transform:translateX(-100%)}[dir=rtl] .mdc-drawer--animate,.mdc-drawer--animate[dir=rtl]{-webkit-transform:translateX(100%);transform:translateX(100%)}.mdc-drawer--opening{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:250ms}[dir=rtl] .mdc-drawer--opening,.mdc-drawer--opening[dir=rtl]{-webkit-transform:translateX(0);transform:translateX(0)}.mdc-drawer--closing{-webkit-transform:translateX(-100%);transform:translateX(-100%);transition-duration:200ms}[dir=rtl] .mdc-drawer--closing,.mdc-drawer--closing[dir=rtl]{-webkit-transform:translateX(100%);transform:translateX(100%)}.mdc-drawer__header{flex-shrink:0;box-sizing:border-box;min-height:64px;padding:0 16px 4px}.mdc-drawer__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-drawer__title::before{display:inline-block;width:0;height:36px;content:"";vertical-align:0}.mdc-drawer__title::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-drawer__subtitle{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin-bottom:0}.mdc-drawer__subtitle::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-drawer__content{height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}.mdc-drawer--dismissible{left:0;right:initial;display:none;position:absolute}[dir=rtl] .mdc-drawer--dismissible,.mdc-drawer--dismissible[dir=rtl]{left:initial;right:0}.mdc-drawer--dismissible.mdc-drawer--open{display:flex}.mdc-drawer-app-content{margin-left:0;margin-right:0;position:relative}[dir=rtl] .mdc-drawer-app-content,.mdc-drawer-app-content[dir=rtl]{margin-left:0;margin-right:0}.mdc-drawer--modal{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0,0,0,.12);left:0;right:initial;display:none;position:fixed}.mdc-drawer--modal+.mdc-drawer-scrim{background-color:rgba(0,0,0,.32)}[dir=rtl] .mdc-drawer--modal,.mdc-drawer--modal[dir=rtl]{left:initial;right:0}.mdc-drawer--modal.mdc-drawer--open{display:flex}.mdc-drawer-scrim{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:5;transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)}.mdc-drawer--open+.mdc-drawer-scrim{display:block}.mdc-drawer--animate+.mdc-drawer-scrim{opacity:0}.mdc-drawer--opening+.mdc-drawer-scrim{transition-duration:250ms;opacity:1}.mdc-drawer--closing+.mdc-drawer-scrim{transition-duration:200ms;opacity:0}.mdc-elevation--z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12)}.mdc-elevation--z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0,0,0,.12)}.mdc-elevation--z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12)}.mdc-elevation--z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0,0,0,.12)}.mdc-elevation--z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-elevation--z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 5px 8px 0px rgba(0, 0, 0, 0.14),0px 1px 14px 0px rgba(0,0,0,.12)}.mdc-elevation--z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0,0,0,.12)}.mdc-elevation--z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2),0px 7px 10px 1px rgba(0, 0, 0, 0.14),0px 2px 16px 1px rgba(0,0,0,.12)}.mdc-elevation--z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-elevation--z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2),0px 9px 12px 1px rgba(0, 0, 0, 0.14),0px 3px 16px 2px rgba(0,0,0,.12)}.mdc-elevation--z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0,0,0,.12)}.mdc-elevation--z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2),0px 11px 15px 1px rgba(0, 0, 0, 0.14),0px 4px 20px 3px rgba(0,0,0,.12)}.mdc-elevation--z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0,0,0,.12)}.mdc-elevation--z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 13px 19px 2px rgba(0, 0, 0, 0.14),0px 5px 24px 4px rgba(0,0,0,.12)}.mdc-elevation--z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2),0px 14px 21px 2px rgba(0, 0, 0, 0.14),0px 5px 26px 4px rgba(0,0,0,.12)}.mdc-elevation--z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2),0px 15px 22px 2px rgba(0, 0, 0, 0.14),0px 6px 28px 5px rgba(0,0,0,.12)}.mdc-elevation--z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0,0,0,.12)}.mdc-elevation--z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2),0px 17px 26px 2px rgba(0, 0, 0, 0.14),0px 6px 32px 5px rgba(0,0,0,.12)}.mdc-elevation--z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2),0px 18px 28px 2px rgba(0, 0, 0, 0.14),0px 7px 34px 6px rgba(0,0,0,.12)}.mdc-elevation--z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2),0px 19px 29px 2px rgba(0, 0, 0, 0.14),0px 7px 36px 6px rgba(0,0,0,.12)}.mdc-elevation--z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 20px 31px 3px rgba(0, 0, 0, 0.14),0px 8px 38px 7px rgba(0,0,0,.12)}.mdc-elevation--z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 21px 33px 3px rgba(0, 0, 0, 0.14),0px 8px 40px 7px rgba(0,0,0,.12)}.mdc-elevation--z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2),0px 22px 35px 3px rgba(0, 0, 0, 0.14),0px 8px 42px 7px rgba(0,0,0,.12)}.mdc-elevation--z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2),0px 23px 36px 3px rgba(0, 0, 0, 0.14),0px 9px 44px 8px rgba(0,0,0,.12)}.mdc-elevation--z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0,0,0,.12)}.mdc-elevation-transition{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);will-change:box-shadow}.mdc-fab{position:relative;box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0,0,0,.12);display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,-webkit-transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);background-color:#018786;background-color:var(--mdc-theme-secondary, #018786);color:#fff;color:var(--mdc-theme-on-secondary, #fff)}.mdc-fab .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-fab:not(.mdc-fab--extended){border-radius:50%}.mdc-fab:not(.mdc-fab--extended) .mdc-fab__ripple{border-radius:50%}.mdc-fab::-moz-focus-inner{padding:0;border:0}.mdc-fab:hover,.mdc-fab:focus{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-fab:active{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0,0,0,.12)}.mdc-fab:active,.mdc-fab:focus{outline:none}.mdc-fab:hover{cursor:pointer}.mdc-fab>svg{width:100%}.mdc-fab .mdc-fab__icon{width:24px;height:24px;font-size:24px}.mdc-fab--mini{width:40px;height:40px}.mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);border-radius:24px;padding:0 20px;width:auto;max-width:100%;height:48px;line-height:normal}.mdc-fab--extended .mdc-fab__ripple{border-radius:24px}.mdc-fab--extended .mdc-fab__icon{margin-left:-8px;margin-right:12px}[dir=rtl] .mdc-fab--extended .mdc-fab__icon,.mdc-fab--extended .mdc-fab__icon[dir=rtl]{margin-left:12px;margin-right:-8px}.mdc-fab--extended .mdc-fab__label+.mdc-fab__icon{margin-left:12px;margin-right:-8px}[dir=rtl] .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon,.mdc-fab--extended .mdc-fab__label+.mdc-fab__icon[dir=rtl]{margin-left:-8px;margin-right:12px}.mdc-fab--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-fab--touch .mdc-fab__touch{position:absolute;top:50%;right:0;height:48px;left:50%;width:48px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.mdc-fab::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:""}.mdc-fab__label{justify-content:flex-start;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;overflow-y:visible}.mdc-fab__icon{transition:-webkit-transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}.mdc-fab .mdc-fab__icon{display:inline-flex;align-items:center;justify-content:center}.mdc-fab--exited{-webkit-transform:scale(0);transform:scale(0);opacity:0;transition:opacity 15ms linear 150ms,-webkit-transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 15ms linear 150ms,transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 15ms linear 150ms,transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1),-webkit-transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-fab--exited .mdc-fab__icon{-webkit-transform:scale(0);transform:scale(0);transition:-webkit-transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-fab{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-fab .mdc-fab__ripple::before,.mdc-fab .mdc-fab__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-fab .mdc-fab__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-fab.mdc-ripple-upgraded--unbounded .mdc-fab__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-fab.mdc-ripple-upgraded--foreground-activation .mdc-fab__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-fab.mdc-ripple-upgraded--foreground-deactivation .mdc-fab__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-fab .mdc-fab__ripple::before,.mdc-fab .mdc-fab__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-fab .mdc-fab__ripple::before,.mdc-fab .mdc-fab__ripple::after{background-color:#fff;background-color:var(--mdc-theme-on-secondary, #fff)}.mdc-fab:hover .mdc-fab__ripple::before{opacity:.08}.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__ripple::before,.mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__ripple::before{transition-duration:75ms;opacity:.24}.mdc-fab:not(.mdc-ripple-upgraded) .mdc-fab__ripple::after{transition:opacity 150ms linear}.mdc-fab:not(.mdc-ripple-upgraded):active .mdc-fab__ripple::after{transition-duration:75ms;opacity:.24}.mdc-fab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.24}.mdc-fab .mdc-fab__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform;transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75)}.mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-standard 250ms 1;animation:mdc-floating-label-shake-float-above-standard 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-standard{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-standard{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}.mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{margin-left:auto;margin-right:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label{margin:0}[dir=rtl] .mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl]{margin:0}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;font-size:24px;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:48px;height:48px;padding:12px}.mdc-icon-button svg,.mdc-icon-button img{width:24px;height:24px}.mdc-icon-button:disabled{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38))}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}.mdc-icon-button{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-icon-button::before,.mdc-icon-button::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-icon-button::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-icon-button.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-icon-button.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-icon-button.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-icon-button.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-icon-button.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-icon-button::before,.mdc-icon-button::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-icon-button.mdc-ripple-upgraded::before,.mdc-icon-button.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-icon-button.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-icon-button::before,.mdc-icon-button::after{background-color:#000}.mdc-icon-button:hover::before{opacity:.04}.mdc-icon-button.mdc-ripple-upgraded--background-focused::before,.mdc-icon-button:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-icon-button:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-icon-button:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-image-list{display:flex;flex-wrap:wrap;margin:0 auto;padding:0}.mdc-image-list__item,.mdc-image-list__image-aspect-container{position:relative;box-sizing:border-box}.mdc-image-list__item{list-style-type:none}.mdc-image-list__image{width:100%}.mdc-image-list__image-aspect-container .mdc-image-list__image{position:absolute;top:0;right:0;bottom:0;left:0;height:100%;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-image-list__image-aspect-container{padding-bottom:calc(100% / 1)}.mdc-image-list__image{border-radius:0}.mdc-image-list--with-text-protection .mdc-image-list__supporting{border-radius:0 0 0 0}.mdc-image-list__supporting{color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;padding:8px 0;line-height:24px}.mdc-image-list__label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-image-list--with-text-protection .mdc-image-list__supporting{position:absolute;bottom:0;width:100%;height:48px;padding:0 16px;background:rgba(0,0,0,.6);color:#fff}.mdc-image-list--masonry{display:block}.mdc-image-list--masonry .mdc-image-list__item{-webkit-column-break-inside:avoid;break-inside:avoid-column}.mdc-image-list--masonry .mdc-image-list__image{display:block;height:auto}:root{--mdc-layout-grid-margin-desktop: 24px;--mdc-layout-grid-gutter-desktop: 24px;--mdc-layout-grid-column-width-desktop: 72px;--mdc-layout-grid-margin-tablet: 16px;--mdc-layout-grid-gutter-tablet: 16px;--mdc-layout-grid-column-width-tablet: 72px;--mdc-layout-grid-margin-phone: 16px;--mdc-layout-grid-gutter-phone: 16px;--mdc-layout-grid-column-width-phone: 72px}@media(min-width: 840px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:24px;padding:var(--mdc-layout-grid-margin-desktop, 24px)}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:16px;padding:var(--mdc-layout-grid-margin-tablet, 16px)}}@media(max-width: 599px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:16px;padding:var(--mdc-layout-grid-margin-phone, 16px)}}@media(min-width: 840px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-12px;margin:calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2 * -1)}@supports(display: grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:24px;grid-gap:var(--mdc-layout-grid-gutter-desktop, 24px);grid-template-columns:repeat(12, minmax(0, 1fr))}}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-8px;margin:calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2 * -1)}@supports(display: grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:16px;grid-gap:var(--mdc-layout-grid-gutter-tablet, 16px);grid-template-columns:repeat(8, minmax(0, 1fr))}}}@media(max-width: 599px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-8px;margin:calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2 * -1)}@supports(display: grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:16px;grid-gap:var(--mdc-layout-grid-gutter-phone, 16px);grid-template-columns:repeat(4, minmax(0, 1fr))}}}@media(min-width: 840px){.mdc-layout-grid__cell{width:calc(33.3333333333% - 24px);width:calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px));box-sizing:border-box;margin:12px;margin:calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2)}@supports(display: grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4}}@supports(display: grid){.mdc-layout-grid__cell{margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-desktop{width:calc(8.3333333333% - 24px);width:calc(8.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-desktop{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-desktop{width:calc(16.6666666667% - 24px);width:calc(16.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-desktop{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-desktop{width:calc(25% - 24px);width:calc(25% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-desktop{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-desktop{width:calc(33.3333333333% - 24px);width:calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-desktop{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-desktop{width:calc(41.6666666667% - 24px);width:calc(41.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-desktop{width:auto;grid-column-end:span 5}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-desktop{width:calc(50% - 24px);width:calc(50% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-desktop{width:auto;grid-column-end:span 6}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-desktop{width:calc(58.3333333333% - 24px);width:calc(58.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-desktop{width:auto;grid-column-end:span 7}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-desktop{width:calc(66.6666666667% - 24px);width:calc(66.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-desktop{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-desktop{width:calc(75% - 24px);width:calc(75% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-desktop{width:auto;grid-column-end:span 9}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-desktop{width:calc(83.3333333333% - 24px);width:calc(83.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-desktop{width:auto;grid-column-end:span 10}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-desktop{width:calc(91.6666666667% - 24px);width:calc(91.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-desktop{width:auto;grid-column-end:span 11}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-desktop{width:calc(100% - 24px);width:calc(100% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-desktop{width:auto;grid-column-end:span 12}}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid__cell{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px));box-sizing:border-box;margin:8px;margin:calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2)}@supports(display: grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4}}@supports(display: grid){.mdc-layout-grid__cell{margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-tablet{width:calc(12.5% - 16px);width:calc(12.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-tablet{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-tablet{width:calc(25% - 16px);width:calc(25% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-tablet{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-tablet{width:calc(37.5% - 16px);width:calc(37.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-tablet{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-tablet{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-tablet{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-tablet{width:calc(62.5% - 16px);width:calc(62.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-tablet{width:auto;grid-column-end:span 5}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-tablet{width:calc(75% - 16px);width:calc(75% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-tablet{width:auto;grid-column-end:span 6}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-tablet{width:calc(87.5% - 16px);width:calc(87.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-tablet{width:auto;grid-column-end:span 7}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-tablet{width:auto;grid-column-end:span 8}}}@media(max-width: 599px){.mdc-layout-grid__cell{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px));box-sizing:border-box;margin:8px;margin:calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2)}@supports(display: grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4}}@supports(display: grid){.mdc-layout-grid__cell{margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-phone{width:calc(25% - 16px);width:calc(25% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-phone{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-phone{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-phone{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-phone{width:calc(75% - 16px);width:calc(75% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-phone{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-phone{width:auto;grid-column-end:span 4}}}.mdc-layout-grid__cell--order-1{order:1}.mdc-layout-grid__cell--order-2{order:2}.mdc-layout-grid__cell--order-3{order:3}.mdc-layout-grid__cell--order-4{order:4}.mdc-layout-grid__cell--order-5{order:5}.mdc-layout-grid__cell--order-6{order:6}.mdc-layout-grid__cell--order-7{order:7}.mdc-layout-grid__cell--order-8{order:8}.mdc-layout-grid__cell--order-9{order:9}.mdc-layout-grid__cell--order-10{order:10}.mdc-layout-grid__cell--order-11{order:11}.mdc-layout-grid__cell--order-12{order:12}.mdc-layout-grid__cell--align-top{align-self:flex-start}@supports(display: grid){.mdc-layout-grid__cell--align-top{align-self:start}}.mdc-layout-grid__cell--align-middle{align-self:center}.mdc-layout-grid__cell--align-bottom{align-self:flex-end}@supports(display: grid){.mdc-layout-grid__cell--align-bottom{align-self:end}}@media(min-width: 840px){.mdc-layout-grid--fixed-column-width{width:1176px;width:calc( var(--mdc-layout-grid-column-width-desktop, 72px) * 12 + var(--mdc-layout-grid-gutter-desktop, 24px) * 11 + var(--mdc-layout-grid-margin-desktop, 24px) * 2 )}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid--fixed-column-width{width:720px;width:calc( var(--mdc-layout-grid-column-width-tablet, 72px) * 8 + var(--mdc-layout-grid-gutter-tablet, 16px) * 7 + var(--mdc-layout-grid-margin-tablet, 16px) * 2 )}}@media(max-width: 599px){.mdc-layout-grid--fixed-column-width{width:368px;width:calc( var(--mdc-layout-grid-column-width-phone, 72px) * 4 + var(--mdc-layout-grid-gutter-phone, 16px) * 3 + var(--mdc-layout-grid-margin-phone, 16px) * 2 )}}.mdc-layout-grid--align-left{margin-right:auto;margin-left:0}.mdc-layout-grid--align-right{margin-right:0;margin-left:auto}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{border-bottom-width:1px;z-index:1}.mdc-line-ripple::after{-webkit-transform:scaleX(0);transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2}.mdc-line-ripple::after{transition:opacity 180ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 180ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-line-ripple--active::after{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(83.67142%);transform:translateX(83.67142%)}100%{-webkit-transform:translateX(200.611057%);transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(83.67142%);transform:translateX(83.67142%)}100%{-webkit-transform:translateX(200.611057%);transform:translateX(200.611057%)}}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-scale{0%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}36.65%{-webkit-animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}69.15%{-webkit-animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);-webkit-transform:scaleX(0.661479);transform:scaleX(0.661479)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}36.65%{-webkit-animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}69.15%{-webkit-animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);-webkit-transform:scaleX(0.661479);transform:scaleX(0.661479)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(37.651913%);transform:translateX(37.651913%)}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(84.386165%);transform:translateX(84.386165%)}100%{-webkit-transform:translateX(160.277782%);transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(37.651913%);transform:translateX(37.651913%)}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(84.386165%);transform:translateX(84.386165%)}100%{-webkit-transform:translateX(160.277782%);transform:translateX(160.277782%)}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{-webkit-animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}19.15%{-webkit-animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);-webkit-transform:scaleX(0.457104);transform:scaleX(0.457104)}44.15%{-webkit-animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);-webkit-transform:scaleX(0.72796);transform:scaleX(0.72796)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{-webkit-animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}19.15%{-webkit-animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);-webkit-transform:scaleX(0.457104);transform:scaleX(0.457104)}44.15%{-webkit-animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);-webkit-transform:scaleX(0.72796);transform:scaleX(0.72796)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@-webkit-keyframes mdc-linear-progress-buffering{from{-webkit-transform:rotate(180deg) translateX(-10px);transform:rotate(180deg) translateX(-10px)}}@keyframes mdc-linear-progress-buffering{from{-webkit-transform:rotate(180deg) translateX(-10px);transform:rotate(180deg) translateX(-10px)}}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(-83.67142%);transform:translateX(-83.67142%)}100%{-webkit-transform:translateX(-200.611057%);transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(-83.67142%);transform:translateX(-83.67142%)}100%{-webkit-transform:translateX(-200.611057%);transform:translateX(-200.611057%)}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(-37.651913%);transform:translateX(-37.651913%)}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(-84.386165%);transform:translateX(-84.386165%)}100%{-webkit-transform:translateX(-160.277782%);transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(-37.651913%);transform:translateX(-37.651913%)}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(-84.386165%);transform:translateX(-84.386165%)}100%{-webkit-transform:translateX(-160.277782%);transform:translateX(-160.277782%)}}@-webkit-keyframes mdc-linear-progress-buffering-reverse{from{-webkit-transform:translateX(-10px);transform:translateX(-10px)}}@keyframes mdc-linear-progress-buffering-reverse{from{-webkit-transform:translateX(-10px);transform:translateX(-10px)}}.mdc-linear-progress{position:relative;width:100%;height:4px;-webkit-transform:translateZ(0);transform:translateZ(0);outline:1px solid transparent;overflow:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__bar{position:absolute;width:100%;height:100%;-webkit-animation:none;animation:none;-webkit-transform-origin:top left;transform-origin:top left;transition:-webkit-transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;-webkit-animation:none;animation:none;border-top:4px solid}.mdc-linear-progress__buffer{display:flex;position:absolute;width:100%;height:100%}.mdc-linear-progress__buffer-dots{background-repeat:repeat-x;background-size:10px 4px;flex:auto;-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-animation:mdc-linear-progress-buffering 250ms infinite linear;animation:mdc-linear-progress-buffering 250ms infinite linear}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__primary-bar{-webkit-transform:scaleX(0);transform:scaleX(0)}.mdc-linear-progress__secondary-bar{visibility:hidden}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%;-webkit-animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear;animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear;animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;visibility:visible;-webkit-animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear;animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear;animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}.mdc-linear-progress--reversed .mdc-linear-progress__bar{right:0;-webkit-transform-origin:center right;transform-origin:center right}.mdc-linear-progress--reversed .mdc-linear-progress__primary-bar{-webkit-animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse;animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}.mdc-linear-progress--reversed .mdc-linear-progress__secondary-bar{-webkit-animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse;animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}.mdc-linear-progress--reversed .mdc-linear-progress__buffer-dots{-webkit-animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;order:0;-webkit-transform:rotate(0);transform:rotate(0)}.mdc-linear-progress--reversed .mdc-linear-progress__buffer-bar{order:1}.mdc-linear-progress--closed{opacity:0;-webkit-animation:none;animation:none}.mdc-linear-progress__bar-inner{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-linear-progress__buffer-dots{background-image:url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E")}.mdc-linear-progress__buffer-bar{background-color:#e6e6e6}.mdc-linear-progress--indeterminate.mdc-linear-progress--reversed .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress--indeterminate.mdc-linear-progress--reversed .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}.mdc-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}.mdc-list:focus{outline:none}.mdc-list-item{height:48px}.mdc-list-item__secondary-text{color:rgba(0,0,0,.54);color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54))}.mdc-list-item__graphic{background-color:transparent}.mdc-list-item__graphic{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38))}.mdc-list-item__meta{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38))}.mdc-list-group__subheader{color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}.mdc-list-item--disabled .mdc-list-item__text{opacity:.38}.mdc-list-item--disabled .mdc-list-item__text,.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-list--dense{padding-top:4px;padding-bottom:4px;font-size:.812rem}.mdc-list-item{display:flex;position:relative;align-items:center;justify-content:flex-start;padding:0 16px;overflow:hidden}.mdc-list-item:focus{outline:none}.mdc-list-item--selected,.mdc-list-item--activated{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-list-item--selected .mdc-list-item__graphic,.mdc-list-item--activated .mdc-list-item__graphic{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-list-item__graphic{margin-left:0;margin-right:32px;width:24px;height:24px;flex-shrink:0;align-items:center;justify-content:center;fill:currentColor}.mdc-list-item[dir=rtl] .mdc-list-item__graphic,[dir=rtl] .mdc-list-item .mdc-list-item__graphic{margin-left:32px;margin-right:0}.mdc-list .mdc-list-item__graphic{display:inline-flex}.mdc-list-item__meta{margin-left:auto;margin-right:0}.mdc-list-item__meta:not(.material-icons){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}.mdc-list-item[dir=rtl] .mdc-list-item__meta,[dir=rtl] .mdc-list-item .mdc-list-item__meta{margin-left:0;margin-right:auto}.mdc-list-item__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-list-item__text[for]{pointer-events:none}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list--dense .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list--dense .mdc-list-item__primary-text::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-list--dense .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list--dense .mdc-list-item__secondary-text{font-size:inherit}.mdc-list--dense .mdc-list-item{height:40px}.mdc-list--dense .mdc-list-item__graphic{margin-left:0;margin-right:36px;width:20px;height:20px}.mdc-list-item[dir=rtl] .mdc-list--dense .mdc-list-item__graphic,[dir=rtl] .mdc-list-item .mdc-list--dense .mdc-list-item__graphic{margin-left:36px;margin-right:0}.mdc-list--avatar-list .mdc-list-item{height:56px}.mdc-list--avatar-list .mdc-list-item__graphic{margin-left:0;margin-right:16px;width:40px;height:40px;border-radius:50%}.mdc-list-item[dir=rtl] .mdc-list--avatar-list .mdc-list-item__graphic,[dir=rtl] .mdc-list-item .mdc-list--avatar-list .mdc-list-item__graphic{margin-left:16px;margin-right:0}.mdc-list--two-line .mdc-list-item__text{align-self:flex-start}.mdc-list--two-line .mdc-list-item{height:72px}.mdc-list--two-line.mdc-list--dense .mdc-list-item,.mdc-list--avatar-list.mdc-list--dense .mdc-list-item{height:60px}.mdc-list--avatar-list.mdc-list--dense .mdc-list-item__graphic{margin-left:0;margin-right:20px;width:36px;height:36px}.mdc-list-item[dir=rtl] .mdc-list--avatar-list.mdc-list--dense .mdc-list-item__graphic,[dir=rtl] .mdc-list-item .mdc-list--avatar-list.mdc-list--dense .mdc-list-item__graphic{margin-left:20px;margin-right:0}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item{cursor:pointer}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-divider{height:0;margin:0;border:none;border-bottom-width:1px;border-bottom-style:solid}.mdc-list-divider{border-bottom-color:rgba(0,0,0,.12)}.mdc-list-divider--padded{margin:0 16px}.mdc-list-divider--inset{margin-left:72px;margin-right:0;width:calc(100% - 72px)}.mdc-list-group[dir=rtl] .mdc-list-divider--inset,[dir=rtl] .mdc-list-group .mdc-list-divider--inset{margin-left:0;margin-right:72px}.mdc-list-divider--inset.mdc-list-divider--padded{width:calc(100% - 72px - 16px)}.mdc-list-group .mdc-list{padding:0}.mdc-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);margin:calc((3rem - 1.5rem) / 2) 16px}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item::after{background-color:#000}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item:hover::before{opacity:.04}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--background-focused::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated::before{opacity:.12}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated:hover::before{opacity:.16}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded--background-focused::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.24}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.24}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.24}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected::before{opacity:.08}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected:hover::before{opacity:.12}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded--background-focused::before,:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.2}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.2}:not(.mdc-list--non-interactive)>:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.2}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled::before,:not(.mdc-list--non-interactive)>.mdc-list-item--disabled::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled::before,:not(.mdc-list--non-interactive)>.mdc-list-item--disabled::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled::before,:not(.mdc-list--non-interactive)>.mdc-list-item--disabled::after{background-color:#000}:not(.mdc-list--non-interactive)>.mdc-list-item--disabled.mdc-ripple-upgraded--background-focused::before,:not(.mdc-list--non-interactive)>.mdc-list-item--disabled:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-menu{min-width:112px}.mdc-menu .mdc-list-item__meta{color:rgba(0,0,0,.87)}.mdc-menu .mdc-list-item__graphic{color:rgba(0,0,0,.87)}.mdc-menu .mdc-list{color:rgba(0,0,0,.87);position:relative}.mdc-menu .mdc-list .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-menu .mdc-list-divider{margin:8px 0}.mdc-menu .mdc-list-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdc-menu .mdc-list-item--disabled{cursor:auto}.mdc-menu a.mdc-list-item .mdc-list-item__text,.mdc-menu a.mdc-list-item .mdc-list-item__graphic{pointer-events:none}.mdc-menu__selection-group{padding:0;fill:currentColor}.mdc-menu__selection-group .mdc-list-item{padding-left:56px;padding-right:16px}[dir=rtl] .mdc-menu__selection-group .mdc-list-item,.mdc-menu__selection-group .mdc-list-item[dir=rtl]{padding-left:16px;padding-right:56px}.mdc-menu__selection-group .mdc-menu__selection-group-icon{left:16px;right:initial;display:none;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}[dir=rtl] .mdc-menu__selection-group .mdc-menu__selection-group-icon,.mdc-menu__selection-group .mdc-menu__selection-group-icon[dir=rtl]{left:initial;right:16px}.mdc-menu-item--selected .mdc-menu__selection-group-icon{display:inline}.mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);margin:0;padding:0;-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:top left;transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;transition:opacity .03s linear,-webkit-transform .12s cubic-bezier(0, 0, 0.2, 1);transition:opacity .03s linear,transform .12s cubic-bezier(0, 0, 0.2, 1);transition:opacity .03s linear,transform .12s cubic-bezier(0, 0, 0.2, 1),-webkit-transform .12s cubic-bezier(0, 0, 0.2, 1);box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface, #fff);color:#000;color:var(--mdc-theme-on-surface, #000);border-radius:4px;transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--open{display:inline-block;-webkit-transform:scale(1);transform:scale(1);opacity:1}.mdc-menu-surface--animating-open{display:inline-block;-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0;transition:opacity .075s linear}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px * 2)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(100% / .75)}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{padding:0}.mdc-radio{padding:10px;display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color}.mdc-radio .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.54)}.mdc-radio .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-radio .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.38)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.38)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:rgba(0,0,0,.38)}.mdc-radio .mdc-radio__background::before{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-radio .mdc-radio__background::before{top:-10px;left:-10px;width:40px;height:40px}.mdc-radio .mdc-radio__native-control{top:0px;right:0px;left:0px;width:40px;height:40px}.mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mdc-radio__background::before{position:absolute;-webkit-transform:scale(0, 0);transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:"";transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;-webkit-transform:scale(0, 0);transform:scale(0, 0);border-width:10px;border-style:solid;border-radius:50%;transition:border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.mdc-radio--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-radio--touch .mdc-radio__native-control{top:-4px;right:-4px;left:-4px;width:48px;height:48px}.mdc-radio__native-control:checked+.mdc-radio__background,.mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__outer-circle{transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio--disabled{cursor:default;pointer-events:none}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle{-webkit-transform:scale(0.5);transform:scale(0.5);transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:disabled+.mdc-radio__background,[aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background{cursor:default}.mdc-radio__native-control:focus+.mdc-radio__background::before{-webkit-transform:scale(1);transform:scale(1);opacity:.12;transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-radio .mdc-radio__ripple::before,.mdc-radio .mdc-radio__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-radio .mdc-radio__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-radio.mdc-ripple-upgraded--unbounded .mdc-radio__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-radio.mdc-ripple-upgraded--foreground-activation .mdc-radio__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-radio.mdc-ripple-upgraded--foreground-deactivation .mdc-radio__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-radio .mdc-radio__ripple::before,.mdc-radio .mdc-radio__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before,.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-radio .mdc-radio__ripple::before,.mdc-radio .mdc-radio__ripple::after{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-radio:hover .mdc-radio__ripple::before{opacity:.04}.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__ripple::before,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__ripple::before{transition-duration:75ms;opacity:.12}.mdc-radio:not(.mdc-ripple-upgraded) .mdc-radio__ripple::after{transition:opacity 150ms linear}.mdc-radio:not(.mdc-ripple-upgraded):active .mdc-radio__ripple::after{transition-duration:75ms;opacity:.12}.mdc-radio.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__background::before{content:none}.mdc-radio__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-ripple-surface{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative;outline:none;overflow:hidden}.mdc-ripple-surface::before,.mdc-ripple-surface::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-ripple-surface::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-ripple-surface.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-ripple-surface.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface::before,.mdc-ripple-surface::after{background-color:#000}.mdc-ripple-surface:hover::before{opacity:.04}.mdc-ripple-surface.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-ripple-surface:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-ripple-surface.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-ripple-surface::before,.mdc-ripple-surface::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-ripple-surface.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded]{overflow:visible}.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface--primary::before,.mdc-ripple-surface--primary::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-ripple-surface--primary:hover::before{opacity:.04}.mdc-ripple-surface--primary.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-ripple-surface--primary.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-ripple-surface--accent::before,.mdc-ripple-surface--accent::after{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-ripple-surface--accent:hover::before{opacity:.04}.mdc-ripple-surface--accent.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-ripple-surface--accent.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-select-helper-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin:0;opacity:0;will-change:opacity;transition:opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-select-helper-text::before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}.mdc-select-helper-text--persistent{transition:none;opacity:1;will-change:initial}.mdc-select--with-leading-icon .mdc-select__icon{display:inline-block;box-sizing:border-box;width:24px;height:24px;border:none;opacity:.54;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;flex-shrink:0;align-self:center;background-color:transparent;fill:currentColor}.mdc-select--with-leading-icon .mdc-select__icon{margin-left:12px;margin-right:12px}[dir=rtl] .mdc-select--with-leading-icon .mdc-select__icon,.mdc-select--with-leading-icon .mdc-select__icon[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-select--with-leading-icon:not(.mdc-select--disabled) .mdc-select__icon{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-select__icon:not([tabindex]),.mdc-select__icon[tabindex="-1"]{cursor:default;pointer-events:none}.mdc-select__anchor{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-select__anchor .mdc-select__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-select__anchor.mdc-ripple-upgraded--unbounded .mdc-select__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-select__anchor.mdc-ripple-upgraded--foreground-activation .mdc-select__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-select__anchor.mdc-ripple-upgraded--foreground-deactivation .mdc-select__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{background-color:rgba(0,0,0,.87)}.mdc-select__anchor:hover .mdc-select__ripple::before{opacity:.04}.mdc-select__anchor.mdc-ripple-upgraded--background-focused .mdc-select__ripple::before,.mdc-select__anchor:not(.mdc-ripple-upgraded):focus .mdc-select__ripple::before{transition-duration:75ms;opacity:.12}.mdc-select__anchor .mdc-select__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-select__menu .mdc-list .mdc-list-item--selected::before,.mdc-select__menu .mdc-list .mdc-list-item--selected::after{background-color:#000;background-color:var(--mdc-theme-on-surface, #000)}.mdc-select__menu .mdc-list .mdc-list-item--selected:hover::before{opacity:.04}.mdc-select__menu .mdc-list .mdc-list-item--selected.mdc-ripple-upgraded--background-focused::before,.mdc-select__menu .mdc-list .mdc-list-item--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-select__menu .mdc-list .mdc-list-item--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-select__menu .mdc-list .mdc-list-item--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-select__menu .mdc-list .mdc-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-select{position:relative}.mdc-select:not(.mdc-select--disabled) .mdc-select__anchor{background-color:#f5f5f5}.mdc-select:not(.mdc-select--disabled) .mdc-select__selected-text{color:rgba(0,0,0,.87)}.mdc-select:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select:not(.mdc-select--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.42)}.mdc-select:not(.mdc-select--disabled) .mdc-select__anchor+.mdc-select-helper-text{color:rgba(0,0,0,.6)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-line-ripple::after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary, #6200ee)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:rgba(98,0,238,.87)}.mdc-select:not(.mdc-select--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.87)}.mdc-select .mdc-floating-label{left:16px;right:initial;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none}[dir=rtl] .mdc-select .mdc-floating-label,.mdc-select .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-select.mdc-select--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-select.mdc-select--outlined .mdc-floating-label,.mdc-select.mdc-select--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-select .mdc-select__anchor{border-radius:4px 4px 0 0}.mdc-select .mdc-select__anchor{padding-left:16px;padding-right:0}[dir=rtl] .mdc-select .mdc-select__anchor,.mdc-select .mdc-select__anchor[dir=rtl]{padding-left:0;padding-right:16px}.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor{padding-left:0;padding-right:0}[dir=rtl] .mdc-select.mdc-select--with-leading-icon .mdc-select__anchor,.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor[dir=rtl]{padding-left:0;padding-right:0}.mdc-select__dropdown-icon{background:url("data:image/svg+xml,%3Csvg%20width%3D%2210px%22%20height%3D%225px%22%20viewBox%3D%227%2010%2010%205%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%0A%20%20%20%20%3Cpolygon%20id%3D%22Shape%22%20stroke%3D%22none%22%20fill%3D%22%23000%22%20fill-rule%3D%22evenodd%22%20opacity%3D%220.54%22%20points%3D%227%2010%2012%2015%2017%2010%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E") no-repeat center;margin-left:12px;margin-right:12px;width:24px;height:24px;align-self:center;flex-shrink:0;pointer-events:none;transition:-webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-select__dropdown-icon,.mdc-select__dropdown-icon[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-select--focused .mdc-select__dropdown-icon{background:url("data:image/svg+xml,%3Csvg%20width%3D%2210px%22%20height%3D%225px%22%20viewBox%3D%227%2010%2010%205%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%0A%20%20%20%20%3Cpolygon%20id%3D%22Shape%22%20stroke%3D%22none%22%20fill%3D%22%236200ee%22%20fill-rule%3D%22evenodd%22%20opacity%3D%221%22%20points%3D%227%2010%2012%2015%2017%2010%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E") no-repeat center}.mdc-select--activated .mdc-select__dropdown-icon{-webkit-transform:rotate(180deg) translateY(-5px);transform:rotate(180deg) translateY(-5px);transition:-webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-select__anchor{height:56px;display:inline-flex;align-items:baseline;display:inline-flex;position:relative;box-sizing:border-box;overflow:hidden;outline:none;cursor:pointer;min-width:200px}.mdc-select__anchor::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text,.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text{height:100%}.mdc-select--outlined .mdc-select__anchor::before,.mdc-select--no-label .mdc-select__anchor::before{display:none}.mdc-select__anchor .mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75)}.mdc-select__anchor.mdc-select--focused .mdc-line-ripple::after{-webkit-transform:scale(1, 2);transform:scale(1, 2);opacity:1}.mdc-select__anchor+.mdc-select-helper-text{margin-right:16px;margin-left:16px}.mdc-select--focused .mdc-select__anchor+.mdc-select-helper-text:not(.mdc-select-helper-text--validation-msg){opacity:1}.mdc-select__selected-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);box-sizing:border-box;width:0;flex-grow:1;height:28px;border:none;outline:none;padding:0;white-space:nowrap;-webkit-appearance:none;-moz-appearance:none;appearance:none;pointer-events:none;text-overflow:ellipsis;background-color:transparent;color:inherit}.mdc-select__selected-text::-ms-expand{display:none}.mdc-select__selected-text::-ms-value{background-color:transparent;color:inherit}.mdc-select--outlined{border:none}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-select__anchor{background-color:transparent}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.38)}.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.87)}.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px}.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-radius:4px 0 0 4px}[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-radius:0 4px 4px 0}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-radius:0 4px 4px 0}[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-radius:4px 0 0 4px}.mdc-select--outlined .mdc-select__selected-text{border-radius:4px}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-select__anchor{background-color:transparent}.mdc-select--outlined .mdc-select__anchor{overflow:visible}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined 250ms 1}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) scale(1);transform:translateY(-37.25px) scale(1)}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) scale(0.75);transform:translateY(-34.75px) scale(0.75)}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-select--outlined .mdc-select__selected-text{display:flex;border:none;z-index:1;background-color:transparent}.mdc-select--outlined .mdc-select__icon{z-index:2}.mdc-select--outlined .mdc-floating-label{line-height:1.15rem;pointer-events:auto}.mdc-select--outlined.mdc-select--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-line-ripple::after{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#b00020}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--invalid .mdc-select__anchor+.mdc-select-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled):hover .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px}.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--invalid.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid .mdc-select__dropdown-icon{background:url("data:image/svg+xml,%3Csvg%20width%3D%2210px%22%20height%3D%225px%22%20viewBox%3D%227%2010%2010%205%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%0A%20%20%20%20%3Cpolygon%20id%3D%22Shape%22%20stroke%3D%22none%22%20fill%3D%22%23b00020%22%20fill-rule%3D%22evenodd%22%20opacity%3D%221%22%20points%3D%227%2010%2012%2015%2017%2010%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E") no-repeat center}.mdc-select--invalid+.mdc-select-helper-text--validation-msg{opacity:1}.mdc-select--required .mdc-floating-label::after{content:"*"}.mdc-select--disabled{cursor:default;pointer-events:none}.mdc-select--disabled .mdc-select__anchor{background-color:#fafafa}.mdc-select--disabled .mdc-floating-label{color:rgba(0,0,0,.38)}.mdc-select--disabled .mdc-select__dropdown-icon{background:url("data:image/svg+xml,%3Csvg%20width%3D%2210px%22%20height%3D%225px%22%20viewBox%3D%227%2010%2010%205%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%0A%20%20%20%20%3Cpolygon%20id%3D%22Shape%22%20stroke%3D%22none%22%20fill%3D%22%23000%22%20fill-rule%3D%22evenodd%22%20opacity%3D%220.38%22%20points%3D%227%2010%2012%2015%2017%2010%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E") no-repeat center}.mdc-select--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.38)}.mdc-select--disabled .mdc-line-ripple::before{border-bottom-style:dotted}.mdc-select--disabled .mdc-select__icon{color:rgba(0,0,0,.38)}.mdc-select--disabled .mdc-select__selected-text{color:rgba(0,0,0,.38);pointer-events:none}.mdc-select--disabled.mdc-select--outlined .mdc-select__anchor{background-color:transparent}.mdc-select--disabled.mdc-select--outlined .mdc-notched-outline__leading,.mdc-select--disabled.mdc-select--outlined .mdc-notched-outline__notch,.mdc-select--disabled.mdc-select--outlined .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.16)}.mdc-select--with-leading-icon .mdc-floating-label{left:48px;right:initial}[dir=rtl] .mdc-select--with-leading-icon .mdc-floating-label,.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label,.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--float-above{left:36px;right:initial}[dir=rtl] .mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--float-above,.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--float-above[dir=rtl]{left:initial;right:36px}.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) translateX(-32px) scale(1);transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--float-above,.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-37.25px) translateX(32px) scale(1);transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--with-leading-icon.mdc-select--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--with-leading-icon.mdc-select--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) translateX(-32px) scale(0.75);transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-select--with-leading-icon.mdc-select--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--with-leading-icon.mdc-select--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-select--with-leading-icon.mdc-select--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--with-leading-icon.mdc-select--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-34.75px) translateX(32px) scale(0.75);transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-select--with-leading-icon.mdc-select--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--with-leading-icon.mdc-select--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon 250ms 1}[dir=rtl] .mdc-select--with-leading-icon.mdc-select--outlined .mdc-floating-label--shake,.mdc-select--with-leading-icon.mdc-select--outlined[dir=rtl] .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-rtl 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-rtl 250ms 1}.mdc-select--with-leading-icon.mdc-select__menu .mdc-list-item__text{padding-left:32px;padding-right:32px}[dir=rtl] .mdc-select--with-leading-icon.mdc-select__menu .mdc-list-item__text,.mdc-select--with-leading-icon.mdc-select__menu .mdc-list-item__text[dir=rtl]{padding-left:32px;padding-right:32px}.mdc-select__menu .mdc-list .mdc-list-item--selected{color:#000;color:var(--mdc-theme-on-surface, #000)}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}@-webkit-keyframes mdc-slider-emphasize{0%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(0.85);transform:scale(0.85)}100%{-webkit-transform:scale(0.571);transform:scale(0.571)}}@keyframes mdc-slider-emphasize{0%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(0.85);transform:scale(0.85)}100%{-webkit-transform:scale(0.571);transform:scale(0.571)}}.mdc-slider{position:relative;width:100%;height:48px;cursor:pointer;touch-action:pan-x;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-slider:not(.mdc-slider--disabled) .mdc-slider__track{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-slider:not(.mdc-slider--disabled) .mdc-slider__track-container::after{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786);opacity:.26}.mdc-slider:not(.mdc-slider--disabled) .mdc-slider__track-marker-container{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-slider:not(.mdc-slider--disabled) .mdc-slider__thumb{fill:#018786;fill:var(--mdc-theme-secondary, #018786);stroke:#018786;stroke:var(--mdc-theme-secondary, #018786)}.mdc-slider:not(.mdc-slider--disabled) .mdc-slider__focus-ring{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-slider:not(.mdc-slider--disabled) .mdc-slider__pin{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-slider:not(.mdc-slider--disabled) .mdc-slider__pin{color:#fff;color:var(--mdc-theme-text-primary-on-dark, white)}.mdc-slider--disabled{cursor:auto}.mdc-slider--disabled .mdc-slider__track{background-color:#9a9a9a}.mdc-slider--disabled .mdc-slider__track-container::after{background-color:#9a9a9a;opacity:.26}.mdc-slider--disabled .mdc-slider__track-marker-container{background-color:#9a9a9a}.mdc-slider--disabled .mdc-slider__thumb{fill:#9a9a9a;stroke:#9a9a9a}.mdc-slider--disabled .mdc-slider__thumb{stroke:#fff;stroke:var(--mdc-slider-bg-color-behind-component, white)}.mdc-slider:focus{outline:none}.mdc-slider__track-container{position:absolute;top:50%;width:100%;height:2px;overflow:hidden}.mdc-slider__track-container::after{position:absolute;top:0;left:0;display:block;width:100%;height:100%;content:""}.mdc-slider__track{position:absolute;width:100%;height:100%;-webkit-transform-origin:left top;transform-origin:left top;will-change:transform}.mdc-slider[dir=rtl] .mdc-slider__track,[dir=rtl] .mdc-slider .mdc-slider__track{-webkit-transform-origin:right top;transform-origin:right top}.mdc-slider__track-marker-container{display:flex;margin-right:0;margin-left:-1px;visibility:hidden}.mdc-slider[dir=rtl] .mdc-slider__track-marker-container,[dir=rtl] .mdc-slider .mdc-slider__track-marker-container{margin-right:-1px;margin-left:0}.mdc-slider__track-marker-container::after{display:block;width:2px;height:2px;content:""}.mdc-slider__track-marker{flex:1}.mdc-slider__track-marker::after{display:block;width:2px;height:2px;content:""}.mdc-slider__track-marker:first-child::after{width:3px}.mdc-slider__thumb-container{position:absolute;top:15px;left:0;width:21px;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:transform}.mdc-slider__thumb{position:absolute;top:0;left:0;-webkit-transform:scale(0.571);transform:scale(0.571);stroke-width:3.5;transition:fill 100ms ease-out,stroke 100ms ease-out,-webkit-transform 100ms ease-out;transition:transform 100ms ease-out,fill 100ms ease-out,stroke 100ms ease-out;transition:transform 100ms ease-out,fill 100ms ease-out,stroke 100ms ease-out,-webkit-transform 100ms ease-out}.mdc-slider__focus-ring{width:21px;height:21px;border-radius:50%;opacity:0;transition:opacity 266.67ms ease-out,background-color 266.67ms ease-out,-webkit-transform 266.67ms ease-out;transition:transform 266.67ms ease-out,opacity 266.67ms ease-out,background-color 266.67ms ease-out;transition:transform 266.67ms ease-out,opacity 266.67ms ease-out,background-color 266.67ms ease-out,-webkit-transform 266.67ms ease-out}.mdc-slider__pin{display:flex;position:absolute;top:0;left:0;align-items:center;justify-content:center;width:26px;height:26px;margin-top:-2px;margin-left:-2px;-webkit-transform:rotate(-45deg) scale(0) translate(0, 0);transform:rotate(-45deg) scale(0) translate(0, 0);border-radius:50% 50% 50% 0%;z-index:1;transition:-webkit-transform 100ms ease-out;transition:transform 100ms ease-out;transition:transform 100ms ease-out, -webkit-transform 100ms ease-out}.mdc-slider__pin-value-marker{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.mdc-slider--active .mdc-slider__thumb{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}.mdc-slider--focus .mdc-slider__thumb{-webkit-animation:mdc-slider-emphasize 266.67ms linear;animation:mdc-slider-emphasize 266.67ms linear}.mdc-slider--focus .mdc-slider__focus-ring{-webkit-transform:scale3d(1.55, 1.55, 1.55);transform:scale3d(1.55, 1.55, 1.55);opacity:.25}.mdc-slider--in-transit .mdc-slider__thumb{transition-delay:140ms}.mdc-slider--in-transit .mdc-slider__thumb-container,.mdc-slider--in-transit .mdc-slider__track,.mdc-slider:focus:not(.mdc-slider--active) .mdc-slider__thumb-container,.mdc-slider:focus:not(.mdc-slider--active) .mdc-slider__track{transition:-webkit-transform 80ms ease;transition:transform 80ms ease;transition:transform 80ms ease, -webkit-transform 80ms ease}.mdc-slider--discrete.mdc-slider--active .mdc-slider__thumb{-webkit-transform:scale(calc(12 / 21));transform:scale(calc(12 / 21))}.mdc-slider--discrete.mdc-slider--active .mdc-slider__pin{-webkit-transform:rotate(-45deg) scale(1) translate(19px, -20px);transform:rotate(-45deg) scale(1) translate(19px, -20px)}.mdc-slider--discrete.mdc-slider--focus .mdc-slider__thumb{-webkit-animation:none;animation:none}.mdc-slider--discrete.mdc-slider--display-markers .mdc-slider__track-marker-container{visibility:visible}.mdc-snackbar{z-index:8;margin:8px;display:none;position:fixed;right:0;bottom:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;pointer-events:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-snackbar__surface{background-color:#333}.mdc-snackbar__label{color:rgba(255,255,255,.87)}.mdc-snackbar__surface{min-width:344px}@media(max-width: 480px),(max-width: 344px){.mdc-snackbar__surface{min-width:100%}}.mdc-snackbar__surface{max-width:672px}.mdc-snackbar__surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0,0,0,.12)}.mdc-snackbar__surface{border-radius:4px}.mdc-snackbar--opening,.mdc-snackbar--open,.mdc-snackbar--closing{display:flex}.mdc-snackbar--leading{justify-content:flex-start}.mdc-snackbar--stacked .mdc-snackbar__label{padding-left:16px;padding-right:0;padding-bottom:12px}[dir=rtl] .mdc-snackbar--stacked .mdc-snackbar__label,.mdc-snackbar--stacked .mdc-snackbar__label[dir=rtl]{padding-left:0;padding-right:16px}.mdc-snackbar--stacked .mdc-snackbar__surface{flex-direction:column;align-items:flex-start}.mdc-snackbar--stacked .mdc-snackbar__actions{align-self:flex-end;margin-bottom:8px}.mdc-snackbar__surface{padding-left:0;padding-right:8px;display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0}[dir=rtl] .mdc-snackbar__surface,.mdc-snackbar__surface[dir=rtl]{padding-left:8px;padding-right:0}.mdc-snackbar--open .mdc-snackbar__surface{-webkit-transform:scale(1);transform:scale(1);opacity:1;pointer-events:auto;transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-snackbar--closing .mdc-snackbar__surface{-webkit-transform:scale(1);transform:scale(1);transition:opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-snackbar__label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);padding-left:16px;padding-right:8px;width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding-top:14px;padding-bottom:14px}[dir=rtl] .mdc-snackbar__label,.mdc-snackbar__label[dir=rtl]{padding-left:8px;padding-right:16px}.mdc-snackbar__label::before{display:inline;content:attr(data-mdc-snackbar-label-text)}.mdc-snackbar__actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mdc-snackbar__action:not(:disabled){color:#bb86fc}.mdc-snackbar__action::before,.mdc-snackbar__action::after{background-color:#bb86fc}.mdc-snackbar__action:hover::before{opacity:.08}.mdc-snackbar__action.mdc-ripple-upgraded--background-focused::before,.mdc-snackbar__action:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.24}.mdc-snackbar__action:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-snackbar__action:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.24}.mdc-snackbar__action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.24}.mdc-snackbar__dismiss{color:rgba(255,255,255,.87)}.mdc-snackbar__dismiss::before,.mdc-snackbar__dismiss::after{background-color:rgba(255,255,255,.87)}.mdc-snackbar__dismiss:hover::before{opacity:.08}.mdc-snackbar__dismiss.mdc-ripple-upgraded--background-focused::before,.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.24}.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.24}.mdc-snackbar__dismiss.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.24}.mdc-snackbar__dismiss.mdc-snackbar__dismiss{width:36px;height:36px;padding:9px;font-size:18px}.mdc-snackbar__dismiss.mdc-snackbar__dismiss svg,.mdc-snackbar__dismiss.mdc-snackbar__dismiss img{width:18px;height:18px}.mdc-snackbar__action+.mdc-snackbar__dismiss{margin-left:8px;margin-right:0}[dir=rtl] .mdc-snackbar__action+.mdc-snackbar__dismiss,.mdc-snackbar__action+.mdc-snackbar__dismiss[dir=rtl]{margin-left:0;margin-right:8px}.mdc-switch__thumb-underlay{left:-18px;right:initial;top:-17px;width:48px;height:48px}[dir=rtl] .mdc-switch__thumb-underlay,.mdc-switch__thumb-underlay[dir=rtl]{left:initial;right:-18px}.mdc-switch__native-control{width:68px;height:48px}.mdc-switch{display:inline-block;position:relative;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdc-switch.mdc-switch--checked .mdc-switch__track{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-switch.mdc-switch--checked .mdc-switch__thumb{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786);border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__track{background-color:#000;background-color:var(--mdc-theme-on-surface, #000)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);border-color:#fff;border-color:var(--mdc-theme-surface, #fff)}.mdc-switch__native-control{left:0;right:initial;position:absolute;top:0;margin:0;opacity:0;cursor:pointer;pointer-events:auto;transition:-webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-switch__native-control,.mdc-switch__native-control[dir=rtl]{left:initial;right:0}.mdc-switch__track{box-sizing:border-box;width:32px;height:14px;border:1px solid transparent;border-radius:7px;opacity:.38;transition:opacity 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-switch__thumb-underlay{display:flex;position:absolute;align-items:center;justify-content:center;-webkit-transform:translateX(0);transform:translateX(0);transition:background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-switch__thumb{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12);box-sizing:border-box;width:20px;height:20px;border:10px solid;border-radius:50%;pointer-events:none;z-index:1}.mdc-switch--checked .mdc-switch__track{opacity:.54}.mdc-switch--checked .mdc-switch__thumb-underlay{-webkit-transform:translateX(20px);transform:translateX(20px)}[dir=rtl] .mdc-switch--checked .mdc-switch__thumb-underlay,.mdc-switch--checked .mdc-switch__thumb-underlay[dir=rtl]{-webkit-transform:translateX(-20px);transform:translateX(-20px)}.mdc-switch--checked .mdc-switch__native-control{-webkit-transform:translateX(-20px);transform:translateX(-20px)}[dir=rtl] .mdc-switch--checked .mdc-switch__native-control,.mdc-switch--checked .mdc-switch__native-control[dir=rtl]{-webkit-transform:translateX(20px);transform:translateX(20px)}.mdc-switch--disabled{opacity:.38;pointer-events:none}.mdc-switch--disabled .mdc-switch__thumb{border-width:1px}.mdc-switch--disabled .mdc-switch__native-control{cursor:default;pointer-events:none}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay::before,.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay::after{background-color:#9e9e9e}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:hover::before{opacity:.08}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-upgraded--background-focused::before,.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.24}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.24}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.24}.mdc-switch__thumb-underlay{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-switch__thumb-underlay::before,.mdc-switch__thumb-underlay::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-switch__thumb-underlay::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-switch__thumb-underlay::before,.mdc-switch__thumb-underlay::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::before,.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-switch__thumb-underlay::before,.mdc-switch__thumb-underlay::after{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-switch__thumb-underlay:hover::before{opacity:.04}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--background-focused::before,.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-switch__thumb-underlay.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-tab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);padding-right:24px;padding-left:24px;position:relative;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;margin:0;padding-top:0;padding-bottom:0;border:none;outline:none;background:none;text-align:center;white-space:nowrap;cursor:pointer;-webkit-appearance:none;z-index:1}.mdc-tab .mdc-tab__text-label{color:rgba(0,0,0,.6)}.mdc-tab .mdc-tab__icon{color:rgba(0,0,0,.54);fill:currentColor}.mdc-tab::-moz-focus-inner{padding:0;border:0}.mdc-tab--min-width{flex:0 1 auto}.mdc-tab__content{position:relative;display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab__icon{transition:150ms color linear;width:24px;height:24px;font-size:24px;z-index:2}.mdc-tab--stacked .mdc-tab__content{flex-direction:column;align-items:center;justify-content:center}.mdc-tab--stacked .mdc-tab__text-label{padding-top:6px;padding-bottom:4px}.mdc-tab--active .mdc-tab__text-label{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-tab--active .mdc-tab__icon{color:#6200ee;color:var(--mdc-theme-primary, #6200ee);fill:currentColor}.mdc-tab--active .mdc-tab__text-label,.mdc-tab--active .mdc-tab__icon{transition-delay:100ms}.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label{padding-left:8px;padding-right:0}[dir=rtl] .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label,.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label[dir=rtl]{padding-left:0;padding-right:8px}.mdc-tab__ripple{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.mdc-tab__ripple::before,.mdc-tab__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-tab__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-tab__ripple.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-tab__ripple.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-tab__ripple.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-tab__ripple.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-tab__ripple.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-tab__ripple::before,.mdc-tab__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-tab__ripple.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-tab__ripple::before,.mdc-tab__ripple::after{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-tab__ripple:hover::before{opacity:.04}.mdc-tab__ripple.mdc-ripple-upgraded--background-focused::before,.mdc-tab__ripple:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.12}.mdc-tab__ripple:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-tab__ripple:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.12}.mdc-tab__ripple.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.12}.mdc-tab-bar{width:100%}.mdc-tab{height:48px}.mdc-tab--stacked{height:72px}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator .mdc-tab-indicator__content--underline{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-tab-indicator .mdc-tab-indicator__content--icon{color:#018786;color:var(--mdc-theme-secondary, #018786)}.mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:2px}.mdc-tab-indicator .mdc-tab-indicator__content--icon{height:34px;font-size:34px}.mdc-tab-indicator__content{-webkit-transform-origin:left;transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator__content--icon{align-self:center;margin:0 auto}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}.mdc-tab-indicator .mdc-tab-indicator__content{transition:250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1), 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1)}.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition:150ms opacity linear}.mdc-tab-indicator--active.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition-delay:100ms}.mdc-tab-scroller{overflow-y:hidden}.mdc-tab-scroller.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-content{transition:250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1), 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1)}.mdc-tab-scroller__test{position:absolute;top:-9999px;width:100px;height:100px;overflow-x:scroll}.mdc-tab-scroller__scroll-area{-webkit-overflow-scrolling:touch;display:flex;overflow-x:hidden}.mdc-tab-scroller__scroll-area::-webkit-scrollbar,.mdc-tab-scroller__test::-webkit-scrollbar{display:none}.mdc-tab-scroller__scroll-area--scroll{overflow-x:scroll}.mdc-tab-scroller__scroll-content{position:relative;display:flex;flex:1 0 auto;-webkit-transform:none;transform:none;will-change:transform}.mdc-tab-scroller--align-start .mdc-tab-scroller__scroll-content{justify-content:flex-start}.mdc-tab-scroller--align-end .mdc-tab-scroller__scroll-content{justify-content:flex-end}.mdc-tab-scroller--align-center .mdc-tab-scroller__scroll-content{justify-content:center}.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-area{-webkit-overflow-scrolling:auto}.mdc-text-field-helper-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin:0;opacity:0;will-change:opacity;transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-text-field-helper-text::before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}.mdc-text-field-helper-text--persistent{transition:none;opacity:1;will-change:initial}.mdc-text-field-character-counter{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin-left:auto;margin-right:0;padding-left:16px;padding-right:0;white-space:nowrap}.mdc-text-field-character-counter::before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field__icon{align-self:center;cursor:pointer}.mdc-text-field__icon:not([tabindex]),.mdc-text-field__icon[tabindex="-1"]{cursor:default;pointer-events:none}.mdc-text-field__icon--leading{margin-left:16px;margin-right:8px}[dir=rtl] .mdc-text-field__icon--leading,.mdc-text-field__icon--leading[dir=rtl]{margin-left:8px;margin-right:16px}.mdc-text-field__icon--trailing{margin-left:12px;margin-right:12px}[dir=rtl] .mdc-text-field__icon--trailing,.mdc-text-field__icon--trailing[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-text-field--filled{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-text-field--filled .mdc-text-field__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-text-field--filled.mdc-ripple-upgraded--unbounded .mdc-text-field__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-activation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-deactivation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-text-field__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-text-field{border-radius:4px 4px 0 0;padding:0 16px;display:inline-flex;align-items:baseline;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input{color:rgba(0,0,0,.87)}@media all{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:rgba(0,0,0,.54)}}@media all{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}}.mdc-text-field .mdc-text-field__input{caret-color:#6200ee;caret-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field-character-counter,.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0,0,0,.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--leading{color:rgba(0,0,0,.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:rgba(0,0,0,.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--prefix{color:rgba(0,0,0,.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--suffix{color:rgba(0,0,0,.6)}.mdc-text-field .mdc-floating-label{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none}.mdc-text-field.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}[dir=rtl] .mdc-text-field.mdc-text-field--with-leading-icon,.mdc-text-field.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0}.mdc-text-field.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}[dir=rtl] .mdc-text-field.mdc-text-field--with-trailing-icon,.mdc-text-field.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}[dir=rtl] .mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon,.mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:0}.mdc-text-field__input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);height:28px;transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);width:100%;min-width:0;border:none;border-radius:0;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input:-webkit-autofill{z-index:auto !important}@media all{.mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.mdc-text-field__input::-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}}@media all{.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}}@media all{.mdc-text-field--fullwidth .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mdc-text-field--fullwidth .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mdc-text-field--fullwidth .mdc-text-field__input::-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input::-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mdc-text-field--fullwidth .mdc-text-field__input::placeholder,.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}}@media all{.mdc-text-field--fullwidth .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}}.mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);height:28px;transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px}.mdc-text-field__input:-webkit-autofill+.mdc-floating-label{-webkit-transform:translateY(-50%) scale(0.75);transform:translateY(-50%) scale(0.75);cursor:auto}.mdc-text-field--filled{height:56px}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{background-color:rgba(0,0,0,.87)}.mdc-text-field--filled:hover .mdc-text-field__ripple::before{opacity:.04}.mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms;opacity:.12}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#f5f5f5}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.42)}.mdc-text-field--filled:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.87)}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) scale(1);transform:translateY(-37.25px) scale(1)}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) scale(0.75);transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.38)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.87)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-radius:4px 0 0 4px}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-radius:0 4px 4px 0}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-radius:0 4px 4px 0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-radius:4px 0 0 4px}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-text-field__ripple::before,.mdc-text-field--outlined .mdc-text-field__ripple::after{content:none}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:transparent;z-index:1}.mdc-text-field--outlined .mdc-text-field__icon{z-index:2}.mdc-text-field--outlined.mdc-text-field--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--textarea{align-items:center;width:auto;height:auto;padding:0;overflow:visible;transition:none}.mdc-text-field--textarea:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--textarea:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--textarea:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.38)}.mdc-text-field--textarea:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--textarea:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--textarea:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.87)}.mdc-text-field--textarea:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--textarea:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--textarea:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field--textarea .mdc-notched-outline .mdc-notched-outline__leading{border-radius:4px 0 0 4px}[dir=rtl] .mdc-text-field--textarea .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--textarea .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-radius:0 4px 4px 0}.mdc-text-field--textarea .mdc-notched-outline .mdc-notched-outline__trailing{border-radius:0 4px 4px 0}[dir=rtl] .mdc-text-field--textarea .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--textarea .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-radius:4px 0 0 4px}.mdc-text-field--textarea .mdc-text-field__ripple::before,.mdc-text-field--textarea .mdc-text-field__ripple::after{content:none}.mdc-text-field--textarea:not(.mdc-text-field--disabled){background-color:transparent}.mdc-text-field--textarea .mdc-text-field-character-counter{left:initial;right:16px;position:absolute;bottom:13px}[dir=rtl] .mdc-text-field--textarea .mdc-text-field-character-counter,.mdc-text-field--textarea .mdc-text-field-character-counter[dir=rtl]{left:16px;right:initial}.mdc-text-field--textarea .mdc-floating-label{left:4px;right:initial;top:17px;width:auto}[dir=rtl] .mdc-text-field--textarea .mdc-floating-label,.mdc-text-field--textarea .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){-webkit-transform:none;transform:none}.mdc-text-field--textarea .mdc-floating-label--float-above{-webkit-transform:translateY(-144%) scale(1);transform:translateY(-144%) scale(1)}.mdc-text-field--textarea .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--textarea.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-130%) scale(0.75);transform:translateY(-130%) scale(0.75)}.mdc-text-field--textarea.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--textarea .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea 250ms 1;animation:mdc-floating-label-shake-float-above-textarea 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-textarea{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-130%) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-130%) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-textarea{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-130%) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-130%) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-130%) scale(0.75)}}.mdc-text-field--textarea .mdc-text-field__input{height:auto;align-self:stretch;box-sizing:border-box;margin-top:8px;margin-bottom:1px;margin-left:0;margin-right:1px;padding:0 16px 16px;line-height:1.75rem}[dir=rtl] .mdc-text-field--textarea .mdc-text-field__input,.mdc-text-field--textarea .mdc-text-field__input[dir=rtl]{margin-left:1px;margin-right:0}.mdc-text-field--textarea .mdc-text-field-character-counter+.mdc-text-field__input{margin-bottom:28px;padding-bottom:0}.mdc-text-field--fullwidth{padding:0;width:100%}.mdc-text-field--fullwidth:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.42)}.mdc-text-field--fullwidth.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.42)}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea){display:flex}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__input{height:100%}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-floating-label{display:none}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea)::before{display:none}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__ripple::before,.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__ripple::after{content:none}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea):not(.mdc-text-field--disabled){background-color:transparent}.mdc-text-field--fullwidth.mdc-text-field--textarea .mdc-text-field__input{resize:vertical}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) translateX(-32px) scale(1);transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-37.25px) translateX(32px) scale(1);transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) translateX(-32px) scale(0.75);transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-34.75px) translateX(32px) scale(0.75);transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-text-field__input:required~.mdc-floating-label::after,.mdc-text-field__input:required~.mdc-notched-outline .mdc-floating-label::after{margin-left:1px;content:"*"}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(98,0,238,.87)}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid .mdc-text-field__input{caret-color:#b00020;caret-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}.mdc-text-field--disabled .mdc-text-field__input{color:rgba(0,0,0,.38)}@media all{.mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:rgba(0,0,0,.38)}}@media all{.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,.38)}}.mdc-text-field--disabled .mdc-floating-label{color:rgba(0,0,0,.38)}.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field__icon--leading{color:rgba(0,0,0,.3)}.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:rgba(0,0,0,.3)}.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,.06)}.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.06)}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder{color:GrayText}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:GrayText}.mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder{color:GrayText}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-floating-label{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__icon--leading{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:GrayText}}@media screen and (-ms-high-contrast: active){.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:GrayText}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled{background-color:#fafafa}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px}:root{--mdc-theme-primary: #6200ee;--mdc-theme-secondary: #018786;--mdc-theme-background: #fff;--mdc-theme-surface: #fff;--mdc-theme-error: #b00020;--mdc-theme-on-primary: #fff;--mdc-theme-on-secondary: #fff;--mdc-theme-on-surface: #000;--mdc-theme-on-error: #fff;--mdc-theme-text-primary-on-background: rgba(0, 0, 0, 0.87);--mdc-theme-text-secondary-on-background: rgba(0, 0, 0, 0.54);--mdc-theme-text-hint-on-background: rgba(0, 0, 0, 0.38);--mdc-theme-text-disabled-on-background: rgba(0, 0, 0, 0.38);--mdc-theme-text-icon-on-background: rgba(0, 0, 0, 0.38);--mdc-theme-text-primary-on-light: rgba(0, 0, 0, 0.87);--mdc-theme-text-secondary-on-light: rgba(0, 0, 0, 0.54);--mdc-theme-text-hint-on-light: rgba(0, 0, 0, 0.38);--mdc-theme-text-disabled-on-light: rgba(0, 0, 0, 0.38);--mdc-theme-text-icon-on-light: rgba(0, 0, 0, 0.38);--mdc-theme-text-primary-on-dark: white;--mdc-theme-text-secondary-on-dark: rgba(255, 255, 255, 0.7);--mdc-theme-text-hint-on-dark: rgba(255, 255, 255, 0.5);--mdc-theme-text-disabled-on-dark: rgba(255, 255, 255, 0.5);--mdc-theme-text-icon-on-dark: rgba(255, 255, 255, 0.5)}.mdc-theme--primary{color:#6200ee !important;color:var(--mdc-theme-primary, #6200ee) !important}.mdc-theme--secondary{color:#018786 !important;color:var(--mdc-theme-secondary, #018786) !important}.mdc-theme--background{background-color:#fff;background-color:var(--mdc-theme-background, #fff)}.mdc-theme--surface{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-theme--error{color:#b00020 !important;color:var(--mdc-theme-error, #b00020) !important}.mdc-theme--on-primary{color:#fff !important;color:var(--mdc-theme-on-primary, #fff) !important}.mdc-theme--on-secondary{color:#fff !important;color:var(--mdc-theme-on-secondary, #fff) !important}.mdc-theme--on-surface{color:#000 !important;color:var(--mdc-theme-on-surface, #000) !important}.mdc-theme--on-error{color:#fff !important;color:var(--mdc-theme-on-error, #fff) !important}.mdc-theme--text-primary-on-background{color:rgba(0,0,0,.87) !important;color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)) !important}.mdc-theme--text-secondary-on-background{color:rgba(0,0,0,.54) !important;color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54)) !important}.mdc-theme--text-hint-on-background{color:rgba(0,0,0,.38) !important;color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-disabled-on-background{color:rgba(0,0,0,.38) !important;color:var(--mdc-theme-text-disabled-on-background, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-icon-on-background{color:rgba(0,0,0,.38) !important;color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-primary-on-light{color:rgba(0,0,0,.87) !important;color:var(--mdc-theme-text-primary-on-light, rgba(0, 0, 0, 0.87)) !important}.mdc-theme--text-secondary-on-light{color:rgba(0,0,0,.54) !important;color:var(--mdc-theme-text-secondary-on-light, rgba(0, 0, 0, 0.54)) !important}.mdc-theme--text-hint-on-light{color:rgba(0,0,0,.38) !important;color:var(--mdc-theme-text-hint-on-light, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-disabled-on-light{color:rgba(0,0,0,.38) !important;color:var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-icon-on-light{color:rgba(0,0,0,.38) !important;color:var(--mdc-theme-text-icon-on-light, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-primary-on-dark{color:#fff !important;color:var(--mdc-theme-text-primary-on-dark, white) !important}.mdc-theme--text-secondary-on-dark{color:rgba(255,255,255,.7) !important;color:var(--mdc-theme-text-secondary-on-dark, rgba(255, 255, 255, 0.7)) !important}.mdc-theme--text-hint-on-dark{color:rgba(255,255,255,.5) !important;color:var(--mdc-theme-text-hint-on-dark, rgba(255, 255, 255, 0.5)) !important}.mdc-theme--text-disabled-on-dark{color:rgba(255,255,255,.5) !important;color:var(--mdc-theme-text-disabled-on-dark, rgba(255, 255, 255, 0.5)) !important}.mdc-theme--text-icon-on-dark{color:rgba(255,255,255,.5) !important;color:var(--mdc-theme-text-icon-on-dark, rgba(255, 255, 255, 0.5)) !important}.mdc-theme--primary-bg{background-color:#6200ee !important;background-color:var(--mdc-theme-primary, #6200ee) !important}.mdc-theme--secondary-bg{background-color:#018786 !important;background-color:var(--mdc-theme-secondary, #018786) !important}.mdc-top-app-bar{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee);color:#fff;display:flex;position:fixed;flex-direction:column;justify-content:space-between;box-sizing:border-box;width:100%;z-index:4}.mdc-top-app-bar .mdc-top-app-bar__action-item,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon{color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-top-app-bar .mdc-top-app-bar__action-item::before,.mdc-top-app-bar .mdc-top-app-bar__action-item::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::after{background-color:#fff;background-color:var(--mdc-theme-on-primary, #fff)}.mdc-top-app-bar .mdc-top-app-bar__action-item:hover::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:hover::before{opacity:.08}.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded--background-focused::before,.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):focus::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded--background-focused::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:.24}.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded)::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):active::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:.24}.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded{--mdc-ripple-fg-opacity: 0.24}.mdc-top-app-bar__row{display:flex;position:relative;box-sizing:border-box;width:100%;height:64px}.mdc-top-app-bar__section{display:inline-flex;flex:1 1 auto;align-items:center;min-width:0;padding:8px 12px;z-index:1}.mdc-top-app-bar__section--align-start{justify-content:flex-start;order:-1}.mdc-top-app-bar__section--align-end{justify-content:flex-end;order:1}.mdc-top-app-bar__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit);padding-left:20px;padding-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;z-index:1}[dir=rtl] .mdc-top-app-bar__title,.mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:20px}.mdc-top-app-bar--short-collapsed{border-radius:0 0 24px 0}[dir=rtl] .mdc-top-app-bar--short-collapsed,.mdc-top-app-bar--short-collapsed[dir=rtl]{border-radius:0 0 0 24px}.mdc-top-app-bar--short{top:0;right:auto;left:0;width:100%;transition:width 250ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-top-app-bar--short,.mdc-top-app-bar--short[dir=rtl]{right:0;left:auto}.mdc-top-app-bar--short .mdc-top-app-bar__row{height:56px}.mdc-top-app-bar--short .mdc-top-app-bar__section{padding:4px}.mdc-top-app-bar--short .mdc-top-app-bar__title{transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);opacity:1}.mdc-top-app-bar--short-collapsed{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12);width:56px;transition:width 300ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__title{display:none}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__action-item{transition:padding 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item{width:112px}.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end{padding-left:0;padding-right:12px}[dir=rtl] .mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end,.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end[dir=rtl]{padding-left:12px;padding-right:0}.mdc-top-app-bar--dense .mdc-top-app-bar__row{height:48px}.mdc-top-app-bar--dense .mdc-top-app-bar__section{padding:0 4px}.mdc-top-app-bar--dense .mdc-top-app-bar__title{padding-left:12px;padding-right:0}[dir=rtl] .mdc-top-app-bar--dense .mdc-top-app-bar__title,.mdc-top-app-bar--dense .mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:12px}.mdc-top-app-bar--prominent .mdc-top-app-bar__row{height:128px}.mdc-top-app-bar--prominent .mdc-top-app-bar__title{align-self:flex-end;padding-bottom:2px}.mdc-top-app-bar--prominent .mdc-top-app-bar__action-item,.mdc-top-app-bar--prominent .mdc-top-app-bar__navigation-icon{align-self:flex-start}.mdc-top-app-bar--fixed{transition:box-shadow 200ms linear}.mdc-top-app-bar--fixed-scrolled{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12);transition:box-shadow 200ms linear}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__row{height:96px}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__section{padding:0 12px}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title{padding-left:20px;padding-right:0;padding-bottom:9px}[dir=rtl] .mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title,.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:20px}.mdc-top-app-bar--fixed-adjust{padding-top:64px}.mdc-top-app-bar--dense-fixed-adjust{padding-top:48px}.mdc-top-app-bar--short-fixed-adjust{padding-top:56px}.mdc-top-app-bar--prominent-fixed-adjust{padding-top:128px}.mdc-top-app-bar--dense-prominent-fixed-adjust{padding-top:96px}@media(max-width: 599px){.mdc-top-app-bar__row{height:56px}.mdc-top-app-bar__section{padding:4px}.mdc-top-app-bar--short{transition:width 200ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed{transition:width 250ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end{padding-left:0;padding-right:12px}[dir=rtl] .mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end,.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end[dir=rtl]{padding-left:12px;padding-right:0}.mdc-top-app-bar--prominent .mdc-top-app-bar__title{padding-bottom:6px}.mdc-top-app-bar--fixed-adjust{padding-top:56px}}.mdc-typography{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-font-family, Roboto, sans-serif)}.mdc-typography--headline1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:6rem;font-size:var(--mdc-typography-headline1-font-size, 6rem);line-height:6rem;line-height:var(--mdc-typography-headline1-line-height, 6rem);font-weight:300;font-weight:var(--mdc-typography-headline1-font-weight, 300);letter-spacing:-0.015625em;letter-spacing:var(--mdc-typography-headline1-letter-spacing, -0.015625em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline1-text-decoration, inherit);text-decoration:var(--mdc-typography-headline1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline1-text-transform, inherit)}.mdc-typography--headline2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:3.75rem;font-size:var(--mdc-typography-headline2-font-size, 3.75rem);line-height:3.75rem;line-height:var(--mdc-typography-headline2-line-height, 3.75rem);font-weight:300;font-weight:var(--mdc-typography-headline2-font-weight, 300);letter-spacing:-0.0083333333em;letter-spacing:var(--mdc-typography-headline2-letter-spacing, -0.0083333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline2-text-decoration, inherit);text-decoration:var(--mdc-typography-headline2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline2-text-transform, inherit)}.mdc-typography--headline3{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline3-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:3rem;font-size:var(--mdc-typography-headline3-font-size, 3rem);line-height:3.125rem;line-height:var(--mdc-typography-headline3-line-height, 3.125rem);font-weight:400;font-weight:var(--mdc-typography-headline3-font-weight, 400);letter-spacing:normal;letter-spacing:var(--mdc-typography-headline3-letter-spacing, normal);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline3-text-decoration, inherit);text-decoration:var(--mdc-typography-headline3-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline3-text-transform, inherit)}.mdc-typography--headline4{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline4-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:2.125rem;font-size:var(--mdc-typography-headline4-font-size, 2.125rem);line-height:2.5rem;line-height:var(--mdc-typography-headline4-line-height, 2.5rem);font-weight:400;font-weight:var(--mdc-typography-headline4-font-weight, 400);letter-spacing:.0073529412em;letter-spacing:var(--mdc-typography-headline4-letter-spacing, 0.0073529412em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline4-text-decoration, inherit);text-decoration:var(--mdc-typography-headline4-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline4-text-transform, inherit)}.mdc-typography--headline5{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline5-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.5rem;font-size:var(--mdc-typography-headline5-font-size, 1.5rem);line-height:2rem;line-height:var(--mdc-typography-headline5-line-height, 2rem);font-weight:400;font-weight:var(--mdc-typography-headline5-font-weight, 400);letter-spacing:normal;letter-spacing:var(--mdc-typography-headline5-letter-spacing, normal);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline5-text-decoration, inherit);text-decoration:var(--mdc-typography-headline5-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline5-text-transform, inherit)}.mdc-typography--headline6{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit)}.mdc-typography--subtitle1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit)}.mdc-typography--subtitle2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height, 1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit)}.mdc-typography--body1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size, 1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height, 1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing, 0.03125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform, inherit)}.mdc-typography--body2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit)}.mdc-typography--caption{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}.mdc-typography--button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase)}.mdc-typography--overline{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-overline-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-overline-font-size, 0.75rem);line-height:2rem;line-height:var(--mdc-typography-overline-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-overline-font-weight, 500);letter-spacing:.1666666667em;letter-spacing:var(--mdc-typography-overline-letter-spacing, 0.1666666667em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-overline-text-decoration, none);text-decoration:var(--mdc-typography-overline-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-overline-text-transform, uppercase)} - - /*# sourceMappingURL=material-components-web.min.css.map*/ \ No newline at end of file diff --git a/Neutron-trunk/resources/lib/material/material-components-web.min.css.map b/Neutron-trunk/resources/lib/material/material-components-web.min.css.map deleted file mode 100644 index 553f6a0..0000000 --- a/Neutron-trunk/resources/lib/material/material-components-web.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./packages/material-components-web/material-components-web.scss","webpack:///./packages/material-components-web/node_modules/@material/elevation/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/theme/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/button/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/typography/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/shape/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/rtl/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/ripple/_keyframes.scss","webpack:///./packages/material-components-web/node_modules/@material/ripple/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/card/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/checkbox/_keyframes.scss","webpack:///./packages/material-components-web/node_modules/@material/checkbox/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/animation/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/checkbox/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/touch-target/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/chips/trailingaction/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/chips/trailingaction/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/chips/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/chips/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/circular-progress/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/circular-progress/_keyframes.scss","webpack:///./packages/material-components-web/node_modules/@material/data-table/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/data-table/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/icon-button/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/dialog/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/dialog/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/drawer/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/list/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/drawer/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/elevation/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/fab/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/fab/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/dom/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/floating-label/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/form-field/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/icon-button/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/image-list/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/image-list/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/layout-grid/mdc-layout-grid.scss","webpack:///./packages/material-components-web/node_modules/@material/layout-grid/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/line-ripple/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/linear-progress/_keyframes.scss","webpack:///./packages/material-components-web/node_modules/@material/linear-progress/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/list/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/menu/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/menu/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/menu-surface/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/notched-outline/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/notched-outline/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/radio/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/radio/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/select/helper-text/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/select/icon/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/select/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/select/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/slider/_keyframes.scss","webpack:///./packages/material-components-web/node_modules/@material/slider/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/slider/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/snackbar/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/snackbar/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/switch/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/tab/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/tab-indicator/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/tab-bar/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/tab-scroller/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/textfield/helper-text/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/textfield/character-counter/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/textfield/icon/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/textfield/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/textfield/_variables.scss","webpack:///./packages/material-components-web/node_modules/@material/top-app-bar/mdc-top-app-bar.scss","webpack:///./packages/material-components-web/node_modules/@material/top-app-bar/_mixins.scss","webpack:///./packages/material-components-web/node_modules/@material/top-app-bar/_variables.scss"],"names":[],"mappings":";;;;;;;AA+BE,0BAOM,eC+KN,uBArJM,kBACA,sBACA,UACA,oBAMA,sDCGJ,sBCfF,YC8BE,kCACA,mCFpBA,+BAEA,4GAFA,kBAEA,2DAFA,oBAEA,8DAFA,gBAEA,0DAFA,6BAEA,2EAFA,qBAEA,2EAFA,4FAEA,sEC+RA,oBFhQA,kBEsTA,oBAEA,mBACA,uBACA,sBACA,eACA,YACA,aAEA,oBACA,qFACA,wBAGA,iBACA,sBEtYA,kBJ6KF,mCA5FI,WACA,YAGE,MAEA,OEkTN,8BAEI,UACA,SAKJ,mBAEI,aAIJ,kBAEI,eAIJ,qBAEI,eACA,oBA7GJ,gCEnTE,kBFgKF,2BD5HE,6BCsIF,qBDtIE,6BCNA,8BGsNF,+BHoLA,qBACA,WACA,YACA,eACA,mBGnYI,+EA2MJ,+BHhNE,+BHvBA,kBACA,QACA,QACA,YAYE,OACA,8DGiMJ,2BDnLE,cAEA,wCC6LF,qBDtME,sBCQF,qCGwMA,+BA3MI,6FA2MJ,+BHjMA,qBAiYA,kBAxXE,wHGwLF,kCA3MI,ySA2MJ,kCHjLE,iLGiLF,kCA3MI,2ZA2MJ,kCH1KA,4CAuPE,sBAjKF,0EDrHE,yBAEA,mDCiLF,0EDnLE,WAEA,wCC6HF,8DDtIE,iCCsMF,8DDtME,sBC2CF,oBF1BE,mHEkbA,yDAdF,oDFpaE,mHAoGW,CEqUb,2BFzaE,oHAoGW,CEyUb,6BF7aE,iHAoGW,CEtEb,sBA8OE,sBAgBA,iBAsHA,mBAnHF,0CAEI,SACA,UACA,6BAIJ,yCAEI,UACA,2BA3KJ,qCDhJE,6BC0JF,+BD1JE,6BCmDF,mBH7CE,eACA,iBAJsB,COnDxB,2CACE,KACE,sHAKA,oJAGF,GACE,yMAXJ,mCACE,KACE,sHAKA,oJAGF,GACE,yMAIJ,4CACE,KACE,0EACA,UAGF,GACE,yCAPJ,oCACE,KACE,0EACA,UAGF,GACE,yCAIJ,6CACE,KACE,0EACA,wCAGF,GACE,WJgFJ,qCItFE,KACE,0EACA,wCAGF,GACE,WJgFJ,YKpDE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,+EAGI,kBACA,kBACA,UACA,oBACA,WAIJ,wCAGI,4DAMA,UAOF,4DAEI,sGAIJ,2DAEI,MAEA,OACA,8CACA,sEAMJ,sEAEI,6BAEA,+BAMJ,kFAEI,uLACE,CAON,oFAEI,4FAKA,wMA2NN,+EAGI,qBAEA,sBACA,WACA,YAKF,2DAEI,sCACA,uCAhON,+ENnGE,yBAEA,mDM0IA,8CAGI,WArB0B,CAuD5B,wJAeF,yBAIA,WAtE8B,CAkF9B,iEAEI,gCAKF,wEAEI,yBAKA,WA5FwB,CAkGhC,gCAEI,8BLrKF,gCAEI,kBAGA,uBACA,WACA,YACA,gBAMJ,2DAEI,MACA,OKiBN,sMNnGE,sBAEA,mDM0IA,gHAGI,WArB0B,CAuD5B,wVAeF,yBAIA,WAtE8B,CAkF9B,sJAEI,gCAKF,oKAEI,yBAKA,WA5FwB,CAkGhC,oFAEI,8BL3QJ,YA2RE,WA1CO,CM3OT,UJZE,kBH2CA,sBAEA,gDDoBA,kBAZA,mHQgPF,aACA,sBACA,sBR1HA,iCA5FI,WACA,YAGE,MAEA,OQ/DN,oBR6BE,kHQmNA,iBACA,mBAIA,qBA5OF,iBAEI,kBACA,sBACA,4BACA,2BACA,sBAGF,yBAEI,cACA,WAKN,6BAEI,+BACA,gCAIJ,4BAEI,kCACA,mCA4NJ,iCAGI,gBAHJ,+BAGI,kBAnNJ,yBAEI,kBACA,MACA,QACA,SACA,OACA,sBAQJ,0BA8MA,aACA,sBACA,sBA5MI,kBACA,aACA,cACA,qBACA,eACA,gBAIJ,sCAEI,+BACA,gCAIJ,qCAEI,kCACA,mCAQJ,mBAqLA,aACA,mBACA,mBACA,sBApLI,gBACA,YAIJ,+BAEI,UAIJ,kDAsKA,aACA,mBACA,mBACA,sBAlKA,wBPxGE,qBO8GE,YACA,yBAIJ,kDH6FA,gCA3MI,uHA2MJ,gCGnFA,kBA0IA,oBACA,mBACA,mBACA,sBAzII,uBACA,eACA,qFAGF,wBAEI,aASN,0BH+DA,+BG3DI,cHhJA,uEA2MJ,+BGxDE,qCHwDF,6BA3MI,6FA2MJ,6BGjDA,yDAEI,8BACA,WACA,YACA,gBACA,SACA,iBAEA,gBHnKA,qIGyKE,iBASN,wBAII,cAGA,aAIJ,uCPlME,qBOgNF,0BDnME,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,mEAGI,kBACA,kBACA,UACA,oBACA,WAIJ,kCAGI,4DAMA,UAOF,sDAEI,sGAIJ,qDAEI,MAEA,OACA,8CACA,sEAMJ,gEAEI,6BAEA,+BAMJ,4EAEI,uLACE,CAON,8EAEI,4FAKA,wMA2NN,mEAGI,qBAEA,sBACA,WACA,YAKF,qDAEI,sCACA,uCAhON,mEN1GE,sBMmJA,wCAGI,WArB0B,CAuD5B,4IAeF,yBAIA,WAtE8B,CAkF9B,2DAEI,gCAKF,kEAEI,yBAKA,WA5FwB,CAkGhC,8CAEI,8BE9PJ,iEACE,OAEE,4BCVc,CDahB,IACE,iHE5C+B,CF+CjC,KACE,qBAXJ,yDACE,OAEE,4BCVc,CDahB,IACE,iHE5C+B,CF+CjC,KACE,qBAIJ,kEACE,SAEE,gDAGF,MACE,8GAGF,KACE,iDAXJ,0DACE,SAEE,gDAGF,MACE,8GAGF,KACE,iDAIJ,iEACE,KACE,kHACA,UACA,oBAGF,GACE,UACA,+BATJ,yDACE,KACE,kHACA,UACA,oBAGF,GACE,UACA,+BAIJ,gEACE,KACE,kHACA,sDACA,UAGF,GACE,wDACA,WATJ,wDACE,KACE,kHACA,sDACA,UAGF,GACE,wDACA,WAIJ,gEACE,KACE,oHACA,wDACA,UAGF,GACE,0DACA,WATJ,wDACE,KACE,oHACA,wDACA,UAGF,GACE,0DACA,WAIJ,gEACE,KACE,8JACA,0DACA,UAGF,GACE,sDACA,WATJ,wDACE,KACE,8JACA,0DACA,UAGF,GACE,sDACA,WAIJ,gEACE,KACE,oHACA,sDACA,UAGF,GACE,0DACA,WATJ,wDACE,KACE,oHACA,sDACA,UAGF,GACE,0DACA,WAIJ,kEACE,GACE,0EACA,gDACA,UAGF,WAEE,gDACA,WAVJ,0DACE,GACE,0EACA,gDACA,UAGF,WAEE,gDACA,WGnGJ,cA4XA,qBACA,kBACA,cACA,uBACA,WACA,YACA,cACA,mBACA,eACA,sBAtME,YAHiB,CAiJnB,yRX3TE,yBAEA,qDMiGF,qINnGE,yBAEA,qDM0IA,yEAGI,WArB0B,CAuD5B,8MAeF,yBAIA,WAtE8B,CAkF9B,4FAEI,gCAKF,mGAEI,yBAKA,WA5FwB,CAkGhC,yDAEI,8BAnIJ,qNNnGE,yBAEA,qDW8KF,wCAEI,SACA,SATe,CAanB,gDAEI,UACA,WACA,WACA,WAjCG,CAgML,4CACE,QACA,UACA,SACA,WACA,WArMG,CAwbP,iIX1lBE,0DW0lBF,+OXnlBE,qBAEA,iDAFA,yBAEA,qDQrDF,sFACE,GR2CA,0DQtCA,IR6CA,qBAEA,iDAFA,yBAEA,sDQrDF,8EACE,GR2CA,0DQtCA,IR6CA,qBAEA,iDAFA,yBAEA,sDQzCF,uFACE,ORsCA,qBAEA,iDAFA,yBAEA,qDQlCA,KRyBA,2DQhCF,+EACE,ORsCA,qBAEA,iDAFA,yBAEA,qDQlCA,KRyBA,2DW6PI,kNAEI,4KAOJ,kNAEI,8KAkVV,mIX1lBE,0DW0lBF,qPX1lBE,0DWutBA,yFXvtBA,WW6tBA,yFX7tBA,kBWutBA,0FXvtBA,WW6tBA,0FX7tBA,kBWGF,8CAulBA,mIX1lBE,mDW0lBF,qPX1lBE,mDWutBA,0FXvtBA,eW6tBA,0FX7tBA,sBWaA,yBAEI,cAMN,wBAyWA,eACA,oBApWA,0BAohBE,oBACA,kBACA,mBACA,uBACA,sBACA,WACA,YAEA,8BACA,kBACA,6BACA,oBACA,0CAUA,oHACE,CARJ,4DXvjBE,sBAEA,mDWsBF,yBA2nBE,kBACA,MACA,QACA,SACA,OACA,WACA,UAIA,0DAGF,iDAEI,UAtoBJ,8BAysBE,oEAIA,oBACA,oBACA,6BACA,2BF3wBgB,CE+DlB,yBA2tBE,WACA,SACA,0EACA,iBACA,mBACA,UAIA,0XACE,CA/tBF,0MA0VF,2BAcE,4QACE,0DACA,0EAKF,oEAIE,wJACA,gBAKF,qEACE,wJACA,gBAKF,oEACE,sJACA,gBAKF,mEACE,oJACA,gBAGF,mEACE,oJACA,gBAKF,mEACE,sJACA,gBAGF,mEACE,sJACA,gBAKF,qEAEE,0JAEA,gBAnZJ,uNA+gBA,gHACE,CAzgBA,iTAorBF,oBA5qBA,kCA6hBE,kBACA,oDACA,kBACA,UACA,oBACA,WACA,8BAIA,0XACE,CApiBJ,sEA8iBE,8CACA,YAIA,4WACE,CAhjBJ,8BAwjBA,kBACA,SACA,UACA,UACA,eAvjBE,uCAqSF,eACA,oBA/RA,qBb1FE,eACA,kBAOE,iBACA,eAJwB,CauV1B,mDACE,SACA,WACA,UACA,WACA,WC7ZG,CD+JL,yFA0kBA,oXAMA,UA5kBA,yFAqqBF,8EA7pBE,yMA6kBA,wDACA,UAIA,0XACE,CA/kBF,yMA6pBF,0EACA,UA7oBA,cL7HE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,uFAGI,kBACA,kBACA,UACA,oBACA,WAIJ,4CAGI,4DAMA,UAOF,gEAEI,sGAIJ,+DAEI,MAEA,OACA,8CACA,sEAMJ,0EAEI,6BAEA,+BAMJ,sFAEI,uLACE,CAON,wFAEI,4FAKA,wMAUN,uFNnGE,sBAEA,mDM0IA,kDAGI,WArB0B,CAuD5B,gKAeF,yBAIA,WAtE8B,CAkF9B,qEAEI,gCAKF,4EAEI,yBAKA,WA5FwB,CAkGhC,kCAEI,8BAuGJ,uFAGI,oBAEA,qBACA,WACA,WAVK,CAeP,+HAGI,2CAEA,6CACA,sCACA,uCAIJ,+DAEI,sCACA,uCK9NN,sBLyQE,kBACA,MACA,OACA,WACA,YAGA,oBK5QF,2EAEI,aElFJ,iCAEI,UCzHe,CDmInB,iCfvGE,kBACA,QACA,QACA,YAME,SACA,WACA,wEepBJ,0BAKI,YACA,oBACA,kBACA,mBACA,uBACA,sBACA,UACA,aACA,eACA,wBAIA,gBAuDJ,0DAEI,YACA,WACA,cCnGC,CDmFL,oDbtBE,WAEA,wCajBA,0DAEI,kBACA,cAUN,0BPQE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,uIAGI,kBACA,kBACA,UACA,oBACA,WAIJ,oEAGI,4DAMA,UAOF,wFAEI,sGAIJ,uFAEI,MAEA,OACA,8CACA,sEAMJ,kGAEI,6BAEA,+BAMJ,8GAEI,uLACE,CAON,gHAEI,4FAKA,wMAoPN,uIAGI,oBAEA,qBACA,WACA,WAVK,CAeP,+KAGI,2CAEA,6CACA,sCACA,uCAIJ,uFAEI,sCACA,uCApQN,uINnGE,sBAEA,mDM0IA,0EAGI,WArB0B,CAuD5B,gNAeF,yBAIA,WAtE8B,CAkF9B,6FAEI,gCAKF,oGAEI,yBAKA,WA5FwB,CAkGhC,8CAEI,8BOnOF,4DAEI,kBAGA,uBACA,WACA,YACA,gBEqbN,yBAEI,sBF5aJ,0Bb7BE,WeydF,0BAEI,sBAGF,gCAEI,sBAIJ,gCAEI,sBAWN,6EAkBE,WACA,YACA,cCliBgB,CHsElB,gCAEI,YACA,WACA,cGzEe,CDshBnB,yCASE,WACA,YACA,cCjiBiB,CHoFnB,0BTwJA,kCA3MI,uEA2MJ,kCWgVA,0BXhVA,kCA3MI,uEA2MJ,kCW5NA,UZxBE,mBHoCA,+CEeA,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEe+aA,YhBhZA,kBgB9BE,oBAEA,mBACA,sBACA,eACA,eACA,aACA,eACA,wBA4QJ,4BZvTE,mBYsWF,gBflUE,sBe+gBF,0HX/TA,kCA3MI,0RA2MJ,kCLvEA,iCA5FI,WACA,YAGE,MAEA,OgB1CF,4BACE,UACA,SAIJ,gBfRA,WAEA,wCeYA,2BjB5CA,kBACA,QACA,QACA,YAYE,OACA,8DiBiCJ,gBAEI,qIAIA,UAIJ,gBAEI,mBAIJ,gBAEI,kBACA,aACA,sBAIJ,qBAEI,WCjFc,CDqFlB,0BAEI,qEASA,iBACA,6BACA,2BN7Fc,CMiGlB,gCAEI,aAIJ,8CAEI,oBAIJ,mDAMI,kBA0PJ,mDf9UE,cAEA,wCe8bF,4EAEI,yBA7GF,yDfrVA,cAEA,wCe0VF,0Df5VE,eAEA,yCe6FA,0Cf/FA,sBAEA,gDesGF,yBAEI,QACA,YAIA,oDAIJ,6CAEI,UCzJc,CDgKhB,+CAEI,+BACA,uBAIA,UAGF,oEAEI,+BAGA,sBAIA,UAGF,6FAII,qBAQR,mEAEI,UAGF,wFAGI,QACA,UAKN,8EAEI,QAKA,UAGF,mGAEI,UC5NU,CDuOlB,UT7LE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,uEAGI,kBACA,kBACA,UACA,oBACA,WAIJ,oCAGI,4DAMA,UAOF,wDAEI,sGAIJ,uDAEI,MAEA,OACA,8CACA,sEAMJ,kEAEI,6BAEA,+BAMJ,8EAEI,uLACE,CAON,gFAEI,4FAKA,wMA2NN,uEAGI,qBAEA,sBACA,WACA,YAKF,uDAEI,sCACA,uCAhON,uEN1GE,iCMmJA,0CAGI,WArB0B,CA6C5B,gSAyBF,yBAIA,WAtE8B,CAkF9B,6DAEI,gCAKF,oEAEI,yBAKA,WA5FwB,CAkGhC,8BAEI,8BS9BF,4BT0MA,kBACA,MACA,OACA,WACA,YAGA,oBS7MI,gBToFJ,6EAGI,WAPa,CAzLnB,yJNnGE,yBAEA,mDM0IA,mFAGI,WArB0B,CA6C5B,ocAyBF,yBAIA,UAtE8B,CAkF9B,sGAEI,gCAKF,6GAEI,yBAKA,UA5FwB,CAkGhC,uEAEI,6BSTF,kCACE,KACE,kDACA,WAGF,GACE,8CACA,WARJ,0BACE,KACE,kDACA,WAGF,GACE,8CACA,WAKN,cAoME,YAhME,aACA,eACA,sBAiMJ,wBAEI,WAIJ,+BjBxbE,eACA,iBAJsB,CiBwPxB,+BAEI,4HE3IJ,gGjB3GE,eAEA,yCkB1DF,0DACE,8DADF,kDACE,8DAOF,8DAEI,MACE,0DADF,IACE,0DADF,MACE,0DADF,IACE,0DADF,MACE,0DADF,IACE,0DADF,MACE,0DADF,KACE,6DAHN,sDAEI,MACE,0DADF,IACE,0DADF,MACE,0DADF,IACE,0DADF,MACE,0DADF,IACE,0DADF,MACE,0DADF,KACE,6DAUN,6DACE,iBACA,gBACA,cACA,cACA,gBACA,gBANF,qDACE,iBACA,gBACA,cACA,cACA,gBACA,gBAQF,6DACE,eACA,cACA,gBACA,gBACA,cACA,cANF,qDACE,eACA,cACA,gBACA,gBACA,cACA,cAQF,6DACE,eACA,cACA,gBACA,gBACA,cACA,cANF,qDACE,eACA,cACA,gBACA,gBACA,cACA,cAQF,6DACE,eACA,cACA,gBACA,gBACA,cALF,qDACE,eACA,cACA,gBACA,gBACA,cAQF,mDACE,+DACA,8DACA,8DAHF,2CACE,+DACA,8DACA,8DAQF,oDACE,iEACA,gEACA,gEDvEF,4CCqEE,iEACA,gEACA,gEDvEF,uBA0LE,WACA,YAvLE,qBACA,kBAEA,cAIA,0DAmLJ,sJAGI,iBAIJ,8GAEI,mBAxLJ,8BA2KE,WACA,WAJc,CAOhB,oKAGI,mBAIJ,qHAEI,iBApLJ,+BAuKE,WACA,WAJc,CAOhB,sKAGI,iBAIJ,sHAEI,mBAhLJ,8BAmKE,WACA,WAJc,CAOhB,oKAGI,iBAIJ,qHAEI,mBA5KJ,yLAKI,kBACA,WACA,YAIJ,8CAEI,0DAIJ,gDAEI,UAKJ,wGAGI,iBAIJ,2CAEI,kEAIJ,kCAEI,kBACA,MAEA,WACA,sBACA,SACA,YACA,gBAGF,uFAGI,WACA,YACA,0DAKN,uCAEI,qBACA,kBACA,UACA,YACA,gBAGF,4FAEI,WAMJ,0FAGI,WAMJ,oFAEI,UAIJ,sFAEI,UAyFN,sFAOI,8KAUJ,4EAEI,+GAPF,uGAkBA,sEAEI,6YACE,CAHN,sEAEI,6YACE,CAHN,sEAEI,6YACE,CAHN,sEAEI,6YACE,CAKR,+HAEI,gMAIJ,gIAEI,kMAhIJ,+BAEI,UEnIJ,yBjB+CE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEmB1BF,gBnBmCE,sBAEA,gDG7CA,kBgBmWA,iBACA,mBAQA,6BA7VE,iCACA,oBACA,sBACA,sBACA,gBACA,kBAyPJ,qBnBzOE,yBmB+NF,4BnB/NE,yBmBmPF,+BnBnPE,oCmBqQF,iDAGI,gCCtTU,CD8Td,iDAGI,qBACA,uBAQJ,+DnB5RE,iCmBsSF,6BnBtSE,sBmBgTF,sBnBhTE,sBmByVF,kDAGI,WAgDK,CA7DT,6BAEI,WAkEwB,CA5C5B,mDAGI,mBACA,iBCvYiB,CD2YrB,uEf/JA,kCA3MI,oLA2MJ,kCeXA,kCnBrME,qBM0GF,mFN1GE,gCMmJA,gDAGI,WArB0B,CAuD5B,4JAeF,yBAIA,WAtE8B,CAkF9B,mEAEI,gCAKF,0EAEI,yBAKA,WA5FwB,CAkGhC,sDAEI,8Ba9BJ,uEnB/ME,sBM0GF,6JN1GE,iCMmJA,qFAGI,WArB0B,CAuD5B,sOAeF,yBAIA,WAtE8B,CAkF9B,wGAEI,gCAKF,+GAEI,yBAKA,WA5FwB,CAkGhC,2FAEI,8BarOJ,uBAEI,eACA,SACA,mBACA,yBAOA,mBAIJ,sBjBTE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEmB8BE,sBACA,uBACA,gBAIJ,+BAEI,iBf/BA,iFeqCE,gBAKN,6BjBhCE,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,8DAFA,qBAEA,kEAFA,gBAEA,6DAFA,6BAEA,8EAFA,wBAEA,iFAFA,gGAEA,uEmBqDE,sBACA,gBACA,uBACA,gBACA,aflDA,6EesDE,iBAKN,sCAEI,iBf7DA,+FemEE,gBAKN,kCE1CE,WACA,YACA,YjB2KF,+BenHI,sPAUA,UflGA,uFA2MJ,+Be1HE,wEf0HF,+BA3MI,mKA2MJ,+BehHE,kFAEI,4DAQJ,oLAII,UAKN,qCAEI,oBACA,mBAIJ,wCAEI,eAIJ,oCAEI,aACA,kBACA,WAGF,iEAEI,cAKN,uBnBvIE,sBAEA,gDmByIE,YAGA,YACA,kBACA,MACA,WAIJ,4BjB7IE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEmBkKE,sBACA,aACA,yBAIJ,qCf0CA,+BetCI,mBACA,aftKA,6FA2MJ,+BejCA,mCfiCA,+BA3MI,6HiBuFE,0DjBvFF,yFA2MJ,+Be1BA,kCf0BA,gCetBI,mBfrLA,uFA2MJ,gCOkHA,uqBX3TE,yBAEA,mDMiGF,wVNnGE,yBAEA,mDM0IA,yLAGI,WArB0B,CAuD5B,0eAeF,yBAIA,WAtE8B,CAkF9B,+NAEI,gCAKF,6OAEI,yBAKA,WA5FwB,CAkGhC,yJAEI,8BAnIJ,wfNnGE,yBAEA,mDWilBF,qUX1lBE,0DW0lBF,uqBXnlBE,qBAEA,+CAFA,yBAEA,mDQrDF,kFACE,GR2CA,0DQtCA,IR6CA,qBAEA,+CAFA,yBAEA,oDQrDF,0EACE,GR2CA,0DQtCA,IR6CA,qBAEA,+CAFA,yBAEA,oDQzCF,mFACE,ORsCA,qBAEA,+CAFA,yBAEA,mDQlCA,KRyBA,2DQhCF,2EACE,ORsCA,qBAEA,+CAFA,yBAEA,mDQlCA,KRyBA,2DW6PI,siBAEI,oKAOJ,siBAEI,sKWxSV,+BAGI,eACA,MACA,OACA,mBACA,uBACA,sBACA,WACA,YAIJ,YAaI,aACA,SClCI,CDuSR,iCtB1PE,sBAEA,gDsBkQF,+BAEI,iCAQJ,+BAEI,sBAQJ,iCAEI,qBAYJ,8GAGI,6BAgBJ,iCAEI,eC9WM,CD6XJ,yBANN,iCAOQ,4BATa,EAaf,yBAXN,iCAYQ,eClYE,ED+YV,iCAeM,4BAjBe,CA1CrB,iCnB5VE,kBmBoCF,mBAEI,UACA,WAMJ,uBAEI,aACA,mBACA,mBACA,6BACA,sBACA,YACA,kDACA,UAGA,oBAIJ,qBvBIE,kBAZA,wHuBcE,aACA,sBACA,YACA,cACA,sBACA,eACA,gBACA,oBAEA,gBvBiGJ,4CA5FI,WACA,YAGE,MAEA,OKpDA,qFkB6CA,iBAKN,mBpBKE,cAoDE,aAEA,mBA7FF,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,6DAFA,iBAEA,8DAFA,gBAEA,6DAFA,uBAEA,wEAFA,wBAEA,iFAFA,gGAEA,uEsBwDE,kBACA,cACA,sBACA,SACA,mBACA,oCpBkEJ,2BA2BA,qBACA,QACA,YACA,WA1BI,iBElIE,iFkBgEA,iBAMN,2CAII,oBAIJ,qBpB9DE,kCACA,mCFpBA,+BAEA,2GAFA,eAEA,sDAFA,mBAEA,4DAFA,gBAEA,yDAFA,wBAEA,qEAFA,wBAEA,6EAFA,4FAEA,mEsBmFE,YACA,sBACA,SACA,kBACA,cACA,iCAIF,kCAEI,aAKJ,iCAEI,gBAMN,wCAII,cAKJ,6CAII,gBACA,mBAKJ,sDAGI,gBAKJ,8EAGI,UAIJ,qBAEI,aACA,kBACA,cACA,eACA,mBACA,yBACA,sBACA,gBACA,SACA,YACA,iCAGF,0CAEI,sBACA,qBAKN,oBlB8CA,+BkBlCI,eAEA,iBlB3KA,2DA2MJ,+BkBzCE,gClByCF,6BA3MI,mFA2MJ,6BAjNM,mFkBqLA,gBAIJ,2DAEI,gBAKN,4DAII,aAKF,wCAEI,gCAIJ,4CAEI,ySAMJ,oFAGI,+BAIJ,4CAGI,8CAMJ,qCAEI,UAIJ,yCAEI,8CACA,UAQN,wBAEI,gBEtRJ,YxB6BE,mDGpCA,sBqB4VA,UAQA,YA9UE,aACA,sBACA,cACA,sBACA,YAEA,uBAEA,yBACA,gBAeA,qHACA,uDdhE2B,CcyR/B,+BxBpOE,sByBqVF,uCzBrVE,qBwBiPF,kCxBjPE,qByByRF,oCzBzRE,qBwB2RF,2BxB3RE,sByByRF,8DzBzRE,cwBmRF,sCxBnRE,yBIKE,2CDpCE,sBsBkWN,2BtBvWE,kBqBuWF,+EpBnHA,iCA3MI,iLA2MJ,iCA3MI,2CoBNE,qBAEA,sBAEA,wBAEA,wBA4UN,2BtBlUE,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,8DAFA,qBAEA,kEAFA,gBAEA,6DAFA,6BAEA,8EAFA,wBAEA,iFAFA,gGAEA,uEwBuVE,4BAEA,eACA,cAKJ,wCAEI,eAKJ,6CAEI,gBAKJ,uCtB5VE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEEwDA,cAoDE,aAEA,mBsBoQA,SACA,etBpPJ,+CA2BA,qBACA,QACA,YACA,WA1BI,iBsBqPJ,8BAEI,iBAMJ,qEAGI,oBAhXJ,qBAEI,gEpBdA,6DoBiBE,8DAKN,qBAEI,wDASA,yBEnEY,CtBkCZ,6DoB4BE,wDASN,qBAEI,gEAQA,yBEhFW,CtBiCX,6DoB0CE,8DASN,oBAEI,cACA,sBACA,gBACA,mBAIJ,mBtBlDE,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,6DAFA,iBAEA,8DAFA,gBAEA,6DAFA,uBAEA,wEAFA,wBAEA,iFAFA,gGAEA,uEEwDA,cAoDE,aAEA,mBAIA,oBAaJ,2BA2BA,qBACA,QACA,YACA,WA1BI,iBAaJ,0BAUA,qBACA,QACA,YACA,WATI,qBsB5EJ,sBtBvDE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEEwDA,cAoDE,aAEA,mBsBjCA,gBtBkDJ,8BA2BA,qBACA,QACA,YACA,WA1BI,iBsBlDJ,qBAEI,YACA,gBACA,iCAUJ,yBpBmHA,qBoB/GI,aACA,kBpB7FA,qEA2MJ,qBoB5GI,0CACE,aAKN,wBpBsGA,6BoBlGI,kBpBzGA,mEA2MJ,6BoBzFA,mBzBtGE,uHK+LF,qBoBlFI,aACA,eA8KJ,qCxB7SE,iCIKE,yDA2MJ,qBoB9EE,oCAEI,aAKN,kBAEI,aACA,eACA,MACA,OACA,WACA,YACA,UAIA,4BACA,uDd3M2B,Cc8M7B,oCAEI,cAIJ,uCAEI,UAIJ,uCAEI,0BAIA,UAIJ,uCAEI,0BAIA,UzB3NJ,mBAuDA,iHAoGW,CA3JX,mBAuDA,kHAoGW,CA3JX,mBAuDA,kHAoGW,CA3JX,mBAuDA,kHAoGW,CA3JX,mBAuDA,mHAoGW,CA3JX,mBAuDA,mHAoGW,CA3JX,mBAuDA,oHAoGW,CA3JX,mBAuDA,oHAoGW,CA3JX,mBAuDA,oHAoGW,CA3JX,mBAuDA,oHAoGW,CA3JX,oBAuDA,qHAoGW,CA3JX,oBAuDA,qHAoGW,CA3JX,oBAuDA,qHAoGW,CA3JX,oBAuDA,qHAoGW,CA3JX,oBAuDA,qHAoGW,CA3JX,oBAuDA,qHAoGW,CA3JX,oBAuDA,sHAoGW,CA3JX,oBAuDA,sHAoGW,CA3JX,oBAuDA,sHAoGW,CA3JX,oBAuDA,sHAoGW,CA3JX,oBAuDA,uHAoGW,CA3JX,oBAuDA,uHAoGW,CA3JX,oBAuDA,uHAoGW,CA3JX,oBAuDA,uHAoGW,CA3JX,oBAuDA,uHAoGW,CAtJb,0BAEI,yDAIA,sB4BmEK,CClET,S7BuDE,kBAZA,qH6B+JA,oBACA,kBACA,mBACA,uBACA,sBACA,WACA,YACA,UACA,YACA,kBACA,qBACA,eACA,qFACA,qBACA,wBAGA,iBAIA,yI5B9LA,kVAEA,qDAFA,WAEA,0CDgIF,gCA5FI,WACA,YAGE,MAEA,O6BuFN,iCzB9KE,kByBiLA,kDzBjLA,kByB+OF,2BAEI,UACA,SAIJ,8B7BjME,oHAoGW,C6BkGb,gB7BtME,qHAoGW,C6BsGb,+BAOI,aAIJ,eAEI,eASJ,aAEI,WA/JJ,wBAEI,WACA,YACA,cA/GiB,CAIrB,eAgRE,WACA,WCjTU,CDoCZ,mB1B8BE,kCACA,mCFpBA,+BAEA,4GAFA,kBAEA,2DAFA,oBAEA,8DAFA,gBAEA,0DAFA,6BAEA,2EAFA,qBAEA,2EAFA,4FAEA,sEGlCA,mByByKA,eAqIA,WACA,eACA,YAGA,mBArHF,oCzB9LE,mByBuJF,kCxB6FA,mCA3MI,uFA2MJ,mCwBtFA,kDxBsFA,mCA3MI,uHA2MJ,mCwB3NA,gB9BiBE,eACA,kBAOE,iBACA,eAJwB,C8BhB1B,gC9BlBA,kBACA,QACA,QACA,YAME,SACA,WACA,wE8BYJ,iBE3CE,kBACA,sBACA,WACA,YACA,MACA,OACA,6BACA,sBACA,WFuCF,gBAiSE,2BACA,uBACA,mBACA,kBACA,mBAjSF,eAgRE,kPAIA,kBACA,sBA/QF,wBAmSE,oBACA,mBACA,uBAjSF,iBA0SE,8CACA,UAIA,0TACE,CAIJ,gCAEI,8CAIA,8OA5SJ,StBnBE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,mEAGI,kBACA,kBACA,UACA,oBACA,WAIJ,kCAGI,4DAMA,UAOF,sDAEI,sGAIJ,qDAEI,MAEA,OACA,8CACA,sEAMJ,gEAEI,6BAEA,+BAMJ,4EAEI,uLACE,CAON,8EAEI,4FAKA,wMA2NN,mEAGI,qBAEA,sBACA,WACA,YAKF,qDAEI,sCACA,uCAhON,mENnGE,sBAEA,qDM0IA,wCAGI,WArB0B,CAuD5B,4IAeF,yBAIA,WAtE8B,CAkF9B,2DAEI,gCAKF,kEAEI,yBAKA,WA5FwB,CAkGhC,6BAEI,8BsBpMF,0BtBgXA,kBACA,MACA,OACA,WACA,YAGA,oBsBnXI,gBGrFN,oB7BuDE,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uE+BlCE,kBAEA,OAEA,4DACA,oBACA,gBACA,uBACA,mBACA,YACA,gBAKA,sBAeA,+VACE,C3BUF,2D2BtBE,QAEA,UAEA,8DAEA,iBAWN,iCAEI,YA2DJ,iCASM,wFASN,2BAEI,wIA7CF,iEACE,GACE,0IAGF,IACE,8IACA,4IAGF,IACE,8JACA,8IAGF,KACE,2IAhBJ,yDACE,GACE,0IAGF,IACE,8IACA,4IAGF,IACE,8JACA,8IAGF,KACE,2IC/FN,gB9B0DE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEASA,sBAEA,uEgC5CE,oBACA,mBACA,sBAIF,sB5B6OF,iE4BxOM,Q5B6BF,+DA2MJ,gCA3MI,+DA2MJ,iC4BlOE,8BAEI,uBACA,gBACA,mBAOJ,iC5BuNF,iE4BlNM,S5BOF,qFA2MJ,gCA3MI,qFA2MJ,iC4B7MA,+BAEI,8BAIF,qCAEI,S5BNF,6F4BUI,SXnDR,iBAoJE,qBACA,kBACA,sBACA,YACA,aACA,6BACA,kBACA,cACA,eACA,qBACA,eACA,yBAxFA,uEACA,YACA,aA0FF,0CAGI,WACA,WYvLM,CZuNV,0BrB5JE,sBAEA,mEqB0JF,0BAxBI,eACA,oBA3KJ,uBAEI,qBAIF,iDAEI,aAMJ,4CAEI,aAIF,sEAEI,qBAWR,iBfWE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,iDAGI,kBACA,kBACA,UACA,oBACA,WAIJ,yBAGI,4DAMA,UAOF,6CAEI,sGAIJ,4CAEI,MAEA,OACA,8CACA,sEAMJ,uDAEI,6BAEA,+BAMJ,mEAEI,uLACE,CAON,qEAEI,4FAKA,wMAoPN,iDAGI,oBAEA,qBACA,WACA,WAVK,CAeP,yFAGI,2CAEA,6CACA,sCACA,uCAIJ,4CAEI,sCACA,uCApQN,iDN1GE,sBMmJA,+BAGI,WArB0B,CAuD5B,0HAeF,yBAIA,WAtE8B,CAkF9B,kDAEI,gCAKF,yDAEI,yBAKA,WA5FwB,CAkGhC,qCAEI,8B4BxRJ,gBAEI,aACA,eAEA,cACA,UAIJ,8DAII,kBACA,sBAIJ,sBAEI,qBAIJ,uBAEI,WAKJ,+DAEI,kBACA,MACA,QACA,SACA,OACA,YAEA,4BACA,2BACA,sBAsEJ,wCAEI,8BAMJ,uB/BlHE,gB+BwHF,kE/BxHE,sB+B2CF,kDlCEE,uEkCIE,aACA,mBACA,8BACA,sBACA,cACA,gBCxEM,CD4EV,uBhCPE,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,oBAEA,iEAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uEE2BA,uBACA,mBACA,gBgCEF,kEAEI,kBACA,SACA,WACA,YACA,eAIA,0BACA,WAMJ,yBAEI,cAGF,+CAEI,4DAIJ,gDAEI,cACA,YE/GR,MAEI,uCACA,uCACA,6CAFA,sCACA,sCACA,4CAFA,qCACA,qCACA,2CCuCA,yBDlCJ,iBCsEE,sBACA,cACA,aAEA,qDA7CE,+CD7BJ,iBCsEE,sBACA,cACA,aAEA,oDAlDE,yBDxBJ,iBCsEE,sBACA,cACA,aAEA,mDAxCE,yBDxBJ,wBC4EE,aACA,mBACA,oBACA,aAEA,kEAEA,yBDnFF,wBCoFI,aACA,SACA,cAEA,qDACA,mDAtEA,+CDnBJ,wBC4EE,aACA,mBACA,oBACA,YAEA,iEAEA,yBDnFF,wBCoFI,aACA,SACA,cAEA,oDACA,kDA3EA,yBDdJ,wBC4EE,aACA,mBACA,oBACA,YAEA,gEAEA,yBDnFF,wBCoFI,aACA,SACA,cAEA,mDACA,kDAjEA,yBDbJ,uBCiCE,kCAEA,yEAsDA,sBACA,YAEA,6DAvDA,yBDrCF,uBCsCI,WACA,wBAuDF,yBD9FF,uBC+FI,UDlFa,sECoBf,iCAEA,wEAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,kCAEA,yEAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,uBAEA,8DAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,kCAEA,yEAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,kCAEA,yEAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,uBAEA,8DAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,kCAEA,yEAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,kCAEA,yEAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,uBAEA,8DAEA,yBDxBe,sECyBb,WACA,wBD1Ba,wECoBf,kCAEA,yEAEA,yBDxBe,wECyBb,WACA,yBD1Ba,wECoBf,kCAEA,yEAEA,yBDxBe,wECyBb,WACA,yBD1Ba,wECoBf,wBAEA,+DAEA,yBDxBe,wECyBb,WACA,0BA/BA,+CDRJ,uBCiCE,uBAEA,6DAsDA,sBACA,WAEA,4DAvDA,yBDrCF,uBCsCI,WACA,wBAuDF,yBD9FF,uBC+FI,UDlFa,qECoBf,yBAEA,+DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,uBAEA,6DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,yBAEA,+DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,uBAEA,6DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,yBAEA,+DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,uBAEA,6DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,yBAEA,+DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,wBAEA,8DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,qECoBf,wBAEA,8DAEA,yBDxBe,qECyBb,WACA,wBD1Ba,uECoBf,wBAEA,8DAEA,yBDxBe,uECyBb,WACA,wBD1Ba,uECoBf,wBAEA,8DAEA,yBDxBe,uECyBb,WACA,wBD1Ba,uECoBf,wBAEA,8DAEA,yBDxBe,uECyBb,WACA,yBApCA,yBDHJ,uBCiCE,wBAEA,6DAsDA,sBACA,WAEA,2DAvDA,yBDrCF,uBCsCI,WACA,wBAuDF,yBD9FF,uBC+FI,UDlFa,oECoBf,uBAEA,4DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,uBAEA,4DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,uBAEA,4DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,wBAEA,6DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,wBAEA,6DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,wBAEA,6DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,wBAEA,6DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,wBAEA,6DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,oECoBf,wBAEA,6DAEA,yBDxBe,oECyBb,WACA,wBD1Ba,sECoBf,wBAEA,6DAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,wBAEA,6DAEA,yBDxBe,sECyBb,WACA,wBD1Ba,sECoBf,wBAEA,6DAEA,yBDxBe,sECyBb,WACA,yBDfA,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,gCC4EF,OD7Ea,CACX,iCC4EF,QD7Ea,CACX,iCC4EF,QD7Ea,CACX,iCC4EF,QD7Ea,CAOb,kCC2EE,sBAEA,yBD7EF,kCC8EI,kBD1EJ,qCC+EE,kBD3EF,qCC+EE,oBAEA,yBDjFF,qCCkFI,gBA3GF,yBD8BJ,qCC+FE,aAEA,yKACE,EArIA,+CDmCJ,qCC+FE,YAEA,oKACE,EA1IA,yBDwCJ,qCC+FE,YAEA,iKACE,EDtFJ,6BACE,kBACA,cAGF,8BACE,eACA,iBEjFI,iDAEE,kBACA,SACA,OACA,WACA,0BACA,WAGF,yBACE,wBACA,UAGF,wBACE,gDACA,wBACA,UACA,UAKF,wBACE,sWAKN,gCAEI,gDACA,UAIJ,sCAEI,UCpDJ,uEACE,GACE,wDAGF,IACE,8IACA,wDAGF,OACE,8JACA,wEAGF,KACE,6EAhBJ,+DACE,GACE,wDAGF,IACE,8IACA,wDAGF,OACE,8JACA,wEAGF,KACE,6EAMJ,mEACE,GACE,sDAGF,OACE,sJACA,sDAGF,OACE,8HACA,8DAGF,KACE,uDAhBJ,2DACE,GACE,sDAGF,OACE,sJACA,sDAGF,OACE,8HACA,8DAGF,KACE,uDAMJ,yEACE,GACE,gJACA,wDAGF,IACE,0JACA,0EAGF,OACE,kJACA,0EAGF,KACE,6EAjBJ,iEACE,GACE,gJACA,wDAGF,IACE,0JACA,0EAGF,OACE,kJACA,0EAGF,KACE,6EAMJ,qEACE,GACE,oKACA,sDAGF,OACE,sKACA,8DAGF,OACE,sKACA,4DAGF,KACE,uDAjBJ,6DACE,GACE,oKACA,sDAGF,OACE,sKACA,8DAGF,OACE,sKACA,4DAGF,KACE,uDAMJ,iDACE,KAIE,+FALJ,yCACE,KAIE,+FAMJ,+EACE,GACE,wDAGF,IACE,8IACA,wDAGF,OACE,8JACA,0EAGF,KACE,+EAhBJ,uEACE,GACE,wDAGF,IACE,8IACA,wDAGF,OACE,8JACA,0EAGF,KACE,+EAMJ,iFACE,GACE,gJACA,wDAGF,IACE,0JACA,4EAGF,OACE,kJACA,4EAGF,KACE,+EAjBJ,yEACE,GACE,gJACA,wDAGF,IACE,0JACA,4EAGF,OACE,kJACA,4EAGF,KACE,+EAMJ,yDACE,KACE,iEAFJ,iDACE,KACE,iEC3HJ,qBAEI,kBACA,WACA,WACA,wDAEA,8BACA,gBAIA,0DAGF,0BAEI,kBACA,WACA,YACA,sCACA,4DAIA,sPAIJ,gCAEI,qBACA,kBACA,WACA,sCAGA,qBAIJ,6BAEI,aACA,kBACA,WACA,YAIJ,kCAEI,2BACA,yBACA,UACA,0DAIA,oIAIJ,iCAEI,cAIA,6DAIJ,kCAEI,gDAIJ,oCAEI,kBAkFJ,8DAEI,gBAIJ,sEAEI,kBAIA,0KAGF,sGAEI,kKAKN,wEAEI,iBACA,mBAIA,8KAGF,wGAEI,sKAYN,yDAEI,QACA,oEAIJ,iEAEI,8JAIJ,mEAEI,kKAIJ,iEAEI,oJAIA,QACA,gDAIJ,gEAEI,QAzJJ,6BAEI,UAIA,sCA8BN,gCxCzFE,qBAEA,+CwCsGF,kCAII,qUAIJ,iCAEI,wBAdkB,CA9BpB,oGAEI,mBACA,UAIJ,sGAEI,kBACA,UftGN,UvB8BE,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,oBAEA,iEAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uEyBuaA,mBAIA,SACA,cACA,qBzBpaA,sBAEA,uEyBoaA,gBACE,aA5CJ,eAgBE,WAtBO,CAvHT,+BzB9PE,sBAEA,yEyBsQF,wBzB/QE,6ByByRF,wBzBlRE,sBAEA,oEyB0RF,qBzB5RE,sBAEA,oEyB4UF,2BzB9UE,sBAEA,uEyBsVF,8CAEI,WgBlZkB,ChB2ZpB,4JzBnWA,WAEA,wCyBXF,iBAEI,gBACA,mBACA,kBAIJ,eAgbA,aACA,kBACA,mBACA,2BACA,eACA,gBAEA,qBACE,aAhbF,mDzBPE,cAEA,wCyBgRF,mGzBlRE,cAEA,wCyBWF,wBrB4LA,gCqBqQA,WACA,YA9bI,cACA,mBACA,uBACA,kBrB5BE,iGAiNN,gCqB9KA,kCAEI,oBAKJ,qBrBuKA,gCqBrKE,0CvB5BA,kCACA,mCFpBA,+BAEA,6GAFA,iBAEA,2DAFA,oBAEA,+DAFA,gBAEA,2DAFA,6BAEA,4EAFA,wBAEA,+EAFA,8FAEA,qEICI,2FAiNN,gCqB3JA,qBvB5BE,uBACA,mBACA,gBuBgCF,0BAEI,oBAIJ,6BvBxCE,uBACA,mBACA,gBA2BA,cAoDE,aAEA,mBAIA,oBAaJ,qCA2BA,qBACA,QACA,YACA,WA1BI,iBAaJ,oCAUA,qBACA,QACA,YACA,WATI,qBuBvEF,8CvBrBA,cAoDE,aAEA,mBAIA,oBAaJ,sDA2BA,qBACA,QACA,YACA,WA1BI,iBAaJ,qDAUA,qBACA,QACA,YACA,WATI,qBuB7DJ,+BvBtEE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEE2BA,uBACA,mBACA,gBA2BA,cAoDE,aAEA,mBAiBJ,uCA2BA,qBACA,QACA,YACA,WA1BI,iBuBlCF,gDAEI,kBAON,gCAEI,YAIJ,yCrBkGA,gCqBqQA,WACA,WAtW2B,CrBjHrB,mIAiNN,gCqB5FA,sCAEI,YAIJ,+CrBsFA,gCqBqQA,WACA,YAxVI,kBrB/HE,+IAiNN,gCqB9EA,yCAEI,sBAIJ,mCAEI,YAIJ,yGAGI,YAIJ,+DrB2DA,gCqBqQA,WACA,WA/T2B,CrBxJrB,+KAiNN,gCqBpDA,8EAEI,eAMJ,gBAEI,cACA,qBAKJ,kBAEI,SACA,SACA,YACA,wBACA,0BAyJJ,kBzB3UE,oCyB0LF,0BAGI,cAIJ,yBrBeA,gCqBXI,wBrBtME,qGAiNN,gCqBPA,kDAEI,+BAOA,0BACE,UAKN,2BvBzME,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,oBAEA,iEAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uEyBkOE,sCAaJ,8EnBhOE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,2KAGI,kBACA,kBACA,UACA,oBACA,WAIJ,sFAGI,4DAMA,UAOF,0GAEI,sGAIJ,yGAEI,MAEA,OACA,8CACA,sEAMJ,oHAEI,6BAEA,+BAMJ,gIAEI,uLACE,CAON,kIAEI,4FAKA,wMA2NN,2KAGI,qBAEA,sBACA,WACA,YAKF,yGAEI,sCACA,uCAhON,2KN1GE,sBMmJA,4FAGI,WArB0B,CAuD5B,oPAeF,yBAIA,WAtE8B,CAkF9B,+GAEI,gCAKF,sHAEI,yBAKA,WA5FwB,CAkGhC,kGAEI,8BA8BF,iGAGI,WARc,CA5JpB,iMNnGE,yBAEA,mDM0IA,uGAGI,WArB0B,CAuD5B,0QAeF,yBAIA,WAtE8B,CAkF9B,0HAEI,gCAKF,iIAEI,yBAKA,WA5FwB,CAkGhC,6GAEI,8BA0DF,gGAGI,WAPa,CAzLnB,+LNnGE,yBAEA,mDM0IA,sGAGI,WArB0B,CAuD5B,wQAeF,yBAIA,UAtE8B,CAkF9B,yHAEI,gCAKF,gIAEI,yBAKA,UA5FwB,CAkGhC,4GAEI,6BmBKJ,0DnBrOE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,mIAGI,kBACA,kBACA,UACA,oBACA,WAIJ,kEAGI,4DAMA,UAOF,sFAEI,sGAIJ,qFAEI,MAEA,OACA,8CACA,sEAMJ,gGAEI,6BAEA,+BAMJ,4GAEI,uLACE,CAON,8GAEI,4FAKA,wMA2NN,mIAGI,qBAEA,sBACA,WACA,YAKF,qFAEI,sCACA,uCAhON,mIN1GE,sBMwLE,4MAeF,yBAIA,WmB2C4C,CiB1R9C,UAKI,eCjBM,ClBmVV,+BzBnSE,sByByRF,kCzBzRE,sB0C3BA,oB1C2BA,sBD6BA,kBA4GF,2CA5FI,WACA,YAGE,MAEA,O2CxEJ,4BAEI,aAIJ,yBAEI,qFAIJ,mCAEI,YAKJ,iGAGI,oBAON,2BAEI,UACA,kBAGF,0CtCkMF,qCA3MI,uGA2MJ,qCsC3LE,2DtC2LF,wBsCvLM,aACA,kBAEA,QACA,8DtCxBF,yIA2MJ,wBsC5KA,yDAEI,eE3EJ,kBAiEE,aACA,kBACA,sBACA,6BACA,8BACA,SACA,UACA,8CACA,4DACA,UACA,cACA,8BACA,UAIA,iF7C3BA,yTCVA,sBAEA,gDAFA,WAEA,wCG7CA,kBCoPF,gEwC/JA,wBAEI,aAKJ,wBAEI,qBACA,8CACA,UAIJ,kCAEI,qBACA,kDACA,UAIJ,oCAEI,qBACA,UAIA,gCxC1EA,uDA2MJ,gEwCzOA,0BAEI,kBACA,iBAIJ,yBAEI,eCzBJ,qBA+OE,aACA,kBACA,MACA,QACA,OACA,sBACA,WACA,eACA,YAEA,gBACA,oBzC5ME,6DyCgNA,iBA3PF,yFAII,sBACA,YACA,qBACA,wBACA,oBAIJ,8BzC0OF,wCyCtOM,UC1BQ,C1CqDV,+EA2MJ,wCyClOE,+BzCkOF,wCyC9NM,YzCmBF,iFA2MJ,wCyC1NE,4BAEI,cACA,WACA,gCAIJ,yCAEI,qBACA,kBACA,eAIJ,sDAEI,mBAIJ,gEAEI,2BAMJ,0DzC4LF,iCyCxLM,gBzCnBF,uIA2MJ,iCyClLE,2DAEI,UEnDN,WAgVE,aArUE,qBACA,kBACA,cACA,uBACA,WACA,YACA,eAEA,iDA0bJ,4G/C1bE,6B+C0bF,sG/CnbE,qBAEA,iD+CkaF,8F/CpaE,qBAEA,iD+CibF,sO/C1bE,6B+C0bF,0N/C1bE,6B+C2aF,0M/C3aE,6B+C6PF,0C/CtPE,yBAEA,qD+CuTF,0CAEI,UACA,WACA,WACA,WAjCG,CAlBP,sCAEI,QACA,UACA,SACA,WACA,WAYG,CAhSL,uBAEI,qBACA,kBACA,sBACA,WACA,WC5DI,CD+DN,+BAEI,kBACA,oDACA,kBACA,UACA,oBACA,WAIA,kYAKN,yBAEI,kBACA,MACA,OACA,sBACA,WACA,YACA,iBACA,mBACA,kBAIA,+DAIJ,yBAEI,kBACA,MACA,OACA,sBACA,WACA,YACA,oDACA,kBACA,mBACA,kBAIA,gZACE,CAKN,2BAEI,kBACA,SACA,UACA,UACA,eACA,UAIJ,kBjDzEA,eACA,kBAOE,iBACA,eAJwB,CiDuQ5B,6CAEI,SACA,WACA,UACA,WACA,WnC9UG,CmCgJL,qHAEI,mXACE,CAIJ,uKAEI,6DAIJ,uKAEI,kYACE,CAOV,qBAEI,eACA,oBAMA,mFAEI,kDAIA,kYACE,CASR,kIAEI,eAMJ,gEAEI,8CACA,YAIA,mXACE,CAgBR,WzC7JE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,2EAGI,kBACA,kBACA,UACA,oBACA,WAIJ,sCAGI,4DAMA,UAOF,0DAEI,sGAIJ,yDAEI,MAEA,OACA,8CACA,sEAMJ,oEAEI,6BAEA,+BAMJ,gFAEI,uLACE,CAON,kFAEI,4FAKA,wMAoPN,2EAGI,oBAEA,qBACA,WACA,WAVK,CAeP,mHAGI,2CAEA,6CACA,sCACA,uCAIJ,yDAEI,sCACA,uCApQN,2ENnGE,yBAEA,qDM0IA,4CAGI,WArB0B,CAuD5B,oJAeF,yBAIA,WAtE8B,CAkF9B,+DAEI,gCAKF,sEAEI,yBAKA,WA5FwB,CAkGhC,+BAEI,8ByC5DA,kFAEI,aAMR,mBzCgOE,kBACA,MACA,OACA,WACA,YAGA,oBApcF,oBAiDE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAlDE,kBACA,aACA,gBAoDJ,uDAGI,kBACA,kBACA,UACA,oBACA,WAIJ,4BAGI,4DAMA,UAOF,gDAEI,sGAIJ,+CAEI,MAEA,OACA,8CACA,sEAMJ,0DAEI,6BAEA,+BAMJ,sEAEI,uLACE,CAON,wEAEI,4FAKA,wMAUN,uDN1GE,sBMmJA,kCAGI,WArB0B,CAuD5B,gIAeF,yBAIA,WAtE8B,CAkF9B,qDAEI,gCAKF,4DAEI,yBAKA,WA5FwB,CAkGhC,wCAEI,8BA8EJ,uDAGI,qBAEA,sBACA,WACA,YAKF,+CAEI,sCACA,uCAnWJ,kDAII,iBAyWN,mHAGI,oBAEA,qBACA,WACA,WAVK,CAeP,2JAGI,2CAEA,6CACA,sCACA,uCAIJ,6EAEI,sCACA,uCApQN,yENnGE,yBAEA,mDM0IA,2CAGI,WArB0B,CAuD5B,kJAeF,yBAIA,WAtE8B,CAkF9B,8DAEI,gCAKF,qEAEI,yBAKA,WA5FwB,CAkGhC,iDAEI,8BAnIJ,uENnGE,yBAEA,qDM0IA,0CAGI,WArB0B,CAuD5B,gJAeF,yBAIA,WAtE8B,CAkF9B,6DAEI,gCAKF,oEAEI,yBAKA,WA5FwB,CAkGhC,gDAEI,8B2CxRJ,wB/C0DE,kCACA,mCFpBA,+BAEA,6GAFA,iBAEA,2DAFA,oBAEA,+DAFA,gBAEA,2DAFA,6BAEA,4EAFA,wBAEA,+EAFA,8FAEA,qEEwDA,cAoDE,aAEA,mB+ClJA,SACA,UACA,oBAIA,sD/C6JJ,gCA2BA,qBACA,QACA,YACA,WA1BI,iB+C7JJ,oCAEI,gBAIA,UACA,oBCOJ,iDAEI,qBACA,sBACA,WACA,YACA,YACA,YACA,qBACA,eACA,qFACA,cACA,kBAIA,6BACA,kBAiBJ,iD9C4LA,mCA3MI,qHA2MJ,mC8CrMA,4ElDJE,WAEA,wCkD5CF,mEAGI,eACA,oBCyKJ,oB7C7HE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,+FAGI,kBACA,kBACA,UACA,oBACA,WAIJ,gDAGI,4DAMA,UAOF,oEAEI,sGAIJ,mEAEI,MAEA,OACA,8CACA,sEAMJ,8EAEI,6BAEA,+BAMJ,0FAEI,uLACE,CAON,4FAEI,4FAKA,wMA2NN,+FAGI,qBAEA,sBACA,WACA,YAKF,mEAEI,sCACA,uCAhON,+FN1GE,iCMmJA,sDAGI,WArB0B,CAuD5B,wKAeF,yBAIA,WAtE8B,C6CkB9B,wC7CkQA,kBACA,MACA,OACA,WACA,YAGA,oBAtTF,yHNnGE,sBAEA,mDM0IA,mEAGI,WArB0B,CAuD5B,kMAeF,yBAIA,WAtE8B,CAkF9B,sFAEI,gCAKF,6FAEI,yBAKA,WA5FwB,CAkGhC,yEAEI,8B6CpQJ,YA2BI,kBAgTJ,2DnDpTE,yBmD0SF,kEnD1SE,sBmDwMF,2DnDxME,qBsCkBA,gEtClBA,oCiDCF,mFjDDE,qBsCQA,mFtCDA,4BAEA,sDmDsKA,+EnD/KA,yBsCkBA,sEtClBA,oCmD6WF,gC/C7JA,wB+CiKI,QACA,8DACA,oB/C9WA,mFA2MJ,wB+CwKE,qD/CxKF,uBA3MI,6HA2MJ,uB+CsBA,gChD1QE,0BgDkoBF,gC/C9YA,kCA3MI,mFA2MJ,kC+CwZA,8D/CxZA,+BA3MI,+IA2MJ,+B+CzME,2BAyUA,+e/ChIF,mC+ClMM,WACA,YACA,kBACA,cACA,oBAIA,sO/CjBF,yEA2MJ,mC+CvLI,gDAuTF,+eAnTE,kDAEI,4FAIA,sOAMR,oBA4lBE,YjD/kBA,oBAGE,qBiDXA,oBACA,kBACA,sBACA,gBACA,aACA,eACA,gBjDyEJ,4BA2BA,qBACA,QACA,YACA,WA1BI,iBiD2jBF,0IACE,YAGF,oGACE,apBpoBJ,qDASM,wFoBdF,gEAEI,oDACA,UAqgBN,4CAEI,kBACA,iBAKN,8GAEI,UA3JJ,2BjDhaE,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,oBAEA,iEAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uEmD8bE,sBACA,QACA,YACA,YACA,YACA,aACA,UACA,mBACA,6DACA,oBACA,uBAIA,6BACA,cAxBA,uCACE,aAGF,sCACE,6BACA,cArXN,sBA4cE,YA5NF,qEnDpTE,6B6CyCF,4O7CzCE,6B6CyCF,uc7CzCE,6B6CqDF,uWAII,gBO9FkB,CP8EtB,uW7ClCE,qBAEA,+C6C+EF,yE1C5HE,0BCyCE,qKDpCE,0B0CyIN,0E1C9IE,0BCyCE,uKDpCE,0BgDwRN,iDhD7RE,kBgDwVF,qEnDpTE,6BmDmhBF,0CAMI,iBpB1cJ,qEAEI,sJApBJ,2EASM,wFcqFN,2EAEI,iBdhGJ,mNASM,8FckGJ,mNAEI,eApGN,oGAEI,eCzHS,CK8kBb,iDAEI,aACA,YACA,UAIA,6BAIJ,wCAEI,UAIJ,0CAEI,oBACA,oBN5eJ,oGAEI,eO7GkB,CD6OtB,oEnDjME,cAEA,sCsCSA,yEtCXA,4BAEA,oDsCDA,4FtCDA,4BAEA,oDmDsKA,wFnD/KA,ciDWF,gIjDJE,cAEA,sCsCSA,+EtCXA,4BAEA,oD6CgCF,wS7ClCE,qBAEA,6C6CgCF,mgB7ClCE,qBAEA,6C6C4CF,maAII,gBO9FkB,CP8EtB,ma7ClCE,qBAEA,6CmD+EA,gDAwPA,+eAnPA,6DAEI,UAOJ,iDAEI,YAKN,sBAkZE,eACA,oBA5MF,0CnDpTE,yBmDsdF,0CnDtdE,sBmD0dF,iDA1IE,+eb9TA,+CtClBA,oCmDieA,+CAGI,2BAKN,wCnDzeE,sBmD+eF,iDnD/eE,sBmDqfE,oBAjMJ,+DnDpTE,6B6CyCF,0N7CzCE,6BmDqYF,mD/CrLA,wBA3MI,yHA2MJ,wB+C4LE,wE/C5LF,wBA3MI,mKA2MJ,wB+CiMI,qF/CjMJ,wBA3MI,6LA2MJ,wB2BnJA,qFAGM,4H3B3DF,6L2B8DI,0HcwFR,qFAEI,iBdhGJ,uOAGM,kI3B3DF,of2B8DI,gIcqGN,uOAEI,ed3FN,+EAEI,gLAFJ,iLAEI,wLoBmVJ,qE/CpNA,qCA3MI,6JA2MJ,qC+C3FA,qDnD9GE,WAEA,wC+B2BA,qFACE,GACE,oJAGF,IACE,8IACA,sJAGF,IACE,8JACA,wJAGF,KACE,qJAhBJ,6EACE,GACE,oJAGF,IACE,8IACA,sJAGF,IACE,8JACA,wJAGF,KACE,qJAhBJ,yFACE,GACE,sJAGF,IACE,8IACA,wJAGF,IACE,8JACA,0JAGF,KACE,uJAhBJ,iFACE,GACE,sJAGF,IACE,8IACA,wJAGF,IACE,8JACA,0JAGF,KACE,uJsBzGN,wCACE,GACE,8EAGF,IACE,4EACA,oDAGF,KACE,uDAXJ,gCACE,GACE,8EAGF,IACE,4EACA,oDAGF,KACE,uDCWJ,YAkBI,kBACA,WACA,YACA,eACA,mBACA,0CAkXJ,0DtDnWE,yBAEA,qDsD2WF,2EtD7WE,yBAEA,qDsD+WE,WC9akB,CDsbtB,2EtDzXE,yBAEA,qDsDiYF,0DtDnYE,aAEA,yCAFA,eAEA,2CsDgHA,+DtDlHA,yBAEA,qDsDwIA,wDtD1IA,yBAEA,qDsD4HA,wDtD9HA,WAEA,mDsDrCA,sBAUI,YA4XN,yCtD1WE,yBsDoXF,0DtDpXE,yBsDwXE,WC9akB,CDsbtB,0DtDhYE,yBsD0YF,yCtD1YE,4BsDqZF,yCAGI,YAEA,0DAhaA,kBACE,aAyLN,6BAEI,kBACA,QACA,WACA,WACA,gBAGF,oCAEI,kBACA,MACA,OACA,cACA,WACA,YACA,WAKN,mBAEI,kBACA,WACA,YACA,4DAQA,sBlDxNE,iFkDmNA,8DAcN,oCAEI,aACA,eACA,iBACA,kBlDtOE,mHkDyOA,kBACA,cAKF,2CACE,cACA,UACA,WACA,WAKN,0BAEI,OAGA,iCACE,cACA,UACA,WACA,WAIF,6CACE,UAUN,6BAEI,kBACA,SACA,OACA,WAGA,YACA,qFAIA,sBAIJ,mBAEI,kBACA,MACA,OACA,sDACA,iBAIA,mRASJ,wBAEI,WACA,YACA,kBACA,UAIA,wVASJ,iBAEI,aACA,kBACA,MACA,OACA,mBACA,uBACA,WACA,YACA,gBACA,iBACA,4GACA,6BAIA,UAIA,sJAIJ,8BpD/UE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEsDoWE,wDA3VF,uCAEI,8DAMJ,sCAEI,sGAIJ,2CAEI,gFACA,YAMJ,2CAEI,uBAgBJ,sOAGI,kIAQF,4DAEI,sEAIJ,0DAEI,0HAMJ,2DAEI,sCAMJ,sFAEI,mBEvHR,cAgOE,UARA,WAnNE,aACA,eACA,QACA,SACA,OACA,mBACA,uBACA,sBAGA,oBAUA,0CAgIJ,uBxDrHE,sBwD+HF,qBxD/HE,4BwDmJF,uBAEI,eChMM,CDoMN,4CANJ,uBAOM,gBASN,uBAEI,eC/MM,CDqNV,uBzD1JE,oHAoGW,CyDkBb,uBrD3KE,kBqDsCF,kEAII,aAIJ,uBA0LE,2BAOF,4CpDKA,kCoDFI,oBpDzMA,2GA2MJ,kCoDEA,8CAEI,sBACA,uBAIJ,8CAEI,oBACA,iBClQI,CDwDR,uBpD8LA,iCoD1LI,aACA,mBACA,2BACA,sBACA,kDACA,UpDtBA,iEA2MJ,iCoDlLE,2CAEI,8CACA,UACA,oBAIA,mXACE,CAKN,8CAEI,8CAIA,uDAKN,qBtDxCE,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEIkNF,oCoDnJI,WACA,YACA,sBACA,SAGA,iBACA,oBpD/DA,6DA2MJ,oCoDtIA,6BAEI,eACA,2CAIJ,uBAGI,aACA,cACA,mBACA,sBvDmGJ,qCD1LE,cM0GF,2DN1GE,yBMmJA,oCAGI,WArB0B,CAuD5B,oIAeF,yBAIA,WAtE8B,CAkF9B,uDAEI,gCAKF,8DAEI,yBAKA,WA5FwB,CAkGhC,0CAEI,8BkD7IJ,uBxDhGE,4BM0GF,6DN1GE,uCMmJA,qCAGI,WArB0B,CAuD5B,sIAeF,yBAIA,WAtE8B,CAkF9B,wDAEI,gCAKF,+DAEI,yBAKA,WA5FwB,CAkGhC,2CAEI,8BkDvIJ,6CnC9CE,WACA,YACA,YACA,eAIF,kGAGI,WACA,WoC/Gc,CDsJlB,6CpDsGA,+BA3MI,6GA2MJ,+BsDxDA,4BtDwDA,yBsDnDI,UACA,WACA,WA7BG,CtD7HH,2EA2MJ,yBsD7CA,4BAEI,WACA,WApCG,CA3JP,YAsNA,qBACA,kBACA,aACA,qFAzHA,mD1DhEE,yBAEA,qD0DwEF,mD1D1EE,yBAEA,qDAFA,qBAEA,iD0DyFF,yD1D3FE,sBAEA,mD0DmGF,yD1DrGE,sBAEA,gDAFA,kBAEA,4C0DvBF,4BtD8NA,qBsDgCA,kBACA,MACA,SACA,UACA,eACA,oBA9PI,kOtDcA,2EA2MJ,qBsDrNA,mBA6ME,sBACA,WACA,YACA,6BACA,kBACA,YAIA,sJACE,CAnNJ,4BA+NE,aACA,kBACA,mBACA,uBACA,wDAIA,sgBACE,CApOJ,mB3DcE,mH2D8OA,sBACA,WACA,YACA,kBACA,kBAEA,oBACA,UA7PE,wCAoQJ,YAhQI,iDAoQJ,8DtD5QI,qHsD+QF,gEAnQE,iDAyQJ,gEtDrRI,qHsDwRF,8DAtQF,sBA6QA,YACA,oBA1QI,yCA8QJ,iBA1QI,kDA8QJ,eACA,oBpDpMA,mJN1GE,yBMmJA,gFAGI,WArB0B,CAuD5B,4NAeF,yBAIA,WAtE8B,CAkF9B,mGAEI,gCAKF,0GAEI,yBAKA,WA5FwB,CAkGhC,sFAEI,8BoD5LJ,4BpDpCE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,uEAGI,kBACA,kBACA,UACA,oBACA,WAIJ,oCAGI,4DAMA,UAOF,wDAEI,sGAIJ,uDAEI,MAEA,OACA,8CACA,sEAMJ,kEAEI,6BAEA,+BAMJ,8EAEI,uLACE,CAON,gFAEI,4FAKA,wMAoPN,uEAGI,oBAEA,qBACA,WACA,WoDxSsC,CpD6SxC,+GAGI,2CAEA,6CACA,sCACA,uCAIJ,uDAEI,sCACA,uCApQN,uENnGE,yBAEA,qDM0IA,0CAGI,WArB0B,CAuD5B,gJAeF,yBAIA,WAtE8B,CAkF9B,6DAEI,gCAKF,oEAEI,yBAKA,WA5FwB,CAkGhC,gDAEI,8BqD3QJ,SzD6CE,kCACA,mCFpBA,+BAEA,4GAFA,kBAEA,2DAFA,oBAEA,8DAFA,gBAEA,0DAFA,6BAEA,2EAFA,qBAEA,2EAFA,4FAEA,sE2D8CA,mBACA,kBCrBA,kBDqIA,aACA,cACA,uBACA,sBAEA,SACA,cACA,iBACA,YACA,aACA,gBACA,kBACA,mBACA,eACA,wBACA,UAxHF,8B3DpDE,qB2D8DF,wB3D9DE,sB2DkEE,kBA6GF,2BACE,UACA,SA3MJ,oBAEI,cAIJ,kBC4CE,kBDqLA,aACA,mBACA,uBACA,eACA,oBAjOF,qBAEI,8BAIA,qBAKA,cACA,UAIJ,eAEI,8BAIA,WACA,YACA,eACA,UAgNF,oCACE,sBACA,mBACA,uBAGF,uCACE,gBACA,mBA7KJ,sC3D7CE,cAEA,wC2DqDF,gC3DvDE,cAEA,wC2DyDE,kBA0KJ,sEAGI,uBA1NJ,oEvD2LA,iCA3MI,2JA2MJ,iCuD7KA,iBrDtBE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CqD0KA,kBACA,MACA,OACA,WACA,YACA,gBrD3KF,iDAGI,kBACA,kBACA,UACA,oBACA,WAIJ,yBAGI,4DAMA,UAOF,6CAEI,sGAIJ,4CAEI,MAEA,OACA,8CACA,sEAMJ,uDAEI,6BAEA,+BAMJ,mEAEI,uLACE,CAON,qEAEI,4FAKA,wMA2NN,iDAGI,qBAEA,sBACA,WACA,YAKF,4CAEI,sCACA,uCAhON,iDNnGE,yBAEA,mDM0IA,+BAGI,WArB0B,CAuD5B,0HAeF,yBAIA,WAtE8B,CAkF9B,kDAEI,gCAKF,yDAEI,yBAKA,WA5FwB,CAkGhC,qCAEI,8BuDzRJ,aAaE,UAZe,CA6BjB,SF4IE,WElJO,CAuBT,kBF2HE,WEjIO,CDxCT,mBAwIE,aACA,kBACA,MACA,OACA,uBACA,WACA,YACA,oBACA,UAtEF,0D5DxBE,qBAEA,+C4DqDF,qD5DvDE,cAEA,0C4DgCF,0DAEI,oBA8CsB,CAjB1B,qDAEI,YACA,cAeiB,CAjIrB,4BAEI,oDACA,UAIJ,uCAEI,oBACA,sBACA,WACA,uBAIJ,kCAEI,kBACA,cAIJ,uDAEI,UAKJ,+CAEI,sOAKJ,8DAEI,gBAIJ,qDAEI,gCAKJ,+EAEI,uBEpCJ,kBAMI,kBAlBJ,gFAEI,sOAqBJ,wBAEI,kBACA,YACA,YACA,aACA,kBAIJ,+BAEI,iCACA,aACA,kBAOA,6FACE,aAMN,uCAEI,kBAIJ,kCHmFE,kBGvCA,aACA,cACA,sCAIA,sBA9CF,iEAEI,2BAIJ,+DAEI,yBAIJ,kEAEI,uBAKF,4DAEI,gCCxFN,4B7DwDE,kCACA,mCFpBA,+BAEA,6GAFA,iBAEA,2DAFA,oBAEA,+DAFA,gBAEA,2DAFA,6BAEA,4EAFA,wBAEA,+EAFA,8FAEA,qEEwDA,cAoDE,aAEA,mB6DhJA,SACA,UACA,oBAIA,sD7D2JJ,oCA2BA,qBACA,QACA,YACA,WA1BI,iB6D3JJ,wCAEI,gBAIA,UACA,oBCtBJ,kC9DwDE,kCACA,mCFpBA,+BAEA,6GAFA,iBAEA,2DAFA,oBAEA,+DAFA,gBAEA,2DAFA,6BAEA,4EAFA,wBAEA,+EAFA,8FAEA,qEEwDA,cAoDE,aAEA,mBEoGJ,kE4DhPI,mB9D6JJ,0CA2BA,qBACA,QACA,YACA,WA1BI,iBE5HA,uFA2MJ,gCA3MI,uFA2MJ,kC6D7PA,sBAgEE,kBACA,eAGF,2EAGI,eACA,oBApEJ,+B7DyPA,kCA3MI,iFA2MJ,kC6DrPA,gC7DqPA,mCA3MI,mFA2MJ,mC8DrDA,wB5D9IE,wBACA,qBACA,oBACA,yBACA,iCACA,mCAEA,0CAIF,+GAGI,kBACA,kBACA,UACA,oBACA,WAIJ,wDAGI,4DAMA,UAOF,4EAEI,sGAIJ,2EAEI,MAEA,OACA,8CACA,sEAMJ,sFAEI,6BAEA,+BAMJ,kGAEI,uLACE,CAON,oGAEI,4FAKA,wMA2NN,+GAGI,qBAEA,sBACA,WACA,YAKF,2EAEI,sCACA,uC4D1KN,wB5DyPE,kBACA,MACA,OACA,WACA,YAGA,oB4DrbF,gB/DfE,0B+DyxBA,eAhEA,oBACA,qBACA,kBACA,sBACA,gBAEA,oCAszBF,mElEj/CE,qBkEg7CF,sElEh7CE,sBkE4hDF,WAGE,iGlE/hDA,qWkEoiDF,WAGE,4FlEviDA,uBkEyiBF,uClEliBE,oBAEA,8C+DUF,uG/DnBE,qBgEeF,8LhEfE,qBiEmDF,8EjEnDE,sBiE6DF,+EjE7DE,sBkE0/CA,8ElE1/CA,qBkEogDA,8ElEpgDA,qBkEoxBF,oCAEI,QACA,8DACA,oBAjCF,kD9DviBF,kCA3MI,uHA2MJ,kC8D+iBE,mD9D/iBF,kCA3MI,yHA2MJ,kC8DujBE,qF9DvjBF,+BA3MI,6LA2MJ,+B8DjOA,uBhEgCE,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uEkEgtCA,YAIA,sDASA,WACA,YACA,YACA,gBACA,gBACA,6DACA,UAGA,kCACE,aAGF,6BACE,aAIF,+BACE,gBAIF,wCACE,wBAySJ,WAGE,kDAlSA,qDAIA,uDAJA,qDAIA,wDAJA,qDAIA,8CAJA,qDAIA,WAmSF,WAGE,6CA1SA,qDAIA,WA2RF,WAGE,oOArRA,sBACA,0BAIA,+NALA,sBACA,0BAIA,kOALA,sBACA,0BAIA,oMALA,sBACA,0BAIA,WAqRF,WAGE,qNA7RA,sBACA,0BAIA,WA9wCF,uBhEcE,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uEkEgtCA,YAIA,sDAsEA,UACA,mBArxCA,wGA6xCA,UAvxCF,+B9DsMA,iCA3MI,iFA2MJ,iC8DnME,4D9DmMF,kCA3MI,2IA2MJ,kC8D9LA,+B9D8LA,kCA3MI,iFA2MJ,kC8D3LE,4D9D2LF,iCA3MI,2IA2MJ,iC8DpLA,4DAEI,sFACA,YAMJ,wBA6ME,WClPK,C7D0GP,+GN1GE,iCMmJA,8DAGI,W4D4oBsC,C5D1mBxC,wLAeF,yBAIA,W4DwlB0C,ChEtqB5C,gCA2BA,qBACA,QACA,YACA,WA1BI,iBgEo7CJ,uDlErjDE,yBsCkBA,gFtClBA,oCsCkBA,sFtClBA,oCsCQA,gDtCDA,4BAEA,sDkEwyBF,4C9DjmBA,wBA3MI,2GA2MJ,wB2BnJA,yDASM,wFmCypBJ,wEACE,YAkGF,qEACE,aAGF,yDAEE,aA3xBJ,0BAuOE,YA6kBA,iBnCpyBF,2DASM,wFcqFN,2DAEI,iBdhGJ,mLASM,8FckGJ,mLAEI,ed3FN,qDAEI,8JA7CF,4EACE,GACE,gJAGF,IACE,8IACA,kJAGF,IACE,8JACA,oJAGF,KACE,iJAhBJ,oEACE,GACE,gJAGF,IACE,8IACA,kJAGF,IACE,8JACA,oJAGF,KACE,iJmC2qBJ,iDACE,YrBvrBJ,oQ7CzCE,6B6CyCF,+a7CzCE,6B6CyCF,4U7ClCE,qBAEA,+C6C+EF,6E1C5HE,0BCyCE,6KDpCE,0B0CyIN,8E1C9IE,0BCyCE,+KDpCE,0B0CqGN,oFAEI,eCzHS,CxC2Jb,mHAQM,a4D0wBN,8C9D5qBA,uBA3MI,+GA2MJ,uB8DopBA,iDAGI,aACA,uBACA,6BACA,UAIJ,gDAEI,UrB1yBJ,4GAEI,esBzEkB,CDoDtB,0BAukCE,mBACA,WACA,YACA,UACA,iBAIA,gBrBzlCF,oQ7CzCE,6B6CyCF,+a7CzCE,6B6CyCF,4U7ClCE,qBAEA,+C6C+EF,6E1C5HE,0BCyCE,6KDpCE,0B0CyIN,8E1C9IE,0BCyCE,+KDpCE,0BGyIN,mHAQM,a4Dm8CN,yDlErjDE,6BgEFF,4D5DkNA,wB4D/MI,kBACA,WEgnC+D,C9D7mC/D,2IA2MJ,wB8Ds9BA,8C9Dt9BA,uB8D09BI,SACA,W9DtqCA,+GA2MJ,uB8D+9BE,oFAEI,sCnCpnCN,2DASM,kFcgDN,2DAEI,iBd3DJ,mLASM,wFc4DJ,mLAEI,edrDN,qDAEI,wIA7CF,iEACE,GACE,0IAGF,IACE,8IACA,4IAGF,IACE,8JACA,8IAGF,KACE,2IAhBJ,yDACE,GACE,0IAGF,IACE,8IACA,4IAGF,IACE,8JACA,8IAGF,KACE,2ImCilCN,iDAEI,YACA,mBACA,sBAGA,eAEA,kB9D97BJ,+B8Dk8BI,oBAIA,oB9DjpCA,qHA2MJ,+B8D08BA,mFAEI,mBACA,iBAtmCJ,2BA2hCE,UACA,W5BjkCA,mFtClBA,oCsCkBA,6EtClBA,oCkEslCF,0DAMI,aA7XF,iFACE,YAkGF,8EACE,aAGF,kEAEE,a5D9tBJ,mLAQM,a4Dm8CN,yFlErjDE,6BkEgmCF,2EAEI,gBAjIJ,8EnCv4BE,4B3BsHF,wBA3MI,+KA2MJ,wB8D0xBA,2FnCh5BE,yCmC6+BuC,CAvDzC,gF9Dh0BA,wBA3MI,mLA2MJ,wByCxBA,4HAEI,2BqB03B4C,CnCv/BhD,6FAGM,4H3B3DF,6M2B8DI,0HcwFR,6FAEI,iBdhGJ,uPAGM,kI3B3DF,ohB2B8DI,gIcqGN,uPAEI,ed3FN,uFAEI,wLA7CF,yFACE,GACE,oJAGF,IACE,8IACA,sJAGF,IACE,8JACA,wJAGF,KACE,qJAhBJ,iFACE,GACE,oJAGF,IACE,8IACA,sJAGF,IACE,8JACA,wJAGF,KACE,qJA2BN,iMAEI,wLA7CF,6FACE,GACE,sJAGF,IACE,8IACA,wJAGF,IACE,8JACA,0JAGF,KACE,uJAhBJ,qFACE,GACE,sJAGF,IACE,8IACA,wJAGF,IACE,8JACA,0JAGF,KACE,uJmC87BN,+EnCx5BE,2BmCm+BuC,CAvEzC,4FnC55BE,yCmC6+BuC,CrB/4BzC,6HAEI,2BqB03B4C,CApDhD,iHnCt6BE,2BmCm+BuC,CAzDzC,8HnC16BE,yCmC6+BuC,CAucvC,2IAv7CE,gBACA,YAMJ,4BAEI,aACA,8BACA,sBAGF,4CAEI,mBACA,iBCjFc,CD0FpB,sCAEI,sBA83CJ,4ElEj/CE,yB6CqDF,oKAII,gBsB1DkB,CDo9BtB,kIAEI,U5Bn8BF,uFtCXA,4BAEA,oDsCDA,gFtCDA,4BAEA,oDkEw+CF,4ElE1+CE,cAEA,sC+DoBF,wJ/DtBE,cAEA,sCkEgiBF,gDlEliBE,oBAEA,4CiEoDF,wFjEtDE,cAEA,sCsCSA,iFtCXA,4BAEA,oD6CgCF,iQ7ClCE,qBAEA,6C6CgCF,4a7ClCE,qBAEA,6C6CgCF,yU7ClCE,qBAEA,6CkE27BF,iGAEI,UAr0BJ,0BAqyBE,oBA0gBF,iDlEh7CE,sBkE4hDF,WAGE,4ElE/hDA,sSkEoiDF,WAGE,uElEviDA,uBkEi/CF,8ClEj/CE,sB+DmBF,kF/DnBE,sBgEeF,oJhEfE,sBiEmDF,yDjEnDE,qBiE6DF,0DjE7DE,qBkE0/CA,yDlE1/CA,sBkEogDA,yDlEpgDA,sBsCkBA,mDtClBA,oC6CyCF,uK7CzCE,6BkE4hDF,8CAGE,4ElE/hDA,0QkEoiDF,8CAGE,uElEviDA,gBkEs5BF,8CA2lBA,8ClEj/CE,gBkEs5BF,8CHn4BA,kF/DnBE,gBkEs5BF,8CFv4BA,oJhEfE,gBkEs5BF,8CDn2BA,yDjEnDE,gBkEs5BF,8CDz1BA,0DjE7DE,gBkEs5BF,8CAomBE,yDlE1/CA,gBkEs5BF,8CA8mBE,yDlEpgDA,gBkEs5BF,8C5Bp4BE,mDtClBA,8BkEs5BF,8CrB72BA,uK7CzCE,uBkEy6BF,8CAEI,eAvyBF,iDlEpIA,yBkEy0CF,oDAII,iB9Dx0CA,2H8D80CE,gBAaF,0OAGE,cAGF,qIAEE,eAEA,iBC30CS,CD80CX,qIAEE,kBAEA,gBAKF,qIACE,QAGF,qIACE,QAGF,qHACE,QAGF,qIACE,QAGF,uIACE,QAcF,6KAIE,iBAGF,6LAGE,kBC/3CqB,CDk4CvB,6LAEE,gBCl4CqB,CnE/E3B,MAGM,4kCAOF,oBA0CF,yBAEA,mDA5CE,sBA0CF,yBAEA,qDAtCE,uBAoCF,sBAEA,mDAtCE,oBAoCF,sBAEA,gDA5CE,kBA0CF,yBAEA,iDA5CE,uBA0CF,sBAEA,mDA5CE,yBA0CF,sBAEA,qDA5CE,uBA0CF,sBAEA,mDA5CE,qBA0CF,sBAEA,iDA5CE,uCA0CF,iCAEA,kFA5CE,yCA0CF,iCAEA,oFA5CE,oCA0CF,iCAEA,+EA5CE,wCA0CF,iCAEA,mFA5CE,oCA0CF,iCAEA,+EA5CE,kCA0CF,iCAEA,6EA5CE,oCA0CF,iCAEA,+EA5CE,+BA0CF,iCAEA,0EA5CE,mCA0CF,iCAEA,8EA5CE,+BA0CF,iCAEA,0EA5CE,iCA0CF,sBAEA,8DA5CE,mCA0CF,sCAEA,mFA5CE,8BA0CF,sCAEA,8EA5CE,kCA0CF,sCAEA,kFA5CE,8BA0CF,sCAEA,8EA5BA,uBA0BA,oCAEA,8DA5BA,yBA0BA,oCAEA,gEoEvDJ,iBpEqDI,yBAEA,mDATA,WoE1CF,aACA,eACA,sBACA,8BACA,sBACA,WACA,UCUA,kGrEiCE,WAEA,wCMiGF,kONnGE,sBAEA,mDM0IA,8HAGI,WArB0B,CAuD5B,oXAeF,yBAIA,WAtE8B,CAkF9B,oKAEI,gCAKF,kLAEI,yBAKA,WA5FwB,CAkGhC,0IAEI,8B8D/QJ,sBACE,aACA,kBACA,sBACA,WACA,WExBS,CF2BX,0BACE,oBACA,cACA,mBACA,YACA,iBACA,UAEA,uCACE,2BACA,SAGF,qCACE,yBACA,QAIJ,wBlEsBE,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,6DAFA,iBAEA,8DAFA,gBAEA,6DAFA,uBAEA,wEAFA,wBAEA,iFAFA,gGAEA,uEIkNF,kCgEnNE,uBACA,mBACA,gBACA,UhEKE,mEA2MJ,kCiE1NA,kClE1BE,yBCyCE,uFDpCE,yBiEuCR,wBACE,MAEA,WAEA,OACA,WACA,oDhEVI,mEgEcF,QAEA,UAGF,8CACE,WEtEgB,CFyElB,kDACE,WEzEqB,CF4EvB,gDACE,sDACA,UAIJ,kCrErBI,oHqEwBF,WACA,oDAEA,0DACE,aAGF,gEACE,sDAKJ,yEACE,YAEA,8GhEuJA,kCA3MI,+OA2MJ,kCgEjJA,8CACE,WE7Fe,CFgGjB,kDACE,cAGF,gDhEyIA,kCA3MI,mHA2MJ,kCgEnIA,kDACE,YElHmB,CFqHrB,oDACE,oBACA,kBEtH6B,CFyH/B,wHAEE,sBAKJ,wBACE,mCAGF,iCrEhFI,oHqEmFF,mCAMA,yEACE,YAGF,6EACE,eAGF,2EhE8FA,kCgE3FE,kBE7ImC,ClE6BjC,yKA2MJ,kCgEtFF,+BACE,gBEhLW,CFmLb,qCACE,gBE5JiB,CF+JnB,qCACE,gBEhLkB,CFmLpB,yCACE,iBE3KqB,CF8KvB,+CACE,iBCxIA,yBACE,sBACE,WClDc,CDqDhB,0BACE,WCrDmB,CDwDrB,wBACE,oDAGF,kCACE,oDAEA,uEjE6LJ,kCA3MI,iKA2MJ,kCiEvLI,oDACE,kBC1DgC,CD8DpC,+BACE,gBC5Ec,kBpE4DhB,kCACA,mCFpBA,+BAEA,kEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,iBAEA,8DAFA,gBAEA,6DAFA,2BAEA,2EAFA,wBAEA,iFAFA,gGAEA,uEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,6DAFA,oBAEA,iEAFA,gBAEA,6DAFA,+BAEA,+EAFA,wBAEA,iFAFA,gGAEA,uEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,qBAEA,kEAFA,gBAEA,6DAFA,sBAEA,sEAFA,wBAEA,iFAFA,gGAEA,uEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,mBAEA,8DAFA,mBAEA,gEAFA,gBAEA,6DAFA,6BAEA,8EAFA,wBAEA,iFAFA,gGAEA,uEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,iBAEA,4DAFA,iBAEA,8DAFA,gBAEA,6DAFA,sBAEA,sEAFA,wBAEA,iFAFA,gGAEA,uEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,6DAFA,iBAEA,8DAFA,gBAEA,6DAFA,uBAEA,wEAFA,wBAEA,iFAFA,gGAEA,uEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,eAEA,0DAFA,oBAEA,iEAFA,gBAEA,6DAFA,yBAEA,0EAFA,wBAEA,iFAFA,gGAEA,uEEtCA,2BAuDA,kCACA,mCFpBA,+BAEA,+GAFA,kBAEA,8DAFA,qBAEA,kEAFA,gBAEA,6DAFA,6BAEA,8EAFA,wBAEA,iFAFA,gGAEA,uEEtCA,uBAuDA,kCACA,mCFpBA,+BAEA,2GAFA,eAEA,sDAFA,mBAEA,4DAFA,gBAEA,yDAFA,wBAEA,qEAFA,wBAEA,6EAFA,4FAEA,mEEtCA,uBAuDA,kCACA,mCFpBA,+BAEA,2GAFA,kBAEA,0DAFA,oBAEA,6DAFA,gBAEA,yDAFA,6BAEA,0EAFA,wBAEA,6EAFA,4FAEA,mEEtCA,yBAuDA,kCACA,mCFpBA,+BAEA,6GAFA,iBAEA,2DAFA,oBAEA,+DAFA,gBAEA,2DAFA,6BAEA,4EAFA,wBAEA,+EAFA,8FAEA,qEEtCA,wBAuDA,kCACA,mCFpBA,+BAEA,4GAFA,kBAEA,2DAFA,oBAEA,8DAFA,gBAEA,0DAFA,6BAEA,2EAFA,qBAEA,2EAFA,4FAEA,sEEtCA,0BAuDA,kCACA,mCFpBA,+BAEA,8GAFA,iBAEA,4DAFA,iBAEA,6DAFA,gBAEA,4DAFA,6BAEA,6EAFA,qBAEA,6EAFA,8FAEA,wE","file":"material-components-web.min.css","sourcesContent":["//\n// Copyright 2019 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/base/mixins\" as base-mixins;\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"./variables\";\n\n/// Styles applied to the component's touch target wrapper element.\n@mixin wrapper($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n .mdc-touch-target-wrapper {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Ensure that styles are only emitted once across all components that\n // have increased touch targets.\n @include base-mixins.emit-once(\"mdc-touch-target/wrapper\") {\n // NOTE: Will change to `inline-block` in the future, but keeping as is\n // temporarily for backwards-compatibility.\n display: inline;\n }\n }\n }\n}\n\n/// Styles applied to the component's inner touch target element.\n/// By default, only sets the inner element height to the minimum touch target\n/// height ($mdc-touch-target-height).\n/// @param {Boolean} $set-width [false] - Sets the inner element width to the\n/// minimum touch target width ($mdc-touch-target-width).\n@mixin touch-target($set-width: false, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 50%;\n right: 0;\n height: variables.$height;\n }\n\n @if $set-width {\n @include feature-targeting-mixins.targets($feat-structure) {\n /* @noflip */\n left: 50%;\n width: variables.$width;\n transform: translate(-50%, -50%);\n }\n } @else {\n @include feature-targeting-mixins.targets($feat-structure) {\n left: 0;\n transform: translateY(-50%);\n }\n }\n}\n\n/// Applies margin to the component with the increased touch target,\n/// to compensate for the touch target.\n@mixin margin($component-height, $component-width: null, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n $vertical-margin-value: (variables.$height - $component-height) / 2;\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-top: $vertical-margin-value;\n margin-bottom: $vertical-margin-value;\n }\n\n @if $component-width {\n $horizontal-margin-value: (variables.$width - $component-width) / 2;\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-right: $horizontal-margin-value;\n margin-left: $horizontal-margin-value;\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:map\";\n@use \"sass:math\";\n@use \"sass:meta\";\n@use \"@material/base/mixins\" as base-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as theme-variables;\n@use \"./functions\";\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @for $z-value from 0 through 24 {\n .mdc-elevation--z#{$z-value} {\n @include elevation($z-value, $query: $query);\n }\n }\n\n .mdc-elevation-transition {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition-value();\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n will-change: variables.$property;\n }\n }\n}\n\n///\n/// Called once per application to set up the global default elevation styles.\n///\n@mixin overlay-common($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include overlay-selector_ {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include base-mixins.emit-once(\"mdc-elevation/common/structure\") {\n position: absolute;\n border-radius: inherit;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n @include base-mixins.emit-once(\"mdc-elevation/common/animation\") {\n transition: functions.overlay-transition-value();\n }\n }\n\n @include base-mixins.emit-once(\"mdc-elevation/common/color\") {\n @include overlay-fill-color(variables.$overlay-color, $query: $query);\n }\n }\n}\n\n///\n/// Sets the shadow of the element.\n///\n/// @param {String} $box-shadow - The shadow to apply to the element.\n///\n@mixin shadow($box-shadow, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n /* @alternate */\n box-shadow: $box-shadow;\n }\n}\n\n///\n/// Sets the elevation overlay surface required positioning.\n///\n@mixin overlay-surface-position($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n /* @alternate */\n position: relative;\n }\n}\n\n///\n/// Sets the dimensions of the elevation overlay, including positioning and sizing.\n///\n/// @param {Number} $width - The width of the elevation overlay\n/// @param {Number} [$height] - The height of the elevation overlay\n/// @param {Boolean} [$has-content-sizing] - Set to false if the container has no content sizing\n///\n@mixin overlay-dimensions($width, $height: $width, $has-content-sizing: true, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include overlay-selector_ {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $width;\n height: $height;\n\n @if $has-content-sizing {\n top: 0;\n /* @noflip */\n left: 0;\n } @else {\n top: 50%;\n /* @noflip */\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n }\n}\n\n///\n/// Sets the elevation overlay fill color.\n/// Expected to be called directly on the elevation overlay element.\n///\n/// @param {Color} $color - The color of the elevation overlay.\n///\n@mixin overlay-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n///\n/// Sets the elevation overlay opacity.\n/// Expected to be called from a parent element.\n///\n/// @param {Number} $opacity - The opacity of the elevation overlay.\n///\n@mixin overlay-opacity($opacity, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include overlay-selector_ {\n @include feature-targeting-mixins.targets($feat-color) {\n opacity: $opacity;\n }\n }\n}\n\n// Applies the correct CSS rules to an element to give it the elevation specified by $z-value.\n// The $z-value must be between 0 and 24.\n// If $color has an alpha channel, it will be ignored and overridden. To increase the opacity of the shadow, use\n// $opacity-boost.\n@mixin elevation($z-value, $color: variables.$baseline-color, $opacity-boost: 0, $query: feature-targeting-functions.all()) {\n @if meta.type-of($z-value) != number or not math.is-unitless($z-value) {\n @error \"$z-value must be a unitless number, but received '#{$z-value}'\";\n }\n\n @if $z-value < 0 or $z-value > 24 {\n @error \"$z-value must be between 0 and 24, but received '#{$z-value}'\";\n }\n\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n $color: theme-variables.prop-value($color);\n\n $umbra-z-value: map.get(variables.$umbra-map, $z-value);\n $penumbra-z-value: map.get(variables.$penumbra-map, $z-value);\n $ambient-z-value: map.get(variables.$ambient-map, $z-value);\n\n $umbra-color: rgba($color, variables.$umbra-opacity + $opacity-boost);\n $penumbra-color: rgba($color, variables.$penumbra-opacity + $opacity-boost);\n $ambient-color: rgba($color, variables.$ambient-opacity + $opacity-boost);\n\n $box-shadow: (\n #{\"#{$umbra-z-value} #{$umbra-color}\"},\n #{\"#{$penumbra-z-value} #{$penumbra-color}\"},\n #{$ambient-z-value} $ambient-color,\n );\n\n @include shadow($box-shadow, $query: $query);\n}\n\n// Private\n\n///\n/// Sets the elevation overlay transition value.\n///\n/// @param {String} $duration - The duration of the transition.\n/// @param {String} $easing - The easing function for the transition.\n/// @return {String}\n/// @access private\n///\n@mixin overlay-selector_ {\n .mdc-elevation-overlay {\n @content;\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:map\";\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\";\n@use \"./variables\";\n@use \"./functions\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n :root {\n @include mixins.targets($feat-color) {\n @each $style in map.keys(variables.$property-values) {\n --mdc-theme-#{$style}: #{map.get(variables.$property-values, $style)};\n }\n }\n }\n\n @each $style in map.keys(variables.$property-values) {\n @if $style != \"background\" and $style != \"surface\" {\n .mdc-theme--#{$style} {\n @include mixins.targets($feat-color) {\n @include prop(color, $style, true);\n }\n }\n } @else {\n .mdc-theme--#{$style} {\n @include mixins.targets($feat-color) {\n @include prop(background-color, $style);\n }\n }\n }\n }\n\n // CSS rules for using primary and secondary (plus light/dark variants) as background colors.\n @each $style in (\"primary\", \"secondary\") {\n .mdc-theme--#{$style}-bg {\n @include mixins.targets($feat-color) {\n @include prop(background-color, $style, true);\n }\n }\n }\n}\n\n// Applies the correct theme color style to the specified property.\n// $property is typically color or background-color, but can be any CSS property that accepts color values.\n// $style should be one of the map keys in $mdc-theme-property-values (_variables.scss), or a color value.\n@mixin prop($property, $style, $important: false) {\n $important-rule: if($important, \"!important\", \"\");\n\n @if functions.is-var-with-fallback_($style) {\n #{$property}: functions.get-var-fallback_($style) #{$important-rule};\n /* @alternate */\n #{$property}: functions.var_($style) #{$important-rule};\n } @else if variables.is-valid-theme-prop-value_($style) {\n #{$property}: $style #{$important-rule};\n } @else {\n @if not map.has-key(variables.$property-values, $style) {\n @error \"Invalid style: '#{$style}'. Choose one of: #{map.keys(variables.$property-values)}\";\n }\n $value: map.get(variables.$property-values, $style);\n\n #{$property}: $value #{$important-rule};\n /* @alternate */\n #{$property}: var(--mdc-theme-#{$style}, $value) #{$important-rule};\n }\n}\n","//\n// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:math\";\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/functions\" as theme-functions;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/touch-target/mixins\" as touch-target-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/shape/functions\" as shape-functions;\n@use \"@material/density/functions\" as density-functions;\n@use \"./variables\";\n@use \"@material/elevation/functions\" as elevation-functions;\n\n$ripple-target: \".mdc-button__ripple\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n@mixin theme-baseline($query: feature-targeting-functions.all()) {\n .mdc-button {\n @include density(variables.$density-scale, $query: $query);\n }\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// button styles. It is recommended that most users use `mdc-button-core-styles` instead.\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include touch-target-mixins.wrapper($query); // COPYBARA_COMMENT_THIS_LINE\n @include elevation-mixins.overlay-common($query); // COPYBARA_COMMENT_THIS_LINE\n\n // postcss-bem-linter: define button\n .mdc-button {\n @include base_($query);\n @include shape-radius(small, $query: $query);\n @include container-fill-color(transparent, $query);\n @include disabled-container-fill-color(transparent, $query);\n // The icon CSS class overrides styles defined in the .material-icons CSS\n // class, which is loaded separately so the order of CSS definitions is not\n // guaranteed. Therefore, increase specifity by nesting this class to ensure\n // overrides apply.\n .mdc-button__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include icon_;\n }\n }\n\n .mdc-button__touch {\n @include touch-target-mixins.touch-target($query: $query);\n }\n\n @include ink-color(primary, $query);\n @include disabled-ink-color(variables.$disabled-ink-color, $query);\n }\n\n .mdc-button__label + .mdc-button__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include icon-trailing_;\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n svg.mdc-button__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include icon-svg_;\n }\n }\n\n .mdc-button--raised,\n .mdc-button--unelevated,\n .mdc-button--outlined {\n .mdc-button__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Icons inside contained buttons have different styles due to increased button padding\n @include icon-contained_;\n }\n }\n\n .mdc-button__label + .mdc-button__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include icon-contained-trailing_;\n }\n }\n }\n\n .mdc-button--raised,\n .mdc-button--unelevated {\n @include filled_($query);\n }\n\n .mdc-button--raised {\n @include raised_($query);\n }\n\n .mdc-button--outlined {\n @include outlined_($query);\n }\n\n .mdc-button--touch {\n @include touch-target-mixins.margin(\n $component-height: variables.$height, $query: $query);\n }\n // postcss-bem-linter: end\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// button styles. It is recommended that most users use `mdc-button-core-styles` instead.\n@mixin ripple($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-button {\n @include ripple-mixins.surface($query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.radius-bounded(\n $query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.states(\n $color: primary, $query: $query, $ripple-target: $ripple-target);\n\n #{$ripple-target} {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n // Ripple needs content-box as the box sizing and box-sizing: border-box\n // is often set as a default, so we override that here.\n box-sizing: content-box;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n }\n\n // Ripple targets inside outlined buttons set their own `top`/`left`,\n // depending on the border width.\n &:not(.mdc-button--outlined) #{$ripple-target} {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: 0;\n left: 0;\n }\n }\n }\n\n .mdc-button--raised,\n .mdc-button--unelevated {\n @include ripple-mixins.states(\n $color: on-primary, $query: $query, $ripple-target: $ripple-target);\n }\n}\n\n@mixin filled-accessible($container-fill-color, $query: feature-targeting-functions.all()) {\n $fill-tone: theme-functions.tone($container-fill-color);\n\n @include container-fill-color($container-fill-color, $query);\n\n @if ($fill-tone == \"dark\") {\n @include ink-color(text-primary-on-dark, $query);\n @include ripple-mixins.states(\n $color: text-primary-on-dark, $query: $query, $ripple-target: $ripple-target);\n } @else {\n @include ink-color(text-primary-on-light, $query);\n @include ripple-mixins.states(\n $color: text-primary-on-light, $query: $query, $ripple-target: $ripple-target);\n }\n}\n\n///\n/// Sets the container fill color to the given color for an enabled button.\n/// @param {Color} $color - The desired container fill color.\n///\n@mixin container-fill-color($color, $query: feature-targeting-functions.all()) {\n // :not(:disabled) is used to support link styled as button\n // as link does not support :enabled style\n &:not(:disabled) {\n @include container-fill-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the container fill color to the given color for a disabled button.\n/// @param {Color} $color - The desired container fill color.\n///\n@mixin disabled-container-fill-color($color, $query: feature-targeting-functions.all()) {\n &:disabled {\n @include container-fill-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the outline color to the given color for an enabled button.\n/// @param {Color} $color - The desired outline color.\n///\n@mixin outline-color($color, $query: feature-targeting-functions.all()) {\n &:not(:disabled) {\n @include outline-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the outline color to the given color for a disabled button.\n/// @param {Color} $color - The desired outline color.\n///\n@mixin disabled-outline-color($color, $query: feature-targeting-functions.all()) {\n &:disabled {\n @include outline-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the icon color to the given color for an enabled button.\n/// @param {Color} $color - The desired icon color.\n///\n@mixin icon-color($color, $query: feature-targeting-functions.all()) {\n &:not(:disabled) {\n @include icon-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the icon color to the given color for a disabled button.\n/// @param {Color} $color - The desired icon color.\n///\n@mixin disabled-icon-color($color, $query: feature-targeting-functions.all()) {\n &:disabled {\n @include icon-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the ink color to the given color for an enabled button,\n/// and sets the icon color to the given color unless `mdc-button-icon-color`\n/// is also used.\n/// @param {Color} $color - The desired ink color.\n///\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n &:not(:disabled) {\n @include ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the ink color to the given color for a disabled button,\n/// and sets the icon color to the given color unless `mdc-button-icon-color`\n/// is also used.\n/// @param {Color} $color - The desired ink color.\n///\n@mixin disabled-ink-color($color, $query: feature-targeting-functions.all()) {\n &:disabled {\n @include ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets density scale for button.\n///\n/// @param {Number | String} $density-scale - Density scale value for component. Supported density scale values `-3`,\n/// `-2`, `-1`, `0`.\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n @include height($height, $query: $query);\n\n @if $density-scale != 0 {\n @include touch-target-reset_($query: $query);\n }\n}\n\n///\n/// Resets touch target-related styles. This is called from the density mixin to\n/// automatically remove the increased touch target, since dense components\n/// don't have the same default a11y requirements.\n/// @access private\n///\n@mixin touch-target-reset_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-top: 0;\n margin-bottom: 0;\n }\n\n .mdc-button__touch {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n }\n }\n}\n\n///\n/// Sets custom height for button.\n/// @param {Number} $height - Height of button in `px`.\n///\n@mixin height($height, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n}\n\n@mixin shape-radius($radius,\n$rtl-reflexive: false,\n$density-scale: variables.$density-scale,\n$query: feature-targeting-functions.all()) {\n\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n $resolved-radius: shape-functions.resolve-percentage-radius($height, $radius);\n\n @include shape-mixins.radius($resolved-radius, $rtl-reflexive, $query: $query);\n\n #{$ripple-target} {\n @include shape-mixins.radius($resolved-radius, $rtl-reflexive, $query: $query);\n }\n}\n\n///\n/// Sets horizontal padding to the given number.\n/// @param {Number} $padding\n///\n@mixin horizontal-padding($padding, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // $padding should be a single value; enforce it by specifying all 4 sides in the output\n padding: 0 $padding 0 $padding;\n }\n}\n\n@mixin outline-width(\n $outline-width,\n $padding: variables.$contained-horizontal-padding,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n // Note: Adjust padding to maintain consistent width with non-outlined buttons\n $padding-value: math.max($padding - $outline-width, 0);\n\n @include horizontal-padding($padding-value, $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n border-width: $outline-width;\n }\n\n #{$ripple-target} {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: -$outline-width;\n left: -$outline-width;\n border: $outline-width solid transparent;\n }\n }\n\n .mdc-button__touch {\n @include feature-targeting-mixins.targets($feat-structure) {\n left: -$outline-width;\n width: calc(100% + 2 * #{$outline-width});\n }\n }\n}\n\n///\n/// Sets the button label to overflow as ellipsis\n///\n@mixin label-overlow-ellipsis($query: feature-targeting-functions.all()) {\n .mdc-button__label {\n @include typography-mixins.overflow-ellipsis($query: $query);\n }\n}\n\n@mixin base_($query) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include typography-mixins.typography(button, $query);\n @include horizontal-padding(variables.$horizontal-padding, $query);\n @include elevation-mixins.overlay-surface-position($query: $query);\n @include elevation-mixins.overlay-dimensions(100%, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n // position: relative; already set in mdc-elevation-overlay-surface-position\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 64px;\n border: none;\n outline: none;\n /* @alternate */\n line-height: inherit;\n user-select: none;\n -webkit-appearance: none;\n // Even though `visible` is the default, IE 11 computes the property as\n // `hidden` in some cases, unless it's explicitly defined here.\n overflow: visible;\n vertical-align: middle;\n }\n\n &::-moz-focus-inner {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0;\n border: 0;\n }\n }\n\n // postcss-bem-linter: ignore\n &:active {\n @include feature-targeting-mixins.targets($feat-structure) {\n outline: none;\n }\n }\n\n &:hover {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: pointer;\n }\n }\n\n &:disabled {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: default;\n pointer-events: none;\n }\n }\n}\n\n@mixin icon_ {\n @include rtl-mixins.reflexive-box(margin, right, 8px);\n\n display: inline-block;\n width: 18px;\n height: 18px;\n font-size: 18px;\n vertical-align: top;\n}\n\n@mixin icon-trailing_ {\n @include rtl-mixins.reflexive-box(margin, left, 8px);\n}\n\n@mixin icon-svg_ {\n fill: currentColor;\n}\n\n@mixin icon-contained_ {\n @include rtl-mixins.reflexive-property(margin, -4px, 8px);\n}\n\n@mixin icon-contained-trailing_ {\n @include rtl-mixins.reflexive-property(margin, 8px, -4px);\n}\n\n@mixin outlined_($query) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include outline-width(variables.$outlined-border-width, $query: $query);\n @include outline-color(variables.$outline-color, $query);\n @include disabled-outline-color(variables.$disabled-container-color, $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n border-style: solid;\n }\n}\n\n@mixin filled_($query) {\n @include horizontal-padding(variables.$contained-horizontal-padding, $query);\n @include container-fill-color(primary, $query);\n @include ink-color(on-primary, $query);\n @include disabled-container-fill-color(variables.$disabled-container-color, $query);\n @include disabled-ink-color(variables.$disabled-ink-color, $query);\n}\n\n@mixin raised_($query) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include elevation-mixins.elevation(2, $query: $query);\n\n &:hover,\n &:focus {\n @include elevation-mixins.elevation(4, $query: $query);\n }\n\n &:active {\n @include elevation-mixins.elevation(8, $query: $query);\n }\n\n &:disabled {\n @include elevation-mixins.elevation(0, $query: $query);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: elevation-functions.transition-value();\n }\n}\n\n///\n/// Sets the container fill color to the given color. This mixin should be\n/// wrapped in a selector that qualifies button state.\n/// @access private\n///\n@mixin container-fill-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n///\n/// Sets the outline color to the given color. This mixin should be\n/// wrapped in a selector that qualifies button state.\n/// @access private\n///\n@mixin outline-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $color);\n }\n}\n\n///\n/// Sets the icon color to the given color. This mixin should be\n/// wrapped in a selector that qualifies button state.\n/// @access private\n///\n@mixin icon-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-button__icon {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n///\n/// Sets the ink color to the given color. This mixin should be\n/// wrapped in a selector that qualifies button state.\n/// @access private\n///\n@mixin ink-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:string\";\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n .mdc-typography {\n @include base($query: $query);\n }\n\n @each $style in map.keys(variables.$styles) {\n .mdc-typography--#{$style} {\n @include typography($style, $query: $query);\n }\n }\n}\n\n@mixin base($query: feature-targeting-functions.all()) {\n $feat-typography: feature-targeting-functions.create-target($query, typography);\n\n @include smooth-font($query: $query);\n @include feature-targeting-mixins.targets($feat-typography) {\n @include theme-mixins.prop(font-family, (\n varname: --mdc-typography-font-family,\n fallback: map.get(variables.$base, 'font-family')\n ));\n }\n}\n\n@mixin typography($style, $query: feature-targeting-functions.all(), $exclude-props: ()) {\n $feat-typography: feature-targeting-functions.create-target($query, typography);\n $style-props: map.get(variables.$styles, $style);\n\n @if not map.has-key(variables.$styles, $style) {\n @error \"Invalid style specified! #{$style} doesn't exist. Choose one of #{map.keys(variables.$styles)}\";\n }\n\n @include smooth-font($query: $query);\n @include feature-targeting-mixins.targets($feat-typography) {\n @each $key, $value in $style-props {\n @if list.index($exclude-props, $key) == null {\n $fallback: $value;\n @if $key == \"font-family\" {\n // Each style has its own font-family custom property, but should\n // fallback to a generic font-family property. This allows\n // customizing the font-family for all styles or only specific ones.\n $fallback: (\n varname: --mdc-typography-font-family,\n fallback: $fallback\n );\n }\n\n @include theme-mixins.prop($key, (\n varname: --mdc-typography-#{$style}-#{$key},\n fallback: $fallback\n ));\n }\n }\n }\n}\n\n/// Applies antialiasing via font-smoothing to text.\n@mixin smooth-font($query: feature-targeting-functions.all()) {\n $feat-typography: feature-targeting-functions.create-target($query, typography);\n\n @include feature-targeting-mixins.targets($feat-typography) {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n }\n}\n\n// Element must be `display: block` or `display: inline-block` for this to work.\n@mixin overflow-ellipsis($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n}\n\n/// Sets a container's baseline that text content will align to.\n///\n/// If the `$display` is set to a flexbox display, only `$top` baseline may be\n/// set. A separate element must be added as a child of the container with a\n/// `$bottom` baseline.\n///\n/// @param {Number} $top - the distance from the top of the container to the\n/// text's baseline.\n/// @param {Number} $bottom - the distance from the text's baseline to the\n/// bottom of the container.\n/// @param {String} $display - the display type of the container. May be `flex`,\n/// `inline-flex`, `block`, or `inline-block`.\n@mixin baseline($top: 0, $bottom: 0, $display: block, $query: feature-targeting-functions.all()) {\n $validDisplayTypes: (flex, inline-flex, block, inline-block);\n\n @if list.index($validDisplayTypes, $display) == null {\n @error \"mdc-typography: invalid display specified! #{$display} must be one of #{$validDisplayTypes}\";\n }\n\n $isFlexbox: $display == \"flex\" or $display == \"inline-flex\";\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: $display;\n\n @if $isFlexbox {\n align-items: baseline;\n }\n }\n\n @if $top > 0 {\n @include baseline-top($top, $query: $query);\n }\n\n @if $bottom > 0 {\n @if $isFlexbox {\n @error \"mdc-typography: invalid baseline with display type. #{$display} cannot specifiy $bottom. Add a separate child element with its own $bottom.\";\n }\n\n @include baseline-bottom($bottom, $query: $query);\n }\n}\n\n/// Sets the baseline of flow text content.\n///\n/// Separate `$top` and `$bottom` baselines may be specified. You should ensure\n/// that the `$top` baseline matches the previous text content's $bottom\n/// baseline to ensure text is positioned appropriately.\n///\n/// See go/css-baseline for reference on how this mixin works.\n///\n/// This is intended for text flow content only (e.g. `

`, `

`, ``,\n/// or `

` with only text content). Use `baseline()` to set the baseline of\n/// containers that are flexbox or have non-flow content children.\n///\n/// @param {Number} $top - the distance from the top of the container to the\n/// text's baseline.\n/// @param {Number} $bottom - the distance from the text's baseline to the\n/// bottom of the container.\n/// @param {Boolean} $lineHeight - the line-height to use for the text. This\n/// is the distance between baselines of multiple lines of text.\n/// @param {String} $display - the display type of the container. May be `block`\n/// or `inline-block`.\n@mixin text-baseline($top: 0, $bottom: 0, $display: block, $lineHeight: normal, $query: feature-targeting-functions.all()) {\n $validDisplayTypes: (block, inline-block);\n\n @if list.index($validDisplayTypes, $display) == null {\n @error \"mdc-typography: invalid display specified! #{$display} must be one of #{$validDisplayTypes}\";\n }\n\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include baseline($display: $display, $top: $top, $bottom: $bottom, $query: $query);\n @include feature-targeting-mixins.targets($feat-structure) {\n @if $top > 0 {\n margin-top: 0;\n /* @alternate */\n line-height: #{$lineHeight};\n }\n\n @if $bottom > 0 {\n margin-bottom: -1 * $bottom;\n }\n }\n}\n\n/// Creates a baseline strut from the top of a container. This mixin is for\n/// advanced users, prefer `baseline()`.\n///\n/// @param {Number} $distance - The distance from the top of the container to\n/// the text's baseline.\n@mixin baseline-top($distance, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n &::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include baseline-strut_($distance);\n\n vertical-align: 0;\n }\n }\n}\n\n/// Creates a baseline strut from the baseline to the bottom of a container.\n/// This mixin is for advanced users, prefer `baseline()`.\n///\n/// @param {Number} $distance - The distance from the text's baseline to the\n/// bottom of the container.\n@mixin baseline-bottom($distance, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n &::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include baseline-strut_($distance);\n\n vertical-align: -1 * $distance;\n }\n }\n}\n\n@mixin baseline-strut_($distance) {\n display: inline-block;\n width: 0;\n height: $distance;\n content: \"\";\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"./variables\";\n@use \"./functions\";\n\n@mixin radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // Even if $rtl-reflexive is true, only emit RTL styles if we can't easily tell that the given radius is symmetrical\n $needs-flip: $rtl-reflexive and list.length($radius) > 1;\n\n @if ($needs-flip) {\n /* @noflip */\n }\n\n border-radius: functions.prop-value($radius);\n\n @if ($needs-flip) {\n @include rtl-mixins.rtl {\n /* @noflip */\n border-radius: functions.flip-radius(functions.prop-value($radius));\n }\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"./variables\";\n\n// Creates a rule that will be applied when an MDC Web component is within the context of an RTL layout.\n//\n// Usage Example:\n//\n// ```scss\n// .mdc-foo {\n// position: absolute;\n// left: 0;\n//\n// @include rtl {\n// left: auto;\n// right: 0;\n// }\n//\n// &__bar {\n// margin-left: 4px;\n// @include rtl(\".mdc-foo\") {\n// margin-left: auto;\n// margin-right: 4px;\n// }\n// }\n// }\n//\n// .mdc-foo--mod {\n// padding-left: 4px;\n//\n// @include rtl {\n// padding-left: auto;\n// padding-right: 4px;\n// }\n// }\n// ```\n//\n// Note that this mixin works by checking for an ancestor element with `[dir=\"rtl\"]`.\n// As a result, nested `dir` values are not supported:\n//\n// ```html\n// \n// \n//
\n//
Styled incorrectly as RTL!
\n//
\n// \n// ```\n//\n// In the future, selectors such as the `:dir` pseudo-class (http://mdn.io/css/:dir) will help us mitigate this.\n@mixin rtl($root-selector: null) {\n @if (variables.$include) {\n @if ($root-selector) {\n @at-root {\n #{$root-selector}[dir=\"rtl\"] &,\n [dir=\"rtl\"] #{$root-selector} & {\n @content;\n }\n }\n } @else {\n [dir=\"rtl\"] &,\n &[dir=\"rtl\"] {\n @content;\n }\n }\n }\n}\n\n// Takes a base box-model property name (`margin`, `border`, `padding`, etc.) along with a\n// default direction (`left` or `right`) and value, and emits rules which apply the given value to the\n// specified direction by default and the opposite direction in RTL.\n//\n// For example:\n//\n// ```scss\n// .mdc-foo {\n// @include rtl-reflexive-box(margin, left, 8px);\n// }\n// ```\n//\n// is equivalent to:\n//\n// ```scss\n// .mdc-foo {\n// margin-left: 8px;\n// margin-right: 0;\n//\n// @include rtl {\n// margin-left: 0;\n// margin-right: 8px;\n// }\n// }\n// ```\n//\n// whereas:\n//\n// ```scss\n// .mdc-foo {\n// @include rtl-reflexive-box(margin, right, 8px);\n// }\n// ```\n//\n// is equivalent to:\n//\n// ```scss\n// .mdc-foo {\n// margin-left: 0;\n// margin-right: 8px;\n//\n// @include rtl {\n// margin-left: 8px;\n// margin-right: 0;\n// }\n// }\n// ```\n//\n// You can also pass an optional 4th `$root-selector` argument which will be forwarded to `mdc-rtl`,\n// e.g. `@include rtl-reflexive-box(margin, left, 8px, \".mdc-component\")`.\n//\n// Note that this function will always zero out the original value in an RTL context.\n// If you're trying to flip the values, use `mdc-rtl-reflexive-property()` instead.\n@mixin reflexive-box($base-property, $default-direction, $value, $root-selector: null) {\n @if (list.index((right, left), $default-direction) == null) {\n @error \"Invalid default direction: '#{$default-direction}'. Please specifiy either 'right' or 'left'.\";\n }\n\n $left-value: $value;\n $right-value: 0;\n\n @if ($default-direction == right) {\n $left-value: 0;\n $right-value: $value;\n }\n\n @include reflexive-property($base-property, $left-value, $right-value, $root-selector);\n}\n\n// Takes a base property and emits rules that assign -left to and\n// -right to in a LTR context, and vice versa in a RTL context.\n// For example:\n//\n// ```scss\n// .mdc-foo {\n// @include rtl-reflexive-property(margin, auto, 12px);\n// }\n// ```\n//\n// is equivalent to:\n//\n// ```scss\n// .mdc-foo {\n// margin-left: auto;\n// margin-right: 12px;\n//\n// @include rtl {\n// margin-left: 12px;\n// margin-right: auto;\n// }\n// }\n// ```\n//\n// An optional 4th `$root-selector` argument can be given, which will be passed to `mdc-rtl`.\n@mixin reflexive-property($base-property, $left-value, $right-value, $root-selector: null) {\n $prop-left: #{$base-property}-left;\n $prop-right: #{$base-property}-right;\n\n @include reflexive($prop-left, $left-value, $prop-right, $right-value, $root-selector);\n}\n\n// Takes an argument specifying a horizontal position property (either \"left\" or \"right\") as well\n// as a value, and applies that value to the specified position in a LTR context, and flips it in a\n// RTL context. For example:\n//\n// ```scss\n// .mdc-foo {\n// @include rtl-reflexive-position(left, 0);\n// }\n// ```\n//\n// is equivalent to:\n//\n// ```scss\n// .mdc-foo {\n// left: 0;\n// right: initial;\n//\n// @include rtl {\n// left: initial;\n// right: 0;\n// }\n// }\n// ```\n//\n// An optional third $root-selector argument may also be given, which is passed to `mdc-rtl`.\n@mixin reflexive-position($position-property, $value, $root-selector: null) {\n @if (list.index((right, left), $position-property) == null) {\n @error \"Invalid position #{position-property}. Please specifiy either right or left\";\n }\n\n // TODO: \"initial\" is not supported in IE 11. https://caniuse.com/#feat=css-initial-value\n $left-value: $value;\n $right-value: initial;\n\n @if ($position-property == right) {\n $right-value: $value;\n $left-value: initial;\n }\n\n @include reflexive(left, $left-value, right, $right-value, $root-selector);\n}\n\n// Takes pair of properties with values as arguments and flips it in RTL context.\n// For example:\n//\n// ```scss\n// .mdc-foo {\n// @include rtl-reflexive(left, 2px, right, 5px);\n// }\n// ```\n//\n// is equivalent to:\n//\n// ```scss\n// .mdc-foo {\n// left: 2px;\n// right: 5px;\n//\n// @include rtl {\n// right: 2px;\n// left: 5px;\n// }\n// }\n// ```\n//\n// An optional fifth `$root-selector` argument may also be given, which is passed to `mdc-rtl`.\n@mixin reflexive(\n $left-property,\n $left-value,\n $right-property,\n $right-value,\n $root-selector: null\n) {\n @include property_($left-property, $left-value);\n @include property_($right-property, $right-value);\n\n @include rtl($root-selector) {\n @include property_($left-property, $right-value);\n @include property_($right-property, $left-value);\n }\n}\n\n///\n/// Adds `@noflip` annotation when `$mdc-rtl-include` is true.\n///\n/// @param {String} $property\n/// @param {String} $value\n/// @access private\n///\n@mixin property_($property, $value) {\n @if variables.$include {\n /* @noflip */\n }\n\n #{$property}: #{$value};\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// MDC Ripple keyframes are split into their own file so that _mixins.scss can rely on them.\n\n@use \"@material/animation/variables\";\n@use \"./variables\" as variables2;\n\n@mixin keyframes_ {\n @keyframes mdc-ripple-fg-radius-in {\n from {\n animation-timing-function: variables.$standard-curve-timing-function;\n // NOTE: For these keyframes, we do not need custom property fallbacks because they are only\n // used in conjunction with `.mdc-ripple-upgraded`. Since MDCRippleFoundation checks to ensure\n // that custom properties are supported within the browser before adding this class, we can\n // safely use them without a fallback.\n transform: translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1);\n }\n\n to {\n transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));\n }\n }\n\n @keyframes mdc-ripple-fg-opacity-in {\n from {\n animation-timing-function: linear;\n opacity: 0;\n }\n\n to {\n opacity: var(--mdc-ripple-fg-opacity, 0);\n }\n }\n\n @keyframes mdc-ripple-fg-opacity-out {\n from {\n animation-timing-function: linear;\n opacity: var(--mdc-ripple-fg-opacity, 0);\n }\n\n to {\n opacity: 0;\n }\n }\n}\n","//\n// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:color\";\n@use \"sass:map\";\n@use \"@material/animation/functions\" as functions2;\n@use \"@material/animation/variables\" as variables2;\n@use \"@material/base/mixins\" as base-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./functions\";\n@use \"./keyframes\";\n@use \"./variables\";\n@use \"@material/theme/variables\" as theme-variables;\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n // postcss-bem-linter: define ripple-surface\n\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-ripple-surface {\n @include surface($query: $query);\n @include states($query: $query);\n @include radius-bounded($query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative;\n outline: none;\n overflow: hidden;\n }\n\n &[data-mdc-ripple-is-unbounded] {\n @include radius-unbounded($query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow: visible;\n }\n }\n\n &--primary {\n @include states(primary, $query: $query);\n }\n\n &--accent {\n @include states(secondary, $query: $query);\n }\n }\n\n // postcss-bem-linter: end\n}\n\n@mixin common($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n // Ensure that styles needed by any component using MDC Ripple are emitted, but only once.\n // (Every component using MDC Ripple imports these mixins, but doesn't necessarily import\n // mdc-ripple.scss.)\n @include feature-targeting-mixins.targets($feat-animation) {\n @include base-mixins.emit-once(\"mdc-ripple/common/animation\") {\n @include keyframes.keyframes_;\n }\n }\n}\n\n@mixin surface($query: feature-targeting-functions.all(), $ripple-target: \"&\") {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n --mdc-ripple-fg-size: 0;\n --mdc-ripple-left: 0;\n --mdc-ripple-top: 0;\n --mdc-ripple-fg-scale: 1;\n --mdc-ripple-fg-translate-end: 0;\n --mdc-ripple-fg-translate-start: 0;\n\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n // !!DO NOT REMOVE!! mdc-ripple-will-change-replacer\n }\n\n #{$ripple-target}::before,\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n border-radius: 50%;\n opacity: 0;\n pointer-events: none;\n content: \"\";\n }\n }\n\n #{$ripple-target}::before {\n @include feature-targeting-mixins.targets($feat-animation) {\n // Also transition background-color to avoid unnatural color flashes when toggling activated/selected state\n transition:\n opacity variables.$states-wash-duration linear,\n background-color variables.$states-wash-duration linear;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n z-index: 1; // Ensure that the ripple wash for hover/focus states is displayed on top of positioned child elements\n }\n }\n\n // Common styles for upgraded surfaces (some of these depend on custom properties set via JS or other mixins)\n\n &.mdc-ripple-upgraded {\n #{$ripple-target}::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(var(--mdc-ripple-fg-scale, 1));\n }\n }\n\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: 0;\n /* @noflip */\n left: 0;\n transform: scale(0);\n transform-origin: center center;\n }\n }\n }\n\n &.mdc-ripple-upgraded--unbounded {\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: var(--mdc-ripple-top, 0);\n /* @noflip */\n left: var(--mdc-ripple-left, 0);\n }\n }\n }\n\n &.mdc-ripple-upgraded--foreground-activation {\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation:\n mdc-ripple-fg-radius-in variables.$translate-duration forwards,\n mdc-ripple-fg-opacity-in variables.$fade-in-duration forwards;\n }\n }\n }\n\n &.mdc-ripple-upgraded--foreground-deactivation {\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-ripple-fg-opacity-out variables.$fade-out-duration;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // Retain transform from mdc-ripple-fg-radius-in activation\n transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));\n }\n }\n }\n}\n\n@mixin states-base-color(\n $color, $query: feature-targeting-functions.all(), $ripple-target: \"&\") {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n #{$ripple-target}::before,\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-color) {\n @if color.alpha(theme-variables.prop-value($color)) > 0 {\n @include theme-mixins.prop(background-color, $color);\n } @else {\n // If a color with 0 alpha is specified, don't render the ripple pseudo-elements at all.\n // This avoids unnecessary transitions and overflow.\n content: none;\n }\n }\n }\n}\n\n///\n/// Customizes ripple opacities in `hover`, `focus`, or `press` states\n/// @param {map} $opacity-map - map specifying custom opacity of zero or more states\n/// @param {bool} $has-nested-focusable-element - whether the component contains a focusable element in the root\n/// @param {string} $ripple-target - the optional selector for the ripple element\n///\n@mixin states-opacities($opacity-map: (), $has-nested-focusable-element: false, $ripple-target: \"&\", $query: feature-targeting-functions.all()) {\n // Ensure sufficient specificity to override base state opacities\n @if map.has-key($opacity-map, hover) {\n @include states-hover-opacity(map.get($opacity-map, hover), $ripple-target: $ripple-target, $query: $query);\n }\n\n @if map.has-key($opacity-map, focus) {\n @include states-focus-opacity(map.get($opacity-map, focus), $ripple-target: $ripple-target, $has-nested-focusable-element: $has-nested-focusable-element, $query: $query);\n }\n\n @if map.has-key($opacity-map, press) {\n @include states-press-opacity(map.get($opacity-map, press), $ripple-target: $ripple-target, $query: $query);\n }\n}\n\n@mixin states-hover-opacity(\n $opacity, $query: feature-targeting-functions.all(), $ripple-target: \"&\") {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n // Background wash styles, for both CSS-only and upgraded stateful surfaces\n &:hover {\n #{$ripple-target}::before {\n // Opacity falls under color because the chosen opacity is color-dependent in typical usage\n @include feature-targeting-mixins.targets($feat-color) {\n opacity: $opacity;\n }\n }\n }\n}\n\n@mixin states-focus-opacity(\n $opacity,\n $has-nested-focusable-element: false,\n $query: feature-targeting-functions.all(),\n $ripple-target: \"&\") {\n\n // Focus overrides hover by reusing the ::before pseudo-element.\n // :focus-within generally works on non-MS browsers and matches when a *child* of the element has focus.\n // It is useful for cases where a component has a focusable element within the root node, e.g. text field,\n // but undesirable in general in case of nested stateful components.\n // We use a modifier class for JS-enabled surfaces to support all use cases in all browsers.\n @if $has-nested-focusable-element {\n // JS-enabled selectors.\n &.mdc-ripple-upgraded--background-focused,\n &.mdc-ripple-upgraded:focus-within,\n // CSS-only selectors.\n &:not(.mdc-ripple-upgraded):focus,\n &:not(.mdc-ripple-upgraded):focus-within {\n #{$ripple-target}::before {\n @include states-focus-opacity-properties_(\n $opacity: $opacity, $query: $query);\n }\n }\n } @else {\n // JS-enabled selectors.\n &.mdc-ripple-upgraded--background-focused,\n // CSS-only selectors.\n &:not(.mdc-ripple-upgraded):focus {\n #{$ripple-target}::before {\n @include states-focus-opacity-properties_(\n $opacity: $opacity, $query: $query);\n }\n }\n }\n}\n\n@mixin states-focus-opacity-properties_($opacity, $query) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n // Opacity falls under color because the chosen opacity is color-dependent in typical usage\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n // Note that this duration is only effective on focus, not blur\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-duration: 75ms;\n }\n\n @include feature-targeting-mixins.targets($feat-color) {\n opacity: $opacity;\n }\n}\n\n@mixin states-press-opacity($opacity, $query: feature-targeting-functions.all(), $ripple-target: \"&\") {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n // Styles for non-upgraded (CSS-only) stateful surfaces\n\n &:not(.mdc-ripple-upgraded) {\n // Apply press additively by using the ::after pseudo-element\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: opacity variables.$fade-out-duration linear;\n }\n }\n\n &:active {\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-duration: variables.$fade-in-duration;\n }\n\n // Opacity falls under color because the chosen opacity is color-dependent in typical usage\n @include feature-targeting-mixins.targets($feat-color) {\n opacity: $opacity;\n }\n }\n }\n }\n\n &.mdc-ripple-upgraded {\n @include feature-targeting-mixins.targets($feat-color) {\n --mdc-ripple-fg-opacity: #{$opacity};\n }\n }\n}\n\n// Simple mixin for base states which automatically selects opacity values based on whether the ink color is\n// light or dark.\n@mixin states(\n $color: theme-variables.prop-value(on-surface),\n $has-nested-focusable-element: false,\n $query: feature-targeting-functions.all(),\n $ripple-target: \"&\",\n) {\n @include states-interactions_(\n $color: $color,\n $has-nested-focusable-element: $has-nested-focusable-element,\n $query: $query,\n $ripple-target: $ripple-target);\n}\n\n// Simple mixin for activated states which automatically selects opacity values based on whether the ink color is\n// light or dark.\n@mixin states-activated(\n $color, $has-nested-focusable-element: false, $query: feature-targeting-functions.all(), $ripple-target: \"&\") {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $activated-opacity: functions.states-opacity($color, activated);\n\n &--activated {\n // Stylelint seems to think that '&' qualifies as a type selector here?\n // stylelint-disable-next-line selector-max-type\n #{$ripple-target}::before {\n // Opacity falls under color because the chosen opacity is color-dependent.\n @include feature-targeting-mixins.targets($feat-color) {\n opacity: $activated-opacity;\n }\n }\n\n @include states-interactions_(\n $color: $color,\n $has-nested-focusable-element: $has-nested-focusable-element,\n $opacity-modifier: $activated-opacity,\n $query: $query,\n $ripple-target: $ripple-target);\n }\n}\n\n// Simple mixin for selected states which automatically selects opacity values based on whether the ink color is\n// light or dark.\n@mixin states-selected(\n $color,\n $has-nested-focusable-element: false,\n $query: feature-targeting-functions.all(),\n $ripple-target: \"&\") {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $selected-opacity: functions.states-opacity($color, selected);\n\n &--selected {\n // stylelint-disable-next-line selector-max-type\n #{$ripple-target}::before {\n // Opacity falls under color because the chosen opacity is color-dependent.\n @include feature-targeting-mixins.targets($feat-color) {\n opacity: $selected-opacity;\n }\n }\n\n @include states-interactions_(\n $color: $color,\n $has-nested-focusable-element: $has-nested-focusable-element,\n $opacity-modifier: $selected-opacity,\n $query: $query,\n $ripple-target: $ripple-target);\n }\n}\n\n@mixin radius-bounded(\n $radius: 100%, $query: feature-targeting-functions.all(), $ripple-target: \"&\") {\n $feat-struture: feature-targeting-functions.create-target($query, structure);\n\n #{$ripple-target}::before,\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-struture) {\n top: calc(50% - #{$radius});\n /* @noflip */\n left: calc(50% - #{$radius});\n width: $radius * 2;\n height: $radius * 2;\n }\n }\n\n &.mdc-ripple-upgraded {\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-struture) {\n width: var(--mdc-ripple-fg-size, $radius);\n height: var(--mdc-ripple-fg-size, $radius);\n }\n }\n }\n}\n\n@mixin radius-unbounded(\n $radius: 100%, $query: feature-targeting-functions.all(), $ripple-target: \"&\") {\n $feat-struture: feature-targeting-functions.create-target($query, structure);\n\n #{$ripple-target}::before,\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-struture) {\n top: calc(50% - #{$radius / 2});\n /* @noflip */\n left: calc(50% - #{$radius / 2});\n width: $radius;\n height: $radius;\n }\n }\n\n &.mdc-ripple-upgraded {\n #{$ripple-target}::before,\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-struture) {\n top: var(--mdc-ripple-top, calc(50% - #{$radius / 2}));\n /* @noflip */\n left: var(--mdc-ripple-left, calc(50% - #{$radius / 2}));\n width: var(--mdc-ripple-fg-size, $radius);\n height: var(--mdc-ripple-fg-size, $radius);\n }\n }\n\n #{$ripple-target}::after {\n @include feature-targeting-mixins.targets($feat-struture) {\n width: var(--mdc-ripple-fg-size, $radius);\n height: var(--mdc-ripple-fg-size, $radius);\n }\n }\n }\n}\n\n@mixin states-interactions_(\n $color,\n $has-nested-focusable-element,\n $opacity-modifier: 0,\n $query: feature-targeting-functions.all(),\n $ripple-target: \"&\",\n) {\n @include target-selector($ripple-target) {\n @include states-base-color($color, $query);\n }\n\n $opacity-map: (\n hover: functions.states-opacity($color, hover) + $opacity-modifier,\n focus: functions.states-opacity($color, focus) + $opacity-modifier,\n press: functions.states-opacity($color, press) + $opacity-modifier,\n );\n\n @include states-opacities($opacity-map, $has-nested-focusable-element: $has-nested-focusable-element, $ripple-target: $ripple-target, $query: $query);\n}\n\n// Wraps content in the `ripple-target` selector if it exists.\n@mixin target-selector($ripple-target: \"&\") {\n @if $ripple-target == \"&\" {\n @content;\n } @else {\n #{$ripple-target} {\n @content;\n }\n }\n}\n\n// Common styles for a ripple target element.\n// Used for components which have an inner ripple target element.\n@mixin target-common($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n // Necessary for clicks on other inner elements (e.g. close icon in chip)\n // to go through.\n pointer-events: none;\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:math\";\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./variables\";\n@use \"@material/theme/variables\" as theme-variables;\n\n//\n// Public\n//\n\n@mixin core-styles($query: functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// card styles. It is recommended that most users use `mdc-card-core-styles` instead.\n@mixin without-ripple($query: functions.all()) {\n // postcss-bem-linter: define card\n\n $feat-color: functions.create-target($query, color);\n $feat-structure: functions.create-target($query, structure);\n\n @include elevation-mixins.overlay-common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-card {\n @include shape-radius(medium, $query: $query);\n @include fill-color(surface, $query);\n @include elevation-mixins.overlay-surface-position($query: $query);\n @include elevation-mixins.overlay-dimensions(100%, $query: $query);\n @include elevation-mixins.elevation(1, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include container-layout_;\n }\n }\n\n .mdc-card--outlined {\n @include elevation-mixins.elevation(0, $query: $query);\n @include outline(variables.$outline-color, $query: $query);\n }\n\n //\n // Media\n //\n\n .mdc-card__media {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative; // Child element `__media-content` has `position: absolute`\n box-sizing: border-box;\n background-repeat: no-repeat;\n background-position: center;\n background-size: cover;\n }\n\n &::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: block;\n content: \"\";\n }\n }\n }\n\n .mdc-card__media:first-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n }\n }\n\n .mdc-card__media:last-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-bottom-left-radius: inherit;\n border-bottom-right-radius: inherit;\n }\n }\n\n .mdc-card__media--square {\n @include media-aspect-ratio(1, 1, $query);\n }\n\n .mdc-card__media--16-9 {\n @include media-aspect-ratio(16, 9, $query);\n }\n\n .mdc-card__media-content {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n box-sizing: border-box;\n }\n }\n\n //\n // Primary action\n //\n\n .mdc-card__primary-action {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include container-layout_;\n\n position: relative; // Needed to prevent the ripple wash from overflowing the container in IE and Edge\n outline: none;\n color: inherit;\n text-decoration: none;\n cursor: pointer;\n overflow: hidden;\n }\n }\n\n .mdc-card__primary-action:first-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n }\n }\n\n .mdc-card__primary-action:last-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-bottom-left-radius: inherit;\n border-bottom-right-radius: inherit;\n }\n }\n\n //\n // Action row\n //\n\n .mdc-card__actions {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include actions-layout_;\n\n min-height: 52px;\n padding: 8px;\n }\n }\n\n .mdc-card__actions--full-bleed {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0;\n }\n }\n\n .mdc-card__action-buttons,\n .mdc-card__action-icons {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include actions-layout_;\n }\n }\n\n .mdc-card__action-icons {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, variables.$action-icon-color);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n flex-grow: 1;\n justify-content: flex-end;\n }\n }\n\n .mdc-card__action-buttons + .mdc-card__action-icons {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, 16px);\n }\n }\n\n //\n // Action items\n //\n\n .mdc-card__action {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include actions-layout_(inline-flex);\n\n justify-content: center;\n cursor: pointer;\n user-select: none;\n }\n\n &:focus {\n @include feature-targeting-mixins.targets($feat-structure) {\n outline: none;\n }\n }\n }\n\n //\n // Action buttons\n //\n\n .mdc-card__action--button {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, right, 8px);\n\n padding: 0 8px;\n }\n\n &:last-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, right, 0);\n }\n }\n }\n\n .mdc-card__actions--full-bleed .mdc-card__action--button {\n @include feature-targeting-mixins.targets($feat-structure) {\n justify-content: space-between;\n width: 100%;\n height: auto;\n max-height: none;\n margin: 0;\n padding: 8px 16px;\n /* @noflip */\n text-align: left;\n }\n\n @include rtl-mixins.rtl {\n @include feature-targeting-mixins.targets($feat-structure) {\n /* @noflip */\n text-align: right;\n }\n }\n }\n\n //\n // Action icons\n //\n\n .mdc-card__action--icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Icon buttons are taller than buttons, so we need to adjust their margins to prevent the action row from\n // expanding.\n margin: -6px 0;\n\n // Same padding as mdc-icon-button.\n padding: 12px;\n }\n }\n\n .mdc-card__action--icon:not(:disabled) {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, variables.$action-icon-color);\n }\n }\n\n // postcss-bem-linter: end\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// card styles. It is recommended that most users use `mdc-card-core-styles` instead.\n@mixin ripple($query: functions.all()) {\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-card__primary-action {\n @include ripple-mixins.surface($query);\n @include ripple-mixins.radius-bounded($query: $query);\n @include ripple-mixins.states($query: $query);\n }\n}\n\n@mixin fill-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n@mixin outline($color, $thickness: variables.$outline-width, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n border-width: $thickness;\n border-style: solid;\n }\n\n @include feature-targeting-mixins.targets($feat-color) {\n border-color: theme-variables.prop-value($color);\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: functions.all()) {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n}\n\n@mixin media-aspect-ratio($x, $y, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n &::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n // This clever trick brought to you by: http://www.mademyday.de/css-height-equals-width-with-pure-css.html\n margin-top: math.percentage($y / $x);\n }\n }\n}\n\n//\n// Private\n//\n\n@mixin container-layout_ {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n\n@mixin actions-layout_($display: flex) {\n display: $display;\n flex-direction: row;\n align-items: center;\n box-sizing: border-box;\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/theme/mixins\";\n@use \"./variables\";\n\n@mixin container-keyframes_(\n $from-stroke-color,\n $to-stroke-color,\n $from-fill-color,\n $to-fill-color,\n $uid) {\n @keyframes mdc-checkbox-fade-in-background-#{$uid} {\n 0% {\n @include mixins.prop(border-color, $from-stroke-color);\n @include mixins.prop(background-color, $from-fill-color);\n }\n\n 50% {\n @include mixins.prop(border-color, $to-stroke-color);\n @include mixins.prop(background-color, $to-fill-color);\n }\n }\n\n @keyframes mdc-checkbox-fade-out-background-#{$uid} {\n 0%,\n 80% {\n @include mixins.prop(border-color, $to-stroke-color);\n @include mixins.prop(background-color, $to-fill-color);\n }\n\n 100% {\n @include mixins.prop(border-color, $from-stroke-color);\n @include mixins.prop(background-color, $from-fill-color);\n }\n }\n}\n\n@mixin mark-keyframes_ {\n @keyframes mdc-checkbox-unchecked-checked-checkmark-path {\n 0%,\n 50% {\n stroke-dashoffset: variables.$mark-path-length_;\n }\n\n 50% {\n animation-timing-function: animation-variables.$deceleration-curve-timing-function;\n }\n\n 100% {\n stroke-dashoffset: 0;\n }\n }\n\n @keyframes mdc-checkbox-unchecked-indeterminate-mixedmark {\n 0%,\n 68.2% {\n transform: scaleX(0);\n }\n\n 68.2% {\n animation-timing-function: cubic-bezier(0, 0, 0, 1);\n }\n\n 100% {\n transform: scaleX(1);\n }\n }\n\n @keyframes mdc-checkbox-checked-unchecked-checkmark-path {\n from {\n animation-timing-function: animation-variables.$acceleration-curve-timing-function;\n opacity: 1;\n stroke-dashoffset: 0;\n }\n\n to {\n opacity: 0;\n stroke-dashoffset: variables.$mark-path-length_ * -1;\n }\n }\n\n @keyframes mdc-checkbox-checked-indeterminate-checkmark {\n from {\n animation-timing-function: animation-variables.$deceleration-curve-timing-function;\n transform: rotate(0deg);\n opacity: 1;\n }\n\n to {\n transform: rotate(45deg);\n opacity: 0;\n }\n }\n\n @keyframes mdc-checkbox-indeterminate-checked-checkmark {\n from {\n animation-timing-function: variables.$indeterminate-checked-easing-function_;\n transform: rotate(45deg);\n opacity: 0;\n }\n\n to {\n transform: rotate(360deg);\n opacity: 1;\n }\n }\n\n @keyframes mdc-checkbox-checked-indeterminate-mixedmark {\n from {\n animation-timing-function: mdc-animation-deceleration-curve-timing-function;\n transform: rotate(-45deg);\n opacity: 0;\n }\n\n to {\n transform: rotate(0deg);\n opacity: 1;\n }\n }\n\n @keyframes mdc-checkbox-indeterminate-checked-mixedmark {\n from {\n animation-timing-function: variables.$indeterminate-checked-easing-function_;\n transform: rotate(0deg);\n opacity: 1;\n }\n\n to {\n transform: rotate(315deg);\n opacity: 0;\n }\n }\n\n @keyframes mdc-checkbox-indeterminate-unchecked-mixedmark {\n 0% {\n animation-timing-function: linear;\n transform: scaleX(1);\n opacity: 1;\n }\n\n 32.8%,\n 100% {\n transform: scaleX(0);\n opacity: 0;\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:map\";\n@use \"@material/ripple/variables\" as ripple-variables;\n@use \"@material/theme/variables\" as theme-variables;\n@use \"@material/density/variables\" as density-variables;\n\n$baseline-theme-color: secondary !default;\n$mark-color: theme-variables.prop-value(on-secondary) !default;\n$border-color: rgba(theme-variables.prop-value(on-surface), .54) !default;\n$disabled-color: rgba(theme-variables.prop-value(on-surface), .38) !default;\n\n$ripple-size: 40px !default;\n$icon-size: 18px !default;\n$mark-stroke-size: 2 / 15 * $icon-size !default;\n$border-width: 2px !default;\n$transition-duration: 90ms !default;\n$item-spacing: 4px !default;\n$focus-indicator-opacity: map.get(ripple-variables.$dark-ink-opacities, focus) !default;\n\n$minimum-size: 28px !default;\n$maximum-size: $ripple-size !default;\n$density-scale: density-variables.$default-scale !default;\n$density-config: (\n size: (\n minimum: $minimum-size,\n default: $ripple-size,\n maximum: $maximum-size,\n ),\n) !default;\n\n// Manual calculation done on SVG\n$mark-path-length_: 29.7833385 !default;\n$indeterminate-checked-easing-function_: cubic-bezier(.14, 0, 0, 1) !default;\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n$deceleration-curve-timing-function: cubic-bezier(0, 0, .2, 1) !default;\n$standard-curve-timing-function: cubic-bezier(.4, 0, .2, 1) !default;\n$acceleration-curve-timing-function: cubic-bezier(.4, 0, 1, 1) !default;\n$sharp-curve-timing-function: cubic-bezier(.4, 0, .6, 1) !default;\n","//\n// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:math\";\n@use \"@material/animation/functions\" as functions2;\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/touch-target/mixins\" as touch-target-mixins;\n@use \"@material/theme/functions\" as theme-functions;\n@use \"./functions\";\n@use \"./keyframes\";\n@use \"./variables\";\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/touch-target/variables\" as touch-target-variables;\n\n//\n// Public\n//\n\n$ripple-target: \".mdc-checkbox__ripple\";\n\n///\n/// Checkbox core styles.\n///\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// checkbox styles. It is recommended that most users use `mdc-checkbox-core-styles` instead.\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n // postcss-bem-linter: define checkbox\n\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include touch-target-mixins.wrapper($query); // COPYBARA_COMMENT_THIS_LINE\n\n @include feature-targeting-mixins.targets($feat-animation) {\n @include keyframes.mark-keyframes_;\n }\n\n .mdc-checkbox {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include base_;\n }\n\n @include focus-indicator-color(variables.$baseline-theme-color, $query: $query);\n @include density(variables.$density-scale, $query: $query);\n }\n\n @include container-colors($query: $query);\n @include disabled-container-colors($query: $query);\n @include ink-color(variables.$mark-color, $query: $query);\n @include disabled-ink-color(variables.$mark-color, $query: $query);\n\n @media screen and (-ms-high-contrast: active) {\n @include disabled-container-colors(\n $unmarked-stroke-color: GrayText,\n $unmarked-fill-color: transparent,\n $marked-stroke-color: GrayText,\n $marked-fill-color: transparent,\n $query: $query\n );\n @include disabled-ink-color(GrayText, $query: $query);\n\n .mdc-checkbox__mixedmark {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0 1px; // Extra horizontal space around mixedmark symbol.\n }\n }\n }\n\n // Needed to disable hover effects on CSS-only (non-JS) checkboxes\n .mdc-checkbox--disabled {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include disabled_;\n }\n }\n\n .mdc-checkbox__background {\n @include background_($query);\n }\n\n .mdc-checkbox__checkmark {\n @include checkmark_($query);\n }\n\n .mdc-checkbox__checkmark-path {\n @include checkmark-path_($query);\n }\n\n .mdc-checkbox__mixedmark {\n @include mixedmark_($query);\n }\n\n // JS checkbox\n .mdc-checkbox--upgraded {\n .mdc-checkbox__background,\n .mdc-checkbox__checkmark,\n .mdc-checkbox__checkmark-path,\n .mdc-checkbox__mixedmark {\n @include feature-targeting-mixins.targets($feat-animation) {\n @include child--upgraded_;\n }\n }\n }\n\n .mdc-checkbox--anim {\n @include feature-targeting-mixins.targets($feat-animation) {\n @include anim_;\n }\n }\n\n .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background,\n .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background,\n .mdc-checkbox__native-control[data-indeterminate=\"true\"] ~ .mdc-checkbox__background {\n @include feature-targeting-mixins.targets($feat-animation) {\n @include background--marked_;\n }\n\n .mdc-checkbox__checkmark-path {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include checkmark-path--marked_;\n }\n }\n }\n\n // The frame's ::before element is used as a focus indicator for the checkbox\n .mdc-checkbox__background::before {\n @include focus-indicator_($query);\n }\n\n .mdc-checkbox__native-control:focus ~ .mdc-checkbox__background::before {\n @include focus-indicator--focused_($query);\n }\n\n .mdc-checkbox__native-control {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include native-control_;\n }\n\n &:disabled {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include disabled_;\n }\n }\n }\n\n .mdc-checkbox--touch {\n @include touch-target-mixins.margin(\n $component-height: variables.$ripple-size,\n $component-width: variables.$ripple-size,\n $query: $query);\n @include touch-target(touch-target-variables.$height, $query: $query);\n }\n\n .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background {\n .mdc-checkbox__checkmark {\n @include checkmark--checked_($query);\n }\n\n .mdc-checkbox__mixedmark {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include mixedmark--checked_;\n }\n }\n }\n .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background,\n .mdc-checkbox__native-control[data-indeterminate=\"true\"] ~ .mdc-checkbox__background {\n .mdc-checkbox__checkmark {\n @include checkmark--indeterminate_($query);\n }\n\n .mdc-checkbox__mixedmark {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include mixedmark--indeterminate_;\n }\n }\n }\n\n // postcss-bem-linter: end\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// checkbox styles. It is recommended that most users use `mdc-checkbox-core-styles` instead.\n@mixin ripple($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-checkbox {\n @include ripple-mixins.surface($query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.states($color: on-surface, $query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.radius-unbounded($query: $query, $ripple-target: $ripple-target);\n }\n\n #{$ripple-target} {\n @include ripple-mixins.target-common($query: $query);\n }\n\n .mdc-ripple-upgraded--background-focused .mdc-checkbox__background::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n content: none;\n }\n }\n}\n\n///\n/// Sets density scale for checkbox.\n///\n/// @param {Number | String} $density-scale - Density scale value for component. Supported density scale values\n/// `-3`, `-2`, `-1`, `0`.\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n $size: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: size,\n );\n\n @include ripple-size($size, $query: $query);\n\n @if $density-scale != 0 {\n @include touch-target-reset_($query: $query);\n }\n}\n\n@mixin ripple-size($ripple-size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $checkbox-padding: ($ripple-size - variables.$icon-size) / 2;\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: $checkbox-padding;\n }\n\n .mdc-checkbox__background {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: $checkbox-padding;\n left: $checkbox-padding;\n }\n }\n\n .mdc-checkbox__background::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: -(variables.$border-width) - $checkbox-padding;\n left: -(variables.$border-width) - $checkbox-padding;\n width: $ripple-size;\n height: $ripple-size;\n }\n }\n\n @include touch-target($ripple-size, $ripple-size: $ripple-size, $query: $query);\n}\n\n///\n/// Sets stroke & fill colors for both marked and unmarked state of enabled checkbox.\n/// Set $generate-keyframes to false to prevent the mixin from generating @keyframes\n/// @param {Color} $unmarked-stroke-color - The desired stroke color for the unmarked state\n/// @param {Color} $unmarked-fill-color - The desired fill color for the unmarked state\n/// @param {Color} $marked-stroke-color - The desired stroke color for the marked state\n/// @param {Color} $marked-fill-color - The desired fill color for the marked state\n/// @param {Boolean} $generate-keyframes [true] - Whether animation keyframes should be generated\n///\n@mixin container-colors(\n $unmarked-stroke-color: variables.$border-color,\n $unmarked-fill-color: transparent,\n $marked-stroke-color: variables.$baseline-theme-color,\n $marked-fill-color: variables.$baseline-theme-color,\n $generate-keyframes: true,\n $query: feature-targeting-functions.all()\n) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include if-unmarked-enabled_ {\n @include container-colors_($unmarked-stroke-color, $unmarked-fill-color, $query: $query);\n }\n\n @include if-marked-enabled_ {\n @include container-colors_($marked-stroke-color, $marked-fill-color, $query: $query);\n }\n\n @if $generate-keyframes {\n $uid: theme-functions.color-hash($unmarked-stroke-color) +\n theme-functions.color-hash($marked-stroke-color) +\n theme-functions.color-hash($unmarked-fill-color) +\n theme-functions.color-hash($marked-fill-color);\n\n $anim-selector: if(&, \"&.mdc-checkbox--anim\", \".mdc-checkbox--anim\");\n\n @include feature-targeting-mixins.targets($feat-animation, $feat-color) {\n @include keyframes.container-keyframes_(\n $from-stroke-color: $unmarked-stroke-color,\n $to-stroke-color: $marked-stroke-color,\n $from-fill-color: $unmarked-fill-color,\n $to-fill-color: $marked-fill-color,\n $uid: #{$uid}\n );\n }\n\n // stylelint-disable max-nesting-depth\n\n #{$anim-selector} {\n &-unchecked-checked,\n &-unchecked-indeterminate {\n .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation-name: mdc-checkbox-fade-in-background-#{$uid};\n }\n }\n }\n\n &-checked-unchecked,\n &-indeterminate-unchecked {\n .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation-name: mdc-checkbox-fade-out-background-#{$uid};\n }\n }\n }\n }\n\n // stylelint-enable max-nesting-depth\n }\n}\n\n///\n/// Sets stroke & fill colors for both marked and unmarked state of disabled checkbox.\n/// @param {Color} $unmarked-stroke-color - The desired stroke color for the unmarked state\n/// @param {Color} $unmarked-fill-color - The desired fill color for the unmarked state\n/// @param {Color} $marked-stroke-color - The desired stroke color for the marked state\n/// @param {Color} $marked-fill-color - The desired fill color for the marked state\n///\n@mixin disabled-container-colors(\n $unmarked-stroke-color: variables.$disabled-color,\n $unmarked-fill-color: transparent,\n $marked-stroke-color: transparent,\n $marked-fill-color: variables.$disabled-color,\n $query: feature-targeting-functions.all()\n) {\n @include if-unmarked-disabled_ {\n @include container-colors_($unmarked-stroke-color, $unmarked-fill-color, $query: $query);\n }\n\n @include if-marked-disabled_ {\n @include container-colors_($marked-stroke-color, $marked-fill-color, $query: $query);\n }\n}\n\n///\n/// Sets the ink color of the checked and indeterminate icons for an enabled checkbox\n/// @param {Color} $color - The desired ink color in enabled state\n///\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the ink color of the checked and indeterminate icons for a disabled checkbox\n/// @param {Color} $color - The desired ink color in disabled state\n///\n@mixin disabled-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include if-disabled_ {\n @include ink-color_($color, $query: $query);\n }\n}\n\n@mixin focus-indicator-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background::before,\n .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background::before,\n .mdc-checkbox__native-control[data-indeterminate=\"true\"] ~ .mdc-checkbox__background::before {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n\n &.mdc-checkbox--selected {\n @include ripple-mixins.states($color: $color, $query: $query, $ripple-target: $ripple-target);\n }\n\n &.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected {\n @include ripple-mixins.states-base-color($color: $color, $query: $query, $ripple-target: $ripple-target);\n }\n}\n\n///\n/// Sets checkbox touch target size which can be more than the ripple size. Param `$ripple-size` is required for custom\n/// ripple size.\n///\n/// @param {Number} $size Size of touch target (Native input) in `px`.\n/// @param {Number} $ripple-size Size of ripple in `px`. Required only for custom ripple size.\n///\n@mixin touch-target(\n $size: variables.$ripple-size,\n $ripple-size: variables.$ripple-size,\n $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $offset: ($ripple-size - $size) / 2;\n\n @include feature-targeting-mixins.targets($feat-structure) {\n .mdc-checkbox__native-control {\n top: $offset;\n right: $offset;\n left: $offset;\n width: $size;\n height: $size;\n }\n }\n}\n\n//\n// Private\n//\n\n@mixin base_ {\n display: inline-block;\n position: relative;\n flex: 0 0 variables.$icon-size;\n box-sizing: content-box;\n width: variables.$icon-size;\n height: variables.$icon-size;\n line-height: 0;\n white-space: nowrap;\n cursor: pointer;\n vertical-align: bottom;\n}\n\n@mixin disabled_ {\n cursor: default;\n pointer-events: none;\n}\n\n@mixin child--upgraded_ {\n // Due to the myriad of selector combos used to properly style a CSS-only checkbox, all of\n // which have varying selector precedence and make use of transitions, it is cleaner and more\n // efficient here to simply use !important, since the mdc-checkbox--anim-* classes will take\n // over from here.\n transition: none !important;\n}\n\n// Animation\n\n@mixin anim_ {\n $mdc-checkbox-indeterminate-change-duration_: 500ms;\n\n // stylelint-disable selector-max-type\n\n &-unchecked-checked,\n &-unchecked-indeterminate,\n &-checked-unchecked,\n &-indeterminate-unchecked {\n .mdc-checkbox__background {\n animation-duration: variables.$transition-duration * 2;\n animation-timing-function: linear;\n }\n }\n\n &-unchecked-checked {\n .mdc-checkbox__checkmark-path {\n // Instead of delaying the animation, we simply multiply its length by 2 and begin the\n // animation at 50% in order to prevent a flash of styles applied to a checked checkmark\n // as the background is fading in before the animation begins.\n animation: mdc-checkbox-unchecked-checked-checkmark-path variables.$transition-duration * 2 linear 0s;\n transition: none;\n }\n }\n\n &-unchecked-indeterminate {\n .mdc-checkbox__mixedmark {\n animation: mdc-checkbox-unchecked-indeterminate-mixedmark variables.$transition-duration linear 0s;\n transition: none;\n }\n }\n\n &-checked-unchecked {\n .mdc-checkbox__checkmark-path {\n animation: mdc-checkbox-checked-unchecked-checkmark-path variables.$transition-duration linear 0s;\n transition: none;\n }\n }\n\n &-checked-indeterminate {\n .mdc-checkbox__checkmark {\n animation: mdc-checkbox-checked-indeterminate-checkmark variables.$transition-duration linear 0s;\n transition: none;\n }\n\n .mdc-checkbox__mixedmark {\n animation: mdc-checkbox-checked-indeterminate-mixedmark variables.$transition-duration linear 0s;\n transition: none;\n }\n }\n\n &-indeterminate-checked {\n .mdc-checkbox__checkmark {\n animation: mdc-checkbox-indeterminate-checked-checkmark $mdc-checkbox-indeterminate-change-duration_ linear 0s;\n transition: none;\n }\n\n .mdc-checkbox__mixedmark {\n animation: mdc-checkbox-indeterminate-checked-mixedmark $mdc-checkbox-indeterminate-change-duration_ linear 0s;\n transition: none;\n }\n }\n\n &-indeterminate-unchecked {\n .mdc-checkbox__mixedmark {\n // stylelint-disable-next-line declaration-colon-space-after\n animation:\n mdc-checkbox-indeterminate-unchecked-mixedmark $mdc-checkbox-indeterminate-change-duration_ * .6 linear 0s;\n transition: none;\n }\n }\n\n // stylelint-enable selector-max-type\n}\n\n// Background\n\n///\n/// Helps select the checkbox background only when its native control is in\n/// enabled state.\n/// @access private\n///\n@mixin if-enabled_ {\n .mdc-checkbox__native-control:enabled ~ {\n @content;\n }\n}\n\n///\n/// Helps select the checkbox background only when its native control is in\n/// disabled state.\n/// @access private\n///\n@mixin if-disabled_ {\n .mdc-checkbox__native-control:disabled ~ {\n @content;\n }\n}\n\n///\n/// Helps select the checkbox background only when its native control is in\n/// unmarked & enabled state.\n/// @access private\n///\n@mixin if-unmarked-enabled_ {\n .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=\"true\"]) ~ {\n @content;\n }\n}\n\n///\n/// Helps select the checkbox background only when its native control is in\n/// unmarked & disabled state.\n/// @access private\n///\n@mixin if-unmarked-disabled_ {\n // Note: we must use `[disabled]` instead of `:disabled` below because Edge does not always recalculate the style\n // property when the `:disabled` pseudo-class is followed by a sibling combinator. See:\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11295231/\n .mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=\"true\"]) ~ {\n @content;\n }\n}\n\n///\n/// Helps select the checkbox background only when its native control is in\n/// marked & enabled state.\n/// @access private\n///\n@mixin if-marked-enabled_ {\n .mdc-checkbox__native-control:enabled:checked,\n .mdc-checkbox__native-control:enabled:indeterminate,\n .mdc-checkbox__native-control[data-indeterminate=\"true\"]:enabled {\n ~ {\n @content;\n }\n }\n}\n\n///\n/// Helps select the checkbox background only when its native control is in\n/// marked & disabled state.\n/// @access private\n///\n@mixin if-marked-disabled_ {\n // Note: we must use `[disabled]` instead of `:disabled` below because Edge does not always recalculate the style\n // property when the `:disabled` pseudo-class is followed by a sibling combinator. See:\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11295231/\n .mdc-checkbox__native-control[disabled]:checked,\n .mdc-checkbox__native-control[disabled]:indeterminate,\n .mdc-checkbox__native-control[data-indeterminate=\"true\"][disabled] {\n ~ {\n @content;\n }\n }\n}\n\n@mixin background_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n position: absolute;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: variables.$icon-size;\n height: variables.$icon-size;\n // border-color is overridden by the mdc-checkbox-unmarked-stroke-color() mixin\n border: variables.$border-width solid currentColor;\n border-radius: 2px;\n background-color: transparent;\n pointer-events: none;\n will-change: background-color, border-color;\n }\n\n .mdc-checkbox__background::before {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, on-surface);\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition-exit(background-color),\n functions.transition-exit(border-color);\n }\n}\n\n@mixin background--marked_ {\n transition:\n functions.transition-enter(border-color),\n functions.transition-enter(background-color);\n}\n\n///\n/// Sets the stroke & fill colors for the checkbox.\n/// This mixin should be wrapped in a mixin that qualifies state such as\n/// `mdc-checkbox-if-unmarked-enabled_`.\n/// @access private\n///\n@mixin container-colors_($stroke-color, $fill-color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-checkbox__background {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $stroke-color);\n @include theme-mixins.prop(background-color, $fill-color);\n }\n }\n}\n\n// Focus indicator\n\n@mixin focus-indicator_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n transform: scale(0, 0);\n border-radius: 50%;\n opacity: 0;\n pointer-events: none;\n content: \"\";\n will-change: opacity, transform;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition-exit(opacity),\n functions.transition-exit(transform);\n }\n}\n\n@mixin focus-indicator--focused_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(1);\n opacity: variables.$focus-indicator-opacity;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition-enter(opacity, 0ms, 80ms),\n functions.transition-enter(transform, 0ms, 80ms);\n }\n}\n\n// Native input\n\n@mixin native-control_ {\n position: absolute;\n margin: 0;\n padding: 0;\n opacity: 0;\n cursor: inherit;\n}\n\n// Check mark\n\n@mixin checkmark_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n opacity: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition-exit(opacity, 0ms, variables.$transition-duration * 2);\n }\n\n .mdc-checkbox--upgraded & {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n}\n\n@mixin checkmark--checked_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition-enter(opacity, 0ms, variables.$transition-duration * 2),\n functions.transition-enter(transform, 0ms, variables.$transition-duration * 2);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n}\n\n@mixin checkmark--indeterminate_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: rotate(45deg);\n opacity: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition-exit(opacity, 0ms, variables.$transition-duration),\n functions.transition-exit(transform, 0ms, variables.$transition-duration);\n }\n}\n\n///\n/// Sets the ink color of the checked and indeterminate icons for a checkbox.\n/// This mixin should be wrapped in a mixin that qualifies state such as\n/// `mdc-checkbox-if-unmarked_`.\n/// @access private\n///\n@mixin ink-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-checkbox__background {\n .mdc-checkbox__checkmark {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n\n .mdc-checkbox__mixedmark {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $color);\n }\n }\n }\n}\n\n// Check mark path\n\n@mixin checkmark-path_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition-exit(stroke-dashoffset, 0ms, variables.$transition-duration * 2);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n stroke: currentColor;\n stroke-width: variables.$mark-stroke-size * 1.3;\n stroke-dashoffset: variables.$mark-path-length_;\n stroke-dasharray: variables.$mark-path-length_;\n }\n}\n\n@mixin checkmark-path--marked_ {\n stroke-dashoffset: 0;\n}\n\n// Mixed mark\n\n@mixin mixedmark_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 100%;\n height: 0;\n transform: scaleX(0) rotate(0deg);\n border-width: math.floor(variables.$mark-stroke-size) / 2;\n border-style: solid;\n opacity: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition-exit(opacity),\n functions.transition-exit(transform);\n }\n}\n\n@mixin mixedmark--checked_ {\n transform: scaleX(1) rotate(-45deg);\n}\n\n@mixin mixedmark--indeterminate_ {\n transform: scaleX(1) rotate(0deg);\n opacity: 1;\n}\n\n///\n/// Resets touch target-related styles. This is called from the density mixin to\n/// automatically remove the increased touch target, since dense components\n/// don't have the same default a11y requirements.\n/// @access private\n///\n@mixin touch-target-reset_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0;\n }\n}\n","//\n// Copyright 2019 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n$height: 48px !default;\n$width: $height !default;\n","//\n// Copyright 2020 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/mixins\" as feature-mixins;\n@use \"@material/feature-targeting/functions\" as feature-functions;\n@use \"@material/ripple/mixins\" as ripple;\n@use \"@material/rtl/mixins\" as rtl;\n@use \"@material/theme/mixins\" as theme;\n@use \"@material/touch-target/mixins\" as touch;\n@use \"./variables\";\n\n$ripple-target: '.mdc-chip-trailing-action__ripple';\n\n@mixin core-styles($query: feature-functions.all()) {\n @include without-ripple($query: $query);\n @include ripple($query: $query);\n}\n\n@mixin without-ripple($query: feature-functions.all()) {\n $feat-structure: feature-functions.create-target($query, structure);\n $feat-color: feature-functions.create-target($query, color);\n\n @include touch.wrapper($query); // COPYBARA_COMMENT_THIS_LINE\n @include _touch-target-base($query);\n\n .mdc-chip-trailing-action {\n @include size(variables.$size, $query);\n @include color(variables.$color, $query);\n\n @include feature-mixins.targets($feat-structure) {\n border: none;\n display: inline-flex;\n position: relative;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n padding: 0;\n outline: none;\n cursor: pointer;\n -webkit-appearance: none;\n }\n\n @include feature-mixins.targets($feat-color) {\n background: none;\n }\n\n // Nested to increase specificity, ensuring SVG and font icon\n // color is affected regardless of load order without needing\n // !important or HTML tag targetting.\n .mdc-chip-trailing-action__icon {\n @include feature-mixins.targets($feat-color) {\n fill: currentColor;\n color: inherit;\n }\n }\n }\n}\n\n@mixin ripple($query: feature-functions.all()) {\n @include ripple.common($query); // COPYBARA_COMMENT_THIS_LINE\n $feat-structure: feature-functions.create-target($query, structure);\n\n .mdc-chip-trailing-action {\n @include ripple.surface($query: $query, $ripple-target: $ripple-target);\n @include ripple.radius-unbounded($query: $query, $ripple-target: $ripple-target);\n @include ripple.states(variables.$ripple-color, $query: $query, $ripple-target: $ripple-target);\n\n #{$ripple-target} {\n @include feature-mixins.targets($feat-structure) {\n position: absolute;\n // Ripple needs content-box as the box sizing and box-sizing: border-box\n // is often set as a default, so we override that here.\n box-sizing: content-box;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n }\n }\n}\n\n/// Set the color of the trailing action\n/// @param {Color} $color The trailing action color\n@mixin color($color, $query: feature-functions.all()) {\n $feat-color: feature-functions.create-target($query, color);\n\n .mdc-chip-trailing-action {\n @include feature-mixins.targets($feat-color) {\n @include theme.prop(color, $color);\n }\n }\n}\n\n/// Set the size of the trailing action\n/// @param {Number} $number The size of the trailing action\n@mixin size($size, $query: feature-functions.all()) {\n $feat-structure: feature-functions.create-target($query, structure);\n\n .mdc-chip-trailing-action__icon {\n @include feature-mixins.targets($feat-structure) {\n height: $size;\n width: $size;\n font-size: $size;\n }\n }\n}\n\n/// Set the horizontal spacing of the trailing action\n/// @param {Number} $left The left spacing\n/// @param {Number} $right The right spacing\n@mixin horizontal-spacing($left, $right, $query: feature-functions.all()) {\n $feat-structure: feature-functions.create-target($query, structure);\n\n .mdc-chip-trailing-action {\n @include feature-mixins.targets($feat-structure) {\n @include rtl.reflexive-property(margin, $left, $right);\n }\n }\n}\n\n/// Set the width of the touch target\n/// @param {Number} $width The width of the touch target\n@mixin touch-target-width($width, $query: feature-functions.all()) {\n $feat-structure: feature-functions.create-target($query, structure);\n\n .mdc-chip-trailing-action__touch {\n @include feature-mixins.targets($feat-structure) {\n width: $width;\n }\n }\n}\n\n/// Private mixins\n\n@mixin _touch-target-base($query: feature-functions.all()) {\n @include touch-target-width(variables.$touch-target-width, $query);\n\n .mdc-chip-trailing-action__touch {\n @include touch.touch-target($set-width: true, $query: $query);\n }\n}\n","//\n// Copyright 2020 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n$size: 18px !default;\n$margin-right: -4px !default;\n$margin-left: 4px !default;\n$touch-target-width: 26px !default;\n$color: on-surface !default;\n$ripple-color: on-surface !default;\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:math\";\n@use \"@material/animation/functions\";\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/checkbox/functions\" as checkbox-functions;\n@use \"@material/checkbox/variables\" as checkbox-variables;\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/functions\" as theme-functions;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/touch-target/mixins\" as touch-target-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/shape/functions\" as shape-functions;\n@use \"./variables\";\n@use \"@material/elevation/functions\" as elevation-functions;\n@use \"@material/theme/variables\" as theme-variables;\n@use \"./trailingaction/mixins\" as trailing-action-mixins;\n\n$ripple-target: \".mdc-chip__ripple\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query: $query);\n @include ripple($query: $query);\n}\n\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include leading-icon-color(variables.$icon-color, $query: $query);\n @include trailing-icon-color(variables.$icon-color, $query: $query);\n @include leading-icon-size(variables.$leading-icon-size, $query: $query);\n @include trailing-icon-size(variables.$trailing-icon-size, $query: $query);\n @include trailing-icon-margin($query: $query);\n @include touch-target-mixins.wrapper($query); // COPYBARA_COMMENT_THIS_LINE\n @include elevation-mixins.overlay-common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-chip {\n @include shape-radius(50%, $query: $query);\n @include fill-color(variables.$fill-color-default, $query: $query);\n @include ink-color-without-ripple_(variables.$ink-color-default, $query: $query);\n @include typography-mixins.typography(body2, $query: $query);\n @include density($density-scale: 0, $query: $query);\n @include leading-icon-margin($query: $query);\n @include elevation-mixins.overlay-surface-position($query: $query);\n @include elevation-mixins.overlay-dimensions(100%, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n // position: relative; already set in mdc-elevation-overlay-surface-position\n align-items: center;\n box-sizing: border-box;\n padding: 0 variables.$horizontal-padding;\n border-width: 0;\n outline: none;\n cursor: pointer;\n -webkit-appearance: none;\n\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n }\n\n &:hover {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, on-surface);\n }\n }\n\n .mdc-chip__touch {\n @include touch-target-mixins.touch-target($query: $query);\n }\n }\n\n .mdc-chip--exit {\n @include feature-targeting-mixins.targets($feat-color) {\n transition: variables.$exit-transition;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n }\n\n .mdc-chip__text {\n @include feature-targeting-mixins.targets($feat-structure) {\n white-space: nowrap;\n }\n }\n\n .mdc-chip__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-radius: 50%;\n outline: none;\n vertical-align: middle;\n }\n }\n\n .mdc-chip__checkmark {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: variables.$leading-icon-size;\n }\n }\n\n .mdc-chip__checkmark-path {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n checkbox-functions.transition-exit(\n stroke-dashoffset,\n variables.$checkmark-animation-delay,\n variables.$checkmark-animation-duration\n );\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n stroke-width: 2px;\n stroke-dashoffset: checkbox-variables.$mark-path-length_;\n stroke-dasharray: checkbox-variables.$mark-path-length_;\n }\n }\n\n .mdc-chip__primary-action:focus {\n @include feature-targeting-mixins.targets($feat-structure) {\n outline: none;\n }\n }\n\n .mdc-chip--selected .mdc-chip__checkmark-path {\n @include feature-targeting-mixins.targets($feat-structure) {\n stroke-dashoffset: 0;\n }\n }\n\n .mdc-chip__icon--leading,\n .mdc-chip__icon--trailing {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Make these positioned elements, such that they're stacked above the\n // touch target element (`mdc-chip__touch`), so that clicks reach the\n // icons (e.g. for removable input chips).\n position: relative;\n }\n }\n\n // Change color of selected choice chips\n\n .mdc-chip-set--choice {\n .mdc-chip {\n @include selected-ink-color-without-ripple_(primary, $query: $query);\n }\n\n .mdc-chip--selected {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, surface);\n }\n }\n }\n\n // Add leading checkmark to filter chips with no leading icon\n\n .mdc-chip__checkmark-svg {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 0;\n height: variables.$leading-icon-size;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: width variables.$width-animation-duration animation-variables.$standard-curve-timing-function;\n }\n }\n\n .mdc-chip--selected .mdc-chip__checkmark-svg {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: variables.$leading-icon-size;\n }\n }\n\n // Add leading checkmark to filter chips with a leading icon\n\n .mdc-chip-set--filter {\n .mdc-chip__icon--leading {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: opacity variables.$opacity-animation-duration linear;\n transition-delay: variables.$leading-icon-delay;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n\n + .mdc-chip__checkmark {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: opacity variables.$opacity-animation-duration linear;\n\n // Delay the checkmark transition.\n transition-delay: variables.$checkmark-with-leading-icon-delay;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n\n .mdc-chip__checkmark-svg {\n // stylelint-disable max-nesting-depth\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: width 0ms;\n }\n\n // stylelint-enable max-nesting-depth\n }\n }\n }\n\n .mdc-chip--selected .mdc-chip__icon--leading {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n\n + .mdc-chip__checkmark {\n @include feature-targeting-mixins.targets($feat-structure) {\n // This ensures that the checkmark has zero width while the leading icon is still animating.\n width: 0;\n opacity: 1;\n }\n }\n }\n\n .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // This ensures that the leading icon doesn't fade in while the checkmark is fading out.\n opacity: 0;\n }\n\n + .mdc-chip__checkmark {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: variables.$leading-icon-size;\n }\n }\n }\n }\n}\n\n@mixin ripple($query: feature-targeting-functions.all()) {\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-chip {\n @include ripple-mixins.surface($query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.radius-bounded($query: $query, $ripple-target: $ripple-target);\n @include ink-color-ripple_(variables.$ink-color-default, $query: $query);\n\n #{$ripple-target} {\n @include ripple-mixins.target-common($query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow: hidden;\n }\n }\n }\n\n .mdc-chip-set--choice {\n .mdc-chip {\n @include selected-ink-color-ripple_(primary, $query: $query);\n }\n }\n}\n\n@mixin set-core-styles($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n @keyframes mdc-chip-entry {\n from {\n transform: scale(.8);\n opacity: .4;\n }\n\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n }\n\n .mdc-chip-set {\n @include set-spacing(8px, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n }\n }\n\n .mdc-chip-set--input .mdc-chip {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-chip-entry 100ms animation-variables.$deceleration-curve-timing-function;\n }\n }\n}\n\n@mixin shape-radius(\n $radius,\n $rtl-reflexive: false,\n $density-scale: variables.$density-scale,\n $query: feature-targeting-functions.all()) {\n\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n @include shape-mixins.radius(\n shape-functions.resolve-percentage-radius($height, $radius),\n $rtl-reflexive,\n $query: $query);\n\n #{$ripple-target} {\n @include shape-mixins.radius(\n shape-functions.resolve-percentage-radius($height, $radius),\n $rtl-reflexive,\n $query: $query\n );\n }\n}\n\n@mixin fill-color-accessible($color, $query: feature-targeting-functions.all()) {\n $fill-tone: theme-functions.tone($color);\n\n @include fill-color($color, $query: $query);\n\n @if ($fill-tone == \"dark\") {\n @include ink-color(text-primary-on-dark, $query: $query);\n @include selected-ink-color(text-primary-on-dark, $query: $query);\n @include leading-icon-color(text-primary-on-dark, $query: $query);\n @include trailing-icon-color(text-primary-on-dark, $query: $query);\n } @else {\n @include ink-color(text-primary-on-light, $query: $query);\n @include selected-ink-color(text-primary-on-light, $query: $query);\n @include leading-icon-color(text-primary-on-light, $query: $query);\n @include trailing-icon-color(text-primary-on-light, $query: $query);\n }\n}\n\n@mixin fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n @include ink-color-ripple_($color, $query: $query);\n @include ink-color-without-ripple_($color, $query: $query);\n}\n\n@mixin ink-color-without-ripple_($color, $query) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n\n &:hover {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin ink-color-ripple_($color, $query) {\n @include ripple-mixins.states($color, true, $query: $query, $ripple-target: $ripple-target);\n}\n\n@mixin selected-ink-color($color, $query: feature-targeting-functions.all()) {\n @include selected-ink-color-ripple_($color, $query: $query);\n @include selected-ink-color-without-ripple_($color, $query: $query);\n}\n\n@mixin selected-ink-color-without-ripple_($color, $query) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &.mdc-chip--selected {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n\n @include leading-icon-color($color, $query: $query);\n\n &:hover {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n }\n\n .mdc-chip__checkmark-path {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(stroke, $color);\n }\n }\n}\n\n@mixin selected-ink-color-ripple_($color, $query) {\n &.mdc-chip {\n @include ripple-mixins.states-selected(\n $color, $has-nested-focusable-element: true, $query: $query, $ripple-target: $ripple-target);\n }\n}\n\n@mixin outline(\n $width: 1px,\n $style: solid,\n $color: theme-variables.prop-value(on-surface),\n $query: feature-targeting-functions.all()) {\n @include outline-width($width, $query: $query);\n @include outline-style($style, $query: $query);\n @include outline-color($color, $query: $query);\n}\n\n@mixin outline-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $color);\n }\n}\n\n@mixin outline-style($style, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n border-style: $style;\n }\n}\n\n@mixin outline-width($width, $horizontal-padding: variables.$horizontal-padding, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Note: Adjust padding to maintain consistent width with non-outlined chips\n $horizontal-padding-value: math.max($horizontal-padding - $width, 0);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-right: $horizontal-padding-value;\n padding-left: $horizontal-padding-value;\n border-width: $width;\n }\n\n #{$ripple-target} {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: -$width;\n left: -$width;\n border: $width solid transparent;\n }\n }\n}\n\n@mixin horizontal-padding($padding, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-right: $padding;\n padding-left: $padding;\n }\n}\n\n@mixin height($height, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n}\n\n@mixin set-spacing($gap-size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: $gap-size / 2;\n }\n\n .mdc-chip {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: $gap-size / 2;\n }\n }\n\n .mdc-chip--touch {\n @include touch-target-mixins.margin(\n $component-height: variables.$height, $query: $query);\n }\n}\n\n@mixin leading-icon-color($color, $opacity: variables.$icon-opacity, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-chip__icon--leading {\n @include feature-targeting-mixins.targets($feat-color) {\n color: rgba(theme-variables.prop-value($color), $opacity);\n }\n }\n}\n\n@mixin trailing-icon-color(\n $color,\n $opacity: variables.$icon-opacity,\n $hover-opacity: variables.$trailing-icon-hover-opacity,\n $focus-opacity: variables.$trailing-icon-focus-opacity,\n $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include trailing-action-mixins.color($color, $query: $query);\n\n // TODO(b/151980552): Remove the following block\n .mdc-chip__icon--trailing {\n @include feature-targeting-mixins.targets($feat-color) {\n color: rgba(theme-variables.prop-value($color), $opacity);\n }\n\n &:hover {\n @include feature-targeting-mixins.targets($feat-color) {\n color: rgba(theme-variables.prop-value($color), $hover-opacity);\n }\n }\n\n &:focus {\n @include feature-targeting-mixins.targets($feat-color) {\n color: rgba(theme-variables.prop-value($color), $focus-opacity);\n }\n }\n }\n}\n\n// For customizing icon size, we need to increase specifity to ensure\n// overrides apply. Styles defined in the .material-icons CSS class are\n// loaded separately, so the order of CSS definitions is not guaranteed.\n\n@mixin leading-icon-size($size, $query: feature-targeting-functions.all()) {\n .mdc-chip__icon.mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden) {\n @include icon-size_($size, $query: $query);\n }\n}\n\n@mixin trailing-icon-size($size, $query: feature-targeting-functions.all()) {\n @include trailing-action-mixins.size($size, $query: $query);\n\n // TODO(b/151980552): Remove the following block\n .mdc-chip__icon.mdc-chip__icon--trailing {\n @include icon-size_($size, $query: $query);\n }\n}\n\n@mixin icon-size_($size, $query) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $size;\n height: $size;\n font-size: $size;\n }\n}\n\n@mixin leading-icon-margin(\n $left-margin: variables.$leading-icon-margin-left,\n $right-margin: variables.$leading-icon-margin-right,\n $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n &.mdc-chip--selected .mdc-chip__checkmark,\n .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden) {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, $left-margin, $right-margin);\n }\n }\n}\n\n@mixin trailing-icon-margin(\n $left-margin: variables.$trailing-icon-margin-left,\n $right-margin: variables.$trailing-icon-margin-right,\n $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include trailing-action-mixins.horizontal-spacing($left-margin, $right-margin, $query: $query);\n\n // TODO(b/151980552): Remove the following block\n .mdc-chip__icon--trailing {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, $left-margin, $right-margin);\n }\n }\n}\n\n@mixin elevation-transition($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: elevation-functions.transition-value();\n }\n\n &.mdc-chip--exit {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n elevation-functions.transition-value(),\n variables.$exit-transition;\n }\n }\n}\n\n///\n/// Sets the density scale for chips.\n///\n/// @param {Number | String} $density-scale - Density scale value for component.\n/// Supported density scale values are `-2`, `-1`, `0`.\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n @include height($height, $query: $query);\n\n @if $density-scale != 0 {\n @include touch-target-reset_($query: $query);\n }\n}\n\n///\n/// Resets touch target-related styles. This is called from the density mixin to\n/// automatically remove the increased touch target, since dense components\n/// don't have the same default a11y requirements.\n/// @access private\n///\n@mixin touch-target-reset_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Selector is necessary here to override original specificity.\n &.mdc-chip--touch {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n\n .mdc-chip__touch {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:color\";\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/density/variables\" as density-variables;\n@use \"@material/theme/variables\" as theme-variables;\n\n$fill-color-default: color.mix(theme-variables.prop-value(on-surface), theme-variables.prop-value(surface), 12%) !default;\n$ink-color-default: rgba(theme-variables.prop-value(on-surface), .87) !default;\n$horizontal-padding: 12px !default;\n$height: 32px !default;\n\n$minimum-height: 24px !default;\n$maximum-height: $height !default;\n$density-scale: density-variables.$default-scale !default;\n$density-config: (\n height: (\n default: $height,\n maximum: $maximum-height,\n minimum: $minimum-height,\n ),\n) !default;\n\n$icon-color: theme-variables.prop-value(on-surface) !default;\n$icon-opacity: .54 !default;\n$trailing-icon-hover-opacity: .62 !default;\n$trailing-icon-focus-opacity: .87 !default;\n$leading-icon-size: 20px !default;\n$trailing-icon-size: 18px !default;\n// Speed up delay to bridge gap between leading icon and checkmark transition.\n$leading-icon-delay: -50ms !default;\n$checkmark-with-leading-icon-delay: 80ms !default;\n\n$checkmark-animation-delay: 50ms !default;\n$checkmark-animation-duration: 150ms !default;\n$width-animation-duration: 150ms !default;\n$opacity-animation-duration: 75ms !default;\n\n$leading-icon-margin-right: 4px !default;\n$leading-icon-margin-left: -4px !default;\n\n$trailing-icon-margin-right: -4px !default;\n$trailing-icon-margin-left: 4px !default;\n\n$exit-transition:\n opacity 75ms animation-variables.$standard-curve-timing-function,\n width 150ms animation-variables.$deceleration-curve-timing-function,\n padding 100ms linear,\n margin 100ms linear !default;\n","//\n// Copyright 2020 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/animation/functions\" as animation-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./variables\";\n@use \"./keyframes\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n @include color(variables.$color, $query);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n @include keyframes.container-rotate-keyframes_;\n @include keyframes.spinner-layer-rotate-keyframes_;\n @include keyframes.color-1-fade-in-out-keyframes_;\n @include keyframes.color-2-fade-in-out-keyframes_;\n @include keyframes.color-3-fade-in-out-keyframes_;\n @include keyframes.color-4-fade-in-out-keyframes_;\n @include keyframes.left-spin-keyframes_;\n @include keyframes.right-spin-keyframes_;\n }\n\n .mdc-circular-progress {\n @include size_(variables.$default-size, $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n position: relative;\n /* @noflip */\n direction: ltr;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.exit-temporary(opacity, 250ms);\n }\n }\n\n .mdc-circular-progress--small {\n @include size_(small, $query);\n }\n\n .mdc-circular-progress--medium {\n @include size_(medium, $query);\n }\n\n .mdc-circular-progress--large {\n @include size_(large, $query);\n }\n\n .mdc-circular-progress__determinate-container,\n .mdc-circular-progress__indeterminate-circle-graphic,\n .mdc-circular-progress__indeterminate-container,\n .mdc-circular-progress__spinner-layer {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n }\n\n .mdc-circular-progress__determinate-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: rotate(-90deg);\n }\n }\n\n .mdc-circular-progress__indeterminate-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n }\n\n\n .mdc-circular-progress__determinate-circle-graphic,\n .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n fill: transparent;\n }\n }\n\n .mdc-circular-progress__determinate-circle {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.enter(stroke-dashoffset, 500ms);\n }\n }\n\n .mdc-circular-progress__gap-patch {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n /* @noflip */\n left: 47.5%;\n box-sizing: border-box;\n width: 5%;\n height: 100%;\n overflow: hidden;\n }\n\n .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n /* @noflip */\n left: -900%;\n width: 2000%;\n transform: rotate(180deg);\n }\n }\n }\n\n .mdc-circular-progress__circle-clipper {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n position: relative;\n width: 50%;\n height: 100%;\n overflow: hidden;\n }\n\n .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 200%;\n }\n }\n }\n\n .mdc-circular-progress__circle-right {\n .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n /* @noflip */\n left: -100%;\n }\n }\n }\n\n .mdc-circular-progress--indeterminate {\n .mdc-circular-progress__determinate-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n }\n\n .mdc-circular-progress__indeterminate-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n\n @include indeterminate-active-animations_($query);\n }\n\n .mdc-circular-progress--closed {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n }\n}\n\n// Public mixins\n\n/// Customizes the stroke-color of the indicator. Applies to the\n/// determinate variant, and also the indeterminate variant unless the\n/// four-color mixin is applied.\n/// @param {Color} $color - The desired stroke color.\n/// @see {mixin} indeterminate-colors\n@mixin color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-circular-progress__determinate-circle,\n .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"stroke\", $color);\n }\n }\n}\n\n/// Applies four animated stroke-colors to the indeterminate indicator.\n/// Applicable to the indeterminate variant only and overrides any single color\n/// currently set.\n/// @param {List} $colors - A list of four desired colors.\n/// @see {mixin} color\n@mixin indeterminate-colors($colors, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @if length($colors) != 4 {\n @error \"`mdc-circular-progress-colors` accepts exactly 4 colors\";\n }\n\n @for $i from 1 through 4 {\n .mdc-circular-progress__color-#{$i} .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-color) {\n stroke: nth($colors, $i);\n }\n }\n }\n}\n\n// Private mixins\n\n/// Sets the container size of the indicator and the stroke width appropriate\n/// for the size according to Material Design guidelines. The dimensions are\n/// predefined for one of three discrete sizes listed below only.\n/// @param {String} $size - Choose from small, medium, or large.\n/// @access private\n@mixin size_($size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n $resolved-size: map-get(variables.$container-side-length, $size);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $resolved-size;\n height: $resolved-size;\n }\n\n .mdc-circular-progress__determinate-circle-graphic,\n .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n stroke-width: map-get(variables.$stroke-width, $size);\n }\n }\n\n .mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n stroke-width: map-get(variables.$stroke-width, $size) * .8;\n }\n }\n}\n\n/// Sets the animations for the indicator in indeterminate mode.\n/// @access private\n@mixin indeterminate-active-animations_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n .mdc-circular-progress__indeterminate-container {\n @include feature-targeting-mixins.targets($feat-animation) {\n $duration:\n 360deg *\n variables.$arc-time /\n (variables.$arc-start-rotation-interval + (360 - variables.$arc-size));\n\n animation: mdc-circular-progress-container-rotate $duration linear infinite;\n }\n }\n\n $spinner-rotate-animation:\n mdc-circular-progress-spinner-layer-rotate\n 4 * variables.$arc-time\n variables.$timing-function\n infinite both;\n\n .mdc-circular-progress__spinner-layer {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: $spinner-rotate-animation;\n }\n }\n\n @for $i from 1 through 4 {\n $color-fade-in-out-animation:\n mdc-circular-progress-color-#{$i}-fade-in-out\n 4 * variables.$arc-time\n variables.$timing-function\n infinite both;\n\n .mdc-circular-progress__color-#{$i} {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation:\n $spinner-rotate-animation, $color-fade-in-out-animation;\n }\n }\n }\n\n .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-circular-progress-left-spin variables.$arc-time variables.$timing-function infinite both;\n }\n }\n\n .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-circular-progress-right-spin variables.$arc-time variables.$timing-function infinite both;\n }\n }\n}\n","//\n// Copyright 2020 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"./variables\";\n\n/// Keyframes for the persistent rotation of the outermost container\n/// @access private\n@mixin container-rotate-keyframes_ {\n @keyframes mdc-circular-progress-container-rotate {\n to { transform: rotate(360deg); }\n }\n}\n\n/// Keyframes for the rotation of the spinner layer\n/// @access private\n@mixin spinner-layer-rotate-keyframes_ {\n @keyframes mdc-circular-progress-spinner-layer-rotate {\n @for $i from 1 through 8 {\n #{$i * 12.5}% {\n transform: rotate($i * .5 * variables.$arc-size);\n }\n }\n }\n}\n\n/// Keyframes for the fade-in and fade-out of the first color.\n/// .99 opacity is used to force subpixel rendering.\n/// @access private\n@mixin color-1-fade-in-out-keyframes_ {\n @keyframes mdc-circular-progress-color-1-fade-in-out {\n from { opacity: .99; }\n 25% { opacity: .99; }\n 26% { opacity: 0; }\n 89% { opacity: 0; }\n 90% { opacity: .99; }\n to { opacity: .99; }\n }\n}\n\n/// Keyframes for the fade-in and fade-out of the second color.\n/// .99 opacity is used to force subpixel rendering.\n/// @access private\n@mixin color-2-fade-in-out-keyframes_ {\n @keyframes mdc-circular-progress-color-2-fade-in-out {\n from { opacity: 0; }\n 15% { opacity: 0; }\n 25% { opacity: .99; }\n 50% { opacity: .99; }\n 51% { opacity: 0; }\n to { opacity: 0; }\n }\n}\n\n/// Keyframes for the fade-in and fade-out of the third color.\n/// .99 opacity is used to force subpixel rendering.\n/// @access private\n@mixin color-3-fade-in-out-keyframes_ {\n @keyframes mdc-circular-progress-color-3-fade-in-out {\n from { opacity: 0; }\n 40% { opacity: 0; }\n 50% { opacity: .99; }\n 75% { opacity: .99; }\n 76% { opacity: 0; }\n to { opacity: 0; }\n }\n}\n\n/// Keyframes for the fade-in and fade-out of the fourth color.\n/// .99 opacity is used to force subpixel rendering.\n/// @access private\n@mixin color-4-fade-in-out-keyframes_ {\n @keyframes mdc-circular-progress-color-4-fade-in-out {\n from { opacity: 0; }\n 65% { opacity: 0; }\n 75% { opacity: .99; }\n 90% { opacity: .99; }\n to { opacity: 0; }\n }\n}\n\n/// Keyframes for the expansion and contraction of the arc for the\n/// left semi-circle.\n/// @access private\n@mixin left-spin-keyframes_ {\n @keyframes mdc-circular-progress-left-spin {\n from { transform: rotate(265deg); }\n 50% { transform: rotate(130deg); }\n to { transform: rotate(265deg); }\n }\n}\n\n/// Keyframes for the expansion and contraction of the arc for the\n/// right semi-circle.\n/// @access private\n@mixin right-spin-keyframes_ {\n @keyframes mdc-circular-progress-right-spin {\n from { transform: rotate(-265deg); }\n 50% { transform: rotate(-130deg); }\n to { transform: rotate(-265deg); }\n }\n}\n","//\n// Copyright 2019 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"@material/animation/functions\";\n@use \"@material/checkbox/mixins\" as checkbox-mixins;\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/elevation/mixins\";\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/icon-button/mixins\" as icon-button-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as variables2; // for mdc-theme-prop-value.\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-typography: feature-targeting-functions.create-target($query, typography);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n // postcss-bem-linter: define data-table\n\n .mdc-data-table__content {\n @include typography-mixins.typography(body2, $query: $query);\n }\n\n .mdc-data-table {\n @include fill-color(variables.$fill-color, $query: $query);\n @include shape-radius(variables.$shape-radius, $query: $query);\n @include stroke-size(variables.$stroke-size, $query: $query);\n @include stroke-color(variables.$stroke-color, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n -webkit-overflow-scrolling: touch; // Lets it scroll lazy (iOS)\n display: inline-flex;\n flex-direction: column;\n box-sizing: border-box;\n overflow-x: auto;\n position: relative;\n }\n }\n\n // Note that we don't output the color styles inside the `@at-root`,\n // because it makes it difficult to consume by projects that wrap their\n // themes in a class (e.g. `.my-theme { @include mdc-data-table-core-style() }`).\n @include row-fill-color(variables.$row-fill-color, $query: $query);\n @include header-row-fill-color(variables.$header-row-fill-color, $query: $query);\n @include selected-row-fill-color(variables.$selected-row-fill-color, $query: $query);\n @include divider-color(variables.$divider-color, $query: $query);\n @include divider-size(variables.$divider-size, $query: $query);\n @include row-hover-fill-color(variables.$row-hover-fill-color, $query: $query);\n @include header-row-text-color(variables.$header-row-text-color, $query: $query);\n @include row-text-color(variables.$row-text-color, $query: $query);\n @include density(variables.$default-density-scale, $query: $query);\n @include cell-padding(\n $leading-padding: variables.$cell-leading-padding,\n $trailing-padding: variables.$cell-trailing-padding,\n $query: $query\n );\n @include sort-icon-color(variables.$sort-icon-color, $query: $query);\n @include sort-icon-active-color(variables.$sort-icon-active-color, $query: $query);\n\n .mdc-data-table__table {\n @include feature-targeting-mixins.targets($feat-structure) {\n min-width: 100%; // Makes table full-width of its container (Firefox / IE11)\n border: 0;\n white-space: nowrap;\n border-collapse: collapse;\n /**\n * With table-layout:fixed, table and column widths are defined by the width\n * of the first row of cells. Cells in subsequent rows do not affect column\n * widths. This results in a predictable table layout and may also speed up\n * rendering.\n */\n table-layout: fixed;\n }\n }\n\n .mdc-data-table__cell {\n @include typography-mixins.typography(body2, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n box-sizing: border-box;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n }\n\n .mdc-data-table__cell--numeric {\n @include feature-targeting-mixins.targets($feat-structure) {\n text-align: right;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.rtl {\n /* @noflip */\n text-align: left;\n }\n }\n }\n\n .mdc-data-table__header-cell {\n @include typography-mixins.typography(subtitle2, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n box-sizing: border-box;\n text-align: left;\n text-overflow: ellipsis;\n overflow: hidden;\n outline: none;\n\n @include rtl-mixins.rtl {\n /* @noflip */\n text-align: right;\n }\n }\n }\n\n .mdc-data-table__header-cell--numeric {\n @include feature-targeting-mixins.targets($feat-structure) {\n text-align: right;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.rtl {\n /* @noflip */\n text-align: left;\n }\n }\n }\n\n .mdc-data-table__sort-icon-button {\n @include icon-button-mixins.density(\n $density-scale: variables.$sort-icon-density-scale,\n $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, 4px);\n }\n\n .mdc-data-table__header-cell--numeric & {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, right, 4px);\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.standard(transform, $duration: 150ms);\n }\n\n .mdc-data-table__header-cell--sorted-descending & {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: rotate(-180deg);\n }\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n\n &:focus,\n .mdc-data-table__header-cell:hover &,\n .mdc-data-table__header-cell--sorted & {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n }\n\n .mdc-data-table__header-cell-wrapper {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n align-items: center;\n }\n }\n\n .mdc-data-table__header-cell--with-sort {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: pointer;\n }\n }\n\n .mdc-data-table__progress-indicator {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n position: absolute;\n width: 100%;\n }\n\n .mdc-data-table--in-progress & {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: block;\n }\n }\n }\n\n .mdc-data-table__scrim {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include theme-mixins.prop('background-color', surface);\n\n height: 100%;\n // TODO(b/151453287): Set appropriate opacity value once we've a UX\n // guidance.\n opacity: .32;\n position: absolute;\n top: 0;\n width: 100%;\n }\n }\n\n .mdc-data-table__pagination {\n @include typography-mixins.typography(body2, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n box-sizing: border-box;\n display: flex;\n justify-content: flex-end;\n }\n }\n\n .mdc-data-table__pagination-trailing {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, 4px);\n\n align-items: center;\n display: flex;\n }\n }\n\n .mdc-data-table__pagination-button {\n @include icon-button-mixins.flip-icon-in-rtl($query: $query);\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, right, 4px);\n }\n }\n\n .mdc-data-table__pagination-total {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, right, 36px);\n\n white-space: nowrap;\n }\n }\n}\n\n/// Sets the color of sort icon button when it is in idle state.\n/// (icon showed on header cell focus)\n/// @param {String} $color - Color of sort icon button\n@mixin sort-icon-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__sort-icon-button {\n @include icon-button-mixins.ink-color($color, $query: $query);\n }\n}\n\n/// Sets the color of sort icon button when it is activated (sorted).\n/// @param {String} $color - Color of sort icon button\n@mixin sort-icon-active-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button {\n @include icon-button-mixins.ink-color($color, $query: $query);\n }\n}\n\n@mixin fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"background-color\", $color);\n }\n}\n\n@mixin header-row-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__header-row {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"background-color\", $color);\n }\n }\n}\n\n@mixin row-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__row {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"background-color\", $color);\n }\n }\n}\n\n@mixin selected-row-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__row--selected {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"background-color\", $color);\n }\n }\n}\n\n@mixin checked-icon-color($color, $query: feature-targeting-functions.all()) {\n .mdc-data-table__header-row-checkbox,\n .mdc-data-table__row-checkbox {\n @include checkbox-mixins.focus-indicator-color($color, $query: $query);\n @include checkbox-mixins.container-colors($marked-stroke-color: $color, $marked-fill-color: $color, $query: $query);\n }\n}\n\n@mixin divider-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__row,\n .mdc-data-table__pagination {\n @include feature-targeting-mixins.targets($feat-color) {\n border-top-color: $color;\n }\n }\n}\n\n@mixin divider-size($size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-data-table__row,\n .mdc-data-table__pagination {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-top-width: $size;\n border-top-style: solid;\n }\n }\n}\n\n@mixin row-hover-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__row:not(.mdc-data-table__row--selected):hover {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"background-color\", $color);\n }\n }\n}\n\n@mixin header-row-text-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__header-cell {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"color\", $color);\n }\n }\n}\n\n@mixin row-text-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-data-table__cell {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(\"color\", $color);\n }\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n}\n\n@mixin stroke-size($size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n border-width: $size;\n border-style: solid;\n }\n}\n\n@mixin stroke-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n border-color: $color;\n }\n}\n\n@mixin header-cell-height($height, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-data-table__header-cell {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n }\n}\n\n@mixin cell-height($height, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-data-table__cell,\n .mdc-data-table__pagination {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n }\n}\n\n@mixin cell-padding(\n $leading-padding: variables.$cell-leading-padding,\n $trailing-padding: variables.$cell-trailing-padding,\n $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-data-table__cell,\n .mdc-data-table__header-cell {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-right: $trailing-padding;\n padding-left: $leading-padding;\n }\n }\n\n .mdc-data-table__header-cell--checkbox,\n .mdc-data-table__cell--checkbox {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, $leading-padding, 0);\n }\n }\n}\n\n@mixin column-widths($width-list, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @for $i from 1 through list.length($width-list) {\n .mdc-data-table__row > :nth-child(#{$i}) {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: list.nth($width-list, $i);\n }\n }\n }\n}\n\n///\n/// Sets density scale for data table. Use corresponding density mixins of child components (such as Checkbox) to apply\n/// density scales which will be rendered inside data table.\n///\n/// @param {Number | String} $density-scale - Density scale value for component. Supported density scale values `-4`,\n/// `-3`, `-2`, `-1`, `0`.\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n @include cell-height($height, $query: $query);\n @include header-cell-height(variables.get-header-cell-height($height), $query: $query);\n}\n\n@mixin theme-baseline($query: feature-targeting-functions.all()) {\n @include checked-icon-color(variables.$checked-icon-color, $query: $query);\n}\n","//\n// Copyright 2019 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/theme/variables\" as theme-variables;\n@use \"@material/density/variables\" as density-variables;\n\n$fill-color: surface !default;\n$header-row-fill-color: inherit !default;\n$row-fill-color: inherit !default;\n$selected-row-fill-color: rgba(theme-variables.prop-value(primary), .04) !default;\n$checked-icon-color: primary !default;\n$divider-color: rgba(theme-variables.prop-value(on-surface), .12) !default;\n$divider-size: 1px !default;\n$row-hover-fill-color: rgba(theme-variables.prop-value(on-surface), .04) !default;\n$checkbox-touch-dimension: 48px !default;\n\n$header-row-text-color: rgba(theme-variables.prop-value(on-surface), .87) !default;\n$row-text-color: rgba(theme-variables.prop-value(on-surface), .87) !default;\n\n$sort-icon-color: rgba(theme-variables.prop-value(on-surface), .6) !default;\n$sort-icon-active-color: rgba(theme-variables.prop-value(on-surface), .87) !default;\n$sort-icon-density-scale: -5 !default;\n\n$shape-radius: medium !default;\n$stroke-size: 1px !default;\n$stroke-color: rgba(theme-variables.prop-value(on-surface), .12) !default;\n\n$cell-height: 52px !default;\n$header-cell-height: get-header-cell-height($cell-height) !default;\n$cell-leading-padding: 16px !default;\n$cell-trailing-padding: 16px !default;\n\n$minimum-cell-height: 36px !default;\n$maximum-cell-height: $cell-height !default;\n$default-density-scale: density-variables.$default-scale !default;\n$density-config: (\n height: (\n maximum: $cell-height,\n default: $cell-height,\n minimum: $minimum-cell-height,\n )\n);\n\n@function get-header-cell-height($height) {\n @return $height + 4px;\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:math\";\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/rtl/mixins\" as rtl;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // postcss-bem-linter: define icon-button\n .mdc-icon-button {\n @include base_($query: $query);\n @include density(0, $query: $query);\n }\n\n .mdc-icon-button__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n &.mdc-icon-button__icon--on {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n }\n }\n }\n\n .mdc-icon-button--on {\n .mdc-icon-button__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n &.mdc-icon-button__icon--on {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n }\n }\n }\n }\n // postcss-bem-linter: end\n}\n\n@mixin ripple($query: feature-targeting-functions.all()) {\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-icon-button {\n @include ripple-mixins.surface($query: $query);\n @include ripple-mixins.radius-unbounded($query: $query);\n @include ripple-mixins.states($query: $query);\n }\n}\n\n///\n/// Sets the density scale for icon button.\n///\n/// @param {Number | String} $density-scale - Density scale value for component.\n/// Supported density scale values range from `-5` to `0`, with `0` being the default.\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n $size: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: size,\n );\n\n @include size($size, $query: $query);\n}\n\n///\n/// Sets the size of the icon-button.\n///\n/// @param {Number} $size - Size value for icon-button.\n/// Size will set the width, height, and padding for the overall component.\n///\n@mixin size($size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $size;\n height: $size;\n padding: ($size - variables.$icon-size) / 2;\n }\n}\n\n///\n/// Sets the width, height and padding of icon button. Also changes the size of\n/// the icon itself based on button size.\n///\n/// @param {Number} $width - Width value for icon-button.\n/// @param {Number} $height - Height value for icon-button. (default: $width)\n/// @param {Number} $padding - Padding value for icon-button. (default: max($width, $height) / 2)\n/// @deprecated\n/// This mixin provides too much of low level customization.\n/// Please use mdc-icon-button-size instead.\n///\n@mixin icon-size($width, $height: $width, $padding: math.max($width,$height) / 2, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $width + $padding * 2;\n height: $height + $padding * 2;\n padding: $padding;\n font-size: math.max($width, $height);\n }\n\n // stylelint-disable-next-line selector-max-type\n svg,\n img {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $width;\n height: $height;\n }\n }\n}\n\n///\n/// Sets the font color and the ripple color to the provided color value.\n/// @param {Color} $color - The desired font and ripple color.\n///\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n @include ink-color_($color, $query: $query);\n @include ripple-mixins.states($color, $query: $query);\n}\n\n\n///\n/// Flips icon only in RTL context.\n///\n@mixin flip-icon-in-rtl($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-button__icon {\n @include rtl.rtl {\n @include feature-targeting-mixins.targets($feat-structure) {\n /* @noflip */\n transform: rotate(180deg);\n }\n }\n }\n}\n\n///\n/// Sets the font color to the provided color value for a disabled icon button.\n/// @param {Color} $color - The desired font color.\n///\n@mixin disabled-ink-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include ink-color_($color, $query: $query);\n }\n}\n\n@mixin base_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n border: none;\n outline: none;\n background-color: transparent;\n fill: currentColor;\n color: inherit;\n font-size: variables.$icon-size;\n text-decoration: none;\n cursor: pointer;\n user-select: none;\n }\n\n // stylelint-disable-next-line selector-max-type\n svg,\n img {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: variables.$icon-size;\n height: variables.$icon-size;\n }\n }\n\n @include disabled-ink-color(text-disabled-on-light, $query: $query);\n\n @include if-disabled_ {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: default;\n pointer-events: none;\n }\n }\n}\n\n///\n/// Sets the font color to the provided color value. This can be wrapped in\n/// a state qualifier such as `mdc-icon-button-if-disabled_`.\n/// @access private\n///\n@mixin ink-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n}\n\n///\n/// Helps style the icon button in its disabled state.\n/// @access private\n///\n@mixin if-disabled_ {\n &:disabled {\n @content;\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:math\";\n@use \"@material/animation/functions\" as animation-functions;\n@use \"@material/button/variables\" as button-variables;\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as theme-variables; // for mdc-theme-prop-value\n@use \"@material/touch-target/variables\" as touch-target-variables;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include elevation-mixins.overlay-common($query); // COPYBARA_COMMENT_THIS_LINE\n\n // postcss-bem-linter: define dialog\n\n .mdc-dialog,\n .mdc-dialog__scrim {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: fixed;\n top: 0;\n left: 0;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n }\n }\n\n .mdc-dialog {\n @include container-fill-color(surface, $query: $query);\n @include scrim-color(variables.$scrim-color, $query: $query);\n @include title-ink-color(variables.$title-ink-color, $query: $query);\n @include content-ink-color(variables.$content-ink-color, $query: $query);\n @include scroll-divider-color(variables.$scroll-divider-color, $query: $query);\n @include min-width(variables.$min-width, $query: $query);\n @include max-width(variables.$max-width, variables.$margin, $query: $query);\n @include max-height(null, variables.$margin, $query: $query);\n @include shape-radius(medium, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // Use `display: none` instead of `visibility: hidden` to avoid recalculating layout when the dialog is closed.\n display: none;\n z-index: variables.$z-index;\n }\n }\n\n .mdc-dialog__scrim {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n z-index: -1;\n }\n }\n\n // This wrapper element is needed to make max-height work in IE 11.\n // See https://github.com/philipwalton/flexbugs/issues/216\n .mdc-dialog__container {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n flex-direction: row; // IE 11\n align-items: center;\n justify-content: space-around; // Ensure Safari centers the dialog (because it treats the container's width oddly)\n box-sizing: border-box;\n height: 100%;\n transform: scale(.8);\n opacity: 0;\n // This element is necessary for IE 11 and needs to have `height: 100%`.\n // Let clicks on element fall through to scrim element underneath.\n pointer-events: none;\n }\n }\n\n .mdc-dialog__surface {\n @include elevation-mixins.overlay-surface-position($query: $query);\n @include elevation-mixins.overlay-dimensions(100%, $query: $query);\n @include elevation-mixins.elevation(24, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n flex-direction: column;\n flex-grow: 0; // IE 11\n flex-shrink: 0; // IE 11\n box-sizing: border-box;\n max-width: 100%; // IE 11\n max-height: 100%; // IE 11\n pointer-events: auto; // Override from `.mdc-dialog__container`.\n // IE 11: Otherwise, scrolling content in `mdc-dialog__content` overflows.\n overflow-y: auto;\n\n @include rtl-mixins.rtl(\".mdc-dialog\") {\n /* @noflip */\n text-align: right;\n }\n }\n }\n\n .mdc-dialog__title {\n @include typography-mixins.text-baseline($top: 40px, $display: block, $query: $query);\n @include typography-mixins.typography(headline6, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative;\n flex-shrink: 0;\n box-sizing: border-box;\n margin: 0;\n padding: 0 24px variables.$title-bottom-padding;\n border-bottom: 1px solid transparent;\n\n @include rtl-mixins.rtl(\".mdc-dialog\") {\n /* @noflip */\n text-align: right;\n }\n }\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n .mdc-dialog--scrollable .mdc-dialog__title {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Adjust bottom padding to make title height align to spec when divider is present.\n // (Titles for alert dialogs w/o dividers align based on text baseline. All spec values are divisible by 4.)\n padding-bottom: variables.$title-bottom-padding + 6px;\n }\n }\n\n .mdc-dialog__content {\n @include typography-mixins.typography(body1, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n flex-grow: 1;\n box-sizing: border-box;\n margin: 0;\n padding: 20px 24px; // Note: the top padding is only 20px for dialogs without titles; see below for override\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n }\n\n // The content element already has top/bottom padding, so we need to suppress margins on its first/last children.\n > :first-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-top: 0;\n }\n }\n\n // The content element already has top/bottom padding, so we need to suppress margins on its first/last children.\n > :last-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-bottom: 0;\n }\n }\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n .mdc-dialog__title + .mdc-dialog__content {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Eliminate padding to bring as close to spec as possible, relying on title padding.\n // (Spec seems inconsistent RE title/body spacing on alert vs. simple variants.)\n padding-top: 0;\n }\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n .mdc-dialog--scrollable .mdc-dialog__content {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Reduce and equalize vertical paddings when scrollable dividers are present\n // (Note: this is intentionally after title + content to take precedence)\n padding-top: 8px;\n padding-bottom: 8px;\n }\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n .mdc-dialog__content .mdc-list:first-child:last-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Override default .mdc-list padding for content consisting exclusively of a MDC List\n padding: 6px 0 0; // Top padding balances with title height\n }\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern, selector-max-specificity\n .mdc-dialog--scrollable .mdc-dialog__content .mdc-list:first-child:last-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Override default .mdc-list padding for content consisting exclusively of a MDC List\n padding: 0;\n }\n }\n\n .mdc-dialog__actions {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n position: relative;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n box-sizing: border-box;\n min-height: 52px;\n margin: 0;\n padding: variables.$actions-padding;\n border-top: 1px solid transparent;\n }\n\n .mdc-dialog--stacked & {\n @include feature-targeting-mixins.targets($feat-structure) {\n flex-direction: column;\n align-items: flex-end;\n }\n }\n }\n\n .mdc-dialog__button {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, 8px);\n }\n\n &:first-child {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, 0);\n }\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n max-width: 100%; // Prevent long text from overflowing parent element in IE 11\n /* @noflip */\n text-align: right;\n\n @include rtl-mixins.rtl(\".mdc-dialog\") {\n /* @noflip */\n text-align: left;\n }\n }\n\n .mdc-dialog--stacked &:not(:first-child) {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-top: 12px;\n }\n }\n }\n\n .mdc-dialog--open,\n .mdc-dialog--opening,\n .mdc-dialog--closing {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n }\n }\n\n .mdc-dialog--opening {\n .mdc-dialog__scrim {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: opacity 150ms linear;\n }\n }\n\n .mdc-dialog__container {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: opacity 75ms linear, animation-functions.enter(transform, 150ms);\n }\n }\n }\n\n .mdc-dialog--closing {\n .mdc-dialog__scrim,\n .mdc-dialog__container {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: opacity 75ms linear;\n }\n }\n\n .mdc-dialog__container {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Dialog container scales up while opening, but should remain scaled up while closing\n transform: scale(1);\n }\n }\n }\n\n .mdc-dialog--open {\n .mdc-dialog__scrim {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n\n .mdc-dialog__container {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(1);\n opacity: 1;\n }\n }\n }\n\n // postcss-bem-linter: end\n\n // Class applied to body while dialog is open, to prevent scrolling behind the dialog\n .mdc-dialog-scroll-lock {\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow: hidden;\n }\n }\n}\n\n@mixin container-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-dialog__surface {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin scrim-color($color, $opacity: variables.$scrim-opacity, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-dialog__scrim {\n @include feature-targeting-mixins.targets($feat-color) {\n background-color: rgba(theme-variables.prop-value($color), $opacity);\n }\n }\n}\n\n@mixin title-ink-color($color, $opacity: variables.$title-ink-opacity, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-dialog__title {\n @include feature-targeting-mixins.targets($feat-color) {\n color: rgba(theme-variables.prop-value($color), $opacity);\n }\n }\n}\n\n@mixin content-ink-color($color, $opacity: variables.$content-ink-opacity, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-dialog__content {\n @include feature-targeting-mixins.targets($feat-color) {\n color: rgba(theme-variables.prop-value($color), $opacity);\n }\n }\n}\n\n@mixin scroll-divider-color(\n $color,\n $opacity: variables.$scroll-divider-opacity,\n $query: feature-targeting-functions.all()\n) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &.mdc-dialog--scrollable .mdc-dialog__title,\n &.mdc-dialog--scrollable .mdc-dialog__actions {\n @include feature-targeting-mixins.targets($feat-color) {\n border-color: rgba(theme-variables.prop-value($color), $opacity);\n }\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-dialog__surface {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n }\n}\n\n@mixin min-width($min-width, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-dialog__surface {\n @include feature-targeting-mixins.targets($feat-structure) {\n min-width: $min-width;\n }\n }\n}\n\n@mixin max-width($max-width, $margin, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $max-size-calc-expr: calc(100vw - #{$margin * 2});\n\n .mdc-dialog__surface {\n @include feature-targeting-mixins.targets($feat-structure) {\n @if $max-width {\n $max-width-breakpoint: $max-width + ($margin * 2);\n\n // Fit snugly within the viewport at smaller screen sizes.\n @media (max-width: $max-width-breakpoint) {\n max-width: $max-size-calc-expr;\n }\n\n // Once the screen gets big enough, apply a fixed maximum width.\n @media (min-width: $max-width-breakpoint) {\n max-width: $max-width;\n }\n } @else {\n max-width: $max-size-calc-expr;\n }\n }\n }\n}\n\n@mixin max-height($max-height, $margin, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $max-size-calc-expr: calc(100% - #{$margin * 2});\n\n .mdc-dialog__surface {\n @include feature-targeting-mixins.targets($feat-structure) {\n @if $max-height {\n $max-height-breakpoint: $max-height + ($margin * 2);\n\n // Fit snugly within the viewport at smaller screen sizes.\n @media (max-height: $max-height-breakpoint) {\n max-height: $max-size-calc-expr;\n }\n\n // Once the screen gets big enough, apply a fixed maximum height.\n @media (min-height: $max-height-breakpoint) {\n max-height: $max-height;\n }\n } @else {\n max-height: $max-size-calc-expr;\n }\n }\n }\n\n // Target IE 11.\n @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n // On IE 11, if surface height is fixed and container height is 100%,\n // scrolling content overflows. So, reset height if surface height\n // is fixed.\n .mdc-dialog__container {\n @include feature-targeting-mixins.targets($feat-structure) {\n /* stylelint-disable */\n // Disable stylelint here, as nesting depth > 3 is required to\n // work around IE 11.\n @if $max-height {\n $max-height-breakpoint: $max-height + ($margin * 2);\n\n @media (min-height: $max-height-breakpoint) {\n align-items: stretch;\n height: auto;\n }\n }\n /* stylelint-enable*/\n }\n }\n }\n}\n\n// Applied to dialogs that have buttons with an increased touch target.\n@mixin with-touch-target($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $touch-target-margin:\n (touch-target-variables.$height - button-variables.$height) / 2;\n $vertical-padding: math.max(0, variables.$actions-padding - $touch-target-margin);\n\n // Buttons with an increased touch target have added vertical margin, so\n // decrease the actions element padding to compensate.\n .mdc-dialog__actions {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-top: $vertical-padding;\n padding-bottom: $vertical-padding;\n\n // The below styles override the default button touch target values,\n // which otherwise cause `mdc-dialog__surface` to scroll unnnecessarily\n // in IE 11.\n .mdc-button__touch {\n top: -$touch-target-margin; // IE 11\n transform: none; // IE 11\n }\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n$scrim-color: on-surface !default;\n$title-ink-color: on-surface !default;\n$content-ink-color: on-surface !default;\n$scroll-divider-color: on-surface !default;\n\n$scrim-opacity: .32 !default;\n$title-ink-opacity: .87 !default;\n$content-ink-opacity: .6 !default;\n$scroll-divider-opacity: .12 !default;\n\n$min-width: 280px !default;\n$max-width: 560px !default;\n$margin: 16px !default;\n$title-bottom-padding: 9px !default;\n$actions-padding: 8px !default;\n\n$z-index: 7 !default;\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/animation/functions\" as functions2;\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/typography/variables\" as variables2;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as theme-variables;\n@use \"@material/list/mixins\" as list-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"./variables\";\n\n//\n// Public\n//\n\n@mixin core-styles($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n // postcss-bem-linter: define drawer\n .mdc-drawer {\n @include title-ink-color(variables.$title-ink-color, $query: $query);\n @include subtitle-ink-color(variables.$subtitle-ink-color, $query: $query);\n @include border-color(variables.$divider-color, $query: $query);\n @include surface-fill-color(variables.$surface-fill-color, $query: $query);\n @include item-icon-ink-color(variables.$item-inactive-ink-color, $query: $query);\n @include item-text-ink-color(variables.$item-inactive-ink-color, $query: $query);\n @include item-activated-icon-ink-color(variables.$item-activated-ink-color, $query: $query);\n @include item-activated-text-ink-color(variables.$item-activated-ink-color, $query: $query);\n @include shape-radius(large, $query: $query);\n @include item-shape-radius(4px, $query: $query);\n @include z-index(variables.$z-index, $query: $query);\n @include width(variables.$width, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n box-sizing: border-box;\n height: 100%;\n /* @noflip */\n border-right-width: 1px;\n /* @noflip */\n border-right-style: solid;\n overflow: hidden;\n\n @include rtl-mixins.rtl {\n /* @noflip */\n border-right-width: 0;\n /* @noflip */\n border-left-width: 1px;\n /* @noflip */\n border-right-style: none;\n /* @noflip */\n border-left-style: solid;\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-property: transform;\n transition-timing-function: animation-variables.$standard-curve-timing-function;\n }\n\n @include list-item_($query);\n }\n\n .mdc-drawer--animate {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: translateX(-100%);\n\n @include rtl-mixins.rtl {\n transform: translateX(100%);\n }\n }\n }\n\n .mdc-drawer--opening {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: translateX(0);\n\n // Required to level the specificity with animate class.\n @include rtl-mixins.rtl {\n transform: translateX(0);\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-duration: variables.$animation-enter;\n }\n }\n\n .mdc-drawer--closing {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: translateX(-100%);\n\n @include rtl-mixins.rtl {\n transform: translateX(100%);\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-duration: variables.$animation-exit;\n }\n }\n\n .mdc-drawer__header {\n @include feature-targeting-mixins.targets($feat-structure) {\n flex-shrink: 0;\n box-sizing: border-box;\n min-height: 64px; // same as $mdc-top-app-bar-row-height\n padding: 0 variables.$surface-padding 4px;\n }\n }\n\n .mdc-drawer__title {\n @include typography-mixins.typography(headline6, $query: $query);\n @include typography-mixins.text-baseline($top: 36px, $bottom: 20px, $query: $query);\n }\n\n .mdc-drawer__subtitle {\n @include typography-mixins.typography(body2, $query: $query);\n @include typography-mixins.text-baseline($top: 20px, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-bottom: 0;\n }\n }\n\n .mdc-drawer__content {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: 100%;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n\n // postcss-bem-linter: end\n}\n\n@mixin dismissible-core-styles($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n .mdc-drawer--dismissible {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, 0);\n\n display: none;\n position: absolute;\n\n &.mdc-drawer--open {\n display: flex;\n }\n }\n }\n\n .mdc-drawer-app-content {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, 0);\n\n position: relative;\n }\n }\n}\n\n@mixin modal-core-styles($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n .mdc-drawer--modal {\n @include scrim-fill-color(variables.$modal-scrim-color, $query: $query);\n @include elevation-mixins.elevation(variables.$modal-elevation, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, 0);\n\n display: none;\n position: fixed;\n }\n\n &.mdc-drawer--open {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n }\n }\n }\n\n .mdc-drawer-scrim {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: variables.$z-index - 1;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-property: opacity;\n transition-timing-function: animation-variables.$standard-curve-timing-function;\n }\n\n .mdc-drawer--open + & {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: block;\n }\n }\n\n .mdc-drawer--animate + & {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n }\n\n .mdc-drawer--opening + & {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-duration: variables.$animation-enter;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n\n .mdc-drawer--closing + & {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-duration: variables.$animation-exit;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n }\n }\n}\n\n@mixin activated-overlay-color($color, $query: functions.all()) {\n :not(.mdc-list--non-interactive) > .mdc-list-item {\n @include ripple-mixins.states-activated($color, $query: $query);\n }\n}\n\n@mixin border-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $value: rgba(theme-variables.prop-value($color), variables.$divider-opacity);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $value);\n }\n}\n\n@mixin item-shape-radius($radius, $rtl-reflexive: true, $query: functions.all()) {\n @include list-mixins.single-line-shape-radius($radius, $rtl-reflexive, $query: $query);\n}\n\n@mixin shape-radius($radius, $query: functions.all()) {\n @if list.length($radius) > 2 {\n @error \"Invalid radius: '#{$radius}' component doesn't allow customizing all corners\";\n } @else if list.length($radius) == 2 {\n $radius: 0 list.nth($radius, 1) list.nth($radius, 2) 0;\n } @else {\n $radius: 0 $radius $radius 0;\n }\n\n @include shape-mixins.radius($radius, $rtl-reflexive: true, $query: $query);\n}\n\n@mixin divider-color($color, $query: functions.all()) {\n $value: rgba(theme-variables.prop-value($color), variables.$divider-opacity);\n\n @include list-mixins.divider-color($value, $query: $query);\n}\n\n@mixin title-ink-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $value: rgba(theme-variables.prop-value($color), variables.$title-ink-opacity);\n\n .mdc-drawer__title {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $value);\n }\n }\n}\n\n@mixin subtitle-ink-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $value: rgba(theme-variables.prop-value($color), variables.$subtitle-ink-opacity);\n\n @include list-mixins.group-subheader-ink-color($value, $query: $query);\n\n .mdc-drawer__subtitle {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $value);\n }\n }\n}\n\n@mixin fill-color-accessible($color, $query: functions.all()) {\n $accessibleColor: theme-variables.accessible-ink-color($color);\n\n @include title-ink-color($accessibleColor, $query: $query);\n @include subtitle-ink-color($accessibleColor, $query: $query);\n @include item-text-ink-color($accessibleColor, $query: $query);\n @include item-icon-ink-color($accessibleColor, $query: $query);\n @include surface-fill-color($color, $query: $query);\n}\n\n@mixin item-icon-ink-color($color, $query: functions.all()) {\n $value: rgba(theme-variables.prop-value($color), variables.$item-inactive-icon-ink-opacity);\n\n @include list-mixins.item-graphic-ink-color($value, $query: $query);\n}\n\n@mixin item-activated-icon-ink-color($color, $query: functions.all()) {\n $value: rgba(theme-variables.prop-value($color), variables.$item-active-icon-ink-opacity);\n\n .mdc-list-item--activated {\n @include list-mixins.item-graphic-ink-color($value, $query: $query);\n }\n}\n\n@mixin item-activated-text-ink-color($color, $query: functions.all()) {\n $value: rgba(theme-variables.prop-value($color), variables.$item-active-text-ink-opacity);\n\n .mdc-list-item--activated {\n @include list-mixins.item-primary-text-ink-color($value, $query: $query);\n }\n}\n\n@mixin item-text-ink-color($color, $query: functions.all()) {\n $value: rgba(theme-variables.prop-value($color), variables.$item-inactive-text-ink-opacity);\n\n .mdc-list-item {\n @include list-mixins.item-primary-text-ink-color($value, $query: $query);\n }\n}\n\n@mixin surface-fill-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $value: theme-variables.prop-value($color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $value);\n }\n}\n\n@mixin scrim-fill-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $value: rgba(theme-variables.prop-value($color), variables.$modal-scrim-opacity);\n\n + .mdc-drawer-scrim {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $value);\n }\n }\n}\n\n@mixin z-index($value, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n z-index: $value;\n }\n}\n\n@mixin width($width, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $width;\n }\n\n &.mdc-drawer--open:not(.mdc-drawer--closing) + .mdc-drawer-app-content {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, $width);\n }\n }\n}\n\n//\n// Private\n//\n@mixin list-item_($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n // postcss-bem-linter: ignore\n .mdc-list-item {\n @include typography-mixins.typography(subtitle2, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n height: calc(48px - 2 * #{variables.$list-item-spacing});\n // To accomodate margin conflict.\n margin: (variables.$list-item-spacing * 2) 8px;\n padding: 0 variables.$surface-padding / 2;\n }\n }\n\n // postcss-bem-linter: ignore\n .mdc-list-item:nth-child(1) {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-top: 2px;\n }\n }\n\n // postcss-bem-linter: ignore\n .mdc-list-item:nth-last-child(1) {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-bottom: 0;\n }\n }\n\n // postcss-bem-linter: ignore\n .mdc-list-group__subheader {\n @include typography-mixins.typography(body2, $query: $query);\n @include typography-mixins.text-baseline($top: 24px, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0;\n padding: 0 variables.$surface-padding;\n }\n }\n\n // postcss-bem-linter: ignore\n .mdc-list-divider {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 3px 0 4px;\n }\n }\n\n // Prevents list item children from being included in the click target.\n // postcss-bem-linter: ignore\n .mdc-list-item__text,\n .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n pointer-events: none;\n }\n }\n}\n","// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"sass:map\";\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/shape/functions\" as shape-functions;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/theme/functions\" as theme-functions;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/typography/variables\" as typography-variables;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"./variables\";\n@use \"@material/ripple/functions\" as ripple-functions;\n@use \"@material/theme/variables\" as theme-variables;\n\n//\n// Public\n//\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// list styles. It is recommended that most users use `mdc-list-core-styles` instead.\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-typography: feature-targeting-functions.create-target($query, typography);\n\n $item-primary-text-baseline-height: 32px;\n $item-secondary-text-baseline-height: 20px;\n $dense-item-primary-text-baseline-height: 24px;\n $divider-color: if(\n theme-functions.tone(theme-variables.$background) == \"dark\",\n variables.$divider-color-on-dark-bg,\n variables.$divider-color-on-light-bg\n );\n\n .mdc-list {\n @include base_($query);\n }\n\n @include single-line-density(variables.$single-line-density-scale, $query: $query);\n @include item-secondary-text-ink-color(text-secondary-on-background, $query);\n @include item-graphic-fill-color(transparent, $query);\n @include item-graphic-ink-color(text-icon-on-background, $query);\n @include item-meta-ink-color(text-hint-on-background, $query);\n @include group-subheader-ink-color(text-primary-on-background, $query);\n @include item-disabled-text-opacity(variables.$text-disabled-opacity, $query);\n @include item-disabled-text-color(variables.$text-disabled-color, $query);\n\n .mdc-list--dense {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-top: 4px;\n padding-bottom: 4px;\n font-size: .812rem;\n }\n }\n\n .mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include item-base_;\n }\n }\n\n // \"Selected\" is ephemeral and likely to change soon. E.g., selecting one or more photos to share in Google Photos.\n // \"Activated\" is more permanent. E.g., the currently highlighted navigation destination in a drawer.\n .mdc-list-item--selected,\n .mdc-list-item--activated {\n @include item-primary-text-ink-color(primary, $query);\n @include item-graphic-ink-color(primary, $query);\n }\n\n .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include graphic-size_(24px);\n\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n fill: currentColor;\n }\n }\n\n // Extra specificity is to override .material-icons display style if used in\n // conjunction with mdc-list-item__graphic\n // stylelint-disable plugin/selector-bem-pattern\n .mdc-list .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n }\n }\n // stylelint-enable plugin/selector-bem-pattern\n\n .mdc-list-item__meta {\n // stylelint-disable selector-class-pattern\n &:not(.material-icons) {\n @include typography-mixins.typography(caption, $query);\n }\n // stylelint-enable selector-class-pattern\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, auto, 0, \".mdc-list-item\");\n }\n }\n\n .mdc-list-item__text {\n @include typography-mixins.overflow-ellipsis($query);\n }\n\n // Disable interaction on label elements that may automatically\n // toggle corresponding checkbox / radio input.\n .mdc-list-item__text[for] {\n @include feature-targeting-mixins.targets($feat-structure) {\n pointer-events: none;\n }\n }\n\n .mdc-list-item__primary-text {\n @include typography-mixins.overflow-ellipsis($query);\n @include typography-mixins.text-baseline(\n $top: $item-primary-text-baseline-height,\n $bottom: $item-secondary-text-baseline-height,\n $display: block,\n $query: $query\n );\n\n // stylelint-disable plugin/selector-bem-pattern\n .mdc-list--dense & {\n @include typography-mixins.text-baseline(\n $top: $dense-item-primary-text-baseline-height,\n $bottom: $item-secondary-text-baseline-height,\n $query: $query\n );\n }\n // stylelint-enable plugin/selector-bem-pattern\n }\n\n .mdc-list-item__secondary-text {\n @include typography-mixins.typography(body2, $query);\n @include typography-mixins.overflow-ellipsis($query);\n @include typography-mixins.text-baseline(\n $top: $item-secondary-text-baseline-height,\n $display: block,\n $query: $query\n );\n\n // stylelint-disable plugin/selector-bem-pattern\n .mdc-list--dense & {\n @include feature-targeting-mixins.targets($feat-structure) {\n font-size: inherit;\n }\n }\n // stylelint-enable plugin/selector-bem-pattern\n }\n\n // stylelint-disable plugin/selector-bem-pattern\n .mdc-list--dense .mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: 40px;\n }\n }\n\n .mdc-list--dense .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include graphic-size_(20px);\n }\n }\n\n .mdc-list--avatar-list .mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: 56px;\n }\n }\n\n .mdc-list--avatar-list .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include graphic-size_(40px);\n\n border-radius: 50%;\n }\n }\n\n .mdc-list--two-line .mdc-list-item__text {\n @include feature-targeting-mixins.targets($feat-structure) {\n align-self: flex-start;\n }\n }\n\n .mdc-list--two-line .mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: 72px;\n }\n }\n\n .mdc-list--two-line.mdc-list--dense .mdc-list-item,\n .mdc-list--avatar-list.mdc-list--dense .mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: 60px;\n }\n }\n\n .mdc-list--avatar-list.mdc-list--dense .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include graphic-size_(36px);\n }\n }\n\n // Only change mouse cursor for interactive list items which are not disabled.\n :not(.mdc-list--non-interactive) > :not(.mdc-list-item--disabled).mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: pointer;\n }\n }\n\n // Override anchor tag styles for the use-case of a list being used for navigation\n // stylelint-disable selector-max-type,selector-no-qualifying-type\n a.mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n color: inherit;\n text-decoration: none;\n }\n }\n // stylelint-enable selector-max-type,selector-no-qualifying-type\n\n .mdc-list-divider {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: 0;\n margin: 0;\n border: none;\n border-bottom-width: 1px;\n border-bottom-style: solid;\n }\n }\n\n // Note: ideally we'd be able to hoist this to the top-level `$feat-color`, but doing so\n // will cause the `border` declaration on `.mdc-list-divider` above to override it.\n @include divider-color($divider-color, $query);\n\n .mdc-list-divider--padded {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Leave gaps on each side to match the padding on list items\n margin: 0 variables.$side-padding;\n }\n }\n\n .mdc-list-divider--inset {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(margin, left, variables.$text-offset, \".mdc-list-group\");\n\n width: calc(100% - #{variables.$text-offset});\n }\n }\n\n .mdc-list-divider--inset.mdc-list-divider--padded {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: calc(100% - #{variables.$text-offset} - #{variables.$side-padding});\n }\n }\n\n .mdc-list-group {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Cancel top/bottom padding on individual lists within group\n .mdc-list {\n padding: 0;\n }\n }\n }\n\n .mdc-list-group__subheader {\n $mdc-list-subheader-virtual-height: 3rem;\n $mdc-list-subheader-leading: map.get(map.get(typography-variables.$styles, body1), line-height);\n $mdc-list-subheader-margin: calc((#{$mdc-list-subheader-virtual-height} - #{$mdc-list-subheader-leading}) / 2);\n\n @include typography-mixins.typography(subtitle1, $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: $mdc-list-subheader-margin variables.$side-padding;\n }\n }\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// list styles. It is recommended that most users use `mdc-list-core-styles` instead.\n@mixin ripple($query: feature-targeting-functions.all()) {\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n // List items should support states by default, but it should be possible to opt out.\n // Direct child combinator is necessary for non-interactive modifier on parent to not\n // match this selector.\n :not(.mdc-list--non-interactive) > :not(.mdc-list-item--disabled).mdc-list-item {\n @include item-interactive-ripple_($query);\n }\n\n // Set styles only for focus state on disabled list item.\n :not(.mdc-list--non-interactive) > .mdc-list-item--disabled {\n @include ripple-mixins.surface($query: $query);\n @include ripple-mixins.radius-bounded($query: $query);\n @include ripple-mixins.states-base-color(theme-variables.prop-value(on-surface), $query: $query);\n @include ripple-mixins.states-focus-opacity(ripple-functions.states-opacity(primary, focus), $query: $query);\n }\n}\n\n@mixin item-primary-text-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n}\n\n@mixin item-secondary-text-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-item__secondary-text {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin item-graphic-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin item-graphic-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin item-meta-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-item__meta {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n///\n/// Sets shape radius (rounded) to single line list variant.\n///\n/// @param {Number | List} $radius Radius size in `px` or percentage. It can be 4 value corner or single radius.\n/// Set to `50%` for rounded shape.\n/// @param {Boolean} $rtl-reflexive Set to true to flip border radius in RTL context. Defaults to `false`.\n/// @param {Number} $density-scale Density scale of single line list. Set this only when custom density is applied.\n/// Defaults to `$mdc-list-single-line-density-scale`.\n///\n/// @access public\n///\n@mixin single-line-shape-radius(\n $radius,\n $rtl-reflexive: false,\n $density-scale: variables.$single-line-density-scale,\n $query: feature-targeting-functions.all()) {\n\n $height: density-functions.prop-value(\n $density-config: variables.$single-line-density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n $resolved-radius: shape-functions.resolve-percentage-radius($height, $radius);\n\n .mdc-list-item {\n @include shape-mixins.radius($resolved-radius, $rtl-reflexive, $query: $query);\n }\n}\n\n@mixin divider-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-divider {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-bottom-color, $color);\n }\n }\n}\n\n@mixin group-subheader-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-group__subheader {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin item-disabled-text-opacity($opacity, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-item--disabled .mdc-list-item__text {\n @include feature-targeting-mixins.targets($feat-color) {\n opacity: $opacity;\n }\n }\n}\n\n@mixin item-disabled-text-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-list-item--disabled {\n .mdc-list-item__text,\n .mdc-list-item__primary-text,\n .mdc-list-item__secondary-text {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n }\n}\n\n///\n/// Sets density scale to single line list variant.\n///\n/// @param {Number} $density-scale Density scale for list. Supported density scales are `-4`, `-3`, `-2`, `-1` and `0`.\n///\n/// @access public\n///\n@mixin single-line-density($density-scale, $query: feature-targeting-functions.all()) {\n $height: density-functions.prop-value(\n $density-config: variables.$single-line-density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n .mdc-list-item {\n @include single-line-height($height, $query: $query);\n }\n}\n\n///\n/// Sets height to single line list variant.\n///\n/// @param {Number} $height Height value in `px`.\n///\n/// @access public\n///\n@mixin single-line-height($height, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n}\n\n//\n// Private\n//\n\n@mixin base_($query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-typography: feature-targeting-functions.create-target($query, typography);\n\n @include typography-mixins.typography(subtitle1, $query);\n\n @include feature-targeting-mixins.targets($feat-typography) {\n // According to the mocks and stickersheet, the line-height is\n // adjusted to 24px for text content, same as for body1.\n /* @alternate */\n line-height: map.get(map.get(typography-variables.$styles, body1), line-height);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0;\n padding: 8px 0;\n list-style-type: none;\n\n &:focus {\n outline: none;\n }\n }\n\n @include item-primary-text-ink-color(text-primary-on-background, $query);\n}\n\n@mixin item-base_ {\n display: flex;\n position: relative;\n align-items: center;\n justify-content: flex-start;\n padding: 0 variables.$side-padding;\n overflow: hidden;\n\n &:focus {\n outline: none;\n }\n}\n\n// Ripple styles for an interactive list item (one that is enabled and inside an interactive list).\n@mixin item-interactive-ripple_($query: feature-targeting-functions.all()) {\n @include ripple-mixins.surface($query);\n @include ripple-mixins.radius-bounded($query: $query);\n @include ripple-mixins.states(theme-variables.prop-value(on-surface), false, $query);\n @include ripple-mixins.states-activated(primary, false, $query);\n @include ripple-mixins.states-selected(primary, false, $query);\n}\n\n// Sets the width and height of the graphic element, as well as calculates the margins for\n// the graphic element such that the text is always offset by 72px, which is defined within\n// the spec.\n@mixin graphic-size_($size) {\n $text-offset: 72px;\n $side-padding: variables.$side-padding;\n $margin-value: $text-offset - $side-padding - $size;\n\n @include rtl-mixins.reflexive-box(margin, right, $margin-value, \".mdc-list-item\");\n\n width: $size;\n height: $size;\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/theme/variables\";\n\n// Colors\n$title-ink-color: variables.prop-value(on-surface) !default;\n$subtitle-ink-color: variables.prop-value(on-surface) !default;\n$item-inactive-ink-color: variables.prop-value(on-surface) !default;\n$item-activated-ink-color: variables.prop-value(primary) !default;\n$divider-color: variables.prop-value(on-surface) !default;\n$surface-fill-color: variables.prop-value(surface) !default;\n\n// Opacity\n$title-ink-opacity: variables.text-emphasis(high) !default;\n$subtitle-ink-opacity: variables.text-emphasis(medium) !default;\n$item-inactive-icon-ink-opacity: variables.text-emphasis(medium) !default;\n$item-inactive-text-ink-opacity: variables.text-emphasis(high) !default;\n$item-active-icon-ink-opacity: 1 !default;\n$item-active-text-ink-opacity: variables.text-emphasis(high) !default;\n$divider-opacity: .12 !default;\n\n// Widths\n$width: 256px !default;\n$list-item-spacing: 4px !default;\n$surface-padding: 16px !default;\n\n// Animations\n$animation-enter: 250ms !default;\n$animation-exit: 200ms !default;\n\n// Scrim\n$modal-scrim-color: variables.prop-value(on-surface) !default;\n$modal-scrim-opacity: .32 !default;\n\n$z-index: 6 !default;\n$modal-elevation: 16 !default;\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/animation/variables\";\n\n$baseline-color: black !default;\n$umbra-opacity: .2 !default;\n$penumbra-opacity: .14 !default;\n$ambient-opacity: .12 !default;\n\n$umbra-map: (\n 0: \"0px 0px 0px 0px\",\n 1: \"0px 2px 1px -1px\",\n 2: \"0px 3px 1px -2px\",\n 3: \"0px 3px 3px -2px\",\n 4: \"0px 2px 4px -1px\",\n 5: \"0px 3px 5px -1px\",\n 6: \"0px 3px 5px -1px\",\n 7: \"0px 4px 5px -2px\",\n 8: \"0px 5px 5px -3px\",\n 9: \"0px 5px 6px -3px\",\n 10: \"0px 6px 6px -3px\",\n 11: \"0px 6px 7px -4px\",\n 12: \"0px 7px 8px -4px\",\n 13: \"0px 7px 8px -4px\",\n 14: \"0px 7px 9px -4px\",\n 15: \"0px 8px 9px -5px\",\n 16: \"0px 8px 10px -5px\",\n 17: \"0px 8px 11px -5px\",\n 18: \"0px 9px 11px -5px\",\n 19: \"0px 9px 12px -6px\",\n 20: \"0px 10px 13px -6px\",\n 21: \"0px 10px 13px -6px\",\n 22: \"0px 10px 14px -6px\",\n 23: \"0px 11px 14px -7px\",\n 24: \"0px 11px 15px -7px\"\n) !default;\n\n$penumbra-map: (\n 0: \"0px 0px 0px 0px\",\n 1: \"0px 1px 1px 0px\",\n 2: \"0px 2px 2px 0px\",\n 3: \"0px 3px 4px 0px\",\n 4: \"0px 4px 5px 0px\",\n 5: \"0px 5px 8px 0px\",\n 6: \"0px 6px 10px 0px\",\n 7: \"0px 7px 10px 1px\",\n 8: \"0px 8px 10px 1px\",\n 9: \"0px 9px 12px 1px\",\n 10: \"0px 10px 14px 1px\",\n 11: \"0px 11px 15px 1px\",\n 12: \"0px 12px 17px 2px\",\n 13: \"0px 13px 19px 2px\",\n 14: \"0px 14px 21px 2px\",\n 15: \"0px 15px 22px 2px\",\n 16: \"0px 16px 24px 2px\",\n 17: \"0px 17px 26px 2px\",\n 18: \"0px 18px 28px 2px\",\n 19: \"0px 19px 29px 2px\",\n 20: \"0px 20px 31px 3px\",\n 21: \"0px 21px 33px 3px\",\n 22: \"0px 22px 35px 3px\",\n 23: \"0px 23px 36px 3px\",\n 24: \"0px 24px 38px 3px\"\n) !default;\n\n$ambient-map: (\n 0: \"0px 0px 0px 0px\",\n 1: \"0px 1px 3px 0px\",\n 2: \"0px 1px 5px 0px\",\n 3: \"0px 1px 8px 0px\",\n 4: \"0px 1px 10px 0px\",\n 5: \"0px 1px 14px 0px\",\n 6: \"0px 1px 18px 0px\",\n 7: \"0px 2px 16px 1px\",\n 8: \"0px 3px 14px 2px\",\n 9: \"0px 3px 16px 2px\",\n 10: \"0px 4px 18px 3px\",\n 11: \"0px 4px 20px 3px\",\n 12: \"0px 5px 22px 4px\",\n 13: \"0px 5px 24px 4px\",\n 14: \"0px 5px 26px 4px\",\n 15: \"0px 6px 28px 5px\",\n 16: \"0px 6px 30px 5px\",\n 17: \"0px 6px 32px 5px\",\n 18: \"0px 7px 34px 6px\",\n 19: \"0px 7px 36px 6px\",\n 20: \"0px 8px 38px 7px\",\n 21: \"0px 8px 40px 7px\",\n 22: \"0px 8px 42px 7px\",\n 23: \"0px 9px 44px 8px\",\n 24: \"0px 9px 46px 8px\"\n) !default;\n\n// The css property used for elevation. In most cases this should not be changed. It is exposed\n// as a variable for abstraction / easy use when needing to reference the property directly, for\n// example in a `will-change` rule.\n$property: box-shadow !default;\n\n// The default color for the elevation overlay.\n$overlay-color: #fff;\n\n// The css property used for elevation overlay transitions. In most cases this should not be changed. It is exposed\n// as a variable for abstraction / easy use when needing to reference the property directly, for\n// example in a `will-change` rule.\n$overlay-property: opacity !default;\n\n// The default duration value for elevation transitions.\n$transition-duration: 280ms !default;\n\n// The default easing value for elevation transitions.\n$transition-timing-function: variables.$standard-curve-timing-function !default;\n","// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"@material/animation/functions\" as animation-functions;\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/elevation/variables\" as elevation-variables;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/dom/mixins\" as dom-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/ripple/variables\" as variables2;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/shape/functions\" as shape-functions;\n@use \"@material/theme/functions\" as theme-functions;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/touch-target/mixins\" as touch-target-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./variables\";\n\n$ripple-target: \".mdc-fab__ripple\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n // postcss-bem-linter: define fab\n\n @include touch-target-mixins.wrapper($query); // COPYBARA_COMMENT_THIS_LINE\n @include elevation-mixins.overlay-common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-fab {\n @include base_($query: $query);\n @include container-color(secondary, $query: $query);\n @include icon-size(24px, $query: $query);\n @include ink-color(on-secondary, $query: $query);\n }\n\n .mdc-fab--mini {\n @include mini_($query: $query);\n }\n\n .mdc-fab--extended {\n @include extended_($query: $query);\n }\n\n .mdc-fab--touch {\n @include touch-target-mixins.margin(\n $component-height: variables.$mini-height,\n $component-width: variables.$mini-height,\n $query: $query);\n\n .mdc-fab__touch {\n @include touch-target-mixins.touch-target($set-width: true, $query: $query);\n }\n }\n\n .mdc-fab::before {\n @include dom-mixins.transparent-border($query: $query);\n }\n\n .mdc-fab__label {\n @include label_($query: $query);\n }\n\n .mdc-fab__icon {\n @include icon_($query: $query);\n }\n\n // Increase specificity for FAB icon styles that need to override styles defined for .material-icons\n // (which is loaded separately so the order of CSS definitions is not guaranteed)\n .mdc-fab .mdc-fab__icon {\n @include icon-overrides_($query: $query);\n }\n\n .mdc-fab--exited {\n @include exited_($query: $query);\n }\n\n // postcss-bem-linter: end\n}\n\n@mixin ripple($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n // postcss-bem-linter: define fab\n\n .mdc-fab {\n @include ripple-mixins.surface(\n $query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.radius-bounded(\n $query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.states(\n on-secondary, $query: $query, $ripple-target: $ripple-target);\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n #{$ripple-target} {\n @include ripple-mixins.target-common($query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow: hidden;\n }\n }\n }\n\n // postcss-bem-linter: end\n}\n\n@mixin accessible($container-color, $query: feature-targeting-functions.all()) {\n @include container-color($container-color, $query: $query);\n\n $fill-tone: theme-functions.tone($container-color);\n\n @if ($fill-tone == \"dark\") {\n @include ink-color(text-primary-on-dark, $query: $query);\n @include ripple-mixins.states(\n text-primary-on-dark,\n $query: $query,\n $ripple-target: $ripple-target);\n } @else {\n @include ink-color(text-primary-on-light, $query: $query);\n @include ripple-mixins.states(\n text-primary-on-light,\n $query: $query,\n $ripple-target: $ripple-target);\n }\n}\n\n@mixin container-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n@mixin icon-size($width, $height: $width, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-fab__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $width;\n height: $height;\n font-size: $height;\n }\n }\n}\n\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n}\n\n@mixin extended-fluid($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 100%;\n }\n}\n\n@mixin extended-padding($icon-padding, $label-padding, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include extended-label-padding($label-padding, $query: $query);\n\n // Offsets the outer label padding by deducting it from icon padding.\n .mdc-fab__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, $icon-padding - $label-padding, $icon-padding);\n }\n }\n\n // For Extended FAB with text label followed by icon.\n .mdc-fab__label + .mdc-fab__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, $icon-padding, $icon-padding - $label-padding);\n }\n }\n}\n\n@mixin extended-label-padding($label-padding, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0 $label-padding;\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n &:not(.mdc-fab--extended) {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n\n #{$ripple-target} {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n }\n }\n}\n\n@mixin extended-shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n @include shape-mixins.radius(\n shape-functions.resolve-percentage-radius(variables.$extended-height, $radius),\n $rtl-reflexive,\n $query: $query\n );\n\n #{$ripple-target} {\n @include shape-mixins.radius(\n shape-functions.resolve-percentage-radius(variables.$extended-height, $radius),\n $rtl-reflexive,\n $query: $query\n );\n }\n}\n\n$icon-enter-delay_: 90ms;\n$icon-enter-duration_: 180ms;\n\n@mixin base_($query: feature-targeting-functions.all()) {\n @include elevation-mixins.overlay-surface-position($query: $query);\n @include elevation-mixins.overlay-dimensions(100%, $query: $query);\n @include elevation-mixins.elevation(6, $query: $query);\n @include shape-radius(50%, $query: $query);\n\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n position: relative;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: variables.$height;\n height: variables.$height;\n padding: 0;\n border: none;\n fill: currentColor;\n text-decoration: none;\n cursor: pointer;\n user-select: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n // Even though `visible` is the default, IE 11 computes the property as\n // `hidden` in some cases, unless it's explicitly defined here.\n overflow: visible;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n box-shadow elevation-variables.$transition-duration elevation-variables.$transition-timing-function,\n opacity 15ms linear 30ms,\n animation-functions.enter(transform, $icon-enter-duration_ + $icon-enter-delay_);\n }\n\n &::-moz-focus-inner {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0;\n border: 0;\n }\n }\n\n &:hover,\n &:focus {\n @include elevation-mixins.elevation(8, $query: $query);\n }\n\n &:active {\n @include elevation-mixins.elevation(12, $query: $query);\n }\n\n &:active,\n &:focus {\n // TODO(acdvorak): Should this be paired with states and/or ripple? We don't want to disable outline\n // (an accessibility/usability feature) unless we're confident that there is also a visual indication that the\n // element has focus. If the client has customized the DOM in some unexpected way, and is certain that another\n // element will receive focus instead, they can always override this property manually in their CSS.\n @include feature-targeting-mixins.targets($feat-structure) {\n outline: none;\n }\n }\n\n &:hover {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: pointer;\n }\n }\n\n // This allows for using SVGs within them to align properly in all browsers.\n // Can remove once: https://bugzilla.mozilla.org/show_bug.cgi?id=1294515 is resolved.\n\n // stylelint-disable selector-max-type\n // postcss-bem-linter: ignore\n > svg {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 100%;\n }\n }\n // stylelint-enable selector-max-type\n}\n\n@mixin mini_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: variables.$mini-height;\n height: variables.$mini-height;\n }\n}\n\n@mixin extended_($query: feature-targeting-functions.all()) {\n @include typography-mixins.typography(button, $query: $query);\n @include extended-shape-radius(50%, $query: $query);\n @include extended-padding(variables.$extended-icon-padding, variables.$extended-label-padding, $query: $query);\n\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: auto;\n max-width: 100%;\n height: variables.$extended-height;\n // This allows the text within the extended fab to be centered for varying font sizes.\n /* @alternate */\n line-height: normal;\n }\n}\n\n@mixin icon_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.enter(transform, $icon-enter-duration_, $icon-enter-delay_);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n fill: currentColor;\n will-change: transform;\n }\n}\n\n@mixin label_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n justify-content: flex-start;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: visible;\n }\n}\n\n@mixin icon-overrides_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n}\n\n@mixin exited_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(0);\n opacity: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n opacity 15ms linear 150ms,\n animation-functions.exit-permanent(transform, 180ms);\n }\n\n .mdc-fab__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(0);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.exit-permanent(transform, 135ms);\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n$extended-icon-padding: 12px !default;\n$extended-label-padding: 20px !default;\n$height: 56px !default;\n$mini-height: 40px !default;\n$extended-height: 48px !default;\n","// Copyright 2020 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n\n///\n/// Emits necessary layout styles to set a transparent border around an element\n/// without interfering with the rest of its component layout. The border is\n/// only visible in high-contrast mode. The target element should be a child of\n/// a relatively positioned top-level element (i.e. a ::before pseudo-element).\n///\n@mixin transparent-border($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n border: 1px solid transparent;\n border-radius: inherit;\n content: \"\";\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/variables\" as variables2;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n // postcss-bem-linter: define floating-label\n .mdc-floating-label {\n @include typography-mixins.typography(subtitle1, $exclude-props: (line-height), $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n /* @noflip */\n left: 0;\n /* @noflip */\n transform-origin: left top;\n line-height: 1.15rem;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: text;\n overflow: hidden;\n\n /* @alternate */\n // Force the label into its own layer to prevent visible layer promotion adjustments\n // when the ripple is activated behind it.\n will-change: transform;\n\n @include rtl-mixins.rtl {\n /* @noflip */\n right: 0;\n /* @noflip */\n left: auto;\n /* @noflip */\n transform-origin: right top;\n /* @noflip */\n text-align: right;\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n transform variables.$transition-duration animation-variables.$standard-curve-timing-function,\n color variables.$transition-duration animation-variables.$standard-curve-timing-function;\n }\n }\n\n .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: auto;\n }\n }\n\n @at-root {\n @include float-position(variables.$position-y, $query: $query);\n @include shake-animation(standard, $query: $query);\n }\n\n @include shake-keyframes(standard, variables.$position-y, $query: $query);\n}\n\n@mixin ink-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n}\n\n// Used for textarea in case of scrolling\n@mixin fill-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n@mixin shake-keyframes(\n $modifier, $positionY, $positionX: 0%, $scale: variables.$float-scale, $query: functions.all()) {\n $feat-animation: functions.create-target($query, animation);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n @keyframes mdc-floating-label-shake-float-above-#{$modifier} {\n 0% {\n transform: translateX(calc(0 - #{$positionX})) translateY(-#{$positionY}) scale(#{$scale});\n }\n\n 33% {\n animation-timing-function: cubic-bezier(.5, 0, .701732, .495819);\n transform: translateX(calc(4% - #{$positionX})) translateY(-#{$positionY}) scale(#{$scale});\n }\n\n 66% {\n animation-timing-function: cubic-bezier(.302435, .381352, .55, .956352);\n transform: translateX(calc(-4% - #{$positionX})) translateY(-#{$positionY}) scale(#{$scale});\n }\n\n 100% {\n transform: translateX(calc(0 - #{$positionX})) translateY(-#{$positionY}) scale(#{$scale});\n }\n }\n }\n}\n\n@mixin float-position($positionY, $positionX: 0%, $scale: variables.$float-scale, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n @if $positionX > 0 or $positionX < 0 {\n transform: translateY(-1 * $positionY) translateX(-1 * $positionX) scale($scale);\n\n @include rtl-mixins.rtl {\n transform: translateY(-1 * $positionY) translateX($positionX) scale($scale);\n }\n } @else {\n transform: translateY(-1 * $positionY) scale($scale);\n }\n }\n }\n}\n\n@mixin shake-animation($modifier, $query: functions.all()) {\n $feat-animation: functions.create-target($query, animation);\n\n .mdc-floating-label--shake {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-floating-label-shake-float-above-#{$modifier} 250ms 1;\n }\n }\n}\n\n@mixin max-width($max-width, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n max-width: $max-width;\n }\n}\n\n///\n/// Sets the CSS transition for the floating animation.\n///\n/// @param {Number} $duration-ms - Duration (in ms) of the animation.\n/// @param {String} $timing-function - Optionally overrides the default animation timing function.\n///\n@mixin float-transition(\n $duration-ms,\n $timing-function: animation-variables.$standard-curve-timing-function,\n $query: functions.all()\n) {\n $feat-animation: functions.create-target($query, animation);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n color $duration-ms $timing-function,\n transform $duration-ms $timing-function;\n }\n}\n","//\n// Copyright 2019 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $feat-structure: functions.create-target($query, structure);\n\n .mdc-form-field {\n @include typography-mixins.typography(body2, $query);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, text-primary-on-background);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n }\n\n // stylelint-disable-next-line selector-max-type\n > label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, 0, auto);\n @include rtl-mixins.reflexive-property(padding, variables.$item-spacing, 0);\n\n order: 0;\n }\n }\n }\n\n .mdc-form-field--nowrap {\n > label {\n @include feature-targeting-mixins.targets($feat-structure) {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n }\n }\n\n .mdc-form-field--align-end {\n // stylelint-disable-next-line selector-max-type\n > label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, auto, 0);\n @include rtl-mixins.reflexive-property(padding, 0, variables.$item-spacing);\n\n order: -1;\n }\n }\n }\n\n .mdc-form-field--space-between {\n @include feature-targeting-mixins.targets($feat-structure) {\n justify-content: space-between;\n }\n\n // stylelint-disable-next-line selector-max-type\n > label {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0;\n\n @include rtl-mixins.rtl {\n // RTL needed for specificity\n margin: 0;\n }\n }\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/density/variables\";\n\n$icon-size: 24px !default;\n\n$size: 48px !default;\n$minimum-height: 28px !default;\n$maximum-height: $size !default;\n$density-scale: variables.$default-scale !default;\n$density-config: (\n size: (\n default: $size,\n maximum: $maximum-height,\n minimum: $minimum-height,\n ),\n) !default;\n","// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/shape/functions\" as shape-functions;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // postcss-bem-linter: define image-list\n .mdc-image-list {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n flex-wrap: wrap;\n // Margin and padding are set to override default user agent styles for lists, and also to center the Image List\n margin: 0 auto;\n padding: 0;\n }\n }\n\n .mdc-image-list__item,\n .mdc-image-list__image-aspect-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Supports absolute positioning of protected supporting content for item, and image for image-aspect-container\n position: relative;\n box-sizing: border-box;\n }\n }\n\n .mdc-image-list__item {\n @include feature-targeting-mixins.targets($feat-structure) {\n list-style-type: none;\n }\n }\n\n .mdc-image-list__image {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 100%;\n }\n }\n\n // Descendant selector allows image-aspect-container to be optional in DOM structure\n .mdc-image-list__image-aspect-container .mdc-image-list__image {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n // Background styles to support div instead of img\n background-repeat: no-repeat;\n background-position: center;\n background-size: cover;\n }\n }\n\n @include aspect(1, $query: $query);\n @include shape-radius(0, $query: $query);\n\n .mdc-image-list__supporting {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, text-primary-on-background);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n align-items: center;\n justify-content: space-between;\n box-sizing: border-box;\n padding: 8px 0;\n line-height: variables.$icon-size;\n }\n }\n\n .mdc-image-list__label {\n @include typography-mixins.typography(subtitle1, $query: $query);\n @include typography-mixins.overflow-ellipsis($query: $query);\n }\n\n // Modifier for labels/icons with text protection, overlaying images.\n\n .mdc-image-list--with-text-protection .mdc-image-list__supporting {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n bottom: 0;\n width: 100%;\n height: variables.$text-protection-height;\n padding: 0 variables.$text-protection-horizontal-padding;\n }\n\n @include feature-targeting-mixins.targets($feat-color) {\n background: variables.$text-protection-background-color;\n color: #fff;\n }\n }\n\n // Masonry Image List, using CSS columns (i.e. renders down then across)\n\n .mdc-image-list--masonry {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: block; // Override flex\n }\n\n .mdc-image-list__item {\n @include feature-targeting-mixins.targets($feat-structure) {\n break-inside: avoid-column;\n }\n }\n\n .mdc-image-list__image {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: block;\n height: auto;\n }\n }\n }\n // postcss-bem-linter: end\n}\n\n@mixin aspect($width-height-ratio, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-image-list__image-aspect-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-bottom: calc(100% / #{$width-height-ratio});\n }\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n .mdc-image-list__image {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n }\n\n $selector: if(&, \"&.mdc-image-list--with-text-protection\", \".mdc-image-list--with-text-protection\");\n\n #{$selector} .mdc-image-list__supporting {\n $masked-radius: shape-functions.mask-radius($radius, 0 0 1 1);\n\n @include shape-mixins.radius($masked-radius, $rtl-reflexive, $query: $query);\n }\n}\n\n// Standard Image List\n\n@mixin standard-columns(\n $column-count,\n $gutter-size: variables.$standard-gutter-size,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // This uses margin rather than padding to facilitate properly positioning the supporting content element when\n // --with-text-protection is used.\n .mdc-image-list__item {\n @include feature-targeting-mixins.targets($feat-structure) {\n // Subtract extra fraction from each item's width to ensure correct wrapping in IE/Edge which round differently\n width: calc(100% / #{$column-count} - #{$gutter-size + 1 / $column-count});\n margin: $gutter-size / 2;\n }\n }\n}\n\n// Masonry Image List\n\n@mixin masonry-columns(\n $column-count,\n $gutter-size: variables.$masonry-gutter-size,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n column-count: $column-count;\n column-gap: $gutter-size;\n }\n\n .mdc-image-list__item {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-bottom: $gutter-size;\n }\n }\n}\n","// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n$standard-gutter-size: 4px !default;\n$masonry-gutter-size: 16px !default;\n$icon-size: 24px !default;\n$text-protection-background-color: rgba(0, 0, 0, .6) !default;\n$text-protection-height: 48px !default;\n$text-protection-horizontal-padding: 16px !default;\n","// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"./variables\";\n@use \"./mixins\";\n\n:root {\n @each $size in map.keys(variables.$columns) {\n --mdc-layout-grid-margin-#{$size}: #{map.get(variables.$default-margin, $size)};\n --mdc-layout-grid-gutter-#{$size}: #{map.get(variables.$default-gutter, $size)};\n --mdc-layout-grid-column-width-#{$size}: #{map.get(variables.$column-width, $size)};\n }\n}\n\n// postcss-bem-linter: define layout-grid\n.mdc-layout-grid {\n @each $size in map.keys(variables.$columns) {\n @include mixins.media-query_($size) {\n $margin: map.get(variables.$default-margin, $size);\n\n @include mixins.layout-grid($size, $margin, variables.$max-width);\n }\n }\n}\n\n.mdc-layout-grid__inner {\n @each $size in map.keys(variables.$columns) {\n @include mixins.media-query_($size) {\n $margin: map.get(variables.$default-margin, $size);\n $gutter: map.get(variables.$default-gutter, $size);\n\n @include mixins.inner($size, $margin, $gutter);\n }\n }\n}\n\n.mdc-layout-grid__cell {\n // select the upper breakpoint\n $upper-breakpoint: list.nth(map.keys(variables.$columns), 1);\n\n @each $size in map.keys(variables.$columns) {\n @include mixins.media-query_($size) {\n $gutter: map.get(variables.$default-gutter, $size);\n\n @include mixins.cell($size, variables.$default-column-span, $gutter);\n\n @for $span from 1 through map.get(variables.$columns, $upper-breakpoint) {\n // Span classes.\n // stylelint-disable max-nesting-depth\n @at-root .mdc-layout-grid__cell--span-#{$span},\n .mdc-layout-grid__cell--span-#{$span}-#{$size} {\n @include mixins.cell-span_($size, $span, $gutter);\n }\n // stylelint-enable max-nesting-depth\n }\n }\n }\n\n // Order override classes.\n @for $i from 1 through map.get(variables.$columns, $upper-breakpoint) {\n &--order-#{$i} {\n @include mixins.cell-order($i);\n }\n }\n\n // Alignment classes.\n &--align-top {\n @include mixins.cell-align(top);\n }\n\n &--align-middle {\n @include mixins.cell-align(middle);\n }\n\n &--align-bottom {\n @include mixins.cell-align(bottom);\n }\n}\n\n.mdc-layout-grid--fixed-column-width {\n @each $size in map.keys(variables.$columns) {\n @include mixins.media-query_($size) {\n $margin: map.get(variables.$default-margin, $size);\n $gutter: map.get(variables.$default-gutter, $size);\n $column-width: map.get(variables.$column-width, $size);\n\n @include mixins.fixed-column-width($size, $margin, $gutter, $column-width);\n }\n }\n}\n\n.mdc-layout-grid--align-left {\n margin-right: auto;\n margin-left: 0;\n}\n\n.mdc-layout-grid--align-right {\n margin-right: 0;\n margin-left: auto;\n}\n// postcss-bem-linter: end\n","// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:math\";\n@use \"./variables\";\n\n// returns the lower grid boundary or null if the smallest grid is selected\n@function breakpoint-min($size) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n $min: map.get(variables.$breakpoints, $size);\n\n @return if($min > 0, $min, null);\n}\n\n// returns the upper grid boundary or null if the largest grid is selected\n@function breakpoint-max($size) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n $names: map.keys(variables.$columns);\n $n: list.index($names, $size);\n $prev: if($n > 1, list.nth($names, $n - 1), null);\n\n @return if($prev, (breakpoint-min($prev) - 1px), null);\n}\n\n// Private mixins, meant for internal use.\n@mixin media-query_($size) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n\n $min: breakpoint-min($size);\n $max: breakpoint-max($size);\n\n @if $min == null and $max != null {\n // Phone\n @media (max-width: $max) {\n @content;\n }\n } @else if $min != null and $max != null {\n // Tablet\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $min != null and $max == null {\n // Desktop\n @media (min-width: $min) {\n @content;\n }\n } @else {\n // Fallback - no breakpoints defined\n @content;\n }\n}\n\n@mixin cell-span_($size, $span, $gutter) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n\n $percent: math.percentage($span / map.get(variables.$columns, $size));\n\n @if $percent > 100% {\n $percent: 100%;\n }\n\n width: calc(#{$percent} - #{$gutter});\n // stylelint-disable-next-line declaration-block-no-duplicate-properties\n width: calc(#{$percent} - var(--mdc-layout-grid-gutter-#{$size}, #{$gutter}));\n\n @supports (display: grid) {\n width: auto;\n grid-column-end: span math.min($span, map.get(variables.$columns, $size));\n }\n}\n\n// Public mixins, meant for developer usage.\n@mixin layout-grid($size, $margin, $max-width: null) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n\n box-sizing: border-box;\n margin: 0 auto;\n padding: $margin;\n // stylelint-disable-next-line declaration-block-no-duplicate-properties\n padding: var(--mdc-layout-grid-margin-#{$size}, #{$margin});\n\n @if $max-width {\n max-width: $max-width;\n }\n}\n\n@mixin inner($size, $margin, $gutter) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n\n display: flex;\n flex-flow: row wrap;\n align-items: stretch;\n margin: -$gutter / 2;\n // stylelint-disable-next-line declaration-block-no-duplicate-properties\n margin: calc(var(--mdc-layout-grid-gutter-#{$size}, #{$gutter}) / 2 * -1);\n\n @supports (display: grid) {\n display: grid;\n margin: 0;\n grid-gap: $gutter;\n // stylelint-disable-next-line declaration-block-no-duplicate-properties\n grid-gap: var(--mdc-layout-grid-gutter-#{$size}, $gutter);\n grid-template-columns: repeat(map.get(variables.$columns, $size), minmax(0, 1fr));\n }\n}\n\n@mixin cell($size, $default-span, $gutter) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n\n @include cell-span_($size, $default-span, $gutter);\n\n box-sizing: border-box;\n margin: $gutter / 2;\n // stylelint-disable-next-line declaration-block-no-duplicate-properties\n margin: calc(var(--mdc-layout-grid-gutter-#{$size}, #{$gutter}) / 2);\n\n @supports (display: grid) {\n margin: 0;\n }\n}\n\n@mixin cell-order($order) {\n order: $order;\n}\n\n@mixin cell-align($position) {\n @if $position == \"top\" {\n align-self: flex-start;\n\n @supports (display: grid) {\n align-self: start;\n }\n }\n\n @if $position == \"middle\" {\n align-self: center;\n }\n\n @if $position == \"bottom\" {\n align-self: flex-end;\n\n @supports (display: grid) {\n align-self: end;\n }\n }\n\n @if $position == \"stretch\" {\n align-self: stretch;\n }\n}\n\n@mixin fixed-column-width($size, $margin, $gutter, $column-width) {\n @if not map.has-key(variables.$columns, $size) {\n @error \"Invalid style specified! Choose one of #{map.keys(variables.$columns)}\";\n }\n\n $columnCount: map.get(variables.$columns, $size);\n $gutter-number: $columnCount - 1;\n $margin-number: 2;\n\n width: $column-width * $columnCount + $gutter * $gutter-number + $margin * $margin-number;\n // stylelint-disable-next-line declaration-block-no-duplicate-properties\n width:\n calc(\n var(--mdc-layout-grid-column-width-#{$size}, #{$column-width}) * #{$columnCount} +\n var(--mdc-layout-grid-gutter-#{$size}, #{$gutter}) * #{$gutter-number} +\n var(--mdc-layout-grid-margin-#{$size}, #{$margin}) * #{$margin-number}\n );\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./functions\";\n\n// Public\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n // postcss-bem-linter: define line-ripple\n .mdc-line-ripple {\n @include feature-targeting-mixins.targets($feat-structure) {\n &::before,\n &::after {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n border-bottom-style: solid;\n content: \"\";\n }\n\n &::before {\n border-bottom-width: 1px;\n z-index: 1;\n }\n\n &::after {\n transform: scaleX(0);\n border-bottom-width: 2px;\n opacity: 0;\n z-index: 2;\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n &::after {\n transition: functions.transition-value(transform), functions.transition-value(opacity);\n }\n }\n }\n\n .mdc-line-ripple--active::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scaleX(1);\n opacity: 1;\n }\n }\n\n .mdc-line-ripple--deactivating::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n }\n}\n\n@mixin active-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n &::after {\n @include theme-mixins.prop(border-bottom-color, $color);\n }\n }\n}\n\n@mixin inactive-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n &::before {\n @include theme-mixins.prop(border-bottom-color, $color);\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@mixin primary-indeterminate-translate-keyframes_ {\n @keyframes mdc-linear-progress-primary-indeterminate-translate {\n 0% {\n transform: translateX(0);\n }\n\n 20% {\n animation-timing-function: cubic-bezier(.5, 0, .701732, .495819);\n transform: translateX(0);\n }\n\n 59.15% {\n animation-timing-function: cubic-bezier(.302435, .381352, .55, .956352);\n transform: translateX(83.67142%);\n }\n\n 100% {\n transform: translateX(200.611057%);\n }\n }\n}\n\n@mixin primary-indeterminate-scale-keyframes_ {\n @keyframes mdc-linear-progress-primary-indeterminate-scale {\n 0% {\n transform: scaleX(.08);\n }\n\n 36.65% {\n animation-timing-function: cubic-bezier(.334731, .12482, .785844, 1);\n transform: scaleX(.08);\n }\n\n 69.15% {\n animation-timing-function: cubic-bezier(.06, .11, .6, 1);\n transform: scaleX(.661479);\n }\n\n 100% {\n transform: scaleX(.08);\n }\n }\n}\n\n@mixin secondary-indeterminate-translate-keyframes_ {\n @keyframes mdc-linear-progress-secondary-indeterminate-translate {\n 0% {\n animation-timing-function: cubic-bezier(.15, 0, .515058, .409685);\n transform: translateX(0);\n }\n\n 25% {\n animation-timing-function: cubic-bezier(.31033, .284058, .8, .733712);\n transform: translateX(37.651913%);\n }\n\n 48.35% {\n animation-timing-function: cubic-bezier(.4, .627035, .6, .902026);\n transform: translateX(84.386165%);\n }\n\n 100% {\n transform: translateX(160.277782%);\n }\n }\n}\n\n@mixin secondary-indeterminate-scale-keyframes_ {\n @keyframes mdc-linear-progress-secondary-indeterminate-scale {\n 0% {\n animation-timing-function: cubic-bezier(.205028, .057051, .57661, .453971);\n transform: scaleX(.08);\n }\n\n 19.15% {\n animation-timing-function: cubic-bezier(.152313, .196432, .648374, 1.004315);\n transform: scaleX(.457104);\n }\n\n 44.15% {\n animation-timing-function: cubic-bezier(.257759, -.003163, .211762, 1.38179);\n transform: scaleX(.72796);\n }\n\n 100% {\n transform: scaleX(.08);\n }\n }\n}\n\n@mixin buffering-keyframes_ {\n @keyframes mdc-linear-progress-buffering {\n from {\n // Normally the buffer dots start from the left and overflow to the right.\n // We rotate by 180deg so that the buffer dots start on the right when\n // in non-reversed mode and overflow to the left.\n transform: rotate(180deg) translateX(-10px);\n }\n }\n}\n\n@mixin primary-indeterminate-translate-reverse-keyframes_ {\n @keyframes mdc-linear-progress-primary-indeterminate-translate-reverse {\n 0% {\n transform: translateX(0);\n }\n\n 20% {\n animation-timing-function: cubic-bezier(.5, 0, .701732, .495819);\n transform: translateX(0);\n }\n\n 59.15% {\n animation-timing-function: cubic-bezier(.302435, .381352, .55, .956352);\n transform: translateX(-83.67142%);\n }\n\n 100% {\n transform: translateX(-200.611057%);\n }\n }\n}\n\n@mixin secondary-indeterminate-translate-reverse-keyframes_ {\n @keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse {\n 0% {\n animation-timing-function: cubic-bezier(.15, 0, .515058, .409685);\n transform: translateX(0);\n }\n\n 25% {\n animation-timing-function: cubic-bezier(.31033, .284058, .8, .733712);\n transform: translateX(-37.651913%);\n }\n\n 48.35% {\n animation-timing-function: cubic-bezier(.4, .627035, .6, .902026);\n transform: translateX(-84.386165%);\n }\n\n 100% {\n transform: translateX(-160.277782%);\n }\n }\n}\n\n@mixin buffering-reverse-keyframes_ {\n @keyframes mdc-linear-progress-buffering-reverse {\n from {\n transform: translateX(-10px);\n }\n }\n}\n","// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"sass:string\";\n@use \"@material/animation/functions\" as animation-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as theme-variables; // for mdc-theme-prop-value\n@use \"./variables\";\n@use \"./keyframes\";\n\n//\n// Public\n//\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n @include keyframes.primary-indeterminate-translate-keyframes_;\n @include keyframes.primary-indeterminate-scale-keyframes_;\n @include keyframes.secondary-indeterminate-translate-keyframes_;\n @include keyframes.secondary-indeterminate-scale-keyframes_;\n @include keyframes.buffering-keyframes_;\n @include keyframes.primary-indeterminate-translate-reverse-keyframes_;\n @include keyframes.secondary-indeterminate-translate-reverse-keyframes_;\n @include keyframes.buffering-reverse-keyframes_;\n }\n\n .mdc-linear-progress {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative;\n width: 100%;\n height: variables.$height;\n transform: translateZ(0);\n // Create a border around the bar in Windows High Contrast Mode.\n outline: 1px solid transparent;\n overflow: hidden;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.exit-temporary(opacity, 250ms);\n }\n\n &__bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n width: 100%;\n height: 100%;\n animation: none;\n transform-origin: top left;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.exit-temporary(transform, 250ms);\n }\n }\n\n &__bar-inner {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n position: absolute;\n width: 100%;\n animation: none;\n // border-top is used rather than background-color to ensure that the\n // bar is visible in Windows High Contrast Mode.\n border-top: variables.$height solid;\n }\n }\n\n &__buffer {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n position: absolute;\n width: 100%;\n height: 100%;\n }\n }\n\n &__buffer-dots {\n @include feature-targeting-mixins.targets($feat-structure) {\n background-repeat: repeat-x;\n background-size: 10px variables.$height;\n flex: auto;\n transform: rotate(180deg);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-linear-progress-buffering 250ms infinite linear;\n }\n }\n\n &__buffer-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n flex: 0 1 100%;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.exit-temporary(flex-basis, 250ms);\n }\n }\n\n &__primary-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scaleX(0);\n }\n }\n\n &__secondary-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n visibility: hidden;\n }\n }\n\n @include indeterminate_($query: $query);\n @include reversed_($query: $query);\n\n &--closed {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: none;\n }\n }\n }\n\n @at-root {\n @include bar-color(primary, $query: $query);\n @include buffer-color(variables.$baseline-buffer-color, $query: $query);\n }\n\n .mdc-linear-progress--indeterminate.mdc-linear-progress--reversed {\n .mdc-linear-progress__primary-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n right: -145.166611%;\n left: auto;\n }\n }\n\n .mdc-linear-progress__secondary-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n right: -54.888891%;\n left: auto;\n }\n }\n }\n}\n\n@mixin bar-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-linear-progress__bar-inner {\n @include feature-targeting-mixins.targets($feat-color) {\n // Border is used rather than background-color to ensure that the\n // bar is visible in Windows High Contrast Mode.\n @include theme-mixins.prop(border-color, $color);\n }\n }\n}\n\n@mixin buffer-color($color, $query: feature-targeting-functions.all()) {\n // We need to escape the '#' character as \"%23\" for SVG because '#' is a reserved character in URIs.\n $color-value-for-css: theme-variables.prop-value($color);\n $color-value-for-svg: str-replace_(string.unquote(\"#{$color-value-for-css}\"), \"#\", \"%23\");\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-linear-progress__buffer-dots {\n @include feature-targeting-mixins.targets($feat-color) {\n // SVG is optimized for data URI (https://codepen.io/tigt/post/optimizing-svgs-in-data-uris)\n // stylelint-disable-next-line function-url-quotes\n background-image: url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='#{$color-value-for-svg}'/%3E%3C/svg%3E\");\n }\n }\n\n .mdc-linear-progress__buffer-bar {\n @include feature-targeting-mixins.targets($feat-color) {\n background-color: $color-value-for-css;\n }\n }\n}\n\n//\n// Private\n//\n\n@mixin indeterminate_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n &--indeterminate {\n .mdc-linear-progress__bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n transition: none;\n }\n }\n\n .mdc-linear-progress__primary-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n left: -145.166611%;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-linear-progress-primary-indeterminate-translate 2s infinite linear;\n }\n\n > .mdc-linear-progress__bar-inner {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-linear-progress-primary-indeterminate-scale 2s infinite linear;\n }\n }\n }\n\n .mdc-linear-progress__secondary-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n left: -54.888891%;\n visibility: visible;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear;\n }\n\n > .mdc-linear-progress__bar-inner {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear;\n }\n }\n }\n }\n}\n\n@mixin reversed_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n &--reversed {\n .mdc-linear-progress__bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n right: 0;\n transform-origin: center right;\n }\n }\n\n .mdc-linear-progress__primary-bar {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation-name: mdc-linear-progress-primary-indeterminate-translate-reverse;\n }\n }\n\n .mdc-linear-progress__secondary-bar {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation-name: mdc-linear-progress-secondary-indeterminate-translate-reverse;\n }\n }\n\n .mdc-linear-progress__buffer-dots {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-linear-progress-buffering-reverse 250ms infinite linear;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n order: 0;\n transform: rotate(0);\n }\n }\n\n .mdc-linear-progress__buffer-bar {\n @include feature-targeting-mixins.targets($feat-structure) {\n order: 1;\n }\n }\n }\n}\n\n// Based on https://css-tricks.com/snippets/sass/str-replace-function/\n@function str-replace_($string, $search, $replace) {\n $index: string.index($string, $search);\n\n @if $index {\n $head: string.slice($string, 1, $index - 1);\n $tail: str-replace_(string.slice($string, $index + string.length($search)), $search, $replace);\n\n @return $head + $replace + $tail;\n }\n\n @return $string;\n}\n","// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n@use \"@material/density/variables\" as density-variables;\n@use \"@material/theme/variables\" as theme-variables;\n\n$divider-color-on-light-bg: rgba(0, 0, 0, .12) !default;\n$divider-color-on-dark-bg: rgba(255, 255, 255, .2) !default;\n$side-padding: 16px !default;\n$text-offset: 72px !default;\n$text-disabled-opacity: theme-variables.text-emphasis(disabled) !default;\n$text-disabled-color: on-surface !default;\n\n$single-line-height: 48px !default;\n$single-line-minimum-height: 24px !default;\n$single-line-maximum-height: $single-line-height !default;\n$single-line-density-scale: density-variables.$default-scale !default;\n$single-line-density-config: (\n height: (\n default: $single-line-height,\n maximum: $single-line-maximum-height,\n minimum: $single-line-minimum-height,\n ),\n) !default;\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:math\";\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/list/mixins\" as list-mixins;\n@use \"@material/list/variables\" as list-variables;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n $feat-structure: functions.create-target($query, structure);\n\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n @include elevation-mixins.overlay-common($query); // COPYBARA_COMMENT_THIS_LINE\n\n // Customize the menu-surface and contained list to match the mdc-menu styles.\n .mdc-menu {\n @include list-mixins.item-meta-ink-color(variables.$ink-color, $query);\n @include list-mixins.item-graphic-ink-color(variables.$ink-color, $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n min-width: variables.$min-width;\n }\n\n // Include mdc-list selector to ensure list-inside-menu overrides default list styles\n .mdc-list {\n @include list-mixins.item-primary-text-ink-color(variables.$ink-color, $query);\n @include elevation-mixins.overlay-surface-position($query: $query);\n @include elevation-mixins.overlay-dimensions(100%, $query: $query);\n }\n\n .mdc-list-divider {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 8px 0;\n }\n }\n\n .mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n user-select: none;\n }\n }\n\n .mdc-list-item--disabled {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: auto;\n }\n }\n\n //stylelint-disable selector-no-qualifying-type\n a.mdc-list-item .mdc-list-item__text,\n a.mdc-list-item .mdc-list-item__graphic {\n @include feature-targeting-mixins.targets($feat-structure) {\n pointer-events: none;\n }\n }\n // stylelint-enable selector-no-qualifying-type\n }\n\n // postcss-bem-linter: define menu\n .mdc-menu__selection-group {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0;\n fill: currentColor;\n }\n\n .mdc-list-item {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, 56px, list-variables.$side-padding);\n }\n }\n\n // Extra specificity required to override `display` property on `mdc-list-item__graphic`.\n .mdc-menu__selection-group-icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, 16px);\n\n display: none;\n position: absolute;\n // IE11 requires the icon to be vertically centered due to its absolute positioning\n top: 50%;\n transform: translateY(-50%);\n }\n }\n }\n // postcss-bem-linter: end\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n .mdc-menu-item--selected .mdc-menu__selection-group-icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline;\n }\n }\n}\n\n@mixin width($width, $query: functions.all()) {\n $feat-structure: functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @if math.is-unitless($width) {\n width: $width * variables.$width-base;\n } @else {\n width: $width;\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/theme/mixins\";\n@use \"@material/theme/variables\";\n\n$ink-color: rgba(variables.prop-value(on-surface), variables.text-emphasis(high)) !default;\n\n$width-base: 56px !default;\n$min-width: 2 * $width-base !default;\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"./variables\";\n\n//\n// Public\n//\n\n@mixin core-styles($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n // postcss-bem-linter: define menu-surface\n .mdc-menu-surface {\n @include base_($query);\n @include elevation-mixins.elevation($z-value: 8, $query: $query);\n @include fill-color(surface, $query);\n @include ink-color(on-surface, $query);\n @include shape-radius(medium, false, $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(transform-origin, top left, top right);\n }\n }\n\n .mdc-menu-surface--anchor {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative;\n overflow: visible;\n }\n }\n\n .mdc-menu-surface--fixed {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: fixed;\n }\n }\n // postcss-bem-linter: end\n}\n\n@mixin ink-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n}\n\n@mixin fill-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: functions.all()) {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n}\n\n// Used by filled variants of GM components to conditionally flatten the top\n// corners of the menu.\n@mixin flatten-top-when-opened-below {\n .mdc-menu-surface--is-open-below {\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n}\n\n//\n// Private\n//\n\n@mixin base_($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n position: absolute;\n box-sizing: border-box;\n max-width: calc(100vw - #{variables.$min-distance-from-edge});\n max-height: calc(100vh - #{variables.$min-distance-from-edge});\n margin: 0;\n padding: 0;\n transform: scale(1);\n transform-origin: top left;\n opacity: 0;\n overflow: auto;\n will-change: transform, opacity;\n z-index: variables.$z-index;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n opacity variables.$fade-in-duration linear,\n transform variables.$scale-duration animation-variables.$deceleration-curve-timing-function;\n }\n\n &:focus {\n @include feature-targeting-mixins.targets($feat-structure) {\n outline: none;\n }\n }\n\n // stylelint-disable-next-line selector-max-type\n &--open {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n transform: scale(1);\n opacity: 1;\n }\n }\n\n &--animating-open {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n transform: scale(.8);\n opacity: 0;\n }\n }\n\n &--animating-closed {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n opacity: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: opacity variables.$fade-out-duration linear;\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/floating-label/mixins\" as floating-label-mixins;\n@use \"@material/shape/functions\" as shape-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-notched-outline {\n @include base_($query);\n\n &__leading,\n &__notch,\n &__trailing {\n @include feature-targeting-mixins.targets($feat-structure) {\n box-sizing: border-box;\n height: 100%;\n border-top: variables.$border-width solid;\n border-bottom: variables.$border-width solid;\n pointer-events: none;\n }\n }\n\n &__leading {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(border, variables.$border-width solid, none);\n\n width: variables.$leading-width;\n }\n }\n\n &__trailing {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(border, none, variables.$border-width solid);\n\n flex-grow: 1;\n }\n }\n\n &__notch {\n @include feature-targeting-mixins.targets($feat-structure) {\n flex: 0 0 auto;\n width: auto;\n max-width: calc(100% - #{variables.$leading-width} * 2);\n }\n }\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n }\n\n .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n text-overflow: clip;\n }\n }\n\n &--upgraded .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n max-width: calc(100% / .75);\n }\n }\n }\n\n .mdc-notched-outline--notched {\n .mdc-notched-outline__notch {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(padding, right, 8px);\n\n border-top: none;\n }\n }\n }\n\n .mdc-notched-outline--no-label {\n .mdc-notched-outline__notch {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0;\n }\n }\n }\n}\n\n@mixin color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-notched-outline__leading,\n .mdc-notched-outline__notch,\n .mdc-notched-outline__trailing {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $color);\n }\n }\n}\n\n@mixin stroke-width($width, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-notched-outline__leading,\n .mdc-notched-outline__notch,\n .mdc-notched-outline__trailing {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-width: $width;\n }\n }\n}\n\n///\n/// Adds top offset to compensate for border width box size when it is notched.\n/// Use this when floating label is aligned to center to prevent label jump on focus.\n/// @param {Number} $stroke-width Stroke width of notched outline that needs to be offset.\n///\n@mixin notch-offset($stroke-width, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-notched-outline--notched .mdc-notched-outline__notch {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-top: $stroke-width;\n }\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $radius: shape-functions.prop-value($radius);\n\n @if (list.length($radius) > 1) {\n // stylelint-disable-next-line max-line-length\n @warn \"mdc-notched-outline-shape-radius only supports a single radius; see https://github.com/material-components/material-components-web/issues/4140\";\n }\n\n $radius: list.nth($radius, 1);\n\n .mdc-notched-outline__leading {\n @include shape-mixins.radius(shape-functions.mask-radius($radius, 1 0 0 1), $rtl-reflexive: true, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @if ($radius > variables.$leading-width) {\n width: $radius;\n }\n }\n }\n\n @if ($radius > variables.$leading-width) {\n .mdc-notched-outline__notch {\n @include feature-targeting-mixins.targets($feat-structure) {\n max-width: calc(100% - #{$radius} * 2);\n }\n }\n }\n\n .mdc-notched-outline__trailing {\n @include shape-mixins.radius(shape-functions.mask-radius($radius, 0 1 1 0), $rtl-reflexive: true, $query: $query);\n }\n}\n\n@mixin floating-label-float-position(\n $positionY, $positionX: 0%, $scale: .75, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include floating-label-mixins.float-position(\n $positionY + variables.$label-adjust, $positionX, 1, $query: $query);\n\n .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n font-size: ($scale * 1rem);\n }\n }\n\n // Two selectors to ensure we select the appropriate class when applied from this component or a parent component.\n &.mdc-notched-outline--upgraded,\n .mdc-notched-outline--upgraded {\n @include floating-label-mixins.float-position($positionY, $positionX, $scale, $query: $query);\n\n // stylelint-disable-next-line no-descending-specificity\n .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n font-size: 1rem;\n }\n }\n }\n}\n\n///\n/// Sets floating label position in notched outline when label is afloat.\n///\n/// @param {Number} $positionY Absolute Y-axis position in `px`.\n/// @param {Number} $positionX Absolute X-axis position in `px`. Defaults to `0`.\n/// @param {Number} $scale Defaults to `.75`.\n///\n/// @todo Replace mixin `mdc-notched-outline-floating-label-float-position` with this mixin when floating label is\n/// center aligned in all the places.\n///\n@mixin floating-label-float-position-absolute(\n $positionY, $positionX: 0, $scale: .75, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include floating-label-mixins.float-position(\n $positionY + variables.$label-adjust-absolute, $positionX, 1, $query: $query);\n\n .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n font-size: ($scale * 1rem);\n }\n }\n\n // Two selectors to ensure we select the appropriate class when applied from this component or a parent component.\n &.mdc-notched-outline--upgraded,\n .mdc-notched-outline--upgraded {\n @include floating-label-mixins.float-position(\n $positionY, $positionX, $scale, $query: $query);\n\n // stylelint-disable-next-line no-descending-specificity\n .mdc-floating-label--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n font-size: 1rem;\n }\n }\n }\n}\n\n///\n/// Sets the max-width for the notch\n///\n/// @param {Number} $max-width Max-width for the notch\n///\n@mixin notch-max-width($max-width, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch {\n @include feature-targeting-mixins.targets($feat-structure) {\n max-width: $max-width;\n }\n }\n}\n\n//\n// Private\n//\n@mixin base_($query) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n box-sizing: border-box;\n width: 100%;\n max-width: 100%;\n height: 100%;\n /* @noflip */\n text-align: left;\n pointer-events: none;\n\n @include rtl-mixins.rtl {\n /* @noflip */\n text-align: right;\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// Keep this in sync with constants.numbers.MIN_LEADING_STROKE_EDGE_POSITION\n$min-leading-stroke-edge-position: 12px !default;\n// The gap between the stroke end and floating label\n// Keep this in sync with constants.numbers.NOTCH_GUTTER_SIZE\n$notch-gutter-size: 4px !default;\n$border-width: 1px !default;\n$leading-width: 12px !default;\n$padding: 4px !default;\n// This variable keeps the before/after JS label centered in the notch when the font-size is changed.\n$label-adjust: 14% !default;\n\n/// Label box height when it is floating above for notched upgraded. This value is used to put the label vertically in\n/// the middle when it is notched.\n$label-box-height: 13.5px !default;\n\n/// Label adjust offset applied to floating label when it is notched. Since notch without upgraded has different font\n/// size we add additional offset value.\n$label-adjust-absolute: 2.5px !default;\n","//\n// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:map\";\n@use \"@material/animation/functions\" as functions2;\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/ripple/variables\" as ripple-variables;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as variables2;\n@use \"@material/touch-target/mixins\" as touch-target-mixins;\n@use \"@material/touch-target/variables\" as touch-target-variables;\n@use \"./functions\";\n@use \"./variables\";\n\n$ripple-target: \".mdc-radio__ripple\";\n\n///\n/// Radio core styles.\n///\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// radio styles. It is recommended that most users use `mdc-radio-core-styles` instead.\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n // postcss-bem-linter: define radio\n\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include touch-target-mixins.wrapper($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-radio {\n @include unchecked-stroke-color(variables.$unchecked-color, $query: $query);\n @include checked-stroke-color(variables.$baseline-theme-color, $query: $query);\n @include ink-color(variables.$baseline-theme-color, $query: $query);\n @include disabled-unchecked-stroke-color(variables.$disabled-circle-color, $query: $query);\n @include disabled-checked-stroke-color(variables.$disabled-circle-color, $query: $query);\n @include disabled-ink-color(variables.$disabled-circle-color, $query: $query);\n @include focus-indicator-color(variables.$baseline-theme-color, $query: $query);\n @include density(variables.$density-scale, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n position: relative;\n flex: 0 0 auto;\n box-sizing: content-box;\n width: variables.$icon-size;\n height: variables.$icon-size;\n cursor: pointer;\n /* @alternate */\n will-change: opacity, transform, border-color, color;\n }\n\n // Container for radio circles and ripple.\n &__background {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n width: variables.$icon-size;\n height: variables.$icon-size;\n }\n\n &::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n transform: scale(0, 0);\n border-radius: 50%;\n opacity: 0;\n pointer-events: none;\n content: \"\";\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.exit(opacity), functions.exit(transform);\n }\n }\n }\n\n &__outer-circle {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n left: 0;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-width: 2px;\n border-style: solid;\n border-radius: 50%;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.exit(border-color);\n }\n }\n\n &__inner-circle {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n left: 0;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n transform: scale(0, 0);\n border-width: 10px;\n border-style: solid;\n border-radius: 50%;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.exit(transform),\n functions.exit(border-color);\n }\n }\n\n &__native-control {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n margin: 0;\n padding: 0;\n opacity: 0;\n cursor: inherit;\n z-index: 1;\n }\n }\n\n &--touch {\n @include touch-target-mixins.margin(\n $component-height: variables.$ripple-size,\n $component-width: variables.$ripple-size,\n $query: $query);\n @include touch-target($size: touch-target-variables.$height, $query: $query);\n }\n }\n\n .mdc-radio__native-control:checked,\n .mdc-radio__native-control:disabled {\n + .mdc-radio__background {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.enter(opacity),\n functions.enter(transform);\n }\n\n .mdc-radio__outer-circle {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.enter(border-color);\n }\n }\n\n .mdc-radio__inner-circle {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.enter(transform),\n functions.enter(border-color);\n }\n }\n }\n }\n\n .mdc-radio--disabled {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: default;\n pointer-events: none;\n }\n }\n\n .mdc-radio__native-control:checked {\n + .mdc-radio__background {\n .mdc-radio__inner-circle {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(.5);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.enter(transform),\n functions.enter(border-color);\n }\n }\n }\n }\n\n .mdc-radio__native-control:disabled,\n [aria-disabled=\"true\"] .mdc-radio__native-control {\n + .mdc-radio__background {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: default;\n }\n }\n }\n\n .mdc-radio__native-control:focus {\n + .mdc-radio__background::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(1);\n opacity: map.get(ripple-variables.$dark-ink-opacities, focus);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.enter(opacity),\n functions.enter(transform);\n }\n }\n }\n\n // postcss-bem-linter: end\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// radio styles. It is recommended that most users use `mdc-radio-core-styles` instead.\n@mixin ripple($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-radio {\n @include ripple-mixins.surface($query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.radius-unbounded($query: $query, $ripple-target: $ripple-target);\n @include ripple-mixins.states(\n $color: variables.$baseline-theme-color, $query: $query, $ripple-target: $ripple-target);\n\n &.mdc-ripple-upgraded--background-focused {\n .mdc-radio__background::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n content: none;\n }\n }\n }\n }\n\n #{$ripple-target} {\n @include ripple-mixins.target-common($query: $query);\n }\n}\n\n///\n/// Sets the stroke color of an unchecked, enabled radio button.\n/// @param {Color} $color - The desired stroke color.\n///\n@mixin unchecked-stroke-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled-unchecked_ {\n @include stroke-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the stroke color of a checked, enabled radio button.\n/// @param {Color} $color - The desired stroke color.\n///\n@mixin checked-stroke-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled-checked_ {\n @include stroke-color_($color, $query:$query);\n }\n}\n\n///\n/// Sets the ink color of an enabled radio button.\n/// @param {Color} $color - The desired ink color.\n///\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the stroke color of an unchecked, disabled radio button.\n/// @param {Color} $color - The desired stroke color.\n///\n@mixin disabled-unchecked-stroke-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled-unchecked_ {\n @include stroke-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the stroke color of a checked, disabled radio button.\n/// @param {Color} $color - The desired stroke color.\n///\n@mixin disabled-checked-stroke-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled-checked_ {\n @include stroke-color_($color, $query: $query);\n }\n}\n\n///\n/// Sets the ink color of a disabled radio button.\n/// @param {Color} $color - The desired ink color\n///\n@mixin disabled-ink-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include ink-color_($color, $query: $query);\n }\n}\n\n@mixin focus-indicator-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-radio__background::before {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n///\n/// Sets radio touch target size which can be more than the ripple size. Param `$ripple-size` is required for custom\n/// ripple size.\n///\n/// @param {Number} $size Size of touch target (Native input) in `px`.\n/// @param {Number} $ripple-size Size of ripple in `px`. Required only for custom ripple size.\n///\n@mixin touch-target(\n $size: variables.$ripple-size,\n $ripple-size: variables.$ripple-size,\n $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $offset: ($ripple-size - $size) / 2;\n\n .mdc-radio__native-control {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: $offset;\n right: $offset;\n left: $offset;\n width: $size;\n height: $size;\n }\n }\n}\n\n///\n/// Sets density scale for radio.\n///\n/// @param {Number | String} $density-scale - Density scale value for component. Supported density scale values\n/// `-3`, `-2`, `-1`, `0`.\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n $size: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: size,\n );\n\n @include ripple-size($size, $query: $query);\n // Sets touch target size same as ripple size.\n @include touch-target($size: $size, $ripple-size: $size, $query: $query);\n\n @if $density-scale != 0 {\n @include touch-target-reset_($query: $query);\n }\n}\n\n///\n/// Sets radio ripple size.\n///\n/// @param {Number} $size - Ripple size in `px`.\n///\n@mixin ripple-size($size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $padding: ($size - variables.$icon-size) / 2;\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: $padding;\n }\n\n .mdc-radio__background::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: -$padding;\n left: -$padding;\n width: $size;\n height: $size;\n }\n }\n}\n\n///\n/// Resets touch target-related styles. This is called from the density mixin to\n/// automatically remove the increased touch target, since dense components\n/// don't have the same default a11y requirements.\n/// @access private\n///\n@mixin touch-target-reset_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0;\n }\n}\n\n///\n/// Helps select the radio background only when its native control is in the\n/// enabled state.\n/// @access private\n///\n@mixin if-enabled_ {\n .mdc-radio__native-control:enabled + {\n @content;\n }\n}\n\n///\n/// Helps select the radio background only when its native control is in the\n/// enabled & unchecked state.\n/// @access private\n///\n@mixin if-enabled-unchecked_ {\n .mdc-radio__native-control:enabled:not(:checked) + {\n @content;\n }\n}\n\n///\n/// Helps select the radio background only when its native control is in the\n/// enabled & checked state.\n/// @access private\n///\n@mixin if-enabled-checked_ {\n .mdc-radio__native-control:enabled:checked + {\n @content;\n }\n}\n\n///\n/// Helps select the radio background only when its native control is in the\n/// disabled state.\n/// @access private\n///\n@mixin if-disabled_ {\n [aria-disabled=\"true\"] .mdc-radio__native-control,\n .mdc-radio__native-control:disabled {\n + {\n @content;\n }\n }\n}\n\n///\n/// Helps select the radio background only when its native control is in the\n/// disabled & unchecked state.\n/// @access private\n///\n@mixin if-disabled-unchecked_ {\n [aria-disabled=\"true\"] .mdc-radio__native-control,\n .mdc-radio__native-control:disabled {\n &:not(:checked) + {\n @content;\n }\n }\n}\n\n///\n/// Helps select the radio background only when its native control is in the\n/// disabled & checked state.\n/// @access private\n///\n@mixin if-disabled-checked_ {\n [aria-disabled=\"true\"] .mdc-radio__native-control,\n .mdc-radio__native-control:disabled {\n &:checked + {\n @content;\n }\n }\n}\n\n///\n/// Sets the ink color for radio. This is wrapped in a mixin\n/// that qualifies state such as `mdc-radio-if-enabled_`\n/// @access private\n///\n@mixin ink-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-radio__background .mdc-radio__inner-circle {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $color);\n }\n }\n}\n\n///\n/// Sets the stroke color for radio. This is wrapped in a mixin\n/// that qualifies state such as `mdc-radio-if-enabled_`\n/// @access private\n///\n@mixin stroke-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-radio__background .mdc-radio__outer-circle {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $color);\n }\n }\n}\n","//\n// Copyright 2016 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/density/variables\" as density-variables;\n@use \"@material/theme/variables\" as theme-variables;\n\n$ripple-size: 40px !default;\n$icon-size: 20px !default;\n$transition-duration: 120ms !default;\n$ripple-opacity: .14 !default;\n$baseline-theme-color: secondary !default;\n$unchecked-color: rgba(theme-variables.prop-value(on-surface), .54) !default;\n$disabled-circle-color: rgba(theme-variables.prop-value(on-surface), .38) !default;\n\n$minimum-size: 28px !default;\n$maximum-size: $ripple-size !default;\n$density-scale: density-variables.$default-scale !default;\n$density-config: (\n size: (\n minimum: $minimum-size,\n default: $ripple-size,\n maximum: $maximum-size,\n ),\n) !default;\n","// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:/\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software./\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"../functions\";\n\n// Public mixins\n\n@mixin helper-text-core-styles($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-select-helper-text {\n @include typography-mixins.typography(caption, $query: $query);\n @include typography-mixins.text-baseline(16px, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0;\n opacity: 0;\n will-change: opacity;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition(opacity);\n }\n }\n\n .mdc-select-helper-text--persistent {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: none;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n will-change: initial;\n }\n }\n}\n\n@mixin helper-text-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include helper-text-color_($color, $query: $query);\n }\n}\n\n@mixin helper-text-validation-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include helper-text-validation-color_($color, $query: $query);\n }\n}\n\n// Private mixins\n\n@mixin helper-text-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-select__anchor + .mdc-select-helper-text {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin helper-text-validation-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &.mdc-select--invalid .mdc-select__anchor + .mdc-select-helper-text--validation-msg {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n","// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:/\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software./\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./variables\";\n\n// Public mixins\n\n@mixin icon-core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-select--with-leading-icon {\n @include icon_($query: $query);\n @include icon-horizontal-margins_(\n $left: variables.$icon-horizontal-margin,\n $right: variables.$icon-horizontal-margin,\n $query: $query);\n @include icon-color(on-surface, $query: $query);\n }\n\n .mdc-select__icon:not([tabindex]),\n .mdc-select__icon[tabindex=\"-1\"] {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: default;\n pointer-events: none;\n }\n }\n}\n\n@mixin icon-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include icon-color_($color, $query: $query);\n }\n}\n\n// Private mixins\n\n@mixin icon_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-select__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n box-sizing: border-box;\n width: variables.$icon-size;\n height: variables.$icon-size;\n border: none;\n opacity: variables.$icon-opacity;\n text-decoration: none;\n cursor: pointer;\n user-select: none;\n flex-shrink: 0;\n align-self: center;\n }\n\n @include feature-targeting-mixins.targets($feat-color) {\n background-color: transparent;\n fill: currentColor;\n }\n }\n}\n\n@mixin icon-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-select__icon {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin icon-horizontal-margins_($left, $right, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n .mdc-select__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(\n margin,\n $left,\n $right\n );\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"sass:string\";\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/floating-label/mixins\" as floating-label-mixins;\n@use \"@material/line-ripple/mixins\" as line-ripple-mixins;\n@use \"@material/notched-outline/mixins\" as notched-outline-mixins;\n@use \"@material/notched-outline/variables\" as notched-outline-variables;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/ripple/functions\" as ripple-functions;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/shape/functions\";\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as theme-variables;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./helper-text/mixins\" as helper-text-mixins;\n@use \"./icon/variables\" as icon-variables;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include ripple($query);\n @include without-ripple($query);\n}\n\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-select {\n @include container-fill-color(variables.$fill-color, $query: $query);\n @include ink-color(variables.$ink-color, $query: $query);\n @include label-color(variables.$label-color, $query: $query);\n @include bottom-line-color(variables.$bottom-line-idle-color, $query: $query);\n @include helper-text-mixins.helper-text-color(variables.$helper-text-color, $query: $query);\n\n // Focused state colors\n @include focused-bottom-line-color(primary, $query: $query);\n @include focused-label-color(variables.$focused-label-color, $query: $query);\n\n // Hover state colors\n @include hover-bottom-line-color(variables.$bottom-line-hover-color, $query: $query);\n\n // Floating label private mixin\n @include floating-label_($query: $query);\n\n // structural\n @include shape-radius(small, $query: $query);\n @include padding-horizontal_(\n $left: variables.$anchor-padding-left,\n $left-with-leading-icon: variables.$anchor-padding-left-with-leading-icon,\n $right: variables.$anchor-padding-right,\n $query: $query\n );\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative; // Menu is absolutely positioned relative to this.\n }\n\n &__dropdown-icon {\n @include dd-arrow-svg-bg_(variables.$dropdown-color, variables.$dropdown-opacity, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin,\n icon-variables.$icon-horizontal-margin,\n icon-variables.$icon-horizontal-margin);\n width: 24px;\n height: 24px;\n align-self: center;\n flex-shrink: 0;\n pointer-events: none;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: transform variables.$dropdown-transition-duration animation-variables.$standard-curve-timing-function;\n }\n\n .mdc-select--focused & {\n @include dd-arrow-svg-bg_(theme-variables.prop-value(primary), 1, $query: $query);\n }\n\n .mdc-select--activated & {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: rotate(180deg) translateY(-5px);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: transform variables.$dropdown-transition-duration animation-variables.$standard-curve-timing-function;\n }\n }\n }\n }\n\n .mdc-select__anchor {\n @include height(variables.$height, $query: $query);\n @include floating-label-mixins.float-position(variables.$label-position-y, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n outline: none;\n cursor: pointer;\n min-width: 200px;\n }\n\n @include focused-line-ripple_ {\n &::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(1, 2);\n opacity: 1;\n }\n }\n }\n }\n\n @include helper-text_($query: $query);\n @include text_($query: $query);\n\n .mdc-select--outlined {\n @include outlined_($query: $query);\n }\n\n .mdc-select--invalid {\n @include label-color(variables.$error-color, $query: $query);\n @include bottom-line-color(variables.$error-color, $query: $query);\n @include focused-bottom-line-color(variables.$error-color, $query: $query);\n @include focused-label-color(variables.$error-color, $query: $query);\n @include helper-text-mixins.helper-text-validation-color(variables.$error-color, $query: $query);\n\n // Hover state colors\n @include hover-bottom-line-color(variables.$error-color, $query: $query);\n\n &.mdc-select--outlined {\n @include outline-color(variables.$error-color, $query: $query);\n @include hover-outline-color(variables.$error-color, $query: $query);\n @include focused-outline-color(variables.$error-color, $query: $query);\n }\n\n .mdc-select__dropdown-icon {\n @include dd-arrow-svg-bg_(variables.$error-color, 1, $query: $query);\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n + .mdc-select-helper-text--validation-msg {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n }\n\n .mdc-select--required {\n // stylelint-disable-next-line plugin/selector-bem-pattern\n .mdc-floating-label::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n content: \"*\";\n }\n }\n }\n\n .mdc-select--disabled {\n @include disabled_($query: $query);\n }\n\n .mdc-select--with-leading-icon {\n @include with-leading-icon_($query: $query);\n }\n\n .mdc-select__menu .mdc-list .mdc-list-item--selected {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, on-surface);\n }\n }\n\n @include floating-label-mixins.shake-keyframes(\n select-outlined-leading-icon,\n variables.$outlined-label-position-y,\n variables.$outlined-with-leading-icon-label-position-x,\n $query: $query\n );\n @include floating-label-mixins.shake-keyframes(\n select-outlined-leading-icon-rtl,\n variables.$outlined-label-position-y,\n -(variables.$outlined-with-leading-icon-label-position-x),\n $query: $query\n );\n}\n\n@mixin ripple($query: feature-targeting-functions.all()) {\n .mdc-select__anchor {\n @include ripple-mixins.surface($ripple-target: variables.$ripple-target, $query: $query);\n @include ripple-mixins.radius-bounded($ripple-target: variables.$ripple-target, $query: $query);\n @include ripple-mixins.states-base-color(variables.$ink-color, $ripple-target: variables.$ripple-target, $query: $query);\n @include ripple-mixins.states-opacities(\n (\n hover: ripple-functions.states-opacity(variables.$ink-color, hover),\n focus: ripple-functions.states-opacity(variables.$ink-color, focus),\n ),\n $ripple-target: variables.$ripple-target,\n $query: $query\n );\n\n #{variables.$ripple-target} {\n @include ripple-mixins.target-common($query: $query);\n }\n }\n\n .mdc-select__menu .mdc-list .mdc-list-item--selected {\n @include ripple-mixins.states(on-surface, $query: $query);\n }\n}\n\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include ink-color_($color, $query: $query);\n }\n}\n\n@mixin container-fill-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include container-fill-color_($color, $query: $query);\n }\n}\n\n@mixin focused-label-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n &.mdc-select--focused .mdc-floating-label {\n @include floating-label-mixins.ink-color(theme-variables.prop-value($color), $query: $query);\n }\n }\n}\n\n@mixin hover-bottom-line-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled):hover {\n @include bottom-line-color_($color, $query: $query);\n }\n}\n\n@mixin bottom-line-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include bottom-line-color_($color, $query: $query);\n }\n}\n\n@mixin focused-bottom-line-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include focused-line-ripple-color_($color, $query: $query);\n }\n}\n\n@mixin label-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) .mdc-floating-label {\n @include floating-label-mixins.ink-color($color, $query: $query);\n }\n}\n\n@mixin outline-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include outline-color_($color, $query: $query);\n }\n}\n\n@mixin hover-outline-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include hover-outline-color_($color, $query: $query);\n }\n}\n\n@mixin focused-outline-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-select--disabled) {\n @include focused-outline-color_($color, $query: $query);\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n @if list.length($radius) > 2 {\n @error \"Invalid radius: '#{$radius}' component doesn't allow customizing all corners\";\n }\n\n $masked-radius: functions.mask-radius($radius, 1 1 0 0);\n\n .mdc-select__anchor {\n @include shape-mixins.radius(functions.resolve-percentage-radius(variables.$height, $masked-radius), $rtl-reflexive, $query: $query);\n }\n}\n\n@mixin outline-shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n $resolved-radius: list.nth(functions.resolve-percentage-radius(variables.$height, functions.prop-value($radius)), 1);\n\n @if (list.length(functions.prop-value($radius)) > 1) {\n // stylelint-disable-next-line max-line-length\n @warn \"mdc-select-outline-shape-radius only supports a single radius; see https://github.com/material-components/material-components-web/issues/4140\";\n }\n\n .mdc-notched-outline {\n @include notched-outline-mixins.shape-radius($resolved-radius, $rtl-reflexive, $query: $query);\n }\n\n .mdc-select__selected-text {\n @include shape-mixins.radius($resolved-radius, $rtl-reflexive, $query: $query);\n }\n\n @if ($resolved-radius > notched-outline-variables.$leading-width) {\n .mdc-select__anchor {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(\n padding,\n $resolved-radius + notched-outline-variables.$padding,\n 0\n );\n }\n }\n\n + .mdc-select-helper-text {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(\n margin,\n $resolved-radius + notched-outline-variables.$padding,\n variables.$outline-label-offset\n );\n }\n }\n }\n}\n\n// Private\n@mixin focused-line-ripple_ {\n &.mdc-select--focused .mdc-line-ripple {\n @content;\n }\n}\n\n@mixin focused-outline_ {\n &.mdc-select--focused .mdc-notched-outline {\n @content;\n }\n}\n\n@mixin focused-outline-idle_ {\n &.mdc-select--focused {\n @content;\n }\n}\n\n@mixin ink-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-select__selected-text {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin container-fill-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-select__anchor {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin bottom-line-color_($color, $query: feature-targeting-functions.all()) {\n .mdc-line-ripple {\n @include line-ripple-mixins.inactive-color($color, $query: $query);\n }\n}\n\n@mixin focused-line-ripple-color_($color, $query: feature-targeting-functions.all()) {\n @include focused-line-ripple_ {\n @include line-ripple-mixins.active-color($color, $query: $query);\n }\n}\n\n@mixin dd-arrow-svg-bg_($fill-hex-number, $opacity, $query: feature-targeting-functions.all()) {\n // Lookup color and remove leading #.\n $fill-hex-number: theme-variables.prop-value($fill-hex-number);\n $fill-hex-number: string.slice(string.unquote(\"#{$fill-hex-number}\"), 2);\n\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // stylelint-disable-next-line function-url-quotes\n background: url('data:image/svg+xml,%3Csvg%20width%3D%2210px%22%20height%3D%225px%22%20viewBox%3D%227%2010%2010%205%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%0A%20%20%20%20%3Cpolygon%20id%3D%22Shape%22%20stroke%3D%22none%22%20fill%3D%22%23#{$fill-hex-number}%22%20fill-rule%3D%22evenodd%22%20opacity%3D%22#{$opacity}%22%20points%3D%227%2010%2012%2015%2017%2010%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E')\n no-repeat\n center;\n }\n}\n\n@mixin outline-color_($color, $query: feature-targeting-functions.all()) {\n @include notched-outline-mixins.color($color, $query: $query);\n}\n\n@mixin hover-outline-color_($color, $query: feature-targeting-functions.all()) {\n // stylelint-disable-next-line selector-combinator-space-after\n &:not(.mdc-select--focused) .mdc-select__anchor:hover {\n .mdc-notched-outline {\n @include notched-outline-mixins.color($color, $query: $query);\n }\n }\n}\n\n@mixin focused-outline-color_($color, $query: feature-targeting-functions.all()) {\n @include focused-outline_ {\n @include notched-outline-mixins.stroke-width(variables.$outlined-stroke-width, $query: $query);\n @include notched-outline-mixins.color($color, $query: $query);\n }\n}\n\n@mixin floating-label_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, variables.$outline-label-offset);\n\n top: 50%;\n transform: translateY(-50%);\n pointer-events: none;\n }\n }\n\n &.mdc-select--outlined {\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, notched-outline-variables.$padding);\n }\n }\n }\n}\n\n@mixin with-leading-icon_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n $icon-total-width: icon-variables.$icon-size + 2 * icon-variables.$icon-horizontal-margin;\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, $icon-total-width);\n }\n }\n\n &.mdc-select--outlined {\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, $icon-total-width - notched-outline-variables.$leading-width);\n }\n\n &--float-above {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, $icon-total-width - notched-outline-variables.$leading-width);\n }\n }\n }\n\n @include notched-outline-mixins.floating-label-float-position-absolute(\n variables.$outlined-label-position-y,\n $icon-total-width - icon-variables.$icon-horizontal-margin - notched-outline-variables.$notch-gutter-size,\n $query: $query\n );\n @include floating-label-mixins.shake-animation(select-outlined-leading-icon, $query: $query);\n\n @include rtl-mixins.rtl {\n @include floating-label-mixins.shake-animation(select-outlined-leading-icon-rtl, $query: $query);\n }\n }\n\n &.mdc-select__menu .mdc-list-item__text {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, 32px /* left-value */, 32px /* right-value */);\n }\n }\n}\n\n@mixin text_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-select__selected-text {\n @include typography-mixins.typography(subtitle1, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n &::-ms-expand {\n display: none;\n }\n\n &::-ms-value {\n background-color: transparent;\n color: inherit;\n }\n\n box-sizing: border-box;\n width: 0;\n flex-grow: 1;\n height: variables.$selected-text-height;\n border: none;\n outline: none;\n padding: 0;\n white-space: nowrap;\n appearance: none;\n pointer-events: none;\n text-overflow: ellipsis;\n }\n\n @include feature-targeting-mixins.targets($feat-color) {\n background-color: transparent;\n color: inherit; // Override default user agent stylesheet\n }\n }\n}\n\n@mixin disabled_($query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include container-fill-color_(variables.$disabled-fill-color, $query: $query);\n\n .mdc-floating-label {\n @include floating-label-mixins.ink-color(variables.$disabled-label-color, $query: $query);\n }\n\n .mdc-select__dropdown-icon {\n @include dd-arrow-svg-bg_(variables.$dropdown-color, variables.$disabled-dropdown-opacity, $query: $query);\n }\n\n .mdc-line-ripple {\n @include line-ripple-mixins.inactive-color(variables.$disabled-ink-color, $query: $query);\n\n &::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n // TODO(b/146080006): Fix incorrect styling\n border-bottom-style: dotted;\n }\n }\n }\n\n .mdc-select__icon {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, variables.$disabled-icon-color);\n }\n }\n\n .mdc-select__selected-text {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, variables.$disabled-ink-color);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n pointer-events: none;\n }\n }\n\n &.mdc-select--outlined {\n @include container-fill-color_(transparent, $query: $query);\n @include outline-color_(variables.$outlined-disabled-border, $query: $query);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n@mixin outlined_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include container-fill-color(transparent, $query: $query);\n @include outline-color(variables.$outlined-idle-border, $query: $query);\n @include hover-outline-color(variables.$outlined-hover-border, $query: $query);\n @include focused-outline-color(primary, $query: $query);\n @include outline-shape-radius(small, $query: $query);\n @include container-fill-color(transparent, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n border: none;\n }\n\n .mdc-select__anchor {\n @include floating-label-mixins.shake-animation(select-outlined, $query: $query);\n @include notched-outline-mixins.floating-label-float-position-absolute(variables.$outlined-label-position-y, $query: $query);\n @include notched-outline-mixins.notch-offset(notched-outline-variables.$border-width, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow: visible;\n }\n }\n\n .mdc-select__selected-text {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n border: none;\n z-index: 1;\n }\n\n @include feature-targeting-mixins.targets($feat-color) {\n background-color: transparent;\n }\n }\n\n .mdc-select__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n z-index: 2;\n }\n }\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n line-height: 1.15rem;\n pointer-events: auto;\n }\n }\n\n &.mdc-select--focused {\n @include notched-outline-mixins.notch-offset(variables.$outlined-stroke-width, $query: $query);\n }\n}\n\n@mixin helper-text_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-select-helper-text {\n // stylelint-disable plugin/selector-bem-pattern\n .mdc-select__anchor + & {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-right: 16px;\n margin-left: 16px;\n }\n }\n }\n\n .mdc-select--focused .mdc-select__anchor + .mdc-select-helper-text:not(.mdc-select-helper-text--validation-msg) {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n}\n\n/// Adds horizontal padding to the selected text\n///\n/// @param {Number} $left - left side padding\n/// @param {Number} $left-with-leading-icon - left-side padding when a leading\n/// icon is present\n/// @param {Number} $right - right-side padding; note that a trailing icon is\n/// always present.\n@mixin padding-horizontal_(\n $left,\n $left-with-leading-icon,\n $right,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-select__anchor {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(\n padding,\n $left,\n $right\n );\n }\n }\n\n &.mdc-select--with-leading-icon .mdc-select__anchor {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(\n padding,\n $left-with-leading-icon,\n $right\n );\n }\n }\n}\n\n///\n/// Sets height of default select variant.\n///\n/// @param {Number} $height\n/// @param {Number} $minimum-height-for-filled-label Sets the minimum height for\n/// filled selects at which to allow floating labels.\n/// @param {Number} $filled-baseline-top The baseline from the top of the anchor\n/// that the input should be aligned to for a filled variant with a label\n/// @access public\n///\n@mixin height(\n $height,\n $minimum-height-for-filled-label: variables.$minimum-height-for-filled-label,\n $filled-baseline-top: variables.$filled-baseline-top,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n\n // Filled variant is aligned to baseline...\n @include typography-mixins.baseline($top: $filled-baseline-top, $display: inline-flex, $query: $query);\n // ...unless it is too small to display a label\n @if $height < $minimum-height-for-filled-label {\n @include center-aligned_($query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n &:not(.mdc-select--outlined) {\n .mdc-floating-label {\n display: none;\n }\n }\n }\n }\n\n // Outlined and no-label variants are always centered\n .mdc-select--outlined &,\n .mdc-select--no-label & {\n @include center-aligned_($query: $query);\n }\n}\n\n// Removes filled baseline alignment\n@mixin center-aligned_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // In order for a flexbox container to participate in baseline alignment,\n // it follows these rules to determine where its baseline is:\n // https://www.w3.org/TR/css-flexbox-1/#flex-baselines\n //\n // In order to avoid leading icons \"controlling\" the baseline (since they\n // are the first child), flexbox will generate a baseline from any child\n // flex items that participate in baseline alignment.\n //\n // Icons are set to \"align-self: center\", while all other children are\n // aligned to baseline. The next problem is deciding which child is\n // used to determine the baseline.\n //\n // According to spec, the item with the largest distance between its\n // baseline and the edge of the cross axis is placed flush with that edge,\n // making it the baseline of the container.\n // https://www.w3.org/TR/css-flexbox-1/#baseline-participation\n //\n // For the filled variant, the pseudo ::before strut is the \"largest\"\n // child since the input has a height of 28px and the strut is 40px. We\n // can emulate center alignment and force the baseline to use the input\n // text by making the input the full height of the container and removing\n // the baseline strut.\n //\n // IE11 does not respect this, and makes the leading icon (if present)\n // the baseline.\n .mdc-select__selected-text {\n height: 100%;\n }\n\n &::before {\n display: none;\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:color\";\n@use \"@material/notched-outline/variables\" as notched-outline-variables;\n@use \"@material/theme/variables\";\n\n@function get-outlined-label-position-y($select-anchor-height) {\n @return $select-anchor-height / 2 + notched-outline-variables.$label-box-height / 2;\n}\n$ripple-target: '.mdc-select__ripple';\n$arrow-padding: 52px !default;\n$label-padding: 16px !default;\n$height: 56px !default;\n$minimum-height-for-filled-label: 52px !default;\n$filled-baseline-top: 40px !default;\n$selected-text-height: 28px !default;\n$anchor-padding-left: 16px !default;\n$anchor-padding-left-with-leading-icon: 0 !default;\n$anchor-padding-right: 0 !default;\n$outlined-stroke-width: 2px !default;\n\n$ink-color: rgba(variables.prop-value(on-surface), .87) !default;\n$dropdown-color: variables.prop-value(on-surface) !default;\n$icon-color: rgba(variables.prop-value(on-surface), .54) !default;\n$label-color: rgba(variables.prop-value(on-surface), .6) !default;\n$focused-label-color: rgba(variables.prop-value(primary), .87) !default;\n$bottom-line-idle-color: rgba(variables.prop-value(on-surface), .42) !default;\n$bottom-line-hover-color: rgba(variables.prop-value(on-surface), .87) !default;\n$helper-text-color: rgba(variables.prop-value(on-surface), .6) !default;\n\n$fill-color: color.mix(variables.prop-value(on-surface), variables.prop-value(surface), 4%) !default;\n\n$dropdown-opacity: .54 !default;\n\n// Disabled Styles\n$disabled-label-color: rgba(variables.prop-value(on-surface), .38) !default;\n$disabled-icon-color: rgba(variables.prop-value(on-surface), .38) !default;\n$disabled-ink-color: rgba(variables.prop-value(on-surface), .38) !default;\n$disabled-fill-color: color.mix(variables.prop-value(on-surface), variables.prop-value(surface), 2%) !default;\n$disabled-dropdown-opacity: .38 !default;\n\n$outlined-idle-border: rgba(variables.prop-value(on-surface), .38) !default;\n$outlined-hover-border: rgba(variables.prop-value(on-surface), .87) !default;\n\n// should be .06 after mdc-select opacity is applied\n$outlined-disabled-border: rgba(variables.prop-value(on-surface), .16) !default;\n\n$label-position-y: 106% !default;\n$outline-label-offset: 16px !default;\n$outlined-label-position-y: get-outlined-label-position-y($height) !default;\n$outlined-with-leading-icon-label-position-x: 32px !default;\n\n$dropdown-transition-duration: 150ms !default;\n\n// Error colors\n$error-color: error !default;\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@mixin emphasize-keyframes_ {\n @keyframes mdc-slider-emphasize {\n 0% {\n animation-timing-function: ease-out;\n }\n\n 50% {\n animation-timing-function: ease-in;\n transform: scale(.85);\n }\n\n 100% {\n transform: scale(.571);\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/theme/functions\" as theme-functions;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/theme/variables\" as theme-variables; // for mdc-theme-prop-value\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"./variables\";\n@use \"./keyframes\";\n\n//\n// Public\n//\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n // postcss-bem-linter: define slider\n\n @include feature-targeting-mixins.targets($feat-animation) {\n @include keyframes.emphasize-keyframes_;\n }\n\n .mdc-slider {\n @include color-accessible(secondary, $query: $query);\n\n &--disabled {\n $disabled-color: #9a9a9a;\n\n @include highlight-color_($disabled-color, $query: $query);\n @include rail-color_($disabled-color, $query: $query);\n @include rail-tick-mark-color_($disabled-color, $query: $query);\n @include thumb-color_($disabled-color, $query: $query);\n @include thumb-stroke-cutout_(white, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: auto;\n }\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative;\n width: 100%;\n height: 48px;\n cursor: pointer;\n touch-action: pan-x;\n -webkit-tap-highlight-color: rgba(black, 0);\n\n &:focus {\n outline: none;\n }\n }\n\n @include track_($query: $query);\n @include track-marker_($query: $query);\n @include thumb_($query: $query);\n @include focus-ring_($query: $query);\n @include pin_($query: $query);\n }\n\n .mdc-slider--active {\n .mdc-slider__thumb {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale3d(1, 1, 1);\n }\n }\n }\n\n .mdc-slider--focus {\n .mdc-slider__thumb {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: mdc-slider-emphasize 266.67ms linear;\n }\n }\n\n .mdc-slider__focus-ring {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale3d(1.55, 1.55, 1.55);\n opacity: .25;\n }\n }\n }\n\n .mdc-slider--in-transit {\n .mdc-slider__thumb {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-delay: 140ms;\n }\n }\n }\n\n // NOTE(traviskaufman): There are multiple cases where we want the slider to\n // transition seamlessly even though we're jumping to a spot. The selectors\n // below highlight these cases. The selectors are supplemented by a comment\n // denoting their semantic meaning within the slider.\n\n // When a user clicks somewhere on the track that is not directly the slider\n // thumb container, we transition to the place where the user clicked.\n .mdc-slider--in-transit,\n // When a user is using the arrow keys to modify the value of the slider rather\n // than dragging with a pointer, we transition from one value to another.\n .mdc-slider:focus:not(.mdc-slider--active) {\n .mdc-slider__thumb-container,\n .mdc-slider__track {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: transform 80ms ease;\n }\n }\n }\n\n .mdc-slider--discrete {\n // stylelint-disable plugin/selector-bem-pattern\n &.mdc-slider--active {\n .mdc-slider__thumb {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(calc(12 / 21));\n }\n }\n\n .mdc-slider__pin {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: rotate(-45deg) scale(1) translate(19px, -20px);\n }\n }\n }\n\n &.mdc-slider--focus {\n .mdc-slider__thumb {\n @include feature-targeting-mixins.targets($feat-animation) {\n animation: none;\n }\n }\n }\n\n &.mdc-slider--display-markers {\n .mdc-slider__track-marker-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n visibility: visible;\n }\n }\n }\n // stylelint-enable plugin/selector-bem-pattern\n }\n\n // postcss-bem-linter: end\n}\n\n@mixin highlight-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-slider--disabled) {\n @include highlight-color_($color, $query: $query);\n }\n}\n\n@mixin rail-color($color, $opacity: variables.$baseline-rail-opacity, $query: feature-targeting-functions.all()) {\n &:not(.mdc-slider--disabled) {\n @include rail-color_($color, $opacity, $query: $query);\n }\n}\n\n@mixin rail-tick-mark-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-slider--disabled) {\n @include rail-tick-mark-color_($color, $query: $query);\n }\n}\n\n@mixin thumb-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-slider--disabled) {\n @include thumb-color_($color, $query: $query);\n }\n}\n\n@mixin focus-halo-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &:not(.mdc-slider--disabled) {\n .mdc-slider__focus-ring {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n }\n}\n\n@mixin value-pin-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &:not(.mdc-slider--disabled) {\n .mdc-slider__pin {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n }\n}\n\n@mixin value-pin-fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &:not(.mdc-slider--disabled) {\n .mdc-slider__pin {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n }\n}\n\n@mixin value-pin-fill-color-accessible($color, $query: feature-targeting-functions.all()) {\n $color-value: theme-variables.prop-value($color);\n $ink-color: if(theme-functions.tone($color-value) == \"light\", text-primary-on-light, text-primary-on-dark);\n\n @include value-pin-fill-color($color, $query: $query);\n @include value-pin-ink-color($ink-color, $query: $query);\n}\n\n// NOTE: This mixin sets the color of ALL customizable elements in the slider. If new elements are added, this mixin\n// should be updated to cover those additional elements.\n@mixin color-accessible($color, $query: feature-targeting-functions.all()) {\n @include highlight-color($color, $query: $query);\n @include rail-color($color, $query: $query);\n @include rail-tick-mark-color($color, $query: $query);\n @include thumb-color($color, $query: $query);\n @include focus-halo-color($color, $query: $query);\n @include value-pin-fill-color-accessible($color, $query: $query);\n}\n\n//\n// Private\n//\n\n@mixin track_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n &__track-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 50%;\n width: 100%;\n height: 2px;\n overflow: hidden;\n }\n\n &::after {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n width: 100%;\n height: 100%;\n content: \"\";\n }\n }\n }\n\n &__track {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n width: 100%;\n height: 100%;\n transform-origin: left top;\n\n @include rtl-mixins.rtl(\".mdc-slider\") {\n transform-origin: right top;\n }\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n will-change: transform;\n }\n }\n}\n\n@mixin track-marker_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // stylelint-disable-next-line selector-max-type\n &__track-marker-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n margin-right: 0;\n margin-left: -1px;\n visibility: hidden;\n\n @include rtl-mixins.rtl(\".mdc-slider\") {\n margin-right: -1px;\n margin-left: 0;\n }\n\n // Last marker at the very end of the slider (right-most in LTR, left-most in RTL)\n // stylelint-disable-next-line selector-max-type\n &::after {\n display: block;\n width: 2px;\n height: 2px;\n content: \"\";\n }\n }\n }\n\n &__track-marker {\n @include feature-targeting-mixins.targets($feat-structure) {\n flex: 1;\n\n // stylelint-disable-next-line selector-max-type\n &::after {\n display: block;\n width: 2px;\n height: 2px;\n content: \"\";\n }\n\n // stylelint-disable-next-line selector-max-type\n &:first-child::after {\n width: 3px;\n }\n }\n }\n}\n\n@mixin thumb_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n &__thumb-container {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 15px;\n left: 0;\n width: 21px;\n // Ensure that touching anywhere within the Y-coordinate space of thumb\n // is considered \"clicking on the thumb\".\n height: 100%;\n user-select: none;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n will-change: transform;\n }\n }\n\n &__thumb {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n left: 0;\n transform: scale(.571);\n stroke-width: 3.5;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: transform 100ms ease-out, fill 100ms ease-out, stroke 100ms ease-out;\n }\n }\n}\n\n@mixin focus-ring_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n &__focus-ring {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 21px;\n height: 21px;\n border-radius: 50%;\n opacity: 0;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: transform 266.67ms ease-out, opacity 266.67ms ease-out, background-color 266.67ms ease-out;\n }\n }\n}\n\n@mixin pin_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n &__pin {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n margin-top: -2px;\n margin-left: -2px;\n transform: rotate(-45deg) scale(0) translate(0, 0);\n border-radius: 50% 50% 50% 0%;\n\n // Ensuring that the pin is higher than the thumb in the stacking order\n // removes some rendering jank observed in Chrome.\n z-index: 1;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: transform 100ms ease-out;\n }\n }\n\n &__pin-value-marker {\n @include typography-mixins.typography(body2, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: rotate(45deg);\n }\n }\n}\n\n@mixin highlight-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-slider__track {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin rail-color_($color, $opacity: variables.$baseline-rail-opacity, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-slider__track-container::after {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n\n opacity: $opacity;\n }\n }\n}\n\n@mixin rail-tick-mark-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-slider__track-marker-container {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin thumb-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-slider__thumb {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(fill, $color);\n @include theme-mixins.prop(stroke, $color);\n }\n }\n}\n\n@mixin thumb-stroke-cutout_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-slider__thumb {\n @include feature-targeting-mixins.targets($feat-color) {\n /* @alternate */\n stroke: $color;\n // stylelint-disable-next-line declaration-block-no-duplicate-properties\n stroke: var(--mdc-slider-bg-color-behind-component, $color);\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n$baseline-rail-opacity: .26 !default;\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/animation/functions\" as animation-functions;\n@use \"@material/button/mixins\" as button-mixins;\n@use \"@material/icon-button/mixins\" as icon-button-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n // postcss-bem-linter: define snackbar\n .mdc-snackbar {\n @include z-index(variables.$z-index, $query: $query);\n @include viewport-margin(variables.$viewport-margin-narrow, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: none;\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n\n // Ignore mouse events on the root layout element.\n pointer-events: none;\n\n // For some reason, iOS Safari displays a tap highlight on the entire snackbar element.\n // Mobile Safari only supports `rgba` values for this property; named values like\n // `transparent` are ignored. From Apple's docs:\n // > This property obeys the alpha value, if specified.\n // > If you don’t specify an alpha value, Safari on iOS applies a default alpha value to the color.\n // > To disable tap highlighting, set the alpha value to 0 (invisible).\n // > If you set the alpha value to 1.0 (opaque), the element is not visible when tapped.\n // See https://github.com/ben-eb/postcss-colormin/issues/1\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n }\n }\n\n @at-root {\n @include fill-color(variables.$fill-color, $query: $query);\n @include label-ink-color(variables.$label-ink-color, $query: $query);\n @include min-width(variables.$min-width, $query: $query);\n @include max-width(variables.$max-width, $query: $query);\n @include elevation(variables.$elevation, $query: $query);\n @include shape-radius(variables.$shape-radius, $query: $query);\n }\n\n .mdc-snackbar--opening,\n .mdc-snackbar--open,\n .mdc-snackbar--closing {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n }\n }\n\n .mdc-snackbar--leading {\n @include position-leading($query: $query);\n }\n\n .mdc-snackbar--stacked {\n @include layout-stacked($query: $query);\n }\n\n .mdc-snackbar__surface {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, 0, variables.$padding);\n\n display: flex;\n align-items: center;\n justify-content: flex-start;\n box-sizing: border-box;\n transform: scale(.8);\n opacity: 0;\n }\n\n .mdc-snackbar--open & {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(1);\n opacity: 1;\n pointer-events: auto; // Allow mouse events on surface element while snackbar is open\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n animation-functions.enter(opacity, variables.$enter-duration),\n animation-functions.enter(transform, variables.$enter-duration);\n }\n }\n\n .mdc-snackbar--closing & {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: scale(1);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: animation-functions.exit-permanent(opacity, variables.$exit-duration);\n }\n }\n }\n\n .mdc-snackbar__label {\n @include typography-mixins.typography(variables.$label-type-scale, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, 16px, variables.$padding);\n\n width: 100%;\n flex-grow: 1;\n box-sizing: border-box;\n margin: 0;\n\n // 14px top/bottom padding needed to make the height 48px.\n padding-top: 14px;\n padding-bottom: 14px;\n }\n }\n\n // Used to prevent visual jank when announcing label text to screen readers.\n // See the `announce()` function in util.js for details.\n .mdc-snackbar__label::before {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline;\n content: attr(data-mdc-snackbar-label-text);\n }\n }\n\n .mdc-snackbar__actions {\n @include feature-targeting-mixins.targets($feat-structure) {\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n box-sizing: border-box;\n }\n }\n\n .mdc-snackbar__action {\n @include button-mixins.ink-color(variables.$action-ink-color, $query: $query);\n @include ripple-mixins.states(variables.$action-ink-color, $query: $query);\n }\n\n .mdc-snackbar__dismiss {\n @include icon-button-mixins.ink-color(variables.$dismiss-ink-color, $query: $query);\n }\n\n // Two selectors are needed to increase specificity above `.material-icons`.\n // stylelint-disable-next-line selector-class-pattern\n .mdc-snackbar__dismiss.mdc-snackbar__dismiss {\n @include icon-button-mixins.icon-size(variables.$dismiss-icon-size, $query: $query);\n }\n\n .mdc-snackbar__action + .mdc-snackbar__dismiss {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, variables.$padding, 0);\n }\n }\n // postcss-bem-linter: end\n}\n\n@mixin fill-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-snackbar__surface {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin label-ink-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-snackbar__label {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n .mdc-snackbar__surface {\n @include shape-mixins.radius($radius, $rtl-reflexive, $query: $query);\n }\n}\n\n@mixin min-width(\n $min-width,\n $mobile-breakpoint: variables.$mobile-breakpoint,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-snackbar__surface {\n @include feature-targeting-mixins.targets($feat-structure) {\n min-width: $min-width;\n\n // The first media query ensures that snackbars are always 100% width on mobile devices, as required by the spec.\n // The second media query prevents snackbars from being wider than the viewport for large min-width values.\n @media (max-width: $mobile-breakpoint), (max-width: $min-width) {\n min-width: 100%;\n }\n }\n }\n}\n\n@mixin max-width($max-width, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-snackbar__surface {\n @include feature-targeting-mixins.targets($feat-structure) {\n max-width: $max-width;\n }\n }\n}\n\n@mixin elevation($z-index, $query: feature-targeting-functions.all()) {\n .mdc-snackbar__surface {\n @include elevation-mixins.elevation($z-index, $query: $query);\n }\n}\n\n@mixin viewport-margin($margin, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: $margin;\n }\n}\n\n@mixin z-index($z-index, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n z-index: $z-index;\n }\n}\n\n@mixin position-leading($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n justify-content: flex-start;\n }\n}\n\n@mixin layout-stacked($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-snackbar__label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, 16px, 0);\n padding-bottom: 12px;\n }\n }\n\n .mdc-snackbar__surface {\n @include feature-targeting-mixins.targets($feat-structure) {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n\n .mdc-snackbar__actions {\n @include feature-targeting-mixins.targets($feat-structure) {\n align-self: flex-end;\n margin-bottom: variables.$padding;\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:color\";\n@use \"@material/theme/functions\";\n@use \"@material/theme/variables\"; // for mdc-theme-prop-value() function\n\n$fill-color: color.mix(variables.prop-value(on-surface), variables.prop-value(surface), 80%) !default;\n$label-ink-color: rgba(variables.prop-value(surface), variables.text-emphasis(high)) !default;\n$action-ink-color: #bb86fc !default;\n$dismiss-ink-color: rgba(variables.prop-value(surface), variables.text-emphasis(high)) !default;\n\n$label-type-scale: body2 !default;\n$dismiss-icon-size: 18px !default;\n$min-width: 344px !default;\n$max-width: 672px !default;\n$mobile-breakpoint: 480px !default;\n$viewport-margin-narrow: 8px !default;\n$viewport-margin-wide: 24px !default;\n$padding: 8px !default;\n\n$elevation: 6 !default;\n$shape-radius: small !default; // Key from $mdc-shape-category-values or CSS length value (e.g., 4px)\n$z-index: 8 !default; // One above mdc-dialog\n\n// These variables need to be kept in sync with the values in constants.js.\n$enter-duration: 150ms !default;\n$exit-duration: 75ms !default;\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"./functions\";\n@use \"./variables\";\n\n//\n// Public\n//\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// switch styles. It is recommended that most users use `mdc-switch-core-styles` instead.\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n // postcss-bem-linter: define switch\n\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include density(variables.$density-scale, $query: $query);\n\n .mdc-switch {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include base_;\n }\n\n @include toggled-on-track-color(variables.$baseline-theme-color, $query);\n @include toggled-on-thumb-color(variables.$baseline-theme-color, $query);\n @include toggled-off-track-color(variables.$toggled-off-track-color, $query);\n @include toggled-off-thumb-color(variables.$toggled-off-thumb-color, $query);\n }\n\n .mdc-switch__native-control {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include native-control_;\n }\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition(transform);\n }\n }\n\n .mdc-switch__track {\n @include track_($query);\n }\n\n .mdc-switch__thumb-underlay {\n @include thumb-underlay_($query);\n }\n\n .mdc-switch__thumb {\n @include thumb_($query);\n }\n\n .mdc-switch--checked {\n @include feature-targeting-mixins.targets($feat-structure) {\n .mdc-switch__track {\n @include track-checked_;\n }\n\n .mdc-switch__thumb-underlay {\n @include thumb-underlay-checked_;\n }\n\n .mdc-switch__native-control {\n @include native-control-checked_;\n }\n }\n }\n\n .mdc-switch--disabled {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include disabled-base_;\n\n .mdc-switch__thumb {\n @include thumb-disabled_;\n }\n\n .mdc-switch__native-control {\n @include native-control-disabled_;\n }\n }\n }\n\n // postcss-bem-linter: end\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles from the other\n// switch styles. It is recommended that most users use `mdc-switch-core-styles` instead.\n@mixin ripple($query: feature-targeting-functions.all()) {\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-switch {\n @include toggled-off-ripple-color(variables.$toggled-off-ripple-color, $query);\n }\n\n .mdc-switch__thumb-underlay {\n @include ripple-mixins.surface($query);\n @include ripple-mixins.radius-unbounded(100%, $query);\n @include ripple-mixins.states(variables.$baseline-theme-color, false, $query);\n }\n}\n\n@mixin toggled-on-color($color, $query: feature-targeting-functions.all()) {\n @include toggled-on-track-color($color, $query);\n @include toggled-on-thumb-color($color, $query);\n @include toggled-on-ripple-color($color, $query);\n}\n\n@mixin toggled-off-color($color, $query: feature-targeting-functions.all()) {\n @include toggled-off-track-color($color, $query);\n @include toggled-off-thumb-color($color, $query);\n @include toggled-off-ripple-color($color, $query);\n}\n\n@mixin toggled-on-track-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &.mdc-switch--checked .mdc-switch__track {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin toggled-on-thumb-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &.mdc-switch--checked .mdc-switch__thumb {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n @include theme-mixins.prop(border-color, $color);\n }\n }\n}\n\n@mixin toggled-on-ripple-color($color, $query: feature-targeting-functions.all()) {\n &.mdc-switch--checked .mdc-switch__thumb-underlay {\n @include ripple-mixins.states($color, false, $query);\n }\n}\n\n@mixin toggled-off-track-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &:not(.mdc-switch--checked) .mdc-switch__track {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n }\n }\n}\n\n@mixin toggled-off-thumb-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &:not(.mdc-switch--checked) .mdc-switch__thumb {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(background-color, $color);\n @include theme-mixins.prop(border-color, $color);\n }\n }\n}\n\n@mixin toggled-off-ripple-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-switch--checked) .mdc-switch__thumb-underlay {\n @include ripple-mixins.states($color, false, $query);\n }\n}\n\n///\n/// Sets density scale for switch.\n///\n/// @param {Number | String} $density-scale - Density scale value for component.\n/// Supported density scale values are `-5`, `-4`, `-3`, `-2`, `-1`,\n/// `0` (default).\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n $size: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: size,\n );\n\n @include ripple-size($size, $query: $query);\n}\n\n@mixin ripple-size($ripple-size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Position for the tap target that contains the thumb to align the thumb\n // correctly offset from the track.\n $tap-target-initial-position:\n -$ripple-size / 2 + variables.$thumb-diameter / 2 - variables.$thumb-offset;\n // Value to cover the whole switch area (including the ripple) with the\n // native control.\n $native-control-width:\n variables.$track-width +\n ($ripple-size - variables.$thumb-diameter) + variables.$thumb-offset * 2;\n\n .mdc-switch__thumb-underlay {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, $tap-target-initial-position);\n\n // Ensures the knob is centered on the track.\n top: -(($ripple-size - variables.$track-height) / 2);\n width: $ripple-size;\n height: $ripple-size;\n }\n }\n\n .mdc-switch__native-control {\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $native-control-width;\n height: $ripple-size;\n }\n }\n}\n\n///\n/// Customizes ripple opacities surrounding the thumb in `hover`, `focus`, or `press` states\n/// The customizations apply to both on and off switches to ensure symmetry\n/// @param {map} $opacity-map - map specifying custom opacity of zero or more states\n///\n@mixin ripple-states-opacity($opacity-map: (), $query: feature-targeting-functions.all()) {\n // Ensure sufficient specificity to override base state opacities\n &.mdc-switch .mdc-switch__thumb-underlay {\n @include ripple-mixins.states-opacities($opacity-map, $query: $query);\n }\n}\n\n//\n// Private\n//\n\n// Structure\n@mixin base_ {\n display: inline-block;\n position: relative;\n outline: none;\n user-select: none;\n}\n\n@mixin track_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n box-sizing: border-box;\n width: variables.$track-width;\n height: variables.$track-height;\n border: 1px solid transparent;\n border-radius: variables.$track-height / 2;\n opacity: .38;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition(opacity),\n functions.transition(background-color),\n functions.transition(border-color);\n }\n}\n\n@mixin thumb-underlay_($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-color: feature-targeting-functions.create-target($query, color);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n position: absolute;\n align-items: center;\n justify-content: center;\n transform: translateX(0);\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition:\n functions.transition(transform),\n functions.transition(background-color),\n functions.transition(border-color);\n }\n}\n\n@mixin native-control_ {\n @include rtl-mixins.reflexive-position(left, 0);\n\n position: absolute;\n top: 0;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n pointer-events: auto;\n}\n\n@mixin thumb_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include elevation-mixins.elevation($z-value: 2, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n box-sizing: border-box;\n width: variables.$thumb-diameter;\n height: variables.$thumb-diameter;\n border: variables.$thumb-diameter / 2 solid;\n border-radius: 50%;\n // Allow events to go through to the native control, necessary for IE and Edge.\n pointer-events: none;\n z-index: 1;\n }\n}\n\n// Checked state\n\n@mixin track-checked_ {\n opacity: .54;\n}\n\n@mixin thumb-underlay-checked_ {\n transform: translateX(variables.$thumb-active-margin);\n\n @include rtl-mixins.rtl {\n transform: translateX(-(variables.$thumb-active-margin));\n }\n}\n\n@mixin native-control-checked_ {\n // Translate the native control the opposite direction so that the tap target stays the same.\n transform: translateX(-(variables.$thumb-active-margin));\n\n @include rtl-mixins.rtl {\n transform: translateX(variables.$thumb-active-margin);\n }\n}\n\n// Disabled state\n\n@mixin disabled-base_ {\n opacity: .38;\n pointer-events: none;\n}\n\n@mixin thumb-disabled_ {\n border-width: 1px; // In high contrast mode, only show outline of knob.\n}\n\n@mixin native-control-disabled_ {\n cursor: default;\n pointer-events: none;\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/tab-indicator/mixins\" as tab-indicator-mixins;\n@use \"./variables\";\n\n// Public mixins\n\n@mixin core-styles($query: functions.all()) {\n @include without-ripple($query);\n @include ripple($query);\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles\n// from the other tah styles. It is recommended that most users use `mdc-tab-core-styles` instead.\n@mixin without-ripple($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n // postcss-bem-linter: define tab\n\n .mdc-tab {\n @include base_($query);\n }\n\n .mdc-tab--min-width {\n @include feature-targeting-mixins.targets($feat-structure) {\n flex: 0 1 auto;\n }\n }\n\n .mdc-tab__content {\n @include content_($query);\n }\n\n .mdc-tab__text-label {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: 150ms color linear;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: inline-block;\n // Setting line-height here overrides the line-height from the typography\n // mixin above. The line-height needs to be overridden so that the spacing\n // between the text label and the icon as well as the text label and the\n // bottom of the tab remain the same.\n line-height: 1;\n z-index: 2;\n }\n }\n\n .mdc-tab__icon {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: 150ms color linear;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: variables.$icon-size;\n height: variables.$icon-size;\n font-size: variables.$icon-size;\n z-index: 2;\n }\n }\n\n .mdc-tab--stacked {\n @include stacked_($query);\n }\n\n .mdc-tab--active {\n @include active_($query);\n }\n\n .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon + .mdc-tab__text-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(padding, left, 8px);\n }\n }\n\n // postcss-bem-linter: end\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles\n// from the other tah styles. It is recommended that most users use `mdc-tab-core-styles` instead.\n@mixin ripple($query: functions.all()) {\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-tab__ripple {\n @include ripple_($query);\n }\n}\n\n@mixin horizontal-padding($padding, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-right: $padding;\n padding-left: $padding;\n }\n}\n\n@mixin text-label-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n .mdc-tab__text-label {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin icon-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n .mdc-tab__icon {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n\n fill: currentColor;\n }\n }\n}\n\n@mixin states-color($color, $query: functions.all()) {\n .mdc-tab__ripple {\n @include ripple-mixins.states($color, $query: $query);\n }\n}\n\n@mixin ink-color($color, $query: functions.all()) {\n @include icon-color($color, $query);\n @include states-color($color, $query);\n @include text-label-color($color, $query);\n}\n\n@mixin active-text-label-color($color, $query: functions.all()) {\n &.mdc-tab--active {\n @include text-label-color($color, $query);\n }\n}\n\n@mixin active-icon-color($color, $query: functions.all()) {\n &.mdc-tab--active {\n @include icon-color($color, $query);\n }\n}\n\n@mixin active-states-color($color, $query: functions.all()) {\n &.mdc-tab--active {\n @include states-color($color, $query);\n }\n}\n\n@mixin parent-positioning($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative;\n }\n}\n\n@mixin fixed-width($width, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n flex: 0 1 $width;\n }\n}\n\n///\n/// Sets tab height\n///\n/// @param {Number} $height Height value in `px`.\n///\n@mixin height($height, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n}\n\n///\n/// Sets tab text transform\n///\n/// @param {String} $transform The text-transform property to apply.\n///\n@mixin text-transform($transform, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n text-transform: $transform;\n }\n}\n\n//\n// Private\n//\n\n@mixin base_($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include typography-mixins.typography(button, $query);\n @include text-label-color(variables.$text-label-color-default, $query);\n @include icon-color(variables.$icon-color-default, $query);\n @include horizontal-padding(variables.$horizontal-padding, $query);\n @include tab-indicator-mixins.surface($query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n flex: 1 0 auto;\n justify-content: center;\n box-sizing: border-box;\n // Explicitly setting margin to 0 is to override safari default margin for button elements.\n margin: 0;\n padding-top: 0;\n padding-bottom: 0;\n border: none;\n outline: none;\n background: none;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n -webkit-appearance: none;\n z-index: 1;\n\n // Firefox still draws a dotted border around focused buttons unless specifically overridden.\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n }\n}\n\n@mixin ripple_($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include ripple-mixins.surface($query);\n @include ripple-mixins.radius-bounded($query: $query);\n @include ripple-mixins.states($color: primary, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n}\n\n@mixin content_($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include tab-indicator-mixins.surface($query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n align-items: center;\n justify-content: center;\n height: inherit;\n pointer-events: none;\n }\n}\n\n@mixin stacked_($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n .mdc-tab__content {\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n .mdc-tab__text-label {\n padding-top: 6px;\n padding-bottom: 4px;\n }\n }\n}\n\n@mixin active_($query: functions.all()) {\n $feat-animation: functions.create-target($query, animation);\n\n @include text-label-color(variables.$text-label-color-active, $query);\n @include icon-color(variables.$icon-color-active, $query);\n\n .mdc-tab__text-label,\n .mdc-tab__icon {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-delay: 100ms;\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/animation/variables\";\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n\n@mixin core-styles($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n // postcss-bem-linter: define tab-indicator\n\n .mdc-tab-indicator {\n @include base_($query);\n }\n\n .mdc-tab-indicator__content {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform-origin: left;\n opacity: 0;\n }\n }\n\n .mdc-tab-indicator__content--underline {\n @include feature-targeting-mixins.targets($feat-structure) {\n align-self: flex-end;\n box-sizing: border-box;\n width: 100%;\n border-top-style: solid;\n }\n }\n\n .mdc-tab-indicator__content--icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n align-self: center;\n margin: 0 auto;\n }\n }\n\n .mdc-tab-indicator--active .mdc-tab-indicator__content {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n\n // Slide by default\n .mdc-tab-indicator .mdc-tab-indicator__content {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: 250ms transform variables.$standard-curve-timing-function;\n }\n }\n\n // --no-transition is applied in cases where styles need to be applied immediately to set up a transition\n .mdc-tab-indicator--no-transition .mdc-tab-indicator__content {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: none;\n }\n }\n\n .mdc-tab-indicator--fade .mdc-tab-indicator__content {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: 150ms opacity linear;\n }\n }\n\n // postcss-bem-linter: ignore\n .mdc-tab-indicator--active.mdc-tab-indicator--fade .mdc-tab-indicator__content {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-delay: 100ms;\n }\n }\n\n // postcss-bem-linter: end\n}\n\n@mixin surface($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n position: relative;\n }\n}\n\n@mixin underline-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n .mdc-tab-indicator__content--underline {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(border-color, $color);\n }\n }\n}\n\n@mixin underline-height($height, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n .mdc-tab-indicator__content--underline {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-top-width: $height;\n }\n }\n}\n\n@mixin underline-top-corner-radius($radius, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n .mdc-tab-indicator__content--underline {\n @include feature-targeting-mixins.targets($feat-structure) {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n }\n}\n\n@mixin icon-color($color, $query: functions.all()) {\n $feat-color: functions.create-target($query, color);\n\n .mdc-tab-indicator__content--icon {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin icon-height($height, $query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n\n .mdc-tab-indicator__content--icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n font-size: $height;\n }\n }\n}\n\n//\n// Private\n//\n\n@mixin base_($query) {\n $feat-structure: functions.create-target($query, structure);\n\n @include underline-color(primary, $query);\n @include icon-color(secondary, $query);\n @include underline-height(2px, $query);\n @include icon-height(34px, $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n justify-content: center;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1;\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/tab-scroller/mixins\" as tab-scroller-mixins;\n@use \"@material/tab/mixins\" as tab-mixins;\n@use \"./variables\";\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n // postcss-bem-linter: define tab-bar\n .mdc-tab-bar {\n @include width(100%, $query);\n }\n\n @include density(variables.$density-scale, $query: $query);\n @include stacked-density(variables.$stacked-density-scale, $query: $query);\n // postcss-bem-linter: end\n}\n\n@mixin width($width, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n width: $width;\n }\n}\n\n///\n/// Sets density scale to default tab bar variant. Use `mdc-tab-bar-stacked-density()` mixin for stacked tab bar\n/// variant.\n///\n/// @param {Number} $density-scale Density scale value. Supported density scales `-4`, `-3`, `-2`, `-1` and `0`.\n///\n@mixin density($density-scale, $query: feature-targeting-functions.all()) {\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n .mdc-tab {\n @include tab-mixins.height($height, $query: $query);\n }\n}\n\n///\n/// Sets density scale to stacked tab bar variant.\n///\n/// @param {Number} $density-scale Density scale value. Supported density scales `-4`, `-3`, `-2`, `-1` and `0`.\n///\n@mixin stacked-density($density-scale, $query: feature-targeting-functions.all()) {\n $height: density-functions.prop-value(\n $density-config: variables.$stacked-density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n .mdc-tab--stacked {\n @include tab-mixins.height($height, $query: $query);\n }\n}\n\n///\n/// Sets the CSS transition for the tab scrolling animation. This mixin is a proxy to `mdc-tab-scroller-transition`\n/// mixin.\n///\n/// @param {Number | String} $duration-ms - Duration (in ms) of the animation.\n/// @param {String} $timing-function - Optionally overrides the default animation timing function.\n///\n@mixin tab-scroller-transition(\n $duration-ms,\n $timing-function: animation-variables.$standard-curve-timing-function,\n $query: feature-targeting-functions.all()\n) {\n .mdc-tab-scroller {\n @include tab-scroller-mixins.transition($duration-ms, $timing-function: $timing-function, $query: $query);\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/tab/mixins\" as tab-mixins;\n@use \"@material/feature-targeting/functions\";\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"./variables\";\n\n///\n/// Sets the CSS transition for the tab scrolling animation.\n///\n/// @param {Number | String} $duration-ms - Duration (in ms) of the animation.\n/// @param {String} $timing-function - Optionally overrides the default animation timing function.\n///\n@mixin transition(\n $duration-ms,\n $timing-function: animation-variables.$standard-curve-timing-function,\n $query: functions.all()\n) {\n $feat-animation: functions.create-target($query, animation);\n\n &.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-content {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: $duration-ms transform $timing-function;\n }\n }\n}\n\n@mixin core-styles($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n // postcss-bem-linter: define tab-scroller\n .mdc-tab-scroller {\n @include transition(\n $duration-ms: variables.$transition-duration,\n $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow-y: hidden;\n }\n }\n\n // Selector for test element used to feature-detect horizontal scrollbar height\n .mdc-tab-scroller__test {\n @include feature-targeting-mixins.targets($feat-structure) {\n position: absolute;\n top: -9999px;\n width: 100px;\n height: 100px;\n overflow-x: scroll;\n }\n }\n\n .mdc-tab-scroller__scroll-area {\n @include feature-targeting-mixins.targets($feat-structure) {\n -webkit-overflow-scrolling: touch;\n display: flex;\n overflow-x: hidden;\n }\n }\n\n .mdc-tab-scroller__scroll-area,\n .mdc-tab-scroller__test {\n @include feature-targeting-mixins.targets($feat-structure) {\n &::-webkit-scrollbar {\n display: none;\n }\n }\n }\n\n // This modifier class will be added in JS after computing the OS scrollbar size in order to hide the scrollbar.\n .mdc-tab-scroller__scroll-area--scroll {\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow-x: scroll;\n }\n }\n\n .mdc-tab-scroller__scroll-content {\n @include scroll-content_($query);\n }\n\n .mdc-tab-scroller--align-start .mdc-tab-scroller__scroll-content {\n @include feature-targeting-mixins.targets($feat-structure) {\n justify-content: flex-start;\n }\n }\n\n .mdc-tab-scroller--align-end .mdc-tab-scroller__scroll-content {\n @include feature-targeting-mixins.targets($feat-structure) {\n justify-content: flex-end;\n }\n }\n\n .mdc-tab-scroller--align-center .mdc-tab-scroller__scroll-content {\n @include feature-targeting-mixins.targets($feat-structure) {\n justify-content: center;\n }\n }\n\n .mdc-tab-scroller--animating {\n .mdc-tab-scroller__scroll-area {\n @include feature-targeting-mixins.targets($feat-animation) {\n -webkit-overflow-scrolling: auto;\n }\n }\n }\n\n // postcss-bem-linter: end\n}\n\n//\n// Private\n//\n\n@mixin scroll-content_($query: functions.all()) {\n $feat-structure: functions.create-target($query, structure);\n $feat-animation: functions.create-target($query, animation);\n\n @include tab-mixins.parent-positioning($query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n flex: 1 0 auto;\n transform: none;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n will-change: transform;\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"../functions\";\n@use \"@material/theme/mixins\";\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n// Public mixins\n\n@mixin helper-text-core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n\n // postcss-bem-linter: define text-field-helper-text\n\n .mdc-text-field-helper-text {\n @include typography-mixins.typography(caption, $query: $query);\n @include typography-mixins.text-baseline($top: 16px, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n margin: 0;\n opacity: 0;\n will-change: opacity;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition(opacity);\n }\n }\n\n .mdc-text-field-helper-text--persistent {\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: none;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n will-change: initial;\n }\n }\n\n // postcss-bem-linter: end\n}\n\n///\n/// Customizes the color of the helper text following an enabled text-field.\n/// @param {Color} $color - The desired helper text color.\n///\n@mixin helper-text-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-text-field--disabled) {\n @include helper-text-color_($color, $query);\n }\n}\n\n///\n/// Customizes the color of the helper text following a disabled text-field.\n/// @param {Color} $color - The desired helper text color.\n///\n@mixin disabled-helper-text-color($color, $query: feature-targeting-functions.all()) {\n &.mdc-text-field--disabled {\n @include helper-text-color_($color, $query);\n }\n}\n\n@mixin helper-text-validation-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-text-field--disabled) {\n @include helper-text-validation-color_($color, $query);\n }\n}\n\n// Private mixins\n\n@mixin helper-text-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n + .mdc-text-field-helper-line .mdc-text-field-helper-text {\n @include feature-targeting-mixins.targets($feat-color) {\n @include mixins.prop(color, $color);\n }\n }\n}\n\n@mixin helper-text-validation-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &.mdc-text-field--invalid + .mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg {\n @include feature-targeting-mixins.targets($feat-color) {\n @include mixins.prop(color, $color);\n }\n }\n}\n","//\n// Copyright 2019 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n\n// Public mixins\n\n@mixin character-counter-core-styles($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // postcss-bem-linter: define text-field-character-counter\n\n .mdc-text-field-character-counter {\n @include typography-mixins.typography(caption, $query: $query);\n @include typography-mixins.text-baseline($top: 16px, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // Keep flex item align to trailing side on absence of helper text.\n @include rtl-mixins.reflexive-box(margin, left, auto);\n @include rtl-mixins.reflexive-box(padding, left, 16px);\n\n white-space: nowrap;\n }\n }\n\n // postcss-bem-linter: end\n}\n\n///\n/// Customizes the color of the character counter associated with an enabled text field.\n/// @param {Color} $color - The desired character counter color.\n///\n@mixin character-counter-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-text-field--disabled) {\n @include character-counter-color_($color, $query);\n }\n}\n\n///\n/// Customizes the color of the character counter associated with a disabled text field.\n/// @param {Color} $color - The desired character counter color.\n///\n@mixin disabled-character-counter-color($color, $query: feature-targeting-functions.all()) {\n &.mdc-text-field--disabled {\n @include character-counter-color_($color, $query);\n }\n}\n\n@mixin character-counter-position($xOffset, $yOffset, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-text-field-character-counter {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(right, $xOffset);\n position: absolute;\n bottom: $yOffset;\n }\n }\n}\n\n\n// Private mixins\n\n@mixin character-counter-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n // Character counter is placed inside mdc-textfield element (for textarea variant) or\n // inside helper line which is sibling to mdc-textfield.\n .mdc-text-field-character-counter,\n + .mdc-text-field-helper-line .mdc-text-field-character-counter {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"./variables\";\n\n// Public mixins\n\n@mixin icon-core-styles($query: feature-targeting-functions.all()) {\n .mdc-text-field__icon {\n @include icon_($query: $query);\n }\n\n .mdc-text-field__icon--leading {\n @include leading-icon_($query: $query);\n }\n\n .mdc-text-field__icon--trailing {\n @include trailing-icon_($query: $query);\n }\n}\n\n///\n/// Customizes the color for the leading icon in an enabled text-field.\n/// @param {Color} $color - The desired icon color.\n///\n@mixin leading-icon-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-text-field--disabled) {\n @include leading-icon-color_($color, $query);\n }\n}\n\n///\n/// Customizes the color for the trailing icon in an enabled text-field.\n/// @param {Color} $color - The desired icon color.\n///\n@mixin trailing-icon-color($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-text-field--disabled) {\n @include trailing-icon-color_($color, $query);\n }\n}\n\n///\n/// Customizes the color for the leading/trailing icons in a disabled text-field.\n/// @param {Color} $color - The desired icon color.\n///\n@mixin disabled-icon-color($color, $query: feature-targeting-functions.all()) {\n &.mdc-text-field--disabled {\n @include leading-icon-color_($color, $query);\n @include trailing-icon-color_($color, $query);\n }\n}\n\n/// Sets the size of the leading and trailing icons.\n///\n/// @param {Number} $size - the size of the icon in px\n@mixin size($size, $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n .mdc-text-field__icon {\n font-size: $size;\n }\n }\n}\n\n// Private mixins\n\n@mixin icon_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n align-self: center;\n cursor: pointer;\n }\n\n &:not([tabindex]),\n &[tabindex=\"-1\"] {\n @include feature-targeting-mixins.targets($feat-color) {\n cursor: default;\n pointer-events: none;\n }\n }\n}\n\n@mixin leading-icon_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, variables.$leading-icon-padding-left, variables.$leading-icon-padding-right);\n }\n}\n\n@mixin trailing-icon_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(margin, variables.$trailing-icon-padding-left, variables.$trailing-icon-padding-right);\n }\n}\n\n@mixin leading-icon-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-text-field__icon--leading {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin trailing-icon-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-text-field__icon--trailing {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"@material/density/functions\" as density-functions;\n@use \"@material/floating-label/mixins\" as floating-label-mixins;\n@use \"@material/floating-label/variables\" as floating-label-variables;\n@use \"@material/line-ripple/mixins\" as line-ripple-mixins;\n@use \"@material/notched-outline/mixins\" as notched-outline-mixins;\n@use \"@material/notched-outline/variables\" as notched-outline-variables;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/ripple/functions\" as ripple-functions;\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/shape/functions\" as shape-functions;\n@use \"@material/feature-targeting/functions\" as feature-targeting-functions;\n@use \"@material/feature-targeting/mixins\" as feature-targeting-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"helper-text/mixins\" as helper-text-mixins;\n@use \"character-counter/mixins\" as character-counter-mixins;\n@use \"icon/mixins\" as icon-mixins;\n@use \"icon/variables\" as icon-variables;\n@use \"./variables\";\n@use \"./functions\";\n@use \"@material/rtl/mixins\" as rtl-mixins;\n\n@mixin core-styles($query: feature-targeting-functions.all()) {\n @include ripple($query);\n @include without-ripple($query);\n}\n\n@mixin without-ripple($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Baseline\n // postcss-bem-linter: define text-field\n .mdc-text-field {\n @include _base($query);\n }\n\n .mdc-text-field__input {\n @include _input($query);\n\n @include placeholder-selector_ {\n @include _input-placeholder($query);\n }\n\n // Always show placeholder for text fields that has no\n // label and show only on focused state when label is present.\n .mdc-text-field--fullwidth &,\n .mdc-text-field--no-label &,\n .mdc-text-field--focused & {\n @include placeholder-selector_ {\n @include _input-placeholder-visible($query);\n }\n }\n }\n\n .mdc-text-field__affix {\n @include _affix($query: $query);\n\n .mdc-text-field--label-floating &,\n .mdc-text-field--no-label & {\n @include _affix-visible($query: $query);\n }\n }\n\n .mdc-text-field__affix--prefix {\n @include _prefix($query: $query);\n\n .mdc-text-field--end-aligned & {\n @include _prefix-end-aligned($query: $query);\n }\n }\n\n .mdc-text-field__affix--suffix {\n @include _suffix($query: $query);\n\n .mdc-text-field--end-aligned & {\n @include _suffix-end-aligned($query: $query);\n }\n }\n\n // stylelint-disable-next-line plugin/selector-bem-pattern\n // Move label when text-field gets auto-filled in Chrome.\n .mdc-text-field__input:-webkit-autofill + .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: translateY(-50%) scale(.75);\n cursor: auto;\n }\n }\n\n // Variants\n\n .mdc-text-field--filled {\n @include _filled($query);\n\n &.mdc-text-field--no-label {\n @include _filled-no-label($query);\n }\n }\n\n .mdc-text-field--outlined {\n @include outlined_($query);\n }\n\n // Other Variations\n\n .mdc-text-field--textarea {\n @include textarea_($query);\n }\n\n .mdc-text-field--fullwidth {\n @include fullwidth_($query);\n }\n\n .mdc-text-field--with-leading-icon {\n &.mdc-text-field--filled {\n @include with-leading-icon_($query);\n }\n\n &.mdc-text-field--outlined {\n @include outlined-with-leading-icon_($query);\n }\n }\n\n .mdc-text-field--with-trailing-icon {\n &.mdc-text-field--filled {\n @include _with-trailing-icon($query);\n }\n\n &.mdc-text-field--outlined {\n @include _outlined-with-trailing-icon($query);\n }\n }\n\n .mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon {\n &.mdc-text-field--filled {\n @include _with-leading-and-trailing-icon($query);\n }\n }\n\n @include required-label-asterisk_ {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-left: 1px;\n content: \"*\";\n }\n }\n\n // postcss-bem-linter: define text-field-helper-text\n // stylelint-disable plugin/selector-bem-pattern\n .mdc-text-field-helper-line {\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n justify-content: space-between;\n box-sizing: border-box;\n }\n\n .mdc-text-field + & {\n @include feature-targeting-mixins.targets($feat-structure) {\n padding-right: variables.$helper-line-padding;\n padding-left: variables.$helper-line-padding;\n }\n }\n }\n // stylelint-enable plugin/selector-bem-pattern\n // postcss-bem-linter: end\n\n // mdc-form-field tweaks to align text field label correctly\n // stylelint-disable selector-max-type\n .mdc-form-field > .mdc-text-field + label {\n @include feature-targeting-mixins.targets($feat-structure) {\n align-self: flex-start;\n }\n }\n // stylelint-enable selector-max-type\n\n // States\n .mdc-text-field--focused {\n @include focused_($query);\n }\n\n .mdc-text-field--invalid {\n @include invalid_($query);\n }\n\n .mdc-text-field--disabled {\n @include disabled_($query);\n\n &.mdc-text-field--filled {\n @include _disabled-filled($query);\n }\n }\n\n .mdc-text-field--end-aligned {\n @include end-aligned_($query);\n }\n\n .mdc-text-field--ltr-text {\n @include _ltr-text($query);\n\n &.mdc-text-field--end-aligned {\n @include _ltr-text-end-aligned($query);\n }\n }\n}\n\n// This API is intended for use by frameworks that may want to separate the ripple-related styles\n// from the other text field styles. It is recommended that most users use `mdc-text-field-core-styles` instead.\n@mixin ripple($query: feature-targeting-functions.all()) {\n @include ripple-mixins.common($query); // COPYBARA_COMMENT_THIS_LINE\n\n .mdc-text-field--filled {\n @include ripple-mixins.surface($query: $query, $ripple-target: variables.$ripple-target);\n @include ripple-mixins.radius-bounded($query: $query, $ripple-target: variables.$ripple-target);\n }\n\n #{variables.$ripple-target} {\n @include ripple-mixins.target-common($query: $query);\n }\n}\n\n///\n/// Sets density scale for default text field variant.\n///\n/// @param {Number | String} $density-scale - Density scale value for component. Supported density scale values `-4`,\n/// `-3`, `-2`, `-1`, `0`. Default is `0`.\n/// @param {Number} $minimum-height-for-filled-label Sets the minimum height for\n/// filled textfields at which to allow floating labels.\n///\n@mixin density($density-scale, $minimum-height-for-filled-label: variables.$minimum-height-for-filled-label, $query: feature-targeting-functions.all()) {\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n @include height($height, $minimum-height-for-filled-label: $minimum-height-for-filled-label, $query: $query);\n // TODO(b/151839219): resize icons and adjust label position\n // @if $density-scale < 0 {\n // @include icon-mixins.size(icon-variables.$dense-icon-size);\n // }\n}\n\n///\n/// Sets density scale for outlined text field (Excluding outlined text field with leading icon).\n///\n/// @param {Number | String} $density-scale - Density scale value for component. Supported density scale values `-4`,\n/// `-3`, `-2`, `-1`, `0`. Default is `0`.\n///\n@mixin outlined-density($density-scale, $query: feature-targeting-functions.all()) {\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n @include outlined-height($height, $query: $query);\n // TODO(b/151839219): resize icons and adjust label position\n // @if $density-scale < 0 {\n // @include icon-mixins.size(icon-variables.$dense-icon-size);\n // }\n}\n\n///\n/// Sets density scale for outlined text field with leading icon.\n///\n/// @param {Number | String} $density-scale - Density scale value for component. Supported density scale values `-4`,\n/// `-3`, `-2`, `-1`, `0`. Default is `0`.\n///\n@mixin outlined-with-leading-icon-density($density-scale, $query: feature-targeting-functions.all()) {\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n @include outlined-with-leading-icon-height($height, $query: $query);\n // TODO(b/151839219): resize icons and adjust label position\n // @if $density-scale < 0 {\n // @include icon-mixins.size(icon-variables.$dense-icon-size);\n // }\n}\n\n///\n/// Sets height of default text field variant.\n///\n/// @param {Number} $height\n/// @param {Number} $minimum-height-for-filled-label Sets the minimum height for\n/// filled textfields at which to allow floating labels.\n/// @access public\n///\n@mixin height(\n $height,\n $minimum-height-for-filled-label: variables.$minimum-height-for-filled-label,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n\n @if $height < $minimum-height-for-filled-label {\n @include _filled-no-label($query: $query);\n }\n}\n\n///\n/// Sets height of outlined text field variant (Excluding outlined text field with leading icon).\n///\n/// @param {Number} $height\n/// @param {String} $keyframe-suffix - Optional suffix to use for generated\n/// floating label keyframes\n/// @access public\n///\n@mixin outlined-height(\n $height,\n $keyframe-suffix: text-field-outlined-#{$height},\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $positionY: variables.get-outlined-label-position-y($height);\n\n // Floating label position\n @include notched-outline-mixins.floating-label-float-position-absolute($positionY, $query: $query);\n\n // Floating label animation\n @include floating-label-mixins.shake-animation($keyframe-suffix, $query: $query);\n @at-root {\n @include floating-label-mixins.shake-keyframes($keyframe-suffix, $positionY, $query: $query);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n}\n\n///\n/// Sets height of outlined text field with leading icon variant.\n///\n/// @param {Number} $height\n/// @param {String} $keyframe-suffix - Optional suffix to use for generated\n/// floating label keyframes\n/// @access public\n///\n@mixin outlined-with-leading-icon-height(\n $height,\n $keyframe-suffix: null,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // This extra specificity is needed because textfield applies the below mixin\n // already to two selectors (outlined + with-leading-icon). To override\n // them with a new label position and animation, another selector is needed.\n &.mdc-text-field--outlined {\n @include _outlined-with-leading-icon-floating-label-position-animation($height, $keyframe-suffix, $query);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n height: $height;\n }\n}\n\n// Mixin that sets the floating label position and animations for a given height.\n// This mixin is separate to allow outlined-with-leading-icon-height() to\n// provide greater specificity over the default mixin that adds styles for\n// outlined with leading icons.\n@mixin _outlined-with-leading-icon-floating-label-position-animation(\n $height,\n $keyframe-suffix: text-field-outlined-with-leading-icon-#{$height},\n $query: feature-targeting-functions.all()\n) {\n $positionY: variables.get-outlined-label-position-y($height);\n\n // Floating label position\n @include notched-outline-mixins.floating-label-float-position-absolute(\n $positionY,\n variables.$outlined-with-leading-icon-label-position-x,\n $query: $query\n );\n\n // Floating label animation\n @include floating-label-mixins.shake-animation($keyframe-suffix, $query: $query);\n @at-root {\n @include floating-label-mixins.shake-keyframes(\n $keyframe-suffix,\n $positionY,\n variables.$outlined-with-leading-icon-label-position-x,\n $query: $query\n );\n }\n\n $keyframe-suffix-rtl: #{$keyframe-suffix}-rtl;\n @include rtl-mixins.rtl {\n @include floating-label-mixins.shake-animation($keyframe-suffix, $query: $query);\n }\n @at-root {\n @include floating-label-mixins.shake-keyframes(\n $keyframe-suffix-rtl,\n $positionY,\n -(variables.$outlined-with-leading-icon-label-position-x),\n $query: $query\n );\n }\n}\n\n///\n/// Sets shape radius of default text field variant.\n///\n/// @param {Number} $radius Shape radius value in `px` or in percentage.\n/// @param {Number} $text-field-height Height of default text field variant. Required only when `$radius` is in\n/// percentage unit and if text field has custom height. Defaults to `variables.$height`.\n/// @param {Boolean} $rtl-reflexive Set to true to flip shape radius in RTL context. Defaults to `false`.\n///\n@mixin shape-radius(\n $radius,\n $density-scale: variables.$density-scale,\n $rtl-reflexive: false,\n $query: feature-targeting-functions.all()) {\n @if list.length($radius) > 2 {\n @error \"Invalid radius: '#{$radius}' component doesn't allow customizing all corners\";\n }\n\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n $masked-radius: shape-functions.mask-radius($radius, 1 1 0 0);\n\n @include shape-mixins.radius(\n shape-functions.resolve-percentage-radius($height, $masked-radius),\n $rtl-reflexive,\n $query: $query\n );\n}\n\n@mixin textarea-shape-radius($radius, $rtl-reflexive: false, $query: feature-targeting-functions.all()) {\n @include notched-outline-mixins.shape-radius($radius, $rtl-reflexive, $query: $query);\n}\n\n///\n/// Customizes the color of the text entered into an enabled text field.\n/// @param {Color} $color - The desired input text color.\n///\n@mixin ink-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the color of the entered text in a disabled text field.\n/// @param {Color} $color - The desired input text color.\n///\n@mixin disabled-ink-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the color of the placeholder in an enabled text field.\n/// @param {Color} $color - The desired placeholder text color.\n///\n@mixin placeholder-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include placeholder-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the color of the placeholder in a disabled text field.\n/// @param {Color} $color - The desired placeholder text color.\n///\n@mixin disabled-placeholder-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include placeholder-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the background color of the text field or textarea when enabled.\n/// @param {Color} $color - The desired background color.\n///\n@mixin fill-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include fill-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the background color of the text field or textarea when disabled.\n/// @param {Color} $color - The desired background color.\n///\n@mixin disabled-fill-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include fill-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the text field bottom line color for the filled variant.\n/// @param {Color} $color - The desired bottom line color.\n///\n@mixin bottom-line-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include bottom-line-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the disabled text field bottom line color for the filled variant.\n/// @param {Color} $color - The desired bottom line color.\n///\n@mixin disabled-bottom-line-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include bottom-line-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the hover text field bottom line color for the filled variant.\n/// @param {Color} $color - The desired bottom line color.\n///\n@mixin hover-bottom-line-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include hover-bottom-line-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the color of the default line ripple of the text field.\n/// @param {Color} $color - The desired line ripple color.\n///\n@mixin line-ripple-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include line-ripple-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the text color of the label in an enabled text field.\n/// @param {Color} $color - The desired label text color.\n///\n@mixin label-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include label-ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the text color of the label in a disabled text field.\n/// @param {Color} $color - The desired label text color.\n///\n@mixin disabled-label-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include label-ink-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the border color of the outlined text field or textarea.\n/// @param {Color} $color - The desired outline border color.\n///\n@mixin outline-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include notched-outline-mixins.color($color, $query: $query);\n }\n}\n\n///\n/// Customizes the outline border color when the text field or textarea is hovered.\n/// @param {Color} $color - The desired outline border color.\n///\n@mixin hover-outline-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include hover-outline-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the outline border color when the text field or textarea is focused.\n/// @param {Color} $color - The desired outline border color.\n///\n@mixin focused-outline-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include focused-outline-color_($color, $query: $query);\n }\n}\n\n///\n/// Customizes the outline border color when the text field or textarea is disabled.\n/// @param {Color} $color - The desired outline border color.\n///\n@mixin disabled-outline-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include notched-outline-mixins.color($color, $query: $query);\n }\n}\n\n///\n/// Customizes the caret color of the text field or textarea.\n/// @param {Color} $color - The desired caret color.\n///\n@mixin caret-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-text-field__input {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(caret-color, $color);\n }\n }\n}\n\n///\n/// Customizes the color of the prefix text for an enabled text field.\n/// @param {Color} $color - The desired prefix text color.\n///\n@mixin prefix-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include _prefix-color($color, $query: $query);\n }\n}\n\n///\n/// Customizes the color of the prefix text for a disabled text field.\n/// @param {Color} $color - The desired prefix text color.\n///\n@mixin disabled-prefix-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include _prefix-color($color, $query: $query);\n }\n}\n\n///\n/// Customizes the color of the suffix text for an enabled text field.\n/// @param {Color} $color - The desired suffix text color.\n///\n@mixin suffix-color($color, $query: feature-targeting-functions.all()) {\n @include if-enabled_ {\n @include _suffix-color($color, $query: $query);\n }\n}\n\n///\n/// Customizes the color of the suffix text for a disabled text field.\n/// @param {Color} $color - The desired suffix text color.\n///\n@mixin disabled-suffix-color($color, $query: feature-targeting-functions.all()) {\n @include if-disabled_ {\n @include _suffix-color($color, $query: $query);\n }\n}\n\n///\n/// Sets shape radius of outlined text field variant.\n///\n/// @param {Number} $radius Shape radius value in `px` or in percentage.\n/// @param {Number} $text-field-height Height of outlined text field variant. Required only when `$radius` is in\n/// percentage unit and if text field has custom height. Defaults to `variables.$height`.\n/// @param {Boolean} $rtl-reflexive Set to true to flip shape radius in RTL context. Defaults to `false`.\n///\n@mixin outline-shape-radius(\n $radius,\n $density-scale: variables.$density-scale,\n $rtl-reflexive: false,\n $query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $height: density-functions.prop-value(\n $density-config: variables.$density-config,\n $density-scale: $density-scale,\n $property-name: height,\n );\n\n $resolved-radius: list.nth(shape-functions.resolve-percentage-radius($height, shape-functions.prop-value($radius)), 1);\n\n @if (list.length(shape-functions.prop-value($radius)) > 1) {\n // stylelint-disable max-line-length\n @warn \"mdc-text-field-outline-shape-radius only supports a single radius; see https://github.com/material-components/material-components-web/issues/4140\";\n // stylelint-enable\n }\n\n .mdc-notched-outline {\n @include notched-outline-mixins.shape-radius($resolved-radius, $rtl-reflexive, $query: $query);\n }\n\n @if ($resolved-radius > notched-outline-variables.$leading-width) {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, $resolved-radius + notched-outline-variables.$padding, 0);\n }\n\n + .mdc-text-field-helper-line {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-property(padding, $resolved-radius + notched-outline-variables.$padding, $resolved-radius);\n }\n }\n }\n}\n\n///\n/// Sets the CSS transition for the floating label's \"float\" animation.\n///\n/// @param {Number} $duration-ms - Duration (in ms) of the animation.\n/// @param {String} $timing-function - Optionally overrides the default animation timing function.\n///\n@mixin floating-label-float-transition($duration-ms, $timing-function: null, $query: feature-targeting-functions.all()) {\n .mdc-floating-label {\n @include floating-label-mixins.float-transition($duration-ms, $timing-function, $query: $query);\n }\n}\n\n// Private mixins\n\n// Base shared styles\n@mixin _base($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Shape\n @include shape-radius(small, $query: $query);\n\n // Colors\n @include label-color(variables.$label, $query: $query);\n @include ink-color(variables.$ink-color, $query: $query);\n @include placeholder-color(variables.$placeholder-ink-color, $query: $query);\n @include caret-color(primary, $query: $query);\n @include helper-text-mixins.helper-text-color(variables.$helper-text-color, $query: $query);\n @include character-counter-mixins.character-counter-color(variables.$helper-text-color, $query: $query);\n @include icon-mixins.leading-icon-color(variables.$icon-color, $query: $query);\n @include icon-mixins.trailing-icon-color(variables.$icon-color, $query: $query);\n @include prefix-color(variables.$affix-color, $query: $query);\n @include suffix-color(variables.$affix-color, $query: $query);\n\n // Floating Label\n @include floating-label_($query);\n\n // Structural\n @include padding-horizontal_(\n variables.$padding-horizontal,\n 0,\n 0,\n $query: $query\n );\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // display and align-items are necessary to make the text field participate\n // in baseline alignment, even though some variants are \"centered\". Those\n // variants should use the _baseline-center-aligned() mixin\n display: inline-flex;\n align-items: baseline;\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n /* @alternate */\n will-change: opacity, transform, color;\n }\n}\n\n// This mixin adds styles to visually center the text within the text field.\n// Sibling text will align to the baseline and appear centered next to the\n// text field.\n@mixin _baseline-center-aligned($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n // In order for a flexbox container to participate in baseline alignment,\n // it follows these rules to determine where its baseline is:\n // https://www.w3.org/TR/css-flexbox-1/#flex-baselines\n //\n // In order to avoid leading icons \"controlling\" the baseline (since they\n // are the first child), flexbox will generate a baseline from any child\n // flex items that participate in baseline alignment.\n //\n // Icons are set to \"align-self: center\", while all other children are\n // aligned to baseline. The next problem is deciding which child is\n // used to determine the baseline.\n //\n // According to spec, the item with the largest distance between its\n // baseline and the edge of the cross axis is placed flush with that edge,\n // making it the baseline of the container.\n // https://www.w3.org/TR/css-flexbox-1/#baseline-participation\n //\n // For the filled variant, the pseudo ::before strut is the \"largest\"\n // child since the input has a height of 28px and the strut is 40px. We\n // can emulate center alignment and force the baseline to use the input\n // text by making the input the full height of the container and removing\n // the baseline strut.\n\n // IE11 does not respect this, and makes the leading icon (if present) the\n // baseline. This is a gap with IE11 that we have accepted.\n .mdc-text-field__input {\n height: 100%;\n }\n }\n}\n\n/// Adds horizontal padding to the text field\n///\n/// @param {Number} $padding - left and right-side padding\n/// @param {Number} $left-with-leading-icon - left-side padding when a leading\n/// icon is present\n/// @param {Number} $right-with-trailing-icon - right-side padding when a\n/// trailing icon is present\n@mixin padding-horizontal_(\n $padding,\n $left-with-leading-icon,\n $right-with-trailing-icon,\n $query: feature-targeting-functions.all()\n) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0 $padding;\n\n &.mdc-text-field--with-leading-icon {\n @include rtl-mixins.reflexive-property(\n padding,\n $left-with-leading-icon,\n $padding\n );\n }\n\n &.mdc-text-field--with-trailing-icon {\n @include rtl-mixins.reflexive-property(\n padding,\n $padding,\n $right-with-trailing-icon\n );\n }\n\n &.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon {\n @include rtl-mixins.reflexive-property(\n padding,\n $left-with-leading-icon,\n $right-with-trailing-icon\n );\n }\n }\n}\n\n@mixin floating-label_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n top: 50%;\n transform: translateY(-50%);\n pointer-events: none;\n }\n }\n}\n\n// Filled\n\n@mixin _filled($query: feature-targeting-functions.all()) {\n // Text Field intentionally omits press ripple, so each state needs to be specified individually.\n @include ripple-mixins.states-base-color(variables.$ink-color, $query: $query, $ripple-target: variables.$ripple-target);\n @include ripple-mixins.states-hover-opacity(ripple-functions.states-opacity(variables.$ink-color, hover), $query: $query, $ripple-target: variables.$ripple-target);\n @include ripple-mixins.states-focus-opacity(ripple-functions.states-opacity(variables.$ink-color, focus), $query: $query, $ripple-target: variables.$ripple-target);\n\n @include height(variables.$height, $query: $query);\n @include typography-mixins.baseline-top(variables.$filled-baseline-top, $query: $query);\n @include fill-color(variables.$background, $query: $query);\n @include bottom-line-color(variables.$bottom-line-idle, $query: $query);\n @include hover-bottom-line-color(variables.$bottom-line-hover, $query: $query);\n @include line-ripple-color_(primary, $query: $query);\n @include _filled-floating-label($query);\n}\n\n@mixin _filled-floating-label($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, variables.$label-offset);\n }\n }\n\n @include floating-label-mixins.float-position(variables.$label-position-y, $query: $query);\n}\n\n// Filled variant with no label. This variant centers the text elements and\n// hides the label and is used with there is explicitly no label provided or\n// when the height of the text field is too small for a label to be allowed.\n@mixin _filled-no-label($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include _baseline-center-aligned($query);\n @include feature-targeting-mixins.targets($feat-structure) {\n .mdc-floating-label {\n display: none;\n }\n\n &::before {\n // Remove baseline-top strut\n display: none;\n }\n }\n}\n\n// Outlined\n\n@mixin outlined_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include outlined-height(\n $height: variables.$height,\n $keyframe-suffix: text-field-outlined,\n $query: $query\n );\n @include _baseline-center-aligned($query: $query);\n @include outline-color(variables.$outlined-idle-border, $query: $query);\n @include hover-outline-color(variables.$outlined-hover-border, $query: $query);\n @include focused-outline-color(primary, $query: $query);\n @include outline-shape-radius(small, $query: $query);\n @include notched-outline-mixins.notch-offset(notched-outline-variables.$border-width, $query: $query);\n @include ripple-mixins.states-base-color(transparent, $query: $query, $ripple-target: variables.$ripple-target);\n @include _outlined-floating-label($query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n overflow: visible;\n }\n\n .mdc-text-field__input {\n @include feature-targeting-mixins.targets($feat-structure) {\n // TODO(b/154349735): Investigate the neccessity of these styles\n display: flex;\n border: none !important; // FF adds unwanted border in HC mode on windows.\n background-color: transparent;\n z-index: 1;\n }\n }\n\n .mdc-text-field__icon {\n @include feature-targeting-mixins.targets($feat-structure) {\n z-index: 2;\n }\n }\n\n &.mdc-text-field--focused {\n @include notched-outline-mixins.notch-offset(variables.$outlined-stroke-width, $query: $query);\n }\n}\n\n@mixin _outlined-floating-label($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, notched-outline-variables.$padding);\n }\n }\n}\n\n// States\n\n@mixin disabled_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include ink-color_(variables.$disabled-ink-color, $query: $query);\n @include placeholder-color_(variables.$disabled-placeholder-ink-color, $query: $query);\n @include label-ink-color_(variables.$disabled-label-color, $query: $query);\n @include helper-text-mixins.helper-text-color_(variables.$disabled-helper-text-color, $query: $query);\n @include character-counter-mixins.character-counter-color_(variables.$disabled-helper-text-color, $query: $query);\n @include icon-mixins.leading-icon-color_(variables.$disabled-icon, $query: $query);\n @include icon-mixins.trailing-icon-color_(variables.$disabled-icon, $query: $query);\n @include _prefix-color(variables.$disabled-affix-color, $query: $query);\n @include _suffix-color(variables.$disabled-affix-color, $query: $query);\n\n // Mixins that are ok to include since they target variant-specific elements\n @include bottom-line-color_(variables.$disabled-border, $query: $query);\n @include notched-outline-mixins.color(variables.$outlined-disabled-border, $query: $query);\n\n @media screen and (-ms-high-contrast: active) {\n @include placeholder-color_(GrayText, $query: $query);\n @include label-ink-color_(GrayText, $query: $query);\n @include helper-text-mixins.helper-text-color_(GrayText, $query: $query);\n @include character-counter-mixins.character-counter-color_(GrayText, $query: $query);\n @include icon-mixins.leading-icon-color_(GrayText, $query: $query);\n @include icon-mixins.trailing-icon-color_(GrayText, $query: $query);\n @include _prefix-color(GrayText, $query: $query);\n @include _suffix-color(GrayText, $query: $query);\n\n // Mixins that are ok to include since they target variant-specific elements\n @include bottom-line-color_(GrayText, $query: $query);\n @include notched-outline-mixins.color(GrayText, $query: $query);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n pointer-events: none;\n }\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n cursor: default;\n }\n }\n}\n\n@mixin _disabled-filled($query: feature-targeting-functions.all()) {\n @include fill-color_(variables.$disabled-background, $query: $query);\n}\n\n@mixin invalid_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include hover-bottom-line-color(variables.$error, $query: $query);\n @include line-ripple-color(variables.$error, $query: $query);\n @include label-color(variables.$error, $query: $query);\n @include helper-text-mixins.helper-text-validation-color(variables.$error, $query: $query);\n @include caret-color(variables.$error, $query: $query);\n @include icon-mixins.trailing-icon-color(variables.$error, $query: $query);\n\n // Mixins that are ok to include since they target variant-specific elements\n @include bottom-line-color(variables.$error, $query: $query);\n @include outline-color(variables.$error, $query: $query);\n @include hover-outline-color(variables.$error, $query: $query);\n @include focused-outline-color(variables.$error, $query: $query);\n\n + .mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n}\n\n@mixin focused_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include label-color(variables.$focused-label-color, $query: $query);\n\n // Mixins that are ok to include since they target variant-specific elements\n @include notched-outline-mixins.stroke-width(variables.$outlined-stroke-width, $query: $query);\n\n + .mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg) {\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n }\n}\n\n// Icons\n\n@mixin with-leading-icon_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n $icon-padding: icon-variables.$leading-icon-padding-left + icon-variables.$icon-size + icon-variables.$leading-icon-padding-right;\n\n .mdc-floating-label {\n @include _truncate-floating-label-max-width($icon-padding, $query: $query);\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, $icon-padding);\n }\n }\n\n $truncation: $icon-padding + variables.$padding-horizontal;\n\n .mdc-floating-label--float-above {\n @include _truncate-floating-label-floated-max-width($truncation, $query: $query);\n }\n}\n\n@mixin _with-trailing-icon($query: feature-targeting-functions.all()) {\n $truncation: icon-variables.$trailing-icon-padding-left + icon-variables.$icon-size + icon-variables.$trailing-icon-padding-right + variables.$label-offset;\n\n .mdc-floating-label {\n @include _truncate-floating-label-max-width($truncation, $query: $query);\n }\n\n .mdc-floating-label--float-above {\n @include _truncate-floating-label-floated-max-width($truncation, $query: $query);\n }\n}\n\n@mixin _with-leading-and-trailing-icon($query: feature-targeting-functions.all()) {\n $leading-icon: icon-variables.$leading-icon-padding-left + icon-variables.$icon-size + icon-variables.$leading-icon-padding-right;\n $trailing-icon: icon-variables.$trailing-icon-padding-left + icon-variables.$icon-size + icon-variables.$trailing-icon-padding-right;\n $truncation: $leading-icon + $trailing-icon;\n\n .mdc-floating-label {\n @include _truncate-floating-label-max-width($truncation, $query: $query);\n }\n\n .mdc-floating-label--float-above {\n @include _truncate-floating-label-floated-max-width($truncation, $query: $query);\n }\n}\n\n@mixin outlined-with-leading-icon_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Resting label position\n $icon-padding: icon-variables.$leading-icon-padding-left + icon-variables.$icon-size + icon-variables.$leading-icon-padding-right;\n $left-spacing: $icon-padding - notched-outline-variables.$leading-width;\n\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, $left-spacing);\n }\n }\n\n // Notch width\n $notch-truncation: $icon-padding + notched-outline-variables.$leading-width;\n @include _truncate-notched-outline-max-width($notch-truncation, $query: $query);\n\n // Floating label position and animation\n @include _outlined-with-leading-icon-floating-label-position-animation(\n $height: variables.$height,\n $keyframe-suffix: text-field-outlined-leading-icon,\n $query: $query\n );\n}\n\n///\n/// Applied to the outlined text field with a trailing icon\n///\n@mixin _outlined-with-trailing-icon($query: feature-targeting-functions.all()) {\n // Resting label position\n $icon-padding: icon-variables.$trailing-icon-padding-left + icon-variables.$icon-size + icon-variables.$trailing-icon-padding-right;\n // Notch width\n $notch-truncation: $icon-padding + notched-outline-variables.$leading-width;\n\n @include _truncate-notched-outline-max-width($notch-truncation, $query: $query);\n}\n\n///\n/// Truncates the max-width of the notched outline by the given amount\n///\n/// @param {Number} $truncation - Amount to truncate the notched outline max-width\n///\n@mixin _truncate-notched-outline-max-width($truncation, $query: feature-targeting-functions.all()) {\n @include notched-outline-mixins.notch-max-width(calc(100% - #{$truncation}), $query: $query);\n}\n\n///\n/// Truncates the max-width of the floating label by the given amount\n///\n/// @param {Number} $truncation - Amount to truncate the floating label max-width\n///\n@mixin _truncate-floating-label-max-width($truncation, $query: feature-targeting-functions.all()) {\n @include floating-label-mixins.max-width(calc(100% - #{$truncation}), $query: $query);\n}\n\n///\n/// Truncates the max-width of the floating label by the given amount while scaling by the given scale value\n///\n/// @param {Number} $truncation - Amount to truncate the floating label max-width\n///\n@mixin _truncate-floating-label-floated-max-width($truncation, $query: feature-targeting-functions.all()) {\n $scale: floating-label-variables.$float-scale;\n @include floating-label-mixins.max-width(calc(100% / #{$scale} - #{$truncation} / #{$scale}), $query: $query);\n}\n\n// Full Width\n@mixin fullwidth_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include bottom-line-color(variables.$bottom-line-idle, $query: $query);\n @include disabled-bottom-line-color(variables.$bottom-line-idle, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n padding: 0;\n width: 100%;\n }\n\n &:not(.mdc-text-field--textarea) {\n @include _filled-no-label($query);\n @include ripple-mixins.states-base-color(transparent, $query: $query, $ripple-target: variables.$ripple-target);\n @include fill-color(transparent, $query: $query);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n display: flex;\n }\n }\n\n &.mdc-text-field--textarea .mdc-text-field__input {\n @include feature-targeting-mixins.targets($feat-structure) {\n resize: vertical;\n }\n }\n}\n\n// Textarea\n\n@mixin textarea_($query: feature-targeting-functions.all()) {\n // Note: The refactor to add the filled textarea style will result in a lot of the specificity issues that the\n // textarea has being resolved by using the same --outlined variant class as the text field.\n @include outline-color(variables.$outlined-idle-border, $query: $query);\n @include hover-outline-color(variables.$outlined-hover-border, $query: $query);\n @include focused-outline-color(primary, $query: $query);\n @include outline-shape-radius(small, $query: $query);\n @include ripple-mixins.states-base-color(transparent, $query: $query, $ripple-target: variables.$ripple-target);\n @include fill-color(transparent, $query: $query);\n @include character-counter-mixins.character-counter-position(16px, 13px, $query: $query);\n @include _textarea-floating-label($query);\n\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-typography: feature-targeting-functions.create-target($query, typography);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n align-items: center;\n width: auto;\n height: auto;\n padding: 0; // see below for explanation\n overflow: visible;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n transition: none;\n }\n\n .mdc-text-field__input {\n @include feature-targeting-mixins.targets($feat-structure) {\n height: auto;\n align-self: stretch;\n box-sizing: border-box;\n // Top margin is used to keep the text from overlapping the floating label\n // when scrolling\n margin-top: variables.$textarea-input-margin-top;\n // Bottom and left/right margins are used to add space for the resize handle\n margin-bottom: variables.$textarea-input-handle-margin;\n @include rtl-mixins.reflexive-box(margin, right, variables.$textarea-input-handle-margin);\n // Textarea has horizontal padding instead of the container. This allows the\n // resize handle to extend to the edge of the container.\n padding: 0 variables.$padding-horizontal variables.$textarea-input-padding-bottom;\n }\n\n @include feature-targeting-mixins.targets($feat-typography) {\n line-height: 1.75rem; // 28sp\n }\n }\n\n .mdc-text-field-character-counter + .mdc-text-field__input {\n @include feature-targeting-mixins.targets($feat-structure) {\n margin-bottom: 28px; // Leaves space for character counter if it exists.\n padding-bottom: 0;\n }\n }\n}\n\n@mixin _textarea-floating-label($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Resting label position\n .mdc-floating-label {\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-position(left, notched-outline-variables.$padding);\n\n top: 17px;\n width: auto;\n }\n\n // Resets center aligning the floating label.\n &:not(.mdc-floating-label--float-above) {\n @include feature-targeting-mixins.targets($feat-structure) {\n transform: none;\n }\n }\n }\n\n // Floating label position\n @include notched-outline-mixins.floating-label-float-position(variables.$textarea-label-position-y, $query: $query);\n\n // Floating label animation\n @include floating-label-mixins.shake-animation(textarea, $query: $query);\n @include floating-label-mixins.shake-keyframes(\n textarea,\n variables.$textarea-label-position-y,\n 0%,\n $query: $query\n );\n}\n\n// Text, Prefix and Suffix\n\n// Common styles for the text of the text field, including the prefix, suffix,\n// and input.\n@mixin _text($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n // Exclude setting line-height to keep caret (text cursor) same height as the input text in iOS browser.\n @include typography-mixins.typography(subtitle1, $exclude-props: (line-height), $query: $query);\n @include feature-targeting-mixins.targets($feat-structure) {\n height: variables.$input-height;\n }\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition(opacity);\n }\n}\n\n@mixin _input($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include _text($query: $query);\n @include feature-targeting-mixins.targets($feat-structure) {\n width: 100%;\n min-width: 0; // Fixes flex issues on Firefox\n border: none;\n border-radius: 0;\n background: none;\n appearance: none;\n padding: 0;\n\n // Remove built-in trailing clear icon on IE11\n &::-ms-clear {\n display: none;\n }\n\n &:focus {\n outline: none;\n }\n\n // Remove red outline on firefox\n &:invalid {\n box-shadow: none;\n }\n\n // Keep Chrome autofill behind the notched outline\n &:-webkit-autofill {\n z-index: auto !important;\n }\n }\n}\n\n@mixin _input-placeholder($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition: functions.transition(opacity, $duration: 67ms);\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n }\n}\n\n@mixin _input-placeholder-visible($query: feature-targeting-functions.all()) {\n $feat-animation: feature-targeting-functions.create-target($query, animation);\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-animation) {\n transition-delay: 40ms;\n transition-duration: 110ms;\n }\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n}\n\n@mixin _affix($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include _text($query: $query);\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 0;\n white-space: nowrap;\n }\n}\n\n@mixin _affix-visible($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n opacity: 1;\n }\n}\n\n@mixin _prefix($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(padding, right, variables.$prefix-padding);\n }\n}\n\n@mixin _prefix-end-aligned($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(padding, right, variables.$prefix-end-aligned-padding);\n }\n}\n\n@mixin _suffix($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(padding, left, variables.$suffix-padding);\n }\n}\n\n@mixin _suffix-end-aligned($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.reflexive-box(padding, left, variables.$suffix-end-aligned-padding);\n }\n}\n\n// End aligned\n@mixin end-aligned_($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n .mdc-text-field__input {\n @include feature-targeting-mixins.targets($feat-structure) {\n // IE11 does not support text-align: end\n /* @noflip */\n text-align: right;\n }\n\n @include rtl-mixins.rtl {\n @include feature-targeting-mixins.targets($feat-structure) {\n /* @noflip */\n text-align: left;\n }\n }\n }\n}\n\n// Forces input, prefix, and suffix to be LTR when in an RTL environment. Other\n// elements such as labels and icons will remain RTL.\n@mixin _ltr-text($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.rtl {\n .mdc-text-field__input,\n .mdc-text-field__affix {\n /* @noflip */\n direction: ltr;\n }\n\n .mdc-text-field__affix--prefix {\n /* @noflip */\n padding-left: 0;\n /* @noflip */\n padding-right: variables.$prefix-padding;\n }\n\n .mdc-text-field__affix--suffix {\n /* @noflip */\n padding-left: variables.$suffix-padding;\n /* @noflip */\n padding-right: 0;\n }\n\n // Need to specify an order for all elements since icons maintain their\n // original positions. We can't just reverse the container.\n .mdc-text-field__icon--leading {\n order: 1;\n }\n\n .mdc-text-field__affix--suffix {\n order: 2;\n }\n\n .mdc-text-field__input {\n order: 3;\n }\n\n .mdc-text-field__affix--prefix {\n order: 4;\n }\n\n .mdc-text-field__icon--trailing {\n order: 5;\n }\n }\n }\n}\n\n// Forces input, prefix, and suffix that are already forced to LTR to also be\n// end-aligned. This mixin should be used alongside the styles provided in\n// _ltr-text().\n@mixin _ltr-text-end-aligned($query: feature-targeting-functions.all()) {\n $feat-structure: feature-targeting-functions.create-target($query, structure);\n\n @include feature-targeting-mixins.targets($feat-structure) {\n @include rtl-mixins.rtl {\n .mdc-text-field__input {\n // IE11 does not support text-align: end, so we need to duplicate\n // the LTR end-aligned style here.\n /* @noflip */\n text-align: right;\n }\n\n .mdc-text-field__affix--prefix {\n // padding-left: 0 provided by _ltr-text mixin\n /* @noflip */\n padding-right: variables.$prefix-end-aligned-padding;\n }\n\n .mdc-text-field__affix--suffix {\n /* @noflip */\n padding-left: variables.$suffix-end-aligned-padding;\n // padding-right: 0 provided by _ltr-text mixin\n }\n }\n }\n}\n\n// Customization\n\n@mixin ink-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n .mdc-text-field__input {\n @include feature-targeting-mixins.targets($feat-color) {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin placeholder-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n .mdc-text-field__input {\n @include placeholder-selector_ {\n @include theme-mixins.prop(color, $color);\n }\n }\n }\n}\n\n@mixin fill-color_($color, $query: feature-targeting-functions.all(), $addAlternate: false) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n @if ($addAlternate) {\n /* @alternate */\n }\n @include theme-mixins.prop(background-color, $color);\n }\n}\n\n@mixin bottom-line-color_($color, $query: feature-targeting-functions.all()) {\n .mdc-line-ripple {\n @include line-ripple-mixins.inactive-color($color, $query: $query);\n }\n}\n\n@mixin hover-bottom-line-color_($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n &:hover .mdc-line-ripple {\n @include line-ripple-mixins.inactive-color($color, $query: $query);\n }\n}\n\n@mixin line-ripple-color_($color, $query: feature-targeting-functions.all()) {\n .mdc-line-ripple {\n @include line-ripple-mixins.active-color($color, $query: $query);\n }\n}\n\n@mixin hover-outline-color_($color, $query: feature-targeting-functions.all()) {\n &:not(.mdc-text-field--focused):hover {\n .mdc-notched-outline {\n @include notched-outline-mixins.color($color, $query: $query);\n }\n }\n}\n\n@mixin focused-outline-color_($color, $query: feature-targeting-functions.all()) {\n &.mdc-text-field--focused {\n @include notched-outline-mixins.color($color, $query: $query);\n }\n}\n\n@mixin label-ink-color_($color, $query: feature-targeting-functions.all()) {\n .mdc-floating-label {\n @include floating-label-mixins.ink-color($color, $query: $query);\n }\n}\n\n@mixin _prefix-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n .mdc-text-field__affix--prefix {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n@mixin _suffix-color($color, $query: feature-targeting-functions.all()) {\n $feat-color: feature-targeting-functions.create-target($query, color);\n\n @include feature-targeting-mixins.targets($feat-color) {\n .mdc-text-field__affix--suffix {\n @include theme-mixins.prop(color, $color);\n }\n }\n}\n\n// Selectors\n\n@mixin required-label-asterisk_() {\n .mdc-text-field__input:required ~ {\n .mdc-floating-label::after,\n .mdc-notched-outline .mdc-floating-label::after {\n @content;\n }\n }\n}\n\n@mixin placeholder-selector_ {\n // GSS will combine selectors with the same content, and some browsers have a\n // CSS quirk where it drops a rule if it does not recognize one of the\n // selectors.\n // To avoid GSS combining the ::placeholder and :-ms-input-placeholder\n // selectors, we wrap them in `@media all`.\n // TODO(b/142329051)\n @media all {\n // ::placeholder needs to be wrapped because IE11 will drop other selectors\n // with the same content\n &::placeholder {\n @content;\n }\n }\n\n @media all {\n // :-ms-input-placeholder needs to be wrapped because Firefox will drop\n // other selectors with the same content\n &:-ms-input-placeholder {\n @content;\n }\n }\n}\n\n\n// State qualifiers\n\n///\n/// Helps style the text-field only when it's enabled.\n/// @access private\n///\n@mixin if-enabled_ {\n &:not(.mdc-text-field--disabled) {\n @content;\n }\n}\n\n///\n/// Helps style the text-field only when it's disabled.\n/// @access private\n///\n@mixin if-disabled_ {\n &.mdc-text-field--disabled {\n @content;\n }\n}\n","//\n// Copyright 2017 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:color\";\n@use \"@material/density/variables\" as density-variables;\n@use \"@material/floating-label/variables\" as floating-label-variables;\n@use \"@material/notched-outline/variables\" as notched-outline-variables;\n@use \"@material/theme/variables\" as theme-variables;\n\n///\n/// Returns outlined text field floating label position for given height.\n///\n/// @todo Instead of adjusting `$positionY` with label box height that might change based on floating label font size\n/// wrap label in a child element to apply `transitionY(-50%)` to automatically offset based on box height.\n///\n@function get-outlined-label-position-y($text-field-height) {\n @return $text-field-height / 2 + notched-outline-variables.$label-box-height / 2;\n}\n\n$error: error !default;\n$fullwidth-bottom-line-color: rgba(theme-variables.prop-value(on-surface), .12) !default;\n$disabled-border: rgba(theme-variables.prop-value(on-surface), .06) !default;\n$disabled-icon: rgba(theme-variables.prop-value(on-surface), .3) !default;\n$bottom-line-hover: rgba(theme-variables.prop-value(on-surface), .87) !default;\n$bottom-line-idle: rgba(theme-variables.prop-value(on-surface), .42) !default;\n$label: rgba(theme-variables.prop-value(on-surface), .6) !default;\n\n$ink-color: rgba(theme-variables.prop-value(on-surface), .87) !default;\n$helper-text-color: rgba(theme-variables.prop-value(on-surface), .6) !default;\n$icon-color: rgba(theme-variables.prop-value(on-surface), .54) !default;\n$focused-label-color: rgba(theme-variables.prop-value(primary), .87) !default;\n$placeholder-ink-color: rgba(theme-variables.prop-value(on-surface), .54) !default;\n$affix-color: rgba(theme-variables.prop-value(on-surface), .6) !default;\n\n$disabled-label-color: rgba(theme-variables.prop-value(on-surface), .38) !default;\n$disabled-ink-color: rgba(theme-variables.prop-value(on-surface), .38) !default;\n$disabled-placeholder-ink-color: rgba(theme-variables.prop-value(on-surface), .38) !default;\n$disabled-helper-text-color: rgba(theme-variables.prop-value(on-surface), .38) !default;\n$disabled-affix-color: rgba(theme-variables.prop-value(on-surface), .38) !default;\n\n$background: color.mix(theme-variables.prop-value(on-surface), theme-variables.prop-value(surface), 4%) !default;\n$disabled-background: color.mix(theme-variables.prop-value(on-surface), theme-variables.prop-value(surface), 2%) !default;\n$secondary-text: rgba(theme-variables.prop-value(on-surface), .6) !default;\n\n$outlined-idle-border: rgba(theme-variables.prop-value(on-surface), .38) !default;\n$outlined-disabled-border: rgba(theme-variables.prop-value(on-surface), .06) !default;\n$outlined-hover-border: rgba(theme-variables.prop-value(on-surface), .87) !default;\n\n$textarea-border: rgba(theme-variables.prop-value(on-surface), .73) !default;\n$textarea-background: rgba(theme-variables.prop-value(surface), 1) !default;\n$textarea-disabled-border-color: rgba(theme-variables.prop-value(on-surface), .26) !default;\n// cannot be transparent because multiline textarea input\n// will make text unreadable\n$textarea-disabled-background: rgba(249, 249, 249, 1) !default;\n\n$ripple-target: '.mdc-text-field__ripple';\n$outlined-stroke-width: 2px !default;\n$height: 56px !default;\n$minimum-height: 40px !default;\n$minimum-height-for-filled-label: 52px !default;\n$maximum-height: $height !default;\n$padding-horizontal: 16px !default;\n$density-scale: density-variables.$default-scale !default;\n$density-config: (\n height: (\n default: $height,\n maximum: $maximum-height,\n minimum: $minimum-height,\n ),\n) !default;\n$label-position-y: floating-label-variables.$position-y !default;\n$label-offset: 16px !default;\n// TODO(b/154350788): Remove this variable, it's not used internally but it is\n// externally in Angular\n/// @deprecated this variable will be removed in the future.\n/// Use get-outlined-label-position-y($height) instead\n$outlined-label-position-y:\n get-outlined-label-position-y($height) !default;\n$outlined-with-leading-icon-label-position-x: 32px !default;\n$textarea-label-position-y: 130% !default;\n$helper-line-padding: 16px !default;\n$filled-baseline-top: 40px !default;\n$input-height: 28px !default;\n$textarea-input-margin-top: 8px !default;\n$textarea-input-handle-margin: 1px !default;\n$textarea-input-padding-bottom: 16px !default;\n// Note that the scale factor is an eyeballed approximation of what's shown in the mocks.\n\n$prefix-padding: 2px !default;\n$prefix-end-aligned-padding: 12px !default;\n$suffix-padding: 12px !default;\n$suffix-end-aligned-padding: 2px !default;\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"@material/elevation/mixins\" as elevation-mixins;\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/rtl/mixins\" as rtl-mixins;\n@use \"@material/typography/mixins\" as typography-mixins;\n@use \"./mixins\";\n@use \"./variables\";\n\n// postcss-bem-linter: define top-app-bar\n.mdc-top-app-bar {\n @include mixins.fill-color-accessible(primary);\n @include mixins.icon-ink-color(on-primary);\n\n display: flex;\n position: fixed;\n flex-direction: column;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n z-index: 4;\n\n &__row {\n display: flex;\n position: relative;\n box-sizing: border-box;\n width: 100%;\n height: variables.$row-height;\n }\n\n &__section {\n display: inline-flex;\n flex: 1 1 auto;\n align-items: center;\n min-width: 0;\n padding: variables.$section-vertical-padding variables.$section-horizontal-padding;\n z-index: 1;\n\n &--align-start {\n justify-content: flex-start;\n order: -1;\n }\n\n &--align-end {\n justify-content: flex-end;\n order: 1;\n }\n }\n\n &__title {\n @include typography-mixins.typography(headline6);\n @include rtl-mixins.reflexive-box(padding, left, variables.$title-left-padding);\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n z-index: 1;\n }\n}\n\n@at-root {\n @include mixins.short-shape-radius(24px);\n}\n\n.mdc-top-app-bar--short {\n top: 0;\n /* @noflip */\n right: auto;\n /* @noflip */\n left: 0;\n width: 100%;\n transition: width 250ms animation-variables.$standard-curve-timing-function;\n\n @include rtl-mixins.rtl {\n /* @noflip */\n right: 0;\n /* @noflip */\n left: auto;\n }\n\n .mdc-top-app-bar__row {\n height: variables.$mobile-row-height;\n }\n\n .mdc-top-app-bar__section {\n padding: variables.$mobile-section-padding;\n }\n\n .mdc-top-app-bar__title {\n transition: opacity 200ms animation-variables.$standard-curve-timing-function;\n opacity: 1;\n }\n}\n\n.mdc-top-app-bar--short-collapsed {\n @include elevation-mixins.elevation(4);\n\n width: variables.$short-collapsed-width;\n transition: width 300ms animation-variables.$standard-curve-timing-function;\n\n .mdc-top-app-bar__title {\n display: none;\n }\n\n .mdc-top-app-bar__action-item {\n transition: padding 150ms animation-variables.$standard-curve-timing-function;\n }\n}\n\n// stylelint-disable-next-line plugin/selector-bem-pattern\n.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item {\n width: variables.$short-collapsed-width * 2;\n\n .mdc-top-app-bar__section--align-end {\n @include rtl-mixins.reflexive-box(padding, right, 12px);\n }\n}\n\n.mdc-top-app-bar--dense {\n .mdc-top-app-bar__row {\n height: variables.$dense-row-height;\n }\n\n .mdc-top-app-bar__section {\n padding: 0 variables.$dense-section-horizontal-padding;\n }\n\n .mdc-top-app-bar__title {\n @include rtl-mixins.reflexive-box(padding, left, variables.$dense-title-left-padding);\n }\n}\n\n.mdc-top-app-bar--prominent {\n .mdc-top-app-bar__row {\n height: variables.$prominent-row-height;\n }\n\n .mdc-top-app-bar__title {\n align-self: flex-end;\n padding-bottom: variables.$prominent-title-bottom-padding;\n }\n\n .mdc-top-app-bar__action-item,\n .mdc-top-app-bar__navigation-icon {\n align-self: flex-start;\n }\n}\n\n// stylelint-disable-next-line plugin/selector-bem-pattern\n.mdc-top-app-bar--fixed {\n transition: box-shadow 200ms linear;\n}\n\n.mdc-top-app-bar--fixed-scrolled {\n @include elevation-mixins.elevation(4);\n\n transition: box-shadow 200ms linear;\n}\n\n// Specific styles for dense and prominent styled top app bar\n// stylelint-disable plugin/selector-bem-pattern\n.mdc-top-app-bar--dense.mdc-top-app-bar--prominent {\n .mdc-top-app-bar__row {\n height: variables.$dense-row-height * 2;\n }\n\n .mdc-top-app-bar__section {\n padding: 0 variables.$section-horizontal-padding;\n }\n\n .mdc-top-app-bar__title {\n @include rtl-mixins.reflexive-box(padding, left, variables.$title-left-padding);\n\n padding-bottom: variables.$dense-prominent-title-bottom-padding;\n }\n}\n// stylelint-enable plugin/selector-bem-pattern\n\n.mdc-top-app-bar--fixed-adjust {\n padding-top: variables.$row-height;\n}\n\n.mdc-top-app-bar--dense-fixed-adjust {\n padding-top: variables.$dense-row-height;\n}\n\n.mdc-top-app-bar--short-fixed-adjust {\n padding-top: variables.$mobile-row-height;\n}\n\n.mdc-top-app-bar--prominent-fixed-adjust {\n padding-top: variables.$prominent-row-height;\n}\n\n.mdc-top-app-bar--dense-prominent-fixed-adjust {\n padding-top: variables.$dense-row-height * 2;\n}\n\n// Mobile Styles\n@include mixins.mobile-breakpoint_;\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n@use \"sass:list\";\n@use \"@material/animation/variables\" as animation-variables;\n@use \"@material/ripple/mixins\" as ripple-mixins;\n@use \"@material/theme/variables\" as theme-variables; // for mdc-theme-accessible-ink-color\n@use \"@material/theme/mixins\" as theme-mixins;\n@use \"@material/shape/mixins\" as shape-mixins;\n@use \"@material/shape/functions\";\n@use \"./variables\";\n@use \"@material/rtl/mixins\" as rtl-mixins;\n\n//\n// Public\n//\n\n@mixin ink-color($color) {\n @include theme-mixins.prop(color, $color);\n}\n\n@mixin fill-color($color) {\n @include theme-mixins.prop(background-color, $color);\n}\n\n@mixin fill-color-accessible($color) {\n @include fill-color($color);\n @include ink-color(theme-variables.accessible-ink-color($color));\n}\n\n@mixin icon-ink-color($color) {\n .mdc-top-app-bar__action-item,\n .mdc-top-app-bar__navigation-icon {\n @include theme-mixins.prop(color, $color);\n @include ripple-mixins.states($color);\n }\n}\n\n@mixin short-shape-radius($radius, $rtl-reflexive: true) {\n @if list.length($radius) > 1 {\n @error \"Invalid radius: '#{$radius}' component doesn't allow customizing all corners\";\n }\n\n $radius: 0 0 $radius 0;\n\n $selector: if(&, \"&.mdc-top-app-bar--short-collapsed\", \".mdc-top-app-bar--short-collapsed\");\n\n #{$selector} {\n @include shape-mixins.radius(\n functions.resolve-percentage-radius(variables.$dense-row-height, $radius),\n $rtl-reflexive\n );\n }\n}\n\n//\n// Private\n//\n\n@mixin mobile-breakpoint_($mobile-breakpoint: variables.$mobile-breakpoint) {\n @media (max-width: $mobile-breakpoint) {\n .mdc-top-app-bar__row {\n height: variables.$mobile-row-height;\n }\n\n .mdc-top-app-bar__section {\n padding: variables.$mobile-section-padding;\n }\n\n .mdc-top-app-bar--short {\n transition: width 200ms animation-variables.$standard-curve-timing-function;\n }\n\n .mdc-top-app-bar--short-collapsed {\n transition: width 250ms animation-variables.$standard-curve-timing-function;\n\n .mdc-top-app-bar__section--align-end {\n @include rtl-mixins.reflexive-box(padding, right, variables.$short-collapsed-right-icon-padding);\n }\n }\n\n .mdc-top-app-bar--prominent {\n .mdc-top-app-bar__title {\n padding-bottom: variables.$prominent-mobile-title-bottom-padding;\n }\n }\n\n .mdc-top-app-bar--fixed-adjust {\n padding-top: variables.$mobile-row-height;\n }\n }\n}\n","//\n// Copyright 2018 Google Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// Default styles\n$row-height: 64px !default;\n$title-left-padding: 20px !default;\n$section-vertical-padding: 8px !default;\n$section-horizontal-padding: 12px !default;\n\n$mobile-breakpoint: 599px !default;\n\n// Default mobile styles\n$mobile-row-height: 56px !default;\n$mobile-section-padding: 4px !default;\n\n// Short top app bar\n$short-collapsed-border-radius: 4px !default;\n$short-collapsed-width: 56px !default;\n$short-collapsed-right-icon-padding: 12px !default;\n\n// Prominent styles\n$prominent-row-height: 128px !default;\n$prominent-title-bottom-padding: 2px !default;\n\n// Prominent mobile styles\n$prominent-mobile-title-bottom-padding: 6px !default;\n\n// Dense styles\n$dense-row-height: 48px !default;\n$dense-section-horizontal-padding: 4px !default;\n$dense-title-left-padding: 12px !default;\n\n// Dense & Prominent styles\n$dense-prominent-title-bottom-padding: 9px !default;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/Neutron-trunk/resources/lib/material/material-components-web.min.js b/Neutron-trunk/resources/lib/material/material-components-web.min.js deleted file mode 100644 index 8ed3bbf..0000000 --- a/Neutron-trunk/resources/lib/material/material-components-web.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mdc=e():t.mdc=e()}(this,function(){return i={},r.m=n=[function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=(Object.defineProperty(r,"cssClasses",{get:function(){return{}},enumerable:!0,configurable:!0}),Object.defineProperty(r,"strings",{get:function(){return{}},enumerable:!0,configurable:!0}),Object.defineProperty(r,"numbers",{get:function(){return{}},enumerable:!0,configurable:!0}),Object.defineProperty(r,"defaultAdapter",{get:function(){return{}},enumerable:!0,configurable:!0}),r.prototype.init=function(){},r.prototype.destroy=function(){},r);function r(t){void 0===t&&(t={}),this.adapter_=t}e.MDCFoundation=i,e.default=i},function(t,e,n){"use strict";var i=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,r,o=n.call(t),s=[];try{for(;(void 0===e||0=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0});var s,a=n(0),y=n(6),c=(s=a.MDCFoundation,r(E,s),Object.defineProperty(E,"cssClasses",{get:function(){return y.cssClasses},enumerable:!0,configurable:!0}),Object.defineProperty(E,"strings",{get:function(){return y.strings},enumerable:!0,configurable:!0}),Object.defineProperty(E,"numbers",{get:function(){return y.numbers},enumerable:!0,configurable:!0}),Object.defineProperty(E,"Corner",{get:function(){return y.Corner},enumerable:!0,configurable:!0}),Object.defineProperty(E,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},hasAnchor:function(){return!1},isElementInContainer:function(){return!1},isFocused:function(){return!1},isRtl:function(){return!1},getInnerDimensions:function(){return{height:0,width:0}},getAnchorDimensions:function(){return null},getWindowDimensions:function(){return{height:0,width:0}},getBodyDimensions:function(){return{height:0,width:0}},getWindowScroll:function(){return{x:0,y:0}},setPosition:function(){},setMaxHeight:function(){},setTransformOrigin:function(){},saveFocus:function(){},restoreFocus:function(){},notifyClose:function(){},notifyOpen:function(){}}},enumerable:!0,configurable:!0}),E.prototype.init=function(){var t=E.cssClasses,e=t.ROOT,n=t.OPEN;if(!this.adapter_.hasClass(e))throw new Error(e+" class required in root element.");this.adapter_.hasClass(n)&&(this.isOpen_=!0)},E.prototype.destroy=function(){clearTimeout(this.openAnimationEndTimerId_),clearTimeout(this.closeAnimationEndTimerId_),cancelAnimationFrame(this.animationRequestId_)},E.prototype.setAnchorCorner=function(t){this.anchorCorner_=t},E.prototype.flipCornerHorizontally=function(){this.originCorner_=this.originCorner_^y.CornerBit.RIGHT},E.prototype.setAnchorMargin=function(t){this.anchorMargin_.top=t.top||0,this.anchorMargin_.right=t.right||0,this.anchorMargin_.bottom=t.bottom||0,this.anchorMargin_.left=t.left||0},E.prototype.setIsHoisted=function(t){this.isHoistedElement_=t},E.prototype.setFixedPosition=function(t){this.isFixedPosition_=t},E.prototype.setAbsolutePosition=function(t,e){this.position_.x=this.isFinite_(t)?t:0,this.position_.y=this.isFinite_(e)?e:0},E.prototype.setQuickOpen=function(t){this.isQuickOpen_=t},E.prototype.isOpen=function(){return this.isOpen_},E.prototype.open=function(){var t=this;this.isOpen_||(this.adapter_.saveFocus(),this.isQuickOpen_?(this.isOpen_=!0,this.adapter_.addClass(E.cssClasses.OPEN),this.dimensions_=this.adapter_.getInnerDimensions(),this.autoPosition_(),this.adapter_.notifyOpen()):(this.adapter_.addClass(E.cssClasses.ANIMATING_OPEN),this.animationRequestId_=requestAnimationFrame(function(){t.adapter_.addClass(E.cssClasses.OPEN),t.dimensions_=t.adapter_.getInnerDimensions(),t.autoPosition_(),t.openAnimationEndTimerId_=setTimeout(function(){t.openAnimationEndTimerId_=0,t.adapter_.removeClass(E.cssClasses.ANIMATING_OPEN),t.adapter_.notifyOpen()},y.numbers.TRANSITION_OPEN_DURATION)}),this.isOpen_=!0))},E.prototype.close=function(t){var e=this;void 0===t&&(t=!1),this.isOpen_&&(this.isQuickOpen_?(this.isOpen_=!1,t||this.maybeRestoreFocus_(),this.adapter_.removeClass(E.cssClasses.OPEN),this.adapter_.removeClass(E.cssClasses.IS_OPEN_BELOW),this.adapter_.notifyClose()):(this.adapter_.addClass(E.cssClasses.ANIMATING_CLOSED),requestAnimationFrame(function(){e.adapter_.removeClass(E.cssClasses.OPEN),e.adapter_.removeClass(E.cssClasses.IS_OPEN_BELOW),e.closeAnimationEndTimerId_=setTimeout(function(){e.closeAnimationEndTimerId_=0,e.adapter_.removeClass(E.cssClasses.ANIMATING_CLOSED),e.adapter_.notifyClose()},y.numbers.TRANSITION_CLOSE_DURATION)}),this.isOpen_=!1,t||this.maybeRestoreFocus_()))},E.prototype.handleBodyClick=function(t){var e=t.target;this.adapter_.isElementInContainer(e)||this.close()},E.prototype.handleKeydown=function(t){var e=t.keyCode;"Escape"!==t.key&&27!==e||this.close()},E.prototype.autoPosition_=function(){var t;this.measurements_=this.getAutoLayoutMeasurements_();var e=this.getOriginCorner_(),n=this.getMenuSurfaceMaxHeight_(e),i=this.hasBit_(e,y.CornerBit.BOTTOM)?"bottom":"top",r=this.hasBit_(e,y.CornerBit.RIGHT)?"right":"left",o=this.getHorizontalOriginOffset_(e),s=this.getVerticalOriginOffset_(e),a=this.measurements_,c=a.anchorSize,u=a.surfaceSize,l=((t={})[r]=o,t[i]=s,t);c.width/u.width>y.numbers.ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO&&(r="center"),(this.isHoistedElement_||this.isFixedPosition_)&&this.adjustPositionForHoistedElement_(l),this.adapter_.setTransformOrigin(r+" "+i),this.adapter_.setPosition(l),this.adapter_.setMaxHeight(n?n+"px":""),this.hasBit_(e,y.CornerBit.BOTTOM)||this.adapter_.addClass(E.cssClasses.IS_OPEN_BELOW)},E.prototype.getAutoLayoutMeasurements_=function(){var t=this.adapter_.getAnchorDimensions(),e=this.adapter_.getBodyDimensions(),n=this.adapter_.getWindowDimensions(),i=this.adapter_.getWindowScroll();return{anchorSize:t=t||{top:this.position_.y,right:this.position_.x,bottom:this.position_.y,left:this.position_.x,width:0,height:0},bodySize:e,surfaceSize:this.dimensions_,viewportDistance:{top:t.top,right:n.width-t.right,bottom:n.height-t.bottom,left:t.left},viewportSize:n,windowScroll:i}},E.prototype.getOriginCorner_=function(){var t,e,n=this.originCorner_,i=this.measurements_,r=i.viewportDistance,o=i.anchorSize,s=i.surfaceSize,a=E.numbers.MARGIN_TO_EDGE;!(0<(e=this.hasBit_(this.anchorCorner_,y.CornerBit.BOTTOM)?(t=r.top-a+o.height+this.anchorMargin_.bottom,r.bottom-a-this.anchorMargin_.bottom):(t=r.top-a+this.anchorMargin_.top,r.bottom-a+o.height-this.anchorMargin_.top))-s.height)&&e<=t&&(n=this.setBit_(n,y.CornerBit.BOTTOM));var c,u,l=this.adapter_.isRtl(),d=this.hasBit_(this.anchorCorner_,y.CornerBit.FLIP_RTL),p=this.hasBit_(this.anchorCorner_,y.CornerBit.RIGHT),_=!1;u=(_=l&&d?!p:p)?(c=r.left+o.width+this.anchorMargin_.right,r.right-this.anchorMargin_.right):(c=r.left+this.anchorMargin_.left,r.right+o.width-this.anchorMargin_.left);var f=0this.topAppBarHeight_&&(this.currentAppBarOffsetTop_=-this.topAppBarHeight_),this.moveTopAppBar_())},u.prototype.handleWindowResize=function(){var t=this;this.resizeThrottleId_||(this.resizeThrottleId_=setTimeout(function(){t.resizeThrottleId_=0,t.throttledResizeHandler_()},s.numbers.DEBOUNCE_THROTTLE_RESIZE_TIME_MS)),this.isCurrentlyBeingResized_=!0,this.resizeDebounceId_&&clearTimeout(this.resizeDebounceId_),this.resizeDebounceId_=setTimeout(function(){t.handleTargetScroll(),t.isCurrentlyBeingResized_=!1,t.resizeDebounceId_=0},s.numbers.DEBOUNCE_THROTTLE_RESIZE_TIME_MS)},u.prototype.checkForUpdate_=function(){var t=-this.topAppBarHeight_,e=this.currentAppBarOffsetTop_<0,n=this.currentAppBarOffsetTop_>t,i=e&&n;if(i)this.wasDocked_=!1;else{if(!this.wasDocked_)return this.wasDocked_=!0;if(this.isDockedShowing_!==n)return this.isDockedShowing_=n,!0}return i},u.prototype.moveTopAppBar_=function(){if(this.checkForUpdate_()){var t=this.currentAppBarOffsetTop_;Math.abs(t)>=this.topAppBarHeight_&&(t=-s.numbers.MAX_TOP_APP_BAR_HEIGHT),this.adapter_.setStyle("top",t+"px")}},u.prototype.throttledResizeHandler_=function(){var t=this.adapter_.getTopAppBarHeight();this.topAppBarHeight_!==t&&(this.wasDocked_=!1,this.currentAppBarOffsetTop_-=this.topAppBarHeight_-t,this.topAppBarHeight_=t),this.handleTargetScroll()},u);function u(t){var e=o.call(this,t)||this;return e.wasDocked_=!0,e.isDockedShowing_=!0,e.currentAppBarOffsetTop_=0,e.isCurrentlyBeingResized_=!1,e.resizeThrottleId_=0,e.resizeDebounceId_=0,e.lastScrollPosition_=e.adapter_.getViewportScrollY(),e.topAppBarHeight_=e.adapter_.getTopAppBarHeight(),e}e.MDCTopAppBarFoundation=c,e.default=c},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,n=1,i=arguments.length;ns[0]&&e[1]t.offsetHeight},e.areTopsMisaligned=function(t){var e=new Set;return[].forEach.call(t,function(t){return e.add(t.offsetTop)}),1 label"}},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,n=1,i=arguments.length;n=this.adapter_.getMenuItemCount())){var n=this.selectedIndex;this.selectedIndex=t,this.selectedIndex===u.numbers.UNSET_INDEX?this.adapter_.setSelectedText(""):this.adapter_.setSelectedText(this.adapter_.getMenuItemTextAtIndex(this.selectedIndex).trim()),n!==u.numbers.UNSET_INDEX&&(this.adapter_.removeClassAtIndex(n,u.cssClasses.SELECTED_ITEM_CLASS),this.adapter_.removeAttributeAtIndex(n,u.strings.ARIA_SELECTED_ATTR)),this.selectedIndex!==u.numbers.UNSET_INDEX&&(this.adapter_.addClassAtIndex(this.selectedIndex,u.cssClasses.SELECTED_ITEM_CLASS),this.adapter_.setAttributeAtIndex(this.selectedIndex,u.strings.ARIA_SELECTED_ATTR,"true")),this.layout(),e&&this.adapter_.closeMenu(),this.handleChange()}},d.prototype.setValue=function(t){var e=this.menuItemValues.indexOf(t);this.setSelectedIndex(e)},d.prototype.getValue=function(){var t=this.adapter_.getSelectedMenuItem();return t&&this.adapter_.getMenuItemAttr(t,u.strings.VALUE_ATTR)||""},d.prototype.getDisabled=function(){return this.disabled},d.prototype.setDisabled=function(t){this.disabled=t,this.disabled?(this.adapter_.addClass(u.cssClasses.DISABLED),this.adapter_.closeMenu()):this.adapter_.removeClass(u.cssClasses.DISABLED),this.leadingIcon&&this.leadingIcon.setDisabled(this.disabled),this.adapter_.setSelectAnchorAttr("tabindex",this.disabled?"-1":"0"),this.adapter_.setSelectAnchorAttr("aria-disabled",this.disabled.toString())},d.prototype.setHelperTextContent=function(t){this.helperText&&this.helperText.setContent(t)},d.prototype.layout=function(){if(this.adapter_.hasLabel()){var t=0this.max_)throw new Error("Cannot set min to be greater than the slider's maximum value");this.min_=t,this.setValue_(this.value_,!1,!0),this.adapter_.setAttribute(u.strings.ARIA_VALUEMIN,String(this.min_)),this.setupTrackMarker()},b.prototype.getStep=function(){return this.step_},b.prototype.setStep=function(t){if(t<0)throw new Error("Step cannot be set to a negative number");this.isDiscrete_&&("number"!=typeof t||t<1)&&(t=1),this.step_=t,this.setValue_(this.value_,!1,!0),this.setupTrackMarker()},b.prototype.isDisabled=function(){return this.disabled_},b.prototype.setDisabled=function(t){this.disabled_=t,this.toggleClass_(u.cssClasses.DISABLED,this.disabled_),this.disabled_?(this.savedTabIndex_=this.adapter_.getTabIndex(),this.adapter_.setAttribute(u.strings.ARIA_DISABLED,"true"),this.adapter_.removeAttribute("tabindex")):(this.adapter_.removeAttribute(u.strings.ARIA_DISABLED),isNaN(this.savedTabIndex_)||this.adapter_.setAttribute("tabindex",String(this.savedTabIndex_)))},b.prototype.handleDown_=function(t){var n=this;if(!this.disabled_){this.preventFocusState_=!0,this.setInTransit_(!this.handlingThumbTargetEvt_),this.handlingThumbTargetEvt_=!1,this.setActive_(!0);var i=function(t){n.handleMove_(t)},r=_[t.type],e=function e(){n.handleUp_(),n.adapter_.deregisterBodyInteractionHandler(r,i),p.forEach(function(t){return n.adapter_.deregisterBodyInteractionHandler(t,e)})};this.adapter_.registerBodyInteractionHandler(r,i),p.forEach(function(t){return n.adapter_.registerBodyInteractionHandler(t,e)}),this.setValueFromEvt_(t)}},b.prototype.handleMove_=function(t){t.preventDefault(),this.setValueFromEvt_(t)},b.prototype.handleUp_=function(){this.setActive_(!1),this.adapter_.notifyChange()},b.prototype.getClientX_=function(t){return t.targetTouches&&0 ',e.setAttribute(o,i),setTimeout(function(){t.setAttribute("aria-live",n),e.removeAttribute(o),e.textContent=i},r))}},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,n=1,i=arguments.length;n=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0});var i=n(107),p=i.strings.AUTO_INIT_ATTR,_=i.strings.AUTO_INIT_STATE_ATTR,f=i.strings.INITIALIZED_STATE,h={},r=console.warn.bind(console);function o(t){var e,n;void 0===t&&(t=document);var i=[],r=[].slice.call(t.querySelectorAll("["+p+"]"));r=r.filter(function(t){return t.getAttribute(_)!==f});try{for(var o=d(r),s=o.next();!s.done;s=o.next()){var a=s.value,c=a.getAttribute(p);if(!c)throw new Error("(mdc-auto-init) Constructor name must be given.");var u=h[c];if("function"!=typeof u)throw new Error("(mdc-auto-init) Could not find constructor in registry for "+c);var l=u.attachTo(a);Object.defineProperty(a,c,{configurable:!0,enumerable:!1,value:l,writable:!1}),i.push(l),a.setAttribute(_,f)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(e)throw e.error}}return function(t,e,n){var i;void 0===n&&(n=!1),"function"==typeof CustomEvent?i=new CustomEvent(t,{bubbles:n,detail:e}):(i=document.createEvent("CustomEvent")).initCustomEvent(t,n,!1,e),document.dispatchEvent(i)}("MDCAutoInit:End",{}),i}(e.mdcAutoInit=o).register=function(t,e,n){if(void 0===n&&(n=r),"function"!=typeof e)throw new Error("(mdc-auto-init) Invalid Constructor value: "+e+". Expected function.");var i=h[t];i&&n("(mdc-auto-init) Overriding registration for "+t+" with "+e+". Was: "+i),h[t]=e},o.deregister=function(t){delete h[t]},o.deregisterAll=function(){Object.keys(h).forEach(this.deregister,this)},e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.strings={AUTO_INIT_ATTR:"data-mdc-auto-init",AUTO_INIT_STATE_ATTR:"data-mdc-auto-init-state",INITIALIZED_STATE:"initialized"}},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(1)),i(e(0))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(39)),i(e(17)),i(e(41))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(111)),i(e(113)),i(e(114))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(112)),i(e(42));var r=e(18);n.trailingActionStrings=r.strings},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o,s=n(1),a=n(3),c=n(4),u=n(18),l=n(42),d=(o=s.MDCComponent,r(p,o),Object.defineProperty(p.prototype,"ripple",{get:function(){return this.ripple_},enumerable:!0,configurable:!0}),p.attachTo=function(t){return new p(t)},p.prototype.initialize=function(t){void 0===t&&(t=function(t,e){return new a.MDCRipple(t,e)});var e=a.MDCRipple.createAdapter(this);this.ripple_=t(this.root_,new c.MDCRippleFoundation(e))},p.prototype.initialSyncWithDOM=function(){var e=this;this.handleClick_=function(t){e.foundation_.handleClick(t)},this.handleKeydown_=function(t){e.foundation_.handleKeydown(t)},this.listen("click",this.handleClick_),this.listen("keydown",this.handleKeydown_)},p.prototype.destroy=function(){this.ripple_.destroy(),this.unlisten("click",this.handleClick_),this.unlisten("keydown",this.handleKeydown_),o.prototype.destroy.call(this)},p.prototype.getDefaultFoundation=function(){var n=this,t={focus:function(){n.root_.focus()},getAttribute:function(t){return n.root_.getAttribute(t)},notifyInteraction:function(t){return n.emit(u.strings.INTERACTION_EVENT,{trigger:t},!0)},notifyNavigation:function(t){n.emit(u.strings.NAVIGATION_EVENT,{key:t},!0)},setAttribute:function(t,e){n.root_.setAttribute(t,e)}};return new l.MDCChipTrailingActionFoundation(t)},p.prototype.isNavigable=function(){return this.foundation_.isNavigable()},p.prototype.focus=function(){this.foundation_.focus()},p.prototype.removeFocus=function(){this.foundation_.removeFocus()},p);function p(){return null!==o&&o.apply(this,arguments)||this}e.MDCChipTrailingAction=d},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(44)),i(e(19));var r=e(8);n.chipCssClasses=r.cssClasses,n.chipStrings=r.strings},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(115)),i(e(45));var r=e(46);n.chipSetCssClasses=r.cssClasses,n.chipSetStrings=r.strings},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o,s=n(1),a=n(116),c=n(44),u=n(19),l=n(45),d=u.MDCChipFoundation.strings,p=d.INTERACTION_EVENT,_=d.SELECTION_EVENT,f=d.REMOVAL_EVENT,h=d.NAVIGATION_EVENT,C=l.MDCChipSetFoundation.strings.CHIP_SELECTOR,y=0,E=(o=s.MDCComponent,r(g,o),g.attachTo=function(t){return new g(t)},Object.defineProperty(g.prototype,"chips",{get:function(){return this.chips_.slice()},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,"selectedChipIds",{get:function(){return this.foundation_.getSelectedChipIds()},enumerable:!0,configurable:!0}),g.prototype.initialize=function(t){void 0===t&&(t=function(t){return new c.MDCChip(t)}),this.chipFactory_=t,this.chips_=this.instantiateChips_(this.chipFactory_)},g.prototype.initialSyncWithDOM=function(){var e=this;this.chips_.forEach(function(t){t.id&&t.selected&&e.foundation_.select(t.id)}),this.handleChipInteraction_=function(t){return e.foundation_.handleChipInteraction(t.detail)},this.handleChipSelection_=function(t){return e.foundation_.handleChipSelection(t.detail)},this.handleChipRemoval_=function(t){return e.foundation_.handleChipRemoval(t.detail)},this.handleChipNavigation_=function(t){return e.foundation_.handleChipNavigation(t.detail)},this.listen(p,this.handleChipInteraction_),this.listen(_,this.handleChipSelection_),this.listen(f,this.handleChipRemoval_),this.listen(h,this.handleChipNavigation_)},g.prototype.destroy=function(){this.chips_.forEach(function(t){t.destroy()}),this.unlisten(p,this.handleChipInteraction_),this.unlisten(_,this.handleChipSelection_),this.unlisten(f,this.handleChipRemoval_),this.unlisten(h,this.handleChipNavigation_),o.prototype.destroy.call(this)},g.prototype.addChip=function(t){t.id=t.id||"mdc-chip-"+ ++y,this.chips_.push(this.chipFactory_(t))},g.prototype.getDefaultFoundation=function(){var i=this,t={announceMessage:function(t){a.announce(t)},focusChipPrimaryActionAtIndex:function(t){i.chips_[t].focusPrimaryAction()},focusChipTrailingActionAtIndex:function(t){i.chips_[t].focusTrailingAction()},getChipListCount:function(){return i.chips_.length},getIndexOfChipById:function(t){return i.findChipIndex_(t)},hasClass:function(t){return i.root_.classList.contains(t)},isRTL:function(){return"rtl"===window.getComputedStyle(i.root_).getPropertyValue("direction")},removeChipAtIndex:function(t){0<=t&&t=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s,c=n(1),u=n(21),l=n(2),d=n(3),p=n(51),_=o(n(50)),f=p.MDCDialogFoundation.strings,h=(s=c.MDCComponent,r(C,s),Object.defineProperty(C.prototype,"isOpen",{get:function(){return this.foundation_.isOpen()},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"escapeKeyAction",{get:function(){return this.foundation_.getEscapeKeyAction()},set:function(t){this.foundation_.setEscapeKeyAction(t)},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"scrimClickAction",{get:function(){return this.foundation_.getScrimClickAction()},set:function(t){this.foundation_.setScrimClickAction(t)},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"autoStackButtons",{get:function(){return this.foundation_.getAutoStackButtons()},set:function(t){this.foundation_.setAutoStackButtons(t)},enumerable:!0,configurable:!0}),C.attachTo=function(t){return new C(t)},C.prototype.initialize=function(t){var e,n;void 0===t&&(t=function(t,e){return new u.FocusTrap(t,e)});var i=this.root_.querySelector(f.CONTAINER_SELECTOR);if(!i)throw new Error("Dialog component requires a "+f.CONTAINER_SELECTOR+" container element");this.container_=i,this.content_=this.root_.querySelector(f.CONTENT_SELECTOR),this.buttons_=[].slice.call(this.root_.querySelectorAll(f.BUTTON_SELECTOR)),this.defaultButton_=this.root_.querySelector("["+f.BUTTON_DEFAULT_ATTRIBUTE+"]"),this.focusTrapFactory_=t,this.buttonRipples_=[];try{for(var r=a(this.buttons_),o=r.next();!o.done;o=r.next()){var s=o.value;this.buttonRipples_.push(new d.MDCRipple(s))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}},C.prototype.initialSyncWithDOM=function(){var e=this;this.focusTrap_=_.createFocusTrapInstance(this.container_,this.focusTrapFactory_,this.getInitialFocusEl_()||void 0),this.handleClick_=this.foundation_.handleClick.bind(this.foundation_),this.handleKeydown_=this.foundation_.handleKeydown.bind(this.foundation_),this.handleDocumentKeydown_=this.foundation_.handleDocumentKeydown.bind(this.foundation_),this.handleLayout_=this.layout.bind(this);var t=["resize","orientationchange"];this.handleOpening_=function(){t.forEach(function(t){return window.addEventListener(t,e.handleLayout_)}),document.addEventListener("keydown",e.handleDocumentKeydown_)},this.handleClosing_=function(){t.forEach(function(t){return window.removeEventListener(t,e.handleLayout_)}),document.removeEventListener("keydown",e.handleDocumentKeydown_)},this.listen("click",this.handleClick_),this.listen("keydown",this.handleKeydown_),this.listen(f.OPENING_EVENT,this.handleOpening_),this.listen(f.CLOSING_EVENT,this.handleClosing_)},C.prototype.destroy=function(){this.unlisten("click",this.handleClick_),this.unlisten("keydown",this.handleKeydown_),this.unlisten(f.OPENING_EVENT,this.handleOpening_),this.unlisten(f.CLOSING_EVENT,this.handleClosing_),this.handleClosing_(),this.buttonRipples_.forEach(function(t){return t.destroy()}),s.prototype.destroy.call(this)},C.prototype.layout=function(){this.foundation_.layout()},C.prototype.open=function(){this.foundation_.open()},C.prototype.close=function(t){void 0===t&&(t=""),this.foundation_.close(t)},C.prototype.getDefaultFoundation=function(){var e=this,t={addBodyClass:function(t){return document.body.classList.add(t)},addClass:function(t){return e.root_.classList.add(t)},areButtonsStacked:function(){return _.areTopsMisaligned(e.buttons_)},clickDefaultButton:function(){return e.defaultButton_&&e.defaultButton_.click()},eventTargetMatches:function(t,e){return!!t&&l.matches(t,e)},getActionFromEvent:function(t){if(!t.target)return"";var e=l.closest(t.target,"["+f.ACTION_ATTRIBUTE+"]");return e&&e.getAttribute(f.ACTION_ATTRIBUTE)},getInitialFocusEl:function(){return e.getInitialFocusEl_()},hasClass:function(t){return e.root_.classList.contains(t)},isContentScrollable:function(){return _.isScrollable(e.content_)},notifyClosed:function(t){return e.emit(f.CLOSED_EVENT,t?{action:t}:{})},notifyClosing:function(t){return e.emit(f.CLOSING_EVENT,t?{action:t}:{})},notifyOpened:function(){return e.emit(f.OPENED_EVENT,{})},notifyOpening:function(){return e.emit(f.OPENING_EVENT,{})},releaseFocus:function(){return e.focusTrap_.releaseFocus()},removeBodyClass:function(t){return document.body.classList.remove(t)},removeClass:function(t){return e.root_.classList.remove(t)},reverseButtons:function(){e.buttons_.reverse(),e.buttons_.forEach(function(t){t.parentElement.appendChild(t)})},trapFocus:function(){return e.focusTrap_.trapFocus()}};return new p.MDCDialogFoundation(t)},C.prototype.getInitialFocusEl_=function(){return document.querySelector("["+f.INITIAL_FOCUS_ATTRIBUTE+"]")},C);function C(){return null!==s&&s.apply(this,arguments)||this}e.MDCDialog=h},function(t,e,n){"use strict";var i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var r=i(n(5));e.events=r;var o=i(n(21));e.focusTrap=o;var s=i(n(43));e.keyboard=s;var a=i(n(2));e.ponyfill=a},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}var r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(n,"__esModule",{value:!0});var o=r(e(53));n.util=o,i(e(125)),i(e(54)),i(e(23)),i(e(55))},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s,a=n(1),c=n(21),u=n(22),l=n(10),d=n(23),p=n(55),_=o(n(53)),f=d.MDCDismissibleDrawerFoundation.cssClasses,h=d.MDCDismissibleDrawerFoundation.strings,C=(s=a.MDCComponent,r(y,s),y.attachTo=function(t){return new y(t)},Object.defineProperty(y.prototype,"open",{get:function(){return this.foundation_.isOpen()},set:function(t){t?this.foundation_.open():this.foundation_.close()},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"list",{get:function(){return this.list_},enumerable:!0,configurable:!0}),y.prototype.initialize=function(t,e){void 0===t&&(t=function(t){return new c.FocusTrap(t)}),void 0===e&&(e=function(t){return new u.MDCList(t)});var n=this.root_.querySelector("."+l.MDCListFoundation.cssClasses.ROOT);n&&(this.list_=e(n),this.list_.wrapFocus=!0),this.focusTrapFactory_=t},y.prototype.initialSyncWithDOM=function(){var e=this,t=f.MODAL,n=h.SCRIM_SELECTOR;this.scrim_=this.root_.parentNode.querySelector(n),this.scrim_&&this.root_.classList.contains(t)&&(this.handleScrimClick_=function(){return e.foundation_.handleScrimClick()},this.scrim_.addEventListener("click",this.handleScrimClick_),this.focusTrap_=_.createFocusTrapInstance(this.root_,this.focusTrapFactory_)),this.handleKeydown_=function(t){return e.foundation_.handleKeydown(t)},this.handleTransitionEnd_=function(t){return e.foundation_.handleTransitionEnd(t)},this.listen("keydown",this.handleKeydown_),this.listen("transitionend",this.handleTransitionEnd_)},y.prototype.destroy=function(){this.unlisten("keydown",this.handleKeydown_),this.unlisten("transitionend",this.handleTransitionEnd_),this.list_&&this.list_.destroy();var t=f.MODAL;this.scrim_&&this.handleScrimClick_&&this.root_.classList.contains(t)&&(this.scrim_.removeEventListener("click",this.handleScrimClick_),this.open=!1)},y.prototype.getDefaultFoundation=function(){var e=this,t={addClass:function(t){return e.root_.classList.add(t)},removeClass:function(t){return e.root_.classList.remove(t)},hasClass:function(t){return e.root_.classList.contains(t)},elementHasClass:function(t,e){return t.classList.contains(e)},saveFocus:function(){return e.previousFocus_=document.activeElement},restoreFocus:function(){var t=e.previousFocus_;t&&t.focus&&e.root_.contains(document.activeElement)&&t.focus()},focusActiveNavigationItem:function(){var t=e.root_.querySelector("."+l.MDCListFoundation.cssClasses.LIST_ITEM_ACTIVATED_CLASS);t&&t.focus()},notifyClose:function(){return e.emit(h.CLOSE_EVENT,{},!0)},notifyOpen:function(){return e.emit(h.OPEN_EVENT,{},!0)},trapFocus:function(){return e.focusTrap_.trapFocus()},releaseFocus:function(){return e.focusTrap_.releaseFocus()}},n=f.DISMISSIBLE,i=f.MODAL;if(this.root_.classList.contains(n))return new d.MDCDismissibleDrawerFoundation(t);if(this.root_.classList.contains(i))return new p.MDCModalDrawerFoundation(t);throw new Error("MDCDrawer: Failed to instantiate component. Supported variants are "+n+" and "+i+".")},y);function y(){return null!==s&&s.apply(this,arguments)||this}e.MDCDrawer=C},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(24)),i(e(56)),i(e(25))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(128)),i(e(58)),i(e(57))},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o,s=n(1),a=n(57),c=(o=s.MDCComponent,r(u,o),u.attachTo=function(t){return new u(t)},Object.defineProperty(u.prototype,"input",{get:function(){return this.input_},set:function(t){this.input_=t},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,"label_",{get:function(){var t=a.MDCFormFieldFoundation.strings.LABEL_SELECTOR;return this.root_.querySelector(t)},enumerable:!0,configurable:!0}),u.prototype.getDefaultFoundation=function(){var n=this,t={activateInputRipple:function(){n.input_&&n.input_.ripple&&n.input_.ripple.activate()},deactivateInputRipple:function(){n.input_&&n.input_.ripple&&n.input_.ripple.deactivate()},deregisterInteractionHandler:function(t,e){n.label_&&n.label_.removeEventListener(t,e)},registerInteractionHandler:function(t,e){n.label_&&n.label_.addEventListener(t,e)}};return new a.MDCFormFieldFoundation(t)},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.MDCFormField=c},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(130)),i(e(60)),i(e(59))},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o,s=n(1),a=n(3),c=n(59),u=c.MDCIconButtonToggleFoundation.strings,l=(o=s.MDCComponent,r(d,o),d.attachTo=function(t){return new d(t)},d.prototype.initialSyncWithDOM=function(){var t=this;this.handleClick_=function(){return t.foundation_.handleClick()},this.listen("click",this.handleClick_)},d.prototype.destroy=function(){this.unlisten("click",this.handleClick_),this.ripple_.destroy(),o.prototype.destroy.call(this)},d.prototype.getDefaultFoundation=function(){var n=this,t={addClass:function(t){return n.root_.classList.add(t)},hasClass:function(t){return n.root_.classList.contains(t)},notifyChange:function(t){n.emit(u.CHANGE_EVENT,t)},removeClass:function(t){return n.root_.classList.remove(t)},getAttr:function(t){return n.root_.getAttribute(t)},setAttr:function(t,e){return n.root_.setAttribute(t,e)}};return new c.MDCIconButtonToggleFoundation(t)},Object.defineProperty(d.prototype,"ripple",{get:function(){return this.ripple_},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,"on",{get:function(){return this.foundation_.isOn()},set:function(t){this.foundation_.toggle(t)},enumerable:!0,configurable:!0}),d.prototype.createRipple_=function(){var t=new a.MDCRipple(this.root_);return t.unbounded=!0,t},d);function d(){var t=null!==o&&o.apply(this,arguments)||this;return t.ripple_=t.createRipple_(),t}e.MDCIconButtonToggle=l},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(26)),i(e(62)),i(e(61))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(133)),i(e(64)),i(e(63))},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o,s=n(1),a=n(63),c=(o=s.MDCComponent,r(u,o),u.attachTo=function(t){return new u(t)},Object.defineProperty(u.prototype,"determinate",{set:function(t){this.foundation_.setDeterminate(t)},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,"progress",{set:function(t){this.foundation_.setProgress(t)},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,"buffer",{set:function(t){this.foundation_.setBuffer(t)},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,"reverse",{set:function(t){this.foundation_.setReverse(t)},enumerable:!0,configurable:!0}),u.prototype.open=function(){this.foundation_.open()},u.prototype.close=function(){this.foundation_.close()},u.prototype.getDefaultFoundation=function(){var n=this,t={addClass:function(t){return n.root_.classList.add(t)},forceLayout:function(){return n.root_.offsetWidth},setBufferBarStyle:function(t,e){n.root_.querySelector(a.MDCLinearProgressFoundation.strings.BUFFER_BAR_SELECTOR).style.setProperty(t,e)},setPrimaryBarStyle:function(t,e){n.root_.querySelector(a.MDCLinearProgressFoundation.strings.PRIMARY_BAR_SELECTOR).style.setProperty(t,e)},hasClass:function(t){return n.root_.classList.contains(t)},removeAttribute:function(t){n.root_.removeAttribute(t)},removeClass:function(t){return n.root_.classList.remove(t)},setAttribute:function(t,e){n.root_.setAttribute(t,e)}};return new a.MDCLinearProgressFoundation(t)},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.MDCLinearProgress=c},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(22)),i(e(9)),i(e(10))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}var r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(n,"__esModule",{value:!0});var o=r(e(65));n.util=o,i(e(66)),i(e(6)),i(e(11))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0});var r=e(6);n.Corner=r.Corner,i(e(67)),i(e(12)),i(e(68))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(27)),i(e(28)),i(e(69))},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(139)),i(e(71)),i(e(70))},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,n=1,i=arguments.length;n=this.max?(this.max=n,this.min=e):(this.min=e,this.max=n),this.step=this.parseFloat_(this.root_.getAttribute(c.strings.STEP_DATA_ATTR),this.step),this.value=t,this.disabled=this.root_.hasAttribute(c.strings.ARIA_DISABLED)&&"false"!==this.root_.getAttribute(c.strings.ARIA_DISABLED),this.foundation_.setupTrackMarker()},d.prototype.layout=function(){this.foundation_.layout()},d.prototype.stepUp=function(t){void 0===t&&(t=this.step||1),this.value+=t},d.prototype.stepDown=function(t){void 0===t&&(t=this.step||1),this.value-=t},d.prototype.parseFloat_=function(t,e){var n=parseFloat(t);return"number"==typeof n&&isFinite(n)?n:e},d);function d(){return null!==o&&o.apply(this,arguments)||this}e.MDCSlider=l},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}var r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(n,"__esModule",{value:!0});var o=r(e(80));n.util=o,i(e(148)),i(e(13)),i(e(81))},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s,a=n(1),c=n(2),u=n(13),l=n(81),d=o(n(80)),p=u.strings.SURFACE_SELECTOR,_=u.strings.LABEL_SELECTOR,f=u.strings.ACTION_SELECTOR,h=u.strings.DISMISS_SELECTOR,C=u.strings.OPENING_EVENT,y=u.strings.OPENED_EVENT,E=u.strings.CLOSING_EVENT,g=u.strings.CLOSED_EVENT,m=(s=a.MDCComponent,r(A,s),A.attachTo=function(t){return new A(t)},A.prototype.initialize=function(t){void 0===t&&(t=function(){return d.announce}),this.announce_=t()},A.prototype.initialSyncWithDOM=function(){var n=this;this.surfaceEl_=this.root_.querySelector(p),this.labelEl_=this.root_.querySelector(_),this.actionEl_=this.root_.querySelector(f),this.handleKeyDown_=function(t){return n.foundation_.handleKeyDown(t)},this.handleSurfaceClick_=function(t){var e=t.target;n.isActionButton_(e)?n.foundation_.handleActionButtonClick(t):n.isActionIcon_(e)&&n.foundation_.handleActionIconClick(t)},this.registerKeyDownHandler_(this.handleKeyDown_),this.registerSurfaceClickHandler_(this.handleSurfaceClick_)},A.prototype.destroy=function(){s.prototype.destroy.call(this),this.deregisterKeyDownHandler_(this.handleKeyDown_),this.deregisterSurfaceClickHandler_(this.handleSurfaceClick_)},A.prototype.open=function(){this.foundation_.open()},A.prototype.close=function(t){void 0===t&&(t=""),this.foundation_.close(t)},A.prototype.getDefaultFoundation=function(){var e=this,t={addClass:function(t){return e.root_.classList.add(t)},announce:function(){return e.announce_(e.labelEl_)},notifyClosed:function(t){return e.emit(g,t?{reason:t}:{})},notifyClosing:function(t){return e.emit(E,t?{reason:t}:{})},notifyOpened:function(){return e.emit(y,{})},notifyOpening:function(){return e.emit(C,{})},removeClass:function(t){return e.root_.classList.remove(t)}};return new l.MDCSnackbarFoundation(t)},Object.defineProperty(A.prototype,"timeoutMs",{get:function(){return this.foundation_.getTimeoutMs()},set:function(t){this.foundation_.setTimeoutMs(t)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"closeOnEscape",{get:function(){return this.foundation_.getCloseOnEscape()},set:function(t){this.foundation_.setCloseOnEscape(t)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"isOpen",{get:function(){return this.foundation_.isOpen()},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"labelText",{get:function(){return this.labelEl_.textContent},set:function(t){this.labelEl_.textContent=t},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"actionButtonText",{get:function(){return this.actionEl_.textContent},set:function(t){this.actionEl_.textContent=t},enumerable:!0,configurable:!0}),A.prototype.registerKeyDownHandler_=function(t){this.listen("keydown",t)},A.prototype.deregisterKeyDownHandler_=function(t){this.unlisten("keydown",t)},A.prototype.registerSurfaceClickHandler_=function(t){this.surfaceEl_.addEventListener("click",t)},A.prototype.deregisterSurfaceClickHandler_=function(t){this.surfaceEl_.removeEventListener("click",t)},A.prototype.isActionButton_=function(t){return Boolean(c.closest(t,f))},A.prototype.isActionIcon_=function(t){return Boolean(c.closest(t,h))},A);function A(){return null!==s&&s.apply(this,arguments)||this}e.MDCSnackbar=m},function(t,n,e){"use strict";function i(t){for(var e in t)n.hasOwnProperty(e)||(n[e]=t[e])}Object.defineProperty(n,"__esModule",{value:!0}),i(e(150)),i(e(83)),i(e(82))},function(t,e,n){"use strict";var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,n=1,i=arguments.length;n trigger.addEventListener('click', e => this.handleOpenEvent(e), false)); - closers.forEach(closer => closer.addEventListener('click', e => this.handleCloseEvent(e), false)); - if (this.overlayElement) { - this.overlayElement.addEventListener('click', e => this.handleCloseEvent(e), false); - } - document.addEventListener('keyup', e => this.handleKeyEvent(e)); - } - - open(pushbarId) { - if (this.activeId === String(pushbarId) || !pushbarId) return; - if (this.activeId && this.activeId !== String(pushbarId)) this.close(); - this.activeId = pushbarId - this.activeElement = document.querySelector(`[data-pushbar-id="${this.activeId}"]`) - if (!this.activeElement) return; - this.emitOpening(); - this.activeElement.classList.add('opened'); - const pageRootElement = document.querySelector('html') - pageRootElement.classList.add('pushbar_locked'); - pageRootElement.setAttribute('pushbar', pushbarId) - } - - close() { - if (!this.activeId) return; - this.emitClosing(); - this.activeElement.classList.remove('opened'); - const pageRootElement = document.querySelector('html') - pageRootElement.classList.remove('pushbar_locked'); - pageRootElement.removeAttribute('pushbar') - this.activeId = null; - this.activeElement = null; - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/logo.png b/Neutron-trunk/resources/logo.png deleted file mode 100644 index fb0c300..0000000 Binary files a/Neutron-trunk/resources/logo.png and /dev/null differ diff --git a/Neutron-trunk/resources/logo.svg b/Neutron-trunk/resources/logo.svg deleted file mode 100644 index ad65280..0000000 --- a/Neutron-trunk/resources/logo.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Neutron-trunk/resources/private/.htaccess b/Neutron-trunk/resources/private/.htaccess deleted file mode 100644 index 2c73686..0000000 --- a/Neutron-trunk/resources/private/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from All \ No newline at end of file diff --git a/Neutron-trunk/resources/private/CodeEditor$2.php b/Neutron-trunk/resources/private/CodeEditor$2.php deleted file mode 100644 index ec4abe9..0000000 --- a/Neutron-trunk/resources/private/CodeEditor$2.php +++ /dev/null @@ -1,39 +0,0 @@ -

- -
- - - - - - \ No newline at end of file diff --git a/Neutron-trunk/resources/private/CodeEditor$3.php b/Neutron-trunk/resources/private/CodeEditor$3.php deleted file mode 100644 index 83b0fa8..0000000 --- a/Neutron-trunk/resources/private/CodeEditor$3.php +++ /dev/null @@ -1,39 +0,0 @@ -

- -
", ">", str_ireplace("<", "<", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json")))) ?>
- - - - - - \ No newline at end of file diff --git a/Neutron-trunk/resources/private/CodeEditor.php b/Neutron-trunk/resources/private/CodeEditor.php deleted file mode 100644 index 9a915ed..0000000 --- a/Neutron-trunk/resources/private/CodeEditor.php +++ /dev/null @@ -1,44 +0,0 @@ -

- -
", ">", str_ireplace("<", "<", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $currentSlug)))) ?>
- - - - - - \ No newline at end of file diff --git a/Neutron-trunk/resources/private/VisualEditor$2.php b/Neutron-trunk/resources/private/VisualEditor$2.php deleted file mode 100644 index e22b9d4..0000000 --- a/Neutron-trunk/resources/private/VisualEditor$2.php +++ /dev/null @@ -1,410 +0,0 @@ -
- - - \ No newline at end of file diff --git a/Neutron-trunk/resources/private/VisualEditor.php b/Neutron-trunk/resources/private/VisualEditor.php deleted file mode 100644 index 7d25ef9..0000000 --- a/Neutron-trunk/resources/private/VisualEditor.php +++ /dev/null @@ -1,416 +0,0 @@ -
- - - \ No newline at end of file diff --git a/Neutron-trunk/resources/private/debug.php b/Neutron-trunk/resources/private/debug.php deleted file mode 100644 index 92e7555..0000000 --- a/Neutron-trunk/resources/private/debug.php +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $srv): ?> - - - - - - -
Neutron Debug
Loaded Files
"); } ?>"); } ?>"); } ?>"); } ?>"); } ?> B"); } ?>
Processing Time
Page Renderingdiff($_FNSN_DUMP_STOPDATE)->f * 1000; ?> ms
System Trace Creationdiff($_FNSN_DUMP_DSTOPDATE)->f * 1000; ?> ms
Software Stack Version
PHP Version
Server OS:@
Neutron Version
Electrode Compat. Layer
JustAWebsite
CyclicCMS
Server Data
-
- Click here to show - - - $srv): ?> - - - - - - - - - - -
[hidden for safety]
-
-
Headers
- - { location.reload() }; -ajaxPageReload = () => { - try { - document.title = "..."; - $('body').fadeOut(200); - $.ajax({ - type: "GET", - dataType: 'html', - url: location.href, - success: function (data) { - document.getElementsByTagName('html')[0].innerHTML = data + ""; - setTimeout(() => { - $('body').fadeIn(200); - }, 500) - }, - error: function (error) { - location.reloadLegacy(); - }, - cache: false, - contentType: false, - processData: false - }); - } catch (err) { - location.reloadLegacy(); - } -} -switchToPage = (url) => { - try { - let stateObj = { - foo: ".", - }; - document.title = "..."; - history.pushState(stateObj, "page 2", "#/loading"); - $('body').fadeOut(200); - $.ajax({ - type: "GET", - dataType: 'html', - url: url, - success: function (data) { - document.getElementsByTagName('html')[0].innerHTML = data + ""; - Array.from(document.getElementsByTagName('script')).forEach((el) => { - if (el.src.trim() == "") { - eval(el.innerHTML); - } - }); - if (location.pathname.startsWith("/cms-special/admin")) { - $.ajax({ - type: "GET", - dataType: 'html', - url: "/cms-special/admin-v2/$resources/admin.js", - success: function (data) { - eval(data); - }, - error: function (error) { - console.error("Unable to load script at " + "/cms-special/admin-v2/$resources/admin.js"); - }, - cache: false, - contentType: false, - processData: false - }); - } - setTimeout(() => { - $('body').fadeIn(200); - history.pushState(stateObj, "page 2", url); - }, 500) - }, - error: function (error) { - console.log(error); - location.href = url; - }, - cache: false, - contentType: false, - processData: false - }); - } catch (err) { - console.log(err); - location.href = url; - } -} \ No newline at end of file diff --git a/Neutron-trunk/resources/private/header.php b/Neutron-trunk/resources/private/header.php deleted file mode 100644 index 51f7886..0000000 --- a/Neutron-trunk/resources/private/header.php +++ /dev/null @@ -1,5 +0,0 @@ - - - - -

- -
-
- - -
-
\ No newline at end of file diff --git a/Neutron-trunk/resources/private/headers/documenthead.php b/Neutron-trunk/resources/private/headers/documenthead.php deleted file mode 100644 index a628016..0000000 --- a/Neutron-trunk/resources/private/headers/documenthead.php +++ /dev/null @@ -1,139 +0,0 @@ -'); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); - echo(''); -} - -// This will run only if the website is ready -if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) { - // Custom settings parser - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json")) { - if (dataValid(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json"))) { - $customSettings = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json")); - if (isset($customSettings->AfficherBoutonAdministration) && isset($customSettings->AdministrationBarreNavigation) && isset($customSettings->RessourcesPersonnalisées) && isset($customSettings->RessourcesPersonnalisées->CSS) && isset($customSettings->RessourcesPersonnalisées->JS) && isset($customSettings->PagesMasquées)) { // If it's using the old system, delete the file and generate a new one. - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json.bak", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json")); - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/private/headers/csettings-base.json")); - $continue = true; - } else { - $continue = true; - } - if ($continue) { - if (isset($customSettings->showAdminButton) && isset($customSettings->customResources) && isset($customSettings->customResources->styles) && isset($customSettings->customResources->script) && isset($customSettings->hiddenPages)) { - if (!$customSettings->showAdminButton) { - echo(""); - } - echo(""); - echo(""); - } else { - require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("

" . $lang["header"]["internalError"][0] . "

" . $lang["header"]["internalError"][1] . "

" . $lang["header"]["internalError"][2] . "/data/webcontent/customSettings.json" . $lang["header"]["internalError"][3] . "


" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version") . " " . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/codename") . ""); - } - } - } else { - require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("

" . $lang["header"]["internalError"][0] . "

" . $lang["header"]["internalError"][4] . "

" . $lang["header"]["internalError"][2] . "/data/webcontent/customSettings.json" . $lang["header"]["internalError"][3] . "


" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version") . " " . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/codename") . ""); - } - } else { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/private/headers/csettings-base.json")); - } -} - -if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/styles.css")) { - echo(''); // Custom styles loader -} -echo(''); // JQuery, used at almost all pages - -echo(""); // Global Scripts - -?> - - diff --git a/Neutron-trunk/resources/private/headers/preprocessor.php b/Neutron-trunk/resources/private/headers/preprocessor.php deleted file mode 100644 index 673a62d..0000000 --- a/Neutron-trunk/resources/private/headers/preprocessor.php +++ /dev/null @@ -1,226 +0,0 @@ -_neutronMigrationDone)) { - $widgets = $json->list; - - $index = 0; - foreach ($widgets as $widget) { - if ($widget === "notes" || $widget === "contact") { - array_splice($widgets, $index, 1); - } - $index++; - } - - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json", json_encode([ - "list" => $widgets, - "_neutronMigrationDone" => true - ])); - } -} - -global $__root; - -$_MD_INCLUDES = $GLOBALS["SYSTEM_ROOT"] . "/resources/lib/material"; // Path to Material Design files, can be changed if files are bundled with the code -$_MDI_PATH = $GLOBALS["SYSTEM_ROOT"] . "/resources/lib/material/iconfont.css"; // Path to Material Icons font, can be changed if files are bundled with the code - -// Generate favicon if not yet generated -if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/favicon.png") && $ready) { - require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/favicon.php"; -} - -// Dark/light/dynamic theme + color -if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/theme") && $ready) { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/theme", "auto"); -} - -if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/color") && $ready) { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/color", "blue"); -} - -// Trim Build Values -try { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version", trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version"))); -} catch (E_WARNING $err) {} -try { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/api/codename", trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/codename"))); -} catch (E_WARNING $err) {} -try { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/api/experimental", trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/experimental"))); -} catch (E_WARNING $err) {} -try { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/api/public", trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/public"))); -} catch (E_WARNING $err) {} -try { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/api/bugs", trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/bugs"))); -} catch (E_WARNING $err) {} - -// Functions to get localized name and description of a plugin -function getDescription($config) { - $langsel = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang"); - - if (isset($config->description->$langsel)) { - return $config->description->$langsel; - } else { - return $config->description->en; - } -} - -function getName($config) { - $langsel = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang"); - - if (isset($config->name->$langsel)) { - return $config->name->$langsel; - } else { - return $config->name->en; - } -} - -// Language Loader -require $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; - -if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache") && $ready) { // Cache directory - mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache"); -} - -// Function to check if a JSON string is valid -function dataValid($string) { - json_decode($string); - return (json_last_error() == JSON_ERROR_NONE); -} - -// Custom Styles, create directory -if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/styles.json")) { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/styles.json", "[]"); -} - -// Connections Log -if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") && $ready) { - if (strpos($_SERVER['HTTP_USER_AGENT'], "MinteckProjectsAutoUptime") !== false) {} else { // Don't log for Auto-Uptime bot - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - INTERFACE/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); - } -} else { - if (strpos($_SERVER['HTTP_USER_AGENT'], "MinteckProjectsAutoUptime") !== false || !$ready) {} else { // Don't log for Auto-Uptime bot - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - INTERFACE/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); - } -} - -// Migrate old "adminkey" to new "authkey" -if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/adminkey")) { - copy($_SERVER['DOCUMENT_ROOT'] . "/data/adminkey", $_SERVER['DOCUMENT_ROOT'] . "/data/authkey"); - unlink($_SERVER['DOCUMENT_ROOT'] . "/data/adminkey"); -} - -/* Old statistics system, not used anymore */ -/*try { // Failing is not important - // Statistics directory - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/stats")) {} else { - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) { - mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/stats"); - } - } - - // Only if website ready - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/")) { - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/stats/" . date("Y-m-d"))) { - if (strpos($_SERVER['HTTP_USER_AGENT'], "MinteckProjectsAutoUptime") !== false) {} else { // Don't log for Auto-Uptime bot - (int)$actual = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/stats/" . date("Y-m-d")); - $actual = $actual + 1; - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/stats/" . date("Y-m-d"), $actual); - } - } else { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/stats/" . date("Y-m-d"), "1"); - } - } -} catch (E_WARNING $err) { -}*/ - -// New statistics system -if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats")) {} else { - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) { - mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats"); - } -} - -if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/")) { - if (isset($_SERVER['REMOTE_ADDR']) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats")) { - //$hash = @password_hash($_SERVER['REMOTE_ADDR'], PASSWORD_DEFAULT, [ "salt" => "net.minteckprojects.fns.neutron.stats" ]); // Storing IP addresses is illegal in EU, so just a hashed IP addresses - $hash = md5($_SERVER['REMOTE_ADDR']); // Changed to MD5 sum instead of encrypted IP because salt not supported anymore - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y'))) {} else { - mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y')); - } - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y') . "/" . date('m'))) {} else { - mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y') . "/" . date('m')); - } - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y') . "/" . date('m') . "/" . date('d'))) { - $file = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y') . "/" . date('m') . "/" . date('d')); - $lines = explode("\n", $file); - - $already = false; - foreach ($lines as $line) { - if (trim($line) == "" || trim($line) == "\n") {} else { - if (trim($line) == trim($hash)) { - $already = true; - } - } - } - - if (!$already) { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y') . "/" . date('m') . "/" . date('d'), file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y') . "/" . date('m') . "/" . date('d')) . $hash . "\n"); - } - } else { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/newstats/" . date('Y') . "/" . date('m') . "/" . date('d'), $hash . "\n"); - } - } -} - -// Check for updates at random intervals -if (rand(0, 10) == 5) { - try { - $version = explode("-", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version"))[0]; - $json = json_decode(@file_get_contents(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/update") . "/" . $version . "/updates.json")); - - if (isset($json)) { - if (json_last_error() != JSON_ERROR_NONE) { - $updates = -1; - } - - if ($json->version->name != $version) { - $updates = -1; - } - - foreach ($json->updates as $update) { - if (!isset($updates)) { - $updates = 1; - } - } - - if (!isset($updates)) { - $updates = 0; - } - } else { - $updates = -1; - } - - if ($updates == 1) { - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/updates", ""); - } else { - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/updates")) { - unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/updates"); - } - } - } catch (E_WARNING $err) {} -} diff --git a/Neutron-trunk/resources/private/license b/Neutron-trunk/resources/private/license deleted file mode 100644 index 6a62c67..0000000 --- a/Neutron-trunk/resources/private/license +++ /dev/null @@ -1,15 +0,0 @@ -Neutron, a new way to design your websites -Copyright (C) 2019-%year% Minteck - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . \ No newline at end of file diff --git a/Neutron-trunk/resources/private/relative.php b/Neutron-trunk/resources/private/relative.php deleted file mode 100644 index a42a87f..0000000 --- a/Neutron-trunk/resources/private/relative.php +++ /dev/null @@ -1,35 +0,0 @@ -