summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dashboard/css/dashboard.css48
-rw-r--r--apps/dashboard/css/dashboard.css.map1
-rw-r--r--apps/dashboard/src/components/BackgroundSettings.vue2
-rw-r--r--apps/encryption/css/settings-personal.css16
-rw-r--r--apps/encryption/css/settings-personal.css.map1
-rw-r--r--apps/federatedfilesharing/css/settings-admin.css5
-rw-r--r--apps/federatedfilesharing/css/settings-admin.css.map1
-rw-r--r--apps/federatedfilesharing/css/settings-personal.css107
-rw-r--r--apps/federatedfilesharing/css/settings-personal.css.map1
-rw-r--r--apps/files/css/detailsView.css133
-rw-r--r--apps/files/css/detailsView.css.map1
-rw-r--r--apps/files/css/files.css1297
-rw-r--r--apps/files/css/files.css.map1
-rw-r--r--apps/files/css/merged.css1831
-rw-r--r--apps/files/css/merged.css.map1
-rw-r--r--apps/files/css/mobile.css112
-rw-r--r--apps/files/css/mobile.css.map1
-rw-r--r--apps/files/css/upload.css264
-rw-r--r--apps/files/css/upload.css.map1
-rw-r--r--apps/files_external/css/settings.css177
-rw-r--r--apps/files_external/css/settings.css.map1
-rw-r--r--apps/files_sharing/css/icons.css94
-rw-r--r--apps/files_sharing/css/icons.css.map1
-rw-r--r--apps/files_sharing/css/mobile.css86
-rw-r--r--apps/files_sharing/css/mobile.css.map1
-rw-r--r--apps/files_sharing/css/public.css237
-rw-r--r--apps/files_sharing/css/public.css.map1
-rw-r--r--apps/files_sharing/css/publicView.css320
-rw-r--r--apps/files_sharing/css/publicView.css.map1
-rw-r--r--apps/files_sharing/src/components/SharingInput.vue2
-rw-r--r--apps/settings/css/settings.css1598
-rw-r--r--apps/settings/css/settings.css.map1
-rw-r--r--apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue2
-rw-r--r--apps/theming/css/default.css3
-rw-r--r--apps/theming/css/settings-admin.css132
-rw-r--r--apps/theming/css/settings-admin.css.map1
-rw-r--r--apps/theming/css/theming.css17
-rw-r--r--apps/theming/css/theming.scss285
-rw-r--r--apps/theming/lib/Themes/DefaultTheme.php5
-rw-r--r--apps/updatenotification/src/components/UpdateNotification.vue2
-rw-r--r--apps/user_status/css/user-status-menu.css101
-rw-r--r--apps/user_status/css/user-status-menu.css.map1
-rw-r--r--apps/workflowengine/src/components/Event.vue2
-rwxr-xr-xbuild/vue-builds.sh54
-rw-r--r--core/css/apps.css1575
-rw-r--r--core/css/apps.css.map1
-rw-r--r--core/css/apps.scss10
-rw-r--r--core/css/fixes.css7
-rw-r--r--core/css/fixes.css.map1
-rw-r--r--core/css/functions.css38
-rw-r--r--core/css/functions.css.map1
-rw-r--r--core/css/global.css50
-rw-r--r--core/css/global.css.map1
-rw-r--r--core/css/header.css644
-rw-r--r--core/css/header.css.map1
-rw-r--r--core/css/icons.css206
-rw-r--r--core/css/icons.css.map1
-rw-r--r--core/css/inputs.css1039
-rw-r--r--core/css/inputs.css.map1
-rw-r--r--core/css/inputs.scss24
-rw-r--r--core/css/mobile.css198
-rw-r--r--core/css/mobile.css.map1
-rw-r--r--core/css/public.css72
-rw-r--r--core/css/public.css.map1
-rw-r--r--core/css/server.css5178
-rw-r--r--core/css/server.css.map1
-rw-r--r--core/css/styles.css1181
-rw-r--r--core/css/styles.css.map1
-rw-r--r--core/css/styles.scss9
-rw-r--r--core/css/systemtags.css86
-rw-r--r--core/css/systemtags.css.map1
-rw-r--r--core/css/toast.css111
-rw-r--r--core/css/toast.css.map1
-rw-r--r--core/css/tooltip.css125
-rw-r--r--core/css/tooltip.css.map1
-rw-r--r--core/css/variables.css24
-rw-r--r--core/css/variables.css.map1
-rw-r--r--core/css/whatsnew.css32
-rw-r--r--core/css/whatsnew.css.map1
-rw-r--r--core/src/icons.js1
-rw-r--r--dist/icons.css3
-rw-r--r--dist/workflowengine-workflowengine.js4
-rw-r--r--dist/workflowengine-workflowengine.js.map2
-rw-r--r--lib/composer/autoload.php2
-rw-r--r--lib/composer/composer/autoload_real.php8
-rw-r--r--lib/composer/composer/autoload_static.php10
-rw-r--r--package-lock.json308
-rw-r--r--package.json3
-rw-r--r--webpack.common.js6
89 files changed, 17393 insertions, 528 deletions
diff --git a/apps/dashboard/css/dashboard.css b/apps/dashboard/css/dashboard.css
new file mode 100644
index 00000000000..ea01e0f771b
--- /dev/null
+++ b/apps/dashboard/css/dashboard.css
@@ -0,0 +1,48 @@
+.skip-navigation:not(.skip-content) {
+ display: none;
+}
+
+.skip-navigation.skip-content {
+ left: 3px;
+}
+
+#header {
+ background: transparent !important;
+ --color-header: rgba(24, 24, 24, 1);
+}
+#body-user.dashboard--dark #header {
+ --color-header: rgba(255, 255, 255, 1);
+}
+#header:before {
+ content: " ";
+ display: block;
+ position: absolute;
+ background-image: linear-gradient(180deg, var(--color-header) 0%, transparent 100%);
+ width: 100%;
+ height: 70px;
+ top: 0;
+ margin-top: -70px;
+ transition: margin-top var(--animation-slow);
+}
+#body-user.dashboard--scrolled #header:before {
+ margin-top: 0;
+}
+#body-user.theme--highcontrast #header {
+ background-color: var(--color-header) !important;
+}
+#body-user.theme--highcontrast #header:before {
+ display: none;
+}
+
+#content {
+ padding-top: 0 !important;
+}
+
+#appmenu li a.active::before,
+#appmenu li:hover a::before,
+#appmenu li:hover a.active::before,
+#appmenu li a:focus::before {
+ display: none !important;
+}
+
+/*# sourceMappingURL=dashboard.css.map */
diff --git a/apps/dashboard/css/dashboard.css.map b/apps/dashboard/css/dashboard.css.map
new file mode 100644
index 00000000000..15b99dd3883
--- /dev/null
+++ b/apps/dashboard/css/dashboard.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["dashboard.scss"],"names":[],"mappings":"AACA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;;AAEA;EACC;;;AAMH;EACC;;;AAID;AAAA;AAAA;AAAA;EAIC","file":"dashboard.css"} \ No newline at end of file
diff --git a/apps/dashboard/src/components/BackgroundSettings.vue b/apps/dashboard/src/components/BackgroundSettings.vue
index bd2154e89a7..3fd82768267 100644
--- a/apps/dashboard/src/components/BackgroundSettings.vue
+++ b/apps/dashboard/src/components/BackgroundSettings.vue
@@ -174,7 +174,7 @@ export default {
}
&.active:not(.icon-loading):after {
- background-image: var(--icon-checkmark-fff);
+ background-image: var(--icon-checkmark-white);
background-repeat: no-repeat;
background-position: center;
background-size: 44px;
diff --git a/apps/encryption/css/settings-personal.css b/apps/encryption/css/settings-personal.css
new file mode 100644
index 00000000000..9b795f05382
--- /dev/null
+++ b/apps/encryption/css/settings-personal.css
@@ -0,0 +1,16 @@
+/* Copyright (c) 2013, Sam Tuke, <samtuke@owncloud.com>
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+#encryptAllError,
+#encryptAllSuccess,
+#recoveryEnabledError,
+#recoveryEnabledSuccess {
+ display: none;
+}
+
+/* icons for sidebar */
+.nav-icon-basic-encryption-module {
+ background-image: var(--icon-encryption-dark);
+}
+
+/*# sourceMappingURL=settings-personal.css.map */
diff --git a/apps/encryption/css/settings-personal.css.map b/apps/encryption/css/settings-personal.css.map
new file mode 100644
index 00000000000..979a14d9aec
--- /dev/null
+++ b/apps/encryption/css/settings-personal.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["settings-personal.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;EACC","file":"settings-personal.css"} \ No newline at end of file
diff --git a/apps/federatedfilesharing/css/settings-admin.css b/apps/federatedfilesharing/css/settings-admin.css
new file mode 100644
index 00000000000..d043ebae43b
--- /dev/null
+++ b/apps/federatedfilesharing/css/settings-admin.css
@@ -0,0 +1,5 @@
+#fileSharingSettings h2 {
+ display: inline-block;
+}
+
+/*# sourceMappingURL=settings-admin.css.map */
diff --git a/apps/federatedfilesharing/css/settings-admin.css.map b/apps/federatedfilesharing/css/settings-admin.css.map
new file mode 100644
index 00000000000..9b1d105e143
--- /dev/null
+++ b/apps/federatedfilesharing/css/settings-admin.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["settings-admin.scss"],"names":[],"mappings":"AAAA;EACC","file":"settings-admin.css"} \ No newline at end of file
diff --git a/apps/federatedfilesharing/css/settings-personal.css b/apps/federatedfilesharing/css/settings-personal.css
new file mode 100644
index 00000000000..16e482beecc
--- /dev/null
+++ b/apps/federatedfilesharing/css/settings-personal.css
@@ -0,0 +1,107 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+#fileSharingSettings h2 {
+ display: inline-block;
+}
+
+#fileSharingSettings img {
+ cursor: pointer;
+}
+
+#fileSharingSettings xmp {
+ margin-top: 0;
+ white-space: pre-wrap;
+}
+
+#fileSharingSettings .icon {
+ background-size: 16px 16px;
+ display: inline-block;
+ position: relative;
+ top: 3px;
+ margin-left: 5px;
+}
+
+[class^=social-], [class*=" social-"] {
+ background-repeat: no-repeat;
+ background-position: 8px;
+ min-width: 16px;
+ min-height: 16px;
+ padding-left: 28px;
+ background-size: 16px;
+}
+
+.social-diaspora {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-social-diaspora-dark);
+}
+
+.social-twitter {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-social-twitter-dark);
+}
+
+.social-facebook {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-social-facebook-dark);
+}
+
+.social_sharing_buttons {
+ padding-left: 30px !important;
+}
+
+/*# sourceMappingURL=settings-personal.css.map */
diff --git a/apps/federatedfilesharing/css/settings-personal.css.map b/apps/federatedfilesharing/css/settings-personal.css.map
new file mode 100644
index 00000000000..490e82ccb28
--- /dev/null
+++ b/apps/federatedfilesharing/css/settings-personal.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","../../../core/css/functions.scss","settings-personal.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC/CA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AD8BC;EAEA;;;AC7BD;AD2BC;EAEA;;;AC1BD;ADwBC;EAEA;;;ACtBD;EACC","file":"settings-personal.css"} \ No newline at end of file
diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css
new file mode 100644
index 00000000000..46c2eeabe36
--- /dev/null
+++ b/apps/files/css/detailsView.css
@@ -0,0 +1,133 @@
+.app-sidebar .detailFileInfoContainer {
+ min-height: 50px;
+ padding: 15px;
+}
+
+.app-sidebar .detailFileInfoContainer > div {
+ clear: both;
+}
+
+.app-sidebar .mainFileInfoView .icon {
+ display: inline-block;
+ background-size: 16px 16px;
+}
+
+.app-sidebar .mainFileInfoView .permalink {
+ padding: 6px 10px;
+ vertical-align: top;
+ opacity: 0.6;
+}
+.app-sidebar .mainFileInfoView .permalink:hover, .app-sidebar .mainFileInfoView .permalink:focus {
+ opacity: 1;
+}
+
+.app-sidebar .mainFileInfoView .permalink-field > input {
+ clear: both;
+ width: 90%;
+}
+
+.app-sidebar .thumbnailContainer.large {
+ margin-left: -15px;
+ margin-right: -35px;
+ /* 15 + 20 for the close button */
+ margin-top: -15px;
+}
+
+.app-sidebar .thumbnailContainer.large.portrait {
+ margin: 0;
+ /* if we don't fit the image anyway we give it back the margin */
+}
+
+.app-sidebar .large .thumbnail {
+ width: 100%;
+ display: block;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 100%;
+ float: none;
+ margin: 0;
+ height: auto;
+}
+
+.app-sidebar .large .thumbnail .stretcher {
+ content: "";
+ display: block;
+ padding-bottom: 56.25%;
+ /* sets height of .thumbnail to 9/16 of the width */
+}
+
+.app-sidebar .large.portrait .thumbnail {
+ background-position: 50% top;
+}
+
+.app-sidebar .large.portrait .thumbnail {
+ background-size: contain;
+}
+
+.app-sidebar .large.text {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding-top: 14px;
+ font-size: 80%;
+ margin-left: 0;
+}
+
+.app-sidebar .thumbnail {
+ width: 100%;
+ min-height: 75px;
+ display: inline-block;
+ float: left;
+ margin-right: 10px;
+ background-size: contain;
+ background-repeat: no-repeat;
+}
+
+.app-sidebar .ellipsis {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.app-sidebar .fileName {
+ font-size: 16px;
+ padding-top: 13px;
+ padding-bottom: 3px;
+}
+
+.app-sidebar .fileName h3 {
+ width: calc(100% - 42px);
+ /* 36px is the with of the copy link icon, but this breaks so we add some more to be sure */
+ display: inline-block;
+ padding: 5px 0;
+ margin: -5px 0;
+}
+
+.app-sidebar .file-details {
+ color: var(--color-text-maxcontrast);
+}
+
+.app-sidebar .action-favorite {
+ vertical-align: sub;
+ padding: 10px;
+ margin: -10px;
+}
+
+.app-sidebar .action-favorite > span {
+ opacity: 0.7 !important;
+}
+
+.app-sidebar .detailList {
+ float: left;
+}
+
+.app-sidebar .close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ opacity: 0.5;
+ z-index: 1;
+ width: 44px;
+ height: 44px;
+}
+
+/*# sourceMappingURL=detailsView.css.map */
diff --git a/apps/files/css/detailsView.css.map b/apps/files/css/detailsView.css.map
new file mode 100644
index 00000000000..30726744caf
--- /dev/null
+++ b/apps/files/css/detailsView.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["detailsView.scss"],"names":[],"mappings":"AAAA;EACC;EACA;;;AAGD;EACC;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EAEC;;;AAGF;EACC;EACA;;;AAGD;EACC;EACA;AAAqB;EACrB;;;AAGD;EACC;AAAW;;;AAGZ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;AAAwB;;;AAGzB;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;AAA0B;EAC1B;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"detailsView.css"} \ No newline at end of file
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
new file mode 100644
index 00000000000..eb465b71cdb
--- /dev/null
+++ b/apps/files/css/files.css
@@ -0,0 +1,1297 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
+ * @copyright Copyright (c) 2019, Fabian Dreßler <nudelsalat@clouz.de>
+ *
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* FILE MENU */
+.actions {
+ padding: 5px;
+ height: 100%;
+ display: inline-block;
+ float: left;
+}
+
+.actions input, .actions button, .actions .button {
+ margin: 0;
+ float: left;
+}
+
+.actions .button a {
+ color: #555;
+}
+
+.actions .button a:hover,
+.actions .button a:focus {
+ background-color: var(--color-background-hover);
+}
+
+.actions .button a:active {
+ background-color: var(--color-primary-light);
+}
+
+.actions.creatable {
+ position: relative;
+ display: flex;
+ flex: 1 1;
+}
+.actions.creatable .button:not(:last-child) {
+ margin-right: 3px;
+}
+
+.actions.hidden {
+ display: none;
+}
+
+#trash {
+ margin-right: 8px;
+ float: right;
+ z-index: 1010;
+ padding: 10px;
+ font-weight: normal;
+}
+
+.newFileMenu .error,
+.newFileMenu .error + .icon-confirm,
+#fileList .error {
+ color: var(--color-error);
+ border-color: var(--color-error);
+}
+
+/* FILE TABLE */
+#filestable {
+ position: relative;
+ width: 100%;
+ min-width: 250px;
+ display: block;
+ flex-direction: column;
+ /**
+ * This is a dirty hack as the sticky header requires us to use a different display type on the table element
+ */
+}
+#emptycontent:not(.hidden) ~ #filestable {
+ display: none;
+}
+#filestable thead {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 50px;
+ z-index: 60;
+ display: block;
+ background-color: var(--color-main-background-translucent);
+}
+#filestable tbody {
+ display: table;
+ width: 100%;
+}
+#filestable tbody tr[data-permissions="0"],
+#filestable tbody tr[data-permissions="16"] {
+ background-color: var(--color-background-dark);
+}
+#filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext,
+#filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext {
+ color: var(--color-text-maxcontrast);
+}
+
+#filestable.hidden {
+ display: none;
+}
+
+/* fit app list view heights */
+.app-files #app-content > .viewcontainer {
+ min-height: 0%;
+ width: 100%;
+}
+
+.app-files #app-content {
+ width: calc(100% - 300px);
+}
+
+.file-drag, .file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover {
+ background-color: var(--color-primary-light) !important;
+}
+
+.app-files #app-content.dir-drop {
+ background-color: var(--color-main-background) !important;
+}
+
+.file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover {
+ background-color: transparent !important;
+}
+
+.app-files #app-content.dir-drop #filestable tbody tr.dropping-to-dir {
+ background-color: var(--color-primary-light) !important;
+}
+
+/* icons for sidebar */
+.nav-icon-files {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-folder-dark);
+}
+
+.nav-icon-recent {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-recent-dark);
+}
+
+.nav-icon-favorites {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-starred-dark);
+}
+
+.nav-icon-sharingin,
+.nav-icon-sharingout,
+.nav-icon-pendingshares,
+.nav-icon-shareoverview {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-share-dark);
+}
+
+.nav-icon-sharinglinks {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-public-dark);
+}
+
+.nav-icon-extstoragemounts {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-external-dark);
+}
+
+.nav-icon-trashbin {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-delete-dark);
+}
+
+.nav-icon-trashbin-starred {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-delete-#ff0000);
+}
+
+.nav-icon-deletedshares {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-unshare-dark);
+}
+
+.nav-icon-favorites-starred {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-starred-yellow);
+}
+
+#app-navigation .nav-files a.nav-icon-files {
+ width: auto;
+}
+
+/* button needs overrides due to navigation styles */
+#app-navigation .nav-files a.new {
+ width: 40px;
+ height: 32px;
+ padding: 0 10px;
+ margin: 0;
+ cursor: pointer;
+}
+
+#app-navigation .nav-files a.new.hidden {
+ display: none;
+}
+
+#app-navigation .nav-files a.new.disabled {
+ opacity: 0.3;
+}
+
+#filestable tbody tr {
+ height: 51px;
+}
+
+#filestable tbody tr:hover,
+#filestable tbody tr:focus,
+#filestable tbody .name:focus,
+#filestable tbody tr:hover .filename form,
+table tr.mouseOver td {
+ background-color: var(--color-background-hover);
+}
+
+#filestable tbody tr:active,
+#filestable tbody tr.highlighted,
+#filestable tbody tr.highlighted .name:focus,
+#filestable tbody tr.selected,
+#filestable tbody tr.searchresult {
+ background-color: var(--color-primary-light);
+}
+
+tbody a {
+ color: var(--color-main-text);
+}
+
+span.conflict-path, span.extension, span.uploading, td.date {
+ color: var(--color-text-maxcontrast);
+}
+
+span.conflict-path, span.extension {
+ -webkit-transition: opacity 300ms;
+ -moz-transition: opacity 300ms;
+ -o-transition: opacity 300ms;
+ transition: opacity 300ms;
+ vertical-align: top;
+}
+
+tr:hover span.conflict-path,
+tr:focus span.conflict-path,
+tr:hover span.extension,
+tr:focus span.extension {
+ opacity: 1;
+ color: var(--color-text-maxcontrast);
+}
+
+table th, table th a {
+ color: var(--color-text-maxcontrast);
+}
+
+table.multiselect th a {
+ color: var(--color-main-text);
+}
+
+table th .columntitle {
+ display: block;
+ padding: 15px;
+ height: 50px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ vertical-align: middle;
+}
+
+table.multiselect th .columntitle {
+ display: inline-block;
+ margin-right: -20px;
+}
+
+table th .columntitle.name {
+ padding-left: 0;
+ margin-left: 44px;
+}
+
+table.multiselect th .columntitle.name {
+ margin-left: 0;
+}
+
+table th .sort-indicator {
+ width: 10px;
+ height: 8px;
+ margin-left: 5px;
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.3;
+}
+
+.sort-indicator.hidden,
+.multiselect .sort-indicator,
+table.multiselect th:hover .sort-indicator.hidden,
+table.multiselect th:focus .sort-indicator.hidden {
+ visibility: hidden;
+}
+
+.multiselect .sort, .multiselect .sort span {
+ cursor: default;
+}
+
+table th:hover .sort-indicator.hidden,
+table th:focus .sort-indicator.hidden {
+ visibility: visible;
+}
+
+table th,
+table td {
+ border-bottom: 1px solid var(--color-border);
+ text-align: left;
+ font-weight: normal;
+}
+
+table td {
+ padding: 0 15px;
+ font-style: normal;
+ background-position: 8px center;
+ background-repeat: no-repeat;
+}
+
+table th#headerName {
+ position: relative;
+ width: 9999px;
+ /* not really sure why this works better than 100% … table styling */
+ padding: 0;
+}
+
+#headerName-container {
+ position: relative;
+ height: 50px;
+}
+
+table th#headerSelection {
+ padding-top: 2px;
+}
+
+table th#headerSize, table td.filesize {
+ text-align: right;
+}
+
+table th#headerDate, table td.date,
+table th.column-last, table td.column-last {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ /* this can not be just width, both need to be set … table styling */
+ min-width: 130px;
+ max-width: 130px;
+}
+
+#app-content-files thead,
+#app-content-trashbin thead {
+ top: 94px;
+}
+
+#app-content-recent,
+#app-content-favorites,
+#app-content-shareoverview,
+#app-content-sharingout,
+#app-content-sharingin,
+#app-content-sharinglinks,
+#app-content-deletedshares,
+#app-content-pendingshares {
+ margin-top: 22px;
+}
+
+table.multiselect thead th {
+ background-color: var(--color-main-background-translucent);
+ font-weight: bold;
+}
+
+#app-content.with-app-sidebar table.multiselect thead {
+ margin-right: 27%;
+}
+
+table.multiselect #headerName {
+ position: relative;
+ width: 9999px;
+ /* when we use 100%, the styling breaks on mobile … table styling */
+}
+
+table.multiselect #modified {
+ display: none;
+}
+
+table td.selection,
+table th.selection,
+table td.fileaction {
+ width: 32px;
+ text-align: center;
+}
+
+table td.filename a.name,
+table td.filename p.name {
+ display: flex;
+ position: relative;
+ /* Firefox needs to explicitly have this default set … */
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ height: 50px;
+ line-height: 50px;
+ padding: 0;
+}
+
+table td.filename .thumbnail-wrapper {
+ /* we need this to make sure flex is working inside a table cell */
+ width: 0;
+ min-width: 50px;
+ max-width: 50px;
+ height: 50px;
+}
+
+table td.filename .thumbnail-wrapper.icon-loading-small:after {
+ z-index: 10;
+}
+table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail {
+ opacity: 0.2;
+}
+
+table td.filename .thumbnail {
+ display: inline-block;
+ width: 32px;
+ height: 32px;
+ background-size: 32px;
+ margin-left: 9px;
+ margin-top: 9px;
+ border-radius: var(--border-radius);
+ cursor: pointer;
+ position: absolute;
+ z-index: 4;
+}
+
+table td.filename p.name .thumbnail {
+ cursor: default;
+}
+
+table tr[data-has-preview=true] .thumbnail {
+ border: 1px solid var(--color-border);
+}
+
+table td.filename input.filename {
+ width: 70%;
+ margin-left: 48px;
+ cursor: text;
+}
+
+table td.filename form {
+ margin-top: -40px;
+ position: relative;
+ top: -6px;
+}
+
+table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete {
+ padding: 3px 8px 8px 3px;
+}
+
+table td.filename .nametext, .modified, .column-last > span:first-child {
+ float: left;
+ padding: 15px 0;
+}
+
+.modified, .column-last > span:first-child {
+ position: relative;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 110px;
+}
+
+/* TODO fix usability bug (accidental file/folder selection) */
+table td.filename {
+ max-width: 0;
+}
+table td.filename .nametext {
+ width: 0;
+ flex-grow: 1;
+ display: flex;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ height: 100%;
+ z-index: 10;
+ padding: 0 20px 0 0;
+}
+
+.hide-hidden-files #filestable #fileList tr.hidden-file,
+.hide-hidden-files #filestable #fileList tr.hidden-file.dragging {
+ display: none;
+}
+
+#fileList tr.animate-opacity {
+ -webkit-transition: opacity 250ms;
+ -moz-transition: opacity 250ms;
+ -o-transition: opacity 250ms;
+ transition: opacity 250ms;
+}
+
+#fileList tr.dragging {
+ opacity: 0.2;
+}
+
+table td.filename .nametext .innernametext {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ position: relative;
+ vertical-align: top;
+}
+
+/* for smaller resolutions - see mobile.css */
+table td.filename .uploadtext {
+ position: absolute;
+ font-weight: normal;
+ margin-left: 50px;
+ left: 0;
+ bottom: 0;
+ height: 20px;
+ padding: 0 4px;
+ padding-left: 1px;
+ font-size: 11px;
+ line-height: 22px;
+ color: var(--color-text-maxcontrast);
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+table td.selection {
+ padding: 0;
+}
+
+/* File checkboxes */
+#fileList tr td.selection > .selectCheckBox + label:before {
+ opacity: 0.3;
+ margin-right: 0;
+}
+
+/* Show checkbox with full opacity when hovering, checked, or selected */
+#fileList tr:hover td.selection > .selectCheckBox + label:before,
+#fileList tr:focus td.selection > .selectCheckBox + label:before,
+#fileList tr td.selection > .selectCheckBox:checked + label:before,
+#fileList tr.selected td.selection > .selectCheckBox + label:before {
+ opacity: 1;
+}
+
+/* Show checkbox with half opacity when selecting range */
+#fileList tr.halfselected td.selection > .selectCheckBox + label:before {
+ opacity: 0.5;
+}
+
+/* Use label to have bigger clickable size for checkbox */
+#fileList tr td.selection > .selectCheckBox + label,
+.select-all + label {
+ padding: 16px;
+}
+#fileList tr td.selection > .selectCheckBox:focus + label,
+.select-all:focus + label {
+ background-color: var(--color-background-hover);
+ border-radius: var(--border-radius-pill);
+}
+
+#fileList tr td.selection > .selectCheckBox:focus-visible + label,
+.select-all:focus-visible + label {
+ outline-offset: 0px;
+}
+
+#fileList tr td.filename {
+ position: relative;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+ -webkit-transition: background-image 500ms;
+ -moz-transition: background-image 500ms;
+ -o-transition: background-image 500ms;
+ transition: background-image 500ms;
+}
+
+#fileList tr td.filename a.name label,
+#fileList tr td.filename p.name label {
+ position: absolute;
+ width: 80%;
+ height: 50px;
+}
+
+#fileList tr td.filename .favorite {
+ display: inline-block;
+ float: left;
+}
+
+#fileList tr td.filename .favorite-mark {
+ position: absolute;
+ display: block;
+ top: -6px;
+ right: -6px;
+ line-height: 100%;
+ text-align: center;
+}
+
+#uploadsize-message, #delete-confirm {
+ display: none;
+}
+
+/* File actions */
+.fileactions {
+ z-index: 50;
+}
+
+.busy .fileactions, .busy .action {
+ visibility: hidden;
+}
+
+/* fix position of bubble pointer for Files app */
+.bubble,
+#app-navigation .app-navigation-entry-menu {
+ border-top-right-radius: 3px;
+ min-width: 100px;
+}
+
+/* force show the loading icon, not only on hover */
+#fileList .icon-loading-small {
+ opacity: 1 !important;
+ display: inline !important;
+}
+
+#fileList .action.action-share-notification span, #fileList a.name {
+ cursor: default !important;
+}
+
+/*
+ * Make the disabled link look not like a link in file list rows
+ */
+#fileList a.name.disabled * {
+ cursor: default;
+}
+#fileList a.name.disabled a, #fileList a.name.disabled a * {
+ cursor: pointer;
+}
+#fileList a.name.disabled:focus {
+ background: none;
+}
+
+a.action > img {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+}
+
+/* Actions for selected files */
+.selectedActions {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.selectedActions.hidden {
+ display: none;
+}
+
+.selectedActions a {
+ display: inline;
+ line-height: 50px;
+ padding: 16px 5px;
+}
+
+.selectedActions a.hidden {
+ display: none;
+}
+
+.selectedActions a img {
+ position: relative;
+ vertical-align: text-bottom;
+ margin-bottom: -1px;
+}
+
+.selectedActions .actions-selected .icon-more {
+ margin-top: -3px;
+}
+
+#fileList td a a.action {
+ display: inline;
+ padding: 17px 8px;
+ line-height: 50px;
+ opacity: 0.3;
+}
+#fileList td a a.action.action-share {
+ padding: 17px 14px;
+}
+#fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared + span {
+ /* hide text of the share action */
+ /* .hidden-visually for accessbility */
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+#fileList td a a.action.action-share .avatar {
+ display: inline-block;
+ vertical-align: middle;
+}
+#fileList td a a.action.action-menu {
+ padding-top: 17px;
+ padding-bottom: 17px;
+ padding-left: 14px;
+ padding-right: 14px;
+}
+#fileList td a a.action.no-permission:hover, #fileList td a a.action.no-permission:focus {
+ opacity: 0.3;
+}
+#fileList td a a.action.disabled:hover, #fileList td a a.action.disabled:focus,
+#fileList td a a.action.disabled img {
+ opacity: 0.3;
+}
+#fileList td a a.action.disabled.action-download {
+ opacity: 0.7;
+}
+#fileList td a a.action.disabled.action-download:hover, #fileList td a a.action.disabled.action-download:focus {
+ opacity: 0.7;
+}
+#fileList td a a.action:hover, #fileList td a a.action:focus {
+ opacity: 1;
+}
+#fileList td a a.action:focus {
+ background-color: var(--color-background-hover);
+ border-radius: var(--border-radius-pill);
+}
+#fileList td a .fileActionsMenu a.action, #fileList td a a.action.action-share.shared-style {
+ opacity: 0.7;
+}
+#fileList td a .fileActionsMenu .action.permanent {
+ opacity: 1;
+}
+
+#fileList .action.action-share.permanent.shared-style span:not(.icon) {
+ display: inline-block;
+ max-width: 70px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: middle;
+ margin-left: 6px;
+}
+
+#fileList .remoteAddress .userDomain {
+ margin-left: 0 !important;
+}
+
+#fileList .favorite-mark.permanent {
+ opacity: 1;
+}
+
+#fileList .fileActionsMenu a.action:hover,
+#fileList .fileActionsMenu a.action:focus,
+#fileList a.action.action-share.shared-style:hover,
+#fileList a.action.action-share.shared-style:focus {
+ opacity: 1;
+}
+
+#fileList tr a.action.disabled {
+ background: none;
+}
+
+#selectedActionsList a.download.disabled,
+#fileList tr a.action.action-download.disabled {
+ color: #000000;
+}
+
+#fileList tr:hover a.action.disabled:hover * {
+ cursor: default;
+}
+
+.summary {
+ color: var(--color-text-maxcontrast);
+ /* add whitespace to bottom of files list to correctly show dropdowns */
+ height: 330px;
+}
+
+#filestable .filesummary {
+ width: 100%;
+ /* Width of checkbox and file preview */
+ padding-left: 101px;
+}
+
+/* Less whitespace needed on link share page
+ * as there is a footer and action menus have fewer entries.
+ */
+#body-public .summary {
+ height: 180px;
+}
+
+.summary:hover,
+.summary:focus,
+.summary,
+table tr.summary td {
+ background-color: transparent;
+}
+
+.summary td {
+ border-bottom: none;
+ vertical-align: top;
+ padding-top: 20px;
+}
+
+.summary td:first-child {
+ padding: 0;
+}
+
+.hiddeninfo {
+ white-space: pre-line;
+}
+
+table.dragshadow {
+ width: auto;
+ z-index: 2000;
+}
+
+table.dragshadow td.filename {
+ padding-left: 60px;
+ padding-right: 16px;
+ height: 36px;
+ /* Override "max-width: 0" to prevent file name and size from overlapping */
+ max-width: unset;
+}
+
+table.dragshadow td.size {
+ padding-right: 8px;
+}
+
+.mask {
+ z-index: 50;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: var(--color-main-background);
+ background-repeat: no-repeat no-repeat;
+ background-position: 50%;
+ opacity: 0.7;
+ transition: opacity 100ms;
+ -moz-transition: opacity 100ms;
+ -o-transition: opacity 100ms;
+ -ms-transition: opacity 100ms;
+ -webkit-transition: opacity 100ms;
+}
+
+.mask.transparent {
+ opacity: 0;
+}
+
+.newFileMenu {
+ font-weight: 300;
+ top: 100%;
+ left: -48px !important;
+ margin-top: 4px;
+ min-width: 100px;
+ z-index: 1001;
+ /* Center triangle */
+}
+.newFileMenu::after {
+ left: 57px !important;
+}
+
+#filestable .filename .action .icon,
+#filestable .selectedActions a .icon,
+#filestable .filename .favorite-mark .icon,
+#controls .actions .button .icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-size: 16px 16px;
+}
+
+#filestable .filename .favorite-mark .icon-star {
+ background-image: none;
+}
+#filestable .filename .favorite-mark .icon-starred {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-star-dark-yellow);
+}
+
+#filestable .filename .action .icon.hidden,
+#filestable .selectedActions a .icon.hidden,
+#controls .actions .button .icon.hidden {
+ display: none;
+}
+
+#filestable .filename .action .icon.loading,
+#filestable .selectedActions a .icon.loading,
+#controls .actions .button .icon.loading {
+ width: 15px;
+ height: 15px;
+}
+
+.app-files .actions .button.new {
+ position: relative;
+}
+
+.breadcrumb .canDrop > a,
+#filestable tbody tr.canDrop {
+ background-color: rgba(0, 130, 201, 0.3);
+}
+
+.dropzone-background {
+ background-color: rgba(0, 130, 201, 0.3);
+}
+.dropzone-background :hover {
+ box-shadow: none !important;
+}
+
+.notCreatable {
+ margin-left: 12px;
+ margin-right: 44px;
+ margin-top: 12px;
+ color: var(--color-main-text);
+ overflow: auto;
+ min-width: 160px;
+ height: 54px;
+}
+.notCreatable:not(.hidden) {
+ display: flex;
+}
+.notCreatable .icon-alert-outline {
+ top: -15px;
+ position: relative;
+ margin-right: 4px;
+}
+
+#quota {
+ margin: 0 !important;
+ border: none;
+ border-radius: 0;
+ background-color: transparent;
+ z-index: 1;
+}
+#quota > a[href="#"] {
+ box-shadow: none !important;
+}
+#quota > a[href="#"], #quota > a[href="#"] * {
+ cursor: default !important;
+}
+#quota .quota-container {
+ height: 5px;
+ border-radius: var(--border-radius);
+}
+#quota .quota-container div {
+ height: 100%;
+ background-color: var(--color-primary);
+}
+
+#quotatext {
+ padding: 0;
+ height: 30px;
+ line-height: 30px;
+}
+
+/* GRID */
+#filestable.view-grid:not(.hidden) {
+ /* HEADER and MULTISELECT */
+ /* MAIN FILE LIST */
+ /* Center align the footer file number & size summary */
+}
+#filestable.view-grid:not(.hidden) thead tr {
+ display: block;
+ border-bottom: 1px solid var(--color-border);
+ background-color: var(--color-main-background-translucent);
+}
+#filestable.view-grid:not(.hidden) thead tr th {
+ width: auto;
+ border: none;
+}
+#filestable.view-grid:not(.hidden) tbody {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 160px);
+ justify-content: space-around;
+ row-gap: 15px;
+ margin: 15px 0;
+}
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) {
+ display: block;
+ position: relative;
+ height: 190px;
+ border-radius: var(--border-radius);
+}
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted {
+ background-color: transparent;
+}
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions {
+ background-color: var(--color-background-hover);
+}
+#filestable.view-grid:not(.hidden) tbody td {
+ display: inline;
+ border-bottom: none;
+ /* No space for filesize and date in grid view */
+ /* Position actions menu below file */
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper {
+ min-width: 0;
+ max-width: none;
+ position: absolute;
+ width: 160px;
+ height: 160px;
+ padding: 14px;
+ top: 0;
+ left: 0;
+ z-index: -1;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail {
+ width: calc(100% - 2 * 14px);
+ height: calc(100% - 2 * 14px);
+ background-size: contain;
+ margin: 0;
+ border-radius: var(--border-radius);
+ background-repeat: no-repeat;
+ background-position: center;
+ /* Position favorite star related to checkbox to left and 3-dot menu below
+ * Position is inherited from the selection while in grid view
+ */
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark {
+ padding: 14px;
+ left: auto;
+ top: -22px;
+ right: -22px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .uploadtext {
+ width: 100%;
+ margin: 0;
+ top: 0;
+ bottom: auto;
+ height: 28px;
+ padding-top: 4px;
+ padding-left: 28px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name {
+ height: 100%;
+ border-radius: var(--border-radius);
+ overflow: hidden;
+ cursor: pointer !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext {
+ display: flex;
+ height: 44px;
+ margin-top: 146px;
+ text-align: center;
+ line-height: 44px;
+ padding: 0;
+ /* No space for extension in grid view */
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext {
+ display: inline-block;
+ text-align: center;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before {
+ content: "";
+ flex: 1;
+ min-width: 14px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after {
+ content: "";
+ flex: 1;
+ min-width: 44px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions {
+ height: initial;
+ margin-top: 146px;
+ display: flex;
+ align-items: center;
+ position: absolute;
+ right: 0;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action {
+ padding: 14px;
+ width: 44px;
+ height: 44px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu) {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden {
+ display: block !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img {
+ padding: 6px;
+ border-radius: 50%;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden {
+ display: block !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden {
+ display: block !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename form {
+ padding: 3px 14px;
+ border-radius: var(--border-radius);
+}
+#filestable.view-grid:not(.hidden) tbody td.filename form input.filename {
+ width: 100%;
+ margin-left: 0;
+}
+#filestable.view-grid:not(.hidden) tbody td.filesize, #filestable.view-grid:not(.hidden) tbody td.date {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tbody td.selection, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark {
+ position: absolute;
+ top: -8px;
+ left: -8px;
+ display: flex;
+ width: 44px;
+ height: 44px;
+ z-index: 10;
+ background: transparent;
+}
+#filestable.view-grid:not(.hidden) tbody td.selection label, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label {
+ width: 44px;
+ height: 44px;
+ display: inline-flex;
+ padding: 14px;
+}
+#filestable.view-grid:not(.hidden) tbody td.selection label::before, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before {
+ margin: 0;
+ width: 14px;
+ height: 14px;
+}
+#filestable.view-grid:not(.hidden) tbody td .popovermenu {
+ left: 0;
+ width: 150px;
+ margin: 0 5px;
+ /* Ellipsize long entries, normally menu width is adjusted but for grid we use fixed width. */
+}
+#filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+#filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension {
+ display: block;
+}
+#filestable.view-grid:not(.hidden) tfoot {
+ display: grid;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) {
+ display: inline-block;
+ margin: 0 auto;
+ height: 418px;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td {
+ padding-top: 50px;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child, #filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info {
+ margin-left: 0;
+}
+
+/* Grid view toggle */
+#view-toggle {
+ background-color: transparent;
+ border: none;
+ margin: 0;
+ padding: 22px;
+ opacity: 0.5;
+ position: fixed;
+ right: 0;
+ z-index: 100;
+}
+#view-toggle:hover, #view-toggle:focus, #showgridview:focus + #view-toggle {
+ opacity: 1;
+}
+
+/**
+ * Make sure the hidden input is always
+ * on the visible scrolled area of the
+ * page to avoid scrolling to top when focusing
+ */
+#showgridview {
+ position: fixed;
+ top: 0;
+}
+
+/* Adjustments for link share page */
+#body-public {
+ /* Right-align view toggle on link share page */
+}
+#body-public #filestable.view-grid:not(.hidden) tbody td {
+ /* More space for filename since there is no share icon */
+ /* Position actions menu correctly below 3-dot-menu */
+}
+#body-public #filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext {
+ max-width: 124px;
+}
+#body-public #filestable.view-grid:not(.hidden) tbody td .popovermenu {
+ left: -80px;
+}
+#body-public #view-toggle {
+ position: absolute;
+ right: 0;
+}
+
+/* Hide legacy Gallery toggle */
+#gallery-button {
+ display: none;
+}
+
+#tag_multiple_files_container {
+ overflow: hidden;
+ background-color: #fff;
+ border-radius: 3px;
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 10px;
+}
+#tag_multiple_files_container h3 {
+ width: 100%;
+ padding: 0 18px;
+}
+#tag_multiple_files_container .systemTagsInputFieldContainer {
+ flex: 1 1 80%;
+ min-width: 0;
+ margin: 0 12px;
+}
+
+/*# sourceMappingURL=files.css.map */
diff --git a/apps/files/css/files.css.map b/apps/files/css/files.css.map
new file mode 100644
index 00000000000..ffefdcfdf53
--- /dev/null
+++ b/apps/files/css/files.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","files.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADxCA;AACA;EACC;EACA;EACA;EACA;;;AAED;EAAoD;EAAU;;;AAC9D;EAAqB;;;AACrB;AAAA;EAEC;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;AAiBA;AAAA;AAAA;;AAfA;EACC;;AAGD;EACC;EACA;EAEA,KDoCc;EClCd;EACA;EACA;;AAMD;EACC;EACA;;AAEA;AAAA;EAEC;;AAEA;AAAA;EACC;;;AAMJ;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;EAGC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;AClEC;EAEA;;;ADmED;ACrEC;EAEA;;;ADsED;ACxEC;EAEA;;;ADyED;AAAA;AAAA;AAAA;AC3EC;EAEA;;;AD+ED;ACjFC;EAEA;;;ADkFD;ACpFC;EAEA;;;ADqFD;ACvFC;EAEA;;;ADwFD;AC1FC;EAEA;;;AD2FD;AC7FC;EAEA;;;AD8FD;AChGC;EAEA;;;ADkGD;EACC;;;AAED;AACA;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAGD;EAAU;;;AAEV;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;AAAe;EACf;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;EACA;EACA;AACA;EACA;EACA;;;AAGD;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;AAAe;;;AAEhB;EACC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;EAEC;EACA;AAAmB;EACnB;EACA;EACA;EACA;EACA;;;AAED;AACC;EACA;EACA;EACA;EACA;;;AAGA;EACC;;AAED;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAID;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAGD;EAA6H;;;AAC7H;EAAwE;EAAY;;;AAEpF;EACC;EACA;EACA;EACA;;;AAGD;AAEC;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKH;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;EACC;;;AAGD;AAGC;AAAA;EACC;;AAGD;AAAA;EACC;EACA;;;AAIF;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EAA2C;EAAwC;EAAsC;;;AAG1H;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EAAsC;;;AAEtC;AACA;EACC;;;AAGD;EACC;;;AAGD;AACA;AAAA;EAEC;EACA;;;AAGD;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAIC;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;;AAGD;AACA;EACI;EACA;EACA;;;AAEJ;EACI;;;AAEJ;EACC;EACA;EACA;;;AAGD;EACC;;;AAED;EACC;EACA;EACA;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;EACA;;AACA;EACC;;AACA;AACC;AACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGF;EACC;EACA;EACA;EACA;;AAGA;EACC;;AAID;AAAA;EAEC;;AAED;EACC;;AACA;EACC;;AAIH;EACC;;AAED;EACC;EACA;;AAGF;EACC;;AAED;EACC;;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAAA;EAKC;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;AACA;EAEA;;;AAED;EACC;AACA;EACA;;;AAED;AAAA;AAAA;AAGA;EACC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;AAEA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;;AAIF;AAAA;AAAA;AAAA;EAIC;EACA;EACA;;;AAMA;EACC;;AAED;AC1vBA;EAEA;;;AD6vBD;AAAA;AAAA;EAGC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAED;EACC;;AACA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AACA;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;AAIC;AAaA;AAoOA;;AA/OC;EACC;EACA;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;AAAA;EAKC;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;;AAKH;EACC;EACA;AAmJA;AA8BA;;AA9KC;EACC;EACA;EACA;EACA,OAvDQ;EAwDR,QAxDQ;EAyDR,SAxDO;EAyDP;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACC,SA1EK;EA2EL;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAGD;EACC;EACA;EAIA;EAKA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;AAoBA;;AAlBA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAID;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,SApJK;EAqJL;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAQH;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;AAMH;EAEC;;AAGD;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAvNO;;AAwNP;EACC;EACA,OA1NM;EA2NN,QA3NM;;AAiOT;EACC;EACA;EACA;AAEA;;AACA;EACC;EACA;;AAMJ;EACC;;AAID;EACC;;AAEA;EACC;EACA;EAEA;;AAEA;EACC;;AAEA;EAEC;;AAGD;EACI;;;AAOR;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGC;;;AAIF;AAAA;AAAA;AAAA;AAAA;AAKA;EACC;EACA;;;AAGD;AACA;AAaC;;AAZA;AACC;AAKA;;AAJA;EACC;;AAID;EACC;;AAKF;EACC;EACA;;;AAIF;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA","file":"files.css"} \ No newline at end of file
diff --git a/apps/files/css/merged.css b/apps/files/css/merged.css
new file mode 100644
index 00000000000..4e36788ace6
--- /dev/null
+++ b/apps/files/css/merged.css
@@ -0,0 +1,1831 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
+ * @copyright Copyright (c) 2019, Fabian Dreßler <nudelsalat@clouz.de>
+ *
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* FILE MENU */
+.actions {
+ padding: 5px;
+ height: 100%;
+ display: inline-block;
+ float: left;
+}
+
+.actions input, .actions button, .actions .button {
+ margin: 0;
+ float: left;
+}
+
+.actions .button a {
+ color: #555;
+}
+
+.actions .button a:hover,
+.actions .button a:focus {
+ background-color: var(--color-background-hover);
+}
+
+.actions .button a:active {
+ background-color: var(--color-primary-light);
+}
+
+.actions.creatable {
+ position: relative;
+ display: flex;
+ flex: 1 1;
+}
+.actions.creatable .button:not(:last-child) {
+ margin-right: 3px;
+}
+
+.actions.hidden {
+ display: none;
+}
+
+#trash {
+ margin-right: 8px;
+ float: right;
+ z-index: 1010;
+ padding: 10px;
+ font-weight: normal;
+}
+
+.newFileMenu .error,
+.newFileMenu .error + .icon-confirm,
+#fileList .error {
+ color: var(--color-error);
+ border-color: var(--color-error);
+}
+
+/* FILE TABLE */
+#filestable {
+ position: relative;
+ width: 100%;
+ min-width: 250px;
+ display: block;
+ flex-direction: column;
+ /**
+ * This is a dirty hack as the sticky header requires us to use a different display type on the table element
+ */
+}
+#emptycontent:not(.hidden) ~ #filestable {
+ display: none;
+}
+#filestable thead {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 50px;
+ z-index: 60;
+ display: block;
+ background-color: var(--color-main-background-translucent);
+}
+#filestable tbody {
+ display: table;
+ width: 100%;
+}
+#filestable tbody tr[data-permissions="0"],
+#filestable tbody tr[data-permissions="16"] {
+ background-color: var(--color-background-dark);
+}
+#filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext,
+#filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext {
+ color: var(--color-text-maxcontrast);
+}
+
+#filestable.hidden {
+ display: none;
+}
+
+/* fit app list view heights */
+.app-files #app-content > .viewcontainer {
+ min-height: 0%;
+ width: 100%;
+}
+
+.app-files #app-content {
+ width: calc(100% - 300px);
+}
+
+.file-drag, .file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover {
+ background-color: var(--color-primary-light) !important;
+}
+
+.app-files #app-content.dir-drop {
+ background-color: var(--color-main-background) !important;
+}
+
+.file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover {
+ background-color: transparent !important;
+}
+
+.app-files #app-content.dir-drop #filestable tbody tr.dropping-to-dir {
+ background-color: var(--color-primary-light) !important;
+}
+
+/* icons for sidebar */
+.nav-icon-files {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-folder-dark);
+}
+
+.nav-icon-recent {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-recent-dark);
+}
+
+.nav-icon-favorites {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-starred-dark);
+}
+
+.nav-icon-sharingin,
+.nav-icon-sharingout,
+.nav-icon-pendingshares,
+.nav-icon-shareoverview {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-share-dark);
+}
+
+.nav-icon-sharinglinks {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-public-dark);
+}
+
+.nav-icon-extstoragemounts {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-external-dark);
+}
+
+.nav-icon-trashbin {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-delete-dark);
+}
+
+.nav-icon-trashbin-starred {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-delete-#ff0000);
+}
+
+.nav-icon-deletedshares {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-unshare-dark);
+}
+
+.nav-icon-favorites-starred {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-starred-yellow);
+}
+
+#app-navigation .nav-files a.nav-icon-files {
+ width: auto;
+}
+
+/* button needs overrides due to navigation styles */
+#app-navigation .nav-files a.new {
+ width: 40px;
+ height: 32px;
+ padding: 0 10px;
+ margin: 0;
+ cursor: pointer;
+}
+
+#app-navigation .nav-files a.new.hidden {
+ display: none;
+}
+
+#app-navigation .nav-files a.new.disabled {
+ opacity: 0.3;
+}
+
+#filestable tbody tr {
+ height: 51px;
+}
+
+#filestable tbody tr:hover,
+#filestable tbody tr:focus,
+#filestable tbody .name:focus,
+#filestable tbody tr:hover .filename form,
+table tr.mouseOver td {
+ background-color: var(--color-background-hover);
+}
+
+#filestable tbody tr:active,
+#filestable tbody tr.highlighted,
+#filestable tbody tr.highlighted .name:focus,
+#filestable tbody tr.selected,
+#filestable tbody tr.searchresult {
+ background-color: var(--color-primary-light);
+}
+
+tbody a {
+ color: var(--color-main-text);
+}
+
+span.conflict-path, span.extension, span.uploading, td.date {
+ color: var(--color-text-maxcontrast);
+}
+
+span.conflict-path, span.extension {
+ -webkit-transition: opacity 300ms;
+ -moz-transition: opacity 300ms;
+ -o-transition: opacity 300ms;
+ transition: opacity 300ms;
+ vertical-align: top;
+}
+
+tr:hover span.conflict-path,
+tr:focus span.conflict-path,
+tr:hover span.extension,
+tr:focus span.extension {
+ opacity: 1;
+ color: var(--color-text-maxcontrast);
+}
+
+table th, table th a {
+ color: var(--color-text-maxcontrast);
+}
+
+table.multiselect th a {
+ color: var(--color-main-text);
+}
+
+table th .columntitle {
+ display: block;
+ padding: 15px;
+ height: 50px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ vertical-align: middle;
+}
+
+table.multiselect th .columntitle {
+ display: inline-block;
+ margin-right: -20px;
+}
+
+table th .columntitle.name {
+ padding-left: 0;
+ margin-left: 44px;
+}
+
+table.multiselect th .columntitle.name {
+ margin-left: 0;
+}
+
+table th .sort-indicator {
+ width: 10px;
+ height: 8px;
+ margin-left: 5px;
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.3;
+}
+
+.sort-indicator.hidden,
+.multiselect .sort-indicator,
+table.multiselect th:hover .sort-indicator.hidden,
+table.multiselect th:focus .sort-indicator.hidden {
+ visibility: hidden;
+}
+
+.multiselect .sort, .multiselect .sort span {
+ cursor: default;
+}
+
+table th:hover .sort-indicator.hidden,
+table th:focus .sort-indicator.hidden {
+ visibility: visible;
+}
+
+table th,
+table td {
+ border-bottom: 1px solid var(--color-border);
+ text-align: left;
+ font-weight: normal;
+}
+
+table td {
+ padding: 0 15px;
+ font-style: normal;
+ background-position: 8px center;
+ background-repeat: no-repeat;
+}
+
+table th#headerName {
+ position: relative;
+ width: 9999px;
+ /* not really sure why this works better than 100% … table styling */
+ padding: 0;
+}
+
+#headerName-container {
+ position: relative;
+ height: 50px;
+}
+
+table th#headerSelection {
+ padding-top: 2px;
+}
+
+table th#headerSize, table td.filesize {
+ text-align: right;
+}
+
+table th#headerDate, table td.date,
+table th.column-last, table td.column-last {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ /* this can not be just width, both need to be set … table styling */
+ min-width: 130px;
+ max-width: 130px;
+}
+
+#app-content-files thead,
+#app-content-trashbin thead {
+ top: 94px;
+}
+
+#app-content-recent,
+#app-content-favorites,
+#app-content-shareoverview,
+#app-content-sharingout,
+#app-content-sharingin,
+#app-content-sharinglinks,
+#app-content-deletedshares,
+#app-content-pendingshares {
+ margin-top: 22px;
+}
+
+table.multiselect thead th {
+ background-color: var(--color-main-background-translucent);
+ font-weight: bold;
+}
+
+#app-content.with-app-sidebar table.multiselect thead {
+ margin-right: 27%;
+}
+
+table.multiselect #headerName {
+ position: relative;
+ width: 9999px;
+ /* when we use 100%, the styling breaks on mobile … table styling */
+}
+
+table.multiselect #modified {
+ display: none;
+}
+
+table td.selection,
+table th.selection,
+table td.fileaction {
+ width: 32px;
+ text-align: center;
+}
+
+table td.filename a.name,
+table td.filename p.name {
+ display: flex;
+ position: relative;
+ /* Firefox needs to explicitly have this default set … */
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ height: 50px;
+ line-height: 50px;
+ padding: 0;
+}
+
+table td.filename .thumbnail-wrapper {
+ /* we need this to make sure flex is working inside a table cell */
+ width: 0;
+ min-width: 50px;
+ max-width: 50px;
+ height: 50px;
+}
+
+table td.filename .thumbnail-wrapper.icon-loading-small:after {
+ z-index: 10;
+}
+table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail {
+ opacity: 0.2;
+}
+
+table td.filename .thumbnail {
+ display: inline-block;
+ width: 32px;
+ height: 32px;
+ background-size: 32px;
+ margin-left: 9px;
+ margin-top: 9px;
+ border-radius: var(--border-radius);
+ cursor: pointer;
+ position: absolute;
+ z-index: 4;
+}
+
+table td.filename p.name .thumbnail {
+ cursor: default;
+}
+
+table tr[data-has-preview=true] .thumbnail {
+ border: 1px solid var(--color-border);
+}
+
+table td.filename input.filename {
+ width: 70%;
+ margin-left: 48px;
+ cursor: text;
+}
+
+table td.filename form {
+ margin-top: -40px;
+ position: relative;
+ top: -6px;
+}
+
+table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete {
+ padding: 3px 8px 8px 3px;
+}
+
+table td.filename .nametext, .modified, .column-last > span:first-child {
+ float: left;
+ padding: 15px 0;
+}
+
+.modified, .column-last > span:first-child {
+ position: relative;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 110px;
+}
+
+/* TODO fix usability bug (accidental file/folder selection) */
+table td.filename {
+ max-width: 0;
+}
+table td.filename .nametext {
+ width: 0;
+ flex-grow: 1;
+ display: flex;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ height: 100%;
+ z-index: 10;
+ padding: 0 20px 0 0;
+}
+
+.hide-hidden-files #filestable #fileList tr.hidden-file,
+.hide-hidden-files #filestable #fileList tr.hidden-file.dragging {
+ display: none;
+}
+
+#fileList tr.animate-opacity {
+ -webkit-transition: opacity 250ms;
+ -moz-transition: opacity 250ms;
+ -o-transition: opacity 250ms;
+ transition: opacity 250ms;
+}
+
+#fileList tr.dragging {
+ opacity: 0.2;
+}
+
+table td.filename .nametext .innernametext {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ position: relative;
+ vertical-align: top;
+}
+
+/* for smaller resolutions - see mobile.css */
+table td.filename .uploadtext {
+ position: absolute;
+ font-weight: normal;
+ margin-left: 50px;
+ left: 0;
+ bottom: 0;
+ height: 20px;
+ padding: 0 4px;
+ padding-left: 1px;
+ font-size: 11px;
+ line-height: 22px;
+ color: var(--color-text-maxcontrast);
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+table td.selection {
+ padding: 0;
+}
+
+/* File checkboxes */
+#fileList tr td.selection > .selectCheckBox + label:before {
+ opacity: 0.3;
+ margin-right: 0;
+}
+
+/* Show checkbox with full opacity when hovering, checked, or selected */
+#fileList tr:hover td.selection > .selectCheckBox + label:before,
+#fileList tr:focus td.selection > .selectCheckBox + label:before,
+#fileList tr td.selection > .selectCheckBox:checked + label:before,
+#fileList tr.selected td.selection > .selectCheckBox + label:before {
+ opacity: 1;
+}
+
+/* Show checkbox with half opacity when selecting range */
+#fileList tr.halfselected td.selection > .selectCheckBox + label:before {
+ opacity: 0.5;
+}
+
+/* Use label to have bigger clickable size for checkbox */
+#fileList tr td.selection > .selectCheckBox + label,
+.select-all + label {
+ padding: 16px;
+}
+#fileList tr td.selection > .selectCheckBox:focus + label,
+.select-all:focus + label {
+ background-color: var(--color-background-hover);
+ border-radius: var(--border-radius-pill);
+}
+
+#fileList tr td.selection > .selectCheckBox:focus-visible + label,
+.select-all:focus-visible + label {
+ outline-offset: 0px;
+}
+
+#fileList tr td.filename {
+ position: relative;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+ -webkit-transition: background-image 500ms;
+ -moz-transition: background-image 500ms;
+ -o-transition: background-image 500ms;
+ transition: background-image 500ms;
+}
+
+#fileList tr td.filename a.name label,
+#fileList tr td.filename p.name label {
+ position: absolute;
+ width: 80%;
+ height: 50px;
+}
+
+#fileList tr td.filename .favorite {
+ display: inline-block;
+ float: left;
+}
+
+#fileList tr td.filename .favorite-mark {
+ position: absolute;
+ display: block;
+ top: -6px;
+ right: -6px;
+ line-height: 100%;
+ text-align: center;
+}
+
+#uploadsize-message, #delete-confirm {
+ display: none;
+}
+
+/* File actions */
+.fileactions {
+ z-index: 50;
+}
+
+.busy .fileactions, .busy .action {
+ visibility: hidden;
+}
+
+/* fix position of bubble pointer for Files app */
+.bubble,
+#app-navigation .app-navigation-entry-menu {
+ border-top-right-radius: 3px;
+ min-width: 100px;
+}
+
+/* force show the loading icon, not only on hover */
+#fileList .icon-loading-small {
+ opacity: 1 !important;
+ display: inline !important;
+}
+
+#fileList .action.action-share-notification span, #fileList a.name {
+ cursor: default !important;
+}
+
+/*
+ * Make the disabled link look not like a link in file list rows
+ */
+#fileList a.name.disabled * {
+ cursor: default;
+}
+#fileList a.name.disabled a, #fileList a.name.disabled a * {
+ cursor: pointer;
+}
+#fileList a.name.disabled:focus {
+ background: none;
+}
+
+a.action > img {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+}
+
+/* Actions for selected files */
+.selectedActions {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.selectedActions.hidden {
+ display: none;
+}
+
+.selectedActions a {
+ display: inline;
+ line-height: 50px;
+ padding: 16px 5px;
+}
+
+.selectedActions a.hidden {
+ display: none;
+}
+
+.selectedActions a img {
+ position: relative;
+ vertical-align: text-bottom;
+ margin-bottom: -1px;
+}
+
+.selectedActions .actions-selected .icon-more {
+ margin-top: -3px;
+}
+
+#fileList td a a.action {
+ display: inline;
+ padding: 17px 8px;
+ line-height: 50px;
+ opacity: 0.3;
+}
+#fileList td a a.action.action-share {
+ padding: 17px 14px;
+}
+#fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared + span {
+ /* hide text of the share action */
+ /* .hidden-visually for accessbility */
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+#fileList td a a.action.action-share .avatar {
+ display: inline-block;
+ vertical-align: middle;
+}
+#fileList td a a.action.action-menu {
+ padding-top: 17px;
+ padding-bottom: 17px;
+ padding-left: 14px;
+ padding-right: 14px;
+}
+#fileList td a a.action.no-permission:hover, #fileList td a a.action.no-permission:focus {
+ opacity: 0.3;
+}
+#fileList td a a.action.disabled:hover, #fileList td a a.action.disabled:focus,
+#fileList td a a.action.disabled img {
+ opacity: 0.3;
+}
+#fileList td a a.action.disabled.action-download {
+ opacity: 0.7;
+}
+#fileList td a a.action.disabled.action-download:hover, #fileList td a a.action.disabled.action-download:focus {
+ opacity: 0.7;
+}
+#fileList td a a.action:hover, #fileList td a a.action:focus {
+ opacity: 1;
+}
+#fileList td a a.action:focus {
+ background-color: var(--color-background-hover);
+ border-radius: var(--border-radius-pill);
+}
+#fileList td a .fileActionsMenu a.action, #fileList td a a.action.action-share.shared-style {
+ opacity: 0.7;
+}
+#fileList td a .fileActionsMenu .action.permanent {
+ opacity: 1;
+}
+
+#fileList .action.action-share.permanent.shared-style span:not(.icon) {
+ display: inline-block;
+ max-width: 70px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: middle;
+ margin-left: 6px;
+}
+
+#fileList .remoteAddress .userDomain {
+ margin-left: 0 !important;
+}
+
+#fileList .favorite-mark.permanent {
+ opacity: 1;
+}
+
+#fileList .fileActionsMenu a.action:hover,
+#fileList .fileActionsMenu a.action:focus,
+#fileList a.action.action-share.shared-style:hover,
+#fileList a.action.action-share.shared-style:focus {
+ opacity: 1;
+}
+
+#fileList tr a.action.disabled {
+ background: none;
+}
+
+#selectedActionsList a.download.disabled,
+#fileList tr a.action.action-download.disabled {
+ color: #000000;
+}
+
+#fileList tr:hover a.action.disabled:hover * {
+ cursor: default;
+}
+
+.summary {
+ color: var(--color-text-maxcontrast);
+ /* add whitespace to bottom of files list to correctly show dropdowns */
+ height: 330px;
+}
+
+#filestable .filesummary {
+ width: 100%;
+ /* Width of checkbox and file preview */
+ padding-left: 101px;
+}
+
+/* Less whitespace needed on link share page
+ * as there is a footer and action menus have fewer entries.
+ */
+#body-public .summary {
+ height: 180px;
+}
+
+.summary:hover,
+.summary:focus,
+.summary,
+table tr.summary td {
+ background-color: transparent;
+}
+
+.summary td {
+ border-bottom: none;
+ vertical-align: top;
+ padding-top: 20px;
+}
+
+.summary td:first-child {
+ padding: 0;
+}
+
+.hiddeninfo {
+ white-space: pre-line;
+}
+
+table.dragshadow {
+ width: auto;
+ z-index: 2000;
+}
+
+table.dragshadow td.filename {
+ padding-left: 60px;
+ padding-right: 16px;
+ height: 36px;
+ /* Override "max-width: 0" to prevent file name and size from overlapping */
+ max-width: unset;
+}
+
+table.dragshadow td.size {
+ padding-right: 8px;
+}
+
+.mask {
+ z-index: 50;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: var(--color-main-background);
+ background-repeat: no-repeat no-repeat;
+ background-position: 50%;
+ opacity: 0.7;
+ transition: opacity 100ms;
+ -moz-transition: opacity 100ms;
+ -o-transition: opacity 100ms;
+ -ms-transition: opacity 100ms;
+ -webkit-transition: opacity 100ms;
+}
+
+.mask.transparent {
+ opacity: 0;
+}
+
+.newFileMenu {
+ font-weight: 300;
+ top: 100%;
+ left: -48px !important;
+ margin-top: 4px;
+ min-width: 100px;
+ z-index: 1001;
+ /* Center triangle */
+}
+.newFileMenu::after {
+ left: 57px !important;
+}
+
+#filestable .filename .action .icon,
+#filestable .selectedActions a .icon,
+#filestable .filename .favorite-mark .icon,
+#controls .actions .button .icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-size: 16px 16px;
+}
+
+#filestable .filename .favorite-mark .icon-star {
+ background-image: none;
+}
+#filestable .filename .favorite-mark .icon-starred {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-star-dark-yellow);
+}
+
+#filestable .filename .action .icon.hidden,
+#filestable .selectedActions a .icon.hidden,
+#controls .actions .button .icon.hidden {
+ display: none;
+}
+
+#filestable .filename .action .icon.loading,
+#filestable .selectedActions a .icon.loading,
+#controls .actions .button .icon.loading {
+ width: 15px;
+ height: 15px;
+}
+
+.app-files .actions .button.new {
+ position: relative;
+}
+
+.breadcrumb .canDrop > a,
+#filestable tbody tr.canDrop {
+ background-color: rgba(0, 130, 201, 0.3);
+}
+
+.dropzone-background {
+ background-color: rgba(0, 130, 201, 0.3);
+}
+.dropzone-background :hover {
+ box-shadow: none !important;
+}
+
+.notCreatable {
+ margin-left: 12px;
+ margin-right: 44px;
+ margin-top: 12px;
+ color: var(--color-main-text);
+ overflow: auto;
+ min-width: 160px;
+ height: 54px;
+}
+.notCreatable:not(.hidden) {
+ display: flex;
+}
+.notCreatable .icon-alert-outline {
+ top: -15px;
+ position: relative;
+ margin-right: 4px;
+}
+
+#quota {
+ margin: 0 !important;
+ border: none;
+ border-radius: 0;
+ background-color: transparent;
+ z-index: 1;
+}
+#quota > a[href="#"] {
+ box-shadow: none !important;
+}
+#quota > a[href="#"], #quota > a[href="#"] * {
+ cursor: default !important;
+}
+#quota .quota-container {
+ height: 5px;
+ border-radius: var(--border-radius);
+}
+#quota .quota-container div {
+ height: 100%;
+ background-color: var(--color-primary);
+}
+
+#quotatext {
+ padding: 0;
+ height: 30px;
+ line-height: 30px;
+}
+
+/* GRID */
+#filestable.view-grid:not(.hidden) {
+ /* HEADER and MULTISELECT */
+ /* MAIN FILE LIST */
+ /* Center align the footer file number & size summary */
+}
+#filestable.view-grid:not(.hidden) thead tr {
+ display: block;
+ border-bottom: 1px solid var(--color-border);
+ background-color: var(--color-main-background-translucent);
+}
+#filestable.view-grid:not(.hidden) thead tr th {
+ width: auto;
+ border: none;
+}
+#filestable.view-grid:not(.hidden) tbody {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 160px);
+ justify-content: space-around;
+ row-gap: 15px;
+ margin: 15px 0;
+}
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) {
+ display: block;
+ position: relative;
+ height: 190px;
+ border-radius: var(--border-radius);
+}
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted {
+ background-color: transparent;
+}
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext,
+#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions {
+ background-color: var(--color-background-hover);
+}
+#filestable.view-grid:not(.hidden) tbody td {
+ display: inline;
+ border-bottom: none;
+ /* No space for filesize and date in grid view */
+ /* Position actions menu below file */
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper {
+ min-width: 0;
+ max-width: none;
+ position: absolute;
+ width: 160px;
+ height: 160px;
+ padding: 14px;
+ top: 0;
+ left: 0;
+ z-index: -1;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail {
+ width: calc(100% - 2 * 14px);
+ height: calc(100% - 2 * 14px);
+ background-size: contain;
+ margin: 0;
+ border-radius: var(--border-radius);
+ background-repeat: no-repeat;
+ background-position: center;
+ /* Position favorite star related to checkbox to left and 3-dot menu below
+ * Position is inherited from the selection while in grid view
+ */
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark {
+ padding: 14px;
+ left: auto;
+ top: -22px;
+ right: -22px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .uploadtext {
+ width: 100%;
+ margin: 0;
+ top: 0;
+ bottom: auto;
+ height: 28px;
+ padding-top: 4px;
+ padding-left: 28px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name {
+ height: 100%;
+ border-radius: var(--border-radius);
+ overflow: hidden;
+ cursor: pointer !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext {
+ display: flex;
+ height: 44px;
+ margin-top: 146px;
+ text-align: center;
+ line-height: 44px;
+ padding: 0;
+ /* No space for extension in grid view */
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext {
+ display: inline-block;
+ text-align: center;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before {
+ content: "";
+ flex: 1;
+ min-width: 14px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after {
+ content: "";
+ flex: 1;
+ min-width: 44px;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions {
+ height: initial;
+ margin-top: 146px;
+ display: flex;
+ align-items: center;
+ position: absolute;
+ right: 0;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action {
+ padding: 14px;
+ width: 44px;
+ height: 44px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu) {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden {
+ display: block !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img {
+ padding: 6px;
+ border-radius: 50%;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden {
+ display: block !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden {
+ display: block !important;
+}
+#filestable.view-grid:not(.hidden) tbody td.filename form {
+ padding: 3px 14px;
+ border-radius: var(--border-radius);
+}
+#filestable.view-grid:not(.hidden) tbody td.filename form input.filename {
+ width: 100%;
+ margin-left: 0;
+}
+#filestable.view-grid:not(.hidden) tbody td.filesize, #filestable.view-grid:not(.hidden) tbody td.date {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tbody td.selection, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark {
+ position: absolute;
+ top: -8px;
+ left: -8px;
+ display: flex;
+ width: 44px;
+ height: 44px;
+ z-index: 10;
+ background: transparent;
+}
+#filestable.view-grid:not(.hidden) tbody td.selection label, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label {
+ width: 44px;
+ height: 44px;
+ display: inline-flex;
+ padding: 14px;
+}
+#filestable.view-grid:not(.hidden) tbody td.selection label::before, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before {
+ margin: 0;
+ width: 14px;
+ height: 14px;
+}
+#filestable.view-grid:not(.hidden) tbody td .popovermenu {
+ left: 0;
+ width: 150px;
+ margin: 0 5px;
+ /* Ellipsize long entries, normally menu width is adjusted but for grid we use fixed width. */
+}
+#filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+#filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension {
+ display: block;
+}
+#filestable.view-grid:not(.hidden) tfoot {
+ display: grid;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) {
+ display: inline-block;
+ margin: 0 auto;
+ height: 418px;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td {
+ padding-top: 50px;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child, #filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date {
+ display: none;
+}
+#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info {
+ margin-left: 0;
+}
+
+/* Grid view toggle */
+#view-toggle {
+ background-color: transparent;
+ border: none;
+ margin: 0;
+ padding: 22px;
+ opacity: 0.5;
+ position: fixed;
+ right: 0;
+ z-index: 100;
+}
+#view-toggle:hover, #view-toggle:focus, #showgridview:focus + #view-toggle {
+ opacity: 1;
+}
+
+/**
+ * Make sure the hidden input is always
+ * on the visible scrolled area of the
+ * page to avoid scrolling to top when focusing
+ */
+#showgridview {
+ position: fixed;
+ top: 0;
+}
+
+/* Adjustments for link share page */
+#body-public {
+ /* Right-align view toggle on link share page */
+}
+#body-public #filestable.view-grid:not(.hidden) tbody td {
+ /* More space for filename since there is no share icon */
+ /* Position actions menu correctly below 3-dot-menu */
+}
+#body-public #filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext {
+ max-width: 124px;
+}
+#body-public #filestable.view-grid:not(.hidden) tbody td .popovermenu {
+ left: -80px;
+}
+#body-public #view-toggle {
+ position: absolute;
+ right: 0;
+}
+
+/* Hide legacy Gallery toggle */
+#gallery-button {
+ display: none;
+}
+
+#tag_multiple_files_container {
+ overflow: hidden;
+ background-color: #fff;
+ border-radius: 3px;
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 10px;
+}
+#tag_multiple_files_container h3 {
+ width: 100%;
+ padding: 0 18px;
+}
+#tag_multiple_files_container .systemTagsInputFieldContainer {
+ flex: 1 1 80%;
+ min-width: 0;
+ margin: 0 12px;
+}
+
+#upload {
+ box-sizing: border-box;
+ height: 36px;
+ width: 39px;
+ padding: 0 !important;
+ /* override default control bar button padding */
+ margin-left: 3px;
+ overflow: hidden;
+ vertical-align: top;
+ position: relative;
+ z-index: -20;
+}
+
+#upload .icon-upload {
+ position: relative;
+ display: block;
+ width: 100%;
+ height: 44px;
+ width: 44px;
+ margin: -5px -3px;
+ cursor: pointer;
+ z-index: 10;
+ opacity: 0.65;
+}
+
+.file_upload_target {
+ display: none;
+}
+
+.file_upload_form {
+ display: inline;
+ float: left;
+ margin: 0;
+ padding: 0;
+ cursor: pointer;
+ overflow: visible;
+}
+
+#uploadprogresswrapper, #uploadprogresswrapper * {
+ box-sizing: border-box;
+}
+
+#uploadprogresswrapper {
+ display: inline-block;
+ vertical-align: top;
+ height: 36px;
+ margin-left: 3px;
+}
+
+#uploadprogresswrapper > input[type=button] {
+ height: 36px;
+ margin-left: 3px;
+}
+
+#uploadprogressbar {
+ border-color: var(--color-border-dark);
+ border-radius: 18px 0 0 18px;
+ border-right: 0;
+ position: relative;
+ float: left;
+ width: 200px;
+ height: 36px;
+ display: inline-block;
+ text-align: center;
+}
+#uploadprogressbar .ui-progressbar-value {
+ margin: 0;
+}
+
+#uploadprogressbar .ui-progressbar-value.ui-widget-header.ui-corner-left {
+ height: calc(100% + 2px);
+ top: -1px;
+ left: -1px;
+ position: absolute;
+ overflow: hidden;
+ background-color: var(--color-primary);
+}
+
+#uploadprogressbar .label {
+ top: 8px;
+ opacity: 1;
+ overflow: hidden;
+ white-space: nowrap;
+ font-weight: normal;
+}
+
+#uploadprogressbar .label.inner {
+ color: var(--color-primary-text);
+ position: absolute;
+ display: block;
+ width: 200px;
+}
+
+#uploadprogressbar .label.outer {
+ position: relative;
+ color: var(--color-main-text);
+}
+
+#uploadprogressbar .desktop {
+ display: block;
+}
+
+#uploadprogressbar .mobile {
+ display: none;
+}
+
+#uploadprogressbar + .stop {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.oc-dialog .fileexists {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ margin-bottom: 30px;
+}
+
+.oc-dialog .fileexists .conflict .filename,
+.oc-dialog .fileexists .conflict .mtime,
+.oc-dialog .fileexists .conflict .size {
+ -webkit-touch-callout: initial;
+ -webkit-user-select: initial;
+ -khtml-user-select: initial;
+ -moz-user-select: initial;
+ -ms-user-select: initial;
+ user-select: initial;
+}
+
+.oc-dialog .fileexists .conflict .message {
+ color: #e9322d;
+}
+
+.oc-dialog .fileexists table {
+ width: 100%;
+}
+
+.oc-dialog .fileexists th {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.oc-dialog .fileexists th input[type=checkbox] {
+ margin-right: 3px;
+}
+
+.oc-dialog .fileexists th:first-child {
+ width: 225px;
+}
+
+.oc-dialog .fileexists th label {
+ font-weight: normal;
+ color: var(--color-main-text);
+}
+
+.oc-dialog .fileexists th .count {
+ margin-left: 3px;
+}
+
+.oc-dialog .fileexists .conflicts .template {
+ display: none;
+}
+
+.oc-dialog .fileexists .conflict {
+ width: 100%;
+ height: 85px;
+}
+
+.oc-dialog .fileexists .conflict .filename {
+ color: #777;
+ word-break: break-all;
+ clear: left;
+}
+
+.oc-dialog .fileexists .icon {
+ width: 64px;
+ height: 64px;
+ margin: 0px 5px 5px 5px;
+ background-repeat: no-repeat;
+ background-size: 64px 64px;
+ float: left;
+}
+
+.oc-dialog .fileexists .original,
+.oc-dialog .fileexists .replacement {
+ float: left;
+ width: 225px;
+}
+
+.oc-dialog .fileexists .conflicts {
+ overflow-y: auto;
+ max-height: 225px;
+}
+
+.oc-dialog .fileexists .conflict input[type=checkbox] {
+ float: left;
+}
+
+.oc-dialog .fileexists #allfileslabel {
+ float: right;
+}
+
+.oc-dialog .fileexists #allfiles {
+ vertical-align: bottom;
+ position: relative;
+ top: -3px;
+}
+
+.oc-dialog .fileexists #allfiles + span {
+ vertical-align: bottom;
+}
+
+.oc-dialog .oc-dialog-buttonrow {
+ width: 100%;
+ text-align: right;
+}
+.oc-dialog .oc-dialog-buttonrow .cancel {
+ float: left;
+}
+
+.highlightUploaded {
+ -webkit-animation: highlightAnimation 2s 1;
+ -moz-animation: highlightAnimation 2s 1;
+ -o-animation: highlightAnimation 2s 1;
+ animation: highlightAnimation 2s 1;
+}
+
+@-webkit-keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+@-moz-keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+@-o-keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+@keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/* 938 = table min-width(688) + app-navigation width: 250\
+ $breakpoint-mobile +1 = size where app-navigation is hidden +1
+ 688 = table min-width */
+@media only screen and (max-width: 988px) and (min-width: 1025px), only screen and (max-width: 688px) {
+ .app-files #app-content.dir-drop {
+ background-color: rgb(255, 255, 255) !important;
+ }
+
+ table th#headerSize,
+table td.filesize,
+table th#headerDate,
+table td.date {
+ display: none;
+ }
+
+ /* remove padding to let border bottom fill the whole width*/
+ table td {
+ padding: 0;
+ }
+
+ /* remove shift for multiselect bar to account for missing navigation */
+ table.multiselect thead {
+ padding-left: 0;
+ }
+
+ #fileList a.action.action-menu img {
+ padding-left: 0;
+ }
+
+ #fileList .fileActionsMenu {
+ margin-right: 6px;
+ }
+
+ /* hide text of the share action on mobile */
+ /* .hidden-visually for accessbility */
+ #fileList a.action-share span:not(.icon):not(.avatar) {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ /* proper notification area for multi line messages */
+ #notification-container {
+ display: flex;
+ }
+
+ /* shorten elements for mobile */
+ #uploadprogressbar, #uploadprogressbar .label.inner {
+ width: 50px;
+ }
+
+ /* hide desktop-only parts */
+ #uploadprogressbar .desktop {
+ display: none !important;
+ }
+
+ #uploadprogressbar .mobile {
+ display: block !important;
+ }
+
+ /* ensure that it is visible over #app-content */
+ table.dragshadow {
+ z-index: 1000;
+ }
+}
+@media only screen and (max-width: 480px) {
+ /* Only show icons */
+ table th .selectedActions {
+ float: right;
+ }
+
+ table th .selectedActions > a span:not(.icon) {
+ display: none;
+ }
+
+ /* Increase touch area for the icons */
+ table th .selectedActions a {
+ padding: 17px 14px;
+ }
+
+ /* Remove the margin to reduce the overlap between the name and the icons */
+ table.multiselect th .columntitle.name {
+ margin-left: 0;
+ }
+}
+.app-sidebar .detailFileInfoContainer {
+ min-height: 50px;
+ padding: 15px;
+}
+
+.app-sidebar .detailFileInfoContainer > div {
+ clear: both;
+}
+
+.app-sidebar .mainFileInfoView .icon {
+ display: inline-block;
+ background-size: 16px 16px;
+}
+
+.app-sidebar .mainFileInfoView .permalink {
+ padding: 6px 10px;
+ vertical-align: top;
+ opacity: 0.6;
+}
+.app-sidebar .mainFileInfoView .permalink:hover, .app-sidebar .mainFileInfoView .permalink:focus {
+ opacity: 1;
+}
+
+.app-sidebar .mainFileInfoView .permalink-field > input {
+ clear: both;
+ width: 90%;
+}
+
+.app-sidebar .thumbnailContainer.large {
+ margin-left: -15px;
+ margin-right: -35px;
+ /* 15 + 20 for the close button */
+ margin-top: -15px;
+}
+
+.app-sidebar .thumbnailContainer.large.portrait {
+ margin: 0;
+ /* if we don't fit the image anyway we give it back the margin */
+}
+
+.app-sidebar .large .thumbnail {
+ width: 100%;
+ display: block;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 100%;
+ float: none;
+ margin: 0;
+ height: auto;
+}
+
+.app-sidebar .large .thumbnail .stretcher {
+ content: "";
+ display: block;
+ padding-bottom: 56.25%;
+ /* sets height of .thumbnail to 9/16 of the width */
+}
+
+.app-sidebar .large.portrait .thumbnail {
+ background-position: 50% top;
+}
+
+.app-sidebar .large.portrait .thumbnail {
+ background-size: contain;
+}
+
+.app-sidebar .large.text {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding-top: 14px;
+ font-size: 80%;
+ margin-left: 0;
+}
+
+.app-sidebar .thumbnail {
+ width: 100%;
+ min-height: 75px;
+ display: inline-block;
+ float: left;
+ margin-right: 10px;
+ background-size: contain;
+ background-repeat: no-repeat;
+}
+
+.app-sidebar .ellipsis {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.app-sidebar .fileName {
+ font-size: 16px;
+ padding-top: 13px;
+ padding-bottom: 3px;
+}
+
+.app-sidebar .fileName h3 {
+ width: calc(100% - 42px);
+ /* 36px is the with of the copy link icon, but this breaks so we add some more to be sure */
+ display: inline-block;
+ padding: 5px 0;
+ margin: -5px 0;
+}
+
+.app-sidebar .file-details {
+ color: var(--color-text-maxcontrast);
+}
+
+.app-sidebar .action-favorite {
+ vertical-align: sub;
+ padding: 10px;
+ margin: -10px;
+}
+
+.app-sidebar .action-favorite > span {
+ opacity: 0.7 !important;
+}
+
+.app-sidebar .detailList {
+ float: left;
+}
+
+.app-sidebar .close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ opacity: 0.5;
+ z-index: 1;
+ width: 44px;
+ height: 44px;
+}
+
+/**
+ * @copyright Copyright (c) 2018, Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+.whatsNewPopover {
+ bottom: 35px !important;
+ left: 15px !important;
+ width: 270px;
+ z-index: 700;
+}
+
+.whatsNewPopover p {
+ width: auto !important;
+}
+
+.whatsNewPopover .caption {
+ font-weight: bold;
+ cursor: auto !important;
+}
+
+.whatsNewPopover .icon-close {
+ position: absolute;
+ right: 0;
+}
+
+.whatsNewPopover::after {
+ content: none;
+}
+
+/*# sourceMappingURL=merged.css.map */
diff --git a/apps/files/css/merged.css.map b/apps/files/css/merged.css.map
new file mode 100644
index 00000000000..b5236874c17
--- /dev/null
+++ b/apps/files/css/merged.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","files.scss","../../../core/css/functions.scss","upload.scss","mobile.scss","detailsView.scss","../../../core/css/whatsnew.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADxCA;AACA;EACC;EACA;EACA;EACA;;;AAED;EAAoD;EAAU;;;AAC9D;EAAqB;;;AACrB;AAAA;EAEC;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;AAiBA;AAAA;AAAA;;AAfA;EACC;;AAGD;EACC;EACA;EAEA,KDoCc;EClCd;EACA;EACA;;AAMD;EACC;EACA;;AAEA;AAAA;EAEC;;AAEA;AAAA;EACC;;;AAMJ;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;EAGC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;AClEC;EAEA;;;ADmED;ACrEC;EAEA;;;ADsED;ACxEC;EAEA;;;ADyED;AAAA;AAAA;AAAA;AC3EC;EAEA;;;AD+ED;ACjFC;EAEA;;;ADkFD;ACpFC;EAEA;;;ADqFD;ACvFC;EAEA;;;ADwFD;AC1FC;EAEA;;;AD2FD;AC7FC;EAEA;;;AD8FD;AChGC;EAEA;;;ADkGD;EACC;;;AAED;AACA;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAGD;EAAU;;;AAEV;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;AAAe;EACf;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;EACA;EACA;AACA;EACA;EACA;;;AAGD;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;AAAe;;;AAEhB;EACC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;EAEC;EACA;AAAmB;EACnB;EACA;EACA;EACA;EACA;;;AAED;AACC;EACA;EACA;EACA;EACA;;;AAGA;EACC;;AAED;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAID;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAGD;EAA6H;;;AAC7H;EAAwE;EAAY;;;AAEpF;EACC;EACA;EACA;EACA;;;AAGD;AAEC;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKH;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;EACC;;;AAGD;AAGC;AAAA;EACC;;AAGD;AAAA;EACC;EACA;;;AAIF;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EAA2C;EAAwC;EAAsC;;;AAG1H;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EAAsC;;;AAEtC;AACA;EACC;;;AAGD;EACC;;;AAGD;AACA;AAAA;EAEC;EACA;;;AAGD;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAIC;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;;AAGD;AACA;EACI;EACA;EACA;;;AAEJ;EACI;;;AAEJ;EACC;EACA;EACA;;;AAGD;EACC;;;AAED;EACC;EACA;EACA;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;EACA;;AACA;EACC;;AACA;AACC;AACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGF;EACC;EACA;EACA;EACA;;AAGA;EACC;;AAID;AAAA;EAEC;;AAED;EACC;;AACA;EACC;;AAIH;EACC;;AAED;EACC;EACA;;AAGF;EACC;;AAED;EACC;;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAAA;EAKC;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;AACA;EAEA;;;AAED;EACC;AACA;EACA;;;AAED;AAAA;AAAA;AAGA;EACC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;AAEA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;;AAIF;AAAA;AAAA;AAAA;EAIC;EACA;EACA;;;AAMA;EACC;;AAED;AC1vBA;EAEA;;;AD6vBD;AAAA;AAAA;EAGC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAED;EACC;;AACA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AACA;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;AAIC;AAaA;AAoOA;;AA/OC;EACC;EACA;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;AAAA;EAKC;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;;AAKH;EACC;EACA;AAmJA;AA8BA;;AA9KC;EACC;EACA;EACA;EACA,OAvDQ;EAwDR,QAxDQ;EAyDR,SAxDO;EAyDP;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACC,SA1EK;EA2EL;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAGD;EACC;EACA;EAIA;EAKA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;AAoBA;;AAlBA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAID;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,SApJK;EAqJL;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAQH;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;AAMH;EAEC;;AAGD;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAvNO;;AAwNP;EACC;EACA,OA1NM;EA2NN,QA3NM;;AAiOT;EACC;EACA;EACA;AAEA;;AACA;EACC;EACA;;AAMJ;EACC;;AAID;EACC;;AAEA;EACC;EACA;EAEA;;AAEA;EACC;;AAEA;EAEC;;AAGD;EACI;;;AAOR;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGC;;;AAIF;AAAA;AAAA;AAAA;AAAA;AAKA;EACC;EACA;;;AAGD;AACA;AAaC;;AAZA;AACC;AAKA;;AAJA;EACC;;AAID;EACC;;AAKF;EACC;EACA;;;AAIF;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;;;AEruCF;EACC;EACA;EACA;EACA;AAAuB;EACvB;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EAAsB;;;AACtB;EAAoB;EAAgB;EAAY;EAAU;EAAW;EAAgB;;;AAErF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AHjNT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AIEA;AAAA;AAAA;AAIA;EAEA;IACC;;;EAGD;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAGD;IACC;;;EAGD;IACC;;;AAED;AACA;EACA;IACC;IACA;IACA;IACA;IACA;IACA;;;AAID;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAID;AACC;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;ACvFF;EACC;EACA;;;AAGD;EACC;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EAEC;;;AAGF;EACC;EACA;;;AAGD;EACC;EACA;AAAqB;EACrB;;;AAGD;EACC;AAAW;;;AAGZ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;AAAwB;;;AAGzB;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;AAA0B;EAC1B;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AC/HD;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE","file":"merged.css"} \ No newline at end of file
diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css
new file mode 100644
index 00000000000..9cdbad85156
--- /dev/null
+++ b/apps/files/css/mobile.css
@@ -0,0 +1,112 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/* 938 = table min-width(688) + app-navigation width: 250\
+ $breakpoint-mobile +1 = size where app-navigation is hidden +1
+ 688 = table min-width */
+@media only screen and (max-width: 988px) and (min-width: 1025px), only screen and (max-width: 688px) {
+ .app-files #app-content.dir-drop {
+ background-color: rgb(255, 255, 255) !important;
+ }
+
+ table th#headerSize,
+table td.filesize,
+table th#headerDate,
+table td.date {
+ display: none;
+ }
+
+ /* remove padding to let border bottom fill the whole width*/
+ table td {
+ padding: 0;
+ }
+
+ /* remove shift for multiselect bar to account for missing navigation */
+ table.multiselect thead {
+ padding-left: 0;
+ }
+
+ #fileList a.action.action-menu img {
+ padding-left: 0;
+ }
+
+ #fileList .fileActionsMenu {
+ margin-right: 6px;
+ }
+
+ /* hide text of the share action on mobile */
+ /* .hidden-visually for accessbility */
+ #fileList a.action-share span:not(.icon):not(.avatar) {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ /* proper notification area for multi line messages */
+ #notification-container {
+ display: flex;
+ }
+
+ /* shorten elements for mobile */
+ #uploadprogressbar, #uploadprogressbar .label.inner {
+ width: 50px;
+ }
+
+ /* hide desktop-only parts */
+ #uploadprogressbar .desktop {
+ display: none !important;
+ }
+
+ #uploadprogressbar .mobile {
+ display: block !important;
+ }
+
+ /* ensure that it is visible over #app-content */
+ table.dragshadow {
+ z-index: 1000;
+ }
+}
+@media only screen and (max-width: 480px) {
+ /* Only show icons */
+ table th .selectedActions {
+ float: right;
+ }
+
+ table th .selectedActions > a span:not(.icon) {
+ display: none;
+ }
+
+ /* Increase touch area for the icons */
+ table th .selectedActions a {
+ padding: 17px 14px;
+ }
+
+ /* Remove the margin to reduce the overlap between the name and the icons */
+ table.multiselect th .columntitle.name {
+ margin-left: 0;
+ }
+}
+
+/*# sourceMappingURL=mobile.css.map */
diff --git a/apps/files/css/mobile.css.map b/apps/files/css/mobile.css.map
new file mode 100644
index 00000000000..83b1e827b33
--- /dev/null
+++ b/apps/files/css/mobile.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;AAAA;AAAA;AAIA;EAEA;IACC;;;EAGD;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAGD;IACC;;;EAGD;IACC;;;AAED;AACA;EACA;IACC;IACA;IACA;IACA;IACA;IACA;;;AAID;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAID;AACC;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC","file":"mobile.css"} \ No newline at end of file
diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css
new file mode 100644
index 00000000000..dc90f5a793e
--- /dev/null
+++ b/apps/files/css/upload.css
@@ -0,0 +1,264 @@
+#upload {
+ box-sizing: border-box;
+ height: 36px;
+ width: 39px;
+ padding: 0 !important;
+ /* override default control bar button padding */
+ margin-left: 3px;
+ overflow: hidden;
+ vertical-align: top;
+ position: relative;
+ z-index: -20;
+}
+
+#upload .icon-upload {
+ position: relative;
+ display: block;
+ width: 100%;
+ height: 44px;
+ width: 44px;
+ margin: -5px -3px;
+ cursor: pointer;
+ z-index: 10;
+ opacity: 0.65;
+}
+
+.file_upload_target {
+ display: none;
+}
+
+.file_upload_form {
+ display: inline;
+ float: left;
+ margin: 0;
+ padding: 0;
+ cursor: pointer;
+ overflow: visible;
+}
+
+#uploadprogresswrapper, #uploadprogresswrapper * {
+ box-sizing: border-box;
+}
+
+#uploadprogresswrapper {
+ display: inline-block;
+ vertical-align: top;
+ height: 36px;
+ margin-left: 3px;
+}
+
+#uploadprogresswrapper > input[type=button] {
+ height: 36px;
+ margin-left: 3px;
+}
+
+#uploadprogressbar {
+ border-color: var(--color-border-dark);
+ border-radius: 18px 0 0 18px;
+ border-right: 0;
+ position: relative;
+ float: left;
+ width: 200px;
+ height: 36px;
+ display: inline-block;
+ text-align: center;
+}
+#uploadprogressbar .ui-progressbar-value {
+ margin: 0;
+}
+
+#uploadprogressbar .ui-progressbar-value.ui-widget-header.ui-corner-left {
+ height: calc(100% + 2px);
+ top: -1px;
+ left: -1px;
+ position: absolute;
+ overflow: hidden;
+ background-color: var(--color-primary);
+}
+
+#uploadprogressbar .label {
+ top: 8px;
+ opacity: 1;
+ overflow: hidden;
+ white-space: nowrap;
+ font-weight: normal;
+}
+
+#uploadprogressbar .label.inner {
+ color: var(--color-primary-text);
+ position: absolute;
+ display: block;
+ width: 200px;
+}
+
+#uploadprogressbar .label.outer {
+ position: relative;
+ color: var(--color-main-text);
+}
+
+#uploadprogressbar .desktop {
+ display: block;
+}
+
+#uploadprogressbar .mobile {
+ display: none;
+}
+
+#uploadprogressbar + .stop {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.oc-dialog .fileexists {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ margin-bottom: 30px;
+}
+
+.oc-dialog .fileexists .conflict .filename,
+.oc-dialog .fileexists .conflict .mtime,
+.oc-dialog .fileexists .conflict .size {
+ -webkit-touch-callout: initial;
+ -webkit-user-select: initial;
+ -khtml-user-select: initial;
+ -moz-user-select: initial;
+ -ms-user-select: initial;
+ user-select: initial;
+}
+
+.oc-dialog .fileexists .conflict .message {
+ color: #e9322d;
+}
+
+.oc-dialog .fileexists table {
+ width: 100%;
+}
+
+.oc-dialog .fileexists th {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.oc-dialog .fileexists th input[type=checkbox] {
+ margin-right: 3px;
+}
+
+.oc-dialog .fileexists th:first-child {
+ width: 225px;
+}
+
+.oc-dialog .fileexists th label {
+ font-weight: normal;
+ color: var(--color-main-text);
+}
+
+.oc-dialog .fileexists th .count {
+ margin-left: 3px;
+}
+
+.oc-dialog .fileexists .conflicts .template {
+ display: none;
+}
+
+.oc-dialog .fileexists .conflict {
+ width: 100%;
+ height: 85px;
+}
+
+.oc-dialog .fileexists .conflict .filename {
+ color: #777;
+ word-break: break-all;
+ clear: left;
+}
+
+.oc-dialog .fileexists .icon {
+ width: 64px;
+ height: 64px;
+ margin: 0px 5px 5px 5px;
+ background-repeat: no-repeat;
+ background-size: 64px 64px;
+ float: left;
+}
+
+.oc-dialog .fileexists .original,
+.oc-dialog .fileexists .replacement {
+ float: left;
+ width: 225px;
+}
+
+.oc-dialog .fileexists .conflicts {
+ overflow-y: auto;
+ max-height: 225px;
+}
+
+.oc-dialog .fileexists .conflict input[type=checkbox] {
+ float: left;
+}
+
+.oc-dialog .fileexists #allfileslabel {
+ float: right;
+}
+
+.oc-dialog .fileexists #allfiles {
+ vertical-align: bottom;
+ position: relative;
+ top: -3px;
+}
+
+.oc-dialog .fileexists #allfiles + span {
+ vertical-align: bottom;
+}
+
+.oc-dialog .oc-dialog-buttonrow {
+ width: 100%;
+ text-align: right;
+}
+.oc-dialog .oc-dialog-buttonrow .cancel {
+ float: left;
+}
+
+.highlightUploaded {
+ -webkit-animation: highlightAnimation 2s 1;
+ -moz-animation: highlightAnimation 2s 1;
+ -o-animation: highlightAnimation 2s 1;
+ animation: highlightAnimation 2s 1;
+}
+
+@-webkit-keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+@-moz-keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+@-o-keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+@keyframes highlightAnimation {
+ 0% {
+ background-color: rgb(255, 255, 140);
+ }
+ 100% {
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
+
+/*# sourceMappingURL=upload.css.map */
diff --git a/apps/files/css/upload.css.map b/apps/files/css/upload.css.map
new file mode 100644
index 00000000000..718462f2607
--- /dev/null
+++ b/apps/files/css/upload.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["upload.scss"],"names":[],"mappings":"AAAA;EACC;EACA;EACA;EACA;AAAuB;EACvB;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EAAsB;;;AACtB;EAAoB;EAAgB;EAAY;EAAU;EAAW;EAAgB;;;AAErF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO","file":"upload.css"} \ No newline at end of file
diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css
new file mode 100644
index 00000000000..84e382ceb89
--- /dev/null
+++ b/apps/files_external/css/settings.css
@@ -0,0 +1,177 @@
+#files_external {
+ margin-bottom: 0px;
+}
+
+#externalStorage {
+ margin: 15px 0 20px 0;
+}
+#externalStorage tr.externalStorageLoading > td {
+ text-align: center;
+}
+
+#externalStorage td > input, #externalStorage td > select {
+ width: 100%;
+}
+
+#externalStorage td.status {
+ /* overwrite conflicting core styles */
+ display: table-cell;
+ vertical-align: middle;
+}
+
+#externalStorage td.status > span {
+ display: inline-block;
+ height: 28px;
+ width: 28px;
+ vertical-align: text-bottom;
+ border-radius: 50%;
+ cursor: pointer;
+}
+
+#externalStorage td.mountPoint, #externalStorage td.backend, #externalStorage td.authentication, #externalStorage td.configuration {
+ min-width: 160px;
+ width: 15%;
+}
+
+#externalStorage td > img {
+ padding-top: 7px;
+ opacity: 0.5;
+}
+
+#externalStorage td > img:hover {
+ padding-top: 7px;
+ cursor: pointer;
+ opacity: 1;
+}
+
+#addMountPoint > td {
+ border: none;
+}
+
+#addMountPoint > td.applicable {
+ visibility: hidden;
+}
+
+#addMountPoint > td.hidden {
+ visibility: hidden;
+}
+
+#externalStorage td {
+ height: 50px;
+}
+#externalStorage td.mountOptionsToggle, #externalStorage td.remove, #externalStorage td.save {
+ position: relative;
+ padding: 0 !important;
+ width: 44px;
+}
+#externalStorage td.mountOptionsToggle [class^=icon-],
+#externalStorage td.mountOptionsToggle [class*=" icon-"], #externalStorage td.remove [class^=icon-],
+#externalStorage td.remove [class*=" icon-"], #externalStorage td.save [class^=icon-],
+#externalStorage td.save [class*=" icon-"] {
+ opacity: 0.5;
+ padding: 14px;
+ vertical-align: text-bottom;
+ cursor: pointer;
+}
+#externalStorage td.mountOptionsToggle [class^=icon-]:hover,
+#externalStorage td.mountOptionsToggle [class*=" icon-"]:hover, #externalStorage td.remove [class^=icon-]:hover,
+#externalStorage td.remove [class*=" icon-"]:hover, #externalStorage td.save [class^=icon-]:hover,
+#externalStorage td.save [class*=" icon-"]:hover {
+ opacity: 1;
+}
+
+#selectBackend {
+ margin-left: -10px;
+ width: 150px;
+}
+
+#externalStorage td.configuration,
+#externalStorage td.backend {
+ white-space: normal;
+}
+
+#externalStorage td.configuration > * {
+ white-space: nowrap;
+}
+
+#externalStorage td.configuration input.added {
+ margin-right: 6px;
+}
+
+#externalStorage label > input[type=checkbox] {
+ margin-right: 3px;
+}
+
+#externalStorage td.configuration label {
+ width: 100%;
+ display: inline-flex;
+ align-items: center;
+}
+
+#externalStorage td.configuration input.disabled-success {
+ background-color: rgba(134, 255, 110, 0.9);
+}
+
+#externalStorage td.applicable div.chzn-container {
+ position: relative;
+ top: 3px;
+}
+
+#externalStorage .select2-container.applicableUsers {
+ width: 100% !important;
+}
+
+#userMountingBackends {
+ padding-left: 25px;
+}
+
+.files-external-select2 .select2-results .select2-result-label {
+ height: 32px;
+ padding: 3px;
+}
+
+.files-external-select2 .select2-results .select2-result-label > span {
+ display: block;
+ position: relative;
+}
+
+.files-external-select2 .select2-results .select2-result-label .avatardiv {
+ display: inline-block;
+}
+
+.files-external-select2 .select2-results .select2-result-label .avatardiv + span {
+ position: absolute;
+ top: 5px;
+ margin-left: 10px;
+}
+
+.files-external-select2 .select2-results .select2-result-label .avatardiv[data-type=group] + span {
+ vertical-align: top;
+ top: 6px;
+ position: absolute;
+ max-width: 80%;
+ left: 30px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+#externalStorage .select2-container .select2-search-choice {
+ display: flex;
+}
+#externalStorage .select2-container .select2-search-choice .select2-search-choice-close {
+ display: block;
+ left: auto;
+ position: relative;
+ width: 20px;
+}
+
+#externalStorage .mountOptionsToggle .dropdown {
+ width: auto;
+}
+
+.nav-icon-external-storage {
+ background-image: var(--icon-external-dark);
+}
+
+/*# sourceMappingURL=settings.css.map */
diff --git a/apps/files_external/css/settings.css.map b/apps/files_external/css/settings.css.map
new file mode 100644
index 00000000000..d084c036f9a
--- /dev/null
+++ b/apps/files_external/css/settings.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["settings.scss"],"names":[],"mappings":"AAAA;EACC;;;AAGD;EACC;;AAEA;EACC;;;AAKD;EACC;;;AAIF;AACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGA;EACC;EACA;;;AAGF;EAA0B;EAAiB;;;AAC3C;EAAgC;EAAiB;EAAgB;;;AACjE;EAAoB;;;AACpB;EAA+B;;;AAC/B;EAA2B;;;AAE3B;EACC;;AACA;EAGC;EACA;EACA;;AACA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;EACC;;;AAMJ;EACC;EACA;;;AAGD;AAAA;EAEC;;;AAED;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAID;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;AACA;EACC;EACA;EACA;EACA;;;AAIF;EACC;;;AAGD;EACC","file":"settings.css"} \ No newline at end of file
diff --git a/apps/files_sharing/css/icons.css b/apps/files_sharing/css/icons.css
new file mode 100644
index 00000000000..ff5c5844df6
--- /dev/null
+++ b/apps/files_sharing/css/icons.css
@@ -0,0 +1,94 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+.icon-room {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-app-dark);
+}
+
+.icon-circle {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-circles-dark);
+}
+
+.icon-guests {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-app-dark);
+}
+
+/*# sourceMappingURL=icons.css.map */
diff --git a/apps/files_sharing/css/icons.css.map b/apps/files_sharing/css/icons.css.map
new file mode 100644
index 00000000000..a2766ac03f7
--- /dev/null
+++ b/apps/files_sharing/css/icons.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","icons.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADzBA;ACsCC;EAEA;;;ADrCD;ACmCC;EAEA;;;ADlCD;ACgCC;EAEA","file":"icons.css"} \ No newline at end of file
diff --git a/apps/files_sharing/css/mobile.css b/apps/files_sharing/css/mobile.css
new file mode 100644
index 00000000000..63acecb90c8
--- /dev/null
+++ b/apps/files_sharing/css/mobile.css
@@ -0,0 +1,86 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+@media only screen and (max-width: 1024px) {
+ /* make header scroll up for single shares, more view of content on small screens */
+ #header.share-file {
+ position: absolute !important;
+ }
+
+ /* hide size and date columns */
+ table th#headerSize,
+table td.filesize,
+table th#headerDate,
+table td.date {
+ display: none;
+ }
+
+ /* restrict length of displayed filename to prevent overflow */
+ table td.filename .nametext {
+ max-width: 75% !important;
+ }
+
+ /* on mobile, show single shared image at full width without margin */
+ #imgframe {
+ width: 100%;
+ padding: 0;
+ margin-bottom: 35px;
+ }
+
+ /* some margin for the file type icon */
+ #imgframe .publicpreview {
+ margin-top: 32px;
+ }
+
+ /* some padding for better clickability */
+ #fileList a.action img {
+ padding: 0 6px 0 12px;
+ }
+
+ /* hide text of the actions on mobile */
+ #fileList a.action:not(.menuitem) span {
+ display: none;
+ }
+
+ /* ellipsis on file names */
+ .nametext {
+ width: 60%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ #header .menutoggle {
+ padding-right: 14px;
+ background-position: center;
+ }
+
+ .note {
+ padding: 0 20px;
+ }
+
+ #emptycontent {
+ margin-top: 10vh;
+ }
+}
+
+/*# sourceMappingURL=mobile.css.map */
diff --git a/apps/files_sharing/css/mobile.css.map b/apps/files_sharing/css/mobile.css.map
new file mode 100644
index 00000000000..36f4289e94a
--- /dev/null
+++ b/apps/files_sharing/css/mobile.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;AAEA;EACA;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;IACA;;;EAGD;IACI;IACA;;;EAEJ;IACC;;;EAGD;IACC","file":"mobile.css"} \ No newline at end of file
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
new file mode 100644
index 00000000000..21dd876905c
--- /dev/null
+++ b/apps/files_sharing/css/public.css
@@ -0,0 +1,237 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#preview {
+ text-align: center;
+}
+
+#preview .notCreatable {
+ display: none;
+}
+
+#noPreview {
+ display: none;
+ padding-top: 80px;
+}
+
+#imgframe {
+ height: 75%;
+ padding-bottom: 32px;
+ padding-top: 32px;
+ width: 80%;
+ margin: 0 auto;
+}
+
+#imgframe img {
+ max-height: 100% !important;
+ max-width: 100% !important;
+}
+
+#imgframe audio {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+#imgframe .text-preview {
+ display: inline-block;
+ position: relative;
+ text-align: left;
+ white-space: pre-wrap;
+ overflow-y: hidden;
+ height: auto;
+ min-height: 200px;
+ max-height: 800px;
+}
+
+#imgframe .ellipsis {
+ font-size: 1.2em;
+}
+
+/* fix multiselect bar offset on shared page */
+thead {
+ left: 0 !important;
+}
+
+#data-upload-form {
+ position: relative;
+ right: 0;
+ height: 32px;
+ overflow: hidden;
+ padding: 0;
+ float: right;
+ display: inline;
+ margin: 0;
+}
+
+/* keep long file names in one line to not overflow download button on mobile */
+.directDownload #downloadFile {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 90%;
+ display: inline-block;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 16px;
+}
+
+.download-size {
+ opacity: 0.5;
+}
+
+/* header buttons */
+#details {
+ display: inline-flex;
+}
+
+#details button,
+#details input,
+#details .button {
+ margin: 0 5px;
+ line-height: normal;
+}
+
+#details button:hover,
+#details input:hover,
+#details .button:hover {
+ /* No */
+ border-color: rgba(0, 0, 0, 0.3) !important;
+}
+
+#public-upload .avatardiv {
+ margin: 0 auto;
+}
+
+#emptycontent.has-note {
+ margin-top: 5vh;
+}
+
+#public-upload #emptycontent h2 {
+ margin: 10px 0 5px 0;
+}
+
+#public-upload #emptycontent h2 + p {
+ margin-bottom: 30px;
+}
+
+#public-upload #emptycontent .icon-folder {
+ height: 16px;
+ width: 16px;
+ background-size: 16px;
+ display: inline-block;
+ vertical-align: text-top;
+ margin-bottom: 0;
+ margin-right: 5px;
+ opacity: 1;
+}
+
+#public-upload #emptycontent #displayavatar .icon-folder {
+ height: 48px;
+ width: 48px;
+ background-size: 48px;
+}
+
+#public-upload #emptycontent .button {
+ display: inline-block;
+ height: auto;
+ width: auto;
+ background-size: 16px;
+ background-position: 16px;
+ opacity: 0.7;
+ font-size: 20px;
+ line-height: initial;
+ margin: 20px;
+ padding: 10px 20px;
+ padding-left: 42px;
+}
+
+#public-upload #emptycontent ul {
+ width: 230px;
+ margin: 5px auto 5vh;
+ text-align: left;
+}
+
+#public-upload #emptycontent li {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ padding: 7px 0;
+}
+
+#public-upload #emptycontent li img {
+ margin-right: 5px;
+ position: relative;
+ top: 2px;
+}
+
+#drop-upload-progress-indicator span.icon-loading-small {
+ padding-left: 18px;
+ margin-right: 7px;
+}
+
+#drop-uploaded-files li #drop-upload-name {
+ float: left;
+ max-width: 180px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+#drop-uploaded-files li #drop-upload-status {
+ float: right;
+}
+
+.disclaimer,
+.note {
+ margin: 0 auto 30px;
+ max-width: 400px;
+ text-align: left;
+}
+
+#note-content {
+ padding: 5px;
+ display: inline-block;
+ width: 350px;
+}
+#note-content .content {
+ overflow: auto;
+ max-height: 200px;
+}
+
+#show-terms-dialog {
+ cursor: pointer;
+ font-weight: bold;
+}
+
+@media only screen and (min-width: 1025px) {
+ #body-public .header-right #header-actions-menu > ul > li#download {
+ display: none;
+ }
+}
+@media only screen and (max-width: 1024px) {
+ #body-public .header-right #header-primary-action {
+ display: none;
+ }
+}
+
+/*# sourceMappingURL=public.css.map */
diff --git a/apps/files_sharing/css/public.css.map b/apps/files_sharing/css/public.css.map
new file mode 100644
index 00000000000..c100a63b6d8
--- /dev/null
+++ b/apps/files_sharing/css/public.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC","file":"public.css"} \ No newline at end of file
diff --git a/apps/files_sharing/css/publicView.css b/apps/files_sharing/css/publicView.css
new file mode 100644
index 00000000000..c10620e59bf
--- /dev/null
+++ b/apps/files_sharing/css/publicView.css
@@ -0,0 +1,320 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#preview {
+ text-align: center;
+}
+
+#preview .notCreatable {
+ display: none;
+}
+
+#noPreview {
+ display: none;
+ padding-top: 80px;
+}
+
+#imgframe {
+ height: 75%;
+ padding-bottom: 32px;
+ padding-top: 32px;
+ width: 80%;
+ margin: 0 auto;
+}
+
+#imgframe img {
+ max-height: 100% !important;
+ max-width: 100% !important;
+}
+
+#imgframe audio {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+#imgframe .text-preview {
+ display: inline-block;
+ position: relative;
+ text-align: left;
+ white-space: pre-wrap;
+ overflow-y: hidden;
+ height: auto;
+ min-height: 200px;
+ max-height: 800px;
+}
+
+#imgframe .ellipsis {
+ font-size: 1.2em;
+}
+
+/* fix multiselect bar offset on shared page */
+thead {
+ left: 0 !important;
+}
+
+#data-upload-form {
+ position: relative;
+ right: 0;
+ height: 32px;
+ overflow: hidden;
+ padding: 0;
+ float: right;
+ display: inline;
+ margin: 0;
+}
+
+/* keep long file names in one line to not overflow download button on mobile */
+.directDownload #downloadFile {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 90%;
+ display: inline-block;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 16px;
+}
+
+.download-size {
+ opacity: 0.5;
+}
+
+/* header buttons */
+#details {
+ display: inline-flex;
+}
+
+#details button,
+#details input,
+#details .button {
+ margin: 0 5px;
+ line-height: normal;
+}
+
+#details button:hover,
+#details input:hover,
+#details .button:hover {
+ /* No */
+ border-color: rgba(0, 0, 0, 0.3) !important;
+}
+
+#public-upload .avatardiv {
+ margin: 0 auto;
+}
+
+#emptycontent.has-note {
+ margin-top: 5vh;
+}
+
+#public-upload #emptycontent h2 {
+ margin: 10px 0 5px 0;
+}
+
+#public-upload #emptycontent h2 + p {
+ margin-bottom: 30px;
+}
+
+#public-upload #emptycontent .icon-folder {
+ height: 16px;
+ width: 16px;
+ background-size: 16px;
+ display: inline-block;
+ vertical-align: text-top;
+ margin-bottom: 0;
+ margin-right: 5px;
+ opacity: 1;
+}
+
+#public-upload #emptycontent #displayavatar .icon-folder {
+ height: 48px;
+ width: 48px;
+ background-size: 48px;
+}
+
+#public-upload #emptycontent .button {
+ display: inline-block;
+ height: auto;
+ width: auto;
+ background-size: 16px;
+ background-position: 16px;
+ opacity: 0.7;
+ font-size: 20px;
+ line-height: initial;
+ margin: 20px;
+ padding: 10px 20px;
+ padding-left: 42px;
+}
+
+#public-upload #emptycontent ul {
+ width: 230px;
+ margin: 5px auto 5vh;
+ text-align: left;
+}
+
+#public-upload #emptycontent li {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ padding: 7px 0;
+}
+
+#public-upload #emptycontent li img {
+ margin-right: 5px;
+ position: relative;
+ top: 2px;
+}
+
+#drop-upload-progress-indicator span.icon-loading-small {
+ padding-left: 18px;
+ margin-right: 7px;
+}
+
+#drop-uploaded-files li #drop-upload-name {
+ float: left;
+ max-width: 180px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+#drop-uploaded-files li #drop-upload-status {
+ float: right;
+}
+
+.disclaimer,
+.note {
+ margin: 0 auto 30px;
+ max-width: 400px;
+ text-align: left;
+}
+
+#note-content {
+ padding: 5px;
+ display: inline-block;
+ width: 350px;
+}
+#note-content .content {
+ overflow: auto;
+ max-height: 200px;
+}
+
+#show-terms-dialog {
+ cursor: pointer;
+ font-weight: bold;
+}
+
+@media only screen and (min-width: 1025px) {
+ #body-public .header-right #header-actions-menu > ul > li#download {
+ display: none;
+ }
+}
+@media only screen and (max-width: 1024px) {
+ #body-public .header-right #header-primary-action {
+ display: none;
+ }
+}
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+@media only screen and (max-width: 1024px) {
+ /* make header scroll up for single shares, more view of content on small screens */
+ #header.share-file {
+ position: absolute !important;
+ }
+
+ /* hide size and date columns */
+ table th#headerSize,
+table td.filesize,
+table th#headerDate,
+table td.date {
+ display: none;
+ }
+
+ /* restrict length of displayed filename to prevent overflow */
+ table td.filename .nametext {
+ max-width: 75% !important;
+ }
+
+ /* on mobile, show single shared image at full width without margin */
+ #imgframe {
+ width: 100%;
+ padding: 0;
+ margin-bottom: 35px;
+ }
+
+ /* some margin for the file type icon */
+ #imgframe .publicpreview {
+ margin-top: 32px;
+ }
+
+ /* some padding for better clickability */
+ #fileList a.action img {
+ padding: 0 6px 0 12px;
+ }
+
+ /* hide text of the actions on mobile */
+ #fileList a.action:not(.menuitem) span {
+ display: none;
+ }
+
+ /* ellipsis on file names */
+ .nametext {
+ width: 60%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ #header .menutoggle {
+ padding-right: 14px;
+ background-position: center;
+ }
+
+ .note {
+ padding: 0 20px;
+ }
+
+ #emptycontent {
+ margin-top: 10vh;
+ }
+}
+
+/*# sourceMappingURL=publicView.css.map */
diff --git a/apps/files_sharing/css/publicView.css.map b/apps/files_sharing/css/publicView.css.map
new file mode 100644
index 00000000000..e49de3e17ba
--- /dev/null
+++ b/apps/files_sharing/css/publicView.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC;;;ADjOJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AEEA;AAEA;EACA;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;IACA;;;EAGD;IACI;IACA;;;EAEJ;IACC;;;EAGD;IACC","file":"publicView.css"} \ No newline at end of file
diff --git a/apps/files_sharing/src/components/SharingInput.vue b/apps/files_sharing/src/components/SharingInput.vue
index 02c1f27f173..9cb40697636 100644
--- a/apps/files_sharing/src/components/SharingInput.vue
+++ b/apps/files_sharing/src/components/SharingInput.vue
@@ -528,7 +528,7 @@ export default {
.multiselect__option {
span[lookup] {
.avatardiv {
- background-image: var(--icon-search-fff);
+ background-image: var(--icon-search-white);
background-repeat: no-repeat;
background-position: center;
background-color: var(--color-text-maxcontrast) !important;
diff --git a/apps/settings/css/settings.css b/apps/settings/css/settings.css
new file mode 100644
index 00000000000..32bd6599f62
--- /dev/null
+++ b/apps/settings/css/settings.css
@@ -0,0 +1,1598 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+input#openid, input#webdav {
+ width: 20em;
+}
+
+/* PERSONAL */
+.clear {
+ clear: both;
+}
+
+/* icons for sidebar */
+.nav-icon-personal-settings {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-personal-dark);
+}
+
+.nav-icon-security {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-toggle-filelist-dark);
+}
+
+.nav-icon-clientsbox {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-change-dark);
+}
+
+.nav-icon-federated-cloud {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-share-dark);
+}
+
+.nav-icon-second-factor-backup-codes, .nav-icon-ssl-root-certificate {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-password-dark);
+}
+
+#avatarform .avatardiv {
+ margin: 10px auto;
+}
+#avatarform .warning {
+ width: 100%;
+}
+#avatarform .jcrop-keymgr {
+ display: none !important;
+}
+
+#displayavatar {
+ text-align: center;
+}
+
+#uploadavatarbutton, #selectavatar, #removeavatar {
+ padding: 21px;
+}
+
+#selectavatar, #removeavatar {
+ vertical-align: top;
+}
+
+.jcrop-holder {
+ z-index: 500;
+}
+
+#cropper {
+ float: left;
+ z-index: 500;
+ /* float cropper above settings page to prevent unexpected flowing from dynamically sized element */
+ position: fixed;
+ background-color: rgba(0, 0, 0, 0.2);
+ box-sizing: border-box;
+ top: 45px;
+ left: 0;
+ width: 100%;
+ height: calc(100% - 45px);
+}
+#cropper .inner-container {
+ z-index: 2001;
+ /* above the top bar if needed */
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ background: #fff;
+ color: #333;
+ border-radius: var(--border-radius-large);
+ box-shadow: 0 0 10px var(--color-box-shadow);
+ padding: 15px;
+}
+#cropper .inner-container .jcrop-holder,
+#cropper .inner-container .jcrop-holder img,
+#cropper .inner-container img.jcrop-preview {
+ border-radius: var(--border-radius);
+}
+#cropper .inner-container .button {
+ margin-top: 15px;
+}
+#cropper .inner-container .primary {
+ float: right;
+}
+
+#personal-settings-avatar-container {
+ display: inline-grid;
+ grid-template-columns: 1fr;
+ grid-template-rows: 2fr 1fr 2fr;
+ vertical-align: top;
+}
+
+.profile-settings-container {
+ display: inline-grid;
+ grid-template-columns: 1fr;
+ grid-template-rows: 1fr 1fr 1fr 2fr;
+}
+.profile-settings-container #locale h3 {
+ height: 32px;
+}
+
+.personal-show-container {
+ width: 100%;
+}
+
+.personal-settings-setting-box .section {
+ padding: 10px 30px;
+}
+.personal-settings-setting-box .section h3 {
+ margin-bottom: 0;
+}
+.personal-settings-setting-box .section input[type=text], .personal-settings-setting-box .section input[type=email], .personal-settings-setting-box .section input[type=tel], .personal-settings-setting-box .section input[type=url] {
+ width: 100%;
+}
+
+select#timezone, select#languageinput, select#localeinput {
+ width: 100%;
+}
+
+#personal-settings {
+ display: grid;
+ padding: 20px;
+ max-width: 1500px;
+ grid-template-columns: 1fr 2fr 1fr;
+}
+#personal-settings .section {
+ padding: 10px 10px;
+ border: 0;
+}
+#personal-settings .section h2 {
+ margin-bottom: 12px;
+}
+#personal-settings .personal-info {
+ margin-right: 10%;
+ margin-bottom: 12px;
+ margin-top: 12px;
+}
+#personal-settings .personal-info[class^=icon-], #personal-settings .personal-info[class*=" icon-"] {
+ background-position: 0px 2px;
+ padding-left: 30px;
+ opacity: 0.7;
+}
+
+.development-notice {
+ text-align: center;
+}
+
+.link-button {
+ display: inline-block;
+ margin: 16px;
+ padding: 14px 20px;
+ background-color: var(--color-primary);
+ color: #fff;
+ border-radius: var(--border-radius-pill);
+ border: 1px solid var(--color-primary);
+ box-shadow: 0 2px 9px var(--color-box-shadow);
+}
+.link-button:active, .link-button:hover, .link-button:focus {
+ color: var(--color-primary);
+ background-color: var(--color-primary-text);
+ border-color: var(--color-primary) !important;
+}
+.link-button.icon-file {
+ padding-left: 48px;
+ background-position: 24px;
+}
+
+@media (min-width: 1200px) and (max-width: 1400px) {
+ #personal-settings {
+ display: grid;
+ grid-template-columns: 1fr 2fr;
+ }
+ #personal-settings #personal-settings-avatar-container {
+ grid-template-columns: 1fr;
+ grid-template-rows: 1fr;
+ }
+ #personal-settings .personal-settings-container {
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr 1fr 1fr 1fr;
+ }
+ #personal-settings .profile-settings-container {
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr;
+ grid-column: 2;
+ }
+}
+@media (max-width: 1200px) {
+ #personal-settings {
+ display: grid;
+ grid-template-columns: 1fr;
+ }
+ #personal-settings #personal-settings-avatar-container {
+ grid-template-rows: 1fr;
+ }
+ #personal-settings .personal-settings-container {
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr 1fr 1fr 1fr;
+ }
+ #personal-settings .profile-settings-container {
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr;
+ }
+}
+@media (max-width: 560px) {
+ #personal-settings {
+ display: grid;
+ grid-template-columns: 1fr;
+ }
+ #personal-settings #personal-settings-avatar-container {
+ grid-template-rows: 1fr;
+ }
+ #personal-settings .personal-settings-container {
+ grid-template-columns: 1fr;
+ grid-template-rows: 1fr 1fr 1fr 1fr 1fr 1fr;
+ }
+ #personal-settings .profile-settings-container {
+ grid-template-columns: 1fr;
+ grid-template-rows: 1fr 1fr;
+ }
+}
+.personal-settings-container {
+ display: inline-grid;
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
+}
+.personal-settings-container:after {
+ clear: both;
+}
+.personal-settings-container > div h3 {
+ position: relative;
+ display: inline-flex;
+ flex-wrap: nowrap;
+ justify-content: flex-start;
+ width: 100%;
+}
+.personal-settings-container > div h3 > label {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.personal-settings-container > div > form span[class^=icon-checkmark], .personal-settings-container > div > form span[class^=icon-error] {
+ position: relative;
+ right: 8px;
+ top: -28px;
+ pointer-events: none;
+ float: right;
+}
+.personal-settings-container .verify {
+ position: relative;
+ left: 100%;
+ top: 0;
+ height: 0;
+}
+.personal-settings-container .verify img {
+ padding: 12px 7px 6px;
+}
+.personal-settings-container .verify-action {
+ cursor: pointer;
+}
+.personal-settings-container input:disabled {
+ background-color: white;
+ color: black;
+ border: none;
+ opacity: 100;
+}
+
+#body-settings #quota {
+ cursor: default;
+ position: relative;
+}
+#body-settings #quota progress {
+ height: 6px;
+}
+#body-settings #quota progress::-moz-progress-bar {
+ border-radius: 3px 0 0 3px;
+}
+#body-settings #quota progress::-webkit-progress-value {
+ border-radius: 3px 0 0 3px;
+}
+#body-settings #quota div {
+ font-weight: normal;
+ white-space: nowrap;
+}
+
+/* verify accounts */
+/* only show pointer cursor when popup will be there */
+.verification-dialog {
+ display: none;
+ right: -9px;
+ top: 40px;
+ width: 275px;
+}
+.verification-dialog p {
+ padding: 10px;
+}
+.verification-dialog .verificationCode {
+ font-family: monospace;
+ display: block;
+ overflow-wrap: break-word;
+}
+
+.federation-menu {
+ position: relative;
+ cursor: pointer;
+ width: 44px;
+ height: 44px;
+ padding: 10px;
+ margin: -12px 0 0 8px;
+ background: none;
+ border: none;
+}
+.federation-menu:hover, .federation-menu:focus {
+ background-color: var(--color-background-hover);
+ border-radius: var(--border-radius-pill);
+}
+.federation-menu:hover .icon-federation-menu, .federation-menu:focus .icon-federation-menu {
+ opacity: 0.8;
+}
+.federation-menu .icon-federation-menu {
+ padding-left: 16px;
+ background-size: 16px;
+ background-position: left center;
+ opacity: 0.3;
+ cursor: inherit;
+}
+.federation-menu .icon-federation-menu .icon-triangle-s {
+ display: inline-block;
+ vertical-align: middle;
+ cursor: inherit;
+}
+.federation-menu .federationScopeMenu {
+ top: 44px;
+}
+.federation-menu .federationScopeMenu.popovermenu .menuitem {
+ font-size: 12.8px;
+ line-height: 1.6em;
+}
+.federation-menu .federationScopeMenu.popovermenu .menuitem .menuitem-text-detail {
+ opacity: 0.75;
+}
+.federation-menu .federationScopeMenu.popovermenu .menuitem.active {
+ box-shadow: inset 2px 0 var(--color-primary);
+}
+.federation-menu .federationScopeMenu.popovermenu .menuitem.active .menuitem-text {
+ font-weight: bold;
+}
+.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled {
+ opacity: 0.5;
+ cursor: default;
+}
+.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled * {
+ cursor: default;
+}
+
+#groups-groups {
+ padding-top: 5px;
+}
+
+.clientsbox img {
+ height: 60px;
+}
+
+#sslCertificate tr.expired {
+ background-color: rgba(255, 0, 0, 0.5);
+}
+#sslCertificate td {
+ padding: 5px;
+}
+
+#displaynameerror,
+#displaynamechanged {
+ display: none;
+}
+
+input#identity {
+ width: 20em;
+}
+
+#showWizard {
+ display: inline-block;
+}
+
+.msg.success {
+ color: #fff;
+ background-color: #47a447;
+ padding: 3px;
+}
+.msg.error {
+ color: #fff;
+ background-color: #d2322d;
+ padding: 3px;
+}
+
+table.nostyle label {
+ margin-right: 2em;
+}
+table.nostyle td {
+ padding: 0.2em 0;
+}
+
+#security-password #passwordform {
+ display: flex;
+ flex-wrap: wrap;
+}
+#security-password #passwordform #pass1, #security-password #passwordform .personal-show-container, #security-password #passwordform #passwordbutton {
+ flex-shrink: 1;
+ width: 200px;
+ min-width: 150px;
+}
+#security-password #passwordform #pass2 {
+ width: 100%;
+}
+#security-password #passwordform .password-state {
+ display: inline-block;
+}
+#security-password #passwordform .strengthify-wrapper {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ border-radius: 0 0 2px 2px;
+ margin-top: -6px;
+ overflow: hidden;
+ height: 3px;
+}
+
+/* Two-Factor Authentication (2FA) */
+#two-factor-auth h3 {
+ margin-top: 24px;
+}
+#two-factor-auth li > div {
+ margin-left: 20px;
+}
+#two-factor-auth .two-factor-provider-settings-icon {
+ width: 16px;
+ height: 16px;
+ vertical-align: sub;
+}
+
+.social-button {
+ padding-left: 0 !important;
+ margin-left: -10px;
+}
+.social-button img {
+ padding: 10px;
+}
+
+/* USERS */
+.isgroup .groupname {
+ width: 85%;
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.isgroup.active .groupname {
+ width: 65%;
+}
+
+li.active .delete,
+li.active .rename {
+ display: block;
+}
+
+.app-navigation-entry-utils .delete,
+.app-navigation-entry-utils .rename {
+ display: none;
+}
+
+#usersearchform {
+ position: absolute;
+ top: 2px;
+ right: 0;
+}
+#usersearchform input {
+ width: 150px;
+}
+#usersearchform label {
+ font-weight: bold;
+}
+
+/* display table at full width */
+table.grid {
+ width: 100%;
+}
+table.grid th {
+ height: 2em;
+ color: #999;
+ border-bottom: 1px solid var(--color-border);
+ padding: 0 0.5em;
+ padding-left: 0.8em;
+ text-align: left;
+ font-weight: normal;
+}
+table.grid td {
+ border-bottom: 1px solid var(--color-border);
+ padding: 0 0.5em;
+ padding-left: 0.8em;
+ text-align: left;
+ font-weight: normal;
+}
+
+td.name, th.name {
+ padding-left: 0.8em;
+ min-width: 5em;
+ max-width: 12em;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+td.password, th.password {
+ padding-left: 0.8em;
+}
+td.password > img, th.password > img {
+ visibility: hidden;
+}
+td.displayName > img, th.displayName > img {
+ visibility: hidden;
+}
+td.password, td.mailAddress, th.password, th.mailAddress {
+ min-width: 5em;
+ max-width: 12em;
+ cursor: pointer;
+}
+td.password span, td.mailAddress span, th.password span, th.mailAddress span {
+ width: 90%;
+ display: inline-block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+td.mailAddress, th.mailAddress {
+ cursor: pointer;
+}
+td.password > span, th.password > span {
+ margin-right: 1.2em;
+ color: #C7C7C7;
+}
+
+span.usersLastLoginTooltip {
+ white-space: nowrap;
+}
+
+/* APPS */
+#app-content > svg.app-filter {
+ float: left;
+ height: 0;
+ width: 0;
+}
+
+#app-category-app-bundles {
+ margin-bottom: 20px;
+}
+
+.appinfo {
+ margin: 1em 40px;
+}
+
+#app-navigation {
+ /* Navigation icons */
+}
+#app-navigation img {
+ margin-bottom: -3px;
+ margin-right: 6px;
+ width: 16px;
+}
+#app-navigation li span.no-icon {
+ padding-left: 32px;
+}
+#app-navigation ul li.active > span.utils .delete, #app-navigation ul li.active > span.utils .rename {
+ display: block;
+}
+#app-navigation .appwarning {
+ background: #fcc;
+}
+#app-navigation.appwarning:hover {
+ background: #fbb;
+}
+#app-navigation .app-external {
+ color: var(--color-text-maxcontrast);
+}
+
+span.version {
+ margin-left: 1em;
+ margin-right: 1em;
+ color: var(--color-text-maxcontrast);
+}
+
+.app-version {
+ color: var(--color-text-maxcontrast);
+}
+
+.app-level span {
+ color: var(--color-text-maxcontrast);
+ background-color: transparent;
+ border: 1px solid var(--color-text-maxcontrast);
+ border-radius: var(--border-radius);
+ padding: 3px 6px;
+}
+.app-level a {
+ padding: 10px;
+ margin: -6px;
+ white-space: nowrap;
+}
+.app-level .official {
+ background-position: left center;
+ background-position: 5px center;
+ padding-left: 25px;
+}
+.app-level .supported {
+ border-color: var(--color-success);
+ background-position: left center;
+ background-position: 5px center;
+ padding-left: 25px;
+ color: var(--color-success);
+}
+
+.app-score {
+ position: relative;
+ top: 4px;
+ opacity: 0.5;
+}
+
+.app-settings-content #searchresults {
+ display: none;
+}
+
+#apps-list.store .section {
+ border: 0;
+}
+#apps-list.store .app-name {
+ display: block;
+ margin: 5px 0;
+}
+#apps-list.store .app-name, #apps-list.store .app-image * {
+ cursor: pointer;
+}
+#apps-list.store .app-summary {
+ opacity: 0.7;
+}
+#apps-list.store .app-image-icon .icon-settings-dark {
+ width: 100%;
+ height: 150px;
+ background-size: 45px;
+ opacity: 0.5;
+}
+#apps-list.store .app-score-image {
+ height: 14px;
+}
+#apps-list.store .actions {
+ margin-top: 10px;
+}
+
+#app-sidebar #app-details-view h2 .icon-settings-dark,
+#app-sidebar #app-details-view h2 svg {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ margin-right: 10px;
+ opacity: 0.7;
+}
+#app-sidebar #app-details-view .app-level {
+ clear: right;
+ width: 100%;
+}
+#app-sidebar #app-details-view .app-level .supported,
+#app-sidebar #app-details-view .app-level .official {
+ vertical-align: top;
+}
+#app-sidebar #app-details-view .app-level .app-score-image {
+ float: right;
+}
+#app-sidebar #app-details-view .app-author, #app-sidebar #app-details-view .app-licence {
+ color: var(--color-text-maxcontrast);
+}
+#app-sidebar #app-details-view .app-dependencies {
+ margin: 10px 0;
+}
+#app-sidebar #app-details-view .app-description p {
+ margin: 10px 0;
+}
+#app-sidebar #app-details-view .close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 14px;
+ opacity: 0.5;
+ z-index: 1;
+ width: 44px;
+ height: 44px;
+}
+#app-sidebar #app-details-view .actions {
+ display: flex;
+ align-items: center;
+}
+#app-sidebar #app-details-view .actions .app-groups {
+ padding: 5px;
+}
+#app-sidebar #app-details-view .appslink {
+ text-decoration: underline;
+ margin-right: 5px;
+}
+#app-sidebar #app-details-view .app-level,
+#app-sidebar #app-details-view .actions,
+#app-sidebar #app-details-view .documentation,
+#app-sidebar #app-details-view .app-dependencies,
+#app-sidebar #app-details-view .app-description {
+ margin: 20px 0;
+}
+
+@media only screen and (min-width: 1601px) {
+ .store .section {
+ width: 25%;
+ }
+
+ .with-app-sidebar .store .section {
+ width: 33%;
+ }
+}
+@media only screen and (max-width: 1600px) {
+ .store .section {
+ width: 25%;
+ }
+
+ .with-app-sidebar .store .section {
+ width: 33%;
+ }
+}
+@media only screen and (max-width: 1400px) {
+ .store .section {
+ width: 33%;
+ }
+
+ .with-app-sidebar .store .section {
+ width: 50%;
+ }
+}
+@media only screen and (max-width: 900px) {
+ .store .section {
+ width: 50%;
+ }
+
+ .with-app-sidebar .store .section {
+ width: 100%;
+ }
+}
+@media only screen and (max-width: 1024px) {
+ .store .section {
+ width: 50%;
+ }
+}
+@media only screen and (max-width: 480px) {
+ .store .section {
+ width: 100%;
+ }
+}
+/* hide app version and level on narrower screens */
+@media only screen and (max-width: 900px) {
+ .apps-list.installed .app-version, .apps-list.installed .app-level {
+ display: none !important;
+ }
+}
+@media only screen and (max-width: 500px) {
+ .apps-list.installed .app-groups {
+ display: none !important;
+ }
+}
+#version.section {
+ border-bottom: none;
+}
+
+.section {
+ margin-bottom: 0;
+ /* section divider lines, none needed for last one */
+ /* correctly display help icons next to headings */
+}
+.section:not(:last-child) {
+ border-bottom: 1px solid var(--color-border);
+}
+.section h2 {
+ margin-bottom: 22px;
+}
+.section h2 .icon-info {
+ padding: 6px 20px;
+ vertical-align: text-bottom;
+ display: inline-block;
+}
+
+.followupsection {
+ display: block;
+ padding: 0 30px 30px 30px;
+ color: #555;
+}
+
+.app-image {
+ position: relative;
+ height: 150px;
+ opacity: 1;
+ overflow: hidden;
+}
+
+.app-name, .app-version, .app-score, .app-level {
+ display: inline-block;
+}
+
+.app-description-toggle-show, .app-description-toggle-hide {
+ clear: both;
+ padding: 7px 0;
+ cursor: pointer;
+ opacity: 0.5;
+}
+
+.app-description-container {
+ clear: both;
+ position: relative;
+ top: 7px;
+}
+
+.app-description {
+ clear: both;
+}
+
+#app-category-1 {
+ margin-bottom: 18px;
+}
+
+/* capitalize 'Other' category */
+#app-category-925 {
+ text-transform: capitalize;
+}
+
+.app-dependencies {
+ color: #ce3702;
+}
+
+.missing-dependencies {
+ list-style: initial;
+ list-style-type: initial;
+ list-style-position: inside;
+}
+
+.apps-list {
+ display: flex;
+ flex-wrap: wrap;
+ align-content: flex-start;
+ /* Bundle header */
+}
+.apps-list .section {
+ cursor: pointer;
+}
+.apps-list .app-list-move {
+ transition: transform 1s;
+}
+.apps-list #app-list-update-all {
+ margin-left: 10px;
+}
+.apps-list .toolbar {
+ height: 60px;
+ padding: 8px;
+ padding-left: 60px;
+ width: 100%;
+ background-color: var(--color-main-background);
+ position: fixed;
+ z-index: 1;
+ display: flex;
+ align-items: center;
+}
+.apps-list.installed {
+ margin-bottom: 100px;
+}
+.apps-list.installed .apps-list-container {
+ display: table;
+ width: 100%;
+ height: auto;
+ margin-top: 60px;
+}
+.apps-list.installed .section {
+ display: table-row;
+ padding: 0;
+ margin: 0;
+}
+.apps-list.installed .section > * {
+ display: table-cell;
+ height: initial;
+ vertical-align: middle;
+ float: none;
+ border-bottom: 1px solid var(--color-border);
+ padding: 6px;
+ box-sizing: border-box;
+}
+.apps-list.installed .section.selected {
+ background-color: var(--color-background-dark);
+}
+.apps-list.installed .groups-enable {
+ margin-top: 0;
+}
+.apps-list.installed .groups-enable label {
+ margin-right: 3px;
+}
+.apps-list.installed .app-image {
+ width: 44px;
+ height: auto;
+ text-align: right;
+}
+.apps-list.installed .app-image-icon svg,
+.apps-list.installed .app-image-icon .icon-settings-dark {
+ margin-top: 5px;
+ width: 20px;
+ height: 20px;
+ opacity: 0.5;
+ background-size: cover;
+ display: inline-block;
+}
+.apps-list.installed .actions {
+ text-align: right;
+}
+.apps-list.installed .actions .icon-loading-small {
+ display: inline-block;
+ top: 4px;
+ margin-right: 10px;
+}
+.apps-list:not(.installed) .app-image-icon svg {
+ position: absolute;
+ bottom: 43px;
+ /* position halfway vertically */
+ width: 64px;
+ height: 64px;
+ opacity: 0.1;
+}
+.apps-list.hidden {
+ display: none;
+}
+.apps-list .section {
+ position: relative;
+ flex: 0 0 auto;
+}
+.apps-list .section h2.app-name {
+ display: block;
+ margin: 8px 0;
+}
+.apps-list .section:hover {
+ background-color: var(--color-background-dark);
+}
+.apps-list .app-description p {
+ margin: 10px 0;
+}
+.apps-list .app-description ul {
+ list-style: disc;
+}
+.apps-list .app-description ol {
+ list-style: decimal;
+}
+.apps-list .app-description ol ol, .apps-list .app-description ol ul {
+ padding-left: 15px;
+}
+.apps-list .app-description > ul, .apps-list .app-description > ol {
+ margin-left: 19px;
+}
+.apps-list .app-description ul ol, .apps-list .app-description ul ul {
+ padding-left: 15px;
+}
+.apps-list .apps-header {
+ display: table-row;
+ position: relative;
+}
+.apps-list .apps-header div {
+ display: table-cell;
+ height: 70px;
+}
+.apps-list .apps-header h2 {
+ display: table-cell;
+ position: absolute;
+ padding-left: 6px;
+ padding-top: 15px;
+}
+.apps-list .apps-header h2 .enable {
+ position: relative;
+ top: -1px;
+ margin-left: 12px;
+}
+.apps-list .apps-header h2 + .section {
+ margin-top: 50px;
+}
+
+#apps-list-search .section h2 {
+ margin-bottom: 0;
+}
+
+/* LOG */
+#log {
+ white-space: normal;
+ margin-bottom: 14px;
+}
+
+#lessLog {
+ display: none;
+}
+
+table.grid td.date {
+ white-space: nowrap;
+}
+
+#log-section p {
+ margin-top: 20px;
+}
+
+#security-warning-state-ok span,
+#security-warning-state-warning span,
+#security-warning-state-failure span,
+#security-warning-state-loading span {
+ vertical-align: middle;
+}
+#security-warning-state-ok span.message,
+#security-warning-state-warning span.message,
+#security-warning-state-failure span.message,
+#security-warning-state-loading span.message {
+ padding: 12px;
+}
+#security-warning-state-ok span.icon,
+#security-warning-state-warning span.icon,
+#security-warning-state-failure span.icon,
+#security-warning-state-loading span.icon {
+ width: 32px;
+ height: 32px;
+ background-position: center center;
+ display: inline-block;
+ border-radius: 50%;
+}
+#security-warning-state-ok span.icon-checkmark-white,
+#security-warning-state-warning span.icon-checkmark-white,
+#security-warning-state-failure span.icon-checkmark-white,
+#security-warning-state-loading span.icon-checkmark-white {
+ background-color: var(--color-success);
+}
+#security-warning-state-ok span.icon-error-white,
+#security-warning-state-warning span.icon-error-white,
+#security-warning-state-failure span.icon-error-white,
+#security-warning-state-loading span.icon-error-white {
+ background-color: var(--color-warning);
+}
+#security-warning-state-ok span.icon-close-white,
+#security-warning-state-warning span.icon-close-white,
+#security-warning-state-failure span.icon-close-white,
+#security-warning-state-loading span.icon-close-white {
+ background-color: var(--color-error);
+}
+
+#shareAPI p {
+ padding-bottom: 0.8em;
+}
+#shareAPI input#shareapiExpireAfterNDays {
+ width: 40px;
+}
+#shareAPI .indent {
+ padding-left: 28px;
+}
+#shareAPI .double-indent {
+ padding-left: 56px;
+}
+#shareAPI .nocheckbox {
+ padding-left: 20px;
+}
+
+#shareApiDefaultPermissionsSection label {
+ margin-right: 20px;
+}
+
+#fileSharingSettings h3 {
+ display: inline-block;
+}
+
+#publicShareDisclaimerText {
+ width: calc(100% - 23px);
+ /* 20 px left margin, 3 px right margin */
+ max-width: 600px;
+ height: 150px;
+ margin-left: 20px;
+ box-sizing: border-box;
+}
+
+/* correctly display help icons next to headings */
+.icon-info {
+ padding: 11px 20px;
+ vertical-align: text-bottom;
+ opacity: 0.5;
+}
+
+#two-factor-auth h2,
+#shareAPI h2,
+#encryptionAPI h2,
+#mail_general_settings h2 {
+ display: inline-block;
+}
+
+#encryptionAPI li {
+ list-style-type: initial;
+ margin-left: 20px;
+ padding: 5px 0;
+}
+
+.mail_settings p label:first-child {
+ display: inline-block;
+ width: 300px;
+ text-align: right;
+}
+.mail_settings p select:nth-child(2),
+.mail_settings p input:not([type=button]) {
+ width: 143px;
+}
+
+#mail_smtpport {
+ width: 40px;
+}
+
+.cronlog {
+ margin-left: 10px;
+}
+
+.status {
+ display: inline-block;
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+}
+.status.success {
+ border-radius: 50%;
+}
+
+#selectGroups select {
+ box-sizing: border-box;
+ display: inline-block;
+ height: 36px;
+ padding: 7px 10px;
+}
+
+#log .log-message {
+ word-break: break-all;
+ min-width: 180px;
+}
+
+span.success {
+ background-color: var(--color-success);
+ border-radius: var(--border-radius);
+}
+span.error {
+ background-color: var(--color-error);
+}
+span.indeterminate {
+ background-color: var(--color-warning);
+ border-radius: 40% 0;
+}
+
+/* OPERA hack for strengthify*/
+doesnotexist:-o-prefocus, .strengthify-wrapper {
+ left: 185px;
+ width: 129px;
+}
+
+.trusted-domain-warning {
+ color: #fff;
+ padding: 5px;
+ background: #ce3702;
+ border-radius: 5px;
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+}
+
+#postsetupchecks ul {
+ margin-left: 44px;
+ list-style: disc;
+}
+#postsetupchecks ul li {
+ margin: 10px 0;
+}
+#postsetupchecks ul ul {
+ list-style: circle;
+}
+#postsetupchecks .loading {
+ height: 50px;
+ background-position: left center;
+}
+#postsetupchecks .errors, #postsetupchecks .errors a {
+ color: var(--color-error);
+}
+#postsetupchecks .warnings, #postsetupchecks .warnings a {
+ color: var(--color-warning);
+}
+#postsetupchecks .hint {
+ margin: 20px 0;
+}
+
+#security-warning a {
+ text-decoration: underline;
+}
+#security-warning .extra-top-margin {
+ margin-top: 12px;
+}
+
+#admin-tips li {
+ list-style: initial;
+}
+#admin-tips li a {
+ display: inline-block;
+ padding: 3px 0;
+}
+
+#selectEncryptionModules {
+ margin-left: 30px;
+ padding: 10px;
+}
+
+#encryptionModules {
+ padding: 10px;
+}
+
+#warning {
+ color: red;
+}
+
+.settings-hint {
+ margin-top: -12px;
+ margin-bottom: 12px;
+ opacity: 0.7;
+}
+
+/* USERS LIST -------------------------------------------------------------- */
+#body-settings {
+ overflow-x: scroll;
+ min-height: 100%;
+ height: auto;
+}
+#body-settings #app-content.user-list-grid {
+ display: grid;
+ grid-column-gap: 20px;
+ grid-auto-rows: minmax(60px, max-content);
+}
+#body-settings #app-content.user-list-grid .row {
+ display: flex;
+ display: grid;
+ min-height: 60px;
+ grid-row-start: span 1;
+ grid-gap: 3px;
+ align-items: center;
+ /* let's define the column until storage path,
+ what follows will be manually defined */
+ grid-template-columns: 44px minmax(190px, 1fr) minmax(160px, 1fr) minmax(160px, 1fr) minmax(240px, 1fr) minmax(240px, 1fr) repeat(auto-fit, minmax(160px, 1fr));
+ border-bottom: var(--color-border) 1px solid;
+ /* grid col width */
+ /* various */
+}
+#body-settings #app-content.user-list-grid .row.disabled {
+ opacity: 0.5;
+}
+#body-settings #app-content.user-list-grid .row .name,
+#body-settings #app-content.user-list-grid .row .password,
+#body-settings #app-content.user-list-grid .row .mailAddress,
+#body-settings #app-content.user-list-grid .row .languages,
+#body-settings #app-content.user-list-grid .row .storageLocation,
+#body-settings #app-content.user-list-grid .row .userBackend,
+#body-settings #app-content.user-list-grid .row .lastLogin {
+ min-width: 160px;
+}
+#body-settings #app-content.user-list-grid .row .name doesnotexist:-o-prefocus, #body-settings #app-content.user-list-grid .row .name .strengthify-wrapper,
+#body-settings #app-content.user-list-grid .row .password doesnotexist:-o-prefocus,
+#body-settings #app-content.user-list-grid .row .password .strengthify-wrapper,
+#body-settings #app-content.user-list-grid .row .mailAddress doesnotexist:-o-prefocus,
+#body-settings #app-content.user-list-grid .row .mailAddress .strengthify-wrapper,
+#body-settings #app-content.user-list-grid .row .languages doesnotexist:-o-prefocus,
+#body-settings #app-content.user-list-grid .row .languages .strengthify-wrapper,
+#body-settings #app-content.user-list-grid .row .storageLocation doesnotexist:-o-prefocus,
+#body-settings #app-content.user-list-grid .row .storageLocation .strengthify-wrapper,
+#body-settings #app-content.user-list-grid .row .userBackend doesnotexist:-o-prefocus,
+#body-settings #app-content.user-list-grid .row .userBackend .strengthify-wrapper,
+#body-settings #app-content.user-list-grid .row .lastLogin doesnotexist:-o-prefocus,
+#body-settings #app-content.user-list-grid .row .lastLogin .strengthify-wrapper {
+ color: var(--color-text-dark);
+ vertical-align: baseline;
+ text-overflow: ellipsis;
+}
+#body-settings #app-content.user-list-grid .row:not(.row--editable).name, #body-settings #app-content.user-list-grid .row:not(.row--editable).password, #body-settings #app-content.user-list-grid .row:not(.row--editable).displayName, #body-settings #app-content.user-list-grid .row:not(.row--editable).mailAddress, #body-settings #app-content.user-list-grid .row:not(.row--editable).userBackend, #body-settings #app-content.user-list-grid .row:not(.row--editable).languages {
+ overflow: hidden;
+}
+#body-settings #app-content.user-list-grid .row .groups,
+#body-settings #app-content.user-list-grid .row .subadmins,
+#body-settings #app-content.user-list-grid .row .quota {
+ min-width: 160px;
+}
+#body-settings #app-content.user-list-grid .row .groups .multiselect,
+#body-settings #app-content.user-list-grid .row .subadmins .multiselect,
+#body-settings #app-content.user-list-grid .row .quota .multiselect {
+ width: 100%;
+ color: var(--color-text-dark);
+ vertical-align: baseline;
+}
+#body-settings #app-content.user-list-grid .row .obfuscated {
+ width: 400px;
+ opacity: 0.7;
+}
+#body-settings #app-content.user-list-grid .row .userActions {
+ display: flex;
+ justify-content: flex-end;
+ position: sticky;
+ right: 0px;
+ min-width: 88px;
+ background-color: var(--color-main-background);
+}
+#body-settings #app-content.user-list-grid .row .subtitle {
+ color: var(--color-text-maxcontrast);
+ vertical-align: baseline;
+}
+#body-settings #app-content.user-list-grid .row#grid-header {
+ position: sticky;
+ align-self: normal;
+ background-color: var(--color-main-background);
+ z-index: 100;
+ /* above multiselect */
+ top: 50px;
+}
+#body-settings #app-content.user-list-grid .row#grid-header.sticky {
+ box-shadow: 0 -2px 10px 1px var(--color-box-shadow);
+}
+#body-settings #app-content.user-list-grid .row#grid-header {
+ color: var(--color-text-maxcontrast);
+ border-bottom-width: thin;
+}
+#body-settings #app-content.user-list-grid .row#grid-header #headerDisplayName,
+#body-settings #app-content.user-list-grid .row#grid-header #headerPassword,
+#body-settings #app-content.user-list-grid .row#grid-header #headerAddress,
+#body-settings #app-content.user-list-grid .row#grid-header #headerGroups,
+#body-settings #app-content.user-list-grid .row#grid-header #headerSubAdmins,
+#body-settings #app-content.user-list-grid .row#grid-header #theHeaderUserBackend,
+#body-settings #app-content.user-list-grid .row#grid-header #theHeaderLastLogin,
+#body-settings #app-content.user-list-grid .row#grid-header #headerQuota,
+#body-settings #app-content.user-list-grid .row#grid-header #theHeaderStorageLocation,
+#body-settings #app-content.user-list-grid .row#grid-header #headerLanguages {
+ /* Line up header text with column content for when there’s inputs */
+ padding-left: 7px;
+ text-transform: none;
+ color: var(--color-text-maxcontrast);
+ vertical-align: baseline;
+}
+#body-settings #app-content.user-list-grid .row:hover input:not([type=submit]):not(:focus):not(:active) {
+ border-color: var(--color-border) !important;
+}
+#body-settings #app-content.user-list-grid .row:hover:not(#grid-header) {
+ box-shadow: 5px 0 0 var(--color-primary-element) inset;
+}
+#body-settings #app-content.user-list-grid .row > form {
+ width: 100%;
+}
+#body-settings #app-content.user-list-grid .row > div,
+#body-settings #app-content.user-list-grid .row > .displayName > form,
+#body-settings #app-content.user-list-grid .row > form {
+ grid-row: 1;
+ display: inline-flex;
+ color: var(--color-text-lighter);
+ flex-grow: 1;
+ /* inputs like mail, username, password */
+ /* Fill the grid cell */
+}
+#body-settings #app-content.user-list-grid .row > div > input:not(:focus):not(:active),
+#body-settings #app-content.user-list-grid .row > .displayName > form > input:not(:focus):not(:active),
+#body-settings #app-content.user-list-grid .row > form > input:not(:focus):not(:active) {
+ border-color: transparent;
+ cursor: pointer;
+}
+#body-settings #app-content.user-list-grid .row > div > input:focus + .icon-confirm, #body-settings #app-content.user-list-grid .row > div > input:active + .icon-confirm,
+#body-settings #app-content.user-list-grid .row > .displayName > form > input:focus + .icon-confirm,
+#body-settings #app-content.user-list-grid .row > .displayName > form > input:active + .icon-confirm,
+#body-settings #app-content.user-list-grid .row > form > input:focus + .icon-confirm,
+#body-settings #app-content.user-list-grid .row > form > input:active + .icon-confirm {
+ display: block !important;
+}
+#body-settings #app-content.user-list-grid .row > div:not(.userActions) > input:not([type=submit]),
+#body-settings #app-content.user-list-grid .row > .displayName > form:not(.userActions) > input:not([type=submit]),
+#body-settings #app-content.user-list-grid .row > form:not(.userActions) > input:not([type=submit]) {
+ width: 100%;
+ min-width: 0;
+}
+#body-settings #app-content.user-list-grid .row > div.name,
+#body-settings #app-content.user-list-grid .row > .displayName > form.name,
+#body-settings #app-content.user-list-grid .row > form.name {
+ word-break: break-all;
+}
+#body-settings #app-content.user-list-grid .row > div.displayName > input, #body-settings #app-content.user-list-grid .row > div.mailAddress > input,
+#body-settings #app-content.user-list-grid .row > .displayName > form.displayName > input,
+#body-settings #app-content.user-list-grid .row > .displayName > form.mailAddress > input,
+#body-settings #app-content.user-list-grid .row > form.displayName > input,
+#body-settings #app-content.user-list-grid .row > form.mailAddress > input {
+ text-overflow: ellipsis;
+ flex-grow: 1;
+}
+#body-settings #app-content.user-list-grid .row > div.name, #body-settings #app-content.user-list-grid .row > div.userBackend,
+#body-settings #app-content.user-list-grid .row > .displayName > form.name,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userBackend,
+#body-settings #app-content.user-list-grid .row > form.name,
+#body-settings #app-content.user-list-grid .row > form.userBackend {
+ /* better multi-line visual */
+ line-height: 1.3em;
+ max-height: 100%;
+ overflow: hidden;
+ /* not supported by all browsers
+ so we keep the overflow hidden
+ as a fallback */
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+#body-settings #app-content.user-list-grid .row > div.quota,
+#body-settings #app-content.user-list-grid .row > .displayName > form.quota,
+#body-settings #app-content.user-list-grid .row > form.quota {
+ display: flex;
+ justify-content: left;
+ white-space: nowrap;
+ position: relative;
+}
+#body-settings #app-content.user-list-grid .row > div.quota progress,
+#body-settings #app-content.user-list-grid .row > .displayName > form.quota progress,
+#body-settings #app-content.user-list-grid .row > form.quota progress {
+ width: 150px;
+ margin-top: 35px;
+ height: 3px;
+}
+#body-settings #app-content.user-list-grid .row > div .icon-confirm,
+#body-settings #app-content.user-list-grid .row > .displayName > form .icon-confirm,
+#body-settings #app-content.user-list-grid .row > form .icon-confirm {
+ flex: 0 0 auto;
+ cursor: pointer;
+}
+#body-settings #app-content.user-list-grid .row > div .icon-confirm:not(:active),
+#body-settings #app-content.user-list-grid .row > .displayName > form .icon-confirm:not(:active),
+#body-settings #app-content.user-list-grid .row > form .icon-confirm:not(:active) {
+ display: none;
+}
+#body-settings #app-content.user-list-grid .row > div.avatar,
+#body-settings #app-content.user-list-grid .row > .displayName > form.avatar,
+#body-settings #app-content.user-list-grid .row > form.avatar {
+ height: 32px;
+ width: 32px;
+ margin: 6px;
+}
+#body-settings #app-content.user-list-grid .row > div.avatar img,
+#body-settings #app-content.user-list-grid .row > .displayName > form.avatar img,
+#body-settings #app-content.user-list-grid .row > form.avatar img {
+ display: block;
+}
+#body-settings #app-content.user-list-grid .row > div.userActions,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions,
+#body-settings #app-content.user-list-grid .row > form.userActions {
+ display: flex;
+ justify-content: flex-end;
+}
+#body-settings #app-content.user-list-grid .row > div.userActions #newsubmit,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions #newsubmit,
+#body-settings #app-content.user-list-grid .row > form.userActions #newsubmit {
+ width: 100%;
+}
+#body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions,
+#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions {
+ position: relative;
+ display: flex;
+ align-items: center;
+ background-color: var(--color-main-background);
+}
+#body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more,
+#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more {
+ width: 44px;
+ height: 44px;
+ opacity: 0.5;
+ cursor: pointer;
+}
+#body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more:focus, #body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more:hover, #body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more:active,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more:focus,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more:hover,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more:active,
+#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more:focus,
+#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more:hover,
+#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more:active {
+ opacity: 0.7;
+ background-color: var(--color-background-dark);
+}
+#body-settings #app-content.user-list-grid .row > div.userActions .feedback,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .feedback,
+#body-settings #app-content.user-list-grid .row > form.userActions .feedback {
+ display: flex;
+ align-items: center;
+ white-space: nowrap;
+ transition: opacity 200ms ease-in-out;
+}
+#body-settings #app-content.user-list-grid .row > div.userActions .feedback .icon-checkmark,
+#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .feedback .icon-checkmark,
+#body-settings #app-content.user-list-grid .row > form.userActions .feedback .icon-checkmark {
+ opacity: 0.5;
+ margin-right: 5px;
+}
+#body-settings #app-content.user-list-grid .row > div .multiselect.multiselect-vue,
+#body-settings #app-content.user-list-grid .row > .displayName > form .multiselect.multiselect-vue,
+#body-settings #app-content.user-list-grid .row > form .multiselect.multiselect-vue {
+ width: 100%;
+}
+#body-settings #app-content.user-list-grid .infinite-loading-container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ grid-row-start: span 4;
+}
+#body-settings #app-content.user-list-grid .users-list-end {
+ opacity: 0.5;
+ user-select: none;
+}
+
+.animated {
+ animation: blink-animation 1s steps(5, start) 4;
+}
+
+@keyframes blink-animation {
+ to {
+ opacity: 0.6;
+ }
+}
+@-webkit-keyframes blink-animation {
+ to {
+ opacity: 1;
+ }
+}
+
+/*# sourceMappingURL=settings.css.map */
diff --git a/apps/settings/css/settings.css.map b/apps/settings/css/settings.css.map
new file mode 100644
index 00000000000..0fb2c70ac0d
--- /dev/null
+++ b/apps/settings/css/settings.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","settings.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AD3CC;EACC;;;AAIF;AACA;EACC;;;AAGD;AACA;AC6CC;EAEA;;;AD3CD;ACyCC;EAEA;;;ADvCD;ACqCC;EAEA;;;ADnCD;ACiCC;EAEA;;;AD/BD;AC6BC;EAEA;;;AD1BA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAED;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;;AAGD;EACC;;AAGD;EACC;;;AAKH;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AAGC;EACC;;;AAKH;EACC;;;AAIA;EACC;;AAEA;EACC;;AAIA;EACC;;;AAOH;EAGC;;;AAIF;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;AAMF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGC;EACA;EACA;;AAGD;EACC;EACA;;;AAMF;EACC;IACC;IACA;;EAEA;IACC;IACA;;EAGD;IACC;IACA;;EAGD;IACC;IACA;IACA;;;AAKH;EACC;IACC;IACA;;EAEA;IACC;;EAGD;IACC;IACA;;EAGD;IACC;IACA;;;AAKH;EACC;IACC;IACA;;EAEA;IACC;;EAGD;IACC;IACA;;EAGD;IACC;IACA;;;AAKH;EACC;EACA;EACA;;AAEA;EACC;;AAIA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAKD;EACC;EACA;EACA;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;EACA;EACA;EACA;;;AAKF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;;AAKF;AACA;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EACC;;AAGC;EAEC;EACA;;AAEA;EACC;;AAGD;EACC;;AAEA;EACC;;AAIF;EACC;EAEA;;AAEA;EACC;;;AAQN;EACC;;;AAGD;EACC;;;AAIA;EACC;;AAGD;EACC;;;AAIF;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;AAMD;EACC;;AAGD;EACC;;;AAKD;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKH;AAGC;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;AAGC;EACC;EACA;EACA;EACA;;AAGD;EACC;;;AAKD;AAAA;EAEC;;;AAKD;AAAA;EAEC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;;AAIF;AACA;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAKD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAEA;EACC;;AAIF;EACC;;AAGD;EAEC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAIF;EACC;;AAGD;EACC;EACA;;;AAIF;EACC;;;AAGD;AACA;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACC;;AACA;EACC;EACA;EACA;;AAGD;EACC;;AAIA;EACC;;AAIF;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAIF;EACC;EACA;EACA;;;AAIA;EACC;;;AAMD;EACC;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;;AAMA;AAAA;EAEC;EACA;EACA;EACA;EACA;;AAIF;EACC;EACA;;AAEA;AAAA;EAEC;;AAGD;EACC;;AAIF;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC;IACC;;;AAIF;AACA;EAEE;IACC;;;AAKH;EACC;IACC;;;AAIF;EACC;;;AAGD;EACC;AACA;AAKA;;AAJA;EACC;;AAID;EACC;;AAEA;EACC;EACA;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAEA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EAwGC;EACA;EACA;AAkDA;;AAxJA;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC,QAfgB;EAgBhB,SAjBiB;EAmBjB,cAlBgB;EAmBhB;EACA;EACA;EACA;EACA;EACA;;AAGD;EAQC;;AAPA;EACC;EACA;EACA;EACA,YAhCe;;AAqChB;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAKF;EACC;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAEA;EACC;EACA;EACA;;AAKH;EACC;EACA;AACA;EACA;EACA;EACA;;AAOD;EACC;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAGD;EACC;;AAEA;EACC;;AAKD;EACC;;AAKD;EACC;;AAMH;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;;AAQF;EACC;;;AAKH;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAOA;AAAA;AAAA;AAAA;EACC;;AAEA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;;;AAMF;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;AACA;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;EAIC;;;AAGD;EACC;EACA;EACA;;;AAIA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAIA;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;;AAKF;AACA;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAIA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKD;EACC;;AAGD;EACC;;;AAIF;EACC;;AAEA;EACC;EACA;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAID;AACA;EAGC;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAEA;EAGC;EACA;EACA,YAhBgB;EAiBhB;EACA;EACA;AACA;AAAA;EAEA,uBACE;EAOF;AAMA;AA0DA;;AA9DA;EACC;;AAID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOC,WA3CkB;;AA6ClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;;AAID;EAMC;;AAIF;AAAA;AAAA;EAGC,WAjEkB;;AAmElB;AAAA;AAAA;EACC;EACA;EACA;;AAIF;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAID;EACC;EACA;EACA;EACA;AAAc;EACd,KD77CY;;AC+7CZ;EACC;;AAIF;EACC;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUC;EACA;EACA;EACA;EACA;;AAKD;EACC;;AAGD;EACC;;AAIF;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;AAaA;AA2GA;;AAtHA;AAAA;AAAA;EACC;EACA;;AAIA;AAAA;AAAA;AAAA;AAAA;EACC;;AAKF;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;EACC;;AAKA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAIF;AAAA;AAAA;AAAA;AAAA;AAEC;EACA;EACA;EACA;AACA;AAAA;AAAA;EAGA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACC;EACA;EACA;;AAIF;AAAA;AAAA;EACC;EACA;;AAEA;AAAA;AAAA;EACC;;AAIF;AAAA;AAAA;EACC;EACA;EACA;;AAEA;AAAA;AAAA;EACC;;AAIF;AAAA;AAAA;EACC;EACA;;AAEA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;AAKH;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACC;EACA;;AAMH;AAAA;AAAA;EACC;;AAKH;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;;;AAKH;EACI;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE","file":"settings.css"} \ No newline at end of file
diff --git a/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue b/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue
index 2f11f493207..ed5d6f8b5d7 100644
--- a/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue
+++ b/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue
@@ -152,7 +152,7 @@ export default {
color: var(--color-main-text);
border: 1px solid var(--color-border-dark);
border-radius: var(--border-radius);
- background: var(--icon-triangle-s-000) no-repeat right 4px center;
+ background: var(--icon-triangle-s-dark) no-repeat right 4px center;
font-family: var(--font-face);
appearance: none;
cursor: pointer;
diff --git a/apps/theming/css/default.css b/apps/theming/css/default.css
index a2b4b4c7b60..e2d641f530e 100644
--- a/apps/theming/css/default.css
+++ b/apps/theming/css/default.css
@@ -13,12 +13,13 @@
--color-primary-hover: #329bd3;
--color-primary-light: #e5f2f9;
--color-primary-light-text: #0082c9;
- --color-primary-light-hover: #1e2b32;
+ --color-primary-light-hover: #dbe7ee;
--color-primary-text-dark: #ededed;
--color-primary-element: #0082c9;
--color-primary-element-hover: #198ece;
--color-primary-element-light: #17adff;
--color-primary-element-lighter: #d8ecf6;
+ --gradient-primary-background: linear-gradient(40deg, var(--color-primary) 0%, var(--color-primary-element-light) 100%);
--color-main-text: #222222;
--color-text-maxcontrast: #767676;
--color-text-light: #222222;
diff --git a/apps/theming/css/settings-admin.css b/apps/theming/css/settings-admin.css
new file mode 100644
index 00000000000..96be6dd862b
--- /dev/null
+++ b/apps/theming/css/settings-admin.css
@@ -0,0 +1,132 @@
+#theming input {
+ width: 230px;
+}
+#theming input:focus,
+#theming input:active {
+ padding-right: 30px;
+}
+#theming .fileupload {
+ display: none;
+}
+#theming div > label {
+ position: relative;
+}
+#theming .theme-undo {
+ position: absolute;
+ top: -7px;
+ right: 4px;
+ cursor: pointer;
+ opacity: 0.3;
+ padding: 7px;
+ vertical-align: top;
+ display: inline-block;
+ visibility: hidden;
+ height: 32px;
+ width: 32px;
+}
+#theming form.uploadButton {
+ width: 411px;
+}
+#theming form .theme-undo,
+#theming .theme-remove-bg {
+ cursor: pointer;
+ opacity: 0.3;
+ padding: 7px;
+ vertical-align: top;
+ display: inline-block;
+ float: right;
+ position: relative;
+ top: 4px;
+ right: 0px;
+ visibility: visible;
+ height: 32px;
+ width: 32px;
+}
+#theming input[type=text]:hover + .theme-undo,
+#theming input[type=text] + .theme-undo:hover,
+#theming input[type=text]:focus + .theme-undo,
+#theming input[type=text]:active + .theme-undo,
+#theming input[type=url]:hover + .theme-undo,
+#theming input[type=url] + .theme-undo:hover,
+#theming input[type=url]:focus + .theme-undo,
+#theming input[type=url]:active + .theme-undo {
+ visibility: visible;
+}
+#theming label span {
+ display: inline-block;
+ min-width: 175px;
+ padding: 8px 0px;
+ vertical-align: top;
+}
+#theming .icon-upload,
+#theming .uploadButton .icon-loading-small {
+ padding: 8px 20px;
+ width: 20px;
+ margin: 2px 0px;
+ min-height: 32px;
+ display: inline-block;
+}
+#theming #theming_settings_status {
+ height: 26px;
+ margin: 10px;
+}
+#theming #theming_settings_loading {
+ display: inline-block;
+ vertical-align: middle;
+ margin-right: 10px;
+}
+#theming #theming_settings_msg {
+ vertical-align: middle;
+ border-radius: 3px;
+}
+#theming #theming-preview {
+ width: 230px;
+ height: 140px;
+ background-size: cover;
+ background-position: center center;
+ text-align: center;
+ margin-left: 178px;
+ margin-top: 10px;
+ margin-bottom: 20px;
+ cursor: pointer;
+ background-color: var(--color-primary);
+ background-image: var(--image-background, var(--image-background-plain, url("../../../core/img/background.svg"), linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));
+}
+#theming #theming-preview #theming-preview-logo {
+ cursor: pointer;
+ width: 20%;
+ height: 20%;
+ margin-top: 20px;
+ display: inline-block;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-image: var(--image-logo, url("../../../core/img/logo/logo.svg"));
+}
+#theming .theming-hints {
+ margin-top: 20px;
+}
+#theming .image-preview {
+ display: inline-block;
+ width: 80px;
+ height: 36px;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: contain;
+}
+#theming #theming-preview-logoheader {
+ background-image: var(--image-logoheader);
+}
+#theming #theming-preview-favicon {
+ background-image: var(--image-favicon);
+}
+
+/* transition effects for theming value changes */
+#header {
+ transition: background-color 500ms linear;
+}
+#header svg, #header img {
+ transition: 500ms filter linear;
+}
+
+/*# sourceMappingURL=settings-admin.css.map */
diff --git a/apps/theming/css/settings-admin.css.map b/apps/theming/css/settings-admin.css.map
new file mode 100644
index 00000000000..b5e657a4e30
--- /dev/null
+++ b/apps/theming/css/settings-admin.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["settings-admin.scss"],"names":[],"mappings":"AACI;EACI;;AAGJ;AAAA;EAEI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAEJ;AAAA;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQI;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAGP;EAEO;;AAGP;EACO;;;AAIR;AACA;EACI;;AACA;EACI","file":"settings-admin.css"} \ No newline at end of file
diff --git a/apps/theming/css/theming.css b/apps/theming/css/theming.css
new file mode 100644
index 00000000000..2d43b528a95
--- /dev/null
+++ b/apps/theming/css/theming.css
@@ -0,0 +1,17 @@
+/* Error: Undefined variable.
+ * ,
+ * 38 | $invert: luma($color-primary) > 0.6;
+ * | ^^^^^^^^^^^^^^
+ * '
+ * apps/theming/css/theming.scss 38:15 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Undefined variable.\a \2577 \a 38 \2502 $invert: luma($color-primary) > 0.6;\a \2502 ^^^^^^^^^^^^^^\a \2575 \a apps/theming/css/theming.scss 38:15 root stylesheet";
+}
diff --git a/apps/theming/css/theming.scss b/apps/theming/css/theming.scss
deleted file mode 100644
index a5b55a5a738..00000000000
--- a/apps/theming/css/theming.scss
+++ /dev/null
@@ -1,285 +0,0 @@
-/** Calculate luma as it is also used in OCA\Theming\Util::calculateLuma */
-@function luma($c) {
- $-local-red: red(rgba($c, 1.0));
- $-local-green: green(rgba($c, 1.0));
- $-local-blue: blue(rgba($c, 1.0));
-
- @return (0.2126 * $-local-red + 0.7152 * $-local-green + 0.0722 * $-local-blue) / 255;
-}
-
-@mixin faded-background {
- background-color: $color-primary;
-
- @if ($color-primary == #0082C9) {
- background-image: linear-gradient(40deg, $color-primary 0%, lighten($color-primary, 20%) 100%);
- } @else {
- /** This will be overwritten by the faded-background-image mixin if needed */
- background-image: none;
- }
-}
-
-@mixin faded-background-image {
- @include faded-background;
- background-size: contain;
-
- @if ($color-primary == #0082C9) {
- background-image: $image-login-background, linear-gradient(40deg, $color-primary 0%, lighten($color-primary, 20%) 100%);
- }
-
- @if($has-custom-background == true) {
- background-size: cover;
- background-repeat: no-repeat;
- background-image: $image-login-background;
- }
-}
-
-$has-custom-background: variable_exists('theming-background-mime') and $theming-background-mime != '';
-$has-custom-logo: variable_exists('theming-logo-mime') and $theming-logo-mime != '';
-$invert: luma($color-primary) > 0.6;
-
-@if ($has-custom-logo == false) {
- @if ($invert) {
- $image-logo: url(icon-color-path('logo', 'logo', #000000, 1, true));
- } @else {
- $image-logo: url(icon-color-path('logo', 'logo', #ffffff, 1, true));
- }
-}
-
-@if ($invert) {
- // too bright, use dark text to mix the primary
- $color-primary-light: mix($color-primary, $color-main-text, 10%);
-
- #appmenu:not(.inverted) svg {
- filter: invert(1);
- }
- #appmenu.inverted svg {
- filter: none;
- }
- .searchbox input[type="search"] {
- background-repeat: no-repeat;
- background-position: 6px center;
- background-color: transparent;
- @include icon-color('search', 'actions', $color-black, 1, true);
- }
- #contactsmenu .icon-contacts {
- @include icon-color('contacts', 'places', $color-black, 1, true);
- }
- #settings .icon-settings-white {
- @include icon-color('settings', 'actions', $color-black, 1, true);
- }
- #appmenu .icon-more-white {
- @include icon-color('more', 'actions', $color-black, 1, true);
- }
-} @else {
- #appmenu:not(.inverted) svg {
- filter: none;
- }
- #appmenu.inverted svg {
- filter: invert(1);
- }
-}
-
-/* Colorized svg images */
-.icon-file, .icon-filetype-text {
- background-image: url(./img/core/filetypes/text.svg?v=#{$theming-cachebuster});
-}
-
-.icon-folder, .icon-filetype-folder {
- background-image: url(./img/core/filetypes/folder.svg?v=#{$theming-cachebuster});
-}
-
-.icon-filetype-folder-drag-accept {
- background-image: url(./img/core/filetypes/folder-drag-accept.svg?v=#{$theming-cachebuster}) !important;
-}
-
-#theming-preview-logo,
-#header .logo {
- background-image: $image-logo;
-}
-
-#body-user,
-#body-settings,
-#body-public {
- #header,
- .profile__header,
- .preview-card__header {
- @include faded-background;
- }
-}
-
-#body-login,
-#firstrunwizard .firstrunwizard-header,
-#theming-preview {
- @include faded-background-image;
-}
-
-/* override styles for login screen in guest.css */
-@if ($has-custom-logo) {
- // custom logo
- #theming-preview-logo,
- #header .logo {
- background-size: contain;
- }
-
- #body-login #header .logo {
- margin-bottom: 22px;
- }
-} @else {
- // default logo
- @if ($invert) {
- #theming-preview-logo,
- #header .logo {
- opacity: .6;
- }
- }
-}
-
-@if variable_exists('theming-logoheader-mime') and $theming-logoheader-mime != '' {
- #theming .advanced-option-logoheader .image-preview,
- body:not(#body-login) #header .logo {
- background-image: $image-logoheader;
- }
-} @else {
- #theming .advanced-option-favicon .image-preview {
- background-image: none;
- }
-}
-
-input.primary {
- background-color: $color-primary-element;
- border: 1px solid $color-primary-text;
- color: $color-primary-text;
-}
-
-#body-login {
- input.primary:enabled:hover,
- input.primary:enabled:focus,
- button.primary:enabled:hover,
- button.primary:enabled:focus,
- a.primary:enabled:hover,
- a.primary:enabled:focus {
- color: $color-primary-text;
- background-image: linear-gradient(40deg, $color-primary 0%, lighten($color-primary, 20%) 100%);
- }
-}
-
-@if ($invert) {
- #body-login {
- .body-login-container {
- background-color: transparentize(nc-lighten($color-primary, 30%), 0.2);
- color: $color-primary-text !important;
-
- h2 {
- color: $color-primary-text;
- }
- .icon-search.icon-white {
- // CSS variable is not used here since it is on the public page layout,
- // where the dark theme doesn't apply at the moment
- background-image: url('../../../core/img/actions/search.svg');
- }
- }
-
- input {
- border: 1px solid nc-lighten($color-primary-text, 50%);
- }
- input.primary,
- button.primary {
- background-color: $color-primary;
- color: $color-primary-text;
- }
- :not(div.alternative-logins) > a,
- label,
- footer p,
- .alternative-logins legend,
- .lost-password-container #lost-password,
- .warning, .update, .error {
- color: $color-primary-text !important;
- }
- input[type='checkbox'].checkbox--white + label:before {
- border-color: nc-darken($color-primary-element, 40%) !important;
- }
- input[type='checkbox'].checkbox--white:not(:disabled):not(:checked) + label:hover:before,
- input[type='checkbox'].checkbox--white:focus + label:before {
- border-color: nc-darken($color-primary-element, 30%) !important;
- }
- input[type='checkbox'].checkbox--white:checked + label:before {
- border-color: nc-darken($color-primary-element, 30%) !important;
- background-color: nc-darken($color-primary-element, 30%) !important;
- @include icon-color('checkbox-mark', 'actions', $color-white, 1, true);
- }
- #submit-wrapper .icon-confirm-white {
- background-image: url('../../../core/img/actions/confirm.svg');
- }
-
- .two-factor-provider {
- &:hover, &:focus {
- border-color: $color-primary-text;
- }
- img {
- filter: invert(1);
- }
- }
- }
- #body-public #header .icon-more-white {
- background-image: var(--icon-more-000);
- }
-}
-
-// plain background color for login page
-@if $image-login-plain == 'true' {
- #body-login, #firstrunwizard .firstrunwizard-header, #theming-preview {
- background-image: none !important;
- }
- #body-login {
-
- :not(.alternative-logins) a, label, p {
- color: $color-primary-text;
- }
-
- }
-}
-
-/** Handle primary buttons for bright colors */
-@if (luma($color-primary) > 0.8) {
- :root {
- --color-primary-light-text: var(--color-primary-text);
- }
- select,
- button, .button,
- input:not([type='range']),
- textarea,
- div[contenteditable=true],
- .pager li a {
- &.primary:not(:disabled) {
- background-color: var(--color-background-dark);
- color: var(--color-main-text);
- border-color: var(--color-text-lighter);
-
- &:hover, &:focus, &:active {
- background-color: var(--color-background-darker);
- color: var(--color-main-text);
- border-color: var(--color-text);
- }
- }
- }
-}
-
-@if ($color-primary == #ffffff) {
- /* show grey border below header */
- #body-user #header,
- #body-settings #header,
- #body-public #header {
- border-bottom: 1px solid #ebebeb;
- }
-
- /* show triangle in header in grey */
- #appmenu li a.active:before,
- .header-right #settings #expand:before {
- border-bottom-color:#ebebeb;
- }
-
- /* show border around quota bar in files app */
- .app-files #quota .quota-container {
- border: 1px solid #ebebeb;
- }
-}
diff --git a/apps/theming/lib/Themes/DefaultTheme.php b/apps/theming/lib/Themes/DefaultTheme.php
index a98d9099d95..180b1106595 100644
--- a/apps/theming/lib/Themes/DefaultTheme.php
+++ b/apps/theming/lib/Themes/DefaultTheme.php
@@ -88,6 +88,7 @@ class DefaultTheme implements ITheme {
$colorMainBackgroundRGB = join(',', $this->util->hexToRGB($colorMainBackground));
$colorBoxShadow = $this->util->darken($colorMainBackground, 70);
$colorBoxShadowRGB = join(',', $this->util->hexToRGB($colorBoxShadow));
+ $colorPrimaryLight = $this->util->mix($this->primaryColor, $colorMainBackground, -80);
$hasCustomLogoHeader = $this->imageManager->hasImage('logo') || $this->imageManager->hasImage('logoheader');
@@ -111,9 +112,9 @@ class DefaultTheme implements ITheme {
'--color-primary' => $this->primaryColor,
'--color-primary-text' => $this->util->invertTextColor($this->primaryColor) ? '#000000' : '#ffffff',
'--color-primary-hover' => $this->util->mix($this->primaryColor, $colorMainBackground, 60),
- '--color-primary-light' => $this->util->mix($this->primaryColor, $colorMainBackground, -80),
+ '--color-primary-light' => $colorPrimaryLight,
'--color-primary-light-text' => $this->primaryColor,
- '--color-primary-light-hover' => $this->util->mix($this->primaryColor, $colorMainText, -80),
+ '--color-primary-light-hover' => $this->util->mix($colorPrimaryLight, $colorMainText, 90),
'--color-primary-text-dark' => $this->util->darken($this->util->invertTextColor($this->primaryColor) ? '#000000' : '#ffffff', 7),
// used for buttons, inputs...
'--color-primary-element' => $this->util->elementColor($this->primaryColor),
diff --git a/apps/updatenotification/src/components/UpdateNotification.vue b/apps/updatenotification/src/components/UpdateNotification.vue
index 6fc48978852..5039ac22bb7 100644
--- a/apps/updatenotification/src/components/UpdateNotification.vue
+++ b/apps/updatenotification/src/components/UpdateNotification.vue
@@ -539,7 +539,7 @@ export default {
/* override needed to replace yellow hover state with a dark one */
#updatenotification .update-menu .icon-star:hover,
#updatenotification .update-menu .icon-star:focus {
- background-image: var(--icon-star-000);
+ background-image: var(--icon-starred);
}
#updatenotification .topMargin {
margin-top: 15px;
diff --git a/apps/user_status/css/user-status-menu.css b/apps/user_status/css/user-status-menu.css
new file mode 100644
index 00000000000..9966be2f4ff
--- /dev/null
+++ b/apps/user_status/css/user-status-menu.css
@@ -0,0 +1,101 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2020 Georg Ehrke
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+.icon-user-status {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-app-dark);
+}
+
+.icon-user-status-online {
+ background-image: url("../img/user-status-online.svg");
+}
+
+.icon-user-status-away {
+ background-image: url("../img/user-status-away.svg");
+}
+
+.icon-user-status-dnd {
+ background-image: url("../img/user-status-dnd.svg");
+}
+
+.icon-user-status-invisible {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-user-status-invisible-dark);
+}
+
+/*# sourceMappingURL=user-status-menu.css.map */
diff --git a/apps/user_status/css/user-status-menu.css.map b/apps/user_status/css/user-status-menu.css.map
new file mode 100644
index 00000000000..0363c914a41
--- /dev/null
+++ b/apps/user_status/css/user-status-menu.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","user-status-menu.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AD1BA;ACuCC;EAEA;;;ADrCD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAID;ACsBC;EAEA","file":"user-status-menu.css"} \ No newline at end of file
diff --git a/apps/workflowengine/src/components/Event.vue b/apps/workflowengine/src/components/Event.vue
index 97f24af22f3..5f4b8dd87b0 100644
--- a/apps/workflowengine/src/components/Event.vue
+++ b/apps/workflowengine/src/components/Event.vue
@@ -111,7 +111,7 @@ export default {
}
.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {
- background-image: var(--icon-triangle-s-000);
+ background-image: var(--icon-triangle-s-dark);
background-repeat: no-repeat;
background-position: right center;
}
diff --git a/build/vue-builds.sh b/build/vue-builds.sh
deleted file mode 100755
index b5198cbbc1f..00000000000
--- a/build/vue-builds.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-
-root=$(pwd)
-entryFile=$1
-
-if [ ! -f "$entryFile" ]
-then
- echo "The build file $entryFile does not exists"
- exit 2
-else
- path=$(dirname "$entryFile")
- file=$(basename $entryFile)
-
- set -e
- cd $path
- echo "Entering $path"
-
- # support for multiple chunks
- for chunk in *$file; do
-
- # Backup original file
- backupFile="$chunk.orig"
- echo "Backing up $chunk to $backupFile"
- cp $chunk $backupFile
-
- done
-
- # Make the app
- echo "Making $file"
- cd ../
- npm --silent install
- npm run --silent build
-
- # Reset
- cd $root
- cd $path
-
- # support for multiple chunks
- for chunk in *$file; do
-
- # Compare build files
- echo "Comparing $chunk to the original"
- backupFile="$chunk.orig"
- if ! diff -q $chunk $backupFile &>/dev/null
- then
- echo "$chunk build is NOT up-to-date! Please send the proper production build within the pull request"
- cat $HOME/.npm/_logs/*.log
- exit 2
- else
- echo "$chunk build is up-to-date"
- fi
-
- done
-fi
diff --git a/core/css/apps.css b/core/css/apps.css
new file mode 100644
index 00000000000..b875d08d628
--- /dev/null
+++ b/core/css/apps.css
@@ -0,0 +1,1575 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2016-2017, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, pgys <info@pexlab.space>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Stefan Weil <sw@weilnetz.de>
+ * @copyright Copyright (c) 2016, Roeland Jago Douma <rullzer@owncloud.com>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* BASE STYLING ------------------------------------------------------------ */
+h2 {
+ font-weight: bold;
+ font-size: 20px;
+ margin-bottom: 12px;
+ line-height: 30px;
+ color: var(--color-text-light);
+}
+
+h3 {
+ font-size: 16px;
+ margin: 12px 0;
+ color: var(--color-text-light);
+}
+
+h4 {
+ font-size: 14px;
+}
+
+/* do not use italic typeface style, instead lighter color */
+em {
+ font-style: normal;
+ color: var(--color-text-lighter);
+}
+
+dl {
+ padding: 12px 0;
+}
+
+dt,
+dd {
+ display: inline-block;
+ padding: 12px;
+ padding-left: 0;
+}
+
+dt {
+ width: 130px;
+ white-space: nowrap;
+ text-align: right;
+}
+
+kbd {
+ padding: 4px 10px;
+ border: 1px solid #ccc;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
+ border-radius: var(--border-radius);
+ display: inline-block;
+ white-space: nowrap;
+}
+
+/* APP STYLING ------------------------------------------------------------ */
+#content[class*=app-] * {
+ box-sizing: border-box;
+}
+
+/* APP-NAVIGATION ------------------------------------------------------------ */
+/* Navigation: folder like structure */
+#app-navigation:not(.vue) {
+ width: 300px;
+ position: fixed;
+ top: 50px;
+ left: 0;
+ z-index: 500;
+ overflow-y: auto;
+ overflow-x: hidden;
+ height: calc(100% - 50px);
+ box-sizing: border-box;
+ background-color: var(--color-main-background);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ border-right: 1px solid var(--color-border);
+ display: flex;
+ flex-direction: column;
+ flex-grow: 0;
+ flex-shrink: 0;
+ /* 'New' button */
+ /**
+ * Button styling for menu, edit and undo
+ */
+ /**
+ * Collapsible menus
+ */
+ /**
+ * App navigation utils, buttons and counters for drop down menu
+ */
+ /**
+ * Editable entries
+ */
+ /**
+ * Deleted entries with undo button
+ */
+ /**
+ * Common rules for animation of undo and edit entries
+ */
+ /**
+ * drag and drop
+ */
+}
+#app-navigation:not(.vue) .app-navigation-new {
+ display: block;
+ padding: 10px;
+}
+#app-navigation:not(.vue) .app-navigation-new button {
+ display: inline-block;
+ width: 100%;
+ padding: 10px;
+ padding-left: 34px;
+ background-position: 10px center;
+ text-align: left;
+ margin: 0;
+}
+#app-navigation:not(.vue) li {
+ position: relative;
+}
+#app-navigation:not(.vue) > ul {
+ position: relative;
+ height: 100%;
+ width: inherit;
+ overflow-x: hidden;
+ overflow-y: auto;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ /* Menu and submenu */
+}
+#app-navigation:not(.vue) > ul > li {
+ display: inline-flex;
+ flex-wrap: wrap;
+ order: 1;
+ flex-shrink: 0;
+ /* Pinned-to-bottom entries */
+ /* align loader */
+ /* hide deletion/collapse of subitems */
+ /* Second level nesting for lists */
+}
+#app-navigation:not(.vue) > ul > li.pinned {
+ order: 2;
+}
+#app-navigation:not(.vue) > ul > li.pinned.first-pinned {
+ margin-top: auto !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-deleted {
+ /* Ugly hack for overriding the main entry link */
+ padding-left: 44px !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-edit {
+ /* Ugly hack for overriding the main entry link */
+ /* align the input correctly with the link text
+ 44px-6px padding for the input */
+ padding-left: 38px !important;
+}
+#app-navigation:not(.vue) > ul > li a:hover,
+#app-navigation:not(.vue) > ul > li a:hover > a,
+#app-navigation:not(.vue) > ul > li a:focus,
+#app-navigation:not(.vue) > ul > li a:focus > a {
+ background-color: var(--color-background-hover);
+}
+#app-navigation:not(.vue) > ul > li.active,
+#app-navigation:not(.vue) > ul > li.active > a,
+#app-navigation:not(.vue) > ul > li a:active,
+#app-navigation:not(.vue) > ul > li a:active > a,
+#app-navigation:not(.vue) > ul > li a.selected,
+#app-navigation:not(.vue) > ul > li a.selected > a,
+#app-navigation:not(.vue) > ul > li a.active,
+#app-navigation:not(.vue) > ul > li a.active > a {
+ background-color: var(--color-primary-light);
+}
+#app-navigation:not(.vue) > ul > li.icon-loading-small:after {
+ left: 22px;
+ top: 22px;
+}
+#app-navigation:not(.vue) > ul > li.deleted > ul, #app-navigation:not(.vue) > ul > li.collapsible:not(.open) > ul {
+ display: none;
+}
+#app-navigation:not(.vue) > ul > li.app-navigation-caption {
+ font-weight: bold;
+ line-height: 44px;
+ padding: 0 44px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ box-shadow: none !important;
+ user-select: none;
+ pointer-events: none;
+}
+#app-navigation:not(.vue) > ul > li.app-navigation-caption:not(:first-child) {
+ margin-top: 22px;
+}
+#app-navigation:not(.vue) > ul > li > ul {
+ flex: 0 1 auto;
+ width: 100%;
+ position: relative;
+}
+#app-navigation:not(.vue) > ul > li > ul > li {
+ display: inline-flex;
+ flex-wrap: wrap;
+ padding-left: 44px;
+ /* align loader */
+}
+#app-navigation:not(.vue) > ul > li > ul > li:hover,
+#app-navigation:not(.vue) > ul > li > ul > li:hover > a, #app-navigation:not(.vue) > ul > li > ul > li:focus,
+#app-navigation:not(.vue) > ul > li > ul > li:focus > a {
+ background-color: var(--color-background-hover);
+}
+#app-navigation:not(.vue) > ul > li > ul > li.active,
+#app-navigation:not(.vue) > ul > li > ul > li.active > a,
+#app-navigation:not(.vue) > ul > li > ul > li a.selected,
+#app-navigation:not(.vue) > ul > li > ul > li a.selected > a {
+ background-color: var(--color-primary-light);
+}
+#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small:after {
+ left: 22px;
+ /* 44px / 2 */
+}
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-deleted {
+ /* margin to keep active indicator visible */
+ margin-left: 4px;
+ padding-left: 84px;
+}
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-edit {
+ /* margin to keep active indicator visible */
+ margin-left: 4px;
+ /* align the input correctly with the link text
+ 44px+44px-4px-6px padding for the input */
+ padding-left: 78px !important;
+}
+#app-navigation:not(.vue) > ul > li,
+#app-navigation:not(.vue) > ul > li > ul > li {
+ position: relative;
+ width: 100%;
+ box-sizing: border-box;
+ /* hide icons if loading */
+ /* Main entry link */
+ /* Bullet icon */
+ /* popover fix the flex positionning of the li parent */
+ /* show edit/undo field if editing/deleted */
+}
+#app-navigation:not(.vue) > ul > li.icon-loading-small > a,
+#app-navigation:not(.vue) > ul > li.icon-loading-small > .app-navigation-entry-bullet,
+#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > a,
+#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > .app-navigation-entry-bullet {
+ /* hide icon or bullet if loading state*/
+ background: transparent !important;
+}
+#app-navigation:not(.vue) > ul > li > a,
+#app-navigation:not(.vue) > ul > li > ul > li > a {
+ background-size: 16px 16px;
+ background-position: 14px center;
+ background-repeat: no-repeat;
+ display: block;
+ justify-content: space-between;
+ line-height: 44px;
+ min-height: 44px;
+ padding: 0 12px 0 14px;
+ overflow: hidden;
+ box-sizing: border-box;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ color: var(--color-main-text);
+ opacity: 0.8;
+ flex: 1 1 0px;
+ z-index: 100;
+ /* above the bullet to allow click*/
+ /* TODO: forbid using img as icon in menu? */
+ /* counter can also be inside the link */
+}
+#app-navigation:not(.vue) > ul > li > a.svg,
+#app-navigation:not(.vue) > ul > li > ul > li > a.svg {
+ padding: 0 12px 0 44px;
+}
+#app-navigation:not(.vue) > ul > li > a:first-child img,
+#app-navigation:not(.vue) > ul > li > ul > li > a:first-child img {
+ margin-right: 11px;
+ width: 16px;
+ height: 16px;
+ filter: var(--background-invert-if-dark);
+}
+#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils,
+#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils {
+ display: inline-block;
+ float: right;
+}
+#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter,
+#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter {
+ padding-right: 0 !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet,
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet {
+ position: absolute;
+ display: block;
+ margin: 16px;
+ width: 12px;
+ height: 12px;
+ border: none;
+ border-radius: 50%;
+ cursor: pointer;
+ transition: background 100ms ease-in-out;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet + a,
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet + a {
+ /* hide icon if bullet, can't have both */
+ background: transparent !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-menu,
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-menu {
+ top: 44px;
+}
+#app-navigation:not(.vue) > ul > li.editing .app-navigation-entry-edit,
+#app-navigation:not(.vue) > ul > li > ul > li.editing .app-navigation-entry-edit {
+ opacity: 1;
+ z-index: 250;
+}
+#app-navigation:not(.vue) > ul > li.deleted .app-navigation-entry-deleted,
+#app-navigation:not(.vue) > ul > li > ul > li.deleted .app-navigation-entry-deleted {
+ transform: translateX(0);
+ z-index: 250;
+}
+#app-navigation:not(.vue).hidden {
+ display: none;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button,
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button {
+ border: 0;
+ opacity: 0.5;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:hover, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:focus,
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover,
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus {
+ background-color: transparent;
+ opacity: 1;
+}
+#app-navigation:not(.vue) .collapsible {
+ /* Fallback for old collapse button.
+ TODO: to be removed. Leaved here for retro compatibility */
+ /* force padding on link no matter if 'a' has an icon class */
+}
+#app-navigation:not(.vue) .collapsible .collapse {
+ opacity: 0;
+ position: absolute;
+ width: 44px;
+ height: 44px;
+ margin: 0;
+ z-index: 110;
+ /* Needed for IE11; otherwise the button appears to the right of the
+ * link. */
+ left: 0;
+}
+#app-navigation:not(.vue) .collapsible:before {
+ position: absolute;
+ height: 44px;
+ width: 44px;
+ margin: 0;
+ padding: 0;
+ background: none;
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-triangle-s-dark);
+ background-size: 16px;
+ background-repeat: no-repeat;
+ background-position: center;
+ border: none;
+ border-radius: 0;
+ outline: none !important;
+ box-shadow: none;
+ content: " ";
+ opacity: 0;
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ z-index: 105;
+ background-color: var(--color-background-hover);
+ border-radius: 50%;
+ transition: opacity 100ms ease-in-out;
+}
+#app-navigation:not(.vue) .collapsible > a:first-child {
+ padding-left: 44px;
+}
+#app-navigation:not(.vue) .collapsible:hover:before, #app-navigation:not(.vue) .collapsible:focus:before {
+ opacity: 1;
+}
+#app-navigation:not(.vue) .collapsible:hover > .app-navigation-entry-bullet, #app-navigation:not(.vue) .collapsible:focus > .app-navigation-entry-bullet {
+ background: transparent !important;
+}
+#app-navigation:not(.vue) .collapsible.open:before {
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils {
+ flex: 0 1 auto;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils ul {
+ display: flex !important;
+ align-items: center;
+ justify-content: flex-end;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils li {
+ width: 44px !important;
+ height: 44px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils button {
+ height: 100%;
+ width: 100%;
+ margin: 0;
+ box-shadow: none;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button {
+ /* Prevent bg img override if an icon class is set */
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button button:not([class^=icon-]):not([class*=" icon-"]) {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-more-dark);
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:hover button, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:focus button {
+ background-color: transparent;
+ opacity: 1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter {
+ overflow: hidden;
+ text-align: right;
+ font-size: 9pt;
+ line-height: 44px;
+ padding: 0 12px;
+ /* Same padding as all li > a in the app-navigation */
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted {
+ padding: 0;
+ text-align: center;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted span {
+ padding: 2px 5px;
+ border-radius: 10px;
+ background-color: var(--color-primary);
+ color: var(--color-primary-text);
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit {
+ padding-left: 5px;
+ padding-right: 5px;
+ display: block;
+ width: calc(100% - 1px);
+ /* Avoid border overlapping */
+ transition: opacity 250ms ease-in-out;
+ opacity: 0;
+ position: absolute;
+ background-color: var(--color-main-background);
+ z-index: -1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit form,
+#app-navigation:not(.vue) .app-navigation-entry-edit div {
+ display: inline-flex;
+ width: 100%;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit input {
+ padding: 5px;
+ margin-right: 0;
+ height: 38px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit input:hover, #app-navigation:not(.vue) .app-navigation-entry-edit input:focus {
+ /* overlapp borders */
+ z-index: 1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit input[type=text] {
+ width: 100%;
+ min-width: 0;
+ /* firefox hack: override auto */
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button,
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]) {
+ width: 36px;
+ height: 38px;
+ flex: 0 0 36px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:last-child),
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:last-child) {
+ border-radius: 0 !important;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:first-child),
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:first-child) {
+ margin-left: -1px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button:last-child,
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):last-child {
+ border-bottom-right-radius: var(--border-radius);
+ border-top-right-radius: var(--border-radius);
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted {
+ display: inline-flex;
+ padding-left: 44px;
+ transform: translateX(300px);
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-description {
+ position: relative;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ flex: 1 1 0px;
+ line-height: 44px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button {
+ margin: 0;
+ height: 44px;
+ width: 44px;
+ line-height: 44px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover, #app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus {
+ opacity: 1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit,
+#app-navigation:not(.vue) .app-navigation-entry-deleted {
+ width: calc(100% - 1px);
+ /* Avoid border overlapping */
+ transition: transform 250ms ease-in-out, opacity 250ms ease-in-out, z-index 250ms ease-in-out;
+ position: absolute;
+ left: 0;
+ background-color: var(--color-main-background);
+ box-sizing: border-box;
+}
+#app-navigation:not(.vue) .drag-and-drop {
+ -webkit-transition: padding-bottom 500ms ease 0s;
+ transition: padding-bottom 500ms ease 0s;
+ padding-bottom: 40px;
+}
+#app-navigation:not(.vue) .error {
+ color: var(--color-error);
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils ul,
+#app-navigation:not(.vue) .app-navigation-entry-menu ul {
+ list-style-type: none;
+}
+
+/* CONTENT --------------------------------------------------------- */
+#content {
+ box-sizing: border-box;
+ position: relative;
+ display: flex;
+ padding-top: 50px;
+ min-height: 100%;
+}
+
+/* APP-CONTENT AND WRAPPER ------------------------------------------ */
+/* Part where the content will be loaded into */
+/**
+ * !Important. We are defining the minimum requirement we want for flex
+ * Just before the mobile breakpoint we have variables.$breakpoint-mobile (1024px) - variables.$navigation-width
+ * -> 468px. In that case we want 200px for the list and 268px for the content
+ */
+#app-content {
+ z-index: 1000;
+ background-color: var(--color-main-background);
+ position: relative;
+ flex-basis: 100vw;
+ min-height: 100%;
+ /* margin if navigation element is here */
+ /* no top border for first settings item */
+ /* if app-content-list is present */
+}
+#app-navigation:not(.hidden) + #app-content {
+ margin-left: 300px;
+}
+#app-content > .section:first-child {
+ border-top: none;
+}
+#app-content #app-content-wrapper {
+ display: flex;
+ position: relative;
+ align-items: stretch;
+ /* make sure we have at least full height for loaders or such
+ no need for list/details since we have a flex stretch */
+ min-height: 100%;
+ /* CONTENT DETAILS AFTER LIST*/
+}
+#app-content #app-content-wrapper .app-content-details {
+ /* grow full width */
+ flex: 1 1 524px;
+}
+#app-content #app-content-wrapper .app-content-details #app-navigation-toggle-back {
+ display: none;
+}
+
+/* APP-SIDEBAR ------------------------------------------------------------ */
+/*
+ Sidebar: a sidebar to be used within #content
+ #app-content will be shrinked properly
+*/
+#app-sidebar {
+ width: 27vw;
+ min-width: 300px;
+ max-width: 500px;
+ display: block;
+ position: -webkit-sticky;
+ position: sticky;
+ top: 50px;
+ right: 0;
+ overflow-y: auto;
+ overflow-x: hidden;
+ z-index: 1500;
+ height: calc(100vh - 50px);
+ background: var(--color-main-background);
+ border-left: 1px solid var(--color-border);
+ flex-shrink: 0;
+}
+#app-sidebar.disappear {
+ display: none;
+}
+
+/* APP-SETTINGS ------------------------------------------------------------ */
+/* settings area */
+#app-settings {
+ margin-top: auto;
+}
+#app-settings.open #app-settings-content, #app-settings.opened #app-settings-content {
+ display: block;
+}
+
+#app-settings-content {
+ display: none;
+ padding: 10px;
+ background-color: var(--color-main-background);
+ /* restrict height of settings and make scrollable */
+ max-height: 300px;
+ overflow-y: auto;
+ box-sizing: border-box;
+ /* display input fields at full width */
+}
+#app-settings-content input[type=text] {
+ width: 93%;
+}
+#app-settings-content .info-text {
+ padding: 5px 0 7px 22px;
+ color: var(--color-text-lighter);
+}
+#app-settings-content input[type=checkbox].radio + label, #app-settings-content input[type=checkbox].checkbox + label, #app-settings-content input[type=radio].radio + label, #app-settings-content input[type=radio].checkbox + label {
+ display: inline-block;
+ width: 100%;
+ padding: 5px 0;
+}
+
+#app-settings-header {
+ box-sizing: border-box;
+ background-color: var(--color-main-background);
+}
+
+#app-settings-header .settings-button {
+ display: flex;
+ align-items: center;
+ height: 44px;
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-main-background);
+ box-shadow: none;
+ border: 0;
+ border-radius: 0;
+ text-align: left;
+ font-weight: normal;
+ font-size: 100%;
+ opacity: 0.8;
+ /* like app-navigation a */
+ color: var(--color-main-text);
+}
+#app-settings-header .settings-button.opened {
+ border-top: solid 1px var(--color-border);
+ background-color: var(--color-main-background);
+}
+#app-settings-header .settings-button:hover, #app-settings-header .settings-button:focus {
+ background-color: var(--color-background-hover);
+}
+#app-settings-header .settings-button::before {
+ background-image: var(--icon-settings-dark);
+ background-position: 14px center;
+ background-repeat: no-repeat;
+ content: "";
+ width: 44px;
+ height: 44px;
+ top: 0;
+ left: 0;
+ display: block;
+ filter: var(--background-invert-if-dark);
+}
+
+/* GENERAL SECTION ------------------------------------------------------------ */
+.section {
+ display: block;
+ padding: 30px;
+ margin-bottom: 24px;
+ /* slight position correction of checkboxes and radio buttons */
+}
+.section.hidden {
+ display: none !important;
+}
+.section input[type=checkbox], .section input[type=radio] {
+ vertical-align: -2px;
+ margin-right: 4px;
+}
+
+.sub-section {
+ position: relative;
+ margin-top: 10px;
+ margin-left: 27px;
+ margin-bottom: 10px;
+}
+
+.appear {
+ opacity: 1;
+ -webkit-transition: opacity 500ms ease 0s;
+ -moz-transition: opacity 500ms ease 0s;
+ -ms-transition: opacity 500ms ease 0s;
+ -o-transition: opacity 500ms ease 0s;
+ transition: opacity 500ms ease 0s;
+}
+.appear.transparent {
+ opacity: 0;
+}
+
+/* TABS ------------------------------------------------------------ */
+.tabHeaders {
+ display: flex;
+ margin-bottom: 16px;
+}
+.tabHeaders .tabHeader {
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ text-align: center;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ cursor: pointer;
+ color: var(--color-text-lighter);
+ margin-bottom: 1px;
+ padding: 5px;
+ /* Use same amount as sidebar padding */
+}
+.tabHeaders .tabHeader.hidden {
+ display: none;
+}
+.tabHeaders .tabHeader:first-child {
+ padding-left: 15px;
+}
+.tabHeaders .tabHeader:last-child {
+ padding-right: 15px;
+}
+.tabHeaders .tabHeader .icon {
+ display: inline-block;
+ width: 100%;
+ height: 16px;
+ background-size: 16px;
+ vertical-align: middle;
+ margin-top: -2px;
+ margin-right: 3px;
+ opacity: 0.7;
+ cursor: pointer;
+}
+.tabHeaders .tabHeader a {
+ color: var(--color-text-lighter);
+ margin-bottom: 1px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.tabHeaders .tabHeader.selected {
+ font-weight: bold;
+}
+.tabHeaders .tabHeader.selected, .tabHeaders .tabHeader:hover, .tabHeaders .tabHeader:focus {
+ margin-bottom: 0px;
+ color: var(--color-main-text);
+ border-bottom: 1px solid var(--color-text-lighter);
+}
+
+.tabsContainer {
+ clear: left;
+}
+.tabsContainer .tab {
+ padding: 0 15px 15px;
+}
+
+/* POPOVER MENU ------------------------------------------------------------ */
+.ie .bubble, .ie .bubble:after,
+.ie .popovermenu, .ie .popovermenu:after,
+.ie #app-navigation .app-navigation-entry-menu,
+.ie #app-navigation .app-navigation-entry-menu:after,
+.edge .bubble,
+.edge .bubble:after,
+.edge .popovermenu,
+.edge .popovermenu:after,
+.edge #app-navigation .app-navigation-entry-menu,
+.edge #app-navigation .app-navigation-entry-menu:after {
+ border: 1px solid var(--color-border);
+}
+
+.bubble,
+.app-navigation-entry-menu,
+.popovermenu {
+ position: absolute;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ border-radius: var(--border-radius);
+ z-index: 110;
+ margin: 5px;
+ margin-top: -5px;
+ right: 0;
+ filter: drop-shadow(0 1px 3px var(--color-box-shadow));
+ display: none;
+ will-change: filter;
+ /* Center the popover */
+ /* Align the popover to the left */
+}
+.bubble:after,
+.app-navigation-entry-menu:after,
+.popovermenu:after {
+ bottom: 100%;
+ right: 7px;
+ /* change this to adjust the arrow position */
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-bottom-color: var(--color-main-background);
+ border-width: 9px;
+}
+.bubble.menu-center,
+.app-navigation-entry-menu.menu-center,
+.popovermenu.menu-center {
+ transform: translateX(50%);
+ right: 50%;
+ margin-right: 0;
+}
+.bubble.menu-center:after,
+.app-navigation-entry-menu.menu-center:after,
+.popovermenu.menu-center:after {
+ right: 50%;
+ transform: translateX(50%);
+}
+.bubble.menu-left,
+.app-navigation-entry-menu.menu-left,
+.popovermenu.menu-left {
+ right: auto;
+ left: 0;
+ margin-right: 0;
+}
+.bubble.menu-left:after,
+.app-navigation-entry-menu.menu-left:after,
+.popovermenu.menu-left:after {
+ left: 6px;
+ right: auto;
+}
+.bubble.open,
+.app-navigation-entry-menu.open,
+.popovermenu.open {
+ display: block;
+}
+.bubble.contactsmenu-popover,
+.app-navigation-entry-menu.contactsmenu-popover,
+.popovermenu.contactsmenu-popover {
+ margin: 0;
+}
+.bubble ul,
+.app-navigation-entry-menu ul,
+.popovermenu ul {
+ /* Overwrite #app-navigation > ul ul */
+ display: flex !important;
+ flex-direction: column;
+}
+.bubble li,
+.app-navigation-entry-menu li,
+.popovermenu li {
+ display: flex;
+ flex: 0 0 auto;
+ /* css hack, only first not hidden */
+}
+.bubble li.hidden,
+.app-navigation-entry-menu li.hidden,
+.popovermenu li.hidden {
+ display: none;
+}
+.bubble li > button,
+.bubble li > a,
+.bubble li > .menuitem,
+.app-navigation-entry-menu li > button,
+.app-navigation-entry-menu li > a,
+.app-navigation-entry-menu li > .menuitem,
+.popovermenu li > button,
+.popovermenu li > a,
+.popovermenu li > .menuitem {
+ cursor: pointer;
+ line-height: 44px;
+ border: 0;
+ border-radius: 0;
+ background-color: transparent;
+ display: flex;
+ align-items: flex-start;
+ height: auto;
+ margin: 0;
+ font-weight: normal;
+ box-shadow: none;
+ width: 100%;
+ color: var(--color-main-text);
+ white-space: nowrap;
+ /* prevent .action class to break the design */
+ /* Add padding if contains icon+text */
+ /* DEPRECATED! old img in popover fallback
+ * TODO: to remove */
+ /* checkbox/radio fixes */
+ /* no margin if hidden span before */
+ /* Inputs inside popover supports text, submit & reset */
+}
+.bubble li > button span[class^=icon-],
+.bubble li > button span[class*=" icon-"], .bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"],
+.bubble li > a span[class^=icon-],
+.bubble li > a span[class*=" icon-"],
+.bubble li > a[class^=icon-],
+.bubble li > a[class*=" icon-"],
+.bubble li > .menuitem span[class^=icon-],
+.bubble li > .menuitem span[class*=" icon-"],
+.bubble li > .menuitem[class^=icon-],
+.bubble li > .menuitem[class*=" icon-"],
+.app-navigation-entry-menu li > button span[class^=icon-],
+.app-navigation-entry-menu li > button span[class*=" icon-"],
+.app-navigation-entry-menu li > button[class^=icon-],
+.app-navigation-entry-menu li > button[class*=" icon-"],
+.app-navigation-entry-menu li > a span[class^=icon-],
+.app-navigation-entry-menu li > a span[class*=" icon-"],
+.app-navigation-entry-menu li > a[class^=icon-],
+.app-navigation-entry-menu li > a[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem span[class^=icon-],
+.app-navigation-entry-menu li > .menuitem span[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem[class^=icon-],
+.app-navigation-entry-menu li > .menuitem[class*=" icon-"],
+.popovermenu li > button span[class^=icon-],
+.popovermenu li > button span[class*=" icon-"],
+.popovermenu li > button[class^=icon-],
+.popovermenu li > button[class*=" icon-"],
+.popovermenu li > a span[class^=icon-],
+.popovermenu li > a span[class*=" icon-"],
+.popovermenu li > a[class^=icon-],
+.popovermenu li > a[class*=" icon-"],
+.popovermenu li > .menuitem span[class^=icon-],
+.popovermenu li > .menuitem span[class*=" icon-"],
+.popovermenu li > .menuitem[class^=icon-],
+.popovermenu li > .menuitem[class*=" icon-"] {
+ min-width: 0;
+ /* Overwrite icons*/
+ min-height: 0;
+ background-position: 14px center;
+ background-size: 16px;
+}
+.bubble li > button span[class^=icon-],
+.bubble li > button span[class*=" icon-"],
+.bubble li > a span[class^=icon-],
+.bubble li > a span[class*=" icon-"],
+.bubble li > .menuitem span[class^=icon-],
+.bubble li > .menuitem span[class*=" icon-"],
+.app-navigation-entry-menu li > button span[class^=icon-],
+.app-navigation-entry-menu li > button span[class*=" icon-"],
+.app-navigation-entry-menu li > a span[class^=icon-],
+.app-navigation-entry-menu li > a span[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem span[class^=icon-],
+.app-navigation-entry-menu li > .menuitem span[class*=" icon-"],
+.popovermenu li > button span[class^=icon-],
+.popovermenu li > button span[class*=" icon-"],
+.popovermenu li > a span[class^=icon-],
+.popovermenu li > a span[class*=" icon-"],
+.popovermenu li > .menuitem span[class^=icon-],
+.popovermenu li > .menuitem span[class*=" icon-"] {
+ /* Keep padding to define the width to
+ assure correct position of a possible text */
+ padding: 22px 0 22px 44px;
+}
+.bubble li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child {
+ margin-left: 44px;
+}
+.bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"],
+.bubble li > a[class^=icon-],
+.bubble li > a[class*=" icon-"],
+.bubble li > .menuitem[class^=icon-],
+.bubble li > .menuitem[class*=" icon-"],
+.app-navigation-entry-menu li > button[class^=icon-],
+.app-navigation-entry-menu li > button[class*=" icon-"],
+.app-navigation-entry-menu li > a[class^=icon-],
+.app-navigation-entry-menu li > a[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem[class^=icon-],
+.app-navigation-entry-menu li > .menuitem[class*=" icon-"],
+.popovermenu li > button[class^=icon-],
+.popovermenu li > button[class*=" icon-"],
+.popovermenu li > a[class^=icon-],
+.popovermenu li > a[class*=" icon-"],
+.popovermenu li > .menuitem[class^=icon-],
+.popovermenu li > .menuitem[class*=" icon-"] {
+ padding: 0 14px 0 44px !important;
+}
+.bubble li > button:hover, .bubble li > button:focus,
+.bubble li > a:hover,
+.bubble li > a:focus,
+.bubble li > .menuitem:hover,
+.bubble li > .menuitem:focus,
+.app-navigation-entry-menu li > button:hover,
+.app-navigation-entry-menu li > button:focus,
+.app-navigation-entry-menu li > a:hover,
+.app-navigation-entry-menu li > a:focus,
+.app-navigation-entry-menu li > .menuitem:hover,
+.app-navigation-entry-menu li > .menuitem:focus,
+.popovermenu li > button:hover,
+.popovermenu li > button:focus,
+.popovermenu li > a:hover,
+.popovermenu li > a:focus,
+.popovermenu li > .menuitem:hover,
+.popovermenu li > .menuitem:focus {
+ background-color: var(--color-background-hover);
+}
+.bubble li > button.active,
+.bubble li > a.active,
+.bubble li > .menuitem.active,
+.app-navigation-entry-menu li > button.active,
+.app-navigation-entry-menu li > a.active,
+.app-navigation-entry-menu li > .menuitem.active,
+.popovermenu li > button.active,
+.popovermenu li > a.active,
+.popovermenu li > .menuitem.active {
+ background-color: var(--color-primary-light);
+}
+.bubble li > button.action,
+.bubble li > a.action,
+.bubble li > .menuitem.action,
+.app-navigation-entry-menu li > button.action,
+.app-navigation-entry-menu li > a.action,
+.app-navigation-entry-menu li > .menuitem.action,
+.popovermenu li > button.action,
+.popovermenu li > a.action,
+.popovermenu li > .menuitem.action {
+ padding: inherit !important;
+}
+.bubble li > button > span,
+.bubble li > a > span,
+.bubble li > .menuitem > span,
+.app-navigation-entry-menu li > button > span,
+.app-navigation-entry-menu li > a > span,
+.app-navigation-entry-menu li > .menuitem > span,
+.popovermenu li > button > span,
+.popovermenu li > a > span,
+.popovermenu li > .menuitem > span {
+ cursor: pointer;
+ white-space: nowrap;
+}
+.bubble li > button > p,
+.bubble li > a > p,
+.bubble li > .menuitem > p,
+.app-navigation-entry-menu li > button > p,
+.app-navigation-entry-menu li > a > p,
+.app-navigation-entry-menu li > .menuitem > p,
+.popovermenu li > button > p,
+.popovermenu li > a > p,
+.popovermenu li > .menuitem > p {
+ width: 150px;
+ line-height: 1.6em;
+ padding: 8px 0;
+ white-space: normal;
+}
+.bubble li > button > select,
+.bubble li > a > select,
+.bubble li > .menuitem > select,
+.app-navigation-entry-menu li > button > select,
+.app-navigation-entry-menu li > a > select,
+.app-navigation-entry-menu li > .menuitem > select,
+.popovermenu li > button > select,
+.popovermenu li > a > select,
+.popovermenu li > .menuitem > select {
+ margin: 0;
+ margin-left: 6px;
+}
+.bubble li > button:not(:empty),
+.bubble li > a:not(:empty),
+.bubble li > .menuitem:not(:empty),
+.app-navigation-entry-menu li > button:not(:empty),
+.app-navigation-entry-menu li > a:not(:empty),
+.app-navigation-entry-menu li > .menuitem:not(:empty),
+.popovermenu li > button:not(:empty),
+.popovermenu li > a:not(:empty),
+.popovermenu li > .menuitem:not(:empty) {
+ padding-right: 14px !important;
+}
+.bubble li > button > img,
+.bubble li > a > img,
+.bubble li > .menuitem > img,
+.app-navigation-entry-menu li > button > img,
+.app-navigation-entry-menu li > a > img,
+.app-navigation-entry-menu li > .menuitem > img,
+.popovermenu li > button > img,
+.popovermenu li > a > img,
+.popovermenu li > .menuitem > img {
+ width: 16px;
+ padding: 14px;
+}
+.bubble li > button > input.radio + label,
+.bubble li > button > input.checkbox + label,
+.bubble li > a > input.radio + label,
+.bubble li > a > input.checkbox + label,
+.bubble li > .menuitem > input.radio + label,
+.bubble li > .menuitem > input.checkbox + label,
+.app-navigation-entry-menu li > button > input.radio + label,
+.app-navigation-entry-menu li > button > input.checkbox + label,
+.app-navigation-entry-menu li > a > input.radio + label,
+.app-navigation-entry-menu li > a > input.checkbox + label,
+.app-navigation-entry-menu li > .menuitem > input.radio + label,
+.app-navigation-entry-menu li > .menuitem > input.checkbox + label,
+.popovermenu li > button > input.radio + label,
+.popovermenu li > button > input.checkbox + label,
+.popovermenu li > a > input.radio + label,
+.popovermenu li > a > input.checkbox + label,
+.popovermenu li > .menuitem > input.radio + label,
+.popovermenu li > .menuitem > input.checkbox + label {
+ padding: 0 !important;
+ width: 100%;
+}
+.bubble li > button > input.checkbox + label::before,
+.bubble li > a > input.checkbox + label::before,
+.bubble li > .menuitem > input.checkbox + label::before,
+.app-navigation-entry-menu li > button > input.checkbox + label::before,
+.app-navigation-entry-menu li > a > input.checkbox + label::before,
+.app-navigation-entry-menu li > .menuitem > input.checkbox + label::before,
+.popovermenu li > button > input.checkbox + label::before,
+.popovermenu li > a > input.checkbox + label::before,
+.popovermenu li > .menuitem > input.checkbox + label::before {
+ margin: -2px 13px 0;
+}
+.bubble li > button > input.radio + label::before,
+.bubble li > a > input.radio + label::before,
+.bubble li > .menuitem > input.radio + label::before,
+.app-navigation-entry-menu li > button > input.radio + label::before,
+.app-navigation-entry-menu li > a > input.radio + label::before,
+.app-navigation-entry-menu li > .menuitem > input.radio + label::before,
+.popovermenu li > button > input.radio + label::before,
+.popovermenu li > a > input.radio + label::before,
+.popovermenu li > .menuitem > input.radio + label::before {
+ margin: -2px 12px 0;
+}
+.bubble li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.bubble li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.bubble li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.app-navigation-entry-menu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.app-navigation-entry-menu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.app-navigation-entry-menu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.popovermenu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.popovermenu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.popovermenu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]) {
+ width: 150px;
+}
+.bubble li > button form,
+.bubble li > a form,
+.bubble li > .menuitem form,
+.app-navigation-entry-menu li > button form,
+.app-navigation-entry-menu li > a form,
+.app-navigation-entry-menu li > .menuitem form,
+.popovermenu li > button form,
+.popovermenu li > a form,
+.popovermenu li > .menuitem form {
+ display: flex;
+ flex: 1 1 auto;
+ /* put a small space between text and form
+ if there is an element before */
+}
+.bubble li > button form:not(:first-child),
+.bubble li > a form:not(:first-child),
+.bubble li > .menuitem form:not(:first-child),
+.app-navigation-entry-menu li > button form:not(:first-child),
+.app-navigation-entry-menu li > a form:not(:first-child),
+.app-navigation-entry-menu li > .menuitem form:not(:first-child),
+.popovermenu li > button form:not(:first-child),
+.popovermenu li > a form:not(:first-child),
+.popovermenu li > .menuitem form:not(:first-child) {
+ margin-left: 5px;
+}
+.bubble li > button > span.hidden + form,
+.bubble li > button > span[style*="display:none"] + form,
+.bubble li > a > span.hidden + form,
+.bubble li > a > span[style*="display:none"] + form,
+.bubble li > .menuitem > span.hidden + form,
+.bubble li > .menuitem > span[style*="display:none"] + form,
+.app-navigation-entry-menu li > button > span.hidden + form,
+.app-navigation-entry-menu li > button > span[style*="display:none"] + form,
+.app-navigation-entry-menu li > a > span.hidden + form,
+.app-navigation-entry-menu li > a > span[style*="display:none"] + form,
+.app-navigation-entry-menu li > .menuitem > span.hidden + form,
+.app-navigation-entry-menu li > .menuitem > span[style*="display:none"] + form,
+.popovermenu li > button > span.hidden + form,
+.popovermenu li > button > span[style*="display:none"] + form,
+.popovermenu li > a > span.hidden + form,
+.popovermenu li > a > span[style*="display:none"] + form,
+.popovermenu li > .menuitem > span.hidden + form,
+.popovermenu li > .menuitem > span[style*="display:none"] + form {
+ margin-left: 0;
+}
+.bubble li > button input,
+.bubble li > a input,
+.bubble li > .menuitem input,
+.app-navigation-entry-menu li > button input,
+.app-navigation-entry-menu li > a input,
+.app-navigation-entry-menu li > .menuitem input,
+.popovermenu li > button input,
+.popovermenu li > a input,
+.popovermenu li > .menuitem input {
+ min-width: 44px;
+ max-height: 40px;
+ /* twice the element margin-y */
+ margin: 2px 0;
+ flex: 1 1 auto;
+}
+.bubble li > button input:not(:first-child),
+.bubble li > a input:not(:first-child),
+.bubble li > .menuitem input:not(:first-child),
+.app-navigation-entry-menu li > button input:not(:first-child),
+.app-navigation-entry-menu li > a input:not(:first-child),
+.app-navigation-entry-menu li > .menuitem input:not(:first-child),
+.popovermenu li > button input:not(:first-child),
+.popovermenu li > a input:not(:first-child),
+.popovermenu li > .menuitem input:not(:first-child) {
+ margin-left: 5px;
+}
+.bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input {
+ margin-top: 12px;
+}
+.bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input {
+ margin-bottom: 12px;
+}
+.bubble li > button,
+.app-navigation-entry-menu li > button,
+.popovermenu li > button {
+ padding: 0;
+}
+.bubble li > button span,
+.app-navigation-entry-menu li > button span,
+.popovermenu li > button span {
+ opacity: 1;
+}
+
+/* "app-*" descendants use border-box sizing, so the height of the icon must be
+ * set to the height of the item (as well as its width to make it squared). */
+#content[class*=app-] .bubble li > button,
+#content[class*=app-] .bubble li > a,
+#content[class*=app-] .bubble li > .menuitem,
+#content[class*=app-] .app-navigation-entry-menu li > button,
+#content[class*=app-] .app-navigation-entry-menu li > a,
+#content[class*=app-] .app-navigation-entry-menu li > .menuitem,
+#content[class*=app-] .popovermenu li > button,
+#content[class*=app-] .popovermenu li > a,
+#content[class*=app-] .popovermenu li > .menuitem {
+ /* DEPRECATED! old img in popover fallback
+ * TODO: to remove */
+}
+#content[class*=app-] .bubble li > button > img,
+#content[class*=app-] .bubble li > a > img,
+#content[class*=app-] .bubble li > .menuitem > img,
+#content[class*=app-] .app-navigation-entry-menu li > button > img,
+#content[class*=app-] .app-navigation-entry-menu li > a > img,
+#content[class*=app-] .app-navigation-entry-menu li > .menuitem > img,
+#content[class*=app-] .popovermenu li > button > img,
+#content[class*=app-] .popovermenu li > a > img,
+#content[class*=app-] .popovermenu li > .menuitem > img {
+ width: 44px;
+ height: 44px;
+}
+
+/* CONTENT LIST ------------------------------------------------------------ */
+.app-content-list {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 50px;
+ border-right: 1px solid var(--color-border);
+ display: flex;
+ flex-direction: column;
+ transition: transform 250ms ease-in-out;
+ min-height: calc(100vh - 50px);
+ max-height: calc(100vh - 50px);
+ overflow-y: auto;
+ overflow-x: hidden;
+ flex: 1 1 200px;
+ min-width: 200px;
+ max-width: 300px;
+ /* Default item */
+}
+.app-content-list .app-content-list-item {
+ position: relative;
+ height: 68px;
+ cursor: pointer;
+ padding: 10px 7px;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ flex: 0 0 auto;
+ /* Icon fixes */
+}
+.app-content-list .app-content-list-item > [class^=icon-],
+.app-content-list .app-content-list-item > [class*=" icon-"],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"] {
+ order: 4;
+ width: 24px;
+ height: 24px;
+ margin: -7px;
+ padding: 22px;
+ opacity: 0.3;
+ cursor: pointer;
+}
+.app-content-list .app-content-list-item > [class^=icon-]:hover, .app-content-list .app-content-list-item > [class^=icon-]:focus,
+.app-content-list .app-content-list-item > [class*=" icon-"]:hover,
+.app-content-list .app-content-list-item > [class*=" icon-"]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:focus {
+ opacity: 0.7;
+}
+.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star], .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"],
+.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star],
+.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"] {
+ opacity: 0.7;
+}
+.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:hover, .app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:focus, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:hover, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:focus,
+.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:hover,
+.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:focus,
+.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:hover,
+.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:focus {
+ opacity: 1;
+}
+.app-content-list .app-content-list-item > [class^=icon-].icon-starred,
+.app-content-list .app-content-list-item > [class*=" icon-"].icon-starred,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-].icon-starred,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"].icon-starred {
+ opacity: 1;
+}
+.app-content-list .app-content-list-item:hover, .app-content-list .app-content-list-item:focus, .app-content-list .app-content-list-item.active {
+ background-color: var(--color-background-dark);
+}
+.app-content-list .app-content-list-item:hover .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item:focus .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item.active .app-content-list-item-checkbox.checkbox + label {
+ display: flex;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label,
+.app-content-list .app-content-list-item .app-content-list-item-star {
+ position: absolute;
+ height: 40px;
+ width: 40px;
+ z-index: 50;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label {
+ display: flex;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label + .app-content-list-item-icon {
+ opacity: 0.7;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label {
+ top: 14px;
+ left: 7px;
+ display: none;
+ /* Hide the star, priority to the checkbox */
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label::before {
+ margin: 0;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label ~ .app-content-list-item-star {
+ display: none;
+}
+.app-content-list .app-content-list-item .app-content-list-item-star {
+ display: flex;
+ top: 10px;
+ left: 32px;
+ background-size: 16px;
+ height: 20px;
+ width: 20px;
+ margin: 0;
+ padding: 0;
+}
+.app-content-list .app-content-list-item .app-content-list-item-icon {
+ position: absolute;
+ display: inline-block;
+ height: 40px;
+ width: 40px;
+ line-height: 40px;
+ border-radius: 50%;
+ vertical-align: middle;
+ margin-right: 10px;
+ color: #fff;
+ text-align: center;
+ font-size: 1.5em;
+ text-transform: capitalize;
+ object-fit: cover;
+ user-select: none;
+ cursor: pointer;
+ top: 50%;
+ margin-top: -20px;
+}
+.app-content-list .app-content-list-item .app-content-list-item-line-one,
+.app-content-list .app-content-list-item .app-content-list-item-line-two {
+ display: block;
+ padding-left: 50px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ order: 1;
+ flex: 1 1 0px;
+ padding-right: 10px;
+ cursor: pointer;
+}
+.app-content-list .app-content-list-item .app-content-list-item-line-two {
+ opacity: 0.5;
+ order: 3;
+ flex: 1 0;
+ flex-basis: calc(100% - 44px);
+}
+.app-content-list .app-content-list-item .app-content-list-item-details {
+ order: 2;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 100px;
+ opacity: 0.5;
+ font-size: 80%;
+ user-select: none;
+}
+.app-content-list .app-content-list-item .app-content-list-item-menu {
+ order: 4;
+ position: relative;
+}
+.app-content-list .app-content-list-item .app-content-list-item-menu .popovermenu {
+ margin: 0;
+ right: -2px;
+}
+.app-content-list.selection .app-content-list-item-checkbox.checkbox + label {
+ display: flex;
+}
+
+/*# sourceMappingURL=apps.css.map */
diff --git a/core/css/apps.css.map b/core/css/apps.css.map
new file mode 100644
index 00000000000..dc67886047c
--- /dev/null
+++ b/core/css/apps.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss","apps.scss","functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AD7BA;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAID;AAEA;EACC;;;AAGD;AACA;AACA;EACC,ODyBkB;ECxBlB;EACA,KDsBe;ECrBf;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AA4OA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAkEA;AAAA;AAAA;AAmDA;AAAA;AAAA;AAsDA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAeA;AAAA;AAAA;;AAjdA;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAsHA;;AArHA;EACC;EACA;EACA;EACA;AAEA;AAoCA;AAMA;AAwBA;;AAjEA;EACC;;AACA;EACC;;AAIF;AACC;EACA;;AAED;AACC;AACA;AAAA;EAEA;;AAKA;AAAA;AAAA;AAAA;EAEC;;AAOD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAKF;EACC;EACA;;AAMA;EAEC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;AAgBA;;AAbC;AAAA;AAAA;EAEC;;AAKD;AAAA;AAAA;AAAA;EAEC;;AAKF;EACC;AAAY;;AAGb;AACC;EACA;EACA;;AAGD;AACC;EACA;AACA;AAAA;EAEA;;AAMJ;AAAA;EAEC;EACA;EACA;AACA;AAQA;AAwCA;AAkBA;AAKA;;AArEC;AAAA;AAAA;AAAA;AAEC;EACA;;AAIF;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAc;AACd;AAaA;;AAXA;AAAA;EACC;;AAED;AAAA;EACI;EACA;EACA;EAEH;;AAID;AAAA;EACC;EACA;;AACA;AAAA;EACC;;AAKH;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AACC;EACA;;AAKF;AAAA;EACC;;AAID;AAAA;EACC;EACA;;AAED;AAAA;EACC;EACA;;AAIH;EACC;;AAMD;AAAA;EAEC;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEC;EACA;;AAOF;AACC;AAAA;AAwCA;;AAtCA;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;EAEA;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;AC/TF;EAEA;ED+TE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAID;EACC;;AAIA;EACC;;AAED;EACC;;AAID;EACC;EACA;EACA;;AAQH;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;AACC;;AACA;AC/XF;EAEA;;ADgYE;EAEC;EACA;;AAGF;EACC;EACA;EACA;EACA;EACA;AAAiB;;AAEjB;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AASJ;EACC;EACA;EACA;EACA;AAAyB;EACzB;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;EACA;;AAED;EACC;EACA;EACA;;AACA;AAEC;EACA;;AAGF;EACC;EACA;AAAc;EACd;EACA;;AAED;AAAA;EAEC;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;EACA;EACA;EACA;;AAQH;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EAEC;;AAQH;AAAA;EAEC;AAAyB;EACzB;EAGA;EACA;EACA;EACA;;AAMD;EACC;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;EAEC;;;AAKF;AACA;EACC;EACA;EACA;EAEA,aD1ee;EC2ef;;;AAGD;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAOA;EACC;EACA;EACA;EACA;EACA;AACA;AAIA;AAKA;;AARA;EACC,aD/fiB;;ACkgBlB;EACC;;AAID;EACC;EACA;EACA;AACA;AAAA;EAEA;AAEA;;AACA;AACC;EACA;;AACA;EACC;;;AAMJ;AACA;AAAA;AAAA;AAAA;AAIA;EACC;EACA,WDhiBmB;ECiiBnB,WDhiBmB;ECiiBnB;EACA;EACA;EACA,KDviBe;ECwiBf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAKF;AACA;AACA;EAEC;;AAGC;EACC;;;AAKH;EACC;EACA;EACA;AACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;AAGD;EACC;EACA;;AAOE;EACC;EACA;EACA;;;AAOL;EACC;EACA;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACC;EACA;;AAED;EAEC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACC;EACA;EACA;AAIA;;AAHA;EACC;;AAIA;EAEC;EACA;;;AAIH;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;;AAIF;AACA;EACC;EACA;;AAEA;EACC;EACA;E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","file":"apps.css"} \ No newline at end of file
diff --git a/core/css/apps.scss b/core/css/apps.scss
index aab575f5dd2..aa532c462d0 100644
--- a/core/css/apps.scss
+++ b/core/css/apps.scss
@@ -90,7 +90,7 @@ kbd {
overflow-x: hidden;
// Do not use vh because of mobile headers
// are included in the calculation
- height: calc(100% - #{$header-height});
+ height: calc(100% - #{variables.$header-height});
box-sizing: border-box;
background-color: var(--color-main-background);
-webkit-user-select: none;
@@ -982,14 +982,14 @@ $outter-margin: math.div($popoveritem-height - $popovericon-size, 2);
&[class*=' icon-'] {
min-width: 0; /* Overwrite icons*/
min-height: 0;
- background-position: #{($popoveritem-height - $popovericon-size) / 2} center;
+ background-position: #{math.div($popoveritem-height - $popovericon-size, 2)} center;
background-size: $popovericon-size;
}
span[class^='icon-'],
span[class*=' icon-'] {
/* Keep padding to define the width to
assure correct position of a possible text */
- padding: #{$popoveritem-height / 2} 0 #{$popoveritem-height / 2} $popoveritem-height;
+ padding: #{math.div($popoveritem-height, 2)} 0 #{math.div($popoveritem-height, 2)} $popoveritem-height;
}
// If no icons set, force left margin to align
&:not([class^='icon-']):not([class*='icon-']) {
@@ -1003,7 +1003,7 @@ $outter-margin: math.div($popoveritem-height - $popovericon-size, 2);
}
&[class^='icon-'],
&[class*=' icon-'] {
- padding: 0 #{($popoveritem-height - $popovericon-size) / 2} 0 $popoveritem-height !important;
+ padding: 0 #{math.div($popoveritem-height - $popovericon-size, 2)} 0 $popoveritem-height !important;
}
&:hover,
&:focus {
@@ -1038,7 +1038,7 @@ $outter-margin: math.div($popoveritem-height - $popovericon-size, 2);
* TODO: to remove */
> img {
width: $popovericon-size;
- padding: #{($popoveritem-height - $popovericon-size) / 2};
+ padding: #{math.div($popoveritem-height - $popovericon-size, 2)};
}
/* checkbox/radio fixes */
> input.radio + label,
diff --git a/core/css/fixes.css b/core/css/fixes.css
new file mode 100644
index 00000000000..6401bd3ec67
--- /dev/null
+++ b/core/css/fixes.css
@@ -0,0 +1,7 @@
+/* ---- BROWSER-SPECIFIC FIXES ---- */
+/* remove dotted outlines in Firefox */
+::-moz-focus-inner {
+ border: 0;
+}
+
+/*# sourceMappingURL=fixes.css.map */
diff --git a/core/css/fixes.css.map b/core/css/fixes.css.map
new file mode 100644
index 00000000000..582048ec0ef
--- /dev/null
+++ b/core/css/fixes.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["fixes.scss"],"names":[],"mappings":"AAAA;AAEA;AACA;EACC","file":"fixes.css"} \ No newline at end of file
diff --git a/core/css/functions.css b/core/css/functions.css
new file mode 100644
index 00000000000..eade50140ea
--- /dev/null
+++ b/core/css/functions.css
@@ -0,0 +1,38 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+
+/*# sourceMappingURL=functions.css.map */
diff --git a/core/css/functions.css.map b/core/css/functions.css.map
new file mode 100644
index 00000000000..76274d3efda
--- /dev/null
+++ b/core/css/functions.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"functions.css"} \ No newline at end of file
diff --git a/core/css/global.css b/core/css/global.css
new file mode 100644
index 00000000000..d9ecc634d78
--- /dev/null
+++ b/core/css/global.css
@@ -0,0 +1,50 @@
+/* Copyright (c) 2015, Raghu Nayyar, http://raghunayyar.com
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+/* Global Components */
+.pull-left {
+ float: left;
+}
+
+.pull-right {
+ float: right;
+}
+
+.clear-left {
+ clear: left;
+}
+
+.clear-right {
+ clear: right;
+}
+
+.clear-both {
+ clear: both;
+}
+
+.hidden {
+ display: none;
+}
+
+.hidden-visually {
+ position: absolute;
+ left: -10000px;
+ top: -10000px;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+
+.bold {
+ font-weight: 600;
+}
+
+.center {
+ text-align: center;
+}
+
+.inlineblock {
+ display: inline-block;
+}
+
+/*# sourceMappingURL=global.css.map */
diff --git a/core/css/global.css.map b/core/css/global.css.map
new file mode 100644
index 00000000000..638db781eb4
--- /dev/null
+++ b/core/css/global.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["global.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAIA;AAEA;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC","file":"global.css"} \ No newline at end of file
diff --git a/core/css/header.css b/core/css/header.css
new file mode 100644
index 00000000000..93c44812e57
--- /dev/null
+++ b/core/css/header.css
@@ -0,0 +1,644 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Jos Poortvliet <jos@opensuse.org>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Volker E <volker.e@temporaer.net>
+ * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+/* prevent ugly selection effect on accidental selection */
+#header,
+#navigation,
+#expanddiv {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+}
+
+/* removed until content-focusing issue is fixed */
+#skip-to-content a {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+#skip-to-content a:focus {
+ left: 76px;
+ top: -9px;
+ color: var(--color-primary-text);
+ width: auto;
+ height: auto;
+}
+
+/* HEADERS ------------------------------------------------------------------ */
+#body-user #header,
+#body-settings #header,
+#body-public #header {
+ display: inline-flex;
+ position: fixed;
+ top: 0;
+ width: 100%;
+ z-index: 2000;
+ height: 50px;
+ background-color: var(--color-primary);
+ background-image: linear-gradient(40deg, var(--color-primary) 0%, var(--color-primary-element-light) 100%);
+ box-sizing: border-box;
+ justify-content: space-between;
+}
+
+/* LOGO and APP NAME -------------------------------------------------------- */
+#nextcloud {
+ padding: 7px 0;
+ padding-left: 86px;
+ position: relative;
+ height: 100%;
+ box-sizing: border-box;
+ opacity: 1;
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ overflow: hidden;
+}
+#nextcloud:focus {
+ opacity: 0.75;
+}
+#nextcloud:hover, #nextcloud:active {
+ opacity: 1;
+}
+
+#header {
+ /* Header menu */
+ /* show caret indicator next to logo to make clear it is tappable */
+ /* Right header standard */
+}
+#header .header-left > nav > .menu,
+#header .header-right > div > .menu {
+ background-color: var(--color-main-background);
+ filter: drop-shadow(0 1px 5px var(--color-box-shadow));
+ border-radius: 0 0 var(--border-radius) var(--border-radius);
+ box-sizing: border-box;
+ z-index: 2000;
+ position: absolute;
+ max-width: 350px;
+ min-height: 66px;
+ max-height: calc(100vh - 50px * 4);
+ right: 5px;
+ top: 50px;
+ margin: 0;
+ /* Dropdown arrow */
+ /* Use by the apps menu and the settings right menu */
+}
+#header .header-left > nav > .menu:not(.popovermenu),
+#header .header-right > div > .menu:not(.popovermenu) {
+ display: none;
+}
+#header .header-left > nav > .menu:after,
+#header .header-right > div > .menu:after {
+ border: 10px solid transparent;
+ border-bottom-color: var(--color-main-background);
+ bottom: 100%;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ right: 10px;
+}
+#header .header-left > nav > .menu #apps > ul, #header .header-left > nav > .menu > div, #header .header-left > nav > .menu > ul,
+#header .header-right > div > .menu #apps > ul,
+#header .header-right > div > .menu > div,
+#header .header-right > div > .menu > ul {
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ min-height: 66px;
+ max-height: calc(100vh - 50px * 4);
+}
+#header .header-left > nav > .menu #apps > ul li a, #header .header-left > nav > .menu.settings-menu > ul li a,
+#header .header-right > div > .menu #apps > ul li a,
+#header .header-right > div > .menu.settings-menu > ul li a {
+ display: inline-flex;
+ align-items: center;
+ height: 44px;
+ color: var(--color-main-text);
+ padding: 10px 12px;
+ box-sizing: border-box;
+ white-space: nowrap;
+ position: relative;
+ width: 100%;
+}
+#header .header-left > nav > .menu #apps > ul li a:hover, #header .header-left > nav > .menu #apps > ul li a:focus, #header .header-left > nav > .menu.settings-menu > ul li a:hover, #header .header-left > nav > .menu.settings-menu > ul li a:focus,
+#header .header-right > div > .menu #apps > ul li a:hover,
+#header .header-right > div > .menu #apps > ul li a:focus,
+#header .header-right > div > .menu.settings-menu > ul li a:hover,
+#header .header-right > div > .menu.settings-menu > ul li a:focus {
+ background-color: var(--color-background-hover);
+}
+#header .header-left > nav > .menu #apps > ul li a:active, #header .header-left > nav > .menu #apps > ul li a.active, #header .header-left > nav > .menu.settings-menu > ul li a:active, #header .header-left > nav > .menu.settings-menu > ul li a.active,
+#header .header-right > div > .menu #apps > ul li a:active,
+#header .header-right > div > .menu #apps > ul li a.active,
+#header .header-right > div > .menu.settings-menu > ul li a:active,
+#header .header-right > div > .menu.settings-menu > ul li a.active {
+ background-color: var(--color-primary-light);
+}
+#header .header-left > nav > .menu #apps > ul li a span, #header .header-left > nav > .menu.settings-menu > ul li a span,
+#header .header-right > div > .menu #apps > ul li a span,
+#header .header-right > div > .menu.settings-menu > ul li a span {
+ display: inline-block;
+ padding-bottom: 0;
+ color: var(--color-main-text);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 110px;
+}
+#header .header-left > nav > .menu #apps > ul li a .icon-loading-small, #header .header-left > nav > .menu.settings-menu > ul li a .icon-loading-small,
+#header .header-right > div > .menu #apps > ul li a .icon-loading-small,
+#header .header-right > div > .menu.settings-menu > ul li a .icon-loading-small {
+ margin-right: 10px;
+ background-size: 16px 16px;
+}
+#header .header-left > nav > .menu #apps > ul li a img,
+#header .header-left > nav > .menu #apps > ul li a svg, #header .header-left > nav > .menu.settings-menu > ul li a img,
+#header .header-left > nav > .menu.settings-menu > ul li a svg,
+#header .header-right > div > .menu #apps > ul li a img,
+#header .header-right > div > .menu #apps > ul li a svg,
+#header .header-right > div > .menu.settings-menu > ul li a img,
+#header .header-right > div > .menu.settings-menu > ul li a svg {
+ opacity: 0.7;
+ margin-right: 10px;
+ height: 16px;
+ width: 16px;
+ filter: var(--background-invert-if-dark);
+}
+#header .logo {
+ display: inline-flex;
+ background-image: var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg")));
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center;
+ width: 62px;
+ position: absolute;
+ left: 12px;
+ top: 1px;
+ bottom: 1px;
+ filter: var(--image-logoheader-custom, var(--primary-invert-if-bright));
+}
+#header .header-appname-container {
+ display: none;
+ padding-right: 10px;
+ flex-shrink: 0;
+}
+#header .icon-caret {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ margin-top: -21px;
+ padding: 0;
+ vertical-align: middle;
+}
+#header #header-left, #header .header-left,
+#header #header-right, #header .header-right {
+ display: inline-flex;
+ align-items: center;
+}
+#header #header-left, #header .header-left {
+ flex: 1 0;
+ white-space: nowrap;
+ min-width: 0;
+}
+#header #header-right, #header .header-right {
+ justify-content: flex-end;
+ flex-shrink: 1;
+}
+#header .header-right > div,
+#header .header-right > form {
+ height: 100%;
+ position: relative;
+}
+#header .header-right > div > .menutoggle,
+#header .header-right > form > .menutoggle {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 50px;
+ height: 100%;
+ cursor: pointer;
+ opacity: 0.6;
+ padding: 0;
+ margin: 0;
+}
+
+/* hover effect for app switcher label */
+.header-appname-container .header-appname {
+ opacity: 0.75;
+}
+
+.menutoggle .icon-caret {
+ opacity: 0.75;
+}
+.menutoggle:hover .header-appname, .menutoggle:hover .icon-caret {
+ opacity: 1;
+}
+.menutoggle:focus .header-appname, .menutoggle:focus .icon-caret {
+ opacity: 1;
+}
+.menutoggle.active .header-appname, .menutoggle.active .icon-caret {
+ opacity: 1;
+}
+
+/* TODO: move into minimal css file for public shared template */
+/* only used for public share pages now as we have the app icons when logged in */
+.header-appname {
+ color: var(--color-primary-text);
+ font-size: 16px;
+ font-weight: bold;
+ margin: 0;
+ padding: 0;
+ padding-right: 5px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex: 1 1 100%;
+}
+
+.header-shared-by {
+ color: var(--color-primary-text);
+ position: relative;
+ font-weight: 300;
+ font-size: 11px;
+ line-height: 11px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+/* do not show menu toggle on public share links as there is no menu */
+#body-public #header .icon-caret {
+ display: none;
+}
+
+/* NAVIGATION --------------------------------------------------------------- */
+nav[role=navigation] {
+ display: inline-block;
+ width: 50px;
+ height: 50px;
+ margin-left: -50px;
+ position: relative;
+}
+
+#header .header-left > nav > #navigation {
+ position: relative;
+ left: 25px;
+ /* half the togglemenu */
+ transform: translateX(-50%);
+ width: 160px;
+}
+
+#header .header-left > nav > #navigation,
+.ui-datepicker,
+.ui-timepicker.ui-widget {
+ background-color: var(--color-main-background);
+ filter: drop-shadow(0 1px 10px var(--color-box-shadow));
+}
+#header .header-left > nav > #navigation:after,
+.ui-datepicker:after,
+.ui-timepicker.ui-widget:after {
+ /* position of dropdown arrow */
+ left: 50%;
+ bottom: 100%;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-color: rgba(0, 0, 0, 0);
+ border-bottom-color: var(--color-main-background);
+ border-width: 10px;
+ margin-left: -10px;
+ /* border width */
+}
+
+#navigation {
+ box-sizing: border-box;
+}
+#navigation .in-header {
+ display: none;
+}
+
+/* USER MENU -----------------------------------------------------------------*/
+#settings {
+ display: inline-block;
+ height: 100%;
+ cursor: pointer;
+ flex: 0 0 auto;
+ /* User menu on the right */
+}
+#settings #expand {
+ opacity: 1;
+ /* override icon opacity */
+ padding-right: 12px;
+ /* Profile picture in header */
+ /* show triangle below user menu if active */
+}
+#settings #expand:hover, #settings #expand:focus, #settings #expand:active {
+ color: var(--color-primary-text);
+}
+#settings #expand:hover #expandDisplayName,
+#settings #expand:hover .avatardiv, #settings #expand:focus #expandDisplayName,
+#settings #expand:focus .avatardiv, #settings #expand:active #expandDisplayName,
+#settings #expand:active .avatardiv {
+ border-radius: 50%;
+ border: 2px solid var(--color-primary-text);
+ margin: -2px;
+}
+#settings #expand:hover .avatardiv, #settings #expand:focus .avatardiv, #settings #expand:active .avatardiv {
+ background-color: var(--color-primary-text);
+}
+#settings #expand:hover #expandDisplayName, #settings #expand:focus #expandDisplayName, #settings #expand:active #expandDisplayName {
+ opacity: 1;
+}
+#settings #expand .avatardiv {
+ cursor: pointer;
+ height: 32px;
+ width: 32px;
+ /* do not show display name when profile picture is present */
+}
+#settings #expand .avatardiv img {
+ opacity: 1;
+ cursor: pointer;
+}
+#settings #expand .avatardiv.avatardiv-shown + #expandDisplayName {
+ display: none;
+}
+#settings #expand #expandDisplayName {
+ padding: 8px;
+ opacity: 0.6;
+ cursor: pointer;
+ /* full opacity for gear icon if active */
+}
+#body-settings #settings #expand #expandDisplayName {
+ opacity: 1;
+}
+#body-settings #settings #expand:before {
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border: 0 solid transparent;
+ border-bottom-color: var(--color-main-background);
+ border-width: 10px;
+ bottom: 0;
+ z-index: 100;
+ display: block;
+}
+#settings #expanddiv:after {
+ right: 22px;
+}
+
+/* Apps menu */
+#appmenu {
+ display: inline-flex;
+ min-width: 50px;
+ z-index: 2;
+ /* Show all app titles on hovering app menu area */
+ /* Also show app title on focusing single entry (showing all on focus is only possible with CSS4 and parent selectors) */
+ /* show triangle below active app */
+ /* triangle focus feedback */
+}
+#appmenu li {
+ position: relative;
+ cursor: pointer;
+ padding: 0 2px;
+ display: flex;
+ justify-content: center;
+ /* focused app visual feedback */
+ /* hidden apps menu */
+ /* App title */
+ /* Set up transitions for showing app titles on hover */
+ /* App icon */
+ /* Triangle */
+}
+#appmenu li a {
+ position: relative;
+ display: flex;
+ margin: 0;
+ height: 50px;
+ width: 50px;
+ align-items: center;
+ justify-content: center;
+ opacity: 0.6;
+ letter-spacing: -0.5px;
+ font-size: 12px;
+}
+#appmenu li:hover a,
+#appmenu li a:focus,
+#appmenu li a.active {
+ opacity: 1;
+ font-weight: bold;
+}
+#appmenu li:hover a,
+#appmenu li a:focus {
+ font-size: 14px;
+}
+#appmenu li:hover a + span,
+#appmenu li a:focus + span, #appmenu li:hover span, #appmenu li:focus span,
+#appmenu li a:focus span,
+#appmenu li a.active span {
+ display: inline-block;
+ text-overflow: initial;
+ width: auto;
+ overflow: hidden;
+ padding: 0 5px;
+ z-index: 2;
+}
+#appmenu li img,
+#appmenu li .icon-more-white {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+}
+#appmenu li span {
+ opacity: 0;
+ position: absolute;
+ color: var(--color-primary-text);
+ bottom: 2px;
+ width: 100%;
+ text-align: center;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ transition: all var(--animation-quick) ease;
+ pointer-events: none;
+}
+#appmenu li svg,
+#appmenu li .icon-more-white {
+ transition: transform var(--animation-quick) ease;
+ filter: var(--primary-invert-if-bright);
+}
+#appmenu li a::before {
+ transition: border var(--animation-quick) ease;
+}
+#appmenu:hover li {
+ /* Move up app icon */
+ /* Show app title */
+ /* Prominent app title for current and hovered/focused app */
+ /* Smaller triangle because of limited space */
+}
+#appmenu:hover li svg,
+#appmenu:hover li .icon-more,
+#appmenu:hover li .icon-more-white,
+#appmenu:hover li .icon-loading-small,
+#appmenu:hover li .icon-loading-small-dark {
+ transform: translateY(-7px);
+}
+#appmenu:hover li span {
+ opacity: 0.6;
+ bottom: 2px;
+ z-index: -1;
+ /* fix clickability issue - otherwise we need to move the span into the link */
+}
+#appmenu:hover li:hover span, #appmenu:hover li:focus span,
+#appmenu:hover li .active + span {
+ opacity: 1;
+}
+#appmenu:hover li a::before {
+ border-width: 5px;
+}
+#appmenu li a:focus {
+ /* Move up app icon */
+ /* Show app title */
+ /* Smaller triangle because of limited space */
+}
+#appmenu li a:focus svg,
+#appmenu li a:focus .icon-more,
+#appmenu li a:focus .icon-more-white,
+#appmenu li a:focus .icon-loading-small,
+#appmenu li a:focus .icon-loading-small-dark {
+ transform: translateY(-7px);
+}
+#appmenu li a:focus + span,
+#appmenu li a:focus span {
+ opacity: 1;
+ bottom: 2px;
+}
+#appmenu li a:focus::before {
+ border-width: 5px;
+}
+#appmenu li a::before {
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border: 0 solid transparent;
+ border-bottom-color: var(--color-main-background);
+ border-width: 10px;
+ transform: translateX(-50%);
+ left: 50%;
+ bottom: 0;
+ display: none;
+}
+#appmenu li a.active::before,
+#appmenu li:hover a::before,
+#appmenu li:hover a.active::before,
+#appmenu li a:focus::before {
+ display: block;
+}
+#appmenu li a.active::before {
+ z-index: 99;
+}
+#appmenu li:hover a::before,
+#appmenu li a.active:hover::before,
+#appmenu li a:focus::before {
+ z-index: 101;
+}
+#appmenu li.hidden {
+ display: none;
+}
+#appmenu #more-apps {
+ z-index: 3;
+}
+
+.unread-counter {
+ display: none;
+}
+
+#apps .app-icon-notification,
+#appmenu .app-icon-notification {
+ fill: var(--color-error);
+}
+
+#apps svg:not(.has-unread) .app-icon-notification-mask,
+#appmenu svg:not(.has-unread) .app-icon-notification-mask {
+ display: none;
+}
+#apps svg:not(.has-unread) .app-icon-notification,
+#appmenu svg:not(.has-unread) .app-icon-notification {
+ display: none;
+}
+
+/* Skip navigation links – show only on keyboard focus */
+.skip-navigation {
+ padding: 11px;
+ position: absolute;
+ overflow: hidden;
+ z-index: 9999;
+ top: -999px;
+ left: 3px;
+ /* Force primary color, otherwise too light focused color */
+ background: var(--color-primary) !important;
+}
+.skip-navigation.skip-content {
+ left: 300px;
+ margin-left: 3px;
+}
+.skip-navigation:focus, .skip-navigation:active {
+ top: 50px;
+}
+
+/* Empty content messages in the header e.g. notifications, contacts menu, … */
+header #emptycontent h2,
+header .emptycontent h2 {
+ font-weight: normal;
+ font-size: 16px;
+}
+header #emptycontent [class^=icon-],
+header #emptycontent [class*=icon-],
+header .emptycontent [class^=icon-],
+header .emptycontent [class*=icon-] {
+ background-size: 48px;
+ height: 48px;
+ width: 48px;
+}
+
+/*# sourceMappingURL=header.css.map */
diff --git a/core/css/header.css.map b/core/css/header.css.map
new file mode 100644
index 00000000000..b7763cbbdd7
--- /dev/null
+++ b/core/css/header.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss","header.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AACA;AAAA;AAAA;EAGC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;;AAIF;AACA;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA,QDwDe;ECvDf;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAED;EACC;;;AASF;AACC;AA6GA;AA4BA;;AAtIA;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAhBD;EACA;EAiBC;EACA,KDQc;ECPd;AAMA;AAqBA;;AAzBA;AAAA;EACC;;AAID;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;AAAA;EAGC;EACA;EA3CF;EACA;;AAkDG;AAAA;AAAA;EACC;EACA;EACA,QAhDuB;EAiDvB;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;EACA;;AAML;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAKA;AAAA;EAEC;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA,OD7HY;EC8HZ;EACA;EACA;EACA;EACA;;;AAMJ;AAEA;EACC;;;AAIA;EACC;;AAGA;EACC;;AAID;EACC;;AAID;EACC;;;AAKH;AACA;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;EACC;EACA,ODpMe;ECqMf,QDrMe;ECsMf;EACA;;;AAGD;EACC;EACA;AAAY;EACZ;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;AACA;AAAA;AAAA;AACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAoB;;;AAItB;EACC;;AACA;EACC;;;AAIF;AACA;EACC;EACA;EACA;EACA;AAEA;;AACA;EACC;AAAY;EACZ;AAqBA;AA2BA;;AA9CA;EAGC;;AAEA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;AAED;EACC;;AAED;EACC;;AAKF;EACC;EACA;EACA;AAMA;;AAJA;EACC;EACA;;AAGD;EACC;;AAIF;EACC;EACA;EACA;AAEA;;AACA;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;;AAIF;AACA;EACC;EACA,WDhUe;ECiUf;AAwFA;AAiCA;AAwBA;AAgBA;;AA/JA;EACC;EACA;EACA;EACA;EACA;AAgBA;AA4BA;AAQA;AAcA;AACA;AAQA;;AAzEA;EACC;EACA;EACA;EACA,QD9Ua;EC+Ub,OD/Ua;ECgVb;EACA;EACA;EAEA;EACA;;AAID;AAAA;AAAA;EAGC;EACA;;AAID;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;EAMC;EACA;EACA;EACA;EACA;EACA;;AAID;AAAA;EAEC;EACA;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKD;AAAA;EAEC;EAEA;;AAID;EACC;;AAMD;AACC;AASA;AAOA;AAOA;;AAtBA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;EACC;EACA;EACA;AAAa;;AAId;AAAA;EAGC;;AAID;EACC;;AAMH;AACC;AASA;AAOA;;AAfA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;AAAA;EAEC;EACA;;AAID;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAID;AAAA;AAAA;AAAA;EAIC;;AAED;EACC;;AAED;AAAA;AAAA;EAGC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAED;AAAA;EAEC;;;AAKA;AAAA;EACC;;AAED;AAAA;EACC;;;AAKF;AACA;EACC;EACA;EACA;EACA;EACA;EACA;AACA;EACA;;AAEA;EACC,MDzhBiB;EC0hBjB;;AAGD;EAEC,KDhiBc;;;ACqiBhB;AAGC;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;EAEC;EACA;EACA","file":"header.css"} \ No newline at end of file
diff --git a/core/css/icons.css b/core/css/icons.css
new file mode 100644
index 00000000000..80728ebd00c
--- /dev/null
+++ b/core/css/icons.css
@@ -0,0 +1,206 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Vincent Chan <plus.vincchan@gmail.com>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* GLOBAL ------------------------------------------------------------------- */
+@import url("../../dist/icons.css");
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+[class^=icon-], [class*=" icon-"] {
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+}
+
+.icon-breadcrumb {
+ background-image: url("../img/breadcrumb.svg?v=1");
+}
+
+/* LOADING ------------------------------------------------------------------ */
+.loading,
+.loading-small,
+.icon-loading,
+.icon-loading-dark,
+.icon-loading-small,
+.icon-loading-small-dark {
+ position: relative;
+}
+.loading:after,
+.loading-small:after,
+.icon-loading:after,
+.icon-loading-dark:after,
+.icon-loading-small:after,
+.icon-loading-small-dark:after {
+ z-index: 2;
+ content: "";
+ height: 28px;
+ width: 28px;
+ margin: -16px 0 0 -16px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ border-radius: 100%;
+ -webkit-animation: rotate 0.8s infinite linear;
+ animation: rotate 0.8s infinite linear;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ border: 2px solid var(--color-loading-light);
+ border-top-color: var(--color-loading-dark);
+ filter: var(--background-invert-if-dark);
+}
+.primary .loading:after, .primary + .loading:after,
+.primary .loading-small:after,
+.primary + .loading-small:after,
+.primary .icon-loading:after,
+.primary + .icon-loading:after,
+.primary .icon-loading-dark:after,
+.primary + .icon-loading-dark:after,
+.primary .icon-loading-small:after,
+.primary + .icon-loading-small:after,
+.primary .icon-loading-small-dark:after,
+.primary + .icon-loading-small-dark:after {
+ filter: var(--primary-invert-if-bright);
+}
+
+.icon-loading-dark:after,
+.icon-loading-small-dark:after {
+ border: 2px solid var(--color-loading-dark);
+ border-top-color: var(--color-loading-light);
+}
+
+.icon-loading-small:after,
+.icon-loading-small-dark:after {
+ height: 12px;
+ width: 12px;
+ margin: -8px 0 0 -8px;
+}
+
+/* Css replaced elements don't have ::after nor ::before */
+audio.icon-loading, canvas.icon-loading, embed.icon-loading, iframe.icon-loading, img.icon-loading, input.icon-loading, object.icon-loading, video.icon-loading {
+ background-image: url("../img/loading.gif");
+}
+audio.icon-loading-dark, canvas.icon-loading-dark, embed.icon-loading-dark, iframe.icon-loading-dark, img.icon-loading-dark, input.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark {
+ background-image: url("../img/loading-dark.gif");
+}
+audio.icon-loading-small, canvas.icon-loading-small, embed.icon-loading-small, iframe.icon-loading-small, img.icon-loading-small, input.icon-loading-small, object.icon-loading-small, video.icon-loading-small {
+ background-image: url("../img/loading-small.gif");
+}
+audio.icon-loading-small-dark, canvas.icon-loading-small-dark, embed.icon-loading-small-dark, iframe.icon-loading-small-dark, img.icon-loading-small-dark, input.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark {
+ background-image: url("../img/loading-small-dark.gif");
+}
+
+@keyframes rotate {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+.icon-32 {
+ background-size: 32px !important;
+}
+
+.icon-white.icon-shadow,
+.icon-audio-white,
+.icon-audio-off-white,
+.icon-fullscreen-white,
+.icon-screen-white,
+.icon-screen-off-white,
+.icon-video-white,
+.icon-video-off-white {
+ filter: drop-shadow(1px 1px 4px var(--color-box-shadow));
+}
+
+/* ICONS -------------------------------------------------------------------
+ * These icon classes are generated automatically with the following pattern
+ * .icon-close (black icon)
+ * .icon-close-white (white icon)
+ * .icon-close.icon-white (white icon)
+ *
+ * Some class definitions are kept as before, since they don't follow the pattern
+ * or have some additional styling like drop shadows
+ */
+
+/*# sourceMappingURL=icons.css.map */
diff --git a/core/css/icons.css.map b/core/css/icons.css.map
new file mode 100644
index 00000000000..f78070a9adc
--- /dev/null
+++ b/core/css/icons.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["icons.scss","functions.scss","variables.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADnBA;AA+GQ;AE9IR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFgCA;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;;;AAKH;AAAA;EAEC;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAEC;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AAIF;EACC;IACC;;EAED;IACC;;;AAIF;EACC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"icons.css"} \ No newline at end of file
diff --git a/core/css/inputs.css b/core/css/inputs.css
new file mode 100644
index 00000000000..4eda99a53fd
--- /dev/null
+++ b/core/css/inputs.css
@@ -0,0 +1,1039 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Joas Schilling <nickvergessen@owncloud.com>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* Specifically override browser styles */
+input, textarea, select, button, div[contenteditable=true], div[contenteditable=false] {
+ font-family: var(--font-face);
+}
+
+.select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget {
+ font-family: var(--font-face) !important;
+}
+
+/* Simple selector to allow easy overriding */
+select,
+button:not(.button-vue),
+input,
+textarea,
+div[contenteditable=true],
+div[contenteditable=false] {
+ width: 130px;
+ min-height: 34px;
+ box-sizing: border-box;
+}
+
+/**
+ * color-text-lighter normal state
+ * color-text-lighter active state
+ * color-text-maxcontrast disabled state
+ */
+/* Default global values */
+div.select2-drop .select2-search input,
+select,
+button:not(.button-vue), .button,
+input:not([type=range]),
+textarea,
+div[contenteditable=true],
+.pager li a {
+ margin: 3px 3px 3px 0;
+ padding: 7px 6px;
+ font-size: 13px;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ border: 1px solid var(--color-border-dark);
+ outline: none;
+ border-radius: var(--border-radius);
+ cursor: text;
+ /* Primary action button, use sparingly */
+}
+div.select2-drop .select2-search input:not(:disabled):not(.primary):hover, div.select2-drop .select2-search input:not(:disabled):not(.primary):focus, div.select2-drop .select2-search input:not(:disabled):not(.primary).active,
+select:not(:disabled):not(.primary):hover,
+select:not(:disabled):not(.primary):focus,
+select:not(:disabled):not(.primary).active,
+button:not(.button-vue):not(:disabled):not(.primary):hover,
+button:not(.button-vue):not(:disabled):not(.primary):focus,
+button:not(.button-vue):not(:disabled):not(.primary).active, .button:not(:disabled):not(.primary):hover, .button:not(:disabled):not(.primary):focus, .button:not(:disabled):not(.primary).active,
+input:not([type=range]):not(:disabled):not(.primary):hover,
+input:not([type=range]):not(:disabled):not(.primary):focus,
+input:not([type=range]):not(:disabled):not(.primary).active,
+textarea:not(:disabled):not(.primary):hover,
+textarea:not(:disabled):not(.primary):focus,
+textarea:not(:disabled):not(.primary).active,
+div[contenteditable=true]:not(:disabled):not(.primary):hover,
+div[contenteditable=true]:not(:disabled):not(.primary):focus,
+div[contenteditable=true]:not(:disabled):not(.primary).active,
+.pager li a:not(:disabled):not(.primary):hover,
+.pager li a:not(:disabled):not(.primary):focus,
+.pager li a:not(:disabled):not(.primary).active {
+ /* active class used for multiselect */
+ border-color: var(--color-primary-element);
+ outline: none;
+}
+div.select2-drop .select2-search input:not(:disabled):not(.primary):active,
+select:not(:disabled):not(.primary):active,
+button:not(.button-vue):not(:disabled):not(.primary):active, .button:not(:disabled):not(.primary):active,
+input:not([type=range]):not(:disabled):not(.primary):active,
+textarea:not(:disabled):not(.primary):active,
+div[contenteditable=true]:not(:disabled):not(.primary):active,
+.pager li a:not(:disabled):not(.primary):active {
+ outline: none;
+ background-color: var(--color-main-background);
+ color: var(--color-text-light);
+}
+div.select2-drop .select2-search input:disabled,
+select:disabled,
+button:not(.button-vue):disabled, .button:disabled,
+input:not([type=range]):disabled,
+textarea:disabled,
+div[contenteditable=true]:disabled,
+.pager li a:disabled {
+ background-color: var(--color-background-dark);
+ color: var(--color-text-maxcontrast);
+ cursor: default;
+ opacity: 0.5;
+}
+div.select2-drop .select2-search input:required,
+select:required,
+button:not(.button-vue):required, .button:required,
+input:not([type=range]):required,
+textarea:required,
+div[contenteditable=true]:required,
+.pager li a:required {
+ box-shadow: none;
+}
+div.select2-drop .select2-search input:invalid,
+select:invalid,
+button:not(.button-vue):invalid, .button:invalid,
+input:not([type=range]):invalid,
+textarea:invalid,
+div[contenteditable=true]:invalid,
+.pager li a:invalid {
+ box-shadow: none !important;
+ border-color: var(--color-error);
+}
+div.select2-drop .select2-search input.primary,
+select.primary,
+button:not(.button-vue).primary, .button.primary,
+input:not([type=range]).primary,
+textarea.primary,
+div[contenteditable=true].primary,
+.pager li a.primary {
+ background-color: var(--color-primary-element);
+ border-color: var(--color-primary-element);
+ color: var(--color-primary-text);
+ cursor: pointer;
+ /* Apply border to primary button if on log in page (and not in a dark container) or if in header */
+}
+#body-login :not(.body-login-container) div.select2-drop .select2-search input.primary, #header div.select2-drop .select2-search input.primary,
+#body-login :not(.body-login-container) select.primary,
+#header select.primary,
+#body-login :not(.body-login-container) button:not(.button-vue).primary,
+#header button:not(.button-vue).primary, #body-login :not(.body-login-container) .button.primary, #header .button.primary,
+#body-login :not(.body-login-container) input:not([type=range]).primary,
+#header input:not([type=range]).primary,
+#body-login :not(.body-login-container) textarea.primary,
+#header textarea.primary,
+#body-login :not(.body-login-container) div[contenteditable=true].primary,
+#header div[contenteditable=true].primary,
+#body-login :not(.body-login-container) .pager li a.primary,
+#header .pager li a.primary {
+ border-color: var(--color-primary-text);
+}
+div.select2-drop .select2-search input.primary:not(:disabled):hover, div.select2-drop .select2-search input.primary:not(:disabled):focus, div.select2-drop .select2-search input.primary:not(:disabled):active,
+select.primary:not(:disabled):hover,
+select.primary:not(:disabled):focus,
+select.primary:not(:disabled):active,
+button:not(.button-vue).primary:not(:disabled):hover,
+button:not(.button-vue).primary:not(:disabled):focus,
+button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):hover, .button.primary:not(:disabled):focus, .button.primary:not(:disabled):active,
+input:not([type=range]).primary:not(:disabled):hover,
+input:not([type=range]).primary:not(:disabled):focus,
+input:not([type=range]).primary:not(:disabled):active,
+textarea.primary:not(:disabled):hover,
+textarea.primary:not(:disabled):focus,
+textarea.primary:not(:disabled):active,
+div[contenteditable=true].primary:not(:disabled):hover,
+div[contenteditable=true].primary:not(:disabled):focus,
+div[contenteditable=true].primary:not(:disabled):active,
+.pager li a.primary:not(:disabled):hover,
+.pager li a.primary:not(:disabled):focus,
+.pager li a.primary:not(:disabled):active {
+ background-color: var(--color-primary-element-light);
+ border-color: var(--color-primary-element-light);
+}
+div.select2-drop .select2-search input.primary:not(:disabled):active,
+select.primary:not(:disabled):active,
+button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):active,
+input:not([type=range]).primary:not(:disabled):active,
+textarea.primary:not(:disabled):active,
+div[contenteditable=true].primary:not(:disabled):active,
+.pager li a.primary:not(:disabled):active {
+ color: var(--color-primary-text-dark);
+}
+div.select2-drop .select2-search input.primary:disabled,
+select.primary:disabled,
+button:not(.button-vue).primary:disabled, .button.primary:disabled,
+input:not([type=range]).primary:disabled,
+textarea.primary:disabled,
+div[contenteditable=true].primary:disabled,
+.pager li a.primary:disabled {
+ background-color: var(--color-primary-element);
+ color: var(--color-primary-text-dark);
+ cursor: default;
+}
+
+div[contenteditable=false] {
+ margin: 3px 3px 3px 0;
+ padding: 7px 6px;
+ font-size: 13px;
+ background-color: var(--color-main-background);
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-background-darker);
+ outline: none;
+ border-radius: var(--border-radius);
+ background-color: var(--color-background-dark);
+ color: var(--color-text-lighter);
+ cursor: default;
+ opacity: 0.5;
+}
+
+/* Specific override */
+input {
+ /* Color input doesn't respect the initial height
+ so we need to set a custom one */
+}
+input:not([type=radio]):not([type=checkbox]):not([type=range]):not([type=submit]):not([type=button]):not([type=reset]):not([type=color]):not([type=file]):not([type=image]) {
+ -webkit-appearance: textfield;
+ -moz-appearance: textfield;
+ height: 34px;
+}
+input[type=radio], input[type=checkbox], input[type=file], input[type=image] {
+ height: auto;
+ width: auto;
+}
+input[type=color] {
+ margin: 3px;
+ padding: 0 2px;
+ min-height: 30px;
+ width: 40px;
+ cursor: pointer;
+}
+input[type=hidden] {
+ height: 0;
+ width: 0;
+}
+input[type=time] {
+ width: initial;
+}
+
+/* 'Click' inputs */
+select,
+button:not(.button-vue), .button,
+input[type=button],
+input[type=submit],
+input[type=reset] {
+ padding: 6px 16px;
+ width: auto;
+ min-height: 34px;
+ cursor: pointer;
+ box-sizing: border-box;
+ background-color: var(--color-background-dark);
+}
+select:disabled,
+button:not(.button-vue):disabled, .button:disabled,
+input[type=button]:disabled,
+input[type=submit]:disabled,
+input[type=reset]:disabled {
+ cursor: default;
+}
+
+select *,
+button:not(.button-vue) *, .button * {
+ cursor: pointer;
+}
+select:disabled *,
+button:not(.button-vue):disabled *, .button:disabled * {
+ cursor: default;
+}
+
+/* Buttons */
+button:not(.button-vue), .button,
+input[type=button],
+input[type=submit],
+input[type=reset] {
+ font-weight: bold;
+ border-radius: var(--border-radius-pill);
+ /* Get rid of the inside dotted line in Firefox */
+}
+button:not(.button-vue)::-moz-focus-inner, .button::-moz-focus-inner,
+input[type=button]::-moz-focus-inner,
+input[type=submit]::-moz-focus-inner,
+input[type=reset]::-moz-focus-inner {
+ border: 0;
+}
+button:not(.button-vue).error, .button.error,
+input[type=button].error,
+input[type=submit].error,
+input[type=reset].error {
+ background-color: var(--color-error) !important;
+ border-color: var(--color-error) !important;
+ color: #fff !important;
+}
+
+button:not(.button-vue):not(.action-button) > span, .button > span {
+ /* icon position inside buttons */
+}
+button:not(.button-vue):not(.action-button) > span[class^=icon-], button:not(.button-vue):not(.action-button) > span[class*=" icon-"], .button > span[class^=icon-], .button > span[class*=" icon-"] {
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.5;
+}
+
+textarea, div[contenteditable=true] {
+ color: var(--color-main-text);
+ cursor: text;
+ font-family: inherit;
+ height: auto;
+}
+textarea:not(:disabled):active, textarea:not(:disabled):hover, textarea:not(:disabled):focus, div[contenteditable=true]:not(:disabled):active, div[contenteditable=true]:not(:disabled):hover, div[contenteditable=true]:not(:disabled):focus {
+ border-color: var(--color-background-darker) !important;
+ background-color: var(--color-main-background) !important;
+}
+
+div[contenteditable=false] {
+ color: var(--color-text-lighter);
+ font-family: inherit;
+ height: auto;
+}
+
+/* Override the ugly select arrow */
+select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: var(--icon-triangle-s-dark) no-repeat right 4px center;
+ background-color: inherit;
+ outline: 0;
+ padding-right: 24px !important;
+ height: 34px;
+}
+
+/* Confirm inputs */
+input[type=text], input[type=password], input[type=email] {
+ /* only show confirm borders if input is not focused */
+}
+input[type=text] + .icon-confirm, input[type=password] + .icon-confirm, input[type=email] + .icon-confirm {
+ margin-left: -8px !important;
+ border-left-color: transparent !important;
+ border-radius: 0 var(--border-radius) var(--border-radius) 0 !important;
+ background-clip: padding-box;
+ /* Avoid background under border */
+ background-color: var(--color-main-background) !important;
+ opacity: 1;
+ height: 34px;
+ width: 34px;
+ padding: 7px 6px;
+ cursor: pointer;
+ margin-right: 0;
+}
+input[type=text] + .icon-confirm:disabled, input[type=password] + .icon-confirm:disabled, input[type=email] + .icon-confirm:disabled {
+ cursor: default;
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-confirm-fade-dark);
+}
+input[type=text]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=password]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=email]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm {
+ border-color: var(--color-error);
+}
+input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus {
+ border-color: var(--color-primary-element) !important;
+ border-radius: var(--border-radius) !important;
+}
+input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled {
+ border-color: var(--color-background-darker) !important;
+}
+input[type=text]:active + .icon-confirm, input[type=text]:hover + .icon-confirm, input[type=text]:focus + .icon-confirm, input[type=password]:active + .icon-confirm, input[type=password]:hover + .icon-confirm, input[type=password]:focus + .icon-confirm, input[type=email]:active + .icon-confirm, input[type=email]:hover + .icon-confirm, input[type=email]:focus + .icon-confirm {
+ border-color: var(--color-primary-element) !important;
+ border-left-color: transparent !important;
+ /* above previous input */
+ z-index: 2;
+}
+
+/* Various Fixes */
+button img,
+.button img {
+ cursor: pointer;
+}
+
+select,
+.button.multiselect {
+ font-weight: normal;
+}
+
+/* Radio & Checkboxes */
+input[type=checkbox], input[type=radio] {
+ /* We do not use the variables as we keep the colours as white for this variant */
+}
+input[type=checkbox].radio, input[type=checkbox].checkbox, input[type=radio].radio, input[type=radio].checkbox {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+input[type=checkbox].radio + label, input[type=checkbox].checkbox + label, input[type=radio].radio + label, input[type=radio].checkbox + label {
+ user-select: none;
+}
+input[type=checkbox].radio:disabled + label, input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label, input[type=radio].checkbox:disabled + label:before {
+ cursor: default;
+}
+input[type=checkbox].radio + label:before, input[type=checkbox].checkbox + label:before, input[type=radio].radio + label:before, input[type=radio].checkbox + label:before {
+ content: "";
+ display: inline-block;
+ height: 14px;
+ width: 14px;
+ vertical-align: middle;
+ border-radius: 50%;
+ margin: 0 6px 3px 3px;
+ border: 1px solid var(--color-text-lighter);
+}
+input[type=checkbox].radio:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].radio:focus + label:before, input[type=checkbox].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox:focus + label:before, input[type=radio].radio:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio:focus + label:before, input[type=radio].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox:focus + label:before {
+ border-color: var(--color-primary-element);
+}
+input[type=checkbox].radio:focus-visible + label, input[type=checkbox].checkbox:focus-visible + label, input[type=radio].radio:focus-visible + label, input[type=radio].checkbox:focus-visible + label {
+ outline-style: solid;
+ outline-color: var(--color-main-text);
+ outline-width: 1px;
+ outline-offset: 2px;
+}
+input[type=checkbox].radio:checked + label:before, input[type=checkbox].radio.checkbox:indeterminate + label:before, input[type=checkbox].checkbox:checked + label:before, input[type=checkbox].checkbox.checkbox:indeterminate + label:before, input[type=radio].radio:checked + label:before, input[type=radio].radio.checkbox:indeterminate + label:before, input[type=radio].checkbox:checked + label:before, input[type=radio].checkbox.checkbox:indeterminate + label:before {
+ /* ^ :indeterminate have a strange behavior on radio,
+ so we respecified the checkbox class again to be safe */
+ box-shadow: inset 0px 0px 0px 2px var(--color-main-background);
+ background-color: var(--color-primary-element);
+ border-color: var(--color-primary-element);
+}
+input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label:before {
+ border: 1px solid var(--color-text-lighter);
+ background-color: var(--color-text-maxcontrast) !important;
+ /* override other status */
+}
+input[type=checkbox].radio:checked:disabled + label:before, input[type=checkbox].checkbox:checked:disabled + label:before, input[type=radio].radio:checked:disabled + label:before, input[type=radio].checkbox:checked:disabled + label:before {
+ background-color: var(--color-text-maxcontrast);
+}
+input[type=checkbox].radio + label ~ em, input[type=checkbox].checkbox + label ~ em, input[type=radio].radio + label ~ em, input[type=radio].checkbox + label ~ em {
+ display: inline-block;
+ margin-left: 25px;
+}
+input[type=checkbox].radio + label ~ em:last-of-type, input[type=checkbox].checkbox + label ~ em:last-of-type, input[type=radio].radio + label ~ em:last-of-type, input[type=radio].checkbox + label ~ em:last-of-type {
+ margin-bottom: 14px;
+}
+input[type=checkbox].checkbox + label:before, input[type=radio].checkbox + label:before {
+ border-radius: 1px;
+ height: 14px;
+ width: 14px;
+ box-shadow: none !important;
+ background-position: center;
+}
+input[type=checkbox].checkbox:checked + label:before, input[type=radio].checkbox:checked + label:before {
+ background-image: url("../img/actions/checkbox-mark.svg");
+}
+input[type=checkbox].checkbox:indeterminate + label:before, input[type=radio].checkbox:indeterminate + label:before {
+ background-image: url("../img/actions/checkbox-mixed.svg");
+}
+input[type=checkbox].radio--white + label:before, input[type=checkbox].radio--white:focus + label:before, input[type=checkbox].checkbox--white + label:before, input[type=checkbox].checkbox--white:focus + label:before, input[type=radio].radio--white + label:before, input[type=radio].radio--white:focus + label:before, input[type=radio].checkbox--white + label:before, input[type=radio].checkbox--white:focus + label:before {
+ border-color: #bababa;
+}
+input[type=checkbox].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox--white:not(:disabled):not(:checked) + label:hover:before {
+ border-color: #fff;
+}
+input[type=checkbox].radio--white:checked + label:before, input[type=checkbox].checkbox--white:checked + label:before, input[type=radio].radio--white:checked + label:before, input[type=radio].checkbox--white:checked + label:before {
+ box-shadow: inset 0px 0px 0px 2px var(--color-main-background);
+ background-color: #dbdbdb;
+ border-color: #dbdbdb;
+}
+input[type=checkbox].radio--white:disabled + label:before, input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].radio--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before {
+ background-color: #bababa !important;
+ /* override other status */
+ border-color: rgba(255, 255, 255, 0.4) !important;
+ /* override other status */
+}
+input[type=checkbox].radio--white:checked:disabled + label:before, input[type=checkbox].checkbox--white:checked:disabled + label:before, input[type=radio].radio--white:checked:disabled + label:before, input[type=radio].checkbox--white:checked:disabled + label:before {
+ box-shadow: inset 0px 0px 0px 2px var(--color-main-background);
+ border-color: rgba(255, 255, 255, 0.4) !important;
+ /* override other status */
+ background-color: #bababa;
+}
+input[type=checkbox].checkbox--white:checked + label:before, input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:checked + label:before, input[type=radio].checkbox--white:indeterminate + label:before {
+ background-color: transparent !important;
+ /* Override default checked */
+ border-color: #fff !important;
+ /* Override default checked */
+ background-image: url("../img/actions/checkbox-mark-white.svg");
+}
+input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:indeterminate + label:before {
+ background-image: url("../img/actions/checkbox-mixed-white.svg");
+}
+input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before {
+ opacity: 0.7;
+ /* No other choice for white background image */
+}
+
+/* Select2 overriding. Merged to core with vendor stylesheet */
+div.select2-drop {
+ margin-top: -2px;
+ background-color: var(--color-main-background);
+}
+div.select2-drop.select2-drop-active {
+ border-color: var(--color-border-dark);
+}
+div.select2-drop .avatar {
+ display: inline-block;
+ margin-right: 8px;
+ vertical-align: middle;
+}
+div.select2-drop .avatar img {
+ cursor: pointer;
+}
+div.select2-drop .select2-search input {
+ min-height: auto;
+ background: var(--icon-search-dark) no-repeat right center !important;
+ background-origin: content-box !important;
+}
+div.select2-drop .select2-results {
+ max-height: 250px;
+ margin: 0;
+ padding: 0;
+}
+div.select2-drop .select2-results .select2-result-label {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+div.select2-drop .select2-results .select2-result-label span {
+ cursor: pointer;
+}
+div.select2-drop .select2-results .select2-result-label span em {
+ cursor: inherit;
+ background: unset;
+}
+div.select2-drop .select2-results .select2-result,
+div.select2-drop .select2-results .select2-no-results,
+div.select2-drop .select2-results .select2-searching {
+ position: relative;
+ display: list-item;
+ padding: 12px;
+ background-color: transparent;
+ cursor: pointer;
+ color: var(--color-text-lighter);
+}
+div.select2-drop .select2-results .select2-result.select2-selected {
+ background-color: var(--color-background-dark);
+}
+div.select2-drop .select2-results .select2-highlighted {
+ background-color: var(--color-background-dark);
+ color: var(--color-main-text);
+}
+
+.select2-chosen .avatar,
+.select2-chosen .avatar img,
+#select2-drop .avatar,
+#select2-drop .avatar img {
+ cursor: pointer;
+}
+
+div.select2-container-multi .select2-choices, div.select2-container-multi.select2-container-active .select2-choices {
+ box-shadow: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: var(--color-main-background);
+ color: var(--color-text-lighter) !important;
+ box-sizing: content-box;
+ border-radius: var(--border-radius);
+ border: 1px solid var(--color-border-dark);
+ margin: 0;
+ padding: 2px 0;
+ min-height: auto;
+}
+div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+}
+div.select2-container-multi .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi .select2-choices .select2-search-choice:hover, div.select2-container-multi .select2-choices .select2-search-choice:active, div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:hover, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice {
+ background-image: none;
+ background-color: var(--color-main-background);
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-border-dark);
+}
+div.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close {
+ display: none;
+}
+div.select2-container-multi .select2-choices .select2-search-field input, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input {
+ line-height: 20px;
+}
+div.select2-container-multi .select2-choices .select2-search-field input.select2-active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input.select2-active {
+ background: none !important;
+}
+
+div.select2-container {
+ margin: 3px 3px 3px 0;
+}
+div.select2-container.select2-container-multi .select2-choices {
+ display: flex;
+ flex-wrap: wrap;
+}
+div.select2-container.select2-container-multi .select2-choices li {
+ float: none;
+}
+div.select2-container a.select2-choice {
+ box-shadow: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: var(--color-main-background);
+ color: var(--color-text-lighter) !important;
+ box-sizing: content-box;
+ border-radius: var(--border-radius);
+ border: 1px solid var(--color-border-dark);
+ margin: 0;
+ padding: 2px 0;
+ padding-left: 6px;
+ min-height: auto;
+}
+div.select2-container a.select2-choice .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+ background-image: none;
+ background-color: var(--color-background-dark);
+ border-color: var(--color-background-dark);
+}
+div.select2-container a.select2-choice .select2-search-choice .select2-search-choice-close {
+ display: none;
+}
+div.select2-container a.select2-choice .select2-search-choice.select2-search-choice-focus, div.select2-container a.select2-choice .select2-search-choice:hover {
+ background-color: var(--color-border);
+ border-color: var(--color-border);
+}
+div.select2-container a.select2-choice .select2-arrow {
+ background: none;
+ border-radius: 0;
+ border: none;
+}
+div.select2-container a.select2-choice .select2-arrow b {
+ background: var(--icon-triangle-s-dark) no-repeat center !important;
+ opacity: 0.5;
+}
+div.select2-container a.select2-choice:hover .select2-arrow b, div.select2-container a.select2-choice:focus .select2-arrow b, div.select2-container a.select2-choice:active .select2-arrow b {
+ opacity: 0.7;
+}
+div.select2-container a.select2-choice .select2-search-field input {
+ line-height: 20px;
+}
+
+/* Vue v-select */
+.v-select {
+ margin: 3px 3px 3px 0;
+ display: inline-block;
+}
+.v-select .dropdown-toggle {
+ display: flex !important;
+ flex-wrap: wrap;
+}
+.v-select .dropdown-toggle .selected-tag {
+ line-height: 20px;
+ padding-left: 5px;
+ background-image: none;
+ background-color: var(--color-main-background);
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-border-dark);
+ display: inline-flex;
+ align-items: center;
+}
+.v-select .dropdown-toggle .selected-tag .close {
+ margin-left: 3px;
+}
+.v-select .dropdown-menu {
+ padding: 0;
+}
+.v-select .dropdown-menu li {
+ padding: 5px;
+ position: relative;
+ display: list-item;
+ background-color: transparent;
+ cursor: pointer;
+ color: var(--color-text-lighter);
+}
+.v-select .dropdown-menu li a {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ height: 25px;
+ padding: 3px 7px 4px 2px;
+ margin: 0;
+ cursor: pointer;
+ min-height: 1em;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ display: inline-flex;
+ align-items: center;
+ background-color: transparent !important;
+ color: inherit !important;
+}
+.v-select .dropdown-menu li a::before {
+ content: " ";
+ background-image: var(--icon-checkmark-dark);
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+ display: block;
+ opacity: 0.5;
+ margin-right: 5px;
+ visibility: hidden;
+}
+.v-select .dropdown-menu li.highlight {
+ color: var(--color-main-text);
+}
+.v-select .dropdown-menu li.active > a {
+ background-color: var(--color-background-dark);
+ color: var(--color-main-text);
+}
+.v-select .dropdown-menu li.active > a::before {
+ visibility: visible;
+}
+
+/* Vue multiselect */
+.multiselect.multiselect-vue {
+ margin: 1px 2px;
+ padding: 0 !important;
+ display: inline-block;
+ width: 160px;
+ position: relative;
+ background-color: var(--color-main-background);
+ /* results wrapper */
+}
+.multiselect.multiselect-vue.multiselect--active {
+ /* Opened: force display the input */
+}
+.multiselect.multiselect-vue.multiselect--active input.multiselect__input {
+ opacity: 1 !important;
+ cursor: text !important;
+}
+.multiselect.multiselect-vue.multiselect--disabled, .multiselect.multiselect-vue.multiselect--disabled .multiselect__single {
+ background-color: var(--color-background-dark) !important;
+}
+.multiselect.multiselect-vue .multiselect__tags {
+ /* space between tags and limit tag */
+ display: flex;
+ flex-wrap: nowrap;
+ overflow: hidden;
+ border: 1px solid var(--color-border-dark);
+ cursor: pointer;
+ position: relative;
+ border-radius: var(--border-radius);
+ height: 34px;
+ /* tag wrapper */
+ /* Single select default value */
+ /* displayed text if tag limit reached */
+ /* default multiselect input for search and placeholder */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap {
+ align-items: center;
+ display: inline-flex;
+ overflow: hidden;
+ max-width: 100%;
+ position: relative;
+ padding: 3px 5px;
+ flex-grow: 1;
+ /* no tags or simple select? Show input directly
+ input is used to display single value */
+ /* selected tag */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input {
+ opacity: 1 !important;
+ /* hide default empty text, show input instead */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input + span:not(.multiselect__single) {
+ display: none;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag {
+ flex: 1 0 0;
+ line-height: 20px;
+ padding: 1px 5px;
+ background-image: none;
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-border-dark);
+ display: inline-flex;
+ align-items: center;
+ border-radius: var(--border-radius);
+ /* require to override the default width
+ and force the tag to shring properly */
+ min-width: 0;
+ max-width: 50%;
+ max-width: fit-content;
+ max-width: -moz-fit-content;
+ /* css hack, detect if more than two tags
+ if so, flex-basis is set to half */
+ /* ellipsis the groups to be sure
+ we display at least two of them */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:only-child {
+ flex: 0 1 auto;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:not(:last-child) {
+ margin-right: 5px;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag > span {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__single {
+ padding: 8px 10px;
+ flex: 0 0 100%;
+ z-index: 1;
+ /* above input */
+ background-color: var(--color-main-background);
+ cursor: pointer;
+ line-height: 17px;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__strong,
+.multiselect.multiselect-vue .multiselect__tags .multiselect__limit {
+ flex: 0 0 auto;
+ line-height: 20px;
+ color: var(--color-text-lighter);
+ display: inline-flex;
+ align-items: center;
+ opacity: 0.7;
+ margin-right: 5px;
+ /* above the input */
+ z-index: 5;
+}
+.multiselect.multiselect-vue .multiselect__tags input.multiselect__input {
+ width: 100% !important;
+ position: absolute !important;
+ margin: 0;
+ opacity: 0;
+ /* let's leave it on top of tags but hide it */
+ height: 100%;
+ border: none;
+ /* override hide to force show the placeholder */
+ display: block !important;
+ /* only when not active */
+ cursor: pointer;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper {
+ position: absolute;
+ width: 100%;
+ margin-top: -1px;
+ border: 1px solid var(--color-border-dark);
+ background: var(--color-main-background);
+ z-index: 50;
+ max-height: 175px !important;
+ overflow-y: auto;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper .multiselect__content {
+ width: 100%;
+ padding: 5px 0;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li {
+ padding: 5px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ background-color: transparent;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li,
+.multiselect.multiselect-vue .multiselect__content-wrapper li span {
+ cursor: pointer;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ height: 20px;
+ margin: 0;
+ min-height: 1em;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ display: inline-flex;
+ align-items: center;
+ background-color: transparent !important;
+ color: var(--color-text-lighter);
+ width: 100%;
+ /* selected checkmark icon */
+ /* add the prop tag-placeholder="create" to add the +
+ * icon on top of an unknown-and-ready-to-be-created entry
+ */
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span::before {
+ content: " ";
+ background-image: var(--icon-checkmark-dark);
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+ display: block;
+ opacity: 0.5;
+ margin-right: 5px;
+ visibility: hidden;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--disabled {
+ background-color: var(--color-background-dark);
+ opacity: 0.5;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span[data-select=create]::before {
+ background-image: var(--icon-add-dark);
+ visibility: visible;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--highlight {
+ color: var(--color-main-text);
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before {
+ opacity: 0.3;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--selected::before, .multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before {
+ visibility: visible;
+}
+
+/* Progressbar */
+progress:not(.vue) {
+ display: block;
+ width: 100%;
+ padding: 0;
+ border: 0 none;
+ background-color: var(--color-background-dark);
+ border-radius: var(--border-radius);
+ flex-basis: 100%;
+ height: 5px;
+ overflow: hidden;
+}
+progress:not(.vue).warn::-moz-progress-bar {
+ background: var(--color-error);
+}
+progress:not(.vue).warn::-webkit-progress-value {
+ background: var(--color-error);
+}
+progress:not(.vue)::-webkit-progress-bar {
+ background: transparent;
+}
+progress:not(.vue)::-moz-progress-bar {
+ border-radius: var(--border-radius);
+ background: var(--color-primary);
+ transition: 250ms all ease-in-out;
+}
+progress:not(.vue)::-webkit-progress-value {
+ border-radius: var(--border-radius);
+ background: var(--color-primary);
+ transition: 250ms all ease-in-out;
+}
+
+/* Animation */
+@keyframes shake {
+ 10%, 90% {
+ transform: translate(-1px);
+ }
+ 20%, 80% {
+ transform: translate(2px);
+ }
+ 30%, 50%, 70% {
+ transform: translate(-4px);
+ }
+ 40%, 60% {
+ transform: translate(4px);
+ }
+}
+.shake {
+ animation-name: shake;
+ animation-duration: 0.7s;
+ animation-timing-function: ease-out;
+}
+
+label.infield {
+ position: absolute;
+ left: -10000px;
+ top: -10000px;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+
+::placeholder,
+::-ms-input-placeholder,
+::-webkit-input-placeholder {
+ color: var(--color-text-maxcontrast);
+}
+
+/*# sourceMappingURL=inputs.css.map */
diff --git a/core/css/inputs.css.map b/core/css/inputs.css.map
new file mode 100644
index 00000000000..02bd287fa2c
--- /dev/null
+++ b/core/css/inputs.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss","inputs.scss","functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADlCC;AACD;EACC;;;AAED;EACC;;;AAKD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;EACA,YAVgB;EAWhB;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA4BA;;AA1BC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;AACA;AAcC;AAAA;;AAbA;EACC;EACA;EAEA,QAvHe;;AAyHhB;EAIC;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;;AAIF;AACA;AAAA;AAAA;AAAA;AAAA;EAKC;EACA;EACA,YA1JgB;EA2JhB;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAKD;AAAA;EACC;;AAIA;AAAA;EACC;;;AAKH;AACA;AAAA;AAAA;AAAA;EAIC;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;EACA;EACA;;;AAID;AACC;;AACA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;;AAEC;EAGC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,QA9OgB;;;AAiPjB;AAEC;AAsBC;;AAnBA;EACC;EACA;EACA;EACA;AACA;EACA;EACA;EACA,QA9Pc;EA+Pd,OA/Pc;EAgQd;EACA;EACA;;AACA;EACC;AC7NH;EAEA;;ADmOG;EACC;;AAID;EAGC;EACA;;AACA;EACC;;AAQH;EACC;EACA;AACA;EACA;;;AAOJ;AACA;AAAA;EAEC;;;AAED;AAAA;EAEC;;;AAGD;AAKC;AA8EC;;AA5EA;EAEC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;;AAED;EACC;EACA;EACA,QAxBkB;EAyBlB,OAzBkB;EA0BlB;EACA;EACA;EACA;;AAED;EAEC;;AAED;EACC;EACA;EACA;EACA;;AAED;AAEA;AAAA;EAEC;EACA;EACA;;AAED;EACC;EACA;AAA4D;;AAE7D;EACC;;AAID;EACC;EACA;;AAED;EACC,eA/DkB;;AAmEnB;EACC;EACA,QArEkB;EAsElB,OAtEkB;EAuElB;EACA;;AAED;EACC;;AAED;EACC;;AAOD;EAEC;;AAED;EACC,cAzFyB;;AA2F1B;EACC;EACA;EACA;;AAED;EACC;AAAuE;EACvE;AAAiE;;AAElE;EACC;EACA;AAAiE;EACjE;;AAID;EAEC;AAA0C;EAC1C;AAAsD;EACtD;;AAED;EACC;;AAED;EACC;AAAc;;;AAMlB;AACA;EACC;EACA;;AACA;EACC;;AAED;EACC;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AACA;EACC;;AACA;EACC;EACA;;AAIH;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAGF;EACE;EACA;;;AAMH;AAAA;AAAA;AAAA;EAEC;;;AAID;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EAIC;EACA;EACA;EACA;;AAED;EACC;;AAGF;EACC;;AACA;EACC;;;AAKJ;EACC;;AACA;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;EACA;;AAGF;EACC;EACA;EACA;;AACA;EACC;EACA;;AAGF;EAGC;;AAED;EACC;;;AAKH;AACA;EACC;EACA;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAED;EACC;EACA;;AACA;EACC;;;AAQL;AACA;EACC;EACA;EACA;EACA;EACA;EACA;AAiHA;;AAhHA;AACC;;AACA;EACC;EACA;;AAGF;EAEC;;AAED;AACC;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QA1rBe;AA2rBf;AAoDA;AASA;AAaA;;AAzEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;AASA;;AAPA;EACC;AACA;;AACA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;EAEA;EACA;EACA;EACA;AACA;AAAA;AAQA;AAAA;;AANA;EACC;;AAED;EACC,cAnDa;;AAuDd;EACC;EACA;EACA;;AAKH;EACC;EACA;EACA;AAAY;EACZ;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA,cAhFe;AAiFf;EACA;;AAGD;EACC;EACA;EACA;EACA;AACA;EACA;EACA;AACA;EACA;AACA;EACA;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAiBA;AAAA;AAAA;;AAhBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAMA;EACC;EACA;;AAGF;EACC;;AAED;EACC;;AAIA;EACC;;;AAQN;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEC;EACC;;AAED;EACC;;AAGF;EACC;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;;AAIF;AACA;EACC;IAEC;;EAED;IAEC;;EAED;IAGC;;EAED;IAEC;;;AAGF;EACC;EACA;EACA;;;AAKD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC","file":"inputs.css"} \ No newline at end of file
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
index 4d444df8f62..0b7204ab78e 100644
--- a/core/css/inputs.scss
+++ b/core/css/inputs.scss
@@ -255,7 +255,7 @@ select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
- background: var(--icon-triangle-s-000) no-repeat right 4px center;
+ background: var(--icon-triangle-s-dark) no-repeat right 4px center;
background-color: inherit;
outline: 0;
padding-right: 24px !important;
@@ -332,8 +332,6 @@ select,
/* Radio & Checkboxes */
$checkbox-radio-size: 14px;
-$color-checkbox-radio-disabled: nc-darken(variables.$color-main-background, 27%);
-$color-checkbox-radio-border: nc-darken(variables.$color-main-background, 47%);
$color-checkbox-radio-white: #fff;
input {
@@ -362,7 +360,7 @@ input {
vertical-align: middle;
border-radius: 50%;
margin: 0 6px 3px 3px;
- border: 1px solid $color-checkbox-radio-border;
+ border: 1px solid var(--color-text-lighter);
}
&:not(:disabled):not(:checked) + label:hover:before,
&:focus + label:before {
@@ -383,11 +381,11 @@ input {
border-color: var(--color-primary-element);
}
&:disabled + label:before {
- border: 1px solid $color-checkbox-radio-border;
- background-color: $color-checkbox-radio-disabled !important; /* override other status */
+ border: 1px solid var(--color-text-lighter);
+ background-color: var(--color-text-maxcontrast) !important; /* override other status */
}
&:checked:disabled + label:before {
- background-color: $color-checkbox-radio-disabled;
+ background-color: var(--color-text-maxcontrast);
}
// Detail description below label of checkbox or radio button
@@ -415,7 +413,7 @@ input {
}
}
- /* We do not use the nc-darken function as this is not supposed to be changed */
+ /* We do not use the variables as we keep the colours as white for this variant */
&.radio--white,
&.checkbox--white {
+ label:before,
@@ -474,7 +472,7 @@ div.select2-drop {
}
.select2-search input {
min-height: auto;
- background: var(--icon-search-000) no-repeat right center !important;
+ background: var(--icon-search-dark) no-repeat right center !important;
background-origin: content-box !important;
}
.select2-results {
@@ -601,7 +599,7 @@ div.select2-container {
border-radius: 0;
border: none;
b {
- background: var(--icon-triangle-s-000) no-repeat center !important;
+ background: var(--icon-triangle-s-dark) no-repeat center !important;
opacity: .5;
}
}
@@ -666,7 +664,7 @@ div.select2-container {
color: inherit !important;
&::before {
content: ' ';
- background-image: var(--icon-checkmark-000);
+ background-image: var(--icon-checkmark-dark);
background-repeat: no-repeat;
background-position: center;
min-width: 16px;
@@ -856,7 +854,7 @@ div.select2-container {
/* selected checkmark icon */
&::before {
content: ' ';
- background-image: var(--icon-checkmark-000);
+ background-image: var(--icon-checkmark-dark);
background-repeat: no-repeat;
background-position: center;
min-width: 16px;
@@ -875,7 +873,7 @@ div.select2-container {
*/
&[data-select='create'] {
&::before {
- background-image: var(--icon-add-000);
+ background-image: var(--icon-add-dark);
visibility: visible;
}
}
diff --git a/core/css/mobile.css b/core/css/mobile.css
new file mode 100644
index 00000000000..0cc41788b7a
--- /dev/null
+++ b/core/css/mobile.css
@@ -0,0 +1,198 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+@media only screen and (max-width: 1024px) {
+ /* position share dropdown */
+ #dropdown {
+ margin-right: 10% !important;
+ width: 80% !important;
+ }
+
+ /* fix name autocomplete not showing on mobile */
+ .ui-autocomplete {
+ z-index: 1000 !important;
+ }
+
+ /* fix error display on smaller screens */
+ .error-wide {
+ width: 100%;
+ margin-left: 0 !important;
+ box-sizing: border-box;
+ }
+
+ /* APP SIDEBAR TOGGLE and SWIPE ----------------------------------------------*/
+ #app-navigation {
+ transform: translateX(-300px);
+ }
+
+ .snapjs-left #app-navigation {
+ transform: translateX(0);
+ }
+
+ #app-navigation:not(.hidden) + #app-content {
+ margin-left: 0;
+ }
+
+ .skip-navigation.skip-content {
+ left: 3px;
+ margin-left: 0;
+ }
+
+ /* full width for message list on mobile */
+ .app-content-list {
+ background: var(--color-main-background);
+ flex: 1 1 100%;
+ max-height: unset;
+ max-width: 100%;
+ }
+ .app-content-list + .app-content-details {
+ display: none;
+ }
+ .app-content-list.showdetails {
+ display: none;
+ }
+ .app-content-list.showdetails + .app-content-details {
+ display: initial;
+ }
+
+ /* Show app details page */
+ #app-content.showdetails #app-navigation-toggle {
+ transform: translateX(-44px);
+ }
+ #app-content.showdetails #app-navigation-toggle-back {
+ position: fixed;
+ display: inline-block !important;
+ top: 50px;
+ left: 0;
+ width: 44px;
+ height: 44px;
+ z-index: 1050;
+ background-color: rgba(255, 255, 255, 0.7);
+ cursor: pointer;
+ opacity: 0.6;
+ transform: rotate(90deg);
+ }
+ #app-content.showdetails .app-content-list {
+ transform: translateX(-100%);
+ }
+
+ #app-navigation-toggle {
+ position: fixed;
+ display: inline-block !important;
+ left: 0;
+ width: 44px;
+ height: 44px;
+ z-index: 1050;
+ cursor: pointer;
+ opacity: 0.6;
+ }
+
+ #app-navigation-toggle:hover,
+#app-navigation-toggle:focus {
+ opacity: 1;
+ }
+
+ /* position controls for apps with app-navigation */
+ #app-navigation + #app-content #controls {
+ padding-left: 44px;
+ }
+
+ /* .viewer-mode is when text editor, PDF viewer, etc is open */
+ #body-user .app-files.viewer-mode #controls {
+ padding-left: 0 !important;
+ }
+
+ .app-files.viewer-mode #app-navigation-toggle {
+ display: none !important;
+ }
+
+ table.multiselect thead {
+ left: 0 !important;
+ }
+
+ /* prevent overflow in user management controls bar */
+ #usersearchform {
+ display: none;
+ }
+
+ #body-settings #controls {
+ min-width: 1024px !important;
+ }
+
+ /* do not show dates in filepicker */
+ #oc-dialog-filepicker-content .filelist #headerSize,
+#oc-dialog-filepicker-content .filelist #headerDate,
+#oc-dialog-filepicker-content .filelist .filesize,
+#oc-dialog-filepicker-content .filelist .date {
+ display: none;
+ }
+
+ #oc-dialog-filepicker-content .filelist .filename {
+ max-width: 100%;
+ }
+
+ .snapjs-left table.multiselect thead {
+ top: 44px;
+ }
+
+ /* end of media query */
+}
+@media only screen and (max-width: 480px) {
+ #header .header-right > div > .menu {
+ max-width: calc(100vw - 10px);
+ position: fixed;
+ }
+ #header .header-right > div > .menu::after {
+ display: none !important;
+ }
+
+ /* Arrow directly child of menutoggle */
+ #header .header-right > div {
+ /* settings need a different offset, since they have a right padding */
+ }
+ #header .header-right > div.openedMenu::after {
+ display: block;
+ }
+ #header .header-right > div::after {
+ border: 10px solid transparent;
+ border-bottom-color: var(--color-main-background);
+ bottom: 0;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ right: 15px;
+ z-index: 2001;
+ display: none;
+ }
+ #header .header-right > div#settings::after {
+ right: 27px;
+ }
+
+ #notification-container {
+ max-width: 100%;
+ width: 100%;
+ }
+}
+
+/*# sourceMappingURL=mobile.css.map */
diff --git a/core/css/mobile.css.map b/core/css/mobile.css.map
new file mode 100644
index 00000000000..5601256135d
--- /dev/null
+++ b/core/css/mobile.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;AAEC;EACA;IACC;IACA;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAGD;EACA;IACC;;;EAGA;IACC;;;EAIF;IACC;;;EAGD;IACC;IACA;;;AAGD;EACA;IACC;IACA;IAEA;IAEA;;EACA;IACC;;EAED;IACC;;EACA;IACC;;;AAKH;EAEC;IACC;;EAED;IACC;IACA;IACA,KDuCa;ICtCb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAED;IACC;;;EAKF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;EAED;AAAA;IAEC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;;AAGD;EACC;IACC;IACA;;EACA;IACC;;;AAGF;EACA;AAoBC;;EAlBC;IACC;;EAGF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAID;IACC;;;EAIF;IACC;IACA","file":"mobile.css"} \ No newline at end of file
diff --git a/core/css/public.css b/core/css/public.css
new file mode 100644
index 00000000000..a936d0c4152
--- /dev/null
+++ b/core/css/public.css
@@ -0,0 +1,72 @@
+#body-public {
+ /** don't apply content header padding on the base layout */
+ /* force layout to make sure the content element's height matches its contents' height */
+ /* public footer */
+}
+#body-public .header-right #header-primary-action a {
+ color: var(--color-primary-text);
+}
+#body-public .header-right #header-secondary-action ul li {
+ min-width: 270px;
+}
+#body-public .header-right #header-secondary-action #header-actions-toggle {
+ background-color: transparent;
+ border-color: transparent;
+}
+#body-public .header-right #header-secondary-action #header-actions-toggle:hover, #body-public .header-right #header-secondary-action #header-actions-toggle:focus, #body-public .header-right #header-secondary-action #header-actions-toggle:active {
+ opacity: 1;
+}
+#body-public .header-right #header-secondary-action #external-share-menu-item form {
+ display: flex;
+}
+#body-public .header-right #header-secondary-action #external-share-menu-item .hidden {
+ display: none;
+}
+#body-public .header-right #header-secondary-action #external-share-menu-item #save-button-confirm {
+ flex-grow: 0;
+}
+#body-public #content {
+ min-height: calc(100% - 65px);
+}
+#body-public.layout-base #content {
+ padding-top: 0;
+}
+#body-public .ie #content {
+ display: inline-block;
+}
+#body-public p.info {
+ margin: 20px auto;
+ text-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+#body-public p.info, #body-public form fieldset legend,
+#body-public #datadirContent label,
+#body-public form fieldset .warning-info,
+#body-public form input[type=checkbox] + label {
+ text-align: center;
+}
+#body-public footer {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 65px;
+ flex-direction: column;
+}
+#body-public footer p {
+ text-align: center;
+ color: var(--color-text-lighter);
+}
+#body-public footer p a {
+ color: var(--color-text-lighter);
+ font-weight: bold;
+ white-space: nowrap;
+ /* increasing clickability to more than the text height */
+ padding: 10px;
+ margin: -10px;
+ line-height: 200%;
+}
+
+/*# sourceMappingURL=public.css.map */
diff --git a/core/css/public.css.map b/core/css/public.css.map
new file mode 100644
index 00000000000..e3229512ffa
--- /dev/null
+++ b/core/css/public.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["public.scss"],"names":[],"mappings":"AAEA;AAyCC;AAKA;AAoBA;;AA/DC;EACC;;AAIA;EACC;;AAED;EACC;EACA;;AAEA;EAGC;;AAID;EACC;;AAED;EACC;;AAED;EACC;;AAMJ;EAEC;;AAKD;EACC;;AAID;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;EAIC;;AAID;EACC;EACA;EACA;EACA;EACA,QA1Ec;EA2Ed;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;AACA;EACA;EACA;EACA","file":"public.css"} \ No newline at end of file
diff --git a/core/css/server.css b/core/css/server.css
new file mode 100644
index 00000000000..beb10cd1e73
--- /dev/null
+++ b/core/css/server.css
@@ -0,0 +1,5178 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+@import url("../../dist/icons.css");
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016, Raghu Nayyar <hey@raghunayyar.com>
+ * @copyright Copyright (c) 2011-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2019-2020, Gary Kim <gary@garykim.dev>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+ cursor: default;
+ scrollbar-color: var(--color-border-dark) transparent;
+ scrollbar-width: thin;
+}
+
+html, body {
+ height: 100%;
+}
+
+article, aside, dialog, figure, footer, header, hgroup, nav, section {
+ display: block;
+}
+
+body {
+ line-height: 1.5;
+}
+
+table {
+ border-collapse: separate;
+ border-spacing: 0;
+ white-space: nowrap;
+}
+
+caption, th, td {
+ text-align: left;
+ font-weight: normal;
+}
+
+table, td, th {
+ vertical-align: middle;
+}
+
+a {
+ border: 0;
+ color: var(--color-main-text);
+ text-decoration: none;
+ cursor: pointer;
+}
+a * {
+ cursor: pointer;
+}
+
+a.external {
+ margin: 0 3px;
+ text-decoration: underline;
+}
+
+input {
+ cursor: pointer;
+}
+input * {
+ cursor: pointer;
+}
+
+select, .button span, label {
+ cursor: pointer;
+}
+
+ul {
+ list-style: none;
+}
+
+body {
+ background-color: var(--color-main-background);
+ font-weight: normal;
+ /* bring the default font size up to 15px */
+ font-size: var(--default-font-size);
+ line-height: var(--default-line-height);
+ font-family: var(--font-face);
+ color: var(--color-main-text);
+}
+
+.two-factor-header {
+ text-align: center;
+}
+
+.two-factor-provider {
+ text-align: center;
+ width: 258px !important;
+ display: inline-block;
+ margin-bottom: 0 !important;
+ background-color: var(--color-background-darker) !important;
+ border: none !important;
+}
+
+.two-factor-link {
+ display: inline-block;
+ padding: 12px;
+ color: var(--color-text-lighter);
+}
+
+.float-spinner {
+ height: 32px;
+ display: none;
+}
+
+#nojavascript {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 9000;
+ text-align: center;
+ background-color: var(--color-background-darker);
+ color: var(--color-primary-text);
+ line-height: 125%;
+ font-size: 24px;
+}
+#nojavascript div {
+ display: block;
+ position: relative;
+ width: 50%;
+ top: 35%;
+ margin: 0px auto;
+}
+#nojavascript a {
+ color: var(--color-primary-text);
+ border-bottom: 2px dotted var(--color-main-background);
+}
+#nojavascript a:hover, #nojavascript a:focus {
+ color: var(--color-primary-text-dark);
+}
+
+/* SCROLLING */
+::-webkit-scrollbar {
+ width: 12px;
+ height: 12px;
+}
+
+::-webkit-scrollbar-track-piece {
+ background-color: transparent;
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--color-border-dark);
+ border-radius: var(--border-radius-large);
+ border: 2px solid transparent;
+ background-clip: content-box;
+}
+
+/* SELECTION */
+::selection {
+ background-color: var(--color-primary-element);
+ color: var(--color-primary-text);
+}
+
+/* CONTENT ------------------------------------------------------------------ */
+#controls {
+ box-sizing: border-box;
+ position: -webkit-sticky;
+ position: sticky;
+ height: 44px;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-main-background-translucent);
+ z-index: 62;
+ /* must be above the filelist sticky header and texteditor menubar */
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ display: flex;
+ top: 50px;
+}
+
+/* position controls for apps with app-navigation */
+.viewer-mode #app-navigation + #app-content #controls {
+ left: 0;
+}
+
+#app-navigation * {
+ box-sizing: border-box;
+}
+
+#controls .actions > div > .button, #controls .actions > div button, #controls .actions > .button, #controls .actions button {
+ box-sizing: border-box;
+ display: inline-block;
+ display: flex;
+ height: 36px;
+ width: 36px;
+ padding: 9px;
+ align-items: center;
+ justify-content: center;
+}
+#controls .actions > div .button.hidden, #controls .actions .button.hidden {
+ display: none;
+}
+
+/* EMPTY CONTENT DISPLAY ------------------------------------------------------------ */
+#emptycontent,
+.emptycontent {
+ color: var(--color-text-maxcontrast);
+ text-align: center;
+ margin-top: 30vh;
+ width: 100%;
+}
+#app-sidebar #emptycontent,
+#app-sidebar .emptycontent {
+ margin-top: 10vh;
+}
+#emptycontent .emptycontent-search,
+.emptycontent .emptycontent-search {
+ position: static;
+}
+#emptycontent h2,
+.emptycontent h2 {
+ margin-bottom: 10px;
+}
+#emptycontent [class^=icon-],
+#emptycontent [class*=icon-],
+.emptycontent [class^=icon-],
+.emptycontent [class*=icon-] {
+ background-size: 64px;
+ height: 64px;
+ width: 64px;
+ margin: 0 auto 15px;
+}
+#emptycontent [class^=icon-]:not([class^=icon-loading]), #emptycontent [class^=icon-]:not([class*=icon-loading]),
+#emptycontent [class*=icon-]:not([class^=icon-loading]),
+#emptycontent [class*=icon-]:not([class*=icon-loading]),
+.emptycontent [class^=icon-]:not([class^=icon-loading]),
+.emptycontent [class^=icon-]:not([class*=icon-loading]),
+.emptycontent [class*=icon-]:not([class^=icon-loading]),
+.emptycontent [class*=icon-]:not([class*=icon-loading]) {
+ opacity: 0.4;
+}
+
+/* LOG IN & INSTALLATION ------------------------------------------------------------ */
+#datadirContent label {
+ width: 100%;
+}
+
+/* strengthify wrapper */
+/* General new input field look */
+/* Nicely grouping input field sets */
+.grouptop, .groupmiddle, .groupbottom {
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* Show password toggle */
+#show, #dbpassword {
+ position: absolute;
+ right: 1em;
+ top: 0.8em;
+ float: right;
+}
+
+#show + label, #dbpassword + label {
+ right: 21px;
+ top: 15px !important;
+ margin: -14px !important;
+ padding: 14px !important;
+}
+
+#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label {
+ opacity: 0.8;
+}
+
+#show + label, #dbpassword + label, #personal-show + label {
+ position: absolute !important;
+ height: 20px;
+ width: 24px;
+ background-image: var(--icon-toggle-dark);
+ background-repeat: no-repeat;
+ background-position: center;
+ opacity: 0.3;
+}
+
+/* Feedback for keyboard focus and mouse hover */
+#show:focus + label,
+#dbpassword:focus + label,
+#personal-show:focus + label {
+ opacity: 1;
+}
+#show + label:hover,
+#dbpassword + label:hover,
+#personal-show + label:hover {
+ opacity: 1;
+}
+
+#show + label:before, #dbpassword + label:before, #personal-show + label:before {
+ display: none;
+}
+
+#pass2, input[name=personal-password-clone] {
+ padding-right: 30px;
+}
+
+.personal-show-container {
+ position: relative;
+ display: inline-block;
+ margin-right: 6px;
+}
+
+#personal-show + label {
+ display: block;
+ right: 0;
+ margin-top: -43px;
+ margin-right: -4px;
+ padding: 22px;
+}
+
+/* Warnings and errors are the same */
+#body-user .warning, #body-settings .warning {
+ margin-top: 8px;
+ padding: 5px;
+ border-radius: var(--border-radius);
+ color: var(--color-primary-text);
+ background-color: var(--color-warning);
+}
+
+.warning legend, .warning a {
+ color: var(--color-primary-text) !important;
+ font-weight: bold !important;
+}
+
+.error:not(.toastify) a {
+ color: white !important;
+ font-weight: bold !important;
+}
+.error:not(.toastify) a.button {
+ color: var(--color-text-lighter) !important;
+ display: inline-block;
+ text-align: center;
+}
+.error:not(.toastify) pre {
+ white-space: pre-wrap;
+ text-align: left;
+}
+
+.error-wide {
+ width: 700px;
+ margin-left: -200px !important;
+}
+.error-wide .button {
+ color: black !important;
+}
+
+.warning-input {
+ border-color: var(--color-error) !important;
+}
+
+/* fixes for update page TODO should be fixed some time in a proper way */
+/* this is just for an error while updating the Nextcloud instance */
+/* Sticky footer */
+/* round profile photos */
+.avatar, .avatardiv {
+ border-radius: 50%;
+ flex-shrink: 0;
+}
+.avatar > img, .avatardiv > img {
+ border-radius: 50%;
+ flex-shrink: 0;
+}
+
+td.avatar {
+ border-radius: 0;
+}
+
+#notification-container {
+ left: 50%;
+ max-width: 60%;
+ position: fixed;
+ top: 0;
+ text-align: center;
+ transform: translateX(-50%);
+ z-index: 8000;
+}
+
+#notification {
+ margin: 0 auto;
+ z-index: 8000;
+ background-color: var(--color-main-background);
+ border: 0;
+ padding: 1px 8px;
+ display: none;
+ position: relative;
+ top: 0;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+ opacity: 0.9;
+ overflow-x: hidden;
+ overflow-y: auto;
+ max-height: 100px;
+}
+#notification span {
+ cursor: pointer;
+ margin-left: 1em;
+}
+#notification .row {
+ position: relative;
+}
+#notification .row .close {
+ display: inline-block;
+ vertical-align: middle;
+ position: absolute;
+ right: 0;
+ top: 0;
+ margin-top: 2px;
+}
+#notification .row.closeable {
+ padding-right: 20px;
+}
+
+tr .action:not(.permanent), .selectedActions > a {
+ opacity: 0;
+}
+
+tr:hover .action:not(.menuitem), tr:focus .action:not(.menuitem),
+tr .action.permanent:not(.menuitem) {
+ opacity: 0.5;
+}
+
+.selectedActions > a {
+ opacity: 0.5;
+ position: relative;
+ top: 2px;
+}
+.selectedActions > a:hover, .selectedActions > a:focus {
+ opacity: 1;
+}
+
+tr .action {
+ width: 16px;
+ height: 16px;
+}
+
+.header-action {
+ opacity: 0.8;
+}
+
+tr:hover .action:hover, tr:focus .action:focus {
+ opacity: 1;
+}
+
+.selectedActions a:hover, .selectedActions a:focus {
+ opacity: 1;
+}
+
+.header-action:hover, .header-action:focus {
+ opacity: 1;
+}
+
+tbody tr:hover, tbody tr:focus, tbody tr:active {
+ background-color: var(--color-background-dark);
+}
+
+code {
+ font-family: "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace;
+}
+
+.pager {
+ list-style: none;
+ float: right;
+ display: inline;
+ margin: 0.7em 13em 0 0;
+}
+.pager li {
+ display: inline-block;
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ui-icon-circle-triangle-e {
+ background-image: url("../img/actions/play-next.svg?v=1");
+}
+
+.ui-icon-circle-triangle-w {
+ background-image: url("../img/actions/play-previous.svg?v=1");
+}
+
+/* ---- jQuery UI datepicker ---- */
+.ui-widget.ui-datepicker {
+ margin-top: 10px;
+ padding: 4px 8px;
+ width: auto;
+ border-radius: var(--border-radius);
+ border: none;
+ z-index: 1600 !important;
+}
+.ui-widget.ui-datepicker .ui-state-default,
+.ui-widget.ui-datepicker .ui-widget-content .ui-state-default,
+.ui-widget.ui-datepicker .ui-widget-header .ui-state-default {
+ border: 1px solid transparent;
+ background: inherit;
+}
+.ui-widget.ui-datepicker .ui-widget-header {
+ padding: 7px;
+ font-size: 13px;
+ border: none;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-datepicker-title {
+ line-height: 1;
+ font-weight: normal;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-icon {
+ opacity: 0.5;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e {
+ background: url("../img/actions/arrow-right.svg") center center no-repeat;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w {
+ background: url("../img/actions/arrow-left.svg") center center no-repeat;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-state-hover .ui-icon {
+ opacity: 1;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar th {
+ font-weight: normal;
+ color: var(--color-text-lighter);
+ opacity: 0.8;
+ width: 26px;
+ padding: 2px;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr:hover {
+ background-color: inherit;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-today a:not(.ui-state-hover) {
+ background-color: var(--color-background-darker);
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-current-day a.ui-state-active,
+.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-hover,
+.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-focus {
+ background-color: var(--color-primary);
+ color: var(--color-primary-text);
+ font-weight: bold;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-week-end:not(.ui-state-disabled) :not(.ui-state-hover),
+.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-priority-secondary:not(.ui-state-hover) {
+ color: var(--color-text-lighter);
+ opacity: 0.8;
+}
+
+.ui-datepicker-prev, .ui-datepicker-next {
+ border: var(--color-border-dark);
+ background: var(--color-main-background);
+}
+
+/* ---- jQuery UI timepicker ---- */
+.ui-widget.ui-timepicker {
+ margin-top: 10px !important;
+ width: auto !important;
+ border-radius: var(--border-radius);
+ z-index: 1600 !important;
+ /* AM/PM fix */
+}
+.ui-widget.ui-timepicker .ui-widget-content {
+ border: none !important;
+}
+.ui-widget.ui-timepicker .ui-state-default,
+.ui-widget.ui-timepicker .ui-widget-content .ui-state-default,
+.ui-widget.ui-timepicker .ui-widget-header .ui-state-default {
+ border: 1px solid transparent;
+ background: inherit;
+}
+.ui-widget.ui-timepicker .ui-widget-header {
+ padding: 7px;
+ font-size: 13px;
+ border: none;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+}
+.ui-widget.ui-timepicker .ui-widget-header .ui-timepicker-title {
+ line-height: 1;
+ font-weight: normal;
+}
+.ui-widget.ui-timepicker table.ui-timepicker tr .ui-timepicker-hour-cell:first-child {
+ margin-left: 30px;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table th {
+ font-weight: normal;
+ color: var(--color-text-lighter);
+ opacity: 0.8;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table th.periods {
+ padding: 0;
+ width: 30px;
+ line-height: 30px;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table tr:hover {
+ background-color: inherit;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hour-cell a.ui-state-active, .ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minute-cell a.ui-state-active,
+.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-hover,
+.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-focus {
+ background-color: var(--color-primary);
+ color: var(--color-primary-text);
+ font-weight: bold;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minutes:not(.ui-state-hover) {
+ color: var(--color-text-lighter);
+}
+.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hours {
+ border-right: 1px solid var(--color-border);
+}
+
+/* ---- jQuery UI datepicker & timepicker global rules ---- */
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr,
+.ui-widget.ui-timepicker table.ui-timepicker tr {
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr td,
+.ui-widget.ui-timepicker table.ui-timepicker tr td {
+ flex: 1 1 auto;
+ margin: 0;
+ padding: 2px;
+ height: 26px;
+ width: 26px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr td > *,
+.ui-widget.ui-timepicker table.ui-timepicker tr td > * {
+ border-radius: 50%;
+ text-align: center;
+ font-weight: normal;
+ color: var(--color-main-text);
+ display: block;
+ line-height: 18px;
+ width: 18px;
+ height: 18px;
+ padding: 3px;
+ font-size: 0.9em;
+}
+
+/* ---- DIALOGS ---- */
+#oc-dialog-filepicker-content {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ /* Grid view toggle */
+}
+#oc-dialog-filepicker-content .dirtree {
+ flex-wrap: wrap;
+ box-sizing: border-box;
+ padding-right: 140px;
+}
+#oc-dialog-filepicker-content .dirtree div:first-child a {
+ background-image: var(--icon-home-dark);
+ background-repeat: no-repeat;
+ background-position: left center;
+}
+#oc-dialog-filepicker-content .dirtree span:not(:last-child) {
+ cursor: pointer;
+}
+#oc-dialog-filepicker-content .dirtree span:last-child {
+ font-weight: bold;
+}
+#oc-dialog-filepicker-content .dirtree span:not(:last-child)::after {
+ content: ">";
+ padding: 3px;
+}
+#oc-dialog-filepicker-content #picker-view-toggle {
+ position: absolute;
+ background-color: transparent;
+ border: none;
+ margin: 0;
+ padding: 22px;
+ opacity: 0.5;
+ right: 0;
+ top: 0;
+}
+#oc-dialog-filepicker-content #picker-view-toggle:hover, #oc-dialog-filepicker-content #picker-view-toggle:focus {
+ opacity: 1;
+}
+#oc-dialog-filepicker-content #picker-showgridview:focus + #picker-view-toggle {
+ opacity: 1;
+}
+#oc-dialog-filepicker-content .actions.creatable {
+ flex-wrap: wrap;
+ padding: 0px;
+ box-sizing: border-box;
+ display: inline-flex;
+ float: none;
+ max-height: 36px;
+ max-width: 36px;
+ background-color: var(--color-background-dark);
+ border: 1px solid var(--color-border-dark);
+ border-radius: var(--border-radius-pill);
+ position: relative;
+ left: 15px;
+ top: 3px;
+ order: 1;
+}
+#oc-dialog-filepicker-content .actions.creatable .icon.icon-add {
+ background-image: var(--icon-add-dark);
+ background-size: 16px 16px;
+ width: 34px;
+ height: 34px;
+ margin: 0px;
+ opacity: 0.5;
+}
+#oc-dialog-filepicker-content .actions.creatable a {
+ width: 36px;
+ padding: 0px;
+ position: static;
+}
+#oc-dialog-filepicker-content .actions.creatable .menu {
+ top: 100%;
+ margin-top: 10px;
+}
+#oc-dialog-filepicker-content .actions.creatable .menu form {
+ display: flex;
+ margin: 10px;
+}
+#oc-dialog-filepicker-content .filelist-container {
+ box-sizing: border-box;
+ display: inline-block;
+ overflow-y: auto;
+ flex: 1;
+ /*height: 100%;*/
+ /* overflow under the button row */
+ width: 100%;
+ overflow-x: hidden;
+}
+#oc-dialog-filepicker-content .emptycontent {
+ color: var(--color-text-maxcontrast);
+ text-align: center;
+ margin-top: 80px;
+ width: 100%;
+ display: none;
+}
+#oc-dialog-filepicker-content .filelist {
+ background-color: var(--color-main-background);
+ width: 100%;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist {
+ /* prevent the filepicker to overflow */
+ min-width: initial;
+ margin-bottom: 50px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist thead tr {
+ border-bottom: 1px solid var(--color-border);
+ background-color: var(--color-main-background);
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist thead tr th {
+ width: 80%;
+ border: none;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle {
+ display: block;
+ padding: 15px;
+ height: 50px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ vertical-align: middle;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle.name {
+ padding-left: 5px;
+ margin-left: 50px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th .sort-indicator {
+ width: 10px;
+ height: 8px;
+ margin-left: 5px;
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.3;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .sort-indicator.hidden,
+#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden,
+#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden {
+ visibility: hidden;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden,
+#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden {
+ visibility: visible;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist td {
+ padding: 14px;
+ border-bottom: 1px solid var(--color-border);
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist tr:last-child td {
+ border-bottom: none;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background-size: 32px;
+ background-repeat: no-repeat;
+ padding-left: 51px;
+ background-position: 7px 7px;
+ cursor: pointer;
+ max-width: 0;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts {
+ display: flex;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__first {
+ overflow: hidden;
+ white-space: pre;
+ text-overflow: ellipsis;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__last {
+ white-space: pre;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filesize, #oc-dialog-filepicker-content #picker-filestable.filelist .date {
+ width: 80px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filesize {
+ text-align: right;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid {
+ display: flex;
+ flex-direction: column;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 120px);
+ justify-content: space-around;
+ row-gap: 15px;
+ margin: 15px 0;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr {
+ display: block;
+ position: relative;
+ border-radius: var(--border-radius);
+ padding: 10px;
+ display: flex;
+ flex-direction: column;
+ width: 100px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td {
+ border: none;
+ padding: 0;
+ text-align: center;
+ border-radius: var(--border-radius);
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename {
+ padding: 100px 0 0 0;
+ background-position: center top;
+ background-size: contain;
+ line-height: 30px;
+ max-width: none;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename .filename-parts {
+ justify-content: center;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filesize {
+ line-height: 10px;
+ width: 100%;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.date {
+ display: none;
+}
+#oc-dialog-filepicker-content .filepicker_element_selected {
+ background-color: var(--color-background-darker);
+}
+
+.ui-dialog {
+ position: fixed !important;
+}
+
+span.ui-icon {
+ float: left;
+ margin: 3px 7px 30px 0;
+}
+
+/* ---- CONTACTS MENU ---- */
+#contactsmenu .menutoggle {
+ background-size: 20px 20px;
+ padding: 14px;
+ cursor: pointer;
+ background-image: var(--original-icon-contacts-white);
+ filter: var(--primary-invert-if-bright);
+}
+#contactsmenu .menutoggle:hover, #contactsmenu .menutoggle:focus, #contactsmenu .menutoggle:active {
+ opacity: 1 !important;
+}
+
+#header .header-right > div#contactsmenu > .menu {
+ /* show 2.5 to 4.5 entries depending on the screen height */
+ height: calc(100vh - 150px);
+ max-height: 275px;
+ min-height: 175px;
+ width: 350px;
+}
+#header .header-right > div#contactsmenu > .menu .emptycontent {
+ margin-top: 5vh !important;
+ margin-bottom: 2vh;
+}
+#header .header-right > div#contactsmenu > .menu .emptycontent .icon-loading,
+#header .header-right > div#contactsmenu > .menu .emptycontent .icon-search {
+ display: inline-block;
+}
+#header .header-right > div#contactsmenu > .menu .content {
+ /* fixed max height of the parent container without the search input */
+ height: calc(100vh - 150px - 50px);
+ max-height: 225px;
+ min-height: 125px;
+ overflow-y: auto;
+}
+#header .header-right > div#contactsmenu > .menu .content .footer {
+ text-align: center;
+}
+#header .header-right > div#contactsmenu > .menu .content .footer a {
+ display: block;
+ width: 100%;
+ padding: 12px 0;
+ opacity: 0.5;
+}
+#header .header-right > div#contactsmenu > .menu .contact {
+ display: flex;
+ position: relative;
+ align-items: center;
+ padding: 3px 3px 3px 10px;
+ border-bottom: 1px solid var(--color-border);
+ /* actions menu */
+}
+#header .header-right > div#contactsmenu > .menu .contact :last-of-type {
+ border-bottom: none;
+}
+#header .header-right > div#contactsmenu > .menu .contact .avatar {
+ height: 32px;
+ width: 32px;
+ display: inline-block;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body {
+ flex-grow: 1;
+ padding-left: 8px;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body div {
+ position: relative;
+ width: 100%;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body .full-name, #header .header-right > div#contactsmenu > .menu .contact .body .last-message {
+ /* TODO: don't use fixed width */
+ max-width: 204px;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body .last-message {
+ opacity: 0.5;
+}
+#header .header-right > div#contactsmenu > .menu .contact .top-action, #header .header-right > div#contactsmenu > .menu .contact .second-action, #header .header-right > div#contactsmenu > .menu .contact .other-actions {
+ width: 16px;
+ height: 16px;
+ padding: 14px;
+ opacity: 0.5;
+ cursor: pointer;
+}
+#header .header-right > div#contactsmenu > .menu .contact .top-action :hover, #header .header-right > div#contactsmenu > .menu .contact .second-action :hover, #header .header-right > div#contactsmenu > .menu .contact .other-actions :hover {
+ opacity: 1;
+}
+#header .header-right > div#contactsmenu > .menu .contact .menu {
+ top: 47px;
+ margin-right: 13px;
+}
+#header .header-right > div#contactsmenu > .menu .contact .popovermenu::after {
+ right: 2px;
+}
+
+#contactsmenu-search {
+ width: calc(100% - 16px);
+ margin: 8px;
+ height: 34px;
+}
+
+/* ---- TOOLTIPS ---- */
+.extra-data {
+ padding-right: 5px !important;
+}
+
+/* ---- TAGS ---- */
+#tagsdialog .content {
+ width: 100%;
+ height: 280px;
+}
+#tagsdialog .scrollarea {
+ overflow: auto;
+ border: 1px solid var(--color-background-darker);
+ width: 100%;
+ height: 240px;
+}
+#tagsdialog .bottombuttons {
+ width: 100%;
+ height: 30px;
+}
+#tagsdialog .bottombuttons * {
+ float: left;
+}
+#tagsdialog .taglist li {
+ background: var(--color-background-dark);
+ padding: 0.3em 0.8em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-transition: background-color 500ms;
+ transition: background-color 500ms;
+}
+#tagsdialog .taglist li:hover, #tagsdialog .taglist li:active {
+ background: var(--color-background-darker);
+}
+#tagsdialog .addinput {
+ width: 90%;
+ clear: both;
+}
+
+/* ---- BREADCRUMB ---- */
+.breadcrumb {
+ display: inline-flex;
+}
+
+div.crumb {
+ display: inline-flex;
+ background-image: url("../img/breadcrumb.svg?v=1");
+ background-repeat: no-repeat;
+ background-position: right center;
+ height: 44px;
+ background-size: auto 24px;
+ flex: 0 0 auto;
+ order: 1;
+ padding-right: 7px;
+}
+div.crumb.crumbmenu {
+ order: 2;
+ position: relative;
+}
+div.crumb.crumbmenu a {
+ opacity: 0.5;
+}
+div.crumb.crumbmenu.canDropChildren .popovermenu, div.crumb.crumbmenu.canDrop .popovermenu {
+ display: block;
+}
+div.crumb.crumbmenu .popovermenu {
+ top: 100%;
+ margin-right: 3px;
+}
+div.crumb.crumbmenu .popovermenu ul {
+ max-height: 345px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding-right: 5px;
+}
+div.crumb.crumbmenu .popovermenu ul li.canDrop span:first-child {
+ background-image: url("../img/filetypes/folder-drag-accept.svg?v=1") !important;
+}
+div.crumb.crumbmenu .popovermenu .in-breadcrumb {
+ display: none;
+}
+div.crumb.hidden {
+ display: none;
+}
+div.crumb.hidden ~ .crumb {
+ order: 3;
+}
+div.crumb > a,
+div.crumb > span {
+ position: relative;
+ padding: 12px;
+ opacity: 0.5;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ flex: 0 0 auto;
+ max-width: 200px;
+}
+div.crumb > a.icon-home, div.crumb > a.icon-delete,
+div.crumb > span.icon-home,
+div.crumb > span.icon-delete {
+ text-indent: -9999px;
+}
+div.crumb > a[class^=icon-] {
+ padding: 0;
+ width: 44px;
+}
+div.crumb:last-child {
+ font-weight: bold;
+ margin-right: 10px;
+}
+div.crumb:last-child a ~ span {
+ padding-left: 0;
+}
+div.crumb:hover, div.crumb:focus, div.crumb a:focus, div.crumb:active {
+ opacity: 1;
+}
+div.crumb:hover > a,
+div.crumb:hover > span, div.crumb:focus > a,
+div.crumb:focus > span, div.crumb a:focus > a,
+div.crumb a:focus > span, div.crumb:active > a,
+div.crumb:active > span {
+ opacity: 0.7;
+}
+
+/* some feedback for hover/tap on breadcrumbs */
+.appear {
+ opacity: 1;
+ -webkit-transition: opacity 500ms ease 0s;
+ -moz-transition: opacity 500ms ease 0s;
+ -ms-transition: opacity 500ms ease 0s;
+ -o-transition: opacity 500ms ease 0s;
+ transition: opacity 500ms ease 0s;
+}
+.appear.transparent {
+ opacity: 0;
+}
+
+/* LEGACY FIX only - do not use fieldsets for settings */
+fieldset.warning legend, fieldset.update legend {
+ top: 18px;
+ position: relative;
+}
+fieldset.warning legend + p, fieldset.update legend + p {
+ margin-top: 12px;
+}
+
+/* for IE10 */
+@-ms-viewport {
+ width: device-width;
+}
+/* hidden input type=file field */
+.hiddenuploadfield {
+ display: none;
+ width: 0;
+ height: 0;
+ opacity: 0;
+}
+
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Joas Schilling <nickvergessen@owncloud.com>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* Specifically override browser styles */
+input, textarea, select, button, div[contenteditable=true], div[contenteditable=false] {
+ font-family: var(--font-face);
+}
+
+.select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget {
+ font-family: var(--font-face) !important;
+}
+
+/* Simple selector to allow easy overriding */
+select,
+button:not(.button-vue),
+input,
+textarea,
+div[contenteditable=true],
+div[contenteditable=false] {
+ width: 130px;
+ min-height: 34px;
+ box-sizing: border-box;
+}
+
+/**
+ * color-text-lighter normal state
+ * color-text-lighter active state
+ * color-text-maxcontrast disabled state
+ */
+/* Default global values */
+div.select2-drop .select2-search input,
+select,
+button:not(.button-vue), .button,
+input:not([type=range]),
+textarea,
+div[contenteditable=true],
+.pager li a {
+ margin: 3px 3px 3px 0;
+ padding: 7px 6px;
+ font-size: 13px;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ border: 1px solid var(--color-border-dark);
+ outline: none;
+ border-radius: var(--border-radius);
+ cursor: text;
+ /* Primary action button, use sparingly */
+}
+div.select2-drop .select2-search input:not(:disabled):not(.primary):hover, div.select2-drop .select2-search input:not(:disabled):not(.primary):focus, div.select2-drop .select2-search input:not(:disabled):not(.primary).active,
+select:not(:disabled):not(.primary):hover,
+select:not(:disabled):not(.primary):focus,
+select:not(:disabled):not(.primary).active,
+button:not(.button-vue):not(:disabled):not(.primary):hover,
+button:not(.button-vue):not(:disabled):not(.primary):focus,
+button:not(.button-vue):not(:disabled):not(.primary).active, .button:not(:disabled):not(.primary):hover, .button:not(:disabled):not(.primary):focus, .button:not(:disabled):not(.primary).active,
+input:not([type=range]):not(:disabled):not(.primary):hover,
+input:not([type=range]):not(:disabled):not(.primary):focus,
+input:not([type=range]):not(:disabled):not(.primary).active,
+textarea:not(:disabled):not(.primary):hover,
+textarea:not(:disabled):not(.primary):focus,
+textarea:not(:disabled):not(.primary).active,
+div[contenteditable=true]:not(:disabled):not(.primary):hover,
+div[contenteditable=true]:not(:disabled):not(.primary):focus,
+div[contenteditable=true]:not(:disabled):not(.primary).active,
+.pager li a:not(:disabled):not(.primary):hover,
+.pager li a:not(:disabled):not(.primary):focus,
+.pager li a:not(:disabled):not(.primary).active {
+ /* active class used for multiselect */
+ border-color: var(--color-primary-element);
+ outline: none;
+}
+div.select2-drop .select2-search input:not(:disabled):not(.primary):active,
+select:not(:disabled):not(.primary):active,
+button:not(.button-vue):not(:disabled):not(.primary):active, .button:not(:disabled):not(.primary):active,
+input:not([type=range]):not(:disabled):not(.primary):active,
+textarea:not(:disabled):not(.primary):active,
+div[contenteditable=true]:not(:disabled):not(.primary):active,
+.pager li a:not(:disabled):not(.primary):active {
+ outline: none;
+ background-color: var(--color-main-background);
+ color: var(--color-text-light);
+}
+div.select2-drop .select2-search input:disabled,
+select:disabled,
+button:not(.button-vue):disabled, .button:disabled,
+input:not([type=range]):disabled,
+textarea:disabled,
+div[contenteditable=true]:disabled,
+.pager li a:disabled {
+ background-color: var(--color-background-dark);
+ color: var(--color-text-maxcontrast);
+ cursor: default;
+ opacity: 0.5;
+}
+div.select2-drop .select2-search input:required,
+select:required,
+button:not(.button-vue):required, .button:required,
+input:not([type=range]):required,
+textarea:required,
+div[contenteditable=true]:required,
+.pager li a:required {
+ box-shadow: none;
+}
+div.select2-drop .select2-search input:invalid,
+select:invalid,
+button:not(.button-vue):invalid, .button:invalid,
+input:not([type=range]):invalid,
+textarea:invalid,
+div[contenteditable=true]:invalid,
+.pager li a:invalid {
+ box-shadow: none !important;
+ border-color: var(--color-error);
+}
+div.select2-drop .select2-search input.primary,
+select.primary,
+button:not(.button-vue).primary, .button.primary,
+input:not([type=range]).primary,
+textarea.primary,
+div[contenteditable=true].primary,
+.pager li a.primary {
+ background-color: var(--color-primary-element);
+ border-color: var(--color-primary-element);
+ color: var(--color-primary-text);
+ cursor: pointer;
+ /* Apply border to primary button if on log in page (and not in a dark container) or if in header */
+}
+#body-login :not(.body-login-container) div.select2-drop .select2-search input.primary, #header div.select2-drop .select2-search input.primary,
+#body-login :not(.body-login-container) select.primary,
+#header select.primary,
+#body-login :not(.body-login-container) button:not(.button-vue).primary,
+#header button:not(.button-vue).primary, #body-login :not(.body-login-container) .button.primary, #header .button.primary,
+#body-login :not(.body-login-container) input:not([type=range]).primary,
+#header input:not([type=range]).primary,
+#body-login :not(.body-login-container) textarea.primary,
+#header textarea.primary,
+#body-login :not(.body-login-container) div[contenteditable=true].primary,
+#header div[contenteditable=true].primary,
+#body-login :not(.body-login-container) .pager li a.primary,
+#header .pager li a.primary {
+ border-color: var(--color-primary-text);
+}
+div.select2-drop .select2-search input.primary:not(:disabled):hover, div.select2-drop .select2-search input.primary:not(:disabled):focus, div.select2-drop .select2-search input.primary:not(:disabled):active,
+select.primary:not(:disabled):hover,
+select.primary:not(:disabled):focus,
+select.primary:not(:disabled):active,
+button:not(.button-vue).primary:not(:disabled):hover,
+button:not(.button-vue).primary:not(:disabled):focus,
+button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):hover, .button.primary:not(:disabled):focus, .button.primary:not(:disabled):active,
+input:not([type=range]).primary:not(:disabled):hover,
+input:not([type=range]).primary:not(:disabled):focus,
+input:not([type=range]).primary:not(:disabled):active,
+textarea.primary:not(:disabled):hover,
+textarea.primary:not(:disabled):focus,
+textarea.primary:not(:disabled):active,
+div[contenteditable=true].primary:not(:disabled):hover,
+div[contenteditable=true].primary:not(:disabled):focus,
+div[contenteditable=true].primary:not(:disabled):active,
+.pager li a.primary:not(:disabled):hover,
+.pager li a.primary:not(:disabled):focus,
+.pager li a.primary:not(:disabled):active {
+ background-color: var(--color-primary-element-light);
+ border-color: var(--color-primary-element-light);
+}
+div.select2-drop .select2-search input.primary:not(:disabled):active,
+select.primary:not(:disabled):active,
+button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):active,
+input:not([type=range]).primary:not(:disabled):active,
+textarea.primary:not(:disabled):active,
+div[contenteditable=true].primary:not(:disabled):active,
+.pager li a.primary:not(:disabled):active {
+ color: var(--color-primary-text-dark);
+}
+div.select2-drop .select2-search input.primary:disabled,
+select.primary:disabled,
+button:not(.button-vue).primary:disabled, .button.primary:disabled,
+input:not([type=range]).primary:disabled,
+textarea.primary:disabled,
+div[contenteditable=true].primary:disabled,
+.pager li a.primary:disabled {
+ background-color: var(--color-primary-element);
+ color: var(--color-primary-text-dark);
+ cursor: default;
+}
+
+div[contenteditable=false] {
+ margin: 3px 3px 3px 0;
+ padding: 7px 6px;
+ font-size: 13px;
+ background-color: var(--color-main-background);
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-background-darker);
+ outline: none;
+ border-radius: var(--border-radius);
+ background-color: var(--color-background-dark);
+ color: var(--color-text-lighter);
+ cursor: default;
+ opacity: 0.5;
+}
+
+/* Specific override */
+input {
+ /* Color input doesn't respect the initial height
+ so we need to set a custom one */
+}
+input:not([type=radio]):not([type=checkbox]):not([type=range]):not([type=submit]):not([type=button]):not([type=reset]):not([type=color]):not([type=file]):not([type=image]) {
+ -webkit-appearance: textfield;
+ -moz-appearance: textfield;
+ height: 34px;
+}
+input[type=radio], input[type=checkbox], input[type=file], input[type=image] {
+ height: auto;
+ width: auto;
+}
+input[type=color] {
+ margin: 3px;
+ padding: 0 2px;
+ min-height: 30px;
+ width: 40px;
+ cursor: pointer;
+}
+input[type=hidden] {
+ height: 0;
+ width: 0;
+}
+input[type=time] {
+ width: initial;
+}
+
+/* 'Click' inputs */
+select,
+button:not(.button-vue), .button,
+input[type=button],
+input[type=submit],
+input[type=reset] {
+ padding: 6px 16px;
+ width: auto;
+ min-height: 34px;
+ cursor: pointer;
+ box-sizing: border-box;
+ background-color: var(--color-background-dark);
+}
+select:disabled,
+button:not(.button-vue):disabled, .button:disabled,
+input[type=button]:disabled,
+input[type=submit]:disabled,
+input[type=reset]:disabled {
+ cursor: default;
+}
+
+select *,
+button:not(.button-vue) *, .button * {
+ cursor: pointer;
+}
+select:disabled *,
+button:not(.button-vue):disabled *, .button:disabled * {
+ cursor: default;
+}
+
+/* Buttons */
+button:not(.button-vue), .button,
+input[type=button],
+input[type=submit],
+input[type=reset] {
+ font-weight: bold;
+ border-radius: var(--border-radius-pill);
+ /* Get rid of the inside dotted line in Firefox */
+}
+button:not(.button-vue)::-moz-focus-inner, .button::-moz-focus-inner,
+input[type=button]::-moz-focus-inner,
+input[type=submit]::-moz-focus-inner,
+input[type=reset]::-moz-focus-inner {
+ border: 0;
+}
+button:not(.button-vue).error, .button.error,
+input[type=button].error,
+input[type=submit].error,
+input[type=reset].error {
+ background-color: var(--color-error) !important;
+ border-color: var(--color-error) !important;
+ color: #fff !important;
+}
+
+button:not(.button-vue):not(.action-button) > span, .button > span {
+ /* icon position inside buttons */
+}
+button:not(.button-vue):not(.action-button) > span[class^=icon-], button:not(.button-vue):not(.action-button) > span[class*=" icon-"], .button > span[class^=icon-], .button > span[class*=" icon-"] {
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.5;
+}
+
+textarea, div[contenteditable=true] {
+ color: var(--color-main-text);
+ cursor: text;
+ font-family: inherit;
+ height: auto;
+}
+textarea:not(:disabled):active, textarea:not(:disabled):hover, textarea:not(:disabled):focus, div[contenteditable=true]:not(:disabled):active, div[contenteditable=true]:not(:disabled):hover, div[contenteditable=true]:not(:disabled):focus {
+ border-color: var(--color-background-darker) !important;
+ background-color: var(--color-main-background) !important;
+}
+
+div[contenteditable=false] {
+ color: var(--color-text-lighter);
+ font-family: inherit;
+ height: auto;
+}
+
+/* Override the ugly select arrow */
+select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: var(--icon-triangle-s-dark) no-repeat right 4px center;
+ background-color: inherit;
+ outline: 0;
+ padding-right: 24px !important;
+ height: 34px;
+}
+
+/* Confirm inputs */
+input[type=text], input[type=password], input[type=email] {
+ /* only show confirm borders if input is not focused */
+}
+input[type=text] + .icon-confirm, input[type=password] + .icon-confirm, input[type=email] + .icon-confirm {
+ margin-left: -8px !important;
+ border-left-color: transparent !important;
+ border-radius: 0 var(--border-radius) var(--border-radius) 0 !important;
+ background-clip: padding-box;
+ /* Avoid background under border */
+ background-color: var(--color-main-background) !important;
+ opacity: 1;
+ height: 34px;
+ width: 34px;
+ padding: 7px 6px;
+ cursor: pointer;
+ margin-right: 0;
+}
+input[type=text] + .icon-confirm:disabled, input[type=password] + .icon-confirm:disabled, input[type=email] + .icon-confirm:disabled {
+ cursor: default;
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-confirm-fade-dark);
+}
+input[type=text]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=password]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=email]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm {
+ border-color: var(--color-error);
+}
+input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus {
+ border-color: var(--color-primary-element) !important;
+ border-radius: var(--border-radius) !important;
+}
+input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled {
+ border-color: var(--color-background-darker) !important;
+}
+input[type=text]:active + .icon-confirm, input[type=text]:hover + .icon-confirm, input[type=text]:focus + .icon-confirm, input[type=password]:active + .icon-confirm, input[type=password]:hover + .icon-confirm, input[type=password]:focus + .icon-confirm, input[type=email]:active + .icon-confirm, input[type=email]:hover + .icon-confirm, input[type=email]:focus + .icon-confirm {
+ border-color: var(--color-primary-element) !important;
+ border-left-color: transparent !important;
+ /* above previous input */
+ z-index: 2;
+}
+
+/* Various Fixes */
+button img,
+.button img {
+ cursor: pointer;
+}
+
+select,
+.button.multiselect {
+ font-weight: normal;
+}
+
+/* Radio & Checkboxes */
+input[type=checkbox], input[type=radio] {
+ /* We do not use the variables as we keep the colours as white for this variant */
+}
+input[type=checkbox].radio, input[type=checkbox].checkbox, input[type=radio].radio, input[type=radio].checkbox {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+input[type=checkbox].radio + label, input[type=checkbox].checkbox + label, input[type=radio].radio + label, input[type=radio].checkbox + label {
+ user-select: none;
+}
+input[type=checkbox].radio:disabled + label, input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label, input[type=radio].checkbox:disabled + label:before {
+ cursor: default;
+}
+input[type=checkbox].radio + label:before, input[type=checkbox].checkbox + label:before, input[type=radio].radio + label:before, input[type=radio].checkbox + label:before {
+ content: "";
+ display: inline-block;
+ height: 14px;
+ width: 14px;
+ vertical-align: middle;
+ border-radius: 50%;
+ margin: 0 6px 3px 3px;
+ border: 1px solid var(--color-text-lighter);
+}
+input[type=checkbox].radio:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].radio:focus + label:before, input[type=checkbox].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox:focus + label:before, input[type=radio].radio:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio:focus + label:before, input[type=radio].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox:focus + label:before {
+ border-color: var(--color-primary-element);
+}
+input[type=checkbox].radio:focus-visible + label, input[type=checkbox].checkbox:focus-visible + label, input[type=radio].radio:focus-visible + label, input[type=radio].checkbox:focus-visible + label {
+ outline-style: solid;
+ outline-color: var(--color-main-text);
+ outline-width: 1px;
+ outline-offset: 2px;
+}
+input[type=checkbox].radio:checked + label:before, input[type=checkbox].radio.checkbox:indeterminate + label:before, input[type=checkbox].checkbox:checked + label:before, input[type=checkbox].checkbox.checkbox:indeterminate + label:before, input[type=radio].radio:checked + label:before, input[type=radio].radio.checkbox:indeterminate + label:before, input[type=radio].checkbox:checked + label:before, input[type=radio].checkbox.checkbox:indeterminate + label:before {
+ /* ^ :indeterminate have a strange behavior on radio,
+ so we respecified the checkbox class again to be safe */
+ box-shadow: inset 0px 0px 0px 2px var(--color-main-background);
+ background-color: var(--color-primary-element);
+ border-color: var(--color-primary-element);
+}
+input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label:before {
+ border: 1px solid var(--color-text-lighter);
+ background-color: var(--color-text-maxcontrast) !important;
+ /* override other status */
+}
+input[type=checkbox].radio:checked:disabled + label:before, input[type=checkbox].checkbox:checked:disabled + label:before, input[type=radio].radio:checked:disabled + label:before, input[type=radio].checkbox:checked:disabled + label:before {
+ background-color: var(--color-text-maxcontrast);
+}
+input[type=checkbox].radio + label ~ em, input[type=checkbox].checkbox + label ~ em, input[type=radio].radio + label ~ em, input[type=radio].checkbox + label ~ em {
+ display: inline-block;
+ margin-left: 25px;
+}
+input[type=checkbox].radio + label ~ em:last-of-type, input[type=checkbox].checkbox + label ~ em:last-of-type, input[type=radio].radio + label ~ em:last-of-type, input[type=radio].checkbox + label ~ em:last-of-type {
+ margin-bottom: 14px;
+}
+input[type=checkbox].checkbox + label:before, input[type=radio].checkbox + label:before {
+ border-radius: 1px;
+ height: 14px;
+ width: 14px;
+ box-shadow: none !important;
+ background-position: center;
+}
+input[type=checkbox].checkbox:checked + label:before, input[type=radio].checkbox:checked + label:before {
+ background-image: url("../img/actions/checkbox-mark.svg");
+}
+input[type=checkbox].checkbox:indeterminate + label:before, input[type=radio].checkbox:indeterminate + label:before {
+ background-image: url("../img/actions/checkbox-mixed.svg");
+}
+input[type=checkbox].radio--white + label:before, input[type=checkbox].radio--white:focus + label:before, input[type=checkbox].checkbox--white + label:before, input[type=checkbox].checkbox--white:focus + label:before, input[type=radio].radio--white + label:before, input[type=radio].radio--white:focus + label:before, input[type=radio].checkbox--white + label:before, input[type=radio].checkbox--white:focus + label:before {
+ border-color: #bababa;
+}
+input[type=checkbox].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox--white:not(:disabled):not(:checked) + label:hover:before {
+ border-color: #fff;
+}
+input[type=checkbox].radio--white:checked + label:before, input[type=checkbox].checkbox--white:checked + label:before, input[type=radio].radio--white:checked + label:before, input[type=radio].checkbox--white:checked + label:before {
+ box-shadow: inset 0px 0px 0px 2px var(--color-main-background);
+ background-color: #dbdbdb;
+ border-color: #dbdbdb;
+}
+input[type=checkbox].radio--white:disabled + label:before, input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].radio--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before {
+ background-color: #bababa !important;
+ /* override other status */
+ border-color: rgba(255, 255, 255, 0.4) !important;
+ /* override other status */
+}
+input[type=checkbox].radio--white:checked:disabled + label:before, input[type=checkbox].checkbox--white:checked:disabled + label:before, input[type=radio].radio--white:checked:disabled + label:before, input[type=radio].checkbox--white:checked:disabled + label:before {
+ box-shadow: inset 0px 0px 0px 2px var(--color-main-background);
+ border-color: rgba(255, 255, 255, 0.4) !important;
+ /* override other status */
+ background-color: #bababa;
+}
+input[type=checkbox].checkbox--white:checked + label:before, input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:checked + label:before, input[type=radio].checkbox--white:indeterminate + label:before {
+ background-color: transparent !important;
+ /* Override default checked */
+ border-color: #fff !important;
+ /* Override default checked */
+ background-image: url("../img/actions/checkbox-mark-white.svg");
+}
+input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:indeterminate + label:before {
+ background-image: url("../img/actions/checkbox-mixed-white.svg");
+}
+input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before {
+ opacity: 0.7;
+ /* No other choice for white background image */
+}
+
+/* Select2 overriding. Merged to core with vendor stylesheet */
+div.select2-drop {
+ margin-top: -2px;
+ background-color: var(--color-main-background);
+}
+div.select2-drop.select2-drop-active {
+ border-color: var(--color-border-dark);
+}
+div.select2-drop .avatar {
+ display: inline-block;
+ margin-right: 8px;
+ vertical-align: middle;
+}
+div.select2-drop .avatar img {
+ cursor: pointer;
+}
+div.select2-drop .select2-search input {
+ min-height: auto;
+ background: var(--icon-search-dark) no-repeat right center !important;
+ background-origin: content-box !important;
+}
+div.select2-drop .select2-results {
+ max-height: 250px;
+ margin: 0;
+ padding: 0;
+}
+div.select2-drop .select2-results .select2-result-label {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+div.select2-drop .select2-results .select2-result-label span {
+ cursor: pointer;
+}
+div.select2-drop .select2-results .select2-result-label span em {
+ cursor: inherit;
+ background: unset;
+}
+div.select2-drop .select2-results .select2-result,
+div.select2-drop .select2-results .select2-no-results,
+div.select2-drop .select2-results .select2-searching {
+ position: relative;
+ display: list-item;
+ padding: 12px;
+ background-color: transparent;
+ cursor: pointer;
+ color: var(--color-text-lighter);
+}
+div.select2-drop .select2-results .select2-result.select2-selected {
+ background-color: var(--color-background-dark);
+}
+div.select2-drop .select2-results .select2-highlighted {
+ background-color: var(--color-background-dark);
+ color: var(--color-main-text);
+}
+
+.select2-chosen .avatar,
+.select2-chosen .avatar img,
+#select2-drop .avatar,
+#select2-drop .avatar img {
+ cursor: pointer;
+}
+
+div.select2-container-multi .select2-choices, div.select2-container-multi.select2-container-active .select2-choices {
+ box-shadow: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: var(--color-main-background);
+ color: var(--color-text-lighter) !important;
+ box-sizing: content-box;
+ border-radius: var(--border-radius);
+ border: 1px solid var(--color-border-dark);
+ margin: 0;
+ padding: 2px 0;
+ min-height: auto;
+}
+div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+}
+div.select2-container-multi .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi .select2-choices .select2-search-choice:hover, div.select2-container-multi .select2-choices .select2-search-choice:active, div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:hover, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice {
+ background-image: none;
+ background-color: var(--color-main-background);
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-border-dark);
+}
+div.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close {
+ display: none;
+}
+div.select2-container-multi .select2-choices .select2-search-field input, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input {
+ line-height: 20px;
+}
+div.select2-container-multi .select2-choices .select2-search-field input.select2-active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input.select2-active {
+ background: none !important;
+}
+
+div.select2-container {
+ margin: 3px 3px 3px 0;
+}
+div.select2-container.select2-container-multi .select2-choices {
+ display: flex;
+ flex-wrap: wrap;
+}
+div.select2-container.select2-container-multi .select2-choices li {
+ float: none;
+}
+div.select2-container a.select2-choice {
+ box-shadow: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: var(--color-main-background);
+ color: var(--color-text-lighter) !important;
+ box-sizing: content-box;
+ border-radius: var(--border-radius);
+ border: 1px solid var(--color-border-dark);
+ margin: 0;
+ padding: 2px 0;
+ padding-left: 6px;
+ min-height: auto;
+}
+div.select2-container a.select2-choice .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+ background-image: none;
+ background-color: var(--color-background-dark);
+ border-color: var(--color-background-dark);
+}
+div.select2-container a.select2-choice .select2-search-choice .select2-search-choice-close {
+ display: none;
+}
+div.select2-container a.select2-choice .select2-search-choice.select2-search-choice-focus, div.select2-container a.select2-choice .select2-search-choice:hover {
+ background-color: var(--color-border);
+ border-color: var(--color-border);
+}
+div.select2-container a.select2-choice .select2-arrow {
+ background: none;
+ border-radius: 0;
+ border: none;
+}
+div.select2-container a.select2-choice .select2-arrow b {
+ background: var(--icon-triangle-s-dark) no-repeat center !important;
+ opacity: 0.5;
+}
+div.select2-container a.select2-choice:hover .select2-arrow b, div.select2-container a.select2-choice:focus .select2-arrow b, div.select2-container a.select2-choice:active .select2-arrow b {
+ opacity: 0.7;
+}
+div.select2-container a.select2-choice .select2-search-field input {
+ line-height: 20px;
+}
+
+/* Vue v-select */
+.v-select {
+ margin: 3px 3px 3px 0;
+ display: inline-block;
+}
+.v-select .dropdown-toggle {
+ display: flex !important;
+ flex-wrap: wrap;
+}
+.v-select .dropdown-toggle .selected-tag {
+ line-height: 20px;
+ padding-left: 5px;
+ background-image: none;
+ background-color: var(--color-main-background);
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-border-dark);
+ display: inline-flex;
+ align-items: center;
+}
+.v-select .dropdown-toggle .selected-tag .close {
+ margin-left: 3px;
+}
+.v-select .dropdown-menu {
+ padding: 0;
+}
+.v-select .dropdown-menu li {
+ padding: 5px;
+ position: relative;
+ display: list-item;
+ background-color: transparent;
+ cursor: pointer;
+ color: var(--color-text-lighter);
+}
+.v-select .dropdown-menu li a {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ height: 25px;
+ padding: 3px 7px 4px 2px;
+ margin: 0;
+ cursor: pointer;
+ min-height: 1em;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ display: inline-flex;
+ align-items: center;
+ background-color: transparent !important;
+ color: inherit !important;
+}
+.v-select .dropdown-menu li a::before {
+ content: " ";
+ background-image: var(--icon-checkmark-dark);
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+ display: block;
+ opacity: 0.5;
+ margin-right: 5px;
+ visibility: hidden;
+}
+.v-select .dropdown-menu li.highlight {
+ color: var(--color-main-text);
+}
+.v-select .dropdown-menu li.active > a {
+ background-color: var(--color-background-dark);
+ color: var(--color-main-text);
+}
+.v-select .dropdown-menu li.active > a::before {
+ visibility: visible;
+}
+
+/* Vue multiselect */
+.multiselect.multiselect-vue {
+ margin: 1px 2px;
+ padding: 0 !important;
+ display: inline-block;
+ width: 160px;
+ position: relative;
+ background-color: var(--color-main-background);
+ /* results wrapper */
+}
+.multiselect.multiselect-vue.multiselect--active {
+ /* Opened: force display the input */
+}
+.multiselect.multiselect-vue.multiselect--active input.multiselect__input {
+ opacity: 1 !important;
+ cursor: text !important;
+}
+.multiselect.multiselect-vue.multiselect--disabled, .multiselect.multiselect-vue.multiselect--disabled .multiselect__single {
+ background-color: var(--color-background-dark) !important;
+}
+.multiselect.multiselect-vue .multiselect__tags {
+ /* space between tags and limit tag */
+ display: flex;
+ flex-wrap: nowrap;
+ overflow: hidden;
+ border: 1px solid var(--color-border-dark);
+ cursor: pointer;
+ position: relative;
+ border-radius: var(--border-radius);
+ height: 34px;
+ /* tag wrapper */
+ /* Single select default value */
+ /* displayed text if tag limit reached */
+ /* default multiselect input for search and placeholder */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap {
+ align-items: center;
+ display: inline-flex;
+ overflow: hidden;
+ max-width: 100%;
+ position: relative;
+ padding: 3px 5px;
+ flex-grow: 1;
+ /* no tags or simple select? Show input directly
+ input is used to display single value */
+ /* selected tag */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input {
+ opacity: 1 !important;
+ /* hide default empty text, show input instead */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input + span:not(.multiselect__single) {
+ display: none;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag {
+ flex: 1 0 0;
+ line-height: 20px;
+ padding: 1px 5px;
+ background-image: none;
+ color: var(--color-text-lighter);
+ border: 1px solid var(--color-border-dark);
+ display: inline-flex;
+ align-items: center;
+ border-radius: var(--border-radius);
+ /* require to override the default width
+ and force the tag to shring properly */
+ min-width: 0;
+ max-width: 50%;
+ max-width: fit-content;
+ max-width: -moz-fit-content;
+ /* css hack, detect if more than two tags
+ if so, flex-basis is set to half */
+ /* ellipsis the groups to be sure
+ we display at least two of them */
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:only-child {
+ flex: 0 1 auto;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:not(:last-child) {
+ margin-right: 5px;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag > span {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__single {
+ padding: 8px 10px;
+ flex: 0 0 100%;
+ z-index: 1;
+ /* above input */
+ background-color: var(--color-main-background);
+ cursor: pointer;
+ line-height: 17px;
+}
+.multiselect.multiselect-vue .multiselect__tags .multiselect__strong,
+.multiselect.multiselect-vue .multiselect__tags .multiselect__limit {
+ flex: 0 0 auto;
+ line-height: 20px;
+ color: var(--color-text-lighter);
+ display: inline-flex;
+ align-items: center;
+ opacity: 0.7;
+ margin-right: 5px;
+ /* above the input */
+ z-index: 5;
+}
+.multiselect.multiselect-vue .multiselect__tags input.multiselect__input {
+ width: 100% !important;
+ position: absolute !important;
+ margin: 0;
+ opacity: 0;
+ /* let's leave it on top of tags but hide it */
+ height: 100%;
+ border: none;
+ /* override hide to force show the placeholder */
+ display: block !important;
+ /* only when not active */
+ cursor: pointer;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper {
+ position: absolute;
+ width: 100%;
+ margin-top: -1px;
+ border: 1px solid var(--color-border-dark);
+ background: var(--color-main-background);
+ z-index: 50;
+ max-height: 175px !important;
+ overflow-y: auto;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper .multiselect__content {
+ width: 100%;
+ padding: 5px 0;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li {
+ padding: 5px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ background-color: transparent;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li,
+.multiselect.multiselect-vue .multiselect__content-wrapper li span {
+ cursor: pointer;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ height: 20px;
+ margin: 0;
+ min-height: 1em;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ display: inline-flex;
+ align-items: center;
+ background-color: transparent !important;
+ color: var(--color-text-lighter);
+ width: 100%;
+ /* selected checkmark icon */
+ /* add the prop tag-placeholder="create" to add the +
+ * icon on top of an unknown-and-ready-to-be-created entry
+ */
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span::before {
+ content: " ";
+ background-image: var(--icon-checkmark-dark);
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+ display: block;
+ opacity: 0.5;
+ margin-right: 5px;
+ visibility: hidden;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--disabled {
+ background-color: var(--color-background-dark);
+ opacity: 0.5;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span[data-select=create]::before {
+ background-image: var(--icon-add-dark);
+ visibility: visible;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--highlight {
+ color: var(--color-main-text);
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before {
+ opacity: 0.3;
+}
+.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--selected::before, .multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before {
+ visibility: visible;
+}
+
+/* Progressbar */
+progress:not(.vue) {
+ display: block;
+ width: 100%;
+ padding: 0;
+ border: 0 none;
+ background-color: var(--color-background-dark);
+ border-radius: var(--border-radius);
+ flex-basis: 100%;
+ height: 5px;
+ overflow: hidden;
+}
+progress:not(.vue).warn::-moz-progress-bar {
+ background: var(--color-error);
+}
+progress:not(.vue).warn::-webkit-progress-value {
+ background: var(--color-error);
+}
+progress:not(.vue)::-webkit-progress-bar {
+ background: transparent;
+}
+progress:not(.vue)::-moz-progress-bar {
+ border-radius: var(--border-radius);
+ background: var(--color-primary);
+ transition: 250ms all ease-in-out;
+}
+progress:not(.vue)::-webkit-progress-value {
+ border-radius: var(--border-radius);
+ background: var(--color-primary);
+ transition: 250ms all ease-in-out;
+}
+
+/* Animation */
+@keyframes shake {
+ 10%, 90% {
+ transform: translate(-1px);
+ }
+ 20%, 80% {
+ transform: translate(2px);
+ }
+ 30%, 50%, 70% {
+ transform: translate(-4px);
+ }
+ 40%, 60% {
+ transform: translate(4px);
+ }
+}
+.shake {
+ animation-name: shake;
+ animation-duration: 0.7s;
+ animation-timing-function: ease-out;
+}
+
+label.infield {
+ position: absolute;
+ left: -10000px;
+ top: -10000px;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+
+::placeholder,
+::-ms-input-placeholder,
+::-webkit-input-placeholder {
+ color: var(--color-text-maxcontrast);
+}
+
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Jos Poortvliet <jos@opensuse.org>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Volker E <volker.e@temporaer.net>
+ * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+/* prevent ugly selection effect on accidental selection */
+#header,
+#navigation,
+#expanddiv {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+}
+
+/* removed until content-focusing issue is fixed */
+#skip-to-content a {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+#skip-to-content a:focus {
+ left: 76px;
+ top: -9px;
+ color: var(--color-primary-text);
+ width: auto;
+ height: auto;
+}
+
+/* HEADERS ------------------------------------------------------------------ */
+#body-user #header,
+#body-settings #header,
+#body-public #header {
+ display: inline-flex;
+ position: fixed;
+ top: 0;
+ width: 100%;
+ z-index: 2000;
+ height: 50px;
+ background-color: var(--color-primary);
+ background-image: linear-gradient(40deg, var(--color-primary) 0%, var(--color-primary-element-light) 100%);
+ box-sizing: border-box;
+ justify-content: space-between;
+}
+
+/* LOGO and APP NAME -------------------------------------------------------- */
+#nextcloud {
+ padding: 7px 0;
+ padding-left: 86px;
+ position: relative;
+ height: 100%;
+ box-sizing: border-box;
+ opacity: 1;
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ overflow: hidden;
+}
+#nextcloud:focus {
+ opacity: 0.75;
+}
+#nextcloud:hover, #nextcloud:active {
+ opacity: 1;
+}
+
+#header {
+ /* Header menu */
+ /* show caret indicator next to logo to make clear it is tappable */
+ /* Right header standard */
+}
+#header .header-left > nav > .menu,
+#header .header-right > div > .menu {
+ background-color: var(--color-main-background);
+ filter: drop-shadow(0 1px 5px var(--color-box-shadow));
+ border-radius: 0 0 var(--border-radius) var(--border-radius);
+ box-sizing: border-box;
+ z-index: 2000;
+ position: absolute;
+ max-width: 350px;
+ min-height: 66px;
+ max-height: calc(100vh - 50px * 4);
+ right: 5px;
+ top: 50px;
+ margin: 0;
+ /* Dropdown arrow */
+ /* Use by the apps menu and the settings right menu */
+}
+#header .header-left > nav > .menu:not(.popovermenu),
+#header .header-right > div > .menu:not(.popovermenu) {
+ display: none;
+}
+#header .header-left > nav > .menu:after,
+#header .header-right > div > .menu:after {
+ border: 10px solid transparent;
+ border-bottom-color: var(--color-main-background);
+ bottom: 100%;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ right: 10px;
+}
+#header .header-left > nav > .menu #apps > ul, #header .header-left > nav > .menu > div, #header .header-left > nav > .menu > ul,
+#header .header-right > div > .menu #apps > ul,
+#header .header-right > div > .menu > div,
+#header .header-right > div > .menu > ul {
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ min-height: 66px;
+ max-height: calc(100vh - 50px * 4);
+}
+#header .header-left > nav > .menu #apps > ul li a, #header .header-left > nav > .menu.settings-menu > ul li a,
+#header .header-right > div > .menu #apps > ul li a,
+#header .header-right > div > .menu.settings-menu > ul li a {
+ display: inline-flex;
+ align-items: center;
+ height: 44px;
+ color: var(--color-main-text);
+ padding: 10px 12px;
+ box-sizing: border-box;
+ white-space: nowrap;
+ position: relative;
+ width: 100%;
+}
+#header .header-left > nav > .menu #apps > ul li a:hover, #header .header-left > nav > .menu #apps > ul li a:focus, #header .header-left > nav > .menu.settings-menu > ul li a:hover, #header .header-left > nav > .menu.settings-menu > ul li a:focus,
+#header .header-right > div > .menu #apps > ul li a:hover,
+#header .header-right > div > .menu #apps > ul li a:focus,
+#header .header-right > div > .menu.settings-menu > ul li a:hover,
+#header .header-right > div > .menu.settings-menu > ul li a:focus {
+ background-color: var(--color-background-hover);
+}
+#header .header-left > nav > .menu #apps > ul li a:active, #header .header-left > nav > .menu #apps > ul li a.active, #header .header-left > nav > .menu.settings-menu > ul li a:active, #header .header-left > nav > .menu.settings-menu > ul li a.active,
+#header .header-right > div > .menu #apps > ul li a:active,
+#header .header-right > div > .menu #apps > ul li a.active,
+#header .header-right > div > .menu.settings-menu > ul li a:active,
+#header .header-right > div > .menu.settings-menu > ul li a.active {
+ background-color: var(--color-primary-light);
+}
+#header .header-left > nav > .menu #apps > ul li a span, #header .header-left > nav > .menu.settings-menu > ul li a span,
+#header .header-right > div > .menu #apps > ul li a span,
+#header .header-right > div > .menu.settings-menu > ul li a span {
+ display: inline-block;
+ padding-bottom: 0;
+ color: var(--color-main-text);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 110px;
+}
+#header .header-left > nav > .menu #apps > ul li a .icon-loading-small, #header .header-left > nav > .menu.settings-menu > ul li a .icon-loading-small,
+#header .header-right > div > .menu #apps > ul li a .icon-loading-small,
+#header .header-right > div > .menu.settings-menu > ul li a .icon-loading-small {
+ margin-right: 10px;
+ background-size: 16px 16px;
+}
+#header .header-left > nav > .menu #apps > ul li a img,
+#header .header-left > nav > .menu #apps > ul li a svg, #header .header-left > nav > .menu.settings-menu > ul li a img,
+#header .header-left > nav > .menu.settings-menu > ul li a svg,
+#header .header-right > div > .menu #apps > ul li a img,
+#header .header-right > div > .menu #apps > ul li a svg,
+#header .header-right > div > .menu.settings-menu > ul li a img,
+#header .header-right > div > .menu.settings-menu > ul li a svg {
+ opacity: 0.7;
+ margin-right: 10px;
+ height: 16px;
+ width: 16px;
+ filter: var(--background-invert-if-dark);
+}
+#header .logo {
+ display: inline-flex;
+ background-image: var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg")));
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center;
+ width: 62px;
+ position: absolute;
+ left: 12px;
+ top: 1px;
+ bottom: 1px;
+ filter: var(--image-logoheader-custom, var(--primary-invert-if-bright));
+}
+#header .header-appname-container {
+ display: none;
+ padding-right: 10px;
+ flex-shrink: 0;
+}
+#header .icon-caret {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ margin-top: -21px;
+ padding: 0;
+ vertical-align: middle;
+}
+#header #header-left, #header .header-left,
+#header #header-right, #header .header-right {
+ display: inline-flex;
+ align-items: center;
+}
+#header #header-left, #header .header-left {
+ flex: 1 0;
+ white-space: nowrap;
+ min-width: 0;
+}
+#header #header-right, #header .header-right {
+ justify-content: flex-end;
+ flex-shrink: 1;
+}
+#header .header-right > div,
+#header .header-right > form {
+ height: 100%;
+ position: relative;
+}
+#header .header-right > div > .menutoggle,
+#header .header-right > form > .menutoggle {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 50px;
+ height: 100%;
+ cursor: pointer;
+ opacity: 0.6;
+ padding: 0;
+ margin: 0;
+}
+
+/* hover effect for app switcher label */
+.header-appname-container .header-appname {
+ opacity: 0.75;
+}
+
+.menutoggle .icon-caret {
+ opacity: 0.75;
+}
+.menutoggle:hover .header-appname, .menutoggle:hover .icon-caret {
+ opacity: 1;
+}
+.menutoggle:focus .header-appname, .menutoggle:focus .icon-caret {
+ opacity: 1;
+}
+.menutoggle.active .header-appname, .menutoggle.active .icon-caret {
+ opacity: 1;
+}
+
+/* TODO: move into minimal css file for public shared template */
+/* only used for public share pages now as we have the app icons when logged in */
+.header-appname {
+ color: var(--color-primary-text);
+ font-size: 16px;
+ font-weight: bold;
+ margin: 0;
+ padding: 0;
+ padding-right: 5px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex: 1 1 100%;
+}
+
+.header-shared-by {
+ color: var(--color-primary-text);
+ position: relative;
+ font-weight: 300;
+ font-size: 11px;
+ line-height: 11px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+/* do not show menu toggle on public share links as there is no menu */
+#body-public #header .icon-caret {
+ display: none;
+}
+
+/* NAVIGATION --------------------------------------------------------------- */
+nav[role=navigation] {
+ display: inline-block;
+ width: 50px;
+ height: 50px;
+ margin-left: -50px;
+ position: relative;
+}
+
+#header .header-left > nav > #navigation {
+ position: relative;
+ left: 25px;
+ /* half the togglemenu */
+ transform: translateX(-50%);
+ width: 160px;
+}
+
+#header .header-left > nav > #navigation,
+.ui-datepicker,
+.ui-timepicker.ui-widget {
+ background-color: var(--color-main-background);
+ filter: drop-shadow(0 1px 10px var(--color-box-shadow));
+}
+#header .header-left > nav > #navigation:after,
+.ui-datepicker:after,
+.ui-timepicker.ui-widget:after {
+ /* position of dropdown arrow */
+ left: 50%;
+ bottom: 100%;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-color: rgba(0, 0, 0, 0);
+ border-bottom-color: var(--color-main-background);
+ border-width: 10px;
+ margin-left: -10px;
+ /* border width */
+}
+
+#navigation {
+ box-sizing: border-box;
+}
+#navigation .in-header {
+ display: none;
+}
+
+/* USER MENU -----------------------------------------------------------------*/
+#settings {
+ display: inline-block;
+ height: 100%;
+ cursor: pointer;
+ flex: 0 0 auto;
+ /* User menu on the right */
+}
+#settings #expand {
+ opacity: 1;
+ /* override icon opacity */
+ padding-right: 12px;
+ /* Profile picture in header */
+ /* show triangle below user menu if active */
+}
+#settings #expand:hover, #settings #expand:focus, #settings #expand:active {
+ color: var(--color-primary-text);
+}
+#settings #expand:hover #expandDisplayName,
+#settings #expand:hover .avatardiv, #settings #expand:focus #expandDisplayName,
+#settings #expand:focus .avatardiv, #settings #expand:active #expandDisplayName,
+#settings #expand:active .avatardiv {
+ border-radius: 50%;
+ border: 2px solid var(--color-primary-text);
+ margin: -2px;
+}
+#settings #expand:hover .avatardiv, #settings #expand:focus .avatardiv, #settings #expand:active .avatardiv {
+ background-color: var(--color-primary-text);
+}
+#settings #expand:hover #expandDisplayName, #settings #expand:focus #expandDisplayName, #settings #expand:active #expandDisplayName {
+ opacity: 1;
+}
+#settings #expand .avatardiv {
+ cursor: pointer;
+ height: 32px;
+ width: 32px;
+ /* do not show display name when profile picture is present */
+}
+#settings #expand .avatardiv img {
+ opacity: 1;
+ cursor: pointer;
+}
+#settings #expand .avatardiv.avatardiv-shown + #expandDisplayName {
+ display: none;
+}
+#settings #expand #expandDisplayName {
+ padding: 8px;
+ opacity: 0.6;
+ cursor: pointer;
+ /* full opacity for gear icon if active */
+}
+#body-settings #settings #expand #expandDisplayName {
+ opacity: 1;
+}
+#body-settings #settings #expand:before {
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border: 0 solid transparent;
+ border-bottom-color: var(--color-main-background);
+ border-width: 10px;
+ bottom: 0;
+ z-index: 100;
+ display: block;
+}
+#settings #expanddiv:after {
+ right: 22px;
+}
+
+/* Apps menu */
+#appmenu {
+ display: inline-flex;
+ min-width: 50px;
+ z-index: 2;
+ /* Show all app titles on hovering app menu area */
+ /* Also show app title on focusing single entry (showing all on focus is only possible with CSS4 and parent selectors) */
+ /* show triangle below active app */
+ /* triangle focus feedback */
+}
+#appmenu li {
+ position: relative;
+ cursor: pointer;
+ padding: 0 2px;
+ display: flex;
+ justify-content: center;
+ /* focused app visual feedback */
+ /* hidden apps menu */
+ /* App title */
+ /* Set up transitions for showing app titles on hover */
+ /* App icon */
+ /* Triangle */
+}
+#appmenu li a {
+ position: relative;
+ display: flex;
+ margin: 0;
+ height: 50px;
+ width: 50px;
+ align-items: center;
+ justify-content: center;
+ opacity: 0.6;
+ letter-spacing: -0.5px;
+ font-size: 12px;
+}
+#appmenu li:hover a,
+#appmenu li a:focus,
+#appmenu li a.active {
+ opacity: 1;
+ font-weight: bold;
+}
+#appmenu li:hover a,
+#appmenu li a:focus {
+ font-size: 14px;
+}
+#appmenu li:hover a + span,
+#appmenu li a:focus + span, #appmenu li:hover span, #appmenu li:focus span,
+#appmenu li a:focus span,
+#appmenu li a.active span {
+ display: inline-block;
+ text-overflow: initial;
+ width: auto;
+ overflow: hidden;
+ padding: 0 5px;
+ z-index: 2;
+}
+#appmenu li img,
+#appmenu li .icon-more-white {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+}
+#appmenu li span {
+ opacity: 0;
+ position: absolute;
+ color: var(--color-primary-text);
+ bottom: 2px;
+ width: 100%;
+ text-align: center;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ transition: all var(--animation-quick) ease;
+ pointer-events: none;
+}
+#appmenu li svg,
+#appmenu li .icon-more-white {
+ transition: transform var(--animation-quick) ease;
+ filter: var(--primary-invert-if-bright);
+}
+#appmenu li a::before {
+ transition: border var(--animation-quick) ease;
+}
+#appmenu:hover li {
+ /* Move up app icon */
+ /* Show app title */
+ /* Prominent app title for current and hovered/focused app */
+ /* Smaller triangle because of limited space */
+}
+#appmenu:hover li svg,
+#appmenu:hover li .icon-more,
+#appmenu:hover li .icon-more-white,
+#appmenu:hover li .icon-loading-small,
+#appmenu:hover li .icon-loading-small-dark {
+ transform: translateY(-7px);
+}
+#appmenu:hover li span {
+ opacity: 0.6;
+ bottom: 2px;
+ z-index: -1;
+ /* fix clickability issue - otherwise we need to move the span into the link */
+}
+#appmenu:hover li:hover span, #appmenu:hover li:focus span,
+#appmenu:hover li .active + span {
+ opacity: 1;
+}
+#appmenu:hover li a::before {
+ border-width: 5px;
+}
+#appmenu li a:focus {
+ /* Move up app icon */
+ /* Show app title */
+ /* Smaller triangle because of limited space */
+}
+#appmenu li a:focus svg,
+#appmenu li a:focus .icon-more,
+#appmenu li a:focus .icon-more-white,
+#appmenu li a:focus .icon-loading-small,
+#appmenu li a:focus .icon-loading-small-dark {
+ transform: translateY(-7px);
+}
+#appmenu li a:focus + span,
+#appmenu li a:focus span {
+ opacity: 1;
+ bottom: 2px;
+}
+#appmenu li a:focus::before {
+ border-width: 5px;
+}
+#appmenu li a::before {
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border: 0 solid transparent;
+ border-bottom-color: var(--color-main-background);
+ border-width: 10px;
+ transform: translateX(-50%);
+ left: 50%;
+ bottom: 0;
+ display: none;
+}
+#appmenu li a.active::before,
+#appmenu li:hover a::before,
+#appmenu li:hover a.active::before,
+#appmenu li a:focus::before {
+ display: block;
+}
+#appmenu li a.active::before {
+ z-index: 99;
+}
+#appmenu li:hover a::before,
+#appmenu li a.active:hover::before,
+#appmenu li a:focus::before {
+ z-index: 101;
+}
+#appmenu li.hidden {
+ display: none;
+}
+#appmenu #more-apps {
+ z-index: 3;
+}
+
+.unread-counter {
+ display: none;
+}
+
+#apps .app-icon-notification,
+#appmenu .app-icon-notification {
+ fill: var(--color-error);
+}
+
+#apps svg:not(.has-unread) .app-icon-notification-mask,
+#appmenu svg:not(.has-unread) .app-icon-notification-mask {
+ display: none;
+}
+#apps svg:not(.has-unread) .app-icon-notification,
+#appmenu svg:not(.has-unread) .app-icon-notification {
+ display: none;
+}
+
+/* Skip navigation links – show only on keyboard focus */
+.skip-navigation {
+ padding: 11px;
+ position: absolute;
+ overflow: hidden;
+ z-index: 9999;
+ top: -999px;
+ left: 3px;
+ /* Force primary color, otherwise too light focused color */
+ background: var(--color-primary) !important;
+}
+.skip-navigation.skip-content {
+ left: 300px;
+ margin-left: 3px;
+}
+.skip-navigation:focus, .skip-navigation:active {
+ top: 50px;
+}
+
+/* Empty content messages in the header e.g. notifications, contacts menu, … */
+header #emptycontent h2,
+header .emptycontent h2 {
+ font-weight: normal;
+ font-size: 16px;
+}
+header #emptycontent [class^=icon-],
+header #emptycontent [class*=icon-],
+header .emptycontent [class^=icon-],
+header .emptycontent [class*=icon-] {
+ background-size: 48px;
+ height: 48px;
+ width: 48px;
+}
+
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Vincent Chan <plus.vincchan@gmail.com>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* GLOBAL ------------------------------------------------------------------- */
+[class^=icon-], [class*=" icon-"] {
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+}
+
+.icon-breadcrumb {
+ background-image: url("../img/breadcrumb.svg?v=1");
+}
+
+/* LOADING ------------------------------------------------------------------ */
+.loading,
+.loading-small,
+.icon-loading,
+.icon-loading-dark,
+.icon-loading-small,
+.icon-loading-small-dark {
+ position: relative;
+}
+.loading:after,
+.loading-small:after,
+.icon-loading:after,
+.icon-loading-dark:after,
+.icon-loading-small:after,
+.icon-loading-small-dark:after {
+ z-index: 2;
+ content: "";
+ height: 28px;
+ width: 28px;
+ margin: -16px 0 0 -16px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ border-radius: 100%;
+ -webkit-animation: rotate 0.8s infinite linear;
+ animation: rotate 0.8s infinite linear;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ border: 2px solid var(--color-loading-light);
+ border-top-color: var(--color-loading-dark);
+ filter: var(--background-invert-if-dark);
+}
+.primary .loading:after, .primary + .loading:after,
+.primary .loading-small:after,
+.primary + .loading-small:after,
+.primary .icon-loading:after,
+.primary + .icon-loading:after,
+.primary .icon-loading-dark:after,
+.primary + .icon-loading-dark:after,
+.primary .icon-loading-small:after,
+.primary + .icon-loading-small:after,
+.primary .icon-loading-small-dark:after,
+.primary + .icon-loading-small-dark:after {
+ filter: var(--primary-invert-if-bright);
+}
+
+.icon-loading-dark:after,
+.icon-loading-small-dark:after {
+ border: 2px solid var(--color-loading-dark);
+ border-top-color: var(--color-loading-light);
+}
+
+.icon-loading-small:after,
+.icon-loading-small-dark:after {
+ height: 12px;
+ width: 12px;
+ margin: -8px 0 0 -8px;
+}
+
+/* Css replaced elements don't have ::after nor ::before */
+audio.icon-loading, canvas.icon-loading, embed.icon-loading, iframe.icon-loading, img.icon-loading, input.icon-loading, object.icon-loading, video.icon-loading {
+ background-image: url("../img/loading.gif");
+}
+audio.icon-loading-dark, canvas.icon-loading-dark, embed.icon-loading-dark, iframe.icon-loading-dark, img.icon-loading-dark, input.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark {
+ background-image: url("../img/loading-dark.gif");
+}
+audio.icon-loading-small, canvas.icon-loading-small, embed.icon-loading-small, iframe.icon-loading-small, img.icon-loading-small, input.icon-loading-small, object.icon-loading-small, video.icon-loading-small {
+ background-image: url("../img/loading-small.gif");
+}
+audio.icon-loading-small-dark, canvas.icon-loading-small-dark, embed.icon-loading-small-dark, iframe.icon-loading-small-dark, img.icon-loading-small-dark, input.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark {
+ background-image: url("../img/loading-small-dark.gif");
+}
+
+@keyframes rotate {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+.icon-32 {
+ background-size: 32px !important;
+}
+
+.icon-white.icon-shadow,
+.icon-audio-white,
+.icon-audio-off-white,
+.icon-fullscreen-white,
+.icon-screen-white,
+.icon-screen-off-white,
+.icon-video-white,
+.icon-video-off-white {
+ filter: drop-shadow(1px 1px 4px var(--color-box-shadow));
+}
+
+/* ICONS -------------------------------------------------------------------
+ * These icon classes are generated automatically with the following pattern
+ * .icon-close (black icon)
+ * .icon-close-white (white icon)
+ * .icon-close.icon-white (white icon)
+ *
+ * Some class definitions are kept as before, since they don't follow the pattern
+ * or have some additional styling like drop shadows
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2016-2017, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, pgys <info@pexlab.space>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Stefan Weil <sw@weilnetz.de>
+ * @copyright Copyright (c) 2016, Roeland Jago Douma <rullzer@owncloud.com>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+/* BASE STYLING ------------------------------------------------------------ */
+h2 {
+ font-weight: bold;
+ font-size: 20px;
+ margin-bottom: 12px;
+ line-height: 30px;
+ color: var(--color-text-light);
+}
+
+h3 {
+ font-size: 16px;
+ margin: 12px 0;
+ color: var(--color-text-light);
+}
+
+h4 {
+ font-size: 14px;
+}
+
+/* do not use italic typeface style, instead lighter color */
+em {
+ font-style: normal;
+ color: var(--color-text-lighter);
+}
+
+dl {
+ padding: 12px 0;
+}
+
+dt,
+dd {
+ display: inline-block;
+ padding: 12px;
+ padding-left: 0;
+}
+
+dt {
+ width: 130px;
+ white-space: nowrap;
+ text-align: right;
+}
+
+kbd {
+ padding: 4px 10px;
+ border: 1px solid #ccc;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
+ border-radius: var(--border-radius);
+ display: inline-block;
+ white-space: nowrap;
+}
+
+/* APP STYLING ------------------------------------------------------------ */
+#content[class*=app-] * {
+ box-sizing: border-box;
+}
+
+/* APP-NAVIGATION ------------------------------------------------------------ */
+/* Navigation: folder like structure */
+#app-navigation:not(.vue) {
+ width: 300px;
+ position: fixed;
+ top: 50px;
+ left: 0;
+ z-index: 500;
+ overflow-y: auto;
+ overflow-x: hidden;
+ height: calc(100% - 50px);
+ box-sizing: border-box;
+ background-color: var(--color-main-background);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ border-right: 1px solid var(--color-border);
+ display: flex;
+ flex-direction: column;
+ flex-grow: 0;
+ flex-shrink: 0;
+ /* 'New' button */
+ /**
+ * Button styling for menu, edit and undo
+ */
+ /**
+ * Collapsible menus
+ */
+ /**
+ * App navigation utils, buttons and counters for drop down menu
+ */
+ /**
+ * Editable entries
+ */
+ /**
+ * Deleted entries with undo button
+ */
+ /**
+ * Common rules for animation of undo and edit entries
+ */
+ /**
+ * drag and drop
+ */
+}
+#app-navigation:not(.vue) .app-navigation-new {
+ display: block;
+ padding: 10px;
+}
+#app-navigation:not(.vue) .app-navigation-new button {
+ display: inline-block;
+ width: 100%;
+ padding: 10px;
+ padding-left: 34px;
+ background-position: 10px center;
+ text-align: left;
+ margin: 0;
+}
+#app-navigation:not(.vue) li {
+ position: relative;
+}
+#app-navigation:not(.vue) > ul {
+ position: relative;
+ height: 100%;
+ width: inherit;
+ overflow-x: hidden;
+ overflow-y: auto;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ /* Menu and submenu */
+}
+#app-navigation:not(.vue) > ul > li {
+ display: inline-flex;
+ flex-wrap: wrap;
+ order: 1;
+ flex-shrink: 0;
+ /* Pinned-to-bottom entries */
+ /* align loader */
+ /* hide deletion/collapse of subitems */
+ /* Second level nesting for lists */
+}
+#app-navigation:not(.vue) > ul > li.pinned {
+ order: 2;
+}
+#app-navigation:not(.vue) > ul > li.pinned.first-pinned {
+ margin-top: auto !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-deleted {
+ /* Ugly hack for overriding the main entry link */
+ padding-left: 44px !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-edit {
+ /* Ugly hack for overriding the main entry link */
+ /* align the input correctly with the link text
+ 44px-6px padding for the input */
+ padding-left: 38px !important;
+}
+#app-navigation:not(.vue) > ul > li a:hover,
+#app-navigation:not(.vue) > ul > li a:hover > a,
+#app-navigation:not(.vue) > ul > li a:focus,
+#app-navigation:not(.vue) > ul > li a:focus > a {
+ background-color: var(--color-background-hover);
+}
+#app-navigation:not(.vue) > ul > li.active,
+#app-navigation:not(.vue) > ul > li.active > a,
+#app-navigation:not(.vue) > ul > li a:active,
+#app-navigation:not(.vue) > ul > li a:active > a,
+#app-navigation:not(.vue) > ul > li a.selected,
+#app-navigation:not(.vue) > ul > li a.selected > a,
+#app-navigation:not(.vue) > ul > li a.active,
+#app-navigation:not(.vue) > ul > li a.active > a {
+ background-color: var(--color-primary-light);
+}
+#app-navigation:not(.vue) > ul > li.icon-loading-small:after {
+ left: 22px;
+ top: 22px;
+}
+#app-navigation:not(.vue) > ul > li.deleted > ul, #app-navigation:not(.vue) > ul > li.collapsible:not(.open) > ul {
+ display: none;
+}
+#app-navigation:not(.vue) > ul > li.app-navigation-caption {
+ font-weight: bold;
+ line-height: 44px;
+ padding: 0 44px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ box-shadow: none !important;
+ user-select: none;
+ pointer-events: none;
+}
+#app-navigation:not(.vue) > ul > li.app-navigation-caption:not(:first-child) {
+ margin-top: 22px;
+}
+#app-navigation:not(.vue) > ul > li > ul {
+ flex: 0 1 auto;
+ width: 100%;
+ position: relative;
+}
+#app-navigation:not(.vue) > ul > li > ul > li {
+ display: inline-flex;
+ flex-wrap: wrap;
+ padding-left: 44px;
+ /* align loader */
+}
+#app-navigation:not(.vue) > ul > li > ul > li:hover,
+#app-navigation:not(.vue) > ul > li > ul > li:hover > a, #app-navigation:not(.vue) > ul > li > ul > li:focus,
+#app-navigation:not(.vue) > ul > li > ul > li:focus > a {
+ background-color: var(--color-background-hover);
+}
+#app-navigation:not(.vue) > ul > li > ul > li.active,
+#app-navigation:not(.vue) > ul > li > ul > li.active > a,
+#app-navigation:not(.vue) > ul > li > ul > li a.selected,
+#app-navigation:not(.vue) > ul > li > ul > li a.selected > a {
+ background-color: var(--color-primary-light);
+}
+#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small:after {
+ left: 22px;
+ /* 44px / 2 */
+}
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-deleted {
+ /* margin to keep active indicator visible */
+ margin-left: 4px;
+ padding-left: 84px;
+}
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-edit {
+ /* margin to keep active indicator visible */
+ margin-left: 4px;
+ /* align the input correctly with the link text
+ 44px+44px-4px-6px padding for the input */
+ padding-left: 78px !important;
+}
+#app-navigation:not(.vue) > ul > li,
+#app-navigation:not(.vue) > ul > li > ul > li {
+ position: relative;
+ width: 100%;
+ box-sizing: border-box;
+ /* hide icons if loading */
+ /* Main entry link */
+ /* Bullet icon */
+ /* popover fix the flex positionning of the li parent */
+ /* show edit/undo field if editing/deleted */
+}
+#app-navigation:not(.vue) > ul > li.icon-loading-small > a,
+#app-navigation:not(.vue) > ul > li.icon-loading-small > .app-navigation-entry-bullet,
+#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > a,
+#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > .app-navigation-entry-bullet {
+ /* hide icon or bullet if loading state*/
+ background: transparent !important;
+}
+#app-navigation:not(.vue) > ul > li > a,
+#app-navigation:not(.vue) > ul > li > ul > li > a {
+ background-size: 16px 16px;
+ background-position: 14px center;
+ background-repeat: no-repeat;
+ display: block;
+ justify-content: space-between;
+ line-height: 44px;
+ min-height: 44px;
+ padding: 0 12px 0 14px;
+ overflow: hidden;
+ box-sizing: border-box;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ color: var(--color-main-text);
+ opacity: 0.8;
+ flex: 1 1 0px;
+ z-index: 100;
+ /* above the bullet to allow click*/
+ /* TODO: forbid using img as icon in menu? */
+ /* counter can also be inside the link */
+}
+#app-navigation:not(.vue) > ul > li > a.svg,
+#app-navigation:not(.vue) > ul > li > ul > li > a.svg {
+ padding: 0 12px 0 44px;
+}
+#app-navigation:not(.vue) > ul > li > a:first-child img,
+#app-navigation:not(.vue) > ul > li > ul > li > a:first-child img {
+ margin-right: 11px;
+ width: 16px;
+ height: 16px;
+ filter: var(--background-invert-if-dark);
+}
+#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils,
+#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils {
+ display: inline-block;
+ float: right;
+}
+#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter,
+#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter {
+ padding-right: 0 !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet,
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet {
+ position: absolute;
+ display: block;
+ margin: 16px;
+ width: 12px;
+ height: 12px;
+ border: none;
+ border-radius: 50%;
+ cursor: pointer;
+ transition: background 100ms ease-in-out;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet + a,
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet + a {
+ /* hide icon if bullet, can't have both */
+ background: transparent !important;
+}
+#app-navigation:not(.vue) > ul > li > .app-navigation-entry-menu,
+#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-menu {
+ top: 44px;
+}
+#app-navigation:not(.vue) > ul > li.editing .app-navigation-entry-edit,
+#app-navigation:not(.vue) > ul > li > ul > li.editing .app-navigation-entry-edit {
+ opacity: 1;
+ z-index: 250;
+}
+#app-navigation:not(.vue) > ul > li.deleted .app-navigation-entry-deleted,
+#app-navigation:not(.vue) > ul > li > ul > li.deleted .app-navigation-entry-deleted {
+ transform: translateX(0);
+ z-index: 250;
+}
+#app-navigation:not(.vue).hidden {
+ display: none;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button,
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button {
+ border: 0;
+ opacity: 0.5;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:hover, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:focus,
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover,
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus {
+ background-color: transparent;
+ opacity: 1;
+}
+#app-navigation:not(.vue) .collapsible {
+ /* Fallback for old collapse button.
+ TODO: to be removed. Leaved here for retro compatibility */
+ /* force padding on link no matter if 'a' has an icon class */
+}
+#app-navigation:not(.vue) .collapsible .collapse {
+ opacity: 0;
+ position: absolute;
+ width: 44px;
+ height: 44px;
+ margin: 0;
+ z-index: 110;
+ /* Needed for IE11; otherwise the button appears to the right of the
+ * link. */
+ left: 0;
+}
+#app-navigation:not(.vue) .collapsible:before {
+ position: absolute;
+ height: 44px;
+ width: 44px;
+ margin: 0;
+ padding: 0;
+ background: none;
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-triangle-s-dark);
+ background-size: 16px;
+ background-repeat: no-repeat;
+ background-position: center;
+ border: none;
+ border-radius: 0;
+ outline: none !important;
+ box-shadow: none;
+ content: " ";
+ opacity: 0;
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ z-index: 105;
+ background-color: var(--color-background-hover);
+ border-radius: 50%;
+ transition: opacity 100ms ease-in-out;
+}
+#app-navigation:not(.vue) .collapsible > a:first-child {
+ padding-left: 44px;
+}
+#app-navigation:not(.vue) .collapsible:hover:before, #app-navigation:not(.vue) .collapsible:focus:before {
+ opacity: 1;
+}
+#app-navigation:not(.vue) .collapsible:hover > .app-navigation-entry-bullet, #app-navigation:not(.vue) .collapsible:focus > .app-navigation-entry-bullet {
+ background: transparent !important;
+}
+#app-navigation:not(.vue) .collapsible.open:before {
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils {
+ flex: 0 1 auto;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils ul {
+ display: flex !important;
+ align-items: center;
+ justify-content: flex-end;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils li {
+ width: 44px !important;
+ height: 44px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils button {
+ height: 100%;
+ width: 100%;
+ margin: 0;
+ box-shadow: none;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button {
+ /* Prevent bg img override if an icon class is set */
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button button:not([class^=icon-]):not([class*=" icon-"]) {
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-more-dark);
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:hover button, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:focus button {
+ background-color: transparent;
+ opacity: 1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter {
+ overflow: hidden;
+ text-align: right;
+ font-size: 9pt;
+ line-height: 44px;
+ padding: 0 12px;
+ /* Same padding as all li > a in the app-navigation */
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted {
+ padding: 0;
+ text-align: center;
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted span {
+ padding: 2px 5px;
+ border-radius: 10px;
+ background-color: var(--color-primary);
+ color: var(--color-primary-text);
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit {
+ padding-left: 5px;
+ padding-right: 5px;
+ display: block;
+ width: calc(100% - 1px);
+ /* Avoid border overlapping */
+ transition: opacity 250ms ease-in-out;
+ opacity: 0;
+ position: absolute;
+ background-color: var(--color-main-background);
+ z-index: -1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit form,
+#app-navigation:not(.vue) .app-navigation-entry-edit div {
+ display: inline-flex;
+ width: 100%;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit input {
+ padding: 5px;
+ margin-right: 0;
+ height: 38px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit input:hover, #app-navigation:not(.vue) .app-navigation-entry-edit input:focus {
+ /* overlapp borders */
+ z-index: 1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit input[type=text] {
+ width: 100%;
+ min-width: 0;
+ /* firefox hack: override auto */
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button,
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]) {
+ width: 36px;
+ height: 38px;
+ flex: 0 0 36px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:last-child),
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:last-child) {
+ border-radius: 0 !important;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:first-child),
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:first-child) {
+ margin-left: -1px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit button:last-child,
+#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):last-child {
+ border-bottom-right-radius: var(--border-radius);
+ border-top-right-radius: var(--border-radius);
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted {
+ display: inline-flex;
+ padding-left: 44px;
+ transform: translateX(300px);
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-description {
+ position: relative;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ flex: 1 1 0px;
+ line-height: 44px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button {
+ margin: 0;
+ height: 44px;
+ width: 44px;
+ line-height: 44px;
+}
+#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover, #app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus {
+ opacity: 1;
+}
+#app-navigation:not(.vue) .app-navigation-entry-edit,
+#app-navigation:not(.vue) .app-navigation-entry-deleted {
+ width: calc(100% - 1px);
+ /* Avoid border overlapping */
+ transition: transform 250ms ease-in-out, opacity 250ms ease-in-out, z-index 250ms ease-in-out;
+ position: absolute;
+ left: 0;
+ background-color: var(--color-main-background);
+ box-sizing: border-box;
+}
+#app-navigation:not(.vue) .drag-and-drop {
+ -webkit-transition: padding-bottom 500ms ease 0s;
+ transition: padding-bottom 500ms ease 0s;
+ padding-bottom: 40px;
+}
+#app-navigation:not(.vue) .error {
+ color: var(--color-error);
+}
+#app-navigation:not(.vue) .app-navigation-entry-utils ul,
+#app-navigation:not(.vue) .app-navigation-entry-menu ul {
+ list-style-type: none;
+}
+
+/* CONTENT --------------------------------------------------------- */
+#content {
+ box-sizing: border-box;
+ position: relative;
+ display: flex;
+ padding-top: 50px;
+ min-height: 100%;
+}
+
+/* APP-CONTENT AND WRAPPER ------------------------------------------ */
+/* Part where the content will be loaded into */
+/**
+ * !Important. We are defining the minimum requirement we want for flex
+ * Just before the mobile breakpoint we have variables.$breakpoint-mobile (1024px) - variables.$navigation-width
+ * -> 468px. In that case we want 200px for the list and 268px for the content
+ */
+#app-content {
+ z-index: 1000;
+ background-color: var(--color-main-background);
+ position: relative;
+ flex-basis: 100vw;
+ min-height: 100%;
+ /* margin if navigation element is here */
+ /* no top border for first settings item */
+ /* if app-content-list is present */
+}
+#app-navigation:not(.hidden) + #app-content {
+ margin-left: 300px;
+}
+#app-content > .section:first-child {
+ border-top: none;
+}
+#app-content #app-content-wrapper {
+ display: flex;
+ position: relative;
+ align-items: stretch;
+ /* make sure we have at least full height for loaders or such
+ no need for list/details since we have a flex stretch */
+ min-height: 100%;
+ /* CONTENT DETAILS AFTER LIST*/
+}
+#app-content #app-content-wrapper .app-content-details {
+ /* grow full width */
+ flex: 1 1 524px;
+}
+#app-content #app-content-wrapper .app-content-details #app-navigation-toggle-back {
+ display: none;
+}
+
+/* APP-SIDEBAR ------------------------------------------------------------ */
+/*
+ Sidebar: a sidebar to be used within #content
+ #app-content will be shrinked properly
+*/
+#app-sidebar {
+ width: 27vw;
+ min-width: 300px;
+ max-width: 500px;
+ display: block;
+ position: -webkit-sticky;
+ position: sticky;
+ top: 50px;
+ right: 0;
+ overflow-y: auto;
+ overflow-x: hidden;
+ z-index: 1500;
+ height: calc(100vh - 50px);
+ background: var(--color-main-background);
+ border-left: 1px solid var(--color-border);
+ flex-shrink: 0;
+}
+#app-sidebar.disappear {
+ display: none;
+}
+
+/* APP-SETTINGS ------------------------------------------------------------ */
+/* settings area */
+#app-settings {
+ margin-top: auto;
+}
+#app-settings.open #app-settings-content, #app-settings.opened #app-settings-content {
+ display: block;
+}
+
+#app-settings-content {
+ display: none;
+ padding: 10px;
+ background-color: var(--color-main-background);
+ /* restrict height of settings and make scrollable */
+ max-height: 300px;
+ overflow-y: auto;
+ box-sizing: border-box;
+ /* display input fields at full width */
+}
+#app-settings-content input[type=text] {
+ width: 93%;
+}
+#app-settings-content .info-text {
+ padding: 5px 0 7px 22px;
+ color: var(--color-text-lighter);
+}
+#app-settings-content input[type=checkbox].radio + label, #app-settings-content input[type=checkbox].checkbox + label, #app-settings-content input[type=radio].radio + label, #app-settings-content input[type=radio].checkbox + label {
+ display: inline-block;
+ width: 100%;
+ padding: 5px 0;
+}
+
+#app-settings-header {
+ box-sizing: border-box;
+ background-color: var(--color-main-background);
+}
+
+#app-settings-header .settings-button {
+ display: flex;
+ align-items: center;
+ height: 44px;
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-main-background);
+ box-shadow: none;
+ border: 0;
+ border-radius: 0;
+ text-align: left;
+ font-weight: normal;
+ font-size: 100%;
+ opacity: 0.8;
+ /* like app-navigation a */
+ color: var(--color-main-text);
+}
+#app-settings-header .settings-button.opened {
+ border-top: solid 1px var(--color-border);
+ background-color: var(--color-main-background);
+}
+#app-settings-header .settings-button:hover, #app-settings-header .settings-button:focus {
+ background-color: var(--color-background-hover);
+}
+#app-settings-header .settings-button::before {
+ background-image: var(--icon-settings-dark);
+ background-position: 14px center;
+ background-repeat: no-repeat;
+ content: "";
+ width: 44px;
+ height: 44px;
+ top: 0;
+ left: 0;
+ display: block;
+ filter: var(--background-invert-if-dark);
+}
+
+/* GENERAL SECTION ------------------------------------------------------------ */
+.section {
+ display: block;
+ padding: 30px;
+ margin-bottom: 24px;
+ /* slight position correction of checkboxes and radio buttons */
+}
+.section.hidden {
+ display: none !important;
+}
+.section input[type=checkbox], .section input[type=radio] {
+ vertical-align: -2px;
+ margin-right: 4px;
+}
+
+.sub-section {
+ position: relative;
+ margin-top: 10px;
+ margin-left: 27px;
+ margin-bottom: 10px;
+}
+
+.appear {
+ opacity: 1;
+ -webkit-transition: opacity 500ms ease 0s;
+ -moz-transition: opacity 500ms ease 0s;
+ -ms-transition: opacity 500ms ease 0s;
+ -o-transition: opacity 500ms ease 0s;
+ transition: opacity 500ms ease 0s;
+}
+.appear.transparent {
+ opacity: 0;
+}
+
+/* TABS ------------------------------------------------------------ */
+.tabHeaders {
+ display: flex;
+ margin-bottom: 16px;
+}
+.tabHeaders .tabHeader {
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ text-align: center;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ cursor: pointer;
+ color: var(--color-text-lighter);
+ margin-bottom: 1px;
+ padding: 5px;
+ /* Use same amount as sidebar padding */
+}
+.tabHeaders .tabHeader.hidden {
+ display: none;
+}
+.tabHeaders .tabHeader:first-child {
+ padding-left: 15px;
+}
+.tabHeaders .tabHeader:last-child {
+ padding-right: 15px;
+}
+.tabHeaders .tabHeader .icon {
+ display: inline-block;
+ width: 100%;
+ height: 16px;
+ background-size: 16px;
+ vertical-align: middle;
+ margin-top: -2px;
+ margin-right: 3px;
+ opacity: 0.7;
+ cursor: pointer;
+}
+.tabHeaders .tabHeader a {
+ color: var(--color-text-lighter);
+ margin-bottom: 1px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.tabHeaders .tabHeader.selected {
+ font-weight: bold;
+}
+.tabHeaders .tabHeader.selected, .tabHeaders .tabHeader:hover, .tabHeaders .tabHeader:focus {
+ margin-bottom: 0px;
+ color: var(--color-main-text);
+ border-bottom: 1px solid var(--color-text-lighter);
+}
+
+.tabsContainer {
+ clear: left;
+}
+.tabsContainer .tab {
+ padding: 0 15px 15px;
+}
+
+/* POPOVER MENU ------------------------------------------------------------ */
+.ie .bubble, .ie .bubble:after,
+.ie .popovermenu, .ie .popovermenu:after,
+.ie #app-navigation .app-navigation-entry-menu,
+.ie #app-navigation .app-navigation-entry-menu:after,
+.edge .bubble,
+.edge .bubble:after,
+.edge .popovermenu,
+.edge .popovermenu:after,
+.edge #app-navigation .app-navigation-entry-menu,
+.edge #app-navigation .app-navigation-entry-menu:after {
+ border: 1px solid var(--color-border);
+}
+
+.bubble,
+.app-navigation-entry-menu,
+.popovermenu {
+ position: absolute;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ border-radius: var(--border-radius);
+ z-index: 110;
+ margin: 5px;
+ margin-top: -5px;
+ right: 0;
+ filter: drop-shadow(0 1px 3px var(--color-box-shadow));
+ display: none;
+ will-change: filter;
+ /* Center the popover */
+ /* Align the popover to the left */
+}
+.bubble:after,
+.app-navigation-entry-menu:after,
+.popovermenu:after {
+ bottom: 100%;
+ right: 7px;
+ /* change this to adjust the arrow position */
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-bottom-color: var(--color-main-background);
+ border-width: 9px;
+}
+.bubble.menu-center,
+.app-navigation-entry-menu.menu-center,
+.popovermenu.menu-center {
+ transform: translateX(50%);
+ right: 50%;
+ margin-right: 0;
+}
+.bubble.menu-center:after,
+.app-navigation-entry-menu.menu-center:after,
+.popovermenu.menu-center:after {
+ right: 50%;
+ transform: translateX(50%);
+}
+.bubble.menu-left,
+.app-navigation-entry-menu.menu-left,
+.popovermenu.menu-left {
+ right: auto;
+ left: 0;
+ margin-right: 0;
+}
+.bubble.menu-left:after,
+.app-navigation-entry-menu.menu-left:after,
+.popovermenu.menu-left:after {
+ left: 6px;
+ right: auto;
+}
+.bubble.open,
+.app-navigation-entry-menu.open,
+.popovermenu.open {
+ display: block;
+}
+.bubble.contactsmenu-popover,
+.app-navigation-entry-menu.contactsmenu-popover,
+.popovermenu.contactsmenu-popover {
+ margin: 0;
+}
+.bubble ul,
+.app-navigation-entry-menu ul,
+.popovermenu ul {
+ /* Overwrite #app-navigation > ul ul */
+ display: flex !important;
+ flex-direction: column;
+}
+.bubble li,
+.app-navigation-entry-menu li,
+.popovermenu li {
+ display: flex;
+ flex: 0 0 auto;
+ /* css hack, only first not hidden */
+}
+.bubble li.hidden,
+.app-navigation-entry-menu li.hidden,
+.popovermenu li.hidden {
+ display: none;
+}
+.bubble li > button,
+.bubble li > a,
+.bubble li > .menuitem,
+.app-navigation-entry-menu li > button,
+.app-navigation-entry-menu li > a,
+.app-navigation-entry-menu li > .menuitem,
+.popovermenu li > button,
+.popovermenu li > a,
+.popovermenu li > .menuitem {
+ cursor: pointer;
+ line-height: 44px;
+ border: 0;
+ border-radius: 0;
+ background-color: transparent;
+ display: flex;
+ align-items: flex-start;
+ height: auto;
+ margin: 0;
+ font-weight: normal;
+ box-shadow: none;
+ width: 100%;
+ color: var(--color-main-text);
+ white-space: nowrap;
+ /* prevent .action class to break the design */
+ /* Add padding if contains icon+text */
+ /* DEPRECATED! old img in popover fallback
+ * TODO: to remove */
+ /* checkbox/radio fixes */
+ /* no margin if hidden span before */
+ /* Inputs inside popover supports text, submit & reset */
+}
+.bubble li > button span[class^=icon-],
+.bubble li > button span[class*=" icon-"], .bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"],
+.bubble li > a span[class^=icon-],
+.bubble li > a span[class*=" icon-"],
+.bubble li > a[class^=icon-],
+.bubble li > a[class*=" icon-"],
+.bubble li > .menuitem span[class^=icon-],
+.bubble li > .menuitem span[class*=" icon-"],
+.bubble li > .menuitem[class^=icon-],
+.bubble li > .menuitem[class*=" icon-"],
+.app-navigation-entry-menu li > button span[class^=icon-],
+.app-navigation-entry-menu li > button span[class*=" icon-"],
+.app-navigation-entry-menu li > button[class^=icon-],
+.app-navigation-entry-menu li > button[class*=" icon-"],
+.app-navigation-entry-menu li > a span[class^=icon-],
+.app-navigation-entry-menu li > a span[class*=" icon-"],
+.app-navigation-entry-menu li > a[class^=icon-],
+.app-navigation-entry-menu li > a[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem span[class^=icon-],
+.app-navigation-entry-menu li > .menuitem span[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem[class^=icon-],
+.app-navigation-entry-menu li > .menuitem[class*=" icon-"],
+.popovermenu li > button span[class^=icon-],
+.popovermenu li > button span[class*=" icon-"],
+.popovermenu li > button[class^=icon-],
+.popovermenu li > button[class*=" icon-"],
+.popovermenu li > a span[class^=icon-],
+.popovermenu li > a span[class*=" icon-"],
+.popovermenu li > a[class^=icon-],
+.popovermenu li > a[class*=" icon-"],
+.popovermenu li > .menuitem span[class^=icon-],
+.popovermenu li > .menuitem span[class*=" icon-"],
+.popovermenu li > .menuitem[class^=icon-],
+.popovermenu li > .menuitem[class*=" icon-"] {
+ min-width: 0;
+ /* Overwrite icons*/
+ min-height: 0;
+ background-position: 14px center;
+ background-size: 16px;
+}
+.bubble li > button span[class^=icon-],
+.bubble li > button span[class*=" icon-"],
+.bubble li > a span[class^=icon-],
+.bubble li > a span[class*=" icon-"],
+.bubble li > .menuitem span[class^=icon-],
+.bubble li > .menuitem span[class*=" icon-"],
+.app-navigation-entry-menu li > button span[class^=icon-],
+.app-navigation-entry-menu li > button span[class*=" icon-"],
+.app-navigation-entry-menu li > a span[class^=icon-],
+.app-navigation-entry-menu li > a span[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem span[class^=icon-],
+.app-navigation-entry-menu li > .menuitem span[class*=" icon-"],
+.popovermenu li > button span[class^=icon-],
+.popovermenu li > button span[class*=" icon-"],
+.popovermenu li > a span[class^=icon-],
+.popovermenu li > a span[class*=" icon-"],
+.popovermenu li > .menuitem span[class^=icon-],
+.popovermenu li > .menuitem span[class*=" icon-"] {
+ /* Keep padding to define the width to
+ assure correct position of a possible text */
+ padding: 22px 0 22px 44px;
+}
+.bubble li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child,
+.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child {
+ margin-left: 44px;
+}
+.bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"],
+.bubble li > a[class^=icon-],
+.bubble li > a[class*=" icon-"],
+.bubble li > .menuitem[class^=icon-],
+.bubble li > .menuitem[class*=" icon-"],
+.app-navigation-entry-menu li > button[class^=icon-],
+.app-navigation-entry-menu li > button[class*=" icon-"],
+.app-navigation-entry-menu li > a[class^=icon-],
+.app-navigation-entry-menu li > a[class*=" icon-"],
+.app-navigation-entry-menu li > .menuitem[class^=icon-],
+.app-navigation-entry-menu li > .menuitem[class*=" icon-"],
+.popovermenu li > button[class^=icon-],
+.popovermenu li > button[class*=" icon-"],
+.popovermenu li > a[class^=icon-],
+.popovermenu li > a[class*=" icon-"],
+.popovermenu li > .menuitem[class^=icon-],
+.popovermenu li > .menuitem[class*=" icon-"] {
+ padding: 0 14px 0 44px !important;
+}
+.bubble li > button:hover, .bubble li > button:focus,
+.bubble li > a:hover,
+.bubble li > a:focus,
+.bubble li > .menuitem:hover,
+.bubble li > .menuitem:focus,
+.app-navigation-entry-menu li > button:hover,
+.app-navigation-entry-menu li > button:focus,
+.app-navigation-entry-menu li > a:hover,
+.app-navigation-entry-menu li > a:focus,
+.app-navigation-entry-menu li > .menuitem:hover,
+.app-navigation-entry-menu li > .menuitem:focus,
+.popovermenu li > button:hover,
+.popovermenu li > button:focus,
+.popovermenu li > a:hover,
+.popovermenu li > a:focus,
+.popovermenu li > .menuitem:hover,
+.popovermenu li > .menuitem:focus {
+ background-color: var(--color-background-hover);
+}
+.bubble li > button.active,
+.bubble li > a.active,
+.bubble li > .menuitem.active,
+.app-navigation-entry-menu li > button.active,
+.app-navigation-entry-menu li > a.active,
+.app-navigation-entry-menu li > .menuitem.active,
+.popovermenu li > button.active,
+.popovermenu li > a.active,
+.popovermenu li > .menuitem.active {
+ background-color: var(--color-primary-light);
+}
+.bubble li > button.action,
+.bubble li > a.action,
+.bubble li > .menuitem.action,
+.app-navigation-entry-menu li > button.action,
+.app-navigation-entry-menu li > a.action,
+.app-navigation-entry-menu li > .menuitem.action,
+.popovermenu li > button.action,
+.popovermenu li > a.action,
+.popovermenu li > .menuitem.action {
+ padding: inherit !important;
+}
+.bubble li > button > span,
+.bubble li > a > span,
+.bubble li > .menuitem > span,
+.app-navigation-entry-menu li > button > span,
+.app-navigation-entry-menu li > a > span,
+.app-navigation-entry-menu li > .menuitem > span,
+.popovermenu li > button > span,
+.popovermenu li > a > span,
+.popovermenu li > .menuitem > span {
+ cursor: pointer;
+ white-space: nowrap;
+}
+.bubble li > button > p,
+.bubble li > a > p,
+.bubble li > .menuitem > p,
+.app-navigation-entry-menu li > button > p,
+.app-navigation-entry-menu li > a > p,
+.app-navigation-entry-menu li > .menuitem > p,
+.popovermenu li > button > p,
+.popovermenu li > a > p,
+.popovermenu li > .menuitem > p {
+ width: 150px;
+ line-height: 1.6em;
+ padding: 8px 0;
+ white-space: normal;
+}
+.bubble li > button > select,
+.bubble li > a > select,
+.bubble li > .menuitem > select,
+.app-navigation-entry-menu li > button > select,
+.app-navigation-entry-menu li > a > select,
+.app-navigation-entry-menu li > .menuitem > select,
+.popovermenu li > button > select,
+.popovermenu li > a > select,
+.popovermenu li > .menuitem > select {
+ margin: 0;
+ margin-left: 6px;
+}
+.bubble li > button:not(:empty),
+.bubble li > a:not(:empty),
+.bubble li > .menuitem:not(:empty),
+.app-navigation-entry-menu li > button:not(:empty),
+.app-navigation-entry-menu li > a:not(:empty),
+.app-navigation-entry-menu li > .menuitem:not(:empty),
+.popovermenu li > button:not(:empty),
+.popovermenu li > a:not(:empty),
+.popovermenu li > .menuitem:not(:empty) {
+ padding-right: 14px !important;
+}
+.bubble li > button > img,
+.bubble li > a > img,
+.bubble li > .menuitem > img,
+.app-navigation-entry-menu li > button > img,
+.app-navigation-entry-menu li > a > img,
+.app-navigation-entry-menu li > .menuitem > img,
+.popovermenu li > button > img,
+.popovermenu li > a > img,
+.popovermenu li > .menuitem > img {
+ width: 16px;
+ padding: 14px;
+}
+.bubble li > button > input.radio + label,
+.bubble li > button > input.checkbox + label,
+.bubble li > a > input.radio + label,
+.bubble li > a > input.checkbox + label,
+.bubble li > .menuitem > input.radio + label,
+.bubble li > .menuitem > input.checkbox + label,
+.app-navigation-entry-menu li > button > input.radio + label,
+.app-navigation-entry-menu li > button > input.checkbox + label,
+.app-navigation-entry-menu li > a > input.radio + label,
+.app-navigation-entry-menu li > a > input.checkbox + label,
+.app-navigation-entry-menu li > .menuitem > input.radio + label,
+.app-navigation-entry-menu li > .menuitem > input.checkbox + label,
+.popovermenu li > button > input.radio + label,
+.popovermenu li > button > input.checkbox + label,
+.popovermenu li > a > input.radio + label,
+.popovermenu li > a > input.checkbox + label,
+.popovermenu li > .menuitem > input.radio + label,
+.popovermenu li > .menuitem > input.checkbox + label {
+ padding: 0 !important;
+ width: 100%;
+}
+.bubble li > button > input.checkbox + label::before,
+.bubble li > a > input.checkbox + label::before,
+.bubble li > .menuitem > input.checkbox + label::before,
+.app-navigation-entry-menu li > button > input.checkbox + label::before,
+.app-navigation-entry-menu li > a > input.checkbox + label::before,
+.app-navigation-entry-menu li > .menuitem > input.checkbox + label::before,
+.popovermenu li > button > input.checkbox + label::before,
+.popovermenu li > a > input.checkbox + label::before,
+.popovermenu li > .menuitem > input.checkbox + label::before {
+ margin: -2px 13px 0;
+}
+.bubble li > button > input.radio + label::before,
+.bubble li > a > input.radio + label::before,
+.bubble li > .menuitem > input.radio + label::before,
+.app-navigation-entry-menu li > button > input.radio + label::before,
+.app-navigation-entry-menu li > a > input.radio + label::before,
+.app-navigation-entry-menu li > .menuitem > input.radio + label::before,
+.popovermenu li > button > input.radio + label::before,
+.popovermenu li > a > input.radio + label::before,
+.popovermenu li > .menuitem > input.radio + label::before {
+ margin: -2px 12px 0;
+}
+.bubble li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.bubble li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.bubble li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.app-navigation-entry-menu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.app-navigation-entry-menu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.app-navigation-entry-menu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.popovermenu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.popovermenu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]),
+.popovermenu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]) {
+ width: 150px;
+}
+.bubble li > button form,
+.bubble li > a form,
+.bubble li > .menuitem form,
+.app-navigation-entry-menu li > button form,
+.app-navigation-entry-menu li > a form,
+.app-navigation-entry-menu li > .menuitem form,
+.popovermenu li > button form,
+.popovermenu li > a form,
+.popovermenu li > .menuitem form {
+ display: flex;
+ flex: 1 1 auto;
+ /* put a small space between text and form
+ if there is an element before */
+}
+.bubble li > button form:not(:first-child),
+.bubble li > a form:not(:first-child),
+.bubble li > .menuitem form:not(:first-child),
+.app-navigation-entry-menu li > button form:not(:first-child),
+.app-navigation-entry-menu li > a form:not(:first-child),
+.app-navigation-entry-menu li > .menuitem form:not(:first-child),
+.popovermenu li > button form:not(:first-child),
+.popovermenu li > a form:not(:first-child),
+.popovermenu li > .menuitem form:not(:first-child) {
+ margin-left: 5px;
+}
+.bubble li > button > span.hidden + form,
+.bubble li > button > span[style*="display:none"] + form,
+.bubble li > a > span.hidden + form,
+.bubble li > a > span[style*="display:none"] + form,
+.bubble li > .menuitem > span.hidden + form,
+.bubble li > .menuitem > span[style*="display:none"] + form,
+.app-navigation-entry-menu li > button > span.hidden + form,
+.app-navigation-entry-menu li > button > span[style*="display:none"] + form,
+.app-navigation-entry-menu li > a > span.hidden + form,
+.app-navigation-entry-menu li > a > span[style*="display:none"] + form,
+.app-navigation-entry-menu li > .menuitem > span.hidden + form,
+.app-navigation-entry-menu li > .menuitem > span[style*="display:none"] + form,
+.popovermenu li > button > span.hidden + form,
+.popovermenu li > button > span[style*="display:none"] + form,
+.popovermenu li > a > span.hidden + form,
+.popovermenu li > a > span[style*="display:none"] + form,
+.popovermenu li > .menuitem > span.hidden + form,
+.popovermenu li > .menuitem > span[style*="display:none"] + form {
+ margin-left: 0;
+}
+.bubble li > button input,
+.bubble li > a input,
+.bubble li > .menuitem input,
+.app-navigation-entry-menu li > button input,
+.app-navigation-entry-menu li > a input,
+.app-navigation-entry-menu li > .menuitem input,
+.popovermenu li > button input,
+.popovermenu li > a input,
+.popovermenu li > .menuitem input {
+ min-width: 44px;
+ max-height: 40px;
+ /* twice the element margin-y */
+ margin: 2px 0;
+ flex: 1 1 auto;
+}
+.bubble li > button input:not(:first-child),
+.bubble li > a input:not(:first-child),
+.bubble li > .menuitem input:not(:first-child),
+.app-navigation-entry-menu li > button input:not(:first-child),
+.app-navigation-entry-menu li > a input:not(:first-child),
+.app-navigation-entry-menu li > .menuitem input:not(:first-child),
+.popovermenu li > button input:not(:first-child),
+.popovermenu li > a input:not(:first-child),
+.popovermenu li > .menuitem input:not(:first-child) {
+ margin-left: 5px;
+}
+.bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input {
+ margin-top: 12px;
+}
+.bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form,
+.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form,
+.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input {
+ margin-bottom: 12px;
+}
+.bubble li > button,
+.app-navigation-entry-menu li > button,
+.popovermenu li > button {
+ padding: 0;
+}
+.bubble li > button span,
+.app-navigation-entry-menu li > button span,
+.popovermenu li > button span {
+ opacity: 1;
+}
+
+/* "app-*" descendants use border-box sizing, so the height of the icon must be
+ * set to the height of the item (as well as its width to make it squared). */
+#content[class*=app-] .bubble li > button,
+#content[class*=app-] .bubble li > a,
+#content[class*=app-] .bubble li > .menuitem,
+#content[class*=app-] .app-navigation-entry-menu li > button,
+#content[class*=app-] .app-navigation-entry-menu li > a,
+#content[class*=app-] .app-navigation-entry-menu li > .menuitem,
+#content[class*=app-] .popovermenu li > button,
+#content[class*=app-] .popovermenu li > a,
+#content[class*=app-] .popovermenu li > .menuitem {
+ /* DEPRECATED! old img in popover fallback
+ * TODO: to remove */
+}
+#content[class*=app-] .bubble li > button > img,
+#content[class*=app-] .bubble li > a > img,
+#content[class*=app-] .bubble li > .menuitem > img,
+#content[class*=app-] .app-navigation-entry-menu li > button > img,
+#content[class*=app-] .app-navigation-entry-menu li > a > img,
+#content[class*=app-] .app-navigation-entry-menu li > .menuitem > img,
+#content[class*=app-] .popovermenu li > button > img,
+#content[class*=app-] .popovermenu li > a > img,
+#content[class*=app-] .popovermenu li > .menuitem > img {
+ width: 44px;
+ height: 44px;
+}
+
+/* CONTENT LIST ------------------------------------------------------------ */
+.app-content-list {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 50px;
+ border-right: 1px solid var(--color-border);
+ display: flex;
+ flex-direction: column;
+ transition: transform 250ms ease-in-out;
+ min-height: calc(100vh - 50px);
+ max-height: calc(100vh - 50px);
+ overflow-y: auto;
+ overflow-x: hidden;
+ flex: 1 1 200px;
+ min-width: 200px;
+ max-width: 300px;
+ /* Default item */
+}
+.app-content-list .app-content-list-item {
+ position: relative;
+ height: 68px;
+ cursor: pointer;
+ padding: 10px 7px;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ flex: 0 0 auto;
+ /* Icon fixes */
+}
+.app-content-list .app-content-list-item > [class^=icon-],
+.app-content-list .app-content-list-item > [class*=" icon-"],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"] {
+ order: 4;
+ width: 24px;
+ height: 24px;
+ margin: -7px;
+ padding: 22px;
+ opacity: 0.3;
+ cursor: pointer;
+}
+.app-content-list .app-content-list-item > [class^=icon-]:hover, .app-content-list .app-content-list-item > [class^=icon-]:focus,
+.app-content-list .app-content-list-item > [class*=" icon-"]:hover,
+.app-content-list .app-content-list-item > [class*=" icon-"]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:focus {
+ opacity: 0.7;
+}
+.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star], .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"],
+.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star],
+.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star],
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"] {
+ opacity: 0.7;
+}
+.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:hover, .app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:focus, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:hover, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:focus,
+.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:hover,
+.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:focus,
+.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:hover,
+.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:focus,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:hover,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:focus {
+ opacity: 1;
+}
+.app-content-list .app-content-list-item > [class^=icon-].icon-starred,
+.app-content-list .app-content-list-item > [class*=" icon-"].icon-starred,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-].icon-starred,
+.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"].icon-starred {
+ opacity: 1;
+}
+.app-content-list .app-content-list-item:hover, .app-content-list .app-content-list-item:focus, .app-content-list .app-content-list-item.active {
+ background-color: var(--color-background-dark);
+}
+.app-content-list .app-content-list-item:hover .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item:focus .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item.active .app-content-list-item-checkbox.checkbox + label {
+ display: flex;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label,
+.app-content-list .app-content-list-item .app-content-list-item-star {
+ position: absolute;
+ height: 40px;
+ width: 40px;
+ z-index: 50;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label {
+ display: flex;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label + .app-content-list-item-icon {
+ opacity: 0.7;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label {
+ top: 14px;
+ left: 7px;
+ display: none;
+ /* Hide the star, priority to the checkbox */
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label::before {
+ margin: 0;
+}
+.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label ~ .app-content-list-item-star {
+ display: none;
+}
+.app-content-list .app-content-list-item .app-content-list-item-star {
+ display: flex;
+ top: 10px;
+ left: 32px;
+ background-size: 16px;
+ height: 20px;
+ width: 20px;
+ margin: 0;
+ padding: 0;
+}
+.app-content-list .app-content-list-item .app-content-list-item-icon {
+ position: absolute;
+ display: inline-block;
+ height: 40px;
+ width: 40px;
+ line-height: 40px;
+ border-radius: 50%;
+ vertical-align: middle;
+ margin-right: 10px;
+ color: #fff;
+ text-align: center;
+ font-size: 1.5em;
+ text-transform: capitalize;
+ object-fit: cover;
+ user-select: none;
+ cursor: pointer;
+ top: 50%;
+ margin-top: -20px;
+}
+.app-content-list .app-content-list-item .app-content-list-item-line-one,
+.app-content-list .app-content-list-item .app-content-list-item-line-two {
+ display: block;
+ padding-left: 50px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ order: 1;
+ flex: 1 1 0px;
+ padding-right: 10px;
+ cursor: pointer;
+}
+.app-content-list .app-content-list-item .app-content-list-item-line-two {
+ opacity: 0.5;
+ order: 3;
+ flex: 1 0;
+ flex-basis: calc(100% - 44px);
+}
+.app-content-list .app-content-list-item .app-content-list-item-details {
+ order: 2;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 100px;
+ opacity: 0.5;
+ font-size: 80%;
+ user-select: none;
+}
+.app-content-list .app-content-list-item .app-content-list-item-menu {
+ order: 4;
+ position: relative;
+}
+.app-content-list .app-content-list-item .app-content-list-item-menu .popovermenu {
+ margin: 0;
+ right: -2px;
+}
+.app-content-list.selection .app-content-list-item-checkbox.checkbox + label {
+ display: flex;
+}
+
+/* Copyright (c) 2015, Raghu Nayyar, http://raghunayyar.com
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+/* Global Components */
+.pull-left {
+ float: left;
+}
+
+.pull-right {
+ float: right;
+}
+
+.clear-left {
+ clear: left;
+}
+
+.clear-right {
+ clear: right;
+}
+
+.clear-both {
+ clear: both;
+}
+
+.hidden {
+ display: none;
+}
+
+.hidden-visually {
+ position: absolute;
+ left: -10000px;
+ top: -10000px;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+
+.bold {
+ font-weight: 600;
+}
+
+.center {
+ text-align: center;
+}
+
+.inlineblock {
+ display: inline-block;
+}
+
+/* ---- BROWSER-SPECIFIC FIXES ---- */
+/* remove dotted outlines in Firefox */
+::-moz-focus-inner {
+ border: 0;
+}
+
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+@media only screen and (max-width: 1024px) {
+ /* position share dropdown */
+ #dropdown {
+ margin-right: 10% !important;
+ width: 80% !important;
+ }
+
+ /* fix name autocomplete not showing on mobile */
+ .ui-autocomplete {
+ z-index: 1000 !important;
+ }
+
+ /* fix error display on smaller screens */
+ .error-wide {
+ width: 100%;
+ margin-left: 0 !important;
+ box-sizing: border-box;
+ }
+
+ /* APP SIDEBAR TOGGLE and SWIPE ----------------------------------------------*/
+ #app-navigation {
+ transform: translateX(-300px);
+ }
+
+ .snapjs-left #app-navigation {
+ transform: translateX(0);
+ }
+
+ #app-navigation:not(.hidden) + #app-content {
+ margin-left: 0;
+ }
+
+ .skip-navigation.skip-content {
+ left: 3px;
+ margin-left: 0;
+ }
+
+ /* full width for message list on mobile */
+ .app-content-list {
+ background: var(--color-main-background);
+ flex: 1 1 100%;
+ max-height: unset;
+ max-width: 100%;
+ }
+ .app-content-list + .app-content-details {
+ display: none;
+ }
+ .app-content-list.showdetails {
+ display: none;
+ }
+ .app-content-list.showdetails + .app-content-details {
+ display: initial;
+ }
+
+ /* Show app details page */
+ #app-content.showdetails #app-navigation-toggle {
+ transform: translateX(-44px);
+ }
+ #app-content.showdetails #app-navigation-toggle-back {
+ position: fixed;
+ display: inline-block !important;
+ top: 50px;
+ left: 0;
+ width: 44px;
+ height: 44px;
+ z-index: 1050;
+ background-color: rgba(255, 255, 255, 0.7);
+ cursor: pointer;
+ opacity: 0.6;
+ transform: rotate(90deg);
+ }
+ #app-content.showdetails .app-content-list {
+ transform: translateX(-100%);
+ }
+
+ #app-navigation-toggle {
+ position: fixed;
+ display: inline-block !important;
+ left: 0;
+ width: 44px;
+ height: 44px;
+ z-index: 1050;
+ cursor: pointer;
+ opacity: 0.6;
+ }
+
+ #app-navigation-toggle:hover,
+#app-navigation-toggle:focus {
+ opacity: 1;
+ }
+
+ /* position controls for apps with app-navigation */
+ #app-navigation + #app-content #controls {
+ padding-left: 44px;
+ }
+
+ /* .viewer-mode is when text editor, PDF viewer, etc is open */
+ #body-user .app-files.viewer-mode #controls {
+ padding-left: 0 !important;
+ }
+
+ .app-files.viewer-mode #app-navigation-toggle {
+ display: none !important;
+ }
+
+ table.multiselect thead {
+ left: 0 !important;
+ }
+
+ /* prevent overflow in user management controls bar */
+ #usersearchform {
+ display: none;
+ }
+
+ #body-settings #controls {
+ min-width: 1024px !important;
+ }
+
+ /* do not show dates in filepicker */
+ #oc-dialog-filepicker-content .filelist #headerSize,
+#oc-dialog-filepicker-content .filelist #headerDate,
+#oc-dialog-filepicker-content .filelist .filesize,
+#oc-dialog-filepicker-content .filelist .date {
+ display: none;
+ }
+
+ #oc-dialog-filepicker-content .filelist .filename {
+ max-width: 100%;
+ }
+
+ .snapjs-left table.multiselect thead {
+ top: 44px;
+ }
+
+ /* end of media query */
+}
+@media only screen and (max-width: 480px) {
+ #header .header-right > div > .menu {
+ max-width: calc(100vw - 10px);
+ position: fixed;
+ }
+ #header .header-right > div > .menu::after {
+ display: none !important;
+ }
+
+ /* Arrow directly child of menutoggle */
+ #header .header-right > div {
+ /* settings need a different offset, since they have a right padding */
+ }
+ #header .header-right > div.openedMenu::after {
+ display: block;
+ }
+ #header .header-right > div::after {
+ border: 10px solid transparent;
+ border-bottom-color: var(--color-main-background);
+ bottom: 0;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ right: 15px;
+ z-index: 2001;
+ display: none;
+ }
+ #header .header-right > div#settings::after {
+ right: 27px;
+ }
+
+ #notification-container {
+ max-width: 100%;
+ width: 100%;
+ }
+}
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ *
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.tooltip {
+ position: absolute;
+ display: block;
+ font-family: var(--font-face);
+ font-style: normal;
+ font-weight: normal;
+ letter-spacing: normal;
+ line-break: auto;
+ line-height: 1.6;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ white-space: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ overflow-wrap: anywhere;
+ font-size: 12px;
+ opacity: 0;
+ z-index: 100000;
+ /* default to top */
+ margin-top: -3px;
+ padding: 10px 0;
+ filter: drop-shadow(0 1px 10px var(--color-box-shadow));
+ /* TOP */
+ /* BOTTOM */
+}
+.tooltip.in, .tooltip.show, .tooltip.tooltip[aria-hidden=false] {
+ visibility: visible;
+ opacity: 1;
+ transition: opacity 0.15s;
+}
+.tooltip.top .tooltip-arrow, .tooltip[x-placement^=top] {
+ left: 50%;
+ margin-left: -10px;
+}
+.tooltip.bottom, .tooltip[x-placement^=bottom] {
+ margin-top: 3px;
+ padding: 10px 0;
+}
+.tooltip.right, .tooltip[x-placement^=right] {
+ margin-left: 3px;
+ padding: 0 10px;
+}
+.tooltip.right .tooltip-arrow, .tooltip[x-placement^=right] .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -10px;
+ border-width: 10px 10px 10px 0;
+ border-right-color: var(--color-main-background);
+}
+.tooltip.left, .tooltip[x-placement^=left] {
+ margin-left: -3px;
+ padding: 0 5px;
+}
+.tooltip.left .tooltip-arrow, .tooltip[x-placement^=left] .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -10px;
+ border-width: 10px 0 10px 10px;
+ border-left-color: var(--color-main-background);
+}
+.tooltip.top .tooltip-arrow, .tooltip.top .arrow, .tooltip.top-left .tooltip-arrow, .tooltip.top-left .arrow, .tooltip[x-placement^=top] .tooltip-arrow, .tooltip[x-placement^=top] .arrow, .tooltip.top-right .tooltip-arrow, .tooltip.top-right .arrow {
+ bottom: 0;
+ border-width: 10px 10px 0;
+ border-top-color: var(--color-main-background);
+}
+.tooltip.top-left .tooltip-arrow {
+ right: 10px;
+ margin-bottom: -10px;
+}
+.tooltip.top-right .tooltip-arrow {
+ left: 10px;
+ margin-bottom: -10px;
+}
+.tooltip.bottom .tooltip-arrow, .tooltip.bottom .arrow, .tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip[x-placement^=bottom] .arrow, .tooltip.bottom-left .tooltip-arrow, .tooltip.bottom-left .arrow, .tooltip.bottom-right .tooltip-arrow, .tooltip.bottom-right .arrow {
+ top: 0;
+ border-width: 0 10px 10px;
+ border-bottom-color: var(--color-main-background);
+}
+.tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip.bottom .tooltip-arrow {
+ left: 50%;
+ margin-left: -10px;
+}
+.tooltip.bottom-left .tooltip-arrow {
+ right: 10px;
+ margin-top: -10px;
+}
+.tooltip.bottom-right .tooltip-arrow {
+ left: 10px;
+ margin-top: -10px;
+}
+
+.tooltip-inner {
+ max-width: 350px;
+ padding: 5px 8px;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ text-align: center;
+ border-radius: var(--border-radius);
+}
+
+.tooltip-arrow, .tooltip .arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+/**
+ * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+.toastify.dialogs {
+ min-width: 200px;
+ background: none;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ box-shadow: 0 0 6px 0 var(--color-box-shadow);
+ padding: 12px;
+ padding-right: 34px;
+ margin-top: 45px;
+ position: fixed;
+ z-index: 10100;
+ border-radius: var(--border-radius);
+}
+.toastify.dialogs .toast-undo-button,
+.toastify.dialogs .toast-close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ overflow: hidden;
+ box-sizing: border-box;
+ min-width: 44px;
+ height: 100%;
+ padding: 12px;
+ white-space: nowrap;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-color: transparent;
+ min-height: 0;
+}
+.toastify.dialogs .toast-undo-button.toast-close,
+.toastify.dialogs .toast-close.toast-close {
+ background-image: url("./close.svg");
+ text-indent: 200%;
+ opacity: 0.4;
+}
+.toastify.dialogs .toast-undo-button.toast-undo-button,
+.toastify.dialogs .toast-close.toast-undo-button {
+ margin: 3px;
+ height: calc(100% - 2 * 3px);
+}
+.toastify.dialogs .toast-undo-button:hover, .toastify.dialogs .toast-undo-button:focus, .toastify.dialogs .toast-undo-button:active,
+.toastify.dialogs .toast-close:hover,
+.toastify.dialogs .toast-close:focus,
+.toastify.dialogs .toast-close:active {
+ cursor: pointer;
+ opacity: 1;
+}
+.toastify.dialogs.toastify-top {
+ right: 10px;
+}
+.toastify.dialogs.toast-with-click {
+ cursor: pointer;
+}
+.toastify.dialogs.toast-error {
+ border-left: 3px solid var(--color-error);
+}
+.toastify.dialogs.toast-info {
+ border-left: 3px solid var(--color-primary);
+}
+.toastify.dialogs.toast-warning {
+ border-left: 3px solid var(--color-warning);
+}
+.toastify.dialogs.toast-success {
+ border-left: 3px solid var(--color-success);
+}
+.toastify.dialogs.toast-undo {
+ border-left: 3px solid var(--color-success);
+}
+
+/* dark theme overrides */
+.theme--dark .toastify.dialogs .toast-close {
+ /* close icon style */
+}
+.theme--dark .toastify.dialogs .toast-close.toast-close {
+ background-image: url("./close-dark.svg");
+}
+
+#body-public {
+ /** don't apply content header padding on the base layout */
+ /* force layout to make sure the content element's height matches its contents' height */
+ /* public footer */
+}
+#body-public .header-right #header-primary-action a {
+ color: var(--color-primary-text);
+}
+#body-public .header-right #header-secondary-action ul li {
+ min-width: 270px;
+}
+#body-public .header-right #header-secondary-action #header-actions-toggle {
+ background-color: transparent;
+ border-color: transparent;
+}
+#body-public .header-right #header-secondary-action #header-actions-toggle:hover, #body-public .header-right #header-secondary-action #header-actions-toggle:focus, #body-public .header-right #header-secondary-action #header-actions-toggle:active {
+ opacity: 1;
+}
+#body-public .header-right #header-secondary-action #external-share-menu-item form {
+ display: flex;
+}
+#body-public .header-right #header-secondary-action #external-share-menu-item .hidden {
+ display: none;
+}
+#body-public .header-right #header-secondary-action #external-share-menu-item #save-button-confirm {
+ flex-grow: 0;
+}
+#body-public #content {
+ min-height: calc(100% - 65px);
+}
+#body-public.layout-base #content {
+ padding-top: 0;
+}
+#body-public .ie #content {
+ display: inline-block;
+}
+#body-public p.info {
+ margin: 20px auto;
+ text-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+#body-public p.info, #body-public form fieldset legend,
+#body-public #datadirContent label,
+#body-public form fieldset .warning-info,
+#body-public form input[type=checkbox] + label {
+ text-align: center;
+}
+#body-public footer {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 65px;
+ flex-direction: column;
+}
+#body-public footer p {
+ text-align: center;
+ color: var(--color-text-lighter);
+}
+#body-public footer p a {
+ color: var(--color-text-lighter);
+ font-weight: bold;
+ white-space: nowrap;
+ /* increasing clickability to more than the text height */
+ padding: 10px;
+ margin: -10px;
+ line-height: 200%;
+}
+
+/*# sourceMappingURL=server.css.map */
diff --git a/core/css/server.css.map b/core/css/server.css.map
new file mode 100644
index 00000000000..779df1379e3
--- /dev/null
+++ b/core/css/server.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss","icons.scss","styles.scss","inputs.scss","functions.scss","header.scss","apps.scss","global.scss","fixes.scss","mobile.scss","tooltip.scss","../../node_modules/@nextcloud/dialogs/styles/toast.scss","public.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC8IQ;AC9IR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;;AAKH;AAEA;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAID;AAEA;EACC;EACA;;;AAID;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAa;EACb;EACA;EACA;EACA;EACA;EACA,KFxFe;;;AE2FhB;AAEA;EACC;;;AAGD;EACC;;;AAMC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;AAEA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;;;AAGD;AAEA;AAEA;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAIC;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAIA;EACC;EACA;;;AAKD;EACC;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;EACA;;;AAIF;EACC;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;AACA;AAEA;AAEA;AAEA;EACC;EACA;;AACA;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;AANA;EACC;EACA;;AAKD;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;EACC;;;AAIA;AAAA;EAGC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAED;EACC;;AAEA;EACC;;AAED;EACC;;AAGF;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAGA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;;AAMJ;EACC;EACA;;;AAID;AACA;EACC;EACA;EACA;EACA;AAwBA;;AAtBA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAIF;EACC;;AAGA;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;;AAGA;AAAA;AAAA;EAIC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;;AAMJ;AAGC;AAAA;EACC;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AACA;EACC;EACA;EACA;AA0BA;;AAxBA;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGA;EACC;;AAED;EACC;;AAED;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AAKF;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;AACA;AACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;AACC;EACA;EACA;;AAEC;EACC;EACA;;AACA;EACC;EACA;;AAIH;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EAGC;;AAED;AAAA;EAEC;;AAGD;EACC;EACA;;AAED;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EAIC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAhBS;EAiBT;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,aA/BU;EAgCV;;AACA;EACC;;AAGF;EACC;EACA;;AAED;EACC;;AAON;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;;;AAGD;AAGC;EACC;EACA;EACA;EAEA;EACA;;AAEA;EAGC;;;AAKH;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AACA;AAAA;EAEC;;AAIF;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EACA;AA6CA;;AA3CA;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;AACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;;AAED;EACC;;;AAMH;EACC;EACA;EACA;;;AAGD;AAEA;EACC;;;AAGD;AAGC;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;;;AAIF;AACA;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EACC;;AAIA;EACC;;AAIF;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;;AAIH;EACC;;AACA;EACC;;AAGF;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;AAAA;EAGC;;AAGF;EACC;EACA;;AAID;EACC;EACA;;AAEA;EACC;;AAGF;EACC;;AAEA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;;AAIF;AAGC;EACC;EACA;;AAED;EACC;;;AAIF;AACA;EACC;;AAID;AAEA;EACC;EACA;EACA;EACA;;;AFrvCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AGAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADlCC;AACD;EACC;;;AAED;EACC;;;AAKD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;EACA,YAVgB;EAWhB;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA4BA;;AA1BC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;AACA;AAcC;AAAA;;AAbA;EACC;EACA;EAEA,QAvHe;;AAyHhB;EAIC;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;;AAIF;AACA;AAAA;AAAA;AAAA;AAAA;EAKC;EACA;EACA,YA1JgB;EA2JhB;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAKD;AAAA;EACC;;AAIA;AAAA;EACC;;;AAKH;AACA;AAAA;AAAA;AAAA;EAIC;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;EACA;EACA;;;AAID;AACC;;AACA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;;AAEC;EAGC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,QA9OgB;;;AAiPjB;AAEC;AAsBC;;AAnBA;EACC;EACA;EACA;EACA;AACA;EACA;EACA;EACA,QA9Pc;EA+Pd,OA/Pc;EAgQd;EACA;EACA;;AACA;EACC;AC7NH;EAEA;;ADmOG;EACC;;AAID;EAGC;EACA;;AACA;EACC;;AAQH;EACC;EACA;AACA;EACA;;;AAOJ;AACA;AAAA;EAEC;;;AAED;AAAA;EAEC;;;AAGD;AAKC;AA8EC;;AA5EA;EAEC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;;AAED;EACC;EACA;EACA,QAxBkB;EAyBlB,OAzBkB;EA0BlB;EACA;EACA;EACA;;AAED;EAEC;;AAED;EACC;EACA;EACA;EACA;;AAED;AAEA;AAAA;EAEC;EACA;EACA;;AAED;EACC;EACA;AAA4D;;AAE7D;EACC;;AAID;EACC;EACA;;AAED;EACC,eA/DkB;;AAmEnB;EACC;EACA,QArEkB;EAsElB,OAtEkB;EAuElB;EACA;;AAED;EACC;;AAED;EACC;;AAOD;EAEC;;AAED;EACC,cAzFyB;;AA2F1B;EACC;EACA;EACA;;AAED;EACC;AAAuE;EACvE;AAAiE;;AAElE;EACC;EACA;AAAiE;EACjE;;AAID;EAEC;AAA0C;EAC1C;AAAsD;EACtD;;AAED;EACC;;AAED;EACC;AAAc;;;AAMlB;AACA;EACC;EACA;;AACA;EACC;;AAED;EACC;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AACA;EACC;;AACA;EACC;EACA;;AAIH;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAGF;EACE;EACA;;;AAMH;AAAA;AAAA;AAAA;EAEC;;;AAID;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EAIC;EACA;EACA;EACA;;AAED;EACC;;AAGF;EACC;;AACA;EACC;;;AAKJ;EACC;;AACA;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;EACA;;AAGF;EACC;EACA;EACA;;AACA;EACC;EACA;;AAGF;EAGC;;AAED;EACC;;;AAKH;AACA;EACC;EACA;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAED;EACC;EACA;;AACA;EACC;;;AAQL;AACA;EACC;EACA;EACA;EACA;EACA;EACA;AAiHA;;AAhHA;AACC;;AACA;EACC;EACA;;AAGF;EAEC;;AAED;AACC;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QA1rBe;AA2rBf;AAoDA;AASA;AAaA;;AAzEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;AASA;;AAPA;EACC;AACA;;AACA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;EAEA;EACA;EACA;EACA;AACA;AAAA;AAQA;AAAA;;AANA;EACC;;AAED;EACC,cAnDa;;AAuDd;EACC;EACA;EACA;;AAKH;EACC;EACA;EACA;AAAY;EACZ;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA,cAhFe;AAiFf;EACA;;AAGD;EACC;EACA;EACA;EACA;AACA;EACA;EACA;AACA;EACA;AACA;EACA;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAiBA;AAAA;AAAA;;AAhBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAMA;EACC;EACA;;AAGF;EACC;;AAED;EACC;;AAIA;EACC;;;AAQN;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEC;EACC;;AAED;EACC;;AAGF;EACC;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;;AAIF;AACA;EACC;IAEC;;EAED;IAEC;;EAED;IAGC;;EAED;IAEC;;;AAGF;EACC;EACA;EACA;;;AAKD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;;;AH18BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AKAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AACA;AAAA;AAAA;EAGC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;;AAIF;AACA;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA,QLwDe;EKvDf;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAED;EACC;;;AASF;AACC;AA6GA;AA4BA;;AAtIA;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAhBD;EACA;EAiBC;EACA,KLQc;EKPd;AAMA;AAqBA;;AAzBA;AAAA;EACC;;AAID;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;AAAA;EAGC;EACA;EA3CF;EACA;;AAkDG;AAAA;AAAA;EACC;EACA;EACA,QAhDuB;EAiDvB;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;EACA;;AAML;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAKA;AAAA;EAEC;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA,OL7HY;EK8HZ;EACA;EACA;EACA;EACA;;;AAMJ;AAEA;EACC;;;AAIA;EACC;;AAGA;EACC;;AAID;EACC;;AAID;EACC;;;AAKH;AACA;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;EACC;EACA,OLpMe;EKqMf,QLrMe;EKsMf;EACA;;;AAGD;EACC;EACA;AAAY;EACZ;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;AACA;AAAA;AAAA;AACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAoB;;;AAItB;EACC;;AACA;EACC;;;AAIF;AACA;EACC;EACA;EACA;EACA;AAEA;;AACA;EACC;AAAY;EACZ;AAqBA;AA2BA;;AA9CA;EAGC;;AAEA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;AAED;EACC;;AAED;EACC;;AAKF;EACC;EACA;EACA;AAMA;;AAJA;EACC;EACA;;AAGD;EACC;;AAIF;EACC;EACA;EACA;AAEA;;AACA;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;;AAIF;AACA;EACC;EACA,WLhUe;EKiUf;AAwFA;AAiCA;AAwBA;AAgBA;;AA/JA;EACC;EACA;EACA;EACA;EACA;AAgBA;AA4BA;AAQA;AAcA;AACA;AAQA;;AAzEA;EACC;EACA;EACA;EACA,QL9Ua;EK+Ub,OL/Ua;EKgVb;EACA;EACA;EAEA;EACA;;AAID;AAAA;AAAA;EAGC;EACA;;AAID;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;EAMC;EACA;EACA;EACA;EACA;EACA;;AAID;AAAA;EAEC;EACA;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKD;AAAA;EAEC;EAEA;;AAID;EACC;;AAMD;AACC;AASA;AAOA;AAOA;;AAtBA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;EACC;EACA;EACA;AAAa;;AAId;AAAA;EAGC;;AAID;EACC;;AAMH;AACC;AASA;AAOA;;AAfA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;AAAA;EAEC;EACA;;AAID;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E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ACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;AAgBA;;AAbC;AAAA;AAAA;EAEC;;AAKD;AAAA;AAAA;AAAA;EAEC;;AAKF;EACC;AAAY;;AAGb;AACC;EACA;EACA;;AAGD;AACC;EACA;AACA;AAAA;EAEA;;AAMJ;AAAA;EAEC;EACA;EACA;AACA;AAQA;AAwCA;AAkBA;AAKA;;AArEC;AAAA;AAAA;AAAA;AAEC;EACA;;AAIF;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAc;AACd;AAaA;;AAXA;AAAA;EACC;;AAED;AAAA;EACI;EACA;EACA;EAEH;;AAID;AAAA;EACC;EACA;;AACA;AAAA;EACC;;AAKH;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AACC;EACA;;AAKF;AAAA;EACC;;AAID;AAAA;EACC;EACA;;AAED;AAAA;EACC;EACA;;AAIH;EACC;;AAMD;AAAA;EAEC;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEC;EACA;;AAOF;AACC;AAAA;AAwCA;;AAtCA;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;EAEA;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;AF/TF;EAEA;EE+TE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAID;EACC;;AAIA;EACC;;AAED;EACC;;AAID;EACC;EACA;EACA;;AAQH;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;AACC;;AACA;AF/XF;EAEA;;AEgYE;EAEC;EACA;;AAGF;EACC;EACA;EACA;EACA;EACA;AAAiB;;AAEjB;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AASJ;EACC;EACA;EACA;EACA;AAAyB;EACzB;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;EACA;;AAED;EACC;EACA;EACA;;AACA;AAEC;EACA;;AAGF;EACC;EACA;AAAc;EACd;EACA;;AAED;AAAA;EAEC;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;EACA;EACA;EACA;;AAQH;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EAEC;;AAQH;AAAA;EAEC;AAAyB;EACzB;EAGA;EACA;EACA;EACA;;AAMD;EACC;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;EAEC;;;AAKF;AACA;EACC;EACA;EACA;EAEA,aN1ee;EM2ef;;;AAGD;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAOA;EACC;EACA;EACA;EACA;EACA;AACA;AAIA;AAKA;;AARA;EACC,aN/fiB;;AMkgBlB;EACC;;AAID;EACC;EACA;EACA;AACA;AAAA;EAEA;AAEA;;AACA;AACC;EACA;;AACA;EACC;;;AAMJ;AACA;AAAA;AAAA;AAAA;AAIA;EACC;EACA,WNhiBmB;EMiiBnB,WNhiBmB;EMiiBnB;EACA;EACA;EACA,KNviBe;EMwiBf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAKF;AACA;AACA;EAEC;;AAGC;EACC;;;AAKH;EACC;EACA;EACA;AACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;AAGD;EACC;EACA;;AAOE;EACC;EACA;EACA;;;AAOL;EACC;EACA;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACC;EACA;;AAED;EAEC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACC;EACA;EACA;AAIA;;AAHA;EACC;;AAIA;EAEC;EACA;;;AAIH;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC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ACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AACA;EACC;EAGA;;AAIH;EACC;;;AC/xCF;AAAA;AAAA;AAIA;AAEA;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AChDD;AAEA;AACA;EACC;;;ARJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ASEA;AAEC;EACA;IACC;IACA;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAGD;EACA;IACC;;;EAGA;IACC;;;EAIF;IACC;;;EAGD;IACC;IACA;;;AAGD;EACA;IACC;IACA;IAEA;IAEA;;EACA;IACC;;EAED;IACC;;EACA;IACC;;;AAKH;EAEC;IACC;;EAED;IACC;IACA;IACA,KTuCa;IStCb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAED;IACC;;;EAKF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;EAED;AAAA;IAEC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;;AAGD;EACC;IACC;IACA;;EACA;IACC;;;AAGF;EACA;AAoBC;;EAlBC;IACC;;EAGF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAID;IACC;;;EAIF;IACC;IACA;;;ACnLF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;AA0CA;AAmBA;;AA5DA;EAGI;EACA;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAGR;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAQJ;EACI;EACA;EACA;;AAGR;EACI;EACA;;AAEJ;EACI;EACA;;AAOA;EACI;EACA;EACA;;AAGR;EAEI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AC1IJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;EACC;EACA;EACA;;AAGD;AAAA;EAEC,QADS;EAET;;AAGD;AAAA;AAAA;AAAA;EACC;EACA;;AAIF;EACC;;AAID;EACC;;AAID;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;AAGE;AACC;;AACA;EACC;;;AC3GJ;AAyCC;AAKA;AAoBA;;AA/DC;EACC;;AAIA;EACC;;AAED;EACC;EACA;;AAEA;EAGC;;AAID;EACC;;AAED;EACC;;AAED;EACC;;AAMJ;EAEC;;AAKD;EACC;;AAID;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;EAIC;;AAID;EACC;EACA;EACA;EACA;EACA,QA1Ec;EA2Ed;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;AACA;EACA;EACA;EACA","file":"server.css"} \ No newline at end of file
diff --git a/core/css/styles.css b/core/css/styles.css
new file mode 100644
index 00000000000..15035935c27
--- /dev/null
+++ b/core/css/styles.css
@@ -0,0 +1,1181 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016, Raghu Nayyar <hey@raghunayyar.com>
+ * @copyright Copyright (c) 2011-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2019-2020, Gary Kim <gary@garykim.dev>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+ cursor: default;
+ scrollbar-color: var(--color-border-dark) transparent;
+ scrollbar-width: thin;
+}
+
+html, body {
+ height: 100%;
+}
+
+article, aside, dialog, figure, footer, header, hgroup, nav, section {
+ display: block;
+}
+
+body {
+ line-height: 1.5;
+}
+
+table {
+ border-collapse: separate;
+ border-spacing: 0;
+ white-space: nowrap;
+}
+
+caption, th, td {
+ text-align: left;
+ font-weight: normal;
+}
+
+table, td, th {
+ vertical-align: middle;
+}
+
+a {
+ border: 0;
+ color: var(--color-main-text);
+ text-decoration: none;
+ cursor: pointer;
+}
+a * {
+ cursor: pointer;
+}
+
+a.external {
+ margin: 0 3px;
+ text-decoration: underline;
+}
+
+input {
+ cursor: pointer;
+}
+input * {
+ cursor: pointer;
+}
+
+select, .button span, label {
+ cursor: pointer;
+}
+
+ul {
+ list-style: none;
+}
+
+body {
+ background-color: var(--color-main-background);
+ font-weight: normal;
+ /* bring the default font size up to 15px */
+ font-size: var(--default-font-size);
+ line-height: var(--default-line-height);
+ font-family: var(--font-face);
+ color: var(--color-main-text);
+}
+
+.two-factor-header {
+ text-align: center;
+}
+
+.two-factor-provider {
+ text-align: center;
+ width: 258px !important;
+ display: inline-block;
+ margin-bottom: 0 !important;
+ background-color: var(--color-background-darker) !important;
+ border: none !important;
+}
+
+.two-factor-link {
+ display: inline-block;
+ padding: 12px;
+ color: var(--color-text-lighter);
+}
+
+.float-spinner {
+ height: 32px;
+ display: none;
+}
+
+#nojavascript {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 9000;
+ text-align: center;
+ background-color: var(--color-background-darker);
+ color: var(--color-primary-text);
+ line-height: 125%;
+ font-size: 24px;
+}
+#nojavascript div {
+ display: block;
+ position: relative;
+ width: 50%;
+ top: 35%;
+ margin: 0px auto;
+}
+#nojavascript a {
+ color: var(--color-primary-text);
+ border-bottom: 2px dotted var(--color-main-background);
+}
+#nojavascript a:hover, #nojavascript a:focus {
+ color: var(--color-primary-text-dark);
+}
+
+/* SCROLLING */
+::-webkit-scrollbar {
+ width: 12px;
+ height: 12px;
+}
+
+::-webkit-scrollbar-track-piece {
+ background-color: transparent;
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--color-border-dark);
+ border-radius: var(--border-radius-large);
+ border: 2px solid transparent;
+ background-clip: content-box;
+}
+
+/* SELECTION */
+::selection {
+ background-color: var(--color-primary-element);
+ color: var(--color-primary-text);
+}
+
+/* CONTENT ------------------------------------------------------------------ */
+#controls {
+ box-sizing: border-box;
+ position: -webkit-sticky;
+ position: sticky;
+ height: 44px;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-main-background-translucent);
+ z-index: 62;
+ /* must be above the filelist sticky header and texteditor menubar */
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ display: flex;
+ top: 50px;
+}
+
+/* position controls for apps with app-navigation */
+.viewer-mode #app-navigation + #app-content #controls {
+ left: 0;
+}
+
+#app-navigation * {
+ box-sizing: border-box;
+}
+
+#controls .actions > div > .button, #controls .actions > div button, #controls .actions > .button, #controls .actions button {
+ box-sizing: border-box;
+ display: inline-block;
+ display: flex;
+ height: 36px;
+ width: 36px;
+ padding: 9px;
+ align-items: center;
+ justify-content: center;
+}
+#controls .actions > div .button.hidden, #controls .actions .button.hidden {
+ display: none;
+}
+
+/* EMPTY CONTENT DISPLAY ------------------------------------------------------------ */
+#emptycontent,
+.emptycontent {
+ color: var(--color-text-maxcontrast);
+ text-align: center;
+ margin-top: 30vh;
+ width: 100%;
+}
+#app-sidebar #emptycontent,
+#app-sidebar .emptycontent {
+ margin-top: 10vh;
+}
+#emptycontent .emptycontent-search,
+.emptycontent .emptycontent-search {
+ position: static;
+}
+#emptycontent h2,
+.emptycontent h2 {
+ margin-bottom: 10px;
+}
+#emptycontent [class^=icon-],
+#emptycontent [class*=icon-],
+.emptycontent [class^=icon-],
+.emptycontent [class*=icon-] {
+ background-size: 64px;
+ height: 64px;
+ width: 64px;
+ margin: 0 auto 15px;
+}
+#emptycontent [class^=icon-]:not([class^=icon-loading]), #emptycontent [class^=icon-]:not([class*=icon-loading]),
+#emptycontent [class*=icon-]:not([class^=icon-loading]),
+#emptycontent [class*=icon-]:not([class*=icon-loading]),
+.emptycontent [class^=icon-]:not([class^=icon-loading]),
+.emptycontent [class^=icon-]:not([class*=icon-loading]),
+.emptycontent [class*=icon-]:not([class^=icon-loading]),
+.emptycontent [class*=icon-]:not([class*=icon-loading]) {
+ opacity: 0.4;
+}
+
+/* LOG IN & INSTALLATION ------------------------------------------------------------ */
+#datadirContent label {
+ width: 100%;
+}
+
+/* strengthify wrapper */
+/* General new input field look */
+/* Nicely grouping input field sets */
+.grouptop, .groupmiddle, .groupbottom {
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* Show password toggle */
+#show, #dbpassword {
+ position: absolute;
+ right: 1em;
+ top: 0.8em;
+ float: right;
+}
+
+#show + label, #dbpassword + label {
+ right: 21px;
+ top: 15px !important;
+ margin: -14px !important;
+ padding: 14px !important;
+}
+
+#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label {
+ opacity: 0.8;
+}
+
+#show + label, #dbpassword + label, #personal-show + label {
+ position: absolute !important;
+ height: 20px;
+ width: 24px;
+ background-image: var(--icon-toggle-dark);
+ background-repeat: no-repeat;
+ background-position: center;
+ opacity: 0.3;
+}
+
+/* Feedback for keyboard focus and mouse hover */
+#show:focus + label,
+#dbpassword:focus + label,
+#personal-show:focus + label {
+ opacity: 1;
+}
+#show + label:hover,
+#dbpassword + label:hover,
+#personal-show + label:hover {
+ opacity: 1;
+}
+
+#show + label:before, #dbpassword + label:before, #personal-show + label:before {
+ display: none;
+}
+
+#pass2, input[name=personal-password-clone] {
+ padding-right: 30px;
+}
+
+.personal-show-container {
+ position: relative;
+ display: inline-block;
+ margin-right: 6px;
+}
+
+#personal-show + label {
+ display: block;
+ right: 0;
+ margin-top: -43px;
+ margin-right: -4px;
+ padding: 22px;
+}
+
+/* Warnings and errors are the same */
+#body-user .warning, #body-settings .warning {
+ margin-top: 8px;
+ padding: 5px;
+ border-radius: var(--border-radius);
+ color: var(--color-primary-text);
+ background-color: var(--color-warning);
+}
+
+.warning legend, .warning a {
+ color: var(--color-primary-text) !important;
+ font-weight: bold !important;
+}
+
+.error:not(.toastify) a {
+ color: white !important;
+ font-weight: bold !important;
+}
+.error:not(.toastify) a.button {
+ color: var(--color-text-lighter) !important;
+ display: inline-block;
+ text-align: center;
+}
+.error:not(.toastify) pre {
+ white-space: pre-wrap;
+ text-align: left;
+}
+
+.error-wide {
+ width: 700px;
+ margin-left: -200px !important;
+}
+.error-wide .button {
+ color: black !important;
+}
+
+.warning-input {
+ border-color: var(--color-error) !important;
+}
+
+/* fixes for update page TODO should be fixed some time in a proper way */
+/* this is just for an error while updating the Nextcloud instance */
+/* Sticky footer */
+/* round profile photos */
+.avatar, .avatardiv {
+ border-radius: 50%;
+ flex-shrink: 0;
+}
+.avatar > img, .avatardiv > img {
+ border-radius: 50%;
+ flex-shrink: 0;
+}
+
+td.avatar {
+ border-radius: 0;
+}
+
+#notification-container {
+ left: 50%;
+ max-width: 60%;
+ position: fixed;
+ top: 0;
+ text-align: center;
+ transform: translateX(-50%);
+ z-index: 8000;
+}
+
+#notification {
+ margin: 0 auto;
+ z-index: 8000;
+ background-color: var(--color-main-background);
+ border: 0;
+ padding: 1px 8px;
+ display: none;
+ position: relative;
+ top: 0;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+ opacity: 0.9;
+ overflow-x: hidden;
+ overflow-y: auto;
+ max-height: 100px;
+}
+#notification span {
+ cursor: pointer;
+ margin-left: 1em;
+}
+#notification .row {
+ position: relative;
+}
+#notification .row .close {
+ display: inline-block;
+ vertical-align: middle;
+ position: absolute;
+ right: 0;
+ top: 0;
+ margin-top: 2px;
+}
+#notification .row.closeable {
+ padding-right: 20px;
+}
+
+tr .action:not(.permanent), .selectedActions > a {
+ opacity: 0;
+}
+
+tr:hover .action:not(.menuitem), tr:focus .action:not(.menuitem),
+tr .action.permanent:not(.menuitem) {
+ opacity: 0.5;
+}
+
+.selectedActions > a {
+ opacity: 0.5;
+ position: relative;
+ top: 2px;
+}
+.selectedActions > a:hover, .selectedActions > a:focus {
+ opacity: 1;
+}
+
+tr .action {
+ width: 16px;
+ height: 16px;
+}
+
+.header-action {
+ opacity: 0.8;
+}
+
+tr:hover .action:hover, tr:focus .action:focus {
+ opacity: 1;
+}
+
+.selectedActions a:hover, .selectedActions a:focus {
+ opacity: 1;
+}
+
+.header-action:hover, .header-action:focus {
+ opacity: 1;
+}
+
+tbody tr:hover, tbody tr:focus, tbody tr:active {
+ background-color: var(--color-background-dark);
+}
+
+code {
+ font-family: "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace;
+}
+
+.pager {
+ list-style: none;
+ float: right;
+ display: inline;
+ margin: 0.7em 13em 0 0;
+}
+.pager li {
+ display: inline-block;
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ui-icon-circle-triangle-e {
+ background-image: url("../img/actions/play-next.svg?v=1");
+}
+
+.ui-icon-circle-triangle-w {
+ background-image: url("../img/actions/play-previous.svg?v=1");
+}
+
+/* ---- jQuery UI datepicker ---- */
+.ui-widget.ui-datepicker {
+ margin-top: 10px;
+ padding: 4px 8px;
+ width: auto;
+ border-radius: var(--border-radius);
+ border: none;
+ z-index: 1600 !important;
+}
+.ui-widget.ui-datepicker .ui-state-default,
+.ui-widget.ui-datepicker .ui-widget-content .ui-state-default,
+.ui-widget.ui-datepicker .ui-widget-header .ui-state-default {
+ border: 1px solid transparent;
+ background: inherit;
+}
+.ui-widget.ui-datepicker .ui-widget-header {
+ padding: 7px;
+ font-size: 13px;
+ border: none;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-datepicker-title {
+ line-height: 1;
+ font-weight: normal;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-icon {
+ opacity: 0.5;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e {
+ background: url("../img/actions/arrow-right.svg") center center no-repeat;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w {
+ background: url("../img/actions/arrow-left.svg") center center no-repeat;
+}
+.ui-widget.ui-datepicker .ui-widget-header .ui-state-hover .ui-icon {
+ opacity: 1;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar th {
+ font-weight: normal;
+ color: var(--color-text-lighter);
+ opacity: 0.8;
+ width: 26px;
+ padding: 2px;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr:hover {
+ background-color: inherit;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-today a:not(.ui-state-hover) {
+ background-color: var(--color-background-darker);
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-current-day a.ui-state-active,
+.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-hover,
+.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-focus {
+ background-color: var(--color-primary);
+ color: var(--color-primary-text);
+ font-weight: bold;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-week-end:not(.ui-state-disabled) :not(.ui-state-hover),
+.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-priority-secondary:not(.ui-state-hover) {
+ color: var(--color-text-lighter);
+ opacity: 0.8;
+}
+
+.ui-datepicker-prev, .ui-datepicker-next {
+ border: var(--color-border-dark);
+ background: var(--color-main-background);
+}
+
+/* ---- jQuery UI timepicker ---- */
+.ui-widget.ui-timepicker {
+ margin-top: 10px !important;
+ width: auto !important;
+ border-radius: var(--border-radius);
+ z-index: 1600 !important;
+ /* AM/PM fix */
+}
+.ui-widget.ui-timepicker .ui-widget-content {
+ border: none !important;
+}
+.ui-widget.ui-timepicker .ui-state-default,
+.ui-widget.ui-timepicker .ui-widget-content .ui-state-default,
+.ui-widget.ui-timepicker .ui-widget-header .ui-state-default {
+ border: 1px solid transparent;
+ background: inherit;
+}
+.ui-widget.ui-timepicker .ui-widget-header {
+ padding: 7px;
+ font-size: 13px;
+ border: none;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+}
+.ui-widget.ui-timepicker .ui-widget-header .ui-timepicker-title {
+ line-height: 1;
+ font-weight: normal;
+}
+.ui-widget.ui-timepicker table.ui-timepicker tr .ui-timepicker-hour-cell:first-child {
+ margin-left: 30px;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table th {
+ font-weight: normal;
+ color: var(--color-text-lighter);
+ opacity: 0.8;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table th.periods {
+ padding: 0;
+ width: 30px;
+ line-height: 30px;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table tr:hover {
+ background-color: inherit;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hour-cell a.ui-state-active, .ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minute-cell a.ui-state-active,
+.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-hover,
+.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-focus {
+ background-color: var(--color-primary);
+ color: var(--color-primary-text);
+ font-weight: bold;
+}
+.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minutes:not(.ui-state-hover) {
+ color: var(--color-text-lighter);
+}
+.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hours {
+ border-right: 1px solid var(--color-border);
+}
+
+/* ---- jQuery UI datepicker & timepicker global rules ---- */
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr,
+.ui-widget.ui-timepicker table.ui-timepicker tr {
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr td,
+.ui-widget.ui-timepicker table.ui-timepicker tr td {
+ flex: 1 1 auto;
+ margin: 0;
+ padding: 2px;
+ height: 26px;
+ width: 26px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.ui-widget.ui-datepicker .ui-datepicker-calendar tr td > *,
+.ui-widget.ui-timepicker table.ui-timepicker tr td > * {
+ border-radius: 50%;
+ text-align: center;
+ font-weight: normal;
+ color: var(--color-main-text);
+ display: block;
+ line-height: 18px;
+ width: 18px;
+ height: 18px;
+ padding: 3px;
+ font-size: 0.9em;
+}
+
+/* ---- DIALOGS ---- */
+#oc-dialog-filepicker-content {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ /* Grid view toggle */
+}
+#oc-dialog-filepicker-content .dirtree {
+ flex-wrap: wrap;
+ box-sizing: border-box;
+ padding-right: 140px;
+}
+#oc-dialog-filepicker-content .dirtree div:first-child a {
+ background-image: var(--icon-home-dark);
+ background-repeat: no-repeat;
+ background-position: left center;
+}
+#oc-dialog-filepicker-content .dirtree span:not(:last-child) {
+ cursor: pointer;
+}
+#oc-dialog-filepicker-content .dirtree span:last-child {
+ font-weight: bold;
+}
+#oc-dialog-filepicker-content .dirtree span:not(:last-child)::after {
+ content: ">";
+ padding: 3px;
+}
+#oc-dialog-filepicker-content #picker-view-toggle {
+ position: absolute;
+ background-color: transparent;
+ border: none;
+ margin: 0;
+ padding: 22px;
+ opacity: 0.5;
+ right: 0;
+ top: 0;
+}
+#oc-dialog-filepicker-content #picker-view-toggle:hover, #oc-dialog-filepicker-content #picker-view-toggle:focus {
+ opacity: 1;
+}
+#oc-dialog-filepicker-content #picker-showgridview:focus + #picker-view-toggle {
+ opacity: 1;
+}
+#oc-dialog-filepicker-content .actions.creatable {
+ flex-wrap: wrap;
+ padding: 0px;
+ box-sizing: border-box;
+ display: inline-flex;
+ float: none;
+ max-height: 36px;
+ max-width: 36px;
+ background-color: var(--color-background-dark);
+ border: 1px solid var(--color-border-dark);
+ border-radius: var(--border-radius-pill);
+ position: relative;
+ left: 15px;
+ top: 3px;
+ order: 1;
+}
+#oc-dialog-filepicker-content .actions.creatable .icon.icon-add {
+ background-image: var(--icon-add-dark);
+ background-size: 16px 16px;
+ width: 34px;
+ height: 34px;
+ margin: 0px;
+ opacity: 0.5;
+}
+#oc-dialog-filepicker-content .actions.creatable a {
+ width: 36px;
+ padding: 0px;
+ position: static;
+}
+#oc-dialog-filepicker-content .actions.creatable .menu {
+ top: 100%;
+ margin-top: 10px;
+}
+#oc-dialog-filepicker-content .actions.creatable .menu form {
+ display: flex;
+ margin: 10px;
+}
+#oc-dialog-filepicker-content .filelist-container {
+ box-sizing: border-box;
+ display: inline-block;
+ overflow-y: auto;
+ flex: 1;
+ /*height: 100%;*/
+ /* overflow under the button row */
+ width: 100%;
+ overflow-x: hidden;
+}
+#oc-dialog-filepicker-content .emptycontent {
+ color: var(--color-text-maxcontrast);
+ text-align: center;
+ margin-top: 80px;
+ width: 100%;
+ display: none;
+}
+#oc-dialog-filepicker-content .filelist {
+ background-color: var(--color-main-background);
+ width: 100%;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist {
+ /* prevent the filepicker to overflow */
+ min-width: initial;
+ margin-bottom: 50px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist thead tr {
+ border-bottom: 1px solid var(--color-border);
+ background-color: var(--color-main-background);
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist thead tr th {
+ width: 80%;
+ border: none;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle {
+ display: block;
+ padding: 15px;
+ height: 50px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ vertical-align: middle;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle.name {
+ padding-left: 5px;
+ margin-left: 50px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th .sort-indicator {
+ width: 10px;
+ height: 8px;
+ margin-left: 5px;
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.3;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .sort-indicator.hidden,
+#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden,
+#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden {
+ visibility: hidden;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden,
+#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden {
+ visibility: visible;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist td {
+ padding: 14px;
+ border-bottom: 1px solid var(--color-border);
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist tr:last-child td {
+ border-bottom: none;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background-size: 32px;
+ background-repeat: no-repeat;
+ padding-left: 51px;
+ background-position: 7px 7px;
+ cursor: pointer;
+ max-width: 0;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts {
+ display: flex;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__first {
+ overflow: hidden;
+ white-space: pre;
+ text-overflow: ellipsis;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__last {
+ white-space: pre;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filesize, #oc-dialog-filepicker-content #picker-filestable.filelist .date {
+ width: 80px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist .filesize {
+ text-align: right;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid {
+ display: flex;
+ flex-direction: column;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 120px);
+ justify-content: space-around;
+ row-gap: 15px;
+ margin: 15px 0;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr {
+ display: block;
+ position: relative;
+ border-radius: var(--border-radius);
+ padding: 10px;
+ display: flex;
+ flex-direction: column;
+ width: 100px;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td {
+ border: none;
+ padding: 0;
+ text-align: center;
+ border-radius: var(--border-radius);
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename {
+ padding: 100px 0 0 0;
+ background-position: center top;
+ background-size: contain;
+ line-height: 30px;
+ max-width: none;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename .filename-parts {
+ justify-content: center;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filesize {
+ line-height: 10px;
+ width: 100%;
+}
+#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.date {
+ display: none;
+}
+#oc-dialog-filepicker-content .filepicker_element_selected {
+ background-color: var(--color-background-darker);
+}
+
+.ui-dialog {
+ position: fixed !important;
+}
+
+span.ui-icon {
+ float: left;
+ margin: 3px 7px 30px 0;
+}
+
+/* ---- CONTACTS MENU ---- */
+#contactsmenu .menutoggle {
+ background-size: 20px 20px;
+ padding: 14px;
+ cursor: pointer;
+ background-image: var(--original-icon-contacts-white);
+ filter: var(--primary-invert-if-bright);
+}
+#contactsmenu .menutoggle:hover, #contactsmenu .menutoggle:focus, #contactsmenu .menutoggle:active {
+ opacity: 1 !important;
+}
+
+#header .header-right > div#contactsmenu > .menu {
+ /* show 2.5 to 4.5 entries depending on the screen height */
+ height: calc(100vh - 150px);
+ max-height: 275px;
+ min-height: 175px;
+ width: 350px;
+}
+#header .header-right > div#contactsmenu > .menu .emptycontent {
+ margin-top: 5vh !important;
+ margin-bottom: 2vh;
+}
+#header .header-right > div#contactsmenu > .menu .emptycontent .icon-loading,
+#header .header-right > div#contactsmenu > .menu .emptycontent .icon-search {
+ display: inline-block;
+}
+#header .header-right > div#contactsmenu > .menu .content {
+ /* fixed max height of the parent container without the search input */
+ height: calc(100vh - 150px - 50px);
+ max-height: 225px;
+ min-height: 125px;
+ overflow-y: auto;
+}
+#header .header-right > div#contactsmenu > .menu .content .footer {
+ text-align: center;
+}
+#header .header-right > div#contactsmenu > .menu .content .footer a {
+ display: block;
+ width: 100%;
+ padding: 12px 0;
+ opacity: 0.5;
+}
+#header .header-right > div#contactsmenu > .menu .contact {
+ display: flex;
+ position: relative;
+ align-items: center;
+ padding: 3px 3px 3px 10px;
+ border-bottom: 1px solid var(--color-border);
+ /* actions menu */
+}
+#header .header-right > div#contactsmenu > .menu .contact :last-of-type {
+ border-bottom: none;
+}
+#header .header-right > div#contactsmenu > .menu .contact .avatar {
+ height: 32px;
+ width: 32px;
+ display: inline-block;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body {
+ flex-grow: 1;
+ padding-left: 8px;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body div {
+ position: relative;
+ width: 100%;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body .full-name, #header .header-right > div#contactsmenu > .menu .contact .body .last-message {
+ /* TODO: don't use fixed width */
+ max-width: 204px;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+#header .header-right > div#contactsmenu > .menu .contact .body .last-message {
+ opacity: 0.5;
+}
+#header .header-right > div#contactsmenu > .menu .contact .top-action, #header .header-right > div#contactsmenu > .menu .contact .second-action, #header .header-right > div#contactsmenu > .menu .contact .other-actions {
+ width: 16px;
+ height: 16px;
+ padding: 14px;
+ opacity: 0.5;
+ cursor: pointer;
+}
+#header .header-right > div#contactsmenu > .menu .contact .top-action :hover, #header .header-right > div#contactsmenu > .menu .contact .second-action :hover, #header .header-right > div#contactsmenu > .menu .contact .other-actions :hover {
+ opacity: 1;
+}
+#header .header-right > div#contactsmenu > .menu .contact .menu {
+ top: 47px;
+ margin-right: 13px;
+}
+#header .header-right > div#contactsmenu > .menu .contact .popovermenu::after {
+ right: 2px;
+}
+
+#contactsmenu-search {
+ width: calc(100% - 16px);
+ margin: 8px;
+ height: 34px;
+}
+
+/* ---- TOOLTIPS ---- */
+.extra-data {
+ padding-right: 5px !important;
+}
+
+/* ---- TAGS ---- */
+#tagsdialog .content {
+ width: 100%;
+ height: 280px;
+}
+#tagsdialog .scrollarea {
+ overflow: auto;
+ border: 1px solid var(--color-background-darker);
+ width: 100%;
+ height: 240px;
+}
+#tagsdialog .bottombuttons {
+ width: 100%;
+ height: 30px;
+}
+#tagsdialog .bottombuttons * {
+ float: left;
+}
+#tagsdialog .taglist li {
+ background: var(--color-background-dark);
+ padding: 0.3em 0.8em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-transition: background-color 500ms;
+ transition: background-color 500ms;
+}
+#tagsdialog .taglist li:hover, #tagsdialog .taglist li:active {
+ background: var(--color-background-darker);
+}
+#tagsdialog .addinput {
+ width: 90%;
+ clear: both;
+}
+
+/* ---- BREADCRUMB ---- */
+.breadcrumb {
+ display: inline-flex;
+}
+
+div.crumb {
+ display: inline-flex;
+ background-image: url("../img/breadcrumb.svg?v=1");
+ background-repeat: no-repeat;
+ background-position: right center;
+ height: 44px;
+ background-size: auto 24px;
+ flex: 0 0 auto;
+ order: 1;
+ padding-right: 7px;
+}
+div.crumb.crumbmenu {
+ order: 2;
+ position: relative;
+}
+div.crumb.crumbmenu a {
+ opacity: 0.5;
+}
+div.crumb.crumbmenu.canDropChildren .popovermenu, div.crumb.crumbmenu.canDrop .popovermenu {
+ display: block;
+}
+div.crumb.crumbmenu .popovermenu {
+ top: 100%;
+ margin-right: 3px;
+}
+div.crumb.crumbmenu .popovermenu ul {
+ max-height: 345px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding-right: 5px;
+}
+div.crumb.crumbmenu .popovermenu ul li.canDrop span:first-child {
+ background-image: url("../img/filetypes/folder-drag-accept.svg?v=1") !important;
+}
+div.crumb.crumbmenu .popovermenu .in-breadcrumb {
+ display: none;
+}
+div.crumb.hidden {
+ display: none;
+}
+div.crumb.hidden ~ .crumb {
+ order: 3;
+}
+div.crumb > a,
+div.crumb > span {
+ position: relative;
+ padding: 12px;
+ opacity: 0.5;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ flex: 0 0 auto;
+ max-width: 200px;
+}
+div.crumb > a.icon-home, div.crumb > a.icon-delete,
+div.crumb > span.icon-home,
+div.crumb > span.icon-delete {
+ text-indent: -9999px;
+}
+div.crumb > a[class^=icon-] {
+ padding: 0;
+ width: 44px;
+}
+div.crumb:last-child {
+ font-weight: bold;
+ margin-right: 10px;
+}
+div.crumb:last-child a ~ span {
+ padding-left: 0;
+}
+div.crumb:hover, div.crumb:focus, div.crumb a:focus, div.crumb:active {
+ opacity: 1;
+}
+div.crumb:hover > a,
+div.crumb:hover > span, div.crumb:focus > a,
+div.crumb:focus > span, div.crumb a:focus > a,
+div.crumb a:focus > span, div.crumb:active > a,
+div.crumb:active > span {
+ opacity: 0.7;
+}
+
+/* some feedback for hover/tap on breadcrumbs */
+.appear {
+ opacity: 1;
+ -webkit-transition: opacity 500ms ease 0s;
+ -moz-transition: opacity 500ms ease 0s;
+ -ms-transition: opacity 500ms ease 0s;
+ -o-transition: opacity 500ms ease 0s;
+ transition: opacity 500ms ease 0s;
+}
+.appear.transparent {
+ opacity: 0;
+}
+
+/* LEGACY FIX only - do not use fieldsets for settings */
+fieldset.warning legend, fieldset.update legend {
+ top: 18px;
+ position: relative;
+}
+fieldset.warning legend + p, fieldset.update legend + p {
+ margin-top: 12px;
+}
+
+/* for IE10 */
+@-ms-viewport {
+ width: device-width;
+}
+/* hidden input type=file field */
+.hiddenuploadfield {
+ display: none;
+ width: 0;
+ height: 0;
+ opacity: 0;
+}
+
+/*# sourceMappingURL=styles.css.map */
diff --git a/core/css/styles.css.map b/core/css/styles.css.map
new file mode 100644
index 00000000000..3eb43213bff
--- /dev/null
+++ b/core/css/styles.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss","styles.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;;AAKH;AAEA;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAID;AAEA;EACC;EACA;;;AAID;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAa;EACb;EACA;EACA;EACA;EACA;EACA,KDxFe;;;AC2FhB;AAEA;EACC;;;AAGD;EACC;;;AAMC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;AAEA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;;;AAGD;AAEA;AAEA;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAIC;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAIA;EACC;EACA;;;AAKD;EACC;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;EACA;;;AAIF;EACC;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;AACA;AAEA;AAEA;AAEA;EACC;EACA;;AACA;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;AANA;EACC;EACA;;AAKD;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;EACC;;;AAIA;AAAA;EAGC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAED;EACC;;AAEA;EACC;;AAED;EACC;;AAGF;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAGA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;;AAMJ;EACC;EACA;;;AAID;AACA;EACC;EACA;EACA;EACA;AAwBA;;AAtBA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAIF;EACC;;AAGA;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;;AAGA;AAAA;AAAA;EAIC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;;AAMJ;AAGC;AAAA;EACC;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AACA;EACC;EACA;EACA;AA0BA;;AAxBA;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGA;EACC;;AAED;EACC;;AAED;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AAKF;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;AACA;AACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;AACC;EACA;EACA;;AAEC;EACC;EACA;;AACA;EACC;EACA;;AAIH;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EAGC;;AAED;AAAA;EAEC;;AAGD;EACC;EACA;;AAED;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EAIC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAhBS;EAiBT;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,aA/BU;EAgCV;;AACA;EACC;;AAGF;EACC;EACA;;AAED;EACC;;AAON;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;;;AAGD;AAGC;EACC;EACA;EACA;EAEA;EACA;;AAEA;EAGC;;;AAKH;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AACA;AAAA;EAEC;;AAIF;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EACA;AA6CA;;AA3CA;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;AACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;;AAED;EACC;;;AAMH;EACC;EACA;EACA;;;AAGD;AAEA;EACC;;;AAGD;AAGC;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;;;AAIF;AACA;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EACC;;AAIA;EACC;;AAIF;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;;AAIH;EACC;;AACA;EACC;;AAGF;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;AAAA;EAGC;;AAGF;EACC;EACA;;AAID;EACC;EACA;;AAEA;EACC;;AAGF;EACC;;AAEA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;;AAIF;AAGC;EACC;EACA;;AAED;EACC;;;AAIF;AACA;EACC;;AAID;AAEA;EACC;EACA;EACA;EACA","file":"styles.css"} \ No newline at end of file
diff --git a/core/css/styles.scss b/core/css/styles.scss
index f1130979134..ab6eddaae8c 100644
--- a/core/css/styles.scss
+++ b/core/css/styles.scss
@@ -13,6 +13,7 @@
* @license GNU AGPL version 3 or any later version
*
*/
+@use 'sass:math';
@use 'variables';
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {
@@ -298,7 +299,7 @@ body {
position: absolute !important;
height: 20px;
width: 24px;
- background-image: var(--icon-toggle-000);
+ background-image: var(--icon-toggle-dark);
background-repeat: no-repeat;
background-position: center;
opacity: .3;
@@ -720,7 +721,7 @@ code {
padding-right: 140px;
div:first-child a {
- background-image: var(--icon-home-000);
+ background-image: var(--icon-home-dark);
background-repeat: no-repeat;
background-position: left center;
}
@@ -777,7 +778,7 @@ code {
order:1;
.icon.icon-add{
- background-image: var(--icon-add-000);
+ background-image: var(--icon-add-dark);
background-size: 16px 16px;
width: 34px;
height: 34px;
@@ -945,7 +946,7 @@ code {
}
}
&.filesize {
- line-height: $name-height / 3;
+ line-height: math.div($name-height, 3);
width: 100%;
}
&.date {
diff --git a/core/css/systemtags.css b/core/css/systemtags.css
new file mode 100644
index 00000000000..f2c3e75b568
--- /dev/null
+++ b/core/css/systemtags.css
@@ -0,0 +1,86 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+.systemtags-select2-dropdown .select2-result-label .checkmark {
+ visibility: hidden;
+ margin-left: -5px;
+ margin-right: 5px;
+ padding: 4px;
+}
+.systemtags-select2-dropdown .select2-result-label .new-item .systemtags-actions {
+ display: none;
+}
+.systemtags-select2-dropdown .select2-selected .select2-result-label .checkmark {
+ visibility: visible;
+}
+.systemtags-select2-dropdown .select2-result-label .icon {
+ display: inline-block;
+ opacity: 0.5;
+}
+.systemtags-select2-dropdown .select2-result-label .icon.rename {
+ padding: 4px;
+}
+.systemtags-select2-dropdown .systemtags-actions {
+ position: absolute;
+ right: 5px;
+}
+.systemtags-select2-dropdown .systemtags-rename-form {
+ display: inline-block;
+ width: calc(100% - 20px);
+ top: -6px;
+ position: relative;
+}
+.systemtags-select2-dropdown .systemtags-rename-form input {
+ display: inline-block;
+ height: 30px;
+ width: calc(100% - 40px);
+}
+.systemtags-select2-dropdown .label {
+ width: 85%;
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.systemtags-select2-dropdown .label.hidden {
+ display: none;
+}
+.systemtags-select2-dropdown span {
+ line-height: 25px;
+}
+.systemtags-select2-dropdown .systemtags-item {
+ display: inline-block;
+ height: 25px;
+ width: 100%;
+}
+.systemtags-select2-dropdown .select2-result-label {
+ height: 25px;
+}
+
+.systemTagsInfoView,
+.systemtags-select2-container {
+ width: 100%;
+}
+.systemTagsInfoView .select2-choices,
+.systemtags-select2-container .select2-choices {
+ flex-wrap: nowrap !important;
+ max-height: 44px;
+}
+.systemTagsInfoView .select2-choices .select2-search-choice.select2-locked .label,
+.systemtags-select2-container .select2-choices .select2-search-choice.select2-locked .label {
+ opacity: 0.5;
+}
+
+#select2-drop.systemtags-select2-dropdown .select2-results li.select2-result {
+ padding: 5px;
+}
+
+/*# sourceMappingURL=systemtags.css.map */
diff --git a/core/css/systemtags.css.map b/core/css/systemtags.css.map
new file mode 100644
index 00000000000..a4bdce4e0b7
--- /dev/null
+++ b/core/css/systemtags.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["systemtags.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcE;EACC;EACA;EACA;EACA;;AAED;EACC;;AAGF;EACC;;AAED;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;;AAED;EACC;EACA;EACA;;AAED;EACC;;;AAIF;AAAA;EAEC;;AAEA;AAAA;EACC;EACA;;AAGD;AAAA;EACC;;;AAIF;EACC","file":"systemtags.css"} \ No newline at end of file
diff --git a/core/css/toast.css b/core/css/toast.css
new file mode 100644
index 00000000000..d877cc299b7
--- /dev/null
+++ b/core/css/toast.css
@@ -0,0 +1,111 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/**
+ * @see core/src/icons.js
+ */
+/**
+ * SVG COLOR API
+ *
+ * @param string $icon the icon filename
+ * @param string $dir the icon folder within /core/img if $core or app name
+ * @param string $color the desired color in hexadecimal
+ * @param int $version the version of the file
+ * @param bool [$core] search icon in core
+ *
+ * @returns A background image with the url to the set to the requested icon.
+ */
+.toastify.toast {
+ min-width: 200px;
+ background: none;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ box-shadow: 0 0 6px 0 var(--color-box-shadow);
+ padding: 12px;
+ padding-right: 34px;
+ margin-top: 45px;
+ position: fixed;
+ z-index: 9000;
+ border-radius: var(--border-radius);
+}
+.toastify.toast .toast-close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 38px;
+ opacity: 0.4;
+ padding: 12px;
+ /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */
+ background-image: var(--icon-close-dark);
+ background-position: center;
+ background-repeat: no-repeat;
+ text-indent: 200%;
+ white-space: nowrap;
+ overflow: hidden;
+}
+.toastify.toast .toast-close:hover, .toastify.toast .toast-close:focus, .toastify.toast .toast-close:active {
+ cursor: pointer;
+ opacity: 1;
+}
+
+.toastify.toastify-top {
+ right: 10px;
+}
+
+.toast-error {
+ border-left: 3px solid var(--color-error);
+}
+
+.toast-info {
+ border-left: 3px solid var(--color-primary);
+}
+
+.toast-warning {
+ border-left: 3px solid var(--color-warning);
+}
+
+.toast-success {
+ border-left: 3px solid var(--color-success);
+}
+
+/*# sourceMappingURL=toast.css.map */
diff --git a/core/css/toast.css.map b/core/css/toast.css.map
new file mode 100644
index 00000000000..19ff0067613
--- /dev/null
+++ b/core/css/toast.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss","functions.scss","toast.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC/CA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;ADyCD;EAEA;ECzCC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;;AAIH;EACC;;;AAGD;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC","file":"toast.css"} \ No newline at end of file
diff --git a/core/css/tooltip.css b/core/css/tooltip.css
new file mode 100644
index 00000000000..a215f2e5649
--- /dev/null
+++ b/core/css/tooltip.css
@@ -0,0 +1,125 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ *
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.tooltip {
+ position: absolute;
+ display: block;
+ font-family: var(--font-face);
+ font-style: normal;
+ font-weight: normal;
+ letter-spacing: normal;
+ line-break: auto;
+ line-height: 1.6;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ white-space: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ overflow-wrap: anywhere;
+ font-size: 12px;
+ opacity: 0;
+ z-index: 100000;
+ /* default to top */
+ margin-top: -3px;
+ padding: 10px 0;
+ filter: drop-shadow(0 1px 10px var(--color-box-shadow));
+ /* TOP */
+ /* BOTTOM */
+}
+.tooltip.in, .tooltip.show, .tooltip.tooltip[aria-hidden=false] {
+ visibility: visible;
+ opacity: 1;
+ transition: opacity 0.15s;
+}
+.tooltip.top .tooltip-arrow, .tooltip[x-placement^=top] {
+ left: 50%;
+ margin-left: -10px;
+}
+.tooltip.bottom, .tooltip[x-placement^=bottom] {
+ margin-top: 3px;
+ padding: 10px 0;
+}
+.tooltip.right, .tooltip[x-placement^=right] {
+ margin-left: 3px;
+ padding: 0 10px;
+}
+.tooltip.right .tooltip-arrow, .tooltip[x-placement^=right] .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -10px;
+ border-width: 10px 10px 10px 0;
+ border-right-color: var(--color-main-background);
+}
+.tooltip.left, .tooltip[x-placement^=left] {
+ margin-left: -3px;
+ padding: 0 5px;
+}
+.tooltip.left .tooltip-arrow, .tooltip[x-placement^=left] .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -10px;
+ border-width: 10px 0 10px 10px;
+ border-left-color: var(--color-main-background);
+}
+.tooltip.top .tooltip-arrow, .tooltip.top .arrow, .tooltip.top-left .tooltip-arrow, .tooltip.top-left .arrow, .tooltip[x-placement^=top] .tooltip-arrow, .tooltip[x-placement^=top] .arrow, .tooltip.top-right .tooltip-arrow, .tooltip.top-right .arrow {
+ bottom: 0;
+ border-width: 10px 10px 0;
+ border-top-color: var(--color-main-background);
+}
+.tooltip.top-left .tooltip-arrow {
+ right: 10px;
+ margin-bottom: -10px;
+}
+.tooltip.top-right .tooltip-arrow {
+ left: 10px;
+ margin-bottom: -10px;
+}
+.tooltip.bottom .tooltip-arrow, .tooltip.bottom .arrow, .tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip[x-placement^=bottom] .arrow, .tooltip.bottom-left .tooltip-arrow, .tooltip.bottom-left .arrow, .tooltip.bottom-right .tooltip-arrow, .tooltip.bottom-right .arrow {
+ top: 0;
+ border-width: 0 10px 10px;
+ border-bottom-color: var(--color-main-background);
+}
+.tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip.bottom .tooltip-arrow {
+ left: 50%;
+ margin-left: -10px;
+}
+.tooltip.bottom-left .tooltip-arrow {
+ right: 10px;
+ margin-top: -10px;
+}
+.tooltip.bottom-right .tooltip-arrow {
+ left: 10px;
+ margin-top: -10px;
+}
+
+.tooltip-inner {
+ max-width: 350px;
+ padding: 5px 8px;
+ background-color: var(--color-main-background);
+ color: var(--color-main-text);
+ text-align: center;
+ border-radius: var(--border-radius);
+}
+
+.tooltip-arrow, .tooltip .arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+/*# sourceMappingURL=tooltip.css.map */
diff --git a/core/css/tooltip.css.map b/core/css/tooltip.css.map
new file mode 100644
index 00000000000..2b488db1c88
--- /dev/null
+++ b/core/css/tooltip.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["tooltip.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;AA0CA;AAmBA;;AA5DA;EAGI;EACA;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAGR;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAQJ;EACI;EACA;EACA;;AAGR;EACI;EACA;;AAEJ;EACI;EACA;;AAOA;EACI;EACA;EACA;;AAGR;EAEI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA","file":"tooltip.css"} \ No newline at end of file
diff --git a/core/css/variables.css b/core/css/variables.css
new file mode 100644
index 00000000000..904c85ccd0e
--- /dev/null
+++ b/core/css/variables.css
@@ -0,0 +1,24 @@
+@charset "UTF-8";
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/*# sourceMappingURL=variables.css.map */
diff --git a/core/css/variables.css.map b/core/css/variables.css.map
new file mode 100644
index 00000000000..e2354d551c2
--- /dev/null
+++ b/core/css/variables.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["variables.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"variables.css"} \ No newline at end of file
diff --git a/core/css/whatsnew.css b/core/css/whatsnew.css
new file mode 100644
index 00000000000..942b73451ae
--- /dev/null
+++ b/core/css/whatsnew.css
@@ -0,0 +1,32 @@
+/**
+ * @copyright Copyright (c) 2018, Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+.whatsNewPopover {
+ bottom: 35px !important;
+ left: 15px !important;
+ width: 270px;
+ z-index: 700;
+}
+
+.whatsNewPopover p {
+ width: auto !important;
+}
+
+.whatsNewPopover .caption {
+ font-weight: bold;
+ cursor: auto !important;
+}
+
+.whatsNewPopover .icon-close {
+ position: absolute;
+ right: 0;
+}
+
+.whatsNewPopover::after {
+ content: none;
+}
+
+/*# sourceMappingURL=whatsnew.css.map */
diff --git a/core/css/whatsnew.css.map b/core/css/whatsnew.css.map
new file mode 100644
index 00000000000..b55af64e850
--- /dev/null
+++ b/core/css/whatsnew.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["whatsnew.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE","file":"whatsnew.css"} \ No newline at end of file
diff --git a/core/src/icons.js b/core/src/icons.js
index ca706dcfdb8..6ea8070c912 100644
--- a/core/src/icons.js
+++ b/core/src/icons.js
@@ -204,6 +204,7 @@ const iconsAliases = {
'icon-category-search': 'icon-search-dark',
'icon-category-tools': 'icon-settings-dark',
'icon-filetype-text': 'icon-file-grey',
+ 'nav-icon-systemtagsfilter': 'icon-tag-dark',
}
const colorSvg = function(svg = '', color = '000') {
diff --git a/dist/icons.css b/dist/icons.css
index bd2413186fe..5f200a1046e 100644
--- a/dist/icons.css
+++ b/dist/icons.css
@@ -1371,6 +1371,9 @@ body .icon-category-tools {
body .icon-filetype-text {
background-image: var(--icon-file-grey);
}
+body .nav-icon-systemtagsfilter {
+ background-image: var(--icon-tag-dark);
+}
@media (prefers-color-scheme: dark) {
body {
diff --git a/dist/workflowengine-workflowengine.js b/dist/workflowengine-workflowengine.js
index 896aafc5ed7..5013a993b63 100644
--- a/dist/workflowengine-workflowengine.js
+++ b/dist/workflowengine-workflowengine.js
@@ -1,3 +1,3 @@
/*! For license information please see workflowengine-workflowengine.js.LICENSE.txt */
-!function(){var n,e={94158:function(n,e,i){"use strict";var o=i(20144),r=i(20629),a=i(4820),s=i(16453),l=i(79753),c=0===(0,s.loadState)("workflowengine","scope")?"global":"user",u=function(t){return(0,l.generateOcsUrl)("apps/workflowengine/api/v1/workflows/{scopeValue}",{scopeValue:c})+t+"?format=json"},p=i(10128),d=i.n(p);function A(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function m(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){A(r,i,o,a,s,"next",t)}function s(t){A(r,i,o,a,s,"throw",t)}a(void 0)}))}}function f(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function h(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?f(Object(e),!0).forEach((function(n){g(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):f(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function g(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}o.default.use(r.ZP);var v=new r.yh({state:{rules:[],scope:(0,s.loadState)("workflowengine","scope"),appstoreEnabled:(0,s.loadState)("workflowengine","appstoreenabled"),operations:(0,s.loadState)("workflowengine","operators"),plugins:o.default.observable({checks:{},operators:{}}),entities:(0,s.loadState)("workflowengine","entities"),events:(0,s.loadState)("workflowengine","entities").map((function(t){return t.events.map((function(n){return h({id:"".concat(t.id,"::").concat(n.eventName),entity:t},n)}))})).flat(),checks:(0,s.loadState)("workflowengine","checks")},mutations:{addRule:function(t,n){t.rules.push(h(h({},n),{},{valid:!0}))},updateRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id})),i=Object.assign({},n);o.default.set(t.rules,e,i)},removeRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id}));t.rules.splice(e,1)},addPluginCheck:function(t,n){o.default.set(t.plugins.checks,n.class,n)},addPluginOperator:function(t,n){n=Object.assign({color:"var(--color-primary-element)"},n,t.operations[n.id]||{}),void 0!==t.operations[n.id]&&o.default.set(t.operations,n.id,n)}},actions:{fetchRules:function(t){return m(regeneratorRuntime.mark((function n(){var e,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,a.default.get(u(""));case 2:e=n.sent,i=e.data,Object.values(i.ocs.data).flat().forEach((function(n){t.commit("addRule",n)}));case 5:case"end":return n.stop()}}),n)})))()},createNewRule:function(t,n){var e=null,i=[];!1===n.isComplex&&""===n.fixedEntity&&(i=[(e=(e=t.state.entities.find((function(t){return n.entities&&n.entities[0]===t.id})))||Object.values(t.state.entities)[0]).events[0].eventName]),t.commit("addRule",{id:-(new Date).getTime(),class:n.id,entity:e?e.id:n.fixedEntity,events:i,name:"",checks:[{class:null,operator:null,value:""}],operation:n.operation||""})},updateRule:function(t,n){t.commit("updateRule",h(h({},n),{},{events:"string"==typeof n.events?JSON.parse(n.events):n.events}))},removeRule:function(t,n){t.commit("removeRule",n)},pushUpdateRule:function(t,n){return m(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==t.state.scope){e.next=3;break}return e.next=3,d()();case 3:if(!(n.id<0)){e.next=9;break}return e.next=6,a.default.post(u(""),n);case 6:i=e.sent,e.next=12;break;case 9:return e.next=11,a.default.put(u("/".concat(n.id)),n);case 11:i=e.sent;case 12:o.default.set(n,"id",i.data.ocs.data.id),t.commit("updateRule",n);case 14:case"end":return e.stop()}}),e)})))()},deleteRule:function(t,n){return m(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d()();case 2:return e.next=4,a.default.delete(u("/".concat(n.id)));case 4:t.commit("removeRule",n);case 5:case"end":return e.stop()}}),e)})))()},setValid:function(t,n){var e=n.rule,i=n.valid;e.valid=i,t.commit("updateRule",e)}},getters:{getRules:function(t){return t.rules.filter((function(n){return void 0!==t.operations[n.class]})).sort((function(t,n){return t.id-n.id||n.class-t.class}))},getOperationForRule:function(t){return function(n){return t.operations[n.class]}},getEntityForOperation:function(t){return function(n){return t.entities.find((function(t){return n.fixedEntity===t.id}))}},getEventsForOperation:function(t){return function(n){return t.events}},getChecksForEntity:function(t){return function(n){return Object.values(t.checks).filter((function(t){return t.supportedEntities.indexOf(n)>-1||0===t.supportedEntities.length})).map((function(n){return t.plugins.checks[n.id]})).reduce((function(t,n){return t[n.class]=n,t}),{})}}}}),C=i(15168),w=i.n(C),b=i(79440),x=i.n(b),k=i(56286),y=i.n(k),_=i(1412),j=i.n(_),O=i(73723),R=i(44254),V=i(78039),E=i(7811),P=i.n(E),B=i(26932),T={name:"Event",components:{Multiselect:P()},props:{rule:{type:Object,required:!0}},computed:{entity:function(){return this.$store.getters.getEntityForOperation(this.operation)},operation:function(){return this.$store.getters.getOperationForRule(this.rule)},allEvents:function(){return this.$store.getters.getEventsForOperation(this.operation)},currentEvent:function(){var t=this;return this.allEvents.filter((function(n){return n.entity.id===t.rule.entity&&-1!==t.rule.events.indexOf(n.eventName)}))}},methods:{updateEvent:function(n){if(0!==n.length){var e,i=this.rule.entity,o=n.map((function(t){return t.entity.id})).filter((function(t,n,e){return e.indexOf(t)===n}));e=o.length>1?o.filter((function(t){return t!==i}))[0]:o[0],this.$set(this.rule,"entity",e),this.$set(this.rule,"events",n.filter((function(t){return t.entity.id===e})).map((function(t){return t.eventName}))),this.$emit("update",this.rule)}else(0,B.K2)(t("workflowengine","At least one event must be selected"))}}},S=i(93379),D=i.n(S),F=i(7795),$=i.n(F),U=i(90569),M=i.n(U),I=i(3565),z=i.n(I),L=i(19216),G=i.n(L),N=i(44589),Z=i.n(N),W=i(71605),q={};q.styleTagTransform=Z(),q.setAttributes=z(),q.insert=M().bind(null,"head"),q.domAPI=$(),q.insertStyleElement=G(),D()(W.Z,q),W.Z&&W.Z.locals&&W.Z.locals;var Y=i(51900),H=(0,Y.Z)(T,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"event"},[t.operation.isComplex&&""!==t.operation.fixedEntity?e("div",{staticClass:"isComplex"},[e("img",{staticClass:"option__icon",attrs:{src:t.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(t.operation.triggerHint))])]):e("Multiselect",{attrs:{value:t.currentEvent,options:t.allEvents,"track-by":"id",multiple:!0,"auto-limit":!1,disabled:t.allEvents.length<=1},on:{input:t.updateEvent},scopedSlots:t._u([{key:"selection",fn:function(n){var i=n.values,o=n.isOpen;return[i.length&&!o?e("div",{staticClass:"eventlist"},[e("img",{staticClass:"option__icon",attrs:{src:i[0].entity.icon}}),t._v(" "),t._l(i,(function(n,o){return e("span",{key:n.id,staticClass:"text option__title option__title_single"},[t._v(t._s(n.displayName)+" "),o+1<i.length?e("span",[t._v(", ")]):t._e()])}))],2):t._e()]}},{key:"option",fn:function(n){return[e("img",{staticClass:"option__icon",attrs:{src:n.option.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.displayName))])]}}])})],1)}),[],!1,null,"f3569276",null).exports,J=i(2649),Q=i.n(J),K={name:"Check",components:{ActionButton:y(),Actions:x(),Multiselect:P()},directives:{ClickOutside:Q()},props:{check:{type:Object,required:!0},rule:{type:Object,required:!0}},data:function(){return{deleteVisible:!1,currentOption:null,currentOperator:null,options:[],valid:!1}},computed:{checks:function(){return this.$store.getters.getChecksForEntity(this.rule.entity)},operators:function(){if(!this.currentOption)return[];var t=this.checks[this.currentOption.class].operators;return"function"==typeof t?t(this.check):t},currentComponent:function(){return this.currentOption?this.checks[this.currentOption.class].component:[]},valuePlaceholder:function(){return this.currentOption&&this.currentOption.placeholder?this.currentOption.placeholder(this.check):""}},watch:{"check.operator":function(){this.validate()}},mounted:function(){var t=this;this.options=Object.values(this.checks),this.currentOption=this.checks[this.check.class],this.currentOperator=this.operators.find((function(n){return n.operator===t.check.operator})),null===this.check.class&&this.$nextTick((function(){return t.$refs.checkSelector.$el.focus()})),this.validate()},methods:{showDelete:function(){this.deleteVisible=!0},hideDelete:function(){this.deleteVisible=!1},validate:function(){this.valid=!0,this.currentOption&&this.currentOption.validate&&(this.valid=!!this.currentOption.validate(this.check)),this.check.invalid=!this.valid,this.$emit("validate",this.valid)},updateCheck:function(){var t=this,n=this.operators.findIndex((function(n){return t.check.operator===n.operator}));this.check.class===this.currentOption.class&&-1!==n||(this.currentOperator=this.operators[0]),this.check.class=this.currentOption.class,this.check.operator=this.currentOperator.operator,this.validate(),this.$emit("update",this.check)}}},X=i(38530),tt={};tt.styleTagTransform=Z(),tt.setAttributes=z(),tt.insert=M().bind(null,"head"),tt.domAPI=$(),tt.insertStyleElement=G(),D()(X.Z,tt),X.Z&&X.Z.locals&&X.Z.locals;var nt=(0,Y.Z)(K,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideDelete,expression:"hideDelete"}],staticClass:"check",on:{click:t.showDelete}},[e("Multiselect",{ref:"checkSelector",attrs:{options:t.options,label:"name","track-by":"class","allow-empty":!1,placeholder:t.t("workflowengine","Select a filter")},on:{input:t.updateCheck},model:{value:t.currentOption,callback:function(n){t.currentOption=n},expression:"currentOption"}}),t._v(" "),e("Multiselect",{staticClass:"comparator",attrs:{disabled:!t.currentOption,options:t.operators,label:"name","track-by":"operator","allow-empty":!1,placeholder:t.t("workflowengine","Select a comparator")},on:{input:t.updateCheck},model:{value:t.currentOperator,callback:function(n){t.currentOperator=n},expression:"currentOperator"}}),t._v(" "),t.currentOperator&&t.currentComponent?e(t.currentOption.component,{tag:"component",staticClass:"option",attrs:{disabled:!t.currentOption,check:t.check},on:{input:t.updateCheck,valid:function(n){(t.valid=!0)&&t.validate()},invalid:function(n){!(t.valid=!1)&&t.validate()}},model:{value:t.check.value,callback:function(n){t.$set(t.check,"value",n)},expression:"check.value"}}):e("input",{directives:[{name:"model",rawName:"v-model",value:t.check.value,expression:"check.value"}],staticClass:"option",class:{invalid:!t.valid},attrs:{type:"text",disabled:!t.currentOption,placeholder:t.valuePlaceholder},domProps:{value:t.check.value},on:{input:[function(n){n.target.composing||t.$set(t.check,"value",n.target.value)},t.updateCheck]}}),t._v(" "),t.deleteVisible||!t.currentOption?e("Actions",[e("ActionButton",{attrs:{icon:"icon-close"},on:{click:function(n){return t.$emit("remove")}}})],1):t._e()],1)}),[],!1,null,"70cc784d",null).exports,et={name:"Operation",components:{Button:j()},props:{operation:{type:Object,required:!0},colored:{type:Boolean,default:!0}}},it=i(46514),ot={};ot.styleTagTransform=Z(),ot.setAttributes=z(),ot.insert=M().bind(null,"head"),ot.domAPI=$(),ot.insertStyleElement=G(),D()(it.Z,ot),it.Z&&it.Z.locals&&it.Z.locals;var rt=(0,Y.Z)(et,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"actions__item",class:{colored:t.colored},style:{backgroundColor:t.colored?t.operation.color:"transparent"}},[e("div",{staticClass:"icon",class:t.operation.iconClass,style:{backgroundImage:t.operation.iconClass?"":"url("+t.operation.icon+")"}}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.operation.name))]),t._v(" "),e("small",[t._v(t._s(t.operation.description))]),t._v(" "),t.colored?e("Button",[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Add new flow"))+"\n\t\t")]):t._e()],1),t._v(" "),e("div",{staticClass:"actions__item_options"},[t._t("default")],2)])}),[],!1,null,"96600802",null).exports;function at(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function st(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){at(r,i,o,a,s,"next",t)}function s(t){at(r,i,o,a,s,"throw",t)}a(void 0)}))}}var lt={name:"Rule",components:{Operation:rt,Check:nt,Event:H,Actions:x(),ActionButton:y(),Button:j(),ArrowRight:O.default,CheckMark:R.default,Close:V.default},directives:{Tooltip:w()},props:{rule:{type:Object,required:!0}},data:function(){return{editing:!1,checks:[],error:null,dirty:this.rule.id<0,originalRule:null}},computed:{operation:function(){return this.$store.getters.getOperationForRule(this.rule)},ruleStatus:function(){return this.error||!this.rule.valid||0===this.rule.checks.length||this.rule.checks.some((function(t){return!0===t.invalid}))?{title:t("workflowengine","The configuration is invalid"),icon:"Close",type:"warning",tooltip:{placement:"bottom",show:!0,content:this.error}}:this.dirty?{title:t("workflowengine","Save"),icon:"ArrowRight",type:"primary"}:{title:t("workflowengine","Active"),icon:"CheckMark",type:"success"}},lastCheckComplete:function(){var t=this.rule.checks[this.rule.checks.length-1];return void 0===t||null!==t.class}},mounted:function(){this.originalRule=JSON.parse(JSON.stringify(this.rule))},methods:{updateOperation:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.$set(n.rule,"operation",t),e.next=3,n.updateRule();case 3:case"end":return e.stop()}}),e)})))()},validate:function(t){this.error=null,this.$store.dispatch("updateRule",this.rule)},updateRule:function(){this.dirty||(this.dirty=!0),this.error=null,this.$store.dispatch("updateRule",this.rule)},saveRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("pushUpdateRule",t.rule);case 3:t.dirty=!1,t.error=null,t.originalRule=JSON.parse(JSON.stringify(t.rule)),n.next=12;break;case 8:n.prev=8,n.t0=n.catch(0),console.error("Failed to save operation"),t.error=n.t0.response.data.ocs.meta.message;case 12:case"end":return n.stop()}}),n,null,[[0,8]])})))()},deleteRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("deleteRule",t.rule);case 3:n.next=9;break;case 5:n.prev=5,n.t0=n.catch(0),console.error("Failed to delete operation"),t.error=n.t0.response.data.ocs.meta.message;case 9:case"end":return n.stop()}}),n,null,[[0,5]])})))()},cancelRule:function(){this.rule.id<0?this.$store.dispatch("removeRule",this.rule):(this.$store.dispatch("updateRule",this.originalRule),this.originalRule=JSON.parse(JSON.stringify(this.rule)),this.dirty=!1)},removeCheck:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(i=n.rule.checks.findIndex((function(n){return n===t})))>-1&&n.$delete(n.rule.checks,i),n.$store.dispatch("updateRule",n.rule);case 3:case"end":return e.stop()}}),e)})))()},onAddFilter:function(){this.rule.checks.push({class:null,operator:null,value:""})}}},ct=i(11661),ut={};function pt(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function dt(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?pt(Object(e),!0).forEach((function(n){At(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):pt(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function At(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}ut.styleTagTransform=Z(),ut.setAttributes=z(),ut.insert=M().bind(null,"head"),ut.domAPI=$(),ut.insertStyleElement=G(),D()(ct.Z,ut),ct.Z&&ct.Z.locals&&ct.Z.locals;var mt={name:"Workflow",components:{Operation:rt,Rule:(0,Y.Z)(lt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.operation?e("div",{staticClass:"section rule",style:{borderLeftColor:t.operation.color||""}},[e("div",{staticClass:"trigger"},[e("p",[e("span",[t._v(t._s(t.t("workflowengine","When")))]),t._v(" "),e("Event",{attrs:{rule:t.rule},on:{update:t.updateRule}})],1),t._v(" "),t._l(t.rule.checks,(function(n,i){return e("p",{key:i},[e("span",[t._v(t._s(t.t("workflowengine","and")))]),t._v(" "),e("Check",{attrs:{check:n,rule:t.rule},on:{update:t.updateRule,validate:t.validate,remove:function(e){return t.removeCheck(n)}}})],1)})),t._v(" "),e("p",[e("span"),t._v(" "),t.lastCheckComplete?e("input",{staticClass:"check--add",attrs:{type:"button",value:"Add a new filter"},on:{click:t.onAddFilter}}):t._e()])],2),t._v(" "),e("div",{staticClass:"flow-icon icon-confirm"}),t._v(" "),e("div",{staticClass:"action"},[e("Operation",{attrs:{operation:t.operation,colored:!1}},[t.operation.options?e(t.operation.options,{tag:"component",on:{input:t.updateOperation},model:{value:t.rule.operation,callback:function(n){t.$set(t.rule,"operation",n)},expression:"rule.operation"}}):t._e()],1),t._v(" "),e("div",{staticClass:"buttons"},[t.rule.id<-1||t.dirty?e("Button",{on:{click:t.cancelRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Cancel"))+"\n\t\t\t")]):t.dirty?t._e():e("Button",{on:{click:t.deleteRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Delete"))+"\n\t\t\t")]),t._v(" "),e("Button",{attrs:{type:t.ruleStatus.type},on:{click:t.saveRule},scopedSlots:t._u([{key:"icon",fn:function(){return[e(t.ruleStatus.icon,{tag:"component",attrs:{size:20}})]},proxy:!0}],null,!1,2383918876)},[t._v("\n\t\t\t\t"+t._s(t.ruleStatus.title)+"\n\t\t\t")])],1),t._v(" "),t.error?e("p",{staticClass:"error-message"},[t._v("\n\t\t\t"+t._s(t.error)+"\n\t\t")]):t._e()],1)]):t._e()}),[],!1,null,"779dc71c",null).exports},data:function(){return{showMoreOperations:!1,appstoreUrl:(0,l.generateUrl)("settings/apps/workflow")}},computed:dt(dt(dt({},(0,r.Se)({rules:"getRules"})),(0,r.rn)({appstoreEnabled:"appstoreEnabled",scope:"scope",operations:"operations"})),{},{hasMoreOperations:function(){return Object.keys(this.operations).length>3},getMainOperations:function(){return this.showMoreOperations?Object.values(this.operations):Object.values(this.operations).slice(0,3)},showAppStoreHint:function(){return 0===this.scope&&this.appstoreEnabled&&OC.isUserAdmin()}}),mounted:function(){this.$store.dispatch("fetchRules")},methods:{createNewRule:function(t){this.$store.dispatch("createNewRule",t)}}},ft=i(33855),ht={};ht.styleTagTransform=Z(),ht.setAttributes=z(),ht.insert=M().bind(null,"head"),ht.domAPI=$(),ht.insertStyleElement=G(),D()(ft.Z,ht),ft.Z&&ft.Z.locals&&ft.Z.locals;var gt=(0,Y.Z)(mt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"workflowengine"}},[e("div",{staticClass:"section"},[e("h2",[t._v(t._s(t.t("workflowengine","Available flows")))]),t._v(" "),0===t.scope?e("p",{staticClass:"settings-hint"},[e("a",{attrs:{href:"https://nextcloud.com/developer/"}},[t._v(t._s(t.t("workflowengine","For details on how to write your own flow, check out the development documentation.")))])]):t._e(),t._v(" "),e("transition-group",{staticClass:"actions",attrs:{name:"slide",tag:"div"}},[t._l(t.getMainOperations,(function(n){return e("Operation",{key:n.id,attrs:{operation:n},nativeOn:{click:function(e){return t.createNewRule(n)}}})})),t._v(" "),t.showAppStoreHint?e("a",{key:"add",staticClass:"actions__item colored more",attrs:{href:t.appstoreUrl}},[e("div",{staticClass:"icon icon-add"}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.t("workflowengine","More flows")))]),t._v(" "),e("small",[t._v(t._s(t.t("workflowengine","Browse the App Store")))])])]):t._e()],2),t._v(" "),t.hasMoreOperations?e("div",{staticClass:"actions__more"},[e("button",{staticClass:"icon",class:t.showMoreOperations?"icon-triangle-n":"icon-triangle-s",on:{click:function(n){t.showMoreOperations=!t.showMoreOperations}}},[t._v("\n\t\t\t\t"+t._s(t.showMoreOperations?t.t("workflowengine","Show less"):t.t("workflowengine","Show more"))+"\n\t\t\t")])]):t._e(),t._v(" "),0===t.scope?e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Configured flows"))+"\n\t\t")]):e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Your flows"))+"\n\t\t")])],1),t._v(" "),t.rules.length>0?e("transition-group",{attrs:{name:"slide"}},t._l(t.rules,(function(t){return e("Rule",{key:t.id,attrs:{rule:t}})})),1):t._e()],1)}),[],!1,null,"7b3e4a56",null).exports,vt=/^\/(.*)\/([gui]{0,3})$/,Ct=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/,wt=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/,bt={props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{newValue:""}},watch:{value:{immediate:!0,handler:function(t){this.updateInternalValue(t)}}},methods:{updateInternalValue:function(t){this.newValue=t}}};function xt(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var kt={name:"FileMimeType",components:{Multiselect:P()},mixins:[bt],data:function(){return{predefinedTypes:[{icon:"icon-folder",label:t("workflowengine","Folder"),pattern:"httpd/unix-directory"},{icon:"icon-picture",label:t("workflowengine","Images"),pattern:"/image\\/.*/"},{iconUrl:(0,l.imagePath)("core","filetypes/x-office-document"),label:t("workflowengine","Office documents"),pattern:"/(vnd\\.(ms-|openxmlformats-|oasis\\.opendocument).*)$/"},{iconUrl:(0,l.imagePath)("core","filetypes/application-pdf"),label:t("workflowengine","PDF documents"),pattern:"application/pdf"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return xt(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return xt(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?xt(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},isPredefined:function(){var t=this;return!!this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom mimetype"),pattern:""}},currentValue:function(){var n=this;return this.predefinedTypes.find((function(t){return n.newValue===t.pattern}))||{icon:"icon-settings-dark",label:t("workflowengine","Custom mimetype"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},yt=i(1510),_t={};_t.styleTagTransform=Z(),_t.setAttributes=z(),_t.insert=M().bind(null,"head"),_t.domAPI=$(),_t.insertStyleElement=G(),D()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;var jt=(0,Y.Z)(kt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a file type"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.t("workflowengine","e.g. httpd/unix-directory")},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"8c011724",null).exports,Ot=function t(n){var e={};if(1===n.nodeType){if(n.attributes.length>0){e["@attributes"]={};for(var i=0;i<n.attributes.length;i++){var o=n.attributes.item(i);e["@attributes"][o.nodeName]=o.nodeValue}}}else 3===n.nodeType&&(e=n.nodeValue);if(n.hasChildNodes())for(var r=0;r<n.childNodes.length;r++){var a=n.childNodes.item(r),s=a.nodeName;if(void 0===e[s])e[s]=t(a);else{if(void 0===e[s].push){var l=e[s];e[s]=[],e[s].push(l)}e[s].push(t(a))}}return e},Rt=0,Vt={name:"MultiselectTag",components:{Multiselect:P()},props:{label:{type:String,required:!0},value:{type:[String,Array],default:null},disabled:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1}},data:function(){return{inputValObjects:[],tags:[]}},computed:{id:function(){return"settings-input-text-"+this.uuid}},watch:{value:function(t){this.inputValObjects=this.getValueObject()}},beforeCreate:function(){var t=this;this.uuid=Rt.toString(),Rt+=1,(0,a.default)({method:"PROPFIND",url:(0,l.generateRemoteUrl)("dav")+"/systemtags/",data:'<?xml version="1.0"?>\n\t\t\t\t\t<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>'}).then((function(t){return function(t){var n=Ot(function(t){var n=null;try{n=(new DOMParser).parseFromString(t,"text/xml")}catch(t){console.error("Failed to parse xml document",t)}return n}(t)),e=n["d:multistatus"]["d:response"],i=[];for(var o in e){var r=e[o]["d:propstat"];"HTTP/1.1 200 OK"===r["d:status"]["#text"]&&i.push({id:r["d:prop"]["oc:id"]["#text"],displayName:r["d:prop"]["oc:display-name"]["#text"],canAssign:"true"===r["d:prop"]["oc:can-assign"]["#text"],userAssignable:"true"===r["d:prop"]["oc:user-assignable"]["#text"],userVisible:"true"===r["d:prop"]["oc:user-visible"]["#text"]})}return i}(t.data)})).then((function(n){t.tags=n,t.inputValObjects=t.getValueObject()})).catch(console.error.bind(this))},methods:{getValueObject:function(){var t=this;return 0===this.tags.length?[]:this.multiple?this.value.filter((function(t){return""!==t})).map((function(n){return t.tags.find((function(t){return t.id===n}))})):this.tags.find((function(n){return n.id===t.value}))},update:function(){this.multiple?this.$emit("input",this.inputValObjects.map((function(t){return t.id}))):null===this.inputValObjects?this.$emit("input",""):this.$emit("input",this.inputValObjects.id)},tagLabel:function(n){var e=n.displayName,i=n.userVisible,o=n.userAssignable;return!1===i?t("systemtags","%s (invisible)").replace("%s",e):!1===o?t("systemtags","%s (restricted)").replace("%s",e):e}}},Et={name:"FileSystemTag",components:{MultiselectTag:(0,Y.Z)(Vt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Multiselect",{staticClass:"multiselect-vue",attrs:{options:t.tags,"options-limit":5,placeholder:t.label,"track-by":"id","custom-label":t.tagLabel,multiple:t.multiple,"close-on-select":!1,"tag-width":60,disabled:t.disabled},on:{input:t.update},scopedSlots:t._u([{key:"option",fn:function(n){return[t._v("\n\t\t"+t._s(t.tagLabel(n.option))+"\n\t")]}}]),model:{value:t.inputValObjects,callback:function(n){t.inputValObjects=n},expression:"inputValObjects"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("core","No results")))])])}),[],!1,null,null,null).exports},props:{value:{type:String,default:""}},data:function(){return{newValue:[]}},watch:{value:function(){this.updateValue()}},beforeMount:function(){this.updateValue()},methods:{updateValue:function(){""!==this.value?this.newValue=this.value:this.newValue=null},update:function(){this.$emit("input",this.newValue||"")}}},Pt=(0,Y.Z)(Et,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("MultiselectTag",{attrs:{multiple:!1,label:t.t("workflowengine","Select a tag")},on:{input:t.update},model:{value:t.newValue,callback:function(n){t.newValue=n},expression:"newValue"}})}),[],!1,null,"31f5522d",null).exports,Bt=function(){return[{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")},{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")}]},Tt=[{class:"OCA\\WorkflowEngine\\Check\\FileName",name:t("workflowengine","File name"),operators:Bt,placeholder:function(t){return"matches"===t.operator||"!matches"===t.operator?"/^dummy-.+$/i":"filename.txt"},validate:function(t){return"matches"!==t.operator&&"!matches"!==t.operator||!!(n=t.value)&&null!==vt.exec(n);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileMimeType",name:t("workflowengine","File MIME type"),operators:Bt,component:jt},{class:"OCA\\WorkflowEngine\\Check\\FileSize",name:t("workflowengine","File size (upload)"),operators:[{operator:"less",name:t("workflowengine","less")},{operator:"!greater",name:t("workflowengine","less or equals")},{operator:"!less",name:t("workflowengine","greater or equals")},{operator:"greater",name:t("workflowengine","greater")}],placeholder:function(t){return"5 MB"},validate:function(t){return!!t.value&&null!==t.value.match(/^[0-9]+[ ]?[kmgt]?b$/i)}},{class:"OCA\\WorkflowEngine\\Check\\RequestRemoteAddress",name:t("workflowengine","Request remote address"),operators:[{operator:"matchesIPv4",name:t("workflowengine","matches IPv4")},{operator:"!matchesIPv4",name:t("workflowengine","does not match IPv4")},{operator:"matchesIPv6",name:t("workflowengine","matches IPv6")},{operator:"!matchesIPv6",name:t("workflowengine","does not match IPv6")}],placeholder:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?"::1/128":"127.0.0.1/32"},validate:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?!!(n=t.value)&&null!==wt.exec(n):function(t){return!!t&&null!==Ct.exec(t)}(t.value);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileSystemTags",name:t("workflowengine","File system tag"),operators:[{operator:"is",name:t("workflowengine","is tagged with")},{operator:"!is",name:t("workflowengine","is not tagged with")}],component:Pt}];function St(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var Dt={name:"RequestUserAgent",components:{Multiselect:P()},mixins:[bt],data:function(){return{newValue:"",predefinedTypes:[{pattern:"android",label:t("workflowengine","Android client"),icon:"icon-phone"},{pattern:"ios",label:t("workflowengine","iOS client"),icon:"icon-phone"},{pattern:"desktop",label:t("workflowengine","Desktop client"),icon:"icon-desktop"},{pattern:"mail",label:t("workflowengine","Thunderbird & Outlook addons"),icon:"icon-mail"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return St(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return St(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?St(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},matchingPredefined:function(){var t=this;return this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:""}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Ft=i(99055),$t={};$t.styleTagTransform=Z(),$t.setAttributes=z(),$t.insert=M().bind(null,"head"),$t.domAPI=$(),$t.insertStyleElement=G(),D()(Ft.Z,$t),Ft.Z&&Ft.Z.locals&&Ft.Z.locals;var Ut=(0,Y.Z)(Dt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a user agent"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single",domProps:{innerHTML:t._s(n.option.label)}})]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),n.option.$groupLabel?e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.$groupLabel)}}):e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.label)}})]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text"},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"475ac1e6",null).exports,Mt=i(80008),It=i.n(Mt),zt=It().tz.names(),Lt={name:"RequestTime",components:{Multiselect:P()},mixins:[bt],props:{value:{type:String,default:""}},data:function(){return{timezones:zt,valid:!1,newValue:{startTime:null,endTime:null,timezone:It().tz.guess()}}},mounted:function(){this.validate()},methods:{updateInternalValue:function(t){try{var n=JSON.parse(t);2===n.length&&(this.newValue={startTime:n[0].split(" ",2)[0],endTime:n[1].split(" ",2)[0],timezone:n[0].split(" ",2)[1]})}catch(t){}},validate:function(){return this.valid=this.newValue.startTime&&null!==this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&this.newValue.endTime&&null!==this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&null!==It().tz.zone(this.newValue.timezone),this.valid?this.$emit("valid"):this.$emit("invalid"),this.valid},update:function(){if(null===this.newValue.timezone&&(this.newValue.timezone=It().tz.guess()),this.validate()){var t='["'.concat(this.newValue.startTime," ").concat(this.newValue.timezone,'","').concat(this.newValue.endTime," ").concat(this.newValue.timezone,'"]');this.$emit("input",t)}}}},Gt=i(76050),Nt={};Nt.styleTagTransform=Z(),Nt.setAttributes=z(),Nt.insert=M().bind(null,"head"),Nt.domAPI=$(),Nt.insertStyleElement=G(),D()(Gt.Z,Nt),Gt.Z&&Gt.Z.locals&&Gt.Z.locals;var Zt=(0,Y.Z)(Lt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"timeslot"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.startTime,expression:"newValue.startTime"}],staticClass:"timeslot--start",attrs:{type:"text",placeholder:"e.g. 08:00"},domProps:{value:t.newValue.startTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"startTime",n.target.value)},t.update]}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.endTime,expression:"newValue.endTime"}],attrs:{type:"text",placeholder:"e.g. 18:00"},domProps:{value:t.newValue.endTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"endTime",n.target.value)},t.update]}}),t._v(" "),t.valid?t._e():e("p",{staticClass:"invalid-hint"},[t._v("\n\t\t"+t._s(t.t("workflowengine","Please enter a valid time span"))+"\n\t")]),t._v(" "),e("Multiselect",{directives:[{name:"show",rawName:"v-show",value:t.valid,expression:"valid"}],attrs:{options:t.timezones},on:{input:t.update},model:{value:t.newValue.timezone,callback:function(n){t.$set(t.newValue,"timezone",n)},expression:"newValue.timezone"}})],1)}),[],!1,null,"149baca9",null).exports;function Wt(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var qt={name:"RequestURL",components:{Multiselect:P()},mixins:[bt],data:function(){return{newValue:"",predefinedTypes:[{label:t("workflowengine","Predefined URLs"),children:[{pattern:"webdav",label:t("workflowengine","Files WebDAV")}]}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return Wt(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return Wt(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Wt(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},placeholder:function(){return"matches"===this.check.operator||"!matches"===this.check.operator?"/^https\\:\\/\\/localhost\\/index\\.php$/i":"https://localhost/index.php"},matchingPredefined:function(){var t=this;return this.predefinedTypes.map((function(t){return t.children})).flat().find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{label:t("workflowengine","Others"),children:[{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:""}]}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Yt=qt,Ht=i(82999),Jt={};Jt.styleTagTransform=Z(),Jt.setAttributes=z(),Jt.insert=M().bind(null,"head"),Jt.domAPI=$(),Jt.insertStyleElement=G(),D()(Ht.Z,Jt),Ht.Z&&Ht.Z.locals&&Ht.Z.locals;var Qt=(0,Y.Z)(Yt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a request URL"),label:"label","track-by":"pattern","group-values":"children","group-label":"label",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label)+" "+t._s(n.option.$groupLabel))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.placeholder},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"dd8e16be",null).exports;function Kt(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}var Xt=[],tn={isLoading:!1},nn={name:"RequestUserGroup",components:{Multiselect:P()},props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{groups:Xt,status:tn}},computed:{currentValue:function(){var t=this;return this.groups.find((function(n){return n.id===t.value}))||null}},mounted:function(){var t,n=this;return(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(0!==n.groups.length){t.next=3;break}return t.next=3,n.searchAsync("");case 3:if(null!==n.currentValue){t.next=6;break}return t.next=6,n.searchAsync(n.value);case 6:case"end":return t.stop()}}),t)})),function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){Kt(r,i,o,a,s,"next",t)}function s(t){Kt(r,i,o,a,s,"throw",t)}a(void 0)}))})()},methods:{searchAsync:function(t){var n=this;if(!this.status.isLoading)return this.status.isLoading=!0,a.default.get((0,l.generateOcsUrl)("cloud/groups/details?limit=20&search={searchQuery}",{searchQuery:t})).then((function(t){t.data.ocs.data.groups.forEach((function(t){n.addGroup({id:t.id,displayname:t.displayname})})),n.status.isLoading=!1}),(function(t){console.error("Error while loading group list",t.response)}))},addGroup:function(t){-1===this.groups.findIndex((function(n){return n.id===t.id}))&&this.groups.push(t)}}},en=nn,on=i(80787),rn={};rn.styleTagTransform=Z(),rn.setAttributes=z(),rn.insert=M().bind(null,"head"),rn.domAPI=$(),rn.insertStyleElement=G(),D()(on.Z,rn),on.Z&&on.Z.locals&&on.Z.locals;var an=(0,Y.Z)(en,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,loading:t.status.isLoading&&0===t.groups.length,options:t.groups,multiple:!1,label:"displayname","track-by":"id"},on:{"search-change":t.searchAsync,input:function(n){return t.$emit("input",n.id)}}})],1)}),[],!1,null,"79fa10a5",null).exports,sn=[{class:"OCA\\WorkflowEngine\\Check\\RequestURL",name:t("workflowengine","Request URL"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:Qt},{class:"OCA\\WorkflowEngine\\Check\\RequestTime",name:t("workflowengine","Request time"),operators:[{operator:"in",name:t("workflowengine","between")},{operator:"!in",name:t("workflowengine","not between")}],component:Zt},{class:"OCA\\WorkflowEngine\\Check\\RequestUserAgent",name:t("workflowengine","Request user agent"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:Ut},{class:"OCA\\WorkflowEngine\\Check\\UserGroupMembership",name:t("workflowengine","User group membership"),operators:[{operator:"is",name:t("workflowengine","is member of")},{operator:"!is",name:t("workflowengine","is not member of")}],component:an}];function ln(t){return function(t){if(Array.isArray(t))return cn(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return cn(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?cn(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function cn(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var un=[].concat(ln(Tt),ln(sn));window.OCA.WorkflowEngine=Object.assign({},OCA.WorkflowEngine,{registerCheck:function(t){v.commit("addPluginCheck",t)},registerOperator:function(t){v.commit("addPluginOperator",t)}}),un.forEach((function(t){return window.OCA.WorkflowEngine.registerCheck(t)})),o.default.use(r.ZP),o.default.prototype.t=t,new(o.default.extend(gt))({store:v}).$mount("#workflowengine")},38530:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Check.vue"],names:[],mappings:"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.check {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\twidth: 100%;\n\tpadding-right: 20px;\n\t& > *:not(.close) {\n\t\twidth: 180px;\n\t}\n\t& > .comparator {\n\t\tmin-width: 130px;\n\t\twidth: 130px;\n\t}\n\t& > .option {\n\t\tmin-width: 230px;\n\t\twidth: 230px;\n\t}\n\t& > .multiselect,\n\t& > input[type=text] {\n\t\tmargin-right: 5px;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: block;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\ninput[type=text] {\n\tmargin: 0;\n}\n::placeholder {\n\tfont-size: 10px;\n}\nbutton.action-item.action-item--single.icon-close {\n\theight: 44px;\n\twidth: 44px;\n\tmargin-top: -5px;\n\tmargin-bottom: -5px;\n}\n.invalid {\n\tborder: 1px solid var(--color-error) !important;\n}\n"],sourceRoot:""}]),n.Z=a},76050:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue"],names:[],mappings:"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.timeslot {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tflex-wrap: wrap;\n\tmax-width: 180px;\n\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\tborder: 1px solid transparent;\n\t}\n\n\tinput[type=text] {\n\t\twidth: 50%;\n\t\tmargin: 0;\n\t\tmargin-bottom: 5px;\n\n\t\t&.timeslot--start {\n\t\t\tmargin-right: 5px;\n\t\t\twidth: calc(50% - 5px);\n\t\t}\n\t}\n\n\t.invalid-hint {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]),n.Z=a},71605:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".event[data-v-f3569276]{margin-bottom:5px}.isComplex img[data-v-f3569276]{vertical-align:text-top}.isComplex span[data-v-f3569276]{padding-top:2px;display:inline-block}.multiselect[data-v-f3569276]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-f3569276] .multiselect__single{display:flex}.multiselect[data-v-f3569276]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-f3569276] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-f3569276]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-000);background-repeat:no-repeat;background-position:right center}input[data-v-f3569276]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-f3569276]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-f3569276]{font-weight:900}.option__icon[data-v-f3569276]{width:16px;height:16px}.eventlist img[data-v-f3569276],.eventlist .text[data-v-f3569276]{vertical-align:middle}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Event.vue"],names:[],mappings:"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,2CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.event {\n\tmargin-bottom: 5px;\n}\n.isComplex {\n\timg {\n\t\tvertical-align: text-top;\n\t}\n\tspan {\n\t\tpadding-top: 2px;\n\t\tdisplay: inline-block;\n\t}\n}\n.multiselect {\n\twidth: 100%;\n\tmax-width: 550px;\n\tmargin-top: 4px;\n}\n.multiselect::v-deep .multiselect__single {\n\tdisplay: flex;\n}\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\tborder: 1px solid transparent;\n}\n\n.multiselect::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\theight: auto;\n\tmin-height: 34px;\n}\n\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\tbackground-image: var(--icon-triangle-s-000);\n\tbackground-repeat: no-repeat;\n\tbackground-position: right center;\n}\n\ninput {\n\tborder: 1px solid transparent;\n}\n\n.option__title {\n\tmargin-left: 5px;\n\tcolor: var(--color-main-text);\n}\n.option__title_single {\n\tfont-weight: 900;\n}\n\n.option__icon {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.eventlist img,\n.eventlist .text {\n\tvertical-align: middle;\n}\n"],sourceRoot:""}]),n.Z=a},46514:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}","",{version:3,sources:["webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA",sourcesContent:[".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},11661:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Rule.vue"],names:[],mappings:"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: end;\n\n\tbutton {\n\t\tmargin-left: 5px;\n\t}\n\tbutton:last-child{\n\t\tmargin-right: 10px;\n\t}\n}\n\n.error-message {\n\tfloat: right;\n\tmargin-right: 10px;\n}\n\n.flow-icon {\n\twidth: 44px;\n}\n\n.rule {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tborder-left: 5px solid var(--color-primary-element);\n\n\t.trigger, .action {\n\t\tflex-grow: 1;\n\t\tmin-height: 100px;\n\t\tmax-width: 700px;\n\t}\n\t.action {\n\t\tmax-width: 400px;\n\t\tposition: relative;\n\t}\n\t.icon-confirm {\n\t\tbackground-position: right 27px;\n\t\tpadding-right: 20px;\n\t\tmargin-right: 20px;\n\t}\n}\n.trigger p, .action p {\n\tmin-height: 34px;\n\tdisplay: flex;\n\n\t& > span {\n\t\tmin-width: 50px;\n\t\ttext-align: right;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-right: 10px;\n\t\tpadding-top: 6px;\n\t}\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmax-width: 300px;\n\t}\n}\n.trigger p:first-child span {\n\t\tpadding-top: 3px;\n}\n\n.check--add {\n\tbackground-position: 7px center;\n\tbackground-color: transparent;\n\tpadding-left: 6px;\n\tmargin: 0;\n\twidth: 180px;\n\tborder-radius: var(--border-radius);\n\tcolor: var(--color-text-maxcontrast);\n\tfont-weight: normal;\n\ttext-align: left;\n\tfont-size: 1em;\n}\n\n@media (max-width:1400px) {\n\t.rule {\n\t\t&, .trigger, .action {\n\t\t\twidth: 100%;\n\t\t\tmax-width: 100%;\n\t\t}\n\t\t.flow-icon {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=a},33855:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"#workflowengine[data-v-7b3e4a56]{border-bottom:1px solid var(--color-border)}.section[data-v-7b3e4a56]{max-width:100vw}.section h2.configured-flows[data-v-7b3e4a56]{margin-top:50px;margin-bottom:0}.actions[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-7b3e4a56]{max-width:280px;flex-basis:250px}button.icon[data-v-7b3e4a56]{padding-left:32px;background-position:10px center}.slide-enter-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-7b3e4a56],.slide-leave[data-v-7b3e4a56]{max-height:500px;overflow:hidden}.slide-enter[data-v-7b3e4a56],.slide-leave-to[data-v-7b3e4a56]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-7b3e4a56]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-7b3e4a56]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-7b3e4a56]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-7b3e4a56],small[data-v-7b3e4a56]{padding:6px;display:block}h3[data-v-7b3e4a56]{margin:0;padding:0;font-weight:600}small[data-v-7b3e4a56]{font-size:10pt;flex-grow:1}.colored[data-v-7b3e4a56]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-7b3e4a56],.colored:not(.more) small[data-v-7b3e4a56]{color:var(--color-primary-text)}.actions__item[data-v-7b3e4a56]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-7b3e4a56]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-7b3e4a56]{padding:0}.actions__item:not(.colored) .icon[data-v-7b3e4a56]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-7b3e4a56]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-7b3e4a56]{filter:invert(1)}.actions__item.more[data-v-7b3e4a56]{background-color:var(--color-background-dark)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Workflow.vue","webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAuGA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAIF,6BACC,iBAAA,CACA,+BAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CChKD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDyFD,qCACC,6CAAA",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#workflowengine {\n\tborder-bottom: 1px solid var(--color-border);\n}\n.section {\n\tmax-width: 100vw;\n\n\th2.configured-flows {\n\t\tmargin-top: 50px;\n\t\tmargin-bottom: 0;\n\t}\n}\n.actions {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tmax-width: 1200px;\n\t.actions__item {\n\t\tmax-width: 280px;\n\t\tflex-basis: 250px;\n\t}\n}\n\nbutton.icon {\n\tpadding-left: 32px;\n\tbackground-position: 10px center;\n}\n\n.slide-enter-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: ease-in;\n\t-webkit-transition-timing-function: ease-in;\n\t-o-transition-timing-function: ease-in;\n\ttransition-timing-function: ease-in;\n}\n\n.slide-leave-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.slide-enter-to, .slide-leave {\n\tmax-height: 500px;\n\toverflow: hidden;\n}\n\n.slide-enter, .slide-leave-to {\n\toverflow: hidden;\n\tmax-height: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n}\n\n@import "./../styles/operation";\n\n.actions__item.more {\n\tbackground-color: var(--color-background-dark);\n}\n',".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},1510:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-8c011724], input[type='text'][data-v-8c011724] {\n\twidth: 100%;\n}\n.multiselect[data-v-8c011724] .multiselect__content-wrapper li>span,\n.multiselect[data-v-8c011724] .multiselect__single {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue"],names:[],mappings:";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},82999:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue"],names:[],mappings:";AA2IA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},99055:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\n\twidth: 100%;\n}\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.multiselect[data-v-475ac1e6] .multiselect__single {\n\twidth: 100%;\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.option__icon[data-v-475ac1e6] {\n\tdisplay: inline-block;\n\tmin-width: 30px;\n\tbackground-position: left;\n}\n.option__title[data-v-475ac1e6] {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue"],names:[],mappings:";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize --\x3e\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},80787:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-79fa10a5] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue"],names:[],mappings:";AA4GA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},46700:function(t,n,e){var i={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":2819,"./hi.js":2819,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function o(t){var n=r(t);return e(n)}function r(t){if(!e.o(i,t)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return i[t]}o.keys=function(){return Object.keys(i)},o.resolve=r,t.exports=o,o.id=46700}},i={};function o(t){var n=i[t];if(void 0!==n)return n.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=e,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},n=[],o.O=function(t,e,i,r){if(!e){var a=1/0;for(u=0;u<n.length;u++){e=n[u][0],i=n[u][1],r=n[u][2];for(var s=!0,l=0;l<e.length;l++)(!1&r||a>=r)&&Object.keys(o.O).every((function(t){return o.O[t](e[l])}))?e.splice(l--,1):(s=!1,r<a&&(a=r));if(s){n.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}r=r||0;for(var u=n.length;u>0&&n[u-1][2]>r;u--)n[u]=n[u-1];n[u]=[e,i,r]},o.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(n,{a:n}),n},o.d=function(t,n){for(var e in n)o.o(n,e)&&!o.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=318,function(){o.b=document.baseURI||self.location.href;var t={318:0};o.O.j=function(n){return 0===t[n]};var n=function(n,e){var i,r,a=e[0],s=e[1],l=e[2],c=0;if(a.some((function(n){return 0!==t[n]}))){for(i in s)o.o(s,i)&&(o.m[i]=s[i]);if(l)var u=l(o)}for(n&&n(e);c<a.length;c++)r=a[c],o.o(t,r)&&t[r]&&t[r][0](),t[r]=0;return o.O(u)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))}();var r=o.O(void 0,[874],(function(){return o(94158)}));r=o.O(r)}();
-//# sourceMappingURL=workflowengine-workflowengine.js.map?v=e4c634f9eb89a9091824 \ No newline at end of file
+!function(){var n,e={98258:function(n,e,i){"use strict";var o=i(20144),r=i(20629),a=i(4820),s=i(16453),l=i(79753),c=0===(0,s.loadState)("workflowengine","scope")?"global":"user",u=function(t){return(0,l.generateOcsUrl)("apps/workflowengine/api/v1/workflows/{scopeValue}",{scopeValue:c})+t+"?format=json"},p=i(10128),d=i.n(p);function A(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function m(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){A(r,i,o,a,s,"next",t)}function s(t){A(r,i,o,a,s,"throw",t)}a(void 0)}))}}function f(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function h(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?f(Object(e),!0).forEach((function(n){g(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):f(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function g(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}o.default.use(r.ZP);var v=new r.yh({state:{rules:[],scope:(0,s.loadState)("workflowengine","scope"),appstoreEnabled:(0,s.loadState)("workflowengine","appstoreenabled"),operations:(0,s.loadState)("workflowengine","operators"),plugins:o.default.observable({checks:{},operators:{}}),entities:(0,s.loadState)("workflowengine","entities"),events:(0,s.loadState)("workflowengine","entities").map((function(t){return t.events.map((function(n){return h({id:"".concat(t.id,"::").concat(n.eventName),entity:t},n)}))})).flat(),checks:(0,s.loadState)("workflowengine","checks")},mutations:{addRule:function(t,n){t.rules.push(h(h({},n),{},{valid:!0}))},updateRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id})),i=Object.assign({},n);o.default.set(t.rules,e,i)},removeRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id}));t.rules.splice(e,1)},addPluginCheck:function(t,n){o.default.set(t.plugins.checks,n.class,n)},addPluginOperator:function(t,n){n=Object.assign({color:"var(--color-primary-element)"},n,t.operations[n.id]||{}),void 0!==t.operations[n.id]&&o.default.set(t.operations,n.id,n)}},actions:{fetchRules:function(t){return m(regeneratorRuntime.mark((function n(){var e,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,a.default.get(u(""));case 2:e=n.sent,i=e.data,Object.values(i.ocs.data).flat().forEach((function(n){t.commit("addRule",n)}));case 5:case"end":return n.stop()}}),n)})))()},createNewRule:function(t,n){var e=null,i=[];!1===n.isComplex&&""===n.fixedEntity&&(i=[(e=(e=t.state.entities.find((function(t){return n.entities&&n.entities[0]===t.id})))||Object.values(t.state.entities)[0]).events[0].eventName]),t.commit("addRule",{id:-(new Date).getTime(),class:n.id,entity:e?e.id:n.fixedEntity,events:i,name:"",checks:[{class:null,operator:null,value:""}],operation:n.operation||""})},updateRule:function(t,n){t.commit("updateRule",h(h({},n),{},{events:"string"==typeof n.events?JSON.parse(n.events):n.events}))},removeRule:function(t,n){t.commit("removeRule",n)},pushUpdateRule:function(t,n){return m(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==t.state.scope){e.next=3;break}return e.next=3,d()();case 3:if(!(n.id<0)){e.next=9;break}return e.next=6,a.default.post(u(""),n);case 6:i=e.sent,e.next=12;break;case 9:return e.next=11,a.default.put(u("/".concat(n.id)),n);case 11:i=e.sent;case 12:o.default.set(n,"id",i.data.ocs.data.id),t.commit("updateRule",n);case 14:case"end":return e.stop()}}),e)})))()},deleteRule:function(t,n){return m(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d()();case 2:return e.next=4,a.default.delete(u("/".concat(n.id)));case 4:t.commit("removeRule",n);case 5:case"end":return e.stop()}}),e)})))()},setValid:function(t,n){var e=n.rule,i=n.valid;e.valid=i,t.commit("updateRule",e)}},getters:{getRules:function(t){return t.rules.filter((function(n){return void 0!==t.operations[n.class]})).sort((function(t,n){return t.id-n.id||n.class-t.class}))},getOperationForRule:function(t){return function(n){return t.operations[n.class]}},getEntityForOperation:function(t){return function(n){return t.entities.find((function(t){return n.fixedEntity===t.id}))}},getEventsForOperation:function(t){return function(n){return t.events}},getChecksForEntity:function(t){return function(n){return Object.values(t.checks).filter((function(t){return t.supportedEntities.indexOf(n)>-1||0===t.supportedEntities.length})).map((function(n){return t.plugins.checks[n.id]})).reduce((function(t,n){return t[n.class]=n,t}),{})}}}}),C=i(15168),w=i.n(C),b=i(79440),x=i.n(b),k=i(56286),y=i.n(k),_=i(1412),j=i.n(_),O=i(73723),R=i(44254),V=i(78039),E=i(7811),P=i.n(E),B=i(26932),T={name:"Event",components:{Multiselect:P()},props:{rule:{type:Object,required:!0}},computed:{entity:function(){return this.$store.getters.getEntityForOperation(this.operation)},operation:function(){return this.$store.getters.getOperationForRule(this.rule)},allEvents:function(){return this.$store.getters.getEventsForOperation(this.operation)},currentEvent:function(){var t=this;return this.allEvents.filter((function(n){return n.entity.id===t.rule.entity&&-1!==t.rule.events.indexOf(n.eventName)}))}},methods:{updateEvent:function(n){if(0!==n.length){var e,i=this.rule.entity,o=n.map((function(t){return t.entity.id})).filter((function(t,n,e){return e.indexOf(t)===n}));e=o.length>1?o.filter((function(t){return t!==i}))[0]:o[0],this.$set(this.rule,"entity",e),this.$set(this.rule,"events",n.filter((function(t){return t.entity.id===e})).map((function(t){return t.eventName}))),this.$emit("update",this.rule)}else(0,B.K2)(t("workflowengine","At least one event must be selected"))}}},S=i(93379),D=i.n(S),F=i(7795),$=i.n(F),U=i(90569),M=i.n(U),I=i(3565),z=i.n(I),L=i(19216),G=i.n(L),N=i(44589),Z=i.n(N),W=i(13885),q={};q.styleTagTransform=Z(),q.setAttributes=z(),q.insert=M().bind(null,"head"),q.domAPI=$(),q.insertStyleElement=G(),D()(W.Z,q),W.Z&&W.Z.locals&&W.Z.locals;var Y=i(51900),H=(0,Y.Z)(T,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"event"},[t.operation.isComplex&&""!==t.operation.fixedEntity?e("div",{staticClass:"isComplex"},[e("img",{staticClass:"option__icon",attrs:{src:t.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(t.operation.triggerHint))])]):e("Multiselect",{attrs:{value:t.currentEvent,options:t.allEvents,"track-by":"id",multiple:!0,"auto-limit":!1,disabled:t.allEvents.length<=1},on:{input:t.updateEvent},scopedSlots:t._u([{key:"selection",fn:function(n){var i=n.values,o=n.isOpen;return[i.length&&!o?e("div",{staticClass:"eventlist"},[e("img",{staticClass:"option__icon",attrs:{src:i[0].entity.icon}}),t._v(" "),t._l(i,(function(n,o){return e("span",{key:n.id,staticClass:"text option__title option__title_single"},[t._v(t._s(n.displayName)+" "),o+1<i.length?e("span",[t._v(", ")]):t._e()])}))],2):t._e()]}},{key:"option",fn:function(n){return[e("img",{staticClass:"option__icon",attrs:{src:n.option.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.displayName))])]}}])})],1)}),[],!1,null,"57bd6e67",null).exports,J=i(2649),Q=i.n(J),K={name:"Check",components:{ActionButton:y(),Actions:x(),Multiselect:P()},directives:{ClickOutside:Q()},props:{check:{type:Object,required:!0},rule:{type:Object,required:!0}},data:function(){return{deleteVisible:!1,currentOption:null,currentOperator:null,options:[],valid:!1}},computed:{checks:function(){return this.$store.getters.getChecksForEntity(this.rule.entity)},operators:function(){if(!this.currentOption)return[];var t=this.checks[this.currentOption.class].operators;return"function"==typeof t?t(this.check):t},currentComponent:function(){return this.currentOption?this.checks[this.currentOption.class].component:[]},valuePlaceholder:function(){return this.currentOption&&this.currentOption.placeholder?this.currentOption.placeholder(this.check):""}},watch:{"check.operator":function(){this.validate()}},mounted:function(){var t=this;this.options=Object.values(this.checks),this.currentOption=this.checks[this.check.class],this.currentOperator=this.operators.find((function(n){return n.operator===t.check.operator})),null===this.check.class&&this.$nextTick((function(){return t.$refs.checkSelector.$el.focus()})),this.validate()},methods:{showDelete:function(){this.deleteVisible=!0},hideDelete:function(){this.deleteVisible=!1},validate:function(){this.valid=!0,this.currentOption&&this.currentOption.validate&&(this.valid=!!this.currentOption.validate(this.check)),this.check.invalid=!this.valid,this.$emit("validate",this.valid)},updateCheck:function(){var t=this,n=this.operators.findIndex((function(n){return t.check.operator===n.operator}));this.check.class===this.currentOption.class&&-1!==n||(this.currentOperator=this.operators[0]),this.check.class=this.currentOption.class,this.check.operator=this.currentOperator.operator,this.validate(),this.$emit("update",this.check)}}},X=i(38530),tt={};tt.styleTagTransform=Z(),tt.setAttributes=z(),tt.insert=M().bind(null,"head"),tt.domAPI=$(),tt.insertStyleElement=G(),D()(X.Z,tt),X.Z&&X.Z.locals&&X.Z.locals;var nt=(0,Y.Z)(K,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideDelete,expression:"hideDelete"}],staticClass:"check",on:{click:t.showDelete}},[e("Multiselect",{ref:"checkSelector",attrs:{options:t.options,label:"name","track-by":"class","allow-empty":!1,placeholder:t.t("workflowengine","Select a filter")},on:{input:t.updateCheck},model:{value:t.currentOption,callback:function(n){t.currentOption=n},expression:"currentOption"}}),t._v(" "),e("Multiselect",{staticClass:"comparator",attrs:{disabled:!t.currentOption,options:t.operators,label:"name","track-by":"operator","allow-empty":!1,placeholder:t.t("workflowengine","Select a comparator")},on:{input:t.updateCheck},model:{value:t.currentOperator,callback:function(n){t.currentOperator=n},expression:"currentOperator"}}),t._v(" "),t.currentOperator&&t.currentComponent?e(t.currentOption.component,{tag:"component",staticClass:"option",attrs:{disabled:!t.currentOption,check:t.check},on:{input:t.updateCheck,valid:function(n){(t.valid=!0)&&t.validate()},invalid:function(n){!(t.valid=!1)&&t.validate()}},model:{value:t.check.value,callback:function(n){t.$set(t.check,"value",n)},expression:"check.value"}}):e("input",{directives:[{name:"model",rawName:"v-model",value:t.check.value,expression:"check.value"}],staticClass:"option",class:{invalid:!t.valid},attrs:{type:"text",disabled:!t.currentOption,placeholder:t.valuePlaceholder},domProps:{value:t.check.value},on:{input:[function(n){n.target.composing||t.$set(t.check,"value",n.target.value)},t.updateCheck]}}),t._v(" "),t.deleteVisible||!t.currentOption?e("Actions",[e("ActionButton",{attrs:{icon:"icon-close"},on:{click:function(n){return t.$emit("remove")}}})],1):t._e()],1)}),[],!1,null,"70cc784d",null).exports,et={name:"Operation",components:{Button:j()},props:{operation:{type:Object,required:!0},colored:{type:Boolean,default:!0}}},it=i(46514),ot={};ot.styleTagTransform=Z(),ot.setAttributes=z(),ot.insert=M().bind(null,"head"),ot.domAPI=$(),ot.insertStyleElement=G(),D()(it.Z,ot),it.Z&&it.Z.locals&&it.Z.locals;var rt=(0,Y.Z)(et,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"actions__item",class:{colored:t.colored},style:{backgroundColor:t.colored?t.operation.color:"transparent"}},[e("div",{staticClass:"icon",class:t.operation.iconClass,style:{backgroundImage:t.operation.iconClass?"":"url("+t.operation.icon+")"}}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.operation.name))]),t._v(" "),e("small",[t._v(t._s(t.operation.description))]),t._v(" "),t.colored?e("Button",[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Add new flow"))+"\n\t\t")]):t._e()],1),t._v(" "),e("div",{staticClass:"actions__item_options"},[t._t("default")],2)])}),[],!1,null,"96600802",null).exports;function at(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function st(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){at(r,i,o,a,s,"next",t)}function s(t){at(r,i,o,a,s,"throw",t)}a(void 0)}))}}var lt={name:"Rule",components:{Operation:rt,Check:nt,Event:H,Actions:x(),ActionButton:y(),Button:j(),ArrowRight:O.default,CheckMark:R.default,Close:V.default},directives:{Tooltip:w()},props:{rule:{type:Object,required:!0}},data:function(){return{editing:!1,checks:[],error:null,dirty:this.rule.id<0,originalRule:null}},computed:{operation:function(){return this.$store.getters.getOperationForRule(this.rule)},ruleStatus:function(){return this.error||!this.rule.valid||0===this.rule.checks.length||this.rule.checks.some((function(t){return!0===t.invalid}))?{title:t("workflowengine","The configuration is invalid"),icon:"Close",type:"warning",tooltip:{placement:"bottom",show:!0,content:this.error}}:this.dirty?{title:t("workflowengine","Save"),icon:"ArrowRight",type:"primary"}:{title:t("workflowengine","Active"),icon:"CheckMark",type:"success"}},lastCheckComplete:function(){var t=this.rule.checks[this.rule.checks.length-1];return void 0===t||null!==t.class}},mounted:function(){this.originalRule=JSON.parse(JSON.stringify(this.rule))},methods:{updateOperation:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.$set(n.rule,"operation",t),e.next=3,n.updateRule();case 3:case"end":return e.stop()}}),e)})))()},validate:function(t){this.error=null,this.$store.dispatch("updateRule",this.rule)},updateRule:function(){this.dirty||(this.dirty=!0),this.error=null,this.$store.dispatch("updateRule",this.rule)},saveRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("pushUpdateRule",t.rule);case 3:t.dirty=!1,t.error=null,t.originalRule=JSON.parse(JSON.stringify(t.rule)),n.next=12;break;case 8:n.prev=8,n.t0=n.catch(0),console.error("Failed to save operation"),t.error=n.t0.response.data.ocs.meta.message;case 12:case"end":return n.stop()}}),n,null,[[0,8]])})))()},deleteRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("deleteRule",t.rule);case 3:n.next=9;break;case 5:n.prev=5,n.t0=n.catch(0),console.error("Failed to delete operation"),t.error=n.t0.response.data.ocs.meta.message;case 9:case"end":return n.stop()}}),n,null,[[0,5]])})))()},cancelRule:function(){this.rule.id<0?this.$store.dispatch("removeRule",this.rule):(this.$store.dispatch("updateRule",this.originalRule),this.originalRule=JSON.parse(JSON.stringify(this.rule)),this.dirty=!1)},removeCheck:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(i=n.rule.checks.findIndex((function(n){return n===t})))>-1&&n.$delete(n.rule.checks,i),n.$store.dispatch("updateRule",n.rule);case 3:case"end":return e.stop()}}),e)})))()},onAddFilter:function(){this.rule.checks.push({class:null,operator:null,value:""})}}},ct=i(11661),ut={};function pt(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function dt(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?pt(Object(e),!0).forEach((function(n){At(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):pt(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function At(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}ut.styleTagTransform=Z(),ut.setAttributes=z(),ut.insert=M().bind(null,"head"),ut.domAPI=$(),ut.insertStyleElement=G(),D()(ct.Z,ut),ct.Z&&ct.Z.locals&&ct.Z.locals;var mt={name:"Workflow",components:{Operation:rt,Rule:(0,Y.Z)(lt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.operation?e("div",{staticClass:"section rule",style:{borderLeftColor:t.operation.color||""}},[e("div",{staticClass:"trigger"},[e("p",[e("span",[t._v(t._s(t.t("workflowengine","When")))]),t._v(" "),e("Event",{attrs:{rule:t.rule},on:{update:t.updateRule}})],1),t._v(" "),t._l(t.rule.checks,(function(n,i){return e("p",{key:i},[e("span",[t._v(t._s(t.t("workflowengine","and")))]),t._v(" "),e("Check",{attrs:{check:n,rule:t.rule},on:{update:t.updateRule,validate:t.validate,remove:function(e){return t.removeCheck(n)}}})],1)})),t._v(" "),e("p",[e("span"),t._v(" "),t.lastCheckComplete?e("input",{staticClass:"check--add",attrs:{type:"button",value:"Add a new filter"},on:{click:t.onAddFilter}}):t._e()])],2),t._v(" "),e("div",{staticClass:"flow-icon icon-confirm"}),t._v(" "),e("div",{staticClass:"action"},[e("Operation",{attrs:{operation:t.operation,colored:!1}},[t.operation.options?e(t.operation.options,{tag:"component",on:{input:t.updateOperation},model:{value:t.rule.operation,callback:function(n){t.$set(t.rule,"operation",n)},expression:"rule.operation"}}):t._e()],1),t._v(" "),e("div",{staticClass:"buttons"},[t.rule.id<-1||t.dirty?e("Button",{on:{click:t.cancelRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Cancel"))+"\n\t\t\t")]):t.dirty?t._e():e("Button",{on:{click:t.deleteRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Delete"))+"\n\t\t\t")]),t._v(" "),e("Button",{attrs:{type:t.ruleStatus.type},on:{click:t.saveRule},scopedSlots:t._u([{key:"icon",fn:function(){return[e(t.ruleStatus.icon,{tag:"component",attrs:{size:20}})]},proxy:!0}],null,!1,2383918876)},[t._v("\n\t\t\t\t"+t._s(t.ruleStatus.title)+"\n\t\t\t")])],1),t._v(" "),t.error?e("p",{staticClass:"error-message"},[t._v("\n\t\t\t"+t._s(t.error)+"\n\t\t")]):t._e()],1)]):t._e()}),[],!1,null,"779dc71c",null).exports},data:function(){return{showMoreOperations:!1,appstoreUrl:(0,l.generateUrl)("settings/apps/workflow")}},computed:dt(dt(dt({},(0,r.Se)({rules:"getRules"})),(0,r.rn)({appstoreEnabled:"appstoreEnabled",scope:"scope",operations:"operations"})),{},{hasMoreOperations:function(){return Object.keys(this.operations).length>3},getMainOperations:function(){return this.showMoreOperations?Object.values(this.operations):Object.values(this.operations).slice(0,3)},showAppStoreHint:function(){return 0===this.scope&&this.appstoreEnabled&&OC.isUserAdmin()}}),mounted:function(){this.$store.dispatch("fetchRules")},methods:{createNewRule:function(t){this.$store.dispatch("createNewRule",t)}}},ft=i(33855),ht={};ht.styleTagTransform=Z(),ht.setAttributes=z(),ht.insert=M().bind(null,"head"),ht.domAPI=$(),ht.insertStyleElement=G(),D()(ft.Z,ht),ft.Z&&ft.Z.locals&&ft.Z.locals;var gt=(0,Y.Z)(mt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"workflowengine"}},[e("div",{staticClass:"section"},[e("h2",[t._v(t._s(t.t("workflowengine","Available flows")))]),t._v(" "),0===t.scope?e("p",{staticClass:"settings-hint"},[e("a",{attrs:{href:"https://nextcloud.com/developer/"}},[t._v(t._s(t.t("workflowengine","For details on how to write your own flow, check out the development documentation.")))])]):t._e(),t._v(" "),e("transition-group",{staticClass:"actions",attrs:{name:"slide",tag:"div"}},[t._l(t.getMainOperations,(function(n){return e("Operation",{key:n.id,attrs:{operation:n},nativeOn:{click:function(e){return t.createNewRule(n)}}})})),t._v(" "),t.showAppStoreHint?e("a",{key:"add",staticClass:"actions__item colored more",attrs:{href:t.appstoreUrl}},[e("div",{staticClass:"icon icon-add"}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.t("workflowengine","More flows")))]),t._v(" "),e("small",[t._v(t._s(t.t("workflowengine","Browse the App Store")))])])]):t._e()],2),t._v(" "),t.hasMoreOperations?e("div",{staticClass:"actions__more"},[e("button",{staticClass:"icon",class:t.showMoreOperations?"icon-triangle-n":"icon-triangle-s",on:{click:function(n){t.showMoreOperations=!t.showMoreOperations}}},[t._v("\n\t\t\t\t"+t._s(t.showMoreOperations?t.t("workflowengine","Show less"):t.t("workflowengine","Show more"))+"\n\t\t\t")])]):t._e(),t._v(" "),0===t.scope?e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Configured flows"))+"\n\t\t")]):e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Your flows"))+"\n\t\t")])],1),t._v(" "),t.rules.length>0?e("transition-group",{attrs:{name:"slide"}},t._l(t.rules,(function(t){return e("Rule",{key:t.id,attrs:{rule:t}})})),1):t._e()],1)}),[],!1,null,"7b3e4a56",null).exports,vt=/^\/(.*)\/([gui]{0,3})$/,Ct=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/,wt=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/,bt={props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{newValue:""}},watch:{value:{immediate:!0,handler:function(t){this.updateInternalValue(t)}}},methods:{updateInternalValue:function(t){this.newValue=t}}};function xt(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var kt={name:"FileMimeType",components:{Multiselect:P()},mixins:[bt],data:function(){return{predefinedTypes:[{icon:"icon-folder",label:t("workflowengine","Folder"),pattern:"httpd/unix-directory"},{icon:"icon-picture",label:t("workflowengine","Images"),pattern:"/image\\/.*/"},{iconUrl:(0,l.imagePath)("core","filetypes/x-office-document"),label:t("workflowengine","Office documents"),pattern:"/(vnd\\.(ms-|openxmlformats-|oasis\\.opendocument).*)$/"},{iconUrl:(0,l.imagePath)("core","filetypes/application-pdf"),label:t("workflowengine","PDF documents"),pattern:"application/pdf"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return xt(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return xt(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?xt(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},isPredefined:function(){var t=this;return!!this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom mimetype"),pattern:""}},currentValue:function(){var n=this;return this.predefinedTypes.find((function(t){return n.newValue===t.pattern}))||{icon:"icon-settings-dark",label:t("workflowengine","Custom mimetype"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},yt=i(1510),_t={};_t.styleTagTransform=Z(),_t.setAttributes=z(),_t.insert=M().bind(null,"head"),_t.domAPI=$(),_t.insertStyleElement=G(),D()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;var jt=(0,Y.Z)(kt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a file type"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.t("workflowengine","e.g. httpd/unix-directory")},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"8c011724",null).exports,Ot=function t(n){var e={};if(1===n.nodeType){if(n.attributes.length>0){e["@attributes"]={};for(var i=0;i<n.attributes.length;i++){var o=n.attributes.item(i);e["@attributes"][o.nodeName]=o.nodeValue}}}else 3===n.nodeType&&(e=n.nodeValue);if(n.hasChildNodes())for(var r=0;r<n.childNodes.length;r++){var a=n.childNodes.item(r),s=a.nodeName;if(void 0===e[s])e[s]=t(a);else{if(void 0===e[s].push){var l=e[s];e[s]=[],e[s].push(l)}e[s].push(t(a))}}return e},Rt=0,Vt={name:"MultiselectTag",components:{Multiselect:P()},props:{label:{type:String,required:!0},value:{type:[String,Array],default:null},disabled:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1}},data:function(){return{inputValObjects:[],tags:[]}},computed:{id:function(){return"settings-input-text-"+this.uuid}},watch:{value:function(t){this.inputValObjects=this.getValueObject()}},beforeCreate:function(){var t=this;this.uuid=Rt.toString(),Rt+=1,(0,a.default)({method:"PROPFIND",url:(0,l.generateRemoteUrl)("dav")+"/systemtags/",data:'<?xml version="1.0"?>\n\t\t\t\t\t<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>'}).then((function(t){return function(t){var n=Ot(function(t){var n=null;try{n=(new DOMParser).parseFromString(t,"text/xml")}catch(t){console.error("Failed to parse xml document",t)}return n}(t)),e=n["d:multistatus"]["d:response"],i=[];for(var o in e){var r=e[o]["d:propstat"];"HTTP/1.1 200 OK"===r["d:status"]["#text"]&&i.push({id:r["d:prop"]["oc:id"]["#text"],displayName:r["d:prop"]["oc:display-name"]["#text"],canAssign:"true"===r["d:prop"]["oc:can-assign"]["#text"],userAssignable:"true"===r["d:prop"]["oc:user-assignable"]["#text"],userVisible:"true"===r["d:prop"]["oc:user-visible"]["#text"]})}return i}(t.data)})).then((function(n){t.tags=n,t.inputValObjects=t.getValueObject()})).catch(console.error.bind(this))},methods:{getValueObject:function(){var t=this;return 0===this.tags.length?[]:this.multiple?this.value.filter((function(t){return""!==t})).map((function(n){return t.tags.find((function(t){return t.id===n}))})):this.tags.find((function(n){return n.id===t.value}))},update:function(){this.multiple?this.$emit("input",this.inputValObjects.map((function(t){return t.id}))):null===this.inputValObjects?this.$emit("input",""):this.$emit("input",this.inputValObjects.id)},tagLabel:function(n){var e=n.displayName,i=n.userVisible,o=n.userAssignable;return!1===i?t("systemtags","%s (invisible)").replace("%s",e):!1===o?t("systemtags","%s (restricted)").replace("%s",e):e}}},Et={name:"FileSystemTag",components:{MultiselectTag:(0,Y.Z)(Vt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Multiselect",{staticClass:"multiselect-vue",attrs:{options:t.tags,"options-limit":5,placeholder:t.label,"track-by":"id","custom-label":t.tagLabel,multiple:t.multiple,"close-on-select":!1,"tag-width":60,disabled:t.disabled},on:{input:t.update},scopedSlots:t._u([{key:"option",fn:function(n){return[t._v("\n\t\t"+t._s(t.tagLabel(n.option))+"\n\t")]}}]),model:{value:t.inputValObjects,callback:function(n){t.inputValObjects=n},expression:"inputValObjects"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("core","No results")))])])}),[],!1,null,null,null).exports},props:{value:{type:String,default:""}},data:function(){return{newValue:[]}},watch:{value:function(){this.updateValue()}},beforeMount:function(){this.updateValue()},methods:{updateValue:function(){""!==this.value?this.newValue=this.value:this.newValue=null},update:function(){this.$emit("input",this.newValue||"")}}},Pt=(0,Y.Z)(Et,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("MultiselectTag",{attrs:{multiple:!1,label:t.t("workflowengine","Select a tag")},on:{input:t.update},model:{value:t.newValue,callback:function(n){t.newValue=n},expression:"newValue"}})}),[],!1,null,"31f5522d",null).exports,Bt=function(){return[{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")},{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")}]},Tt=[{class:"OCA\\WorkflowEngine\\Check\\FileName",name:t("workflowengine","File name"),operators:Bt,placeholder:function(t){return"matches"===t.operator||"!matches"===t.operator?"/^dummy-.+$/i":"filename.txt"},validate:function(t){return"matches"!==t.operator&&"!matches"!==t.operator||!!(n=t.value)&&null!==vt.exec(n);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileMimeType",name:t("workflowengine","File MIME type"),operators:Bt,component:jt},{class:"OCA\\WorkflowEngine\\Check\\FileSize",name:t("workflowengine","File size (upload)"),operators:[{operator:"less",name:t("workflowengine","less")},{operator:"!greater",name:t("workflowengine","less or equals")},{operator:"!less",name:t("workflowengine","greater or equals")},{operator:"greater",name:t("workflowengine","greater")}],placeholder:function(t){return"5 MB"},validate:function(t){return!!t.value&&null!==t.value.match(/^[0-9]+[ ]?[kmgt]?b$/i)}},{class:"OCA\\WorkflowEngine\\Check\\RequestRemoteAddress",name:t("workflowengine","Request remote address"),operators:[{operator:"matchesIPv4",name:t("workflowengine","matches IPv4")},{operator:"!matchesIPv4",name:t("workflowengine","does not match IPv4")},{operator:"matchesIPv6",name:t("workflowengine","matches IPv6")},{operator:"!matchesIPv6",name:t("workflowengine","does not match IPv6")}],placeholder:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?"::1/128":"127.0.0.1/32"},validate:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?!!(n=t.value)&&null!==wt.exec(n):function(t){return!!t&&null!==Ct.exec(t)}(t.value);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileSystemTags",name:t("workflowengine","File system tag"),operators:[{operator:"is",name:t("workflowengine","is tagged with")},{operator:"!is",name:t("workflowengine","is not tagged with")}],component:Pt}];function St(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var Dt={name:"RequestUserAgent",components:{Multiselect:P()},mixins:[bt],data:function(){return{newValue:"",predefinedTypes:[{pattern:"android",label:t("workflowengine","Android client"),icon:"icon-phone"},{pattern:"ios",label:t("workflowengine","iOS client"),icon:"icon-phone"},{pattern:"desktop",label:t("workflowengine","Desktop client"),icon:"icon-desktop"},{pattern:"mail",label:t("workflowengine","Thunderbird & Outlook addons"),icon:"icon-mail"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return St(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return St(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?St(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},matchingPredefined:function(){var t=this;return this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:""}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Ft=i(99055),$t={};$t.styleTagTransform=Z(),$t.setAttributes=z(),$t.insert=M().bind(null,"head"),$t.domAPI=$(),$t.insertStyleElement=G(),D()(Ft.Z,$t),Ft.Z&&Ft.Z.locals&&Ft.Z.locals;var Ut=(0,Y.Z)(Dt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a user agent"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single",domProps:{innerHTML:t._s(n.option.label)}})]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),n.option.$groupLabel?e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.$groupLabel)}}):e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.label)}})]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text"},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"475ac1e6",null).exports,Mt=i(80008),It=i.n(Mt),zt=It().tz.names(),Lt={name:"RequestTime",components:{Multiselect:P()},mixins:[bt],props:{value:{type:String,default:""}},data:function(){return{timezones:zt,valid:!1,newValue:{startTime:null,endTime:null,timezone:It().tz.guess()}}},mounted:function(){this.validate()},methods:{updateInternalValue:function(t){try{var n=JSON.parse(t);2===n.length&&(this.newValue={startTime:n[0].split(" ",2)[0],endTime:n[1].split(" ",2)[0],timezone:n[0].split(" ",2)[1]})}catch(t){}},validate:function(){return this.valid=this.newValue.startTime&&null!==this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&this.newValue.endTime&&null!==this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&null!==It().tz.zone(this.newValue.timezone),this.valid?this.$emit("valid"):this.$emit("invalid"),this.valid},update:function(){if(null===this.newValue.timezone&&(this.newValue.timezone=It().tz.guess()),this.validate()){var t='["'.concat(this.newValue.startTime," ").concat(this.newValue.timezone,'","').concat(this.newValue.endTime," ").concat(this.newValue.timezone,'"]');this.$emit("input",t)}}}},Gt=i(76050),Nt={};Nt.styleTagTransform=Z(),Nt.setAttributes=z(),Nt.insert=M().bind(null,"head"),Nt.domAPI=$(),Nt.insertStyleElement=G(),D()(Gt.Z,Nt),Gt.Z&&Gt.Z.locals&&Gt.Z.locals;var Zt=(0,Y.Z)(Lt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"timeslot"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.startTime,expression:"newValue.startTime"}],staticClass:"timeslot--start",attrs:{type:"text",placeholder:"e.g. 08:00"},domProps:{value:t.newValue.startTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"startTime",n.target.value)},t.update]}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.endTime,expression:"newValue.endTime"}],attrs:{type:"text",placeholder:"e.g. 18:00"},domProps:{value:t.newValue.endTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"endTime",n.target.value)},t.update]}}),t._v(" "),t.valid?t._e():e("p",{staticClass:"invalid-hint"},[t._v("\n\t\t"+t._s(t.t("workflowengine","Please enter a valid time span"))+"\n\t")]),t._v(" "),e("Multiselect",{directives:[{name:"show",rawName:"v-show",value:t.valid,expression:"valid"}],attrs:{options:t.timezones},on:{input:t.update},model:{value:t.newValue.timezone,callback:function(n){t.$set(t.newValue,"timezone",n)},expression:"newValue.timezone"}})],1)}),[],!1,null,"149baca9",null).exports;function Wt(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var qt={name:"RequestURL",components:{Multiselect:P()},mixins:[bt],data:function(){return{newValue:"",predefinedTypes:[{label:t("workflowengine","Predefined URLs"),children:[{pattern:"webdav",label:t("workflowengine","Files WebDAV")}]}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return Wt(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return Wt(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Wt(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},placeholder:function(){return"matches"===this.check.operator||"!matches"===this.check.operator?"/^https\\:\\/\\/localhost\\/index\\.php$/i":"https://localhost/index.php"},matchingPredefined:function(){var t=this;return this.predefinedTypes.map((function(t){return t.children})).flat().find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{label:t("workflowengine","Others"),children:[{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:""}]}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Yt=qt,Ht=i(82999),Jt={};Jt.styleTagTransform=Z(),Jt.setAttributes=z(),Jt.insert=M().bind(null,"head"),Jt.domAPI=$(),Jt.insertStyleElement=G(),D()(Ht.Z,Jt),Ht.Z&&Ht.Z.locals&&Ht.Z.locals;var Qt=(0,Y.Z)(Yt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a request URL"),label:"label","track-by":"pattern","group-values":"children","group-label":"label",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label)+" "+t._s(n.option.$groupLabel))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.placeholder},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"dd8e16be",null).exports;function Kt(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}var Xt=[],tn={isLoading:!1},nn={name:"RequestUserGroup",components:{Multiselect:P()},props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{groups:Xt,status:tn}},computed:{currentValue:function(){var t=this;return this.groups.find((function(n){return n.id===t.value}))||null}},mounted:function(){var t,n=this;return(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(0!==n.groups.length){t.next=3;break}return t.next=3,n.searchAsync("");case 3:if(null!==n.currentValue){t.next=6;break}return t.next=6,n.searchAsync(n.value);case 6:case"end":return t.stop()}}),t)})),function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){Kt(r,i,o,a,s,"next",t)}function s(t){Kt(r,i,o,a,s,"throw",t)}a(void 0)}))})()},methods:{searchAsync:function(t){var n=this;if(!this.status.isLoading)return this.status.isLoading=!0,a.default.get((0,l.generateOcsUrl)("cloud/groups/details?limit=20&search={searchQuery}",{searchQuery:t})).then((function(t){t.data.ocs.data.groups.forEach((function(t){n.addGroup({id:t.id,displayname:t.displayname})})),n.status.isLoading=!1}),(function(t){console.error("Error while loading group list",t.response)}))},addGroup:function(t){-1===this.groups.findIndex((function(n){return n.id===t.id}))&&this.groups.push(t)}}},en=nn,on=i(80787),rn={};rn.styleTagTransform=Z(),rn.setAttributes=z(),rn.insert=M().bind(null,"head"),rn.domAPI=$(),rn.insertStyleElement=G(),D()(on.Z,rn),on.Z&&on.Z.locals&&on.Z.locals;var an=(0,Y.Z)(en,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,loading:t.status.isLoading&&0===t.groups.length,options:t.groups,multiple:!1,label:"displayname","track-by":"id"},on:{"search-change":t.searchAsync,input:function(n){return t.$emit("input",n.id)}}})],1)}),[],!1,null,"79fa10a5",null).exports,sn=[{class:"OCA\\WorkflowEngine\\Check\\RequestURL",name:t("workflowengine","Request URL"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:Qt},{class:"OCA\\WorkflowEngine\\Check\\RequestTime",name:t("workflowengine","Request time"),operators:[{operator:"in",name:t("workflowengine","between")},{operator:"!in",name:t("workflowengine","not between")}],component:Zt},{class:"OCA\\WorkflowEngine\\Check\\RequestUserAgent",name:t("workflowengine","Request user agent"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:Ut},{class:"OCA\\WorkflowEngine\\Check\\UserGroupMembership",name:t("workflowengine","User group membership"),operators:[{operator:"is",name:t("workflowengine","is member of")},{operator:"!is",name:t("workflowengine","is not member of")}],component:an}];function ln(t){return function(t){if(Array.isArray(t))return cn(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return cn(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?cn(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function cn(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var un=[].concat(ln(Tt),ln(sn));window.OCA.WorkflowEngine=Object.assign({},OCA.WorkflowEngine,{registerCheck:function(t){v.commit("addPluginCheck",t)},registerOperator:function(t){v.commit("addPluginOperator",t)}}),un.forEach((function(t){return window.OCA.WorkflowEngine.registerCheck(t)})),o.default.use(r.ZP),o.default.prototype.t=t,new(o.default.extend(gt))({store:v}).$mount("#workflowengine")},38530:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Check.vue"],names:[],mappings:"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.check {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\twidth: 100%;\n\tpadding-right: 20px;\n\t& > *:not(.close) {\n\t\twidth: 180px;\n\t}\n\t& > .comparator {\n\t\tmin-width: 130px;\n\t\twidth: 130px;\n\t}\n\t& > .option {\n\t\tmin-width: 230px;\n\t\twidth: 230px;\n\t}\n\t& > .multiselect,\n\t& > input[type=text] {\n\t\tmargin-right: 5px;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: block;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\ninput[type=text] {\n\tmargin: 0;\n}\n::placeholder {\n\tfont-size: 10px;\n}\nbutton.action-item.action-item--single.icon-close {\n\theight: 44px;\n\twidth: 44px;\n\tmargin-top: -5px;\n\tmargin-bottom: -5px;\n}\n.invalid {\n\tborder: 1px solid var(--color-error) !important;\n}\n"],sourceRoot:""}]),n.Z=a},76050:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue"],names:[],mappings:"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.timeslot {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tflex-wrap: wrap;\n\tmax-width: 180px;\n\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\tborder: 1px solid transparent;\n\t}\n\n\tinput[type=text] {\n\t\twidth: 50%;\n\t\tmargin: 0;\n\t\tmargin-bottom: 5px;\n\n\t\t&.timeslot--start {\n\t\t\tmargin-right: 5px;\n\t\t\twidth: calc(50% - 5px);\n\t\t}\n\t}\n\n\t.invalid-hint {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]),n.Z=a},13885:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".event[data-v-57bd6e67]{margin-bottom:5px}.isComplex img[data-v-57bd6e67]{vertical-align:text-top}.isComplex span[data-v-57bd6e67]{padding-top:2px;display:inline-block}.multiselect[data-v-57bd6e67]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-57bd6e67] .multiselect__single{display:flex}.multiselect[data-v-57bd6e67]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-57bd6e67] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-57bd6e67]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-dark);background-repeat:no-repeat;background-position:right center}input[data-v-57bd6e67]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-57bd6e67]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-57bd6e67]{font-weight:900}.option__icon[data-v-57bd6e67]{width:16px;height:16px}.eventlist img[data-v-57bd6e67],.eventlist .text[data-v-57bd6e67]{vertical-align:middle}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Event.vue"],names:[],mappings:"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,4CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.event {\n\tmargin-bottom: 5px;\n}\n.isComplex {\n\timg {\n\t\tvertical-align: text-top;\n\t}\n\tspan {\n\t\tpadding-top: 2px;\n\t\tdisplay: inline-block;\n\t}\n}\n.multiselect {\n\twidth: 100%;\n\tmax-width: 550px;\n\tmargin-top: 4px;\n}\n.multiselect::v-deep .multiselect__single {\n\tdisplay: flex;\n}\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\tborder: 1px solid transparent;\n}\n\n.multiselect::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\theight: auto;\n\tmin-height: 34px;\n}\n\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\tbackground-image: var(--icon-triangle-s-dark);\n\tbackground-repeat: no-repeat;\n\tbackground-position: right center;\n}\n\ninput {\n\tborder: 1px solid transparent;\n}\n\n.option__title {\n\tmargin-left: 5px;\n\tcolor: var(--color-main-text);\n}\n.option__title_single {\n\tfont-weight: 900;\n}\n\n.option__icon {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.eventlist img,\n.eventlist .text {\n\tvertical-align: middle;\n}\n"],sourceRoot:""}]),n.Z=a},46514:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}","",{version:3,sources:["webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA",sourcesContent:[".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},11661:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Rule.vue"],names:[],mappings:"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: end;\n\n\tbutton {\n\t\tmargin-left: 5px;\n\t}\n\tbutton:last-child{\n\t\tmargin-right: 10px;\n\t}\n}\n\n.error-message {\n\tfloat: right;\n\tmargin-right: 10px;\n}\n\n.flow-icon {\n\twidth: 44px;\n}\n\n.rule {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tborder-left: 5px solid var(--color-primary-element);\n\n\t.trigger, .action {\n\t\tflex-grow: 1;\n\t\tmin-height: 100px;\n\t\tmax-width: 700px;\n\t}\n\t.action {\n\t\tmax-width: 400px;\n\t\tposition: relative;\n\t}\n\t.icon-confirm {\n\t\tbackground-position: right 27px;\n\t\tpadding-right: 20px;\n\t\tmargin-right: 20px;\n\t}\n}\n.trigger p, .action p {\n\tmin-height: 34px;\n\tdisplay: flex;\n\n\t& > span {\n\t\tmin-width: 50px;\n\t\ttext-align: right;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-right: 10px;\n\t\tpadding-top: 6px;\n\t}\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmax-width: 300px;\n\t}\n}\n.trigger p:first-child span {\n\t\tpadding-top: 3px;\n}\n\n.check--add {\n\tbackground-position: 7px center;\n\tbackground-color: transparent;\n\tpadding-left: 6px;\n\tmargin: 0;\n\twidth: 180px;\n\tborder-radius: var(--border-radius);\n\tcolor: var(--color-text-maxcontrast);\n\tfont-weight: normal;\n\ttext-align: left;\n\tfont-size: 1em;\n}\n\n@media (max-width:1400px) {\n\t.rule {\n\t\t&, .trigger, .action {\n\t\t\twidth: 100%;\n\t\t\tmax-width: 100%;\n\t\t}\n\t\t.flow-icon {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=a},33855:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"#workflowengine[data-v-7b3e4a56]{border-bottom:1px solid var(--color-border)}.section[data-v-7b3e4a56]{max-width:100vw}.section h2.configured-flows[data-v-7b3e4a56]{margin-top:50px;margin-bottom:0}.actions[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-7b3e4a56]{max-width:280px;flex-basis:250px}button.icon[data-v-7b3e4a56]{padding-left:32px;background-position:10px center}.slide-enter-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-7b3e4a56],.slide-leave[data-v-7b3e4a56]{max-height:500px;overflow:hidden}.slide-enter[data-v-7b3e4a56],.slide-leave-to[data-v-7b3e4a56]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-7b3e4a56]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-7b3e4a56]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-7b3e4a56]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-7b3e4a56],small[data-v-7b3e4a56]{padding:6px;display:block}h3[data-v-7b3e4a56]{margin:0;padding:0;font-weight:600}small[data-v-7b3e4a56]{font-size:10pt;flex-grow:1}.colored[data-v-7b3e4a56]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-7b3e4a56],.colored:not(.more) small[data-v-7b3e4a56]{color:var(--color-primary-text)}.actions__item[data-v-7b3e4a56]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-7b3e4a56]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-7b3e4a56]{padding:0}.actions__item:not(.colored) .icon[data-v-7b3e4a56]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-7b3e4a56]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-7b3e4a56]{filter:invert(1)}.actions__item.more[data-v-7b3e4a56]{background-color:var(--color-background-dark)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Workflow.vue","webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAuGA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAIF,6BACC,iBAAA,CACA,+BAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CChKD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDyFD,qCACC,6CAAA",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#workflowengine {\n\tborder-bottom: 1px solid var(--color-border);\n}\n.section {\n\tmax-width: 100vw;\n\n\th2.configured-flows {\n\t\tmargin-top: 50px;\n\t\tmargin-bottom: 0;\n\t}\n}\n.actions {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tmax-width: 1200px;\n\t.actions__item {\n\t\tmax-width: 280px;\n\t\tflex-basis: 250px;\n\t}\n}\n\nbutton.icon {\n\tpadding-left: 32px;\n\tbackground-position: 10px center;\n}\n\n.slide-enter-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: ease-in;\n\t-webkit-transition-timing-function: ease-in;\n\t-o-transition-timing-function: ease-in;\n\ttransition-timing-function: ease-in;\n}\n\n.slide-leave-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.slide-enter-to, .slide-leave {\n\tmax-height: 500px;\n\toverflow: hidden;\n}\n\n.slide-enter, .slide-leave-to {\n\toverflow: hidden;\n\tmax-height: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n}\n\n@import "./../styles/operation";\n\n.actions__item.more {\n\tbackground-color: var(--color-background-dark);\n}\n',".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},1510:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-8c011724], input[type='text'][data-v-8c011724] {\n\twidth: 100%;\n}\n.multiselect[data-v-8c011724] .multiselect__content-wrapper li>span,\n.multiselect[data-v-8c011724] .multiselect__single {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue"],names:[],mappings:";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},82999:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue"],names:[],mappings:";AA2IA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},99055:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\n\twidth: 100%;\n}\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.multiselect[data-v-475ac1e6] .multiselect__single {\n\twidth: 100%;\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.option__icon[data-v-475ac1e6] {\n\tdisplay: inline-block;\n\tmin-width: 30px;\n\tbackground-position: left;\n}\n.option__title[data-v-475ac1e6] {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue"],names:[],mappings:";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize --\x3e\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},80787:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-79fa10a5] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue"],names:[],mappings:";AA4GA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},46700:function(t,n,e){var i={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":2819,"./hi.js":2819,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function o(t){var n=r(t);return e(n)}function r(t){if(!e.o(i,t)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return i[t]}o.keys=function(){return Object.keys(i)},o.resolve=r,t.exports=o,o.id=46700}},i={};function o(t){var n=i[t];if(void 0!==n)return n.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=e,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},n=[],o.O=function(t,e,i,r){if(!e){var a=1/0;for(u=0;u<n.length;u++){e=n[u][0],i=n[u][1],r=n[u][2];for(var s=!0,l=0;l<e.length;l++)(!1&r||a>=r)&&Object.keys(o.O).every((function(t){return o.O[t](e[l])}))?e.splice(l--,1):(s=!1,r<a&&(a=r));if(s){n.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}r=r||0;for(var u=n.length;u>0&&n[u-1][2]>r;u--)n[u]=n[u-1];n[u]=[e,i,r]},o.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(n,{a:n}),n},o.d=function(t,n){for(var e in n)o.o(n,e)&&!o.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=318,function(){o.b=document.baseURI||self.location.href;var t={318:0};o.O.j=function(n){return 0===t[n]};var n=function(n,e){var i,r,a=e[0],s=e[1],l=e[2],c=0;if(a.some((function(n){return 0!==t[n]}))){for(i in s)o.o(s,i)&&(o.m[i]=s[i]);if(l)var u=l(o)}for(n&&n(e);c<a.length;c++)r=a[c],o.o(t,r)&&t[r]&&t[r][0](),t[r]=0;return o.O(u)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))}();var r=o.O(void 0,[874],(function(){return o(98258)}));r=o.O(r)}();
+//# sourceMappingURL=workflowengine-workflowengine.js.map?v=07f0f8b2e738f65443c2 \ No newline at end of file
diff --git a/dist/workflowengine-workflowengine.js.map b/dist/workflowengine-workflowengine.js.map
index 6a775897c3e..e67f5a0a9c2 100644
--- a/dist/workflowengine-workflowengine.js.map
+++ b/dist/workflowengine-workflowengine.js.map
@@ -1 +1 @@
-{"version":3,"file":"workflowengine-workflowengine.js?v=e4c634f9eb89a9091824","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/workflowengine/src/helpers/api.js","webpack:///nextcloud/apps/workflowengine/src/store.js","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?2325","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?5115","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=template&id=f3569276&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?50c3","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?3fb8","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=template&id=70cc784d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?10fd","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?3526","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=template&id=96600802&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?6847","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?e711","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=template&id=779dc71c&scoped=true&","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?b47f","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?17b8","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=template&id=7b3e4a56&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/helpers/validators.js","webpack:///nextcloud/apps/workflowengine/src/mixins/valueMixin.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?6178","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?c385","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=template&id=8c011724&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/api.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue","webpack://nextcloud/./apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?3f10","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=template&id=73cc22e8&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileSystemTag.vue?2d3e","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/file.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?83e0","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?81d6","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?6629","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?a55a","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=template&id=149baca9&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?de33","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?eee5","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?b928","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?f6d3","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/request.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/index.js","webpack:///nextcloud/apps/workflowengine/src/workflowengine.js","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=style&index=0&id=f3569276&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst scopeValue = loadState('workflowengine', 'scope') === 0 ? 'global' : 'user'\n\nconst getApiUrl = (url) => {\n\treturn generateOcsUrl('apps/workflowengine/api/v1/workflows/{scopeValue}', { scopeValue }) + url + '?format=json'\n}\n\nexport {\n\tgetApiUrl,\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport axios from '@nextcloud/axios'\nimport { getApiUrl } from './helpers/api'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { loadState } from '@nextcloud/initial-state'\n\nVue.use(Vuex)\n\nconst store = new Store({\n\tstate: {\n\t\trules: [],\n\t\tscope: loadState('workflowengine', 'scope'),\n\t\tappstoreEnabled: loadState('workflowengine', 'appstoreenabled'),\n\t\toperations: loadState('workflowengine', 'operators'),\n\n\t\tplugins: Vue.observable({\n\t\t\tchecks: {},\n\t\t\toperators: {},\n\t\t}),\n\n\t\tentities: loadState('workflowengine', 'entities'),\n\t\tevents: loadState('workflowengine', 'entities')\n\t\t\t.map((entity) => entity.events.map(event => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `${entity.id}::${event.eventName}`,\n\t\t\t\t\tentity,\n\t\t\t\t\t...event,\n\t\t\t\t}\n\t\t\t})).flat(),\n\t\tchecks: loadState('workflowengine', 'checks'),\n\t},\n\tmutations: {\n\t\taddRule(state, rule) {\n\t\t\tstate.rules.push({ ...rule, valid: true })\n\t\t},\n\t\tupdateRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tconst newRule = Object.assign({}, rule)\n\t\t\tVue.set(state.rules, index, newRule)\n\t\t},\n\t\tremoveRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tstate.rules.splice(index, 1)\n\t\t},\n\t\taddPluginCheck(state, plugin) {\n\t\t\tVue.set(state.plugins.checks, plugin.class, plugin)\n\t\t},\n\t\taddPluginOperator(state, plugin) {\n\t\t\tplugin = Object.assign(\n\t\t\t\t{ color: 'var(--color-primary-element)' },\n\t\t\t\tplugin, state.operations[plugin.id] || {})\n\t\t\tif (typeof state.operations[plugin.id] !== 'undefined') {\n\t\t\t\tVue.set(state.operations, plugin.id, plugin)\n\t\t\t}\n\t\t},\n\t},\n\tactions: {\n\t\tasync fetchRules(context) {\n\t\t\tconst { data } = await axios.get(getApiUrl(''))\n\t\t\tObject.values(data.ocs.data).flat().forEach((rule) => {\n\t\t\t\tcontext.commit('addRule', rule)\n\t\t\t})\n\t\t},\n\t\tcreateNewRule(context, rule) {\n\t\t\tlet entity = null\n\t\t\tlet events = []\n\t\t\tif (rule.isComplex === false && rule.fixedEntity === '') {\n\t\t\t\tentity = context.state.entities.find((item) => rule.entities && rule.entities[0] === item.id)\n\t\t\t\tentity = entity || Object.values(context.state.entities)[0]\n\t\t\t\tevents = [entity.events[0].eventName]\n\t\t\t}\n\n\t\t\tcontext.commit('addRule', {\n\t\t\t\tid: -(new Date().getTime()),\n\t\t\t\tclass: rule.id,\n\t\t\t\tentity: entity ? entity.id : rule.fixedEntity,\n\t\t\t\tevents,\n\t\t\t\tname: '', // unused in the new ui, there for legacy reasons\n\t\t\t\tchecks: [\n\t\t\t\t\t{ class: null, operator: null, value: '' },\n\t\t\t\t],\n\t\t\t\toperation: rule.operation || '',\n\t\t\t})\n\t\t},\n\t\tupdateRule(context, rule) {\n\t\t\tcontext.commit('updateRule', {\n\t\t\t\t...rule,\n\t\t\t\tevents: typeof rule.events === 'string' ? JSON.parse(rule.events) : rule.events,\n\t\t\t})\n\t\t},\n\t\tremoveRule(context, rule) {\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tasync pushUpdateRule(context, rule) {\n\t\t\tif (context.state.scope === 0) {\n\t\t\t\tawait confirmPassword()\n\t\t\t}\n\t\t\tlet result\n\t\t\tif (rule.id < 0) {\n\t\t\t\tresult = await axios.post(getApiUrl(''), rule)\n\t\t\t} else {\n\t\t\t\tresult = await axios.put(getApiUrl(`/${rule.id}`), rule)\n\t\t\t}\n\t\t\tVue.set(rule, 'id', result.data.ocs.data.id)\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t\tasync deleteRule(context, rule) {\n\t\t\tawait confirmPassword()\n\t\t\tawait axios.delete(getApiUrl(`/${rule.id}`))\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tsetValid(context, { rule, valid }) {\n\t\t\trule.valid = valid\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t},\n\tgetters: {\n\t\tgetRules(state) {\n\t\t\treturn state.rules.filter((rule) => typeof state.operations[rule.class] !== 'undefined').sort((rule1, rule2) => {\n\t\t\t\treturn rule1.id - rule2.id || rule2.class - rule1.class\n\t\t\t})\n\t\t},\n\t\tgetOperationForRule(state) {\n\t\t\treturn (rule) => state.operations[rule.class]\n\t\t},\n\t\tgetEntityForOperation(state) {\n\t\t\treturn (operation) => state.entities.find((entity) => operation.fixedEntity === entity.id)\n\t\t},\n\t\tgetEventsForOperation(state) {\n\t\t\treturn (operation) => state.events\n\t\t},\n\n\t\t/**\n\t\t * Return all available checker plugins for a given entity class\n\t\t *\n\t\t * @param {object} state the store state\n\t\t * @return {Function} the available plugins\n\t\t */\n\t\tgetChecksForEntity(state) {\n\t\t\treturn (entity) => {\n\t\t\t\treturn Object.values(state.checks)\n\t\t\t\t\t.filter((check) => check.supportedEntities.indexOf(entity) > -1 || check.supportedEntities.length === 0)\n\t\t\t\t\t.map((check) => state.plugins.checks[check.id])\n\t\t\t\t\t.reduce((obj, item) => {\n\t\t\t\t\t\tobj[item.class] = item\n\t\t\t\t\t\treturn obj\n\t\t\t\t\t}, {})\n\t\t\t}\n\t\t},\n\t},\n})\n\nexport default store\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"event\">\n\t\t<div v-if=\"operation.isComplex && operation.fixedEntity !== ''\" class=\"isComplex\">\n\t\t\t<img class=\"option__icon\" :src=\"entity.icon\">\n\t\t\t<span class=\"option__title option__title_single\">{{ operation.triggerHint }}</span>\n\t\t</div>\n\t\t<Multiselect v-else\n\t\t\t:value=\"currentEvent\"\n\t\t\t:options=\"allEvents\"\n\t\t\ttrack-by=\"id\"\n\t\t\t:multiple=\"true\"\n\t\t\t:auto-limit=\"false\"\n\t\t\t:disabled=\"allEvents.length <= 1\"\n\t\t\t@input=\"updateEvent\">\n\t\t\t<template slot=\"selection\" slot-scope=\"{ values, isOpen }\">\n\t\t\t\t<div v-if=\"values.length && !isOpen\" class=\"eventlist\">\n\t\t\t\t\t<img class=\"option__icon\" :src=\"values[0].entity.icon\">\n\t\t\t\t\t<span v-for=\"(value, index) in values\" :key=\"value.id\" class=\"text option__title option__title_single\">{{ value.displayName }} <span v-if=\"index+1 < values.length\">, </span></span>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<img class=\"option__icon\" :src=\"props.option.entity.icon\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.displayName }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { showWarning } from '@nextcloud/dialogs'\n\nexport default {\n\tname: 'Event',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tentity() {\n\t\t\treturn this.$store.getters.getEntityForOperation(this.operation)\n\t\t},\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\tallEvents() {\n\t\t\treturn this.$store.getters.getEventsForOperation(this.operation)\n\t\t},\n\t\tcurrentEvent() {\n\t\t\treturn this.allEvents.filter(event => event.entity.id === this.rule.entity && this.rule.events.indexOf(event.eventName) !== -1)\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateEvent(events) {\n\t\t\tif (events.length === 0) {\n\t\t\t\tshowWarning(t('workflowengine', 'At least one event must be selected'))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst existingEntity = this.rule.entity\n\t\t\tconst newEntities = events.map(event => event.entity.id).filter((value, index, self) => self.indexOf(value) === index)\n\t\t\tlet newEntity = null\n\t\t\tif (newEntities.length > 1) {\n\t\t\t\tnewEntity = newEntities.filter(entity => entity !== existingEntity)[0]\n\t\t\t} else {\n\t\t\t\tnewEntity = newEntities[0]\n\t\t\t}\n\n\t\t\tthis.$set(this.rule, 'entity', newEntity)\n\t\t\tthis.$set(this.rule, 'events', events.filter(event => event.entity.id === newEntity).map(event => event.eventName))\n\t\t\tthis.$emit('update', this.rule)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.event {\n\t\tmargin-bottom: 5px;\n\t}\n\t.isComplex {\n\t\timg {\n\t\t\tvertical-align: text-top;\n\t\t}\n\t\tspan {\n\t\t\tpadding-top: 2px;\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmax-width: 550px;\n\t\tmargin-top: 4px;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: flex;\n\t}\n\t.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\theight: auto;\n\t\tmin-height: 34px;\n\t}\n\n\t.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\t\tbackground-image: var(--icon-triangle-s-000);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: right center;\n\t}\n\n\tinput {\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.option__title {\n\t\tmargin-left: 5px;\n\t\tcolor: var(--color-main-text);\n\t}\n\t.option__title_single {\n\t\tfont-weight: 900;\n\t}\n\n\t.option__icon {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t}\n\n\t.eventlist img,\n\t.eventlist .text {\n\t\tvertical-align: middle;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=f3569276&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=f3569276&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Event.vue?vue&type=template&id=f3569276&scoped=true&\"\nimport script from \"./Event.vue?vue&type=script&lang=js&\"\nexport * from \"./Event.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Event.vue?vue&type=style&index=0&id=f3569276&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f3569276\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"event\"},[(_vm.operation.isComplex && _vm.operation.fixedEntity !== '')?_c('div',{staticClass:\"isComplex\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":_vm.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(_vm.operation.triggerHint))])]):_c('Multiselect',{attrs:{\"value\":_vm.currentEvent,\"options\":_vm.allEvents,\"track-by\":\"id\",\"multiple\":true,\"auto-limit\":false,\"disabled\":_vm.allEvents.length <= 1},on:{\"input\":_vm.updateEvent},scopedSlots:_vm._u([{key:\"selection\",fn:function(ref){\nvar values = ref.values;\nvar isOpen = ref.isOpen;\nreturn [(values.length && !isOpen)?_c('div',{staticClass:\"eventlist\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":values[0].entity.icon}}),_vm._v(\" \"),_vm._l((values),function(value,index){return _c('span',{key:value.id,staticClass:\"text option__title option__title_single\"},[_vm._v(_vm._s(value.displayName)+\" \"),(index+1 < values.length)?_c('span',[_vm._v(\", \")]):_vm._e()])})],2):_vm._e()]}},{key:\"option\",fn:function(props){return [_c('img',{staticClass:\"option__icon\",attrs:{\"src\":props.option.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.displayName))])]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"","<template>\n\t<div v-click-outside=\"hideDelete\" class=\"check\" @click=\"showDelete\">\n\t\t<Multiselect ref=\"checkSelector\"\n\t\t\tv-model=\"currentOption\"\n\t\t\t:options=\"options\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"class\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a filter')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<Multiselect v-model=\"currentOperator\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:options=\"operators\"\n\t\t\tclass=\"comparator\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"operator\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a comparator')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<component :is=\"currentOption.component\"\n\t\t\tv-if=\"currentOperator && currentComponent\"\n\t\t\tv-model=\"check.value\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:check=\"check\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\"\n\t\t\t@valid=\"(valid=true) && validate()\"\n\t\t\t@invalid=\"!(valid=false) && validate()\" />\n\t\t<input v-else\n\t\t\tv-model=\"check.value\"\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{ invalid: !valid }\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:placeholder=\"valuePlaceholder\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\">\n\t\t<Actions v-if=\"deleteVisible || !currentOption\">\n\t\t\t<ActionButton icon=\"icon-close\" @click=\"$emit('remove')\" />\n\t\t</Actions>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\n\nexport default {\n\tname: 'Check',\n\tcomponents: {\n\t\tActionButton,\n\t\tActions,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tprops: {\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdeleteVisible: false,\n\t\t\tcurrentOption: null,\n\t\t\tcurrentOperator: null,\n\t\t\toptions: [],\n\t\t\tvalid: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tchecks() {\n\t\t\treturn this.$store.getters.getChecksForEntity(this.rule.entity)\n\t\t},\n\t\toperators() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\tconst operators = this.checks[this.currentOption.class].operators\n\t\t\tif (typeof operators === 'function') {\n\t\t\t\treturn operators(this.check)\n\t\t\t}\n\t\t\treturn operators\n\t\t},\n\t\tcurrentComponent() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\treturn this.checks[this.currentOption.class].component\n\t\t},\n\t\tvaluePlaceholder() {\n\t\t\tif (this.currentOption && this.currentOption.placeholder) {\n\t\t\t\treturn this.currentOption.placeholder(this.check)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t},\n\twatch: {\n\t\t'check.operator'() {\n\t\t\tthis.validate()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.options = Object.values(this.checks)\n\t\tthis.currentOption = this.checks[this.check.class]\n\t\tthis.currentOperator = this.operators.find((operator) => operator.operator === this.check.operator)\n\n\t\tif (this.check.class === null) {\n\t\t\tthis.$nextTick(() => this.$refs.checkSelector.$el.focus())\n\t\t}\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tshowDelete() {\n\t\t\tthis.deleteVisible = true\n\t\t},\n\t\thideDelete() {\n\t\t\tthis.deleteVisible = false\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = true\n\t\t\tif (this.currentOption && this.currentOption.validate) {\n\t\t\t\tthis.valid = !!this.currentOption.validate(this.check)\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.invalid = !this.valid\n\t\t\tthis.$emit('validate', this.valid)\n\t\t},\n\t\tupdateCheck() {\n\t\t\tconst matchingOperator = this.operators.findIndex((operator) => this.check.operator === operator.operator)\n\t\t\tif (this.check.class !== this.currentOption.class || matchingOperator === -1) {\n\t\t\t\tthis.currentOperator = this.operators[0]\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.class = this.currentOption.class\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.operator = this.currentOperator.operator\n\n\t\t\tthis.validate()\n\n\t\t\tthis.$emit('update', this.check)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.check {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\twidth: 100%;\n\t\tpadding-right: 20px;\n\t\t& > *:not(.close) {\n\t\t\twidth: 180px;\n\t\t}\n\t\t& > .comparator {\n\t\t\tmin-width: 130px;\n\t\t\twidth: 130px;\n\t\t}\n\t\t& > .option {\n\t\t\tmin-width: 230px;\n\t\t\twidth: 230px;\n\t\t}\n\t\t& > .multiselect,\n\t\t& > input[type=text] {\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t\t.multiselect::v-deep .multiselect__single {\n\t\t\tdisplay: block;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\tinput[type=text] {\n\t\tmargin: 0;\n\t}\n\t::placeholder {\n\t\tfont-size: 10px;\n\t}\n\tbutton.action-item.action-item--single.icon-close {\n\t\theight: 44px;\n\t\twidth: 44px;\n\t\tmargin-top: -5px;\n\t\tmargin-bottom: -5px;\n\t}\n\t.invalid {\n\t\tborder: 1px solid var(--color-error) !important;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Check.vue?vue&type=template&id=70cc784d&scoped=true&\"\nimport script from \"./Check.vue?vue&type=script&lang=js&\"\nexport * from \"./Check.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70cc784d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideDelete),expression:\"hideDelete\"}],staticClass:\"check\",on:{\"click\":_vm.showDelete}},[_c('Multiselect',{ref:\"checkSelector\",attrs:{\"options\":_vm.options,\"label\":\"name\",\"track-by\":\"class\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a filter')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOption),callback:function ($$v) {_vm.currentOption=$$v},expression:\"currentOption\"}}),_vm._v(\" \"),_c('Multiselect',{staticClass:\"comparator\",attrs:{\"disabled\":!_vm.currentOption,\"options\":_vm.operators,\"label\":\"name\",\"track-by\":\"operator\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a comparator')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOperator),callback:function ($$v) {_vm.currentOperator=$$v},expression:\"currentOperator\"}}),_vm._v(\" \"),(_vm.currentOperator && _vm.currentComponent)?_c(_vm.currentOption.component,{tag:\"component\",staticClass:\"option\",attrs:{\"disabled\":!_vm.currentOption,\"check\":_vm.check},on:{\"input\":_vm.updateCheck,\"valid\":function($event){(_vm.valid=true) && _vm.validate()},\"invalid\":function($event){!(_vm.valid=false) && _vm.validate()}},model:{value:(_vm.check.value),callback:function ($$v) {_vm.$set(_vm.check, \"value\", $$v)},expression:\"check.value\"}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.check.value),expression:\"check.value\"}],staticClass:\"option\",class:{ invalid: !_vm.valid },attrs:{\"type\":\"text\",\"disabled\":!_vm.currentOption,\"placeholder\":_vm.valuePlaceholder},domProps:{\"value\":(_vm.check.value)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.check, \"value\", $event.target.value)},_vm.updateCheck]}}),_vm._v(\" \"),(_vm.deleteVisible || !_vm.currentOption)?_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){return _vm.$emit('remove')}}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"actions__item\" :class=\"{'colored': colored}\" :style=\"{ backgroundColor: colored ? operation.color : 'transparent' }\">\n\t\t<div class=\"icon\" :class=\"operation.iconClass\" :style=\"{ backgroundImage: operation.iconClass ? '' : `url(${operation.icon})` }\" />\n\t\t<div class=\"actions__item__description\">\n\t\t\t<h3>{{ operation.name }}</h3>\n\t\t\t<small>{{ operation.description }}</small>\n\t\t\t<Button v-if=\"colored\">\n\t\t\t\t{{ t('workflowengine', 'Add new flow') }}\n\t\t\t</Button>\n\t\t</div>\n\t\t<div class=\"actions__item_options\">\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Button from '@nextcloud/vue/dist/Components/Button'\n\nexport default {\n\tname: 'Operation',\n\tcomponents: {\n\t\tButton,\n\t},\n\tprops: {\n\t\toperation: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcolored: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"./../styles/operation\";\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Operation.vue?vue&type=template&id=96600802&scoped=true&\"\nimport script from \"./Operation.vue?vue&type=script&lang=js&\"\nexport * from \"./Operation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"96600802\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"actions__item\",class:{'colored': _vm.colored},style:({ backgroundColor: _vm.colored ? _vm.operation.color : 'transparent' })},[_c('div',{staticClass:\"icon\",class:_vm.operation.iconClass,style:({ backgroundImage: _vm.operation.iconClass ? '' : (\"url(\" + (_vm.operation.icon) + \")\") })}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.operation.name))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.operation.description))]),_vm._v(\" \"),(_vm.colored)?_c('Button',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Add new flow'))+\"\\n\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"actions__item_options\"},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div v-if=\"operation\" class=\"section rule\" :style=\"{ borderLeftColor: operation.color || '' }\">\n\t\t<div class=\"trigger\">\n\t\t\t<p>\n\t\t\t\t<span>{{ t('workflowengine', 'When') }}</span>\n\t\t\t\t<Event :rule=\"rule\" @update=\"updateRule\" />\n\t\t\t</p>\n\t\t\t<p v-for=\"(check, index) in rule.checks\" :key=\"index\">\n\t\t\t\t<span>{{ t('workflowengine', 'and') }}</span>\n\t\t\t\t<Check :check=\"check\"\n\t\t\t\t\t:rule=\"rule\"\n\t\t\t\t\t@update=\"updateRule\"\n\t\t\t\t\t@validate=\"validate\"\n\t\t\t\t\t@remove=\"removeCheck(check)\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<span />\n\t\t\t\t<input v-if=\"lastCheckComplete\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"check--add\"\n\t\t\t\t\tvalue=\"Add a new filter\"\n\t\t\t\t\t@click=\"onAddFilter\">\n\t\t\t</p>\n\t\t</div>\n\t\t<div class=\"flow-icon icon-confirm\" />\n\t\t<div class=\"action\">\n\t\t\t<Operation :operation=\"operation\" :colored=\"false\">\n\t\t\t\t<component :is=\"operation.options\"\n\t\t\t\t\tv-if=\"operation.options\"\n\t\t\t\t\tv-model=\"rule.operation\"\n\t\t\t\t\t@input=\"updateOperation\" />\n\t\t\t</Operation>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<Button v-if=\"rule.id < -1 || dirty\" @click=\"cancelRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Cancel') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button v-else-if=\"!dirty\" @click=\"deleteRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Delete') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button :type=\"ruleStatus.type\"\n\t\t\t\t\t@click=\"saveRule\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<component :is=\"ruleStatus.icon\" :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ ruleStatus.title }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t<p v-if=\"error\" class=\"error-message\">\n\t\t\t\t{{ error }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport CheckMark from 'vue-material-design-icons/Check.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\n\nimport Event from './Event'\nimport Check from './Check'\nimport Operation from './Operation'\n\nexport default {\n\tname: 'Rule',\n\tcomponents: {\n\t\tOperation, Check, Event, Actions, ActionButton, Button, ArrowRight, CheckMark, Close,\n\t},\n\tdirectives: {\n\t\tTooltip,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tediting: false,\n\t\t\tchecks: [],\n\t\t\terror: null,\n\t\t\tdirty: this.rule.id < 0,\n\t\t\toriginalRule: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\truleStatus() {\n\t\t\tif (this.error || !this.rule.valid || this.rule.checks.length === 0 || this.rule.checks.some((check) => check.invalid === true)) {\n\t\t\t\treturn {\n\t\t\t\t\ttitle: t('workflowengine', 'The configuration is invalid'),\n\t\t\t\t\ticon: 'Close',\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttooltip: { placement: 'bottom', show: true, content: this.error },\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dirty) {\n\t\t\t\treturn { title: t('workflowengine', 'Active'), icon: 'CheckMark', type: 'success' }\n\t\t\t}\n\t\t\treturn { title: t('workflowengine', 'Save'), icon: 'ArrowRight', type: 'primary' }\n\n\t\t},\n\t\tlastCheckComplete() {\n\t\t\tconst lastCheck = this.rule.checks[this.rule.checks.length - 1]\n\t\t\treturn typeof lastCheck === 'undefined' || lastCheck.class !== null\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t},\n\tmethods: {\n\t\tasync updateOperation(operation) {\n\t\t\tthis.$set(this.rule, 'operation', operation)\n\t\t\tawait this.updateRule()\n\t\t},\n\t\tvalidate(state) {\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tupdateRule() {\n\t\t\tif (!this.dirty) {\n\t\t\t\tthis.dirty = true\n\t\t\t}\n\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tasync saveRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('pushUpdateRule', this.rule)\n\t\t\t\tthis.dirty = false\n\t\t\t\tthis.error = null\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to save operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tasync deleteRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteRule', this.rule)\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to delete operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tcancelRule() {\n\t\t\tif (this.rule.id < 0) {\n\t\t\t\tthis.$store.dispatch('removeRule', this.rule)\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('updateRule', this.originalRule)\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t\tthis.dirty = false\n\t\t\t}\n\t\t},\n\n\t\tasync removeCheck(check) {\n\t\t\tconst index = this.rule.checks.findIndex(item => item === check)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.$delete(this.rule.checks, index)\n\t\t\t}\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\n\t\tonAddFilter() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.rule.checks.push({ class: null, operator: null, value: '' })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n\t.buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: end;\n\n\t\tbutton {\n\t\t\tmargin-left: 5px;\n\t\t}\n\t\tbutton:last-child{\n\t\t\tmargin-right: 10px;\n\t\t}\n\t}\n\n\t.error-message {\n\t\tfloat: right;\n\t\tmargin-right: 10px;\n\t}\n\n\t.flow-icon {\n\t\twidth: 44px;\n\t}\n\n\t.rule {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tborder-left: 5px solid var(--color-primary-element);\n\n\t\t.trigger, .action {\n\t\t\tflex-grow: 1;\n\t\t\tmin-height: 100px;\n\t\t\tmax-width: 700px;\n\t\t}\n\t\t.action {\n\t\t\tmax-width: 400px;\n\t\t\tposition: relative;\n\t\t}\n\t\t.icon-confirm {\n\t\t\tbackground-position: right 27px;\n\t\t\tpadding-right: 20px;\n\t\t\tmargin-right: 20px;\n\t\t}\n\t}\n\t.trigger p, .action p {\n\t\tmin-height: 34px;\n\t\tdisplay: flex;\n\n\t\t& > span {\n\t\t\tmin-width: 50px;\n\t\t\ttext-align: right;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tpadding-right: 10px;\n\t\t\tpadding-top: 6px;\n\t\t}\n\t\t.multiselect {\n\t\t\tflex-grow: 1;\n\t\t\tmax-width: 300px;\n\t\t}\n\t}\n\t.trigger p:first-child span {\n\t\t\tpadding-top: 3px;\n\t}\n\n\t.check--add {\n\t\tbackground-position: 7px center;\n\t\tbackground-color: transparent;\n\t\tpadding-left: 6px;\n\t\tmargin: 0;\n\t\twidth: 180px;\n\t\tborder-radius: var(--border-radius);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tfont-weight: normal;\n\t\ttext-align: left;\n\t\tfont-size: 1em;\n\t}\n\n\t@media (max-width:1400px) {\n\t\t.rule {\n\t\t\t&, .trigger, .action {\n\t\t\t\twidth: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\t\t\t.flow-icon {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","<template>\n\t<div id=\"workflowengine\">\n\t\t<div class=\"section\">\n\t\t\t<h2>{{ t('workflowengine', 'Available flows') }}</h2>\n\n\t\t\t<p v-if=\"scope === 0\" class=\"settings-hint\">\n\t\t\t\t<a href=\"https://nextcloud.com/developer/\">{{ t('workflowengine', 'For details on how to write your own flow, check out the development documentation.') }}</a>\n\t\t\t</p>\n\n\t\t\t<transition-group name=\"slide\" tag=\"div\" class=\"actions\">\n\t\t\t\t<Operation v-for=\"operation in getMainOperations\"\n\t\t\t\t\t:key=\"operation.id\"\n\t\t\t\t\t:operation=\"operation\"\n\t\t\t\t\t@click.native=\"createNewRule(operation)\" />\n\n\t\t\t\t<a v-if=\"showAppStoreHint\"\n\t\t\t\t\t:key=\"'add'\"\n\t\t\t\t\t:href=\"appstoreUrl\"\n\t\t\t\t\tclass=\"actions__item colored more\">\n\t\t\t\t\t<div class=\"icon icon-add\" />\n\t\t\t\t\t<div class=\"actions__item__description\">\n\t\t\t\t\t\t<h3>{{ t('workflowengine', 'More flows') }}</h3>\n\t\t\t\t\t\t<small>{{ t('workflowengine', 'Browse the App Store') }}</small>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</transition-group>\n\n\t\t\t<div v-if=\"hasMoreOperations\" class=\"actions__more\">\n\t\t\t\t<button class=\"icon\"\n\t\t\t\t\t:class=\"showMoreOperations ? 'icon-triangle-n' : 'icon-triangle-s'\"\n\t\t\t\t\t@click=\"showMoreOperations=!showMoreOperations\">\n\t\t\t\t\t{{ showMoreOperations ? t('workflowengine', 'Show less') : t('workflowengine', 'Show more') }}\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<h2 v-if=\"scope === 0\" class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Configured flows') }}\n\t\t\t</h2>\n\t\t\t<h2 v-else class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Your flows') }}\n\t\t\t</h2>\n\t\t</div>\n\n\t\t<transition-group v-if=\"rules.length > 0\" name=\"slide\">\n\t\t\t<Rule v-for=\"rule in rules\" :key=\"rule.id\" :rule=\"rule\" />\n\t\t</transition-group>\n\t</div>\n</template>\n\n<script>\nimport Rule from './Rule'\nimport Operation from './Operation'\nimport { mapGetters, mapState } from 'vuex'\nimport { generateUrl } from '@nextcloud/router'\n\nconst ACTION_LIMIT = 3\n\nexport default {\n\tname: 'Workflow',\n\tcomponents: {\n\t\tOperation,\n\t\tRule,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMoreOperations: false,\n\t\t\tappstoreUrl: generateUrl('settings/apps/workflow'),\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\trules: 'getRules',\n\t\t}),\n\t\t...mapState({\n\t\t\tappstoreEnabled: 'appstoreEnabled',\n\t\t\tscope: 'scope',\n\t\t\toperations: 'operations',\n\t\t}),\n\t\thasMoreOperations() {\n\t\t\treturn Object.keys(this.operations).length > ACTION_LIMIT\n\t\t},\n\t\tgetMainOperations() {\n\t\t\tif (this.showMoreOperations) {\n\t\t\t\treturn Object.values(this.operations)\n\t\t\t}\n\t\t\treturn Object.values(this.operations).slice(0, ACTION_LIMIT)\n\t\t},\n\t\tshowAppStoreHint() {\n\t\t\treturn this.scope === 0 && this.appstoreEnabled && OC.isUserAdmin()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$store.dispatch('fetchRules')\n\t},\n\tmethods: {\n\t\tcreateNewRule(operation) {\n\t\t\tthis.$store.dispatch('createNewRule', operation)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t#workflowengine {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\t.section {\n\t\tmax-width: 100vw;\n\n\t\th2.configured-flows {\n\t\t\tmargin-top: 50px;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\t.actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 1200px;\n\t\t.actions__item {\n\t\t\tmax-width: 280px;\n\t\t\tflex-basis: 250px;\n\t\t}\n\t}\n\n\tbutton.icon {\n\t\tpadding-left: 32px;\n\t\tbackground-position: 10px center;\n\t}\n\n\t.slide-enter-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: ease-in;\n\t\t-webkit-transition-timing-function: ease-in;\n\t\t-o-transition-timing-function: ease-in;\n\t\ttransition-timing-function: ease-in;\n\t}\n\n\t.slide-leave-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t}\n\n\t.slide-enter-to, .slide-leave {\n\t\tmax-height: 500px;\n\t\toverflow: hidden;\n\t}\n\n\t.slide-enter, .slide-leave-to {\n\t\toverflow: hidden;\n\t\tmax-height: 0;\n\t\tpadding-top: 0;\n\t\tpadding-bottom: 0;\n\t}\n\n\t@import \"./../styles/operation\";\n\n\t.actions__item.more {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Rule.vue?vue&type=template&id=779dc71c&scoped=true&\"\nimport script from \"./Rule.vue?vue&type=script&lang=js&\"\nexport * from \"./Rule.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"779dc71c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.operation)?_c('div',{staticClass:\"section rule\",style:({ borderLeftColor: _vm.operation.color || '' })},[_c('div',{staticClass:\"trigger\"},[_c('p',[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'When')))]),_vm._v(\" \"),_c('Event',{attrs:{\"rule\":_vm.rule},on:{\"update\":_vm.updateRule}})],1),_vm._v(\" \"),_vm._l((_vm.rule.checks),function(check,index){return _c('p',{key:index},[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'and')))]),_vm._v(\" \"),_c('Check',{attrs:{\"check\":check,\"rule\":_vm.rule},on:{\"update\":_vm.updateRule,\"validate\":_vm.validate,\"remove\":function($event){return _vm.removeCheck(check)}}})],1)}),_vm._v(\" \"),_c('p',[_c('span'),_vm._v(\" \"),(_vm.lastCheckComplete)?_c('input',{staticClass:\"check--add\",attrs:{\"type\":\"button\",\"value\":\"Add a new filter\"},on:{\"click\":_vm.onAddFilter}}):_vm._e()])],2),_vm._v(\" \"),_c('div',{staticClass:\"flow-icon icon-confirm\"}),_vm._v(\" \"),_c('div',{staticClass:\"action\"},[_c('Operation',{attrs:{\"operation\":_vm.operation,\"colored\":false}},[(_vm.operation.options)?_c(_vm.operation.options,{tag:\"component\",on:{\"input\":_vm.updateOperation},model:{value:(_vm.rule.operation),callback:function ($$v) {_vm.$set(_vm.rule, \"operation\", $$v)},expression:\"rule.operation\"}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.rule.id < -1 || _vm.dirty)?_c('Button',{on:{\"click\":_vm.cancelRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Cancel'))+\"\\n\\t\\t\\t\")]):(!_vm.dirty)?_c('Button',{on:{\"click\":_vm.deleteRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Delete'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('Button',{attrs:{\"type\":_vm.ruleStatus.type},on:{\"click\":_vm.saveRule},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.ruleStatus.icon,{tag:\"component\",attrs:{\"size\":20}})]},proxy:true}],null,false,2383918876)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.ruleStatus.title)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.error)?_c('p',{staticClass:\"error-message\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.error)+\"\\n\\t\\t\")]):_vm._e()],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Workflow.vue?vue&type=template&id=7b3e4a56&scoped=true&\"\nimport script from \"./Workflow.vue?vue&type=script&lang=js&\"\nexport * from \"./Workflow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b3e4a56\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"workflowengine\"}},[_c('div',{staticClass:\"section\"},[_c('h2',[_vm._v(_vm._s(_vm.t('workflowengine', 'Available flows')))]),_vm._v(\" \"),(_vm.scope === 0)?_c('p',{staticClass:\"settings-hint\"},[_c('a',{attrs:{\"href\":\"https://nextcloud.com/developer/\"}},[_vm._v(_vm._s(_vm.t('workflowengine', 'For details on how to write your own flow, check out the development documentation.')))])]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"actions\",attrs:{\"name\":\"slide\",\"tag\":\"div\"}},[_vm._l((_vm.getMainOperations),function(operation){return _c('Operation',{key:operation.id,attrs:{\"operation\":operation},nativeOn:{\"click\":function($event){return _vm.createNewRule(operation)}}})}),_vm._v(\" \"),(_vm.showAppStoreHint)?_c('a',{key:'add',staticClass:\"actions__item colored more\",attrs:{\"href\":_vm.appstoreUrl}},[_c('div',{staticClass:\"icon icon-add\"}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.t('workflowengine', 'More flows')))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('workflowengine', 'Browse the App Store')))])])]):_vm._e()],2),_vm._v(\" \"),(_vm.hasMoreOperations)?_c('div',{staticClass:\"actions__more\"},[_c('button',{staticClass:\"icon\",class:_vm.showMoreOperations ? 'icon-triangle-n' : 'icon-triangle-s',on:{\"click\":function($event){_vm.showMoreOperations=!_vm.showMoreOperations}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.showMoreOperations ? _vm.t('workflowengine', 'Show less') : _vm.t('workflowengine', 'Show more'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),(_vm.scope === 0)?_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Configured flows'))+\"\\n\\t\\t\")]):_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Your flows'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.rules.length > 0)?_c('transition-group',{attrs:{\"name\":\"slide\"}},_vm._l((_vm.rules),function(rule){return _c('Rule',{key:rule.id,attrs:{\"rule\":rule}})}),1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\nconst regexIPv4 = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\/(3[0-2]|[1-2][0-9]|[1-9])$/\nconst regexIPv6 = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/\n\nconst validateRegex = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexRegex.exec(string) !== null\n}\n\nconst validateIPv4 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv4.exec(string) !== null\n}\n\nconst validateIPv6 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv6.exec(string) !== null\n}\n\nconst stringValidator = (check) => {\n\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\treturn validateRegex(check.value)\n\t}\n\treturn true\n}\n\nexport { validateRegex, stringValidator, validateIPv4, validateIPv6 }\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst valueMixin = {\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t}\n\t},\n\twatch: {\n\t\tvalue: {\n\t\t\timmediate: true,\n\t\t\thandler(value) {\n\t\t\t\tthis.updateInternalValue(value)\n\t\t\t},\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\tthis.newValue = value\n\t\t},\n\t},\n}\n\nexport default valueMixin\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileMimeType.vue?vue&type=template&id=8c011724&scoped=true&\"\nimport script from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nexport * from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8c011724\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a file type'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.t('workflowengine', 'e.g. httpd/unix-directory')},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst xmlToJson = (xml) => {\n\tlet obj = {}\n\n\tif (xml.nodeType === 1) {\n\t\tif (xml.attributes.length > 0) {\n\t\t\tobj['@attributes'] = {}\n\t\t\tfor (let j = 0; j < xml.attributes.length; j++) {\n\t\t\t\tconst attribute = xml.attributes.item(j)\n\t\t\t\tobj['@attributes'][attribute.nodeName] = attribute.nodeValue\n\t\t\t}\n\t\t}\n\t} else if (xml.nodeType === 3) {\n\t\tobj = xml.nodeValue\n\t}\n\n\tif (xml.hasChildNodes()) {\n\t\tfor (let i = 0; i < xml.childNodes.length; i++) {\n\t\t\tconst item = xml.childNodes.item(i)\n\t\t\tconst nodeName = item.nodeName\n\t\t\tif (typeof (obj[nodeName]) === 'undefined') {\n\t\t\t\tobj[nodeName] = xmlToJson(item)\n\t\t\t} else {\n\t\t\t\tif (typeof obj[nodeName].push === 'undefined') {\n\t\t\t\t\tconst old = obj[nodeName]\n\t\t\t\t\tobj[nodeName] = []\n\t\t\t\t\tobj[nodeName].push(old)\n\t\t\t\t}\n\t\t\t\tobj[nodeName].push(xmlToJson(item))\n\t\t\t}\n\t\t}\n\t}\n\treturn obj\n}\n\nconst parseXml = (xml) => {\n\tlet dom = null\n\ttry {\n\t\tdom = (new DOMParser()).parseFromString(xml, 'text/xml')\n\t} catch (e) {\n\t\tconsole.error('Failed to parse xml document', e)\n\t}\n\treturn dom\n}\n\nconst xmlToTagList = (xml) => {\n\tconst json = xmlToJson(parseXml(xml))\n\tconst list = json['d:multistatus']['d:response']\n\tconst result = []\n\tfor (const index in list) {\n\t\tconst tag = list[index]['d:propstat']\n\n\t\tif (tag['d:status']['#text'] !== 'HTTP/1.1 200 OK') {\n\t\t\tcontinue\n\t\t}\n\t\tresult.push({\n\t\t\tid: tag['d:prop']['oc:id']['#text'],\n\t\t\tdisplayName: tag['d:prop']['oc:display-name']['#text'],\n\t\t\tcanAssign: tag['d:prop']['oc:can-assign']['#text'] === 'true',\n\t\t\tuserAssignable: tag['d:prop']['oc:user-assignable']['#text'] === 'true',\n\t\t\tuserVisible: tag['d:prop']['oc:user-visible']['#text'] === 'true',\n\t\t})\n\t}\n\treturn result\n}\n\nconst searchTags = function() {\n\treturn axios({\n\t\tmethod: 'PROPFIND',\n\t\turl: generateRemoteUrl('dav') + '/systemtags/',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t\t\t<d:propfind xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>`,\n\t}).then((response) => {\n\t\treturn xmlToTagList(response.data)\n\t})\n}\n\nexport {\n\tsearchTags,\n}\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Multiselect v-model=\"inputValObjects\"\n\t\t:options=\"tags\"\n\t\t:options-limit=\"5\"\n\t\t:placeholder=\"label\"\n\t\ttrack-by=\"id\"\n\t\t:custom-label=\"tagLabel\"\n\t\tclass=\"multiselect-vue\"\n\t\t:multiple=\"multiple\"\n\t\t:close-on-select=\"false\"\n\t\t:tag-width=\"60\"\n\t\t:disabled=\"disabled\"\n\t\t@input=\"update\">\n\t\t<span slot=\"noResult\">{{ t('core', 'No results') }}</span>\n\t\t<template #option=\"scope\">\n\t\t\t{{ tagLabel(scope.option) }}\n\t\t</template>\n\t</multiselect>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { searchTags } from './api'\n\nlet uuid = 0\nexport default {\n\tname: 'MultiselectTag',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: [String, Array],\n\t\t\tdefault: null,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tinputValObjects: [],\n\t\t\ttags: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tid() {\n\t\t\treturn 'settings-input-text-' + this.uuid\n\t\t},\n\t},\n\twatch: {\n\t\tvalue(newVal) {\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t},\n\t},\n\tbeforeCreate() {\n\t\tthis.uuid = uuid.toString()\n\t\tuuid += 1\n\t\tsearchTags().then((result) => {\n\t\t\tthis.tags = result\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t}).catch(console.error.bind(this))\n\t},\n\tmethods: {\n\t\tgetValueObject() {\n\t\t\tif (this.tags.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.multiple) {\n\t\t\t\treturn this.value.filter((tag) => tag !== '').map(\n\t\t\t\t\t(id) => this.tags.find((tag2) => tag2.id === id)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn this.tags.find((tag) => tag.id === this.value)\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.multiple) {\n\t\t\t\tthis.$emit('input', this.inputValObjects.map((element) => element.id))\n\t\t\t} else {\n\t\t\t\tif (this.inputValObjects === null) {\n\t\t\t\t\tthis.$emit('input', '')\n\t\t\t\t} else {\n\t\t\t\t\tthis.$emit('input', this.inputValObjects.id)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttagLabel({ displayName, userVisible, userAssignable }) {\n\t\t\tif (userVisible === false) {\n\t\t\t\treturn t('systemtags', '%s (invisible)').replace('%s', displayName)\n\t\t\t}\n\t\t\tif (userAssignable === false) {\n\t\t\t\treturn t('systemtags', '%s (restricted)').replace('%s', displayName)\n\t\t\t}\n\t\t\treturn displayName\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<MultiselectTag v-model=\"newValue\"\n\t\t:multiple=\"false\"\n\t\t:label=\"t('workflowengine', 'Select a tag')\"\n\t\t@input=\"update\" />\n</template>\n\n<script>\nimport { MultiselectTag } from './MultiselectTag'\n\nexport default {\n\tname: 'FileSystemTag',\n\tcomponents: {\n\t\tMultiselectTag,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: [],\n\t\t}\n\t},\n\twatch: {\n\t\tvalue() {\n\t\t\tthis.updateValue()\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.updateValue()\n\t},\n\tmethods: {\n\t\tupdateValue() {\n\t\t\tif (this.value !== '') {\n\t\t\t\tthis.newValue = this.value\n\t\t\t} else {\n\t\t\t\tthis.newValue = null\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tthis.$emit('input', this.newValue || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./MultiselectTag.vue?vue&type=template&id=73cc22e8&\"\nimport script from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.tags,\"options-limit\":5,\"placeholder\":_vm.label,\"track-by\":\"id\",\"custom-label\":_vm.tagLabel,\"multiple\":_vm.multiple,\"close-on-select\":false,\"tag-width\":60,\"disabled\":_vm.disabled},on:{\"input\":_vm.update},scopedSlots:_vm._u([{key:\"option\",fn:function(scope){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.tagLabel(scope.option))+\"\\n\\t\")]}}]),model:{value:(_vm.inputValObjects),callback:function ($$v) {_vm.inputValObjects=$$v},expression:\"inputValObjects\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('core', 'No results')))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&\"\nimport script from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\nexport * from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31f5522d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('MultiselectTag',{attrs:{\"multiple\":false,\"label\":_vm.t('workflowengine', 'Select a tag')},on:{\"input\":_vm.update},model:{value:(_vm.newValue),callback:function ($$v) {_vm.newValue=$$v},expression:\"newValue\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { stringValidator, validateIPv4, validateIPv6 } from '../../helpers/validators'\nimport FileMimeType from './FileMimeType'\nimport FileSystemTag from './FileSystemTag'\n\nconst stringOrRegexOperators = () => {\n\treturn [\n\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t]\n}\n\nconst FileChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileName',\n\t\tname: t('workflowengine', 'File name'),\n\t\toperators: stringOrRegexOperators,\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\t\t\treturn '/^dummy-.+$/i'\n\t\t\t}\n\t\t\treturn 'filename.txt'\n\t\t},\n\t\tvalidate: stringValidator,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileMimeType',\n\t\tname: t('workflowengine', 'File MIME type'),\n\t\toperators: stringOrRegexOperators,\n\t\tcomponent: FileMimeType,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSize',\n\t\tname: t('workflowengine', 'File size (upload)'),\n\t\toperators: [\n\t\t\t{ operator: 'less', name: t('workflowengine', 'less') },\n\t\t\t{ operator: '!greater', name: t('workflowengine', 'less or equals') },\n\t\t\t{ operator: '!less', name: t('workflowengine', 'greater or equals') },\n\t\t\t{ operator: 'greater', name: t('workflowengine', 'greater') },\n\t\t],\n\t\tplaceholder: (check) => '5 MB',\n\t\tvalidate: (check) => check.value ? check.value.match(/^[0-9]+[ ]?[kmgt]?b$/i) !== null : false,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestRemoteAddress',\n\t\tname: t('workflowengine', 'Request remote address'),\n\t\toperators: [\n\t\t\t{ operator: 'matchesIPv4', name: t('workflowengine', 'matches IPv4') },\n\t\t\t{ operator: '!matchesIPv4', name: t('workflowengine', 'does not match IPv4') },\n\t\t\t{ operator: 'matchesIPv6', name: t('workflowengine', 'matches IPv6') },\n\t\t\t{ operator: '!matchesIPv6', name: t('workflowengine', 'does not match IPv6') },\n\t\t],\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn '::1/128'\n\t\t\t}\n\t\t\treturn '127.0.0.1/32'\n\t\t},\n\t\tvalidate: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn validateIPv6(check.value)\n\t\t\t}\n\t\t\treturn validateIPv4(check.value)\n\t\t},\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSystemTags',\n\t\tname: t('workflowengine', 'File system tag'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is tagged with') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not tagged with') },\n\t\t],\n\t\tcomponent: FileSystemTag,\n\t},\n]\n\nexport default FileChecks\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&\"\nimport script from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"475ac1e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a user agent'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),(props.option.$groupLabel)?_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.$groupLabel)}}):_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div class=\"timeslot\">\n\t\t<input v-model=\"newValue.startTime\"\n\t\t\ttype=\"text\"\n\t\t\tclass=\"timeslot--start\"\n\t\t\tplaceholder=\"e.g. 08:00\"\n\t\t\t@input=\"update\">\n\t\t<input v-model=\"newValue.endTime\"\n\t\t\ttype=\"text\"\n\t\t\tplaceholder=\"e.g. 18:00\"\n\t\t\t@input=\"update\">\n\t\t<p v-if=\"!valid\" class=\"invalid-hint\">\n\t\t\t{{ t('workflowengine', 'Please enter a valid time span') }}\n\t\t</p>\n\t\t<Multiselect v-show=\"valid\"\n\t\t\tv-model=\"newValue.timezone\"\n\t\t\t:options=\"timezones\"\n\t\t\t@input=\"update\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport moment from 'moment-timezone'\nimport valueMixin from '../../mixins/valueMixin'\n\nconst zones = moment.tz.names()\nexport default {\n\tname: 'RequestTime',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttimezones: zones,\n\t\t\tvalid: false,\n\t\t\tnewValue: {\n\t\t\t\tstartTime: null,\n\t\t\t\tendTime: null,\n\t\t\t\ttimezone: moment.tz.guess(),\n\t\t\t},\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\ttry {\n\t\t\t\tconst data = JSON.parse(value)\n\t\t\t\tif (data.length === 2) {\n\t\t\t\t\tthis.newValue = {\n\t\t\t\t\t\tstartTime: data[0].split(' ', 2)[0],\n\t\t\t\t\t\tendTime: data[1].split(' ', 2)[0],\n\t\t\t\t\t\ttimezone: data[0].split(' ', 2)[1],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// ignore invalid values\n\t\t\t}\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = this.newValue.startTime && this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& this.newValue.endTime && this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& moment.tz.zone(this.newValue.timezone) !== null\n\t\t\tif (this.valid) {\n\t\t\t\tthis.$emit('valid')\n\t\t\t} else {\n\t\t\t\tthis.$emit('invalid')\n\t\t\t}\n\t\t\treturn this.valid\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.newValue.timezone === null) {\n\t\t\t\tthis.newValue.timezone = moment.tz.guess()\n\t\t\t}\n\t\t\tif (this.validate()) {\n\t\t\t\tconst output = `[\"${this.newValue.startTime} ${this.newValue.timezone}\",\"${this.newValue.endTime} ${this.newValue.timezone}\"]`\n\t\t\t\tthis.$emit('input', output)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.timeslot {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 180px;\n\n\t\t.multiselect {\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\t\tborder: 1px solid transparent;\n\t\t}\n\n\t\tinput[type=text] {\n\t\t\twidth: 50%;\n\t\t\tmargin: 0;\n\t\t\tmargin-bottom: 5px;\n\n\t\t\t&.timeslot--start {\n\t\t\t\tmargin-right: 5px;\n\t\t\t\twidth: calc(50% - 5px);\n\t\t\t}\n\t\t}\n\n\t\t.invalid-hint {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestTime.vue?vue&type=template&id=149baca9&scoped=true&\"\nimport script from \"./RequestTime.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestTime.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"149baca9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"timeslot\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.startTime),expression:\"newValue.startTime\"}],staticClass:\"timeslot--start\",attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 08:00\"},domProps:{\"value\":(_vm.newValue.startTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"startTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.endTime),expression:\"newValue.endTime\"}],attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 18:00\"},domProps:{\"value\":(_vm.newValue.endTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"endTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),(!_vm.valid)?_c('p',{staticClass:\"invalid-hint\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Please enter a valid time span'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('Multiselect',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.valid),expression:\"valid\"}],attrs:{\"options\":_vm.timezones},on:{\"input\":_vm.update},model:{value:(_vm.newValue.timezone),callback:function ($$v) {_vm.$set(_vm.newValue, \"timezone\", $$v)},expression:\"newValue.timezone\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&\"\nimport script from \"./RequestURL.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestURL.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dd8e16be\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a request URL'),\"label\":\"label\",\"track-by\":\"pattern\",\"group-values\":\"children\",\"group-label\":\"label\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label)+\" \"+_vm._s(props.option.$groupLabel))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&\"\nimport script from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"79fa10a5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"loading\":_vm.status.isLoading && _vm.groups.length === 0,\"options\":_vm.groups,\"multiple\":false,\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchAsync,\"input\":function (value) { return _vm.$emit('input', value.id); }}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport RequestUserAgent from './RequestUserAgent'\nimport RequestTime from './RequestTime'\nimport RequestURL from './RequestURL'\nimport RequestUserGroup from './RequestUserGroup'\n\nconst RequestChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestURL',\n\t\tname: t('workflowengine', 'Request URL'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestURL,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestTime',\n\t\tname: t('workflowengine', 'Request time'),\n\t\toperators: [\n\t\t\t{ operator: 'in', name: t('workflowengine', 'between') },\n\t\t\t{ operator: '!in', name: t('workflowengine', 'not between') },\n\t\t],\n\t\tcomponent: RequestTime,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestUserAgent',\n\t\tname: t('workflowengine', 'Request user agent'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestUserAgent,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\UserGroupMembership',\n\t\tname: t('workflowengine', 'User group membership'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is member of') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not member of') },\n\t\t],\n\t\tcomponent: RequestUserGroup,\n\t},\n]\n\nexport default RequestChecks\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport FileChecks from './file'\nimport RequestChecks from './request'\n\nexport default [...FileChecks, ...RequestChecks]\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport store from './store'\nimport Settings from './components/Workflow'\nimport ShippedChecks from './components/Checks'\n\n/**\n * A plugin for displaying a custom value field for checks\n *\n * @typedef {object} CheckPlugin\n * @property {string} class - The PHP class name of the check\n * @property {Comparison[]} operators - A list of possible comparison operations running on the check\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n * @property {Function} placeholder - Return a placeholder of no custom component is used\n * @property {Function} validate - validate a check if no custom component is used\n */\n\n/**\n * A plugin for extending the admin page repesentation of a operator\n *\n * @typedef {object} OperatorPlugin\n * @property {string} id - The PHP class name of the check\n * @property {string} operation - Default value for the operation field\n * @property {string} color - Custom color code to be applied for the operator selector\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n */\n\n/**\n * @typedef {object} Comparison\n * @property {string} operator - value the comparison should have, e.g. !less, greater\n * @property {string} name - Translated readable text, e.g. less or equals\n */\n\n/**\n * Public javascript api for apps to register custom plugins\n */\nwindow.OCA.WorkflowEngine = Object.assign({}, OCA.WorkflowEngine, {\n\n\t/**\n\t *\n\t * @param {CheckPlugin} Plugin the plugin to register\n\t */\n\tregisterCheck(Plugin) {\n\t\tstore.commit('addPluginCheck', Plugin)\n\t},\n\t/**\n\t *\n\t * @param {OperatorPlugin} Plugin the plugin to register\n\t */\n\tregisterOperator(Plugin) {\n\t\tstore.commit('addPluginOperator', Plugin)\n\t},\n})\n\n// Register shipped checks\nShippedChecks.forEach((checkPlugin) => window.OCA.WorkflowEngine.registerCheck(checkPlugin))\n\nVue.use(Vuex)\nVue.prototype.t = t\n\nconst View = Vue.extend(Settings)\nconst workflowengine = new View({\n\tstore,\n})\nworkflowengine.$mount('#workflowengine')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Check.vue\"],\"names\":[],\"mappings\":\"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.check {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\twidth: 100%;\\n\\tpadding-right: 20px;\\n\\t& > *:not(.close) {\\n\\t\\twidth: 180px;\\n\\t}\\n\\t& > .comparator {\\n\\t\\tmin-width: 130px;\\n\\t\\twidth: 130px;\\n\\t}\\n\\t& > .option {\\n\\t\\tmin-width: 230px;\\n\\t\\twidth: 230px;\\n\\t}\\n\\t& > .multiselect,\\n\\t& > input[type=text] {\\n\\t\\tmargin-right: 5px;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__content-wrapper li>span,\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\tdisplay: block;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\ninput[type=text] {\\n\\tmargin: 0;\\n}\\n::placeholder {\\n\\tfont-size: 10px;\\n}\\nbutton.action-item.action-item--single.icon-close {\\n\\theight: 44px;\\n\\twidth: 44px;\\n\\tmargin-top: -5px;\\n\\tmargin-bottom: -5px;\\n}\\n.invalid {\\n\\tborder: 1px solid var(--color-error) !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue\"],\"names\":[],\"mappings\":\"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.timeslot {\\n\\tdisplay: flex;\\n\\tflex-grow: 1;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 180px;\\n\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\\n\\t\\tborder: 1px solid transparent;\\n\\t}\\n\\n\\tinput[type=text] {\\n\\t\\twidth: 50%;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-bottom: 5px;\\n\\n\\t\\t&.timeslot--start {\\n\\t\\t\\tmargin-right: 5px;\\n\\t\\t\\twidth: calc(50% - 5px);\\n\\t\\t}\\n\\t}\\n\\n\\t.invalid-hint {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".event[data-v-f3569276]{margin-bottom:5px}.isComplex img[data-v-f3569276]{vertical-align:text-top}.isComplex span[data-v-f3569276]{padding-top:2px;display:inline-block}.multiselect[data-v-f3569276]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-f3569276] .multiselect__single{display:flex}.multiselect[data-v-f3569276]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-f3569276] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-f3569276]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-000);background-repeat:no-repeat;background-position:right center}input[data-v-f3569276]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-f3569276]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-f3569276]{font-weight:900}.option__icon[data-v-f3569276]{width:16px;height:16px}.eventlist img[data-v-f3569276],.eventlist .text[data-v-f3569276]{vertical-align:middle}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Event.vue\"],\"names\":[],\"mappings\":\"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,2CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.event {\\n\\tmargin-bottom: 5px;\\n}\\n.isComplex {\\n\\timg {\\n\\t\\tvertical-align: text-top;\\n\\t}\\n\\tspan {\\n\\t\\tpadding-top: 2px;\\n\\t\\tdisplay: inline-block;\\n\\t}\\n}\\n.multiselect {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n\\tmargin-top: 4px;\\n}\\n.multiselect::v-deep .multiselect__single {\\n\\tdisplay: flex;\\n}\\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\tborder: 1px solid transparent;\\n}\\n\\n.multiselect::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\theight: auto;\\n\\tmin-height: 34px;\\n}\\n\\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\\n\\tbackground-image: var(--icon-triangle-s-000);\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: right center;\\n}\\n\\ninput {\\n\\tborder: 1px solid transparent;\\n}\\n\\n.option__title {\\n\\tmargin-left: 5px;\\n\\tcolor: var(--color-main-text);\\n}\\n.option__title_single {\\n\\tfont-weight: 900;\\n}\\n\\n.option__icon {\\n\\twidth: 16px;\\n\\theight: 16px;\\n}\\n\\n.eventlist img,\\n.eventlist .text {\\n\\tvertical-align: middle;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA\",\"sourcesContent\":[\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Rule.vue\"],\"names\":[],\"mappings\":\"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.buttons {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\n\\tbutton {\\n\\t\\tmargin-left: 5px;\\n\\t}\\n\\tbutton:last-child{\\n\\t\\tmargin-right: 10px;\\n\\t}\\n}\\n\\n.error-message {\\n\\tfloat: right;\\n\\tmargin-right: 10px;\\n}\\n\\n.flow-icon {\\n\\twidth: 44px;\\n}\\n\\n.rule {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tborder-left: 5px solid var(--color-primary-element);\\n\\n\\t.trigger, .action {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-height: 100px;\\n\\t\\tmax-width: 700px;\\n\\t}\\n\\t.action {\\n\\t\\tmax-width: 400px;\\n\\t\\tposition: relative;\\n\\t}\\n\\t.icon-confirm {\\n\\t\\tbackground-position: right 27px;\\n\\t\\tpadding-right: 20px;\\n\\t\\tmargin-right: 20px;\\n\\t}\\n}\\n.trigger p, .action p {\\n\\tmin-height: 34px;\\n\\tdisplay: flex;\\n\\n\\t& > span {\\n\\t\\tmin-width: 50px;\\n\\t\\ttext-align: right;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-right: 10px;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmax-width: 300px;\\n\\t}\\n}\\n.trigger p:first-child span {\\n\\t\\tpadding-top: 3px;\\n}\\n\\n.check--add {\\n\\tbackground-position: 7px center;\\n\\tbackground-color: transparent;\\n\\tpadding-left: 6px;\\n\\tmargin: 0;\\n\\twidth: 180px;\\n\\tborder-radius: var(--border-radius);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tfont-weight: normal;\\n\\ttext-align: left;\\n\\tfont-size: 1em;\\n}\\n\\n@media (max-width:1400px) {\\n\\t.rule {\\n\\t\\t&, .trigger, .action {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t}\\n\\t\\t.flow-icon {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#workflowengine[data-v-7b3e4a56]{border-bottom:1px solid var(--color-border)}.section[data-v-7b3e4a56]{max-width:100vw}.section h2.configured-flows[data-v-7b3e4a56]{margin-top:50px;margin-bottom:0}.actions[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-7b3e4a56]{max-width:280px;flex-basis:250px}button.icon[data-v-7b3e4a56]{padding-left:32px;background-position:10px center}.slide-enter-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-7b3e4a56],.slide-leave[data-v-7b3e4a56]{max-height:500px;overflow:hidden}.slide-enter[data-v-7b3e4a56],.slide-leave-to[data-v-7b3e4a56]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-7b3e4a56]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-7b3e4a56]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-7b3e4a56]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-7b3e4a56],small[data-v-7b3e4a56]{padding:6px;display:block}h3[data-v-7b3e4a56]{margin:0;padding:0;font-weight:600}small[data-v-7b3e4a56]{font-size:10pt;flex-grow:1}.colored[data-v-7b3e4a56]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-7b3e4a56],.colored:not(.more) small[data-v-7b3e4a56]{color:var(--color-primary-text)}.actions__item[data-v-7b3e4a56]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-7b3e4a56]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-7b3e4a56]{padding:0}.actions__item:not(.colored) .icon[data-v-7b3e4a56]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-7b3e4a56]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-7b3e4a56]{filter:invert(1)}.actions__item.more[data-v-7b3e4a56]{background-color:var(--color-background-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Workflow.vue\",\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAuGA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAIF,6BACC,iBAAA,CACA,+BAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CChKD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDyFD,qCACC,6CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#workflowengine {\\n\\tborder-bottom: 1px solid var(--color-border);\\n}\\n.section {\\n\\tmax-width: 100vw;\\n\\n\\th2.configured-flows {\\n\\t\\tmargin-top: 50px;\\n\\t\\tmargin-bottom: 0;\\n\\t}\\n}\\n.actions {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 1200px;\\n\\t.actions__item {\\n\\t\\tmax-width: 280px;\\n\\t\\tflex-basis: 250px;\\n\\t}\\n}\\n\\nbutton.icon {\\n\\tpadding-left: 32px;\\n\\tbackground-position: 10px center;\\n}\\n\\n.slide-enter-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: ease-in;\\n\\t-webkit-transition-timing-function: ease-in;\\n\\t-o-transition-timing-function: ease-in;\\n\\ttransition-timing-function: ease-in;\\n}\\n\\n.slide-leave-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.slide-enter-to, .slide-leave {\\n\\tmax-height: 500px;\\n\\toverflow: hidden;\\n}\\n\\n.slide-enter, .slide-leave-to {\\n\\toverflow: hidden;\\n\\tmax-height: 0;\\n\\tpadding-top: 0;\\n\\tpadding-bottom: 0;\\n}\\n\\n@import \\\"./../styles/operation\\\";\\n\\n.actions__item.more {\\n\\tbackground-color: var(--color-background-dark);\\n}\\n\",\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-8c011724], input[type='text'][data-v-8c011724] {\\n\\twidth: 100%;\\n}\\n.multiselect[data-v-8c011724] .multiselect__content-wrapper li>span,\\n.multiselect[data-v-8c011724] .multiselect__single {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a file type')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'e.g. httpd/unix-directory')\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from './../../mixins/valueMixin'\\nimport { imagePath } from '@nextcloud/router'\\n\\nexport default {\\n\\tname: 'FileMimeType',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-folder',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Folder'),\\n\\t\\t\\t\\t\\tpattern: 'httpd/unix-directory',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-picture',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Images'),\\n\\t\\t\\t\\t\\tpattern: '/image\\\\\\\\/.*/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Office documents'),\\n\\t\\t\\t\\t\\tpattern: '/(vnd\\\\\\\\.(ms-|openxmlformats-|oasis\\\\\\\\.opendocument).*)$/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'PDF documents'),\\n\\t\\t\\t\\t\\tpattern: 'application/pdf',\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn true\\n\\t\\t\\t}\\n\\t\\t\\treturn false\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom mimetype'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom mimetype'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.multiselect >>> .multiselect__content-wrapper li>span,\\n\\t.multiselect >>> .multiselect__single {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue\"],\"names\":[],\"mappings\":\";AA2IA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a request URL')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\tgroup-values=\\\"children\\\"\\n\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"placeholder\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestURL',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Predefined URLs'),\\n\\t\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t\\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\\n\\t\\t\\t\\t\\t],\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tplaceholder() {\\n\\t\\t\\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\\n\\t\\t\\t\\treturn '/^https\\\\\\\\:\\\\\\\\/\\\\\\\\/localhost\\\\\\\\/index\\\\\\\\.php$/i'\\n\\t\\t\\t}\\n\\t\\t\\treturn 'https://localhost/index.php'\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.map(groups => groups.children)\\n\\t\\t\\t\\t.flat()\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Others'),\\n\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t],\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\\n\\twidth: 100%;\\n}\\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.multiselect[data-v-475ac1e6] .multiselect__single {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.option__icon[data-v-475ac1e6] {\\n\\tdisplay: inline-block;\\n\\tmin-width: 30px;\\n\\tbackground-position: left;\\n}\\n.option__title[data-v-475ac1e6] {\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue\"],\"names\":[],\"mappings\":\";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a user agent')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-if=\\\"props.option.$groupLabel\\\" class=\\\"option__title\\\" v-html=\\\"props.option.$groupLabel\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-else class=\\\"option__title\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestUserAgent',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\\n\\t\\t\\t\\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.multiselect .multiselect__content-wrapper li>span {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.option__icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tmin-width: 30px;\\n\\t\\tbackground-position: left;\\n\\t}\\n\\t.option__title {\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-79fa10a5] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue\"],\"names\":[],\"mappings\":\";AA4GA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:loading=\\\"status.isLoading && groups.length === 0\\\"\\n\\t\\t\\t:options=\\\"groups\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\tlabel=\\\"displayname\\\"\\n\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t@search-change=\\\"searchAsync\\\"\\n\\t\\t\\t@input=\\\"(value) => $emit('input', value.id)\\\" />\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport axios from '@nextcloud/axios'\\nimport { generateOcsUrl } from '@nextcloud/router'\\n\\nconst groups = []\\nconst status = {\\n\\tisLoading: false,\\n}\\n\\nexport default {\\n\\tname: 'RequestUserGroup',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tprops: {\\n\\t\\tvalue: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\tdefault: '',\\n\\t\\t},\\n\\t\\tcheck: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\tdefault: () => { return {} },\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tgroups,\\n\\t\\t\\tstatus,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tcurrentValue() {\\n\\t\\t\\treturn this.groups.find(group => group.id === this.value) || null\\n\\t\\t},\\n\\t},\\n\\tasync mounted() {\\n\\t\\tif (this.groups.length === 0) {\\n\\t\\t\\tawait this.searchAsync('')\\n\\t\\t}\\n\\t\\tif (this.currentValue === null) {\\n\\t\\t\\tawait this.searchAsync(this.value)\\n\\t\\t}\\n\\t},\\n\\tmethods: {\\n\\t\\tsearchAsync(searchQuery) {\\n\\t\\t\\tif (this.status.isLoading) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.status.isLoading = true\\n\\t\\t\\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\\n\\t\\t\\t\\tresponse.data.ocs.data.groups.forEach((group) => {\\n\\t\\t\\t\\t\\tthis.addGroup({\\n\\t\\t\\t\\t\\t\\tid: group.id,\\n\\t\\t\\t\\t\\t\\tdisplayname: group.displayname,\\n\\t\\t\\t\\t\\t})\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tthis.status.isLoading = false\\n\\t\\t\\t}, (error) => {\\n\\t\\t\\t\\tconsole.error('Error while loading group list', error.response)\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\taddGroup(group) {\\n\\t\\t\\tconst index = this.groups.findIndex((item) => item.id === group.id)\\n\\t\\t\\tif (index === -1) {\\n\\t\\t\\t\\tthis.groups.push(group)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 2819,\n\t\"./hi.js\": 2819,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 318;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t318: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(94158); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","scopeValue","loadState","getApiUrl","url","generateOcsUrl","Vue","Vuex","Store","state","rules","scope","appstoreEnabled","operations","plugins","checks","operators","entities","events","map","entity","event","id","eventName","flat","mutations","addRule","rule","push","valid","updateRule","index","findIndex","item","newRule","Object","assign","removeRule","splice","addPluginCheck","plugin","class","addPluginOperator","color","actions","fetchRules","context","axios","data","values","ocs","forEach","commit","createNewRule","isComplex","fixedEntity","find","Date","getTime","name","operator","value","operation","JSON","parse","pushUpdateRule","confirmPassword","result","deleteRule","setValid","getters","getRules","filter","sort","rule1","rule2","getOperationForRule","getEntityForOperation","getEventsForOperation","getChecksForEntity","check","supportedEntities","indexOf","length","reduce","obj","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","icon","_v","_s","triggerHint","currentEvent","allEvents","on","updateEvent","scopedSlots","_u","key","fn","ref","isOpen","_l","displayName","_e","props","option","directives","rawName","expression","showDelete","t","updateCheck","model","callback","$$v","currentOption","currentOperator","currentComponent","component","tag","$event","validate","$set","invalid","valuePlaceholder","domProps","target","composing","deleteVisible","$emit","colored","style","backgroundColor","iconClass","backgroundImage","description","_t","borderLeftColor","removeCheck","onAddFilter","updateOperation","dirty","cancelRule","ruleStatus","type","saveRule","proxy","title","error","nativeOn","appstoreUrl","showMoreOperations","regexRegex","regexIPv4","regexIPv6","String","default","newValue","watch","immediate","handler","updateInternalValue","methods","currentValue","setValue","iconUrl","label","isPredefined","pattern","updateCustom","xmlToJson","xml","nodeType","attributes","j","attribute","nodeName","nodeValue","hasChildNodes","i","childNodes","old","method","generateRemoteUrl","then","response","json","dom","DOMParser","parseFromString","e","console","parseXml","list","canAssign","userAssignable","userVisible","xmlToTagList","tags","tagLabel","multiple","disabled","update","inputValObjects","slot","stringOrRegexOperators","placeholder","string","exec","FileMimeType","match","validateIPv4","FileSystemTag","$groupLabel","timezones","status","isLoading","groups","searchAsync","RequestURL","RequestTime","RequestUserAgent","RequestUserGroup","FileChecks","RequestChecks","window","OCA","WorkflowEngine","registerCheck","Plugin","store","registerOperator","ShippedChecks","checkPlugin","Settings","$mount","___CSS_LOADER_EXPORT___","module","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"workflowengine-workflowengine.js?v=07f0f8b2e738f65443c2","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/workflowengine/src/helpers/api.js","webpack:///nextcloud/apps/workflowengine/src/store.js","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?ae78","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?5115","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=template&id=57bd6e67&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?50c3","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?3fb8","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=template&id=70cc784d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?10fd","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?3526","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=template&id=96600802&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?6847","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?e711","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=template&id=779dc71c&scoped=true&","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?b47f","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?17b8","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=template&id=7b3e4a56&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/helpers/validators.js","webpack:///nextcloud/apps/workflowengine/src/mixins/valueMixin.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?6178","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?c385","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=template&id=8c011724&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/api.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue","webpack://nextcloud/./apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?3f10","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=template&id=73cc22e8&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileSystemTag.vue?2d3e","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/file.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?83e0","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?81d6","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?6629","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?a55a","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=template&id=149baca9&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?de33","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?eee5","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?b928","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?f6d3","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/request.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/index.js","webpack:///nextcloud/apps/workflowengine/src/workflowengine.js","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst scopeValue = loadState('workflowengine', 'scope') === 0 ? 'global' : 'user'\n\nconst getApiUrl = (url) => {\n\treturn generateOcsUrl('apps/workflowengine/api/v1/workflows/{scopeValue}', { scopeValue }) + url + '?format=json'\n}\n\nexport {\n\tgetApiUrl,\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport axios from '@nextcloud/axios'\nimport { getApiUrl } from './helpers/api'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { loadState } from '@nextcloud/initial-state'\n\nVue.use(Vuex)\n\nconst store = new Store({\n\tstate: {\n\t\trules: [],\n\t\tscope: loadState('workflowengine', 'scope'),\n\t\tappstoreEnabled: loadState('workflowengine', 'appstoreenabled'),\n\t\toperations: loadState('workflowengine', 'operators'),\n\n\t\tplugins: Vue.observable({\n\t\t\tchecks: {},\n\t\t\toperators: {},\n\t\t}),\n\n\t\tentities: loadState('workflowengine', 'entities'),\n\t\tevents: loadState('workflowengine', 'entities')\n\t\t\t.map((entity) => entity.events.map(event => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `${entity.id}::${event.eventName}`,\n\t\t\t\t\tentity,\n\t\t\t\t\t...event,\n\t\t\t\t}\n\t\t\t})).flat(),\n\t\tchecks: loadState('workflowengine', 'checks'),\n\t},\n\tmutations: {\n\t\taddRule(state, rule) {\n\t\t\tstate.rules.push({ ...rule, valid: true })\n\t\t},\n\t\tupdateRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tconst newRule = Object.assign({}, rule)\n\t\t\tVue.set(state.rules, index, newRule)\n\t\t},\n\t\tremoveRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tstate.rules.splice(index, 1)\n\t\t},\n\t\taddPluginCheck(state, plugin) {\n\t\t\tVue.set(state.plugins.checks, plugin.class, plugin)\n\t\t},\n\t\taddPluginOperator(state, plugin) {\n\t\t\tplugin = Object.assign(\n\t\t\t\t{ color: 'var(--color-primary-element)' },\n\t\t\t\tplugin, state.operations[plugin.id] || {})\n\t\t\tif (typeof state.operations[plugin.id] !== 'undefined') {\n\t\t\t\tVue.set(state.operations, plugin.id, plugin)\n\t\t\t}\n\t\t},\n\t},\n\tactions: {\n\t\tasync fetchRules(context) {\n\t\t\tconst { data } = await axios.get(getApiUrl(''))\n\t\t\tObject.values(data.ocs.data).flat().forEach((rule) => {\n\t\t\t\tcontext.commit('addRule', rule)\n\t\t\t})\n\t\t},\n\t\tcreateNewRule(context, rule) {\n\t\t\tlet entity = null\n\t\t\tlet events = []\n\t\t\tif (rule.isComplex === false && rule.fixedEntity === '') {\n\t\t\t\tentity = context.state.entities.find((item) => rule.entities && rule.entities[0] === item.id)\n\t\t\t\tentity = entity || Object.values(context.state.entities)[0]\n\t\t\t\tevents = [entity.events[0].eventName]\n\t\t\t}\n\n\t\t\tcontext.commit('addRule', {\n\t\t\t\tid: -(new Date().getTime()),\n\t\t\t\tclass: rule.id,\n\t\t\t\tentity: entity ? entity.id : rule.fixedEntity,\n\t\t\t\tevents,\n\t\t\t\tname: '', // unused in the new ui, there for legacy reasons\n\t\t\t\tchecks: [\n\t\t\t\t\t{ class: null, operator: null, value: '' },\n\t\t\t\t],\n\t\t\t\toperation: rule.operation || '',\n\t\t\t})\n\t\t},\n\t\tupdateRule(context, rule) {\n\t\t\tcontext.commit('updateRule', {\n\t\t\t\t...rule,\n\t\t\t\tevents: typeof rule.events === 'string' ? JSON.parse(rule.events) : rule.events,\n\t\t\t})\n\t\t},\n\t\tremoveRule(context, rule) {\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tasync pushUpdateRule(context, rule) {\n\t\t\tif (context.state.scope === 0) {\n\t\t\t\tawait confirmPassword()\n\t\t\t}\n\t\t\tlet result\n\t\t\tif (rule.id < 0) {\n\t\t\t\tresult = await axios.post(getApiUrl(''), rule)\n\t\t\t} else {\n\t\t\t\tresult = await axios.put(getApiUrl(`/${rule.id}`), rule)\n\t\t\t}\n\t\t\tVue.set(rule, 'id', result.data.ocs.data.id)\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t\tasync deleteRule(context, rule) {\n\t\t\tawait confirmPassword()\n\t\t\tawait axios.delete(getApiUrl(`/${rule.id}`))\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tsetValid(context, { rule, valid }) {\n\t\t\trule.valid = valid\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t},\n\tgetters: {\n\t\tgetRules(state) {\n\t\t\treturn state.rules.filter((rule) => typeof state.operations[rule.class] !== 'undefined').sort((rule1, rule2) => {\n\t\t\t\treturn rule1.id - rule2.id || rule2.class - rule1.class\n\t\t\t})\n\t\t},\n\t\tgetOperationForRule(state) {\n\t\t\treturn (rule) => state.operations[rule.class]\n\t\t},\n\t\tgetEntityForOperation(state) {\n\t\t\treturn (operation) => state.entities.find((entity) => operation.fixedEntity === entity.id)\n\t\t},\n\t\tgetEventsForOperation(state) {\n\t\t\treturn (operation) => state.events\n\t\t},\n\n\t\t/**\n\t\t * Return all available checker plugins for a given entity class\n\t\t *\n\t\t * @param {object} state the store state\n\t\t * @return {Function} the available plugins\n\t\t */\n\t\tgetChecksForEntity(state) {\n\t\t\treturn (entity) => {\n\t\t\t\treturn Object.values(state.checks)\n\t\t\t\t\t.filter((check) => check.supportedEntities.indexOf(entity) > -1 || check.supportedEntities.length === 0)\n\t\t\t\t\t.map((check) => state.plugins.checks[check.id])\n\t\t\t\t\t.reduce((obj, item) => {\n\t\t\t\t\t\tobj[item.class] = item\n\t\t\t\t\t\treturn obj\n\t\t\t\t\t}, {})\n\t\t\t}\n\t\t},\n\t},\n})\n\nexport default store\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"event\">\n\t\t<div v-if=\"operation.isComplex && operation.fixedEntity !== ''\" class=\"isComplex\">\n\t\t\t<img class=\"option__icon\" :src=\"entity.icon\">\n\t\t\t<span class=\"option__title option__title_single\">{{ operation.triggerHint }}</span>\n\t\t</div>\n\t\t<Multiselect v-else\n\t\t\t:value=\"currentEvent\"\n\t\t\t:options=\"allEvents\"\n\t\t\ttrack-by=\"id\"\n\t\t\t:multiple=\"true\"\n\t\t\t:auto-limit=\"false\"\n\t\t\t:disabled=\"allEvents.length <= 1\"\n\t\t\t@input=\"updateEvent\">\n\t\t\t<template slot=\"selection\" slot-scope=\"{ values, isOpen }\">\n\t\t\t\t<div v-if=\"values.length && !isOpen\" class=\"eventlist\">\n\t\t\t\t\t<img class=\"option__icon\" :src=\"values[0].entity.icon\">\n\t\t\t\t\t<span v-for=\"(value, index) in values\" :key=\"value.id\" class=\"text option__title option__title_single\">{{ value.displayName }} <span v-if=\"index+1 < values.length\">, </span></span>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<img class=\"option__icon\" :src=\"props.option.entity.icon\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.displayName }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { showWarning } from '@nextcloud/dialogs'\n\nexport default {\n\tname: 'Event',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tentity() {\n\t\t\treturn this.$store.getters.getEntityForOperation(this.operation)\n\t\t},\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\tallEvents() {\n\t\t\treturn this.$store.getters.getEventsForOperation(this.operation)\n\t\t},\n\t\tcurrentEvent() {\n\t\t\treturn this.allEvents.filter(event => event.entity.id === this.rule.entity && this.rule.events.indexOf(event.eventName) !== -1)\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateEvent(events) {\n\t\t\tif (events.length === 0) {\n\t\t\t\tshowWarning(t('workflowengine', 'At least one event must be selected'))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst existingEntity = this.rule.entity\n\t\t\tconst newEntities = events.map(event => event.entity.id).filter((value, index, self) => self.indexOf(value) === index)\n\t\t\tlet newEntity = null\n\t\t\tif (newEntities.length > 1) {\n\t\t\t\tnewEntity = newEntities.filter(entity => entity !== existingEntity)[0]\n\t\t\t} else {\n\t\t\t\tnewEntity = newEntities[0]\n\t\t\t}\n\n\t\t\tthis.$set(this.rule, 'entity', newEntity)\n\t\t\tthis.$set(this.rule, 'events', events.filter(event => event.entity.id === newEntity).map(event => event.eventName))\n\t\t\tthis.$emit('update', this.rule)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.event {\n\t\tmargin-bottom: 5px;\n\t}\n\t.isComplex {\n\t\timg {\n\t\t\tvertical-align: text-top;\n\t\t}\n\t\tspan {\n\t\t\tpadding-top: 2px;\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmax-width: 550px;\n\t\tmargin-top: 4px;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: flex;\n\t}\n\t.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\theight: auto;\n\t\tmin-height: 34px;\n\t}\n\n\t.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\t\tbackground-image: var(--icon-triangle-s-dark);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: right center;\n\t}\n\n\tinput {\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.option__title {\n\t\tmargin-left: 5px;\n\t\tcolor: var(--color-main-text);\n\t}\n\t.option__title_single {\n\t\tfont-weight: 900;\n\t}\n\n\t.option__icon {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t}\n\n\t.eventlist img,\n\t.eventlist .text {\n\t\tvertical-align: middle;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Event.vue?vue&type=template&id=57bd6e67&scoped=true&\"\nimport script from \"./Event.vue?vue&type=script&lang=js&\"\nexport * from \"./Event.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57bd6e67\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"event\"},[(_vm.operation.isComplex && _vm.operation.fixedEntity !== '')?_c('div',{staticClass:\"isComplex\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":_vm.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(_vm.operation.triggerHint))])]):_c('Multiselect',{attrs:{\"value\":_vm.currentEvent,\"options\":_vm.allEvents,\"track-by\":\"id\",\"multiple\":true,\"auto-limit\":false,\"disabled\":_vm.allEvents.length <= 1},on:{\"input\":_vm.updateEvent},scopedSlots:_vm._u([{key:\"selection\",fn:function(ref){\nvar values = ref.values;\nvar isOpen = ref.isOpen;\nreturn [(values.length && !isOpen)?_c('div',{staticClass:\"eventlist\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":values[0].entity.icon}}),_vm._v(\" \"),_vm._l((values),function(value,index){return _c('span',{key:value.id,staticClass:\"text option__title option__title_single\"},[_vm._v(_vm._s(value.displayName)+\" \"),(index+1 < values.length)?_c('span',[_vm._v(\", \")]):_vm._e()])})],2):_vm._e()]}},{key:\"option\",fn:function(props){return [_c('img',{staticClass:\"option__icon\",attrs:{\"src\":props.option.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.displayName))])]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"","<template>\n\t<div v-click-outside=\"hideDelete\" class=\"check\" @click=\"showDelete\">\n\t\t<Multiselect ref=\"checkSelector\"\n\t\t\tv-model=\"currentOption\"\n\t\t\t:options=\"options\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"class\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a filter')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<Multiselect v-model=\"currentOperator\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:options=\"operators\"\n\t\t\tclass=\"comparator\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"operator\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a comparator')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<component :is=\"currentOption.component\"\n\t\t\tv-if=\"currentOperator && currentComponent\"\n\t\t\tv-model=\"check.value\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:check=\"check\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\"\n\t\t\t@valid=\"(valid=true) && validate()\"\n\t\t\t@invalid=\"!(valid=false) && validate()\" />\n\t\t<input v-else\n\t\t\tv-model=\"check.value\"\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{ invalid: !valid }\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:placeholder=\"valuePlaceholder\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\">\n\t\t<Actions v-if=\"deleteVisible || !currentOption\">\n\t\t\t<ActionButton icon=\"icon-close\" @click=\"$emit('remove')\" />\n\t\t</Actions>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\n\nexport default {\n\tname: 'Check',\n\tcomponents: {\n\t\tActionButton,\n\t\tActions,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tprops: {\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdeleteVisible: false,\n\t\t\tcurrentOption: null,\n\t\t\tcurrentOperator: null,\n\t\t\toptions: [],\n\t\t\tvalid: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tchecks() {\n\t\t\treturn this.$store.getters.getChecksForEntity(this.rule.entity)\n\t\t},\n\t\toperators() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\tconst operators = this.checks[this.currentOption.class].operators\n\t\t\tif (typeof operators === 'function') {\n\t\t\t\treturn operators(this.check)\n\t\t\t}\n\t\t\treturn operators\n\t\t},\n\t\tcurrentComponent() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\treturn this.checks[this.currentOption.class].component\n\t\t},\n\t\tvaluePlaceholder() {\n\t\t\tif (this.currentOption && this.currentOption.placeholder) {\n\t\t\t\treturn this.currentOption.placeholder(this.check)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t},\n\twatch: {\n\t\t'check.operator'() {\n\t\t\tthis.validate()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.options = Object.values(this.checks)\n\t\tthis.currentOption = this.checks[this.check.class]\n\t\tthis.currentOperator = this.operators.find((operator) => operator.operator === this.check.operator)\n\n\t\tif (this.check.class === null) {\n\t\t\tthis.$nextTick(() => this.$refs.checkSelector.$el.focus())\n\t\t}\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tshowDelete() {\n\t\t\tthis.deleteVisible = true\n\t\t},\n\t\thideDelete() {\n\t\t\tthis.deleteVisible = false\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = true\n\t\t\tif (this.currentOption && this.currentOption.validate) {\n\t\t\t\tthis.valid = !!this.currentOption.validate(this.check)\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.invalid = !this.valid\n\t\t\tthis.$emit('validate', this.valid)\n\t\t},\n\t\tupdateCheck() {\n\t\t\tconst matchingOperator = this.operators.findIndex((operator) => this.check.operator === operator.operator)\n\t\t\tif (this.check.class !== this.currentOption.class || matchingOperator === -1) {\n\t\t\t\tthis.currentOperator = this.operators[0]\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.class = this.currentOption.class\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.operator = this.currentOperator.operator\n\n\t\t\tthis.validate()\n\n\t\t\tthis.$emit('update', this.check)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.check {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\twidth: 100%;\n\t\tpadding-right: 20px;\n\t\t& > *:not(.close) {\n\t\t\twidth: 180px;\n\t\t}\n\t\t& > .comparator {\n\t\t\tmin-width: 130px;\n\t\t\twidth: 130px;\n\t\t}\n\t\t& > .option {\n\t\t\tmin-width: 230px;\n\t\t\twidth: 230px;\n\t\t}\n\t\t& > .multiselect,\n\t\t& > input[type=text] {\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t\t.multiselect::v-deep .multiselect__single {\n\t\t\tdisplay: block;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\tinput[type=text] {\n\t\tmargin: 0;\n\t}\n\t::placeholder {\n\t\tfont-size: 10px;\n\t}\n\tbutton.action-item.action-item--single.icon-close {\n\t\theight: 44px;\n\t\twidth: 44px;\n\t\tmargin-top: -5px;\n\t\tmargin-bottom: -5px;\n\t}\n\t.invalid {\n\t\tborder: 1px solid var(--color-error) !important;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Check.vue?vue&type=template&id=70cc784d&scoped=true&\"\nimport script from \"./Check.vue?vue&type=script&lang=js&\"\nexport * from \"./Check.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70cc784d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideDelete),expression:\"hideDelete\"}],staticClass:\"check\",on:{\"click\":_vm.showDelete}},[_c('Multiselect',{ref:\"checkSelector\",attrs:{\"options\":_vm.options,\"label\":\"name\",\"track-by\":\"class\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a filter')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOption),callback:function ($$v) {_vm.currentOption=$$v},expression:\"currentOption\"}}),_vm._v(\" \"),_c('Multiselect',{staticClass:\"comparator\",attrs:{\"disabled\":!_vm.currentOption,\"options\":_vm.operators,\"label\":\"name\",\"track-by\":\"operator\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a comparator')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOperator),callback:function ($$v) {_vm.currentOperator=$$v},expression:\"currentOperator\"}}),_vm._v(\" \"),(_vm.currentOperator && _vm.currentComponent)?_c(_vm.currentOption.component,{tag:\"component\",staticClass:\"option\",attrs:{\"disabled\":!_vm.currentOption,\"check\":_vm.check},on:{\"input\":_vm.updateCheck,\"valid\":function($event){(_vm.valid=true) && _vm.validate()},\"invalid\":function($event){!(_vm.valid=false) && _vm.validate()}},model:{value:(_vm.check.value),callback:function ($$v) {_vm.$set(_vm.check, \"value\", $$v)},expression:\"check.value\"}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.check.value),expression:\"check.value\"}],staticClass:\"option\",class:{ invalid: !_vm.valid },attrs:{\"type\":\"text\",\"disabled\":!_vm.currentOption,\"placeholder\":_vm.valuePlaceholder},domProps:{\"value\":(_vm.check.value)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.check, \"value\", $event.target.value)},_vm.updateCheck]}}),_vm._v(\" \"),(_vm.deleteVisible || !_vm.currentOption)?_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){return _vm.$emit('remove')}}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"actions__item\" :class=\"{'colored': colored}\" :style=\"{ backgroundColor: colored ? operation.color : 'transparent' }\">\n\t\t<div class=\"icon\" :class=\"operation.iconClass\" :style=\"{ backgroundImage: operation.iconClass ? '' : `url(${operation.icon})` }\" />\n\t\t<div class=\"actions__item__description\">\n\t\t\t<h3>{{ operation.name }}</h3>\n\t\t\t<small>{{ operation.description }}</small>\n\t\t\t<Button v-if=\"colored\">\n\t\t\t\t{{ t('workflowengine', 'Add new flow') }}\n\t\t\t</Button>\n\t\t</div>\n\t\t<div class=\"actions__item_options\">\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Button from '@nextcloud/vue/dist/Components/Button'\n\nexport default {\n\tname: 'Operation',\n\tcomponents: {\n\t\tButton,\n\t},\n\tprops: {\n\t\toperation: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcolored: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"./../styles/operation\";\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Operation.vue?vue&type=template&id=96600802&scoped=true&\"\nimport script from \"./Operation.vue?vue&type=script&lang=js&\"\nexport * from \"./Operation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"96600802\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"actions__item\",class:{'colored': _vm.colored},style:({ backgroundColor: _vm.colored ? _vm.operation.color : 'transparent' })},[_c('div',{staticClass:\"icon\",class:_vm.operation.iconClass,style:({ backgroundImage: _vm.operation.iconClass ? '' : (\"url(\" + (_vm.operation.icon) + \")\") })}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.operation.name))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.operation.description))]),_vm._v(\" \"),(_vm.colored)?_c('Button',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Add new flow'))+\"\\n\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"actions__item_options\"},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div v-if=\"operation\" class=\"section rule\" :style=\"{ borderLeftColor: operation.color || '' }\">\n\t\t<div class=\"trigger\">\n\t\t\t<p>\n\t\t\t\t<span>{{ t('workflowengine', 'When') }}</span>\n\t\t\t\t<Event :rule=\"rule\" @update=\"updateRule\" />\n\t\t\t</p>\n\t\t\t<p v-for=\"(check, index) in rule.checks\" :key=\"index\">\n\t\t\t\t<span>{{ t('workflowengine', 'and') }}</span>\n\t\t\t\t<Check :check=\"check\"\n\t\t\t\t\t:rule=\"rule\"\n\t\t\t\t\t@update=\"updateRule\"\n\t\t\t\t\t@validate=\"validate\"\n\t\t\t\t\t@remove=\"removeCheck(check)\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<span />\n\t\t\t\t<input v-if=\"lastCheckComplete\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"check--add\"\n\t\t\t\t\tvalue=\"Add a new filter\"\n\t\t\t\t\t@click=\"onAddFilter\">\n\t\t\t</p>\n\t\t</div>\n\t\t<div class=\"flow-icon icon-confirm\" />\n\t\t<div class=\"action\">\n\t\t\t<Operation :operation=\"operation\" :colored=\"false\">\n\t\t\t\t<component :is=\"operation.options\"\n\t\t\t\t\tv-if=\"operation.options\"\n\t\t\t\t\tv-model=\"rule.operation\"\n\t\t\t\t\t@input=\"updateOperation\" />\n\t\t\t</Operation>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<Button v-if=\"rule.id < -1 || dirty\" @click=\"cancelRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Cancel') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button v-else-if=\"!dirty\" @click=\"deleteRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Delete') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button :type=\"ruleStatus.type\"\n\t\t\t\t\t@click=\"saveRule\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<component :is=\"ruleStatus.icon\" :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ ruleStatus.title }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t<p v-if=\"error\" class=\"error-message\">\n\t\t\t\t{{ error }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport CheckMark from 'vue-material-design-icons/Check.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\n\nimport Event from './Event'\nimport Check from './Check'\nimport Operation from './Operation'\n\nexport default {\n\tname: 'Rule',\n\tcomponents: {\n\t\tOperation, Check, Event, Actions, ActionButton, Button, ArrowRight, CheckMark, Close,\n\t},\n\tdirectives: {\n\t\tTooltip,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tediting: false,\n\t\t\tchecks: [],\n\t\t\terror: null,\n\t\t\tdirty: this.rule.id < 0,\n\t\t\toriginalRule: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\truleStatus() {\n\t\t\tif (this.error || !this.rule.valid || this.rule.checks.length === 0 || this.rule.checks.some((check) => check.invalid === true)) {\n\t\t\t\treturn {\n\t\t\t\t\ttitle: t('workflowengine', 'The configuration is invalid'),\n\t\t\t\t\ticon: 'Close',\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttooltip: { placement: 'bottom', show: true, content: this.error },\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dirty) {\n\t\t\t\treturn { title: t('workflowengine', 'Active'), icon: 'CheckMark', type: 'success' }\n\t\t\t}\n\t\t\treturn { title: t('workflowengine', 'Save'), icon: 'ArrowRight', type: 'primary' }\n\n\t\t},\n\t\tlastCheckComplete() {\n\t\t\tconst lastCheck = this.rule.checks[this.rule.checks.length - 1]\n\t\t\treturn typeof lastCheck === 'undefined' || lastCheck.class !== null\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t},\n\tmethods: {\n\t\tasync updateOperation(operation) {\n\t\t\tthis.$set(this.rule, 'operation', operation)\n\t\t\tawait this.updateRule()\n\t\t},\n\t\tvalidate(state) {\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tupdateRule() {\n\t\t\tif (!this.dirty) {\n\t\t\t\tthis.dirty = true\n\t\t\t}\n\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tasync saveRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('pushUpdateRule', this.rule)\n\t\t\t\tthis.dirty = false\n\t\t\t\tthis.error = null\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to save operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tasync deleteRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteRule', this.rule)\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to delete operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tcancelRule() {\n\t\t\tif (this.rule.id < 0) {\n\t\t\t\tthis.$store.dispatch('removeRule', this.rule)\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('updateRule', this.originalRule)\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t\tthis.dirty = false\n\t\t\t}\n\t\t},\n\n\t\tasync removeCheck(check) {\n\t\t\tconst index = this.rule.checks.findIndex(item => item === check)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.$delete(this.rule.checks, index)\n\t\t\t}\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\n\t\tonAddFilter() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.rule.checks.push({ class: null, operator: null, value: '' })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n\t.buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: end;\n\n\t\tbutton {\n\t\t\tmargin-left: 5px;\n\t\t}\n\t\tbutton:last-child{\n\t\t\tmargin-right: 10px;\n\t\t}\n\t}\n\n\t.error-message {\n\t\tfloat: right;\n\t\tmargin-right: 10px;\n\t}\n\n\t.flow-icon {\n\t\twidth: 44px;\n\t}\n\n\t.rule {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tborder-left: 5px solid var(--color-primary-element);\n\n\t\t.trigger, .action {\n\t\t\tflex-grow: 1;\n\t\t\tmin-height: 100px;\n\t\t\tmax-width: 700px;\n\t\t}\n\t\t.action {\n\t\t\tmax-width: 400px;\n\t\t\tposition: relative;\n\t\t}\n\t\t.icon-confirm {\n\t\t\tbackground-position: right 27px;\n\t\t\tpadding-right: 20px;\n\t\t\tmargin-right: 20px;\n\t\t}\n\t}\n\t.trigger p, .action p {\n\t\tmin-height: 34px;\n\t\tdisplay: flex;\n\n\t\t& > span {\n\t\t\tmin-width: 50px;\n\t\t\ttext-align: right;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tpadding-right: 10px;\n\t\t\tpadding-top: 6px;\n\t\t}\n\t\t.multiselect {\n\t\t\tflex-grow: 1;\n\t\t\tmax-width: 300px;\n\t\t}\n\t}\n\t.trigger p:first-child span {\n\t\t\tpadding-top: 3px;\n\t}\n\n\t.check--add {\n\t\tbackground-position: 7px center;\n\t\tbackground-color: transparent;\n\t\tpadding-left: 6px;\n\t\tmargin: 0;\n\t\twidth: 180px;\n\t\tborder-radius: var(--border-radius);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tfont-weight: normal;\n\t\ttext-align: left;\n\t\tfont-size: 1em;\n\t}\n\n\t@media (max-width:1400px) {\n\t\t.rule {\n\t\t\t&, .trigger, .action {\n\t\t\t\twidth: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\t\t\t.flow-icon {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","<template>\n\t<div id=\"workflowengine\">\n\t\t<div class=\"section\">\n\t\t\t<h2>{{ t('workflowengine', 'Available flows') }}</h2>\n\n\t\t\t<p v-if=\"scope === 0\" class=\"settings-hint\">\n\t\t\t\t<a href=\"https://nextcloud.com/developer/\">{{ t('workflowengine', 'For details on how to write your own flow, check out the development documentation.') }}</a>\n\t\t\t</p>\n\n\t\t\t<transition-group name=\"slide\" tag=\"div\" class=\"actions\">\n\t\t\t\t<Operation v-for=\"operation in getMainOperations\"\n\t\t\t\t\t:key=\"operation.id\"\n\t\t\t\t\t:operation=\"operation\"\n\t\t\t\t\t@click.native=\"createNewRule(operation)\" />\n\n\t\t\t\t<a v-if=\"showAppStoreHint\"\n\t\t\t\t\t:key=\"'add'\"\n\t\t\t\t\t:href=\"appstoreUrl\"\n\t\t\t\t\tclass=\"actions__item colored more\">\n\t\t\t\t\t<div class=\"icon icon-add\" />\n\t\t\t\t\t<div class=\"actions__item__description\">\n\t\t\t\t\t\t<h3>{{ t('workflowengine', 'More flows') }}</h3>\n\t\t\t\t\t\t<small>{{ t('workflowengine', 'Browse the App Store') }}</small>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</transition-group>\n\n\t\t\t<div v-if=\"hasMoreOperations\" class=\"actions__more\">\n\t\t\t\t<button class=\"icon\"\n\t\t\t\t\t:class=\"showMoreOperations ? 'icon-triangle-n' : 'icon-triangle-s'\"\n\t\t\t\t\t@click=\"showMoreOperations=!showMoreOperations\">\n\t\t\t\t\t{{ showMoreOperations ? t('workflowengine', 'Show less') : t('workflowengine', 'Show more') }}\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<h2 v-if=\"scope === 0\" class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Configured flows') }}\n\t\t\t</h2>\n\t\t\t<h2 v-else class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Your flows') }}\n\t\t\t</h2>\n\t\t</div>\n\n\t\t<transition-group v-if=\"rules.length > 0\" name=\"slide\">\n\t\t\t<Rule v-for=\"rule in rules\" :key=\"rule.id\" :rule=\"rule\" />\n\t\t</transition-group>\n\t</div>\n</template>\n\n<script>\nimport Rule from './Rule'\nimport Operation from './Operation'\nimport { mapGetters, mapState } from 'vuex'\nimport { generateUrl } from '@nextcloud/router'\n\nconst ACTION_LIMIT = 3\n\nexport default {\n\tname: 'Workflow',\n\tcomponents: {\n\t\tOperation,\n\t\tRule,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMoreOperations: false,\n\t\t\tappstoreUrl: generateUrl('settings/apps/workflow'),\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\trules: 'getRules',\n\t\t}),\n\t\t...mapState({\n\t\t\tappstoreEnabled: 'appstoreEnabled',\n\t\t\tscope: 'scope',\n\t\t\toperations: 'operations',\n\t\t}),\n\t\thasMoreOperations() {\n\t\t\treturn Object.keys(this.operations).length > ACTION_LIMIT\n\t\t},\n\t\tgetMainOperations() {\n\t\t\tif (this.showMoreOperations) {\n\t\t\t\treturn Object.values(this.operations)\n\t\t\t}\n\t\t\treturn Object.values(this.operations).slice(0, ACTION_LIMIT)\n\t\t},\n\t\tshowAppStoreHint() {\n\t\t\treturn this.scope === 0 && this.appstoreEnabled && OC.isUserAdmin()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$store.dispatch('fetchRules')\n\t},\n\tmethods: {\n\t\tcreateNewRule(operation) {\n\t\t\tthis.$store.dispatch('createNewRule', operation)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t#workflowengine {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\t.section {\n\t\tmax-width: 100vw;\n\n\t\th2.configured-flows {\n\t\t\tmargin-top: 50px;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\t.actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 1200px;\n\t\t.actions__item {\n\t\t\tmax-width: 280px;\n\t\t\tflex-basis: 250px;\n\t\t}\n\t}\n\n\tbutton.icon {\n\t\tpadding-left: 32px;\n\t\tbackground-position: 10px center;\n\t}\n\n\t.slide-enter-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: ease-in;\n\t\t-webkit-transition-timing-function: ease-in;\n\t\t-o-transition-timing-function: ease-in;\n\t\ttransition-timing-function: ease-in;\n\t}\n\n\t.slide-leave-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t}\n\n\t.slide-enter-to, .slide-leave {\n\t\tmax-height: 500px;\n\t\toverflow: hidden;\n\t}\n\n\t.slide-enter, .slide-leave-to {\n\t\toverflow: hidden;\n\t\tmax-height: 0;\n\t\tpadding-top: 0;\n\t\tpadding-bottom: 0;\n\t}\n\n\t@import \"./../styles/operation\";\n\n\t.actions__item.more {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Rule.vue?vue&type=template&id=779dc71c&scoped=true&\"\nimport script from \"./Rule.vue?vue&type=script&lang=js&\"\nexport * from \"./Rule.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"779dc71c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.operation)?_c('div',{staticClass:\"section rule\",style:({ borderLeftColor: _vm.operation.color || '' })},[_c('div',{staticClass:\"trigger\"},[_c('p',[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'When')))]),_vm._v(\" \"),_c('Event',{attrs:{\"rule\":_vm.rule},on:{\"update\":_vm.updateRule}})],1),_vm._v(\" \"),_vm._l((_vm.rule.checks),function(check,index){return _c('p',{key:index},[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'and')))]),_vm._v(\" \"),_c('Check',{attrs:{\"check\":check,\"rule\":_vm.rule},on:{\"update\":_vm.updateRule,\"validate\":_vm.validate,\"remove\":function($event){return _vm.removeCheck(check)}}})],1)}),_vm._v(\" \"),_c('p',[_c('span'),_vm._v(\" \"),(_vm.lastCheckComplete)?_c('input',{staticClass:\"check--add\",attrs:{\"type\":\"button\",\"value\":\"Add a new filter\"},on:{\"click\":_vm.onAddFilter}}):_vm._e()])],2),_vm._v(\" \"),_c('div',{staticClass:\"flow-icon icon-confirm\"}),_vm._v(\" \"),_c('div',{staticClass:\"action\"},[_c('Operation',{attrs:{\"operation\":_vm.operation,\"colored\":false}},[(_vm.operation.options)?_c(_vm.operation.options,{tag:\"component\",on:{\"input\":_vm.updateOperation},model:{value:(_vm.rule.operation),callback:function ($$v) {_vm.$set(_vm.rule, \"operation\", $$v)},expression:\"rule.operation\"}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.rule.id < -1 || _vm.dirty)?_c('Button',{on:{\"click\":_vm.cancelRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Cancel'))+\"\\n\\t\\t\\t\")]):(!_vm.dirty)?_c('Button',{on:{\"click\":_vm.deleteRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Delete'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('Button',{attrs:{\"type\":_vm.ruleStatus.type},on:{\"click\":_vm.saveRule},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.ruleStatus.icon,{tag:\"component\",attrs:{\"size\":20}})]},proxy:true}],null,false,2383918876)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.ruleStatus.title)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.error)?_c('p',{staticClass:\"error-message\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.error)+\"\\n\\t\\t\")]):_vm._e()],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Workflow.vue?vue&type=template&id=7b3e4a56&scoped=true&\"\nimport script from \"./Workflow.vue?vue&type=script&lang=js&\"\nexport * from \"./Workflow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Workflow.vue?vue&type=style&index=0&id=7b3e4a56&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b3e4a56\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"workflowengine\"}},[_c('div',{staticClass:\"section\"},[_c('h2',[_vm._v(_vm._s(_vm.t('workflowengine', 'Available flows')))]),_vm._v(\" \"),(_vm.scope === 0)?_c('p',{staticClass:\"settings-hint\"},[_c('a',{attrs:{\"href\":\"https://nextcloud.com/developer/\"}},[_vm._v(_vm._s(_vm.t('workflowengine', 'For details on how to write your own flow, check out the development documentation.')))])]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"actions\",attrs:{\"name\":\"slide\",\"tag\":\"div\"}},[_vm._l((_vm.getMainOperations),function(operation){return _c('Operation',{key:operation.id,attrs:{\"operation\":operation},nativeOn:{\"click\":function($event){return _vm.createNewRule(operation)}}})}),_vm._v(\" \"),(_vm.showAppStoreHint)?_c('a',{key:'add',staticClass:\"actions__item colored more\",attrs:{\"href\":_vm.appstoreUrl}},[_c('div',{staticClass:\"icon icon-add\"}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.t('workflowengine', 'More flows')))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('workflowengine', 'Browse the App Store')))])])]):_vm._e()],2),_vm._v(\" \"),(_vm.hasMoreOperations)?_c('div',{staticClass:\"actions__more\"},[_c('button',{staticClass:\"icon\",class:_vm.showMoreOperations ? 'icon-triangle-n' : 'icon-triangle-s',on:{\"click\":function($event){_vm.showMoreOperations=!_vm.showMoreOperations}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.showMoreOperations ? _vm.t('workflowengine', 'Show less') : _vm.t('workflowengine', 'Show more'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),(_vm.scope === 0)?_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Configured flows'))+\"\\n\\t\\t\")]):_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Your flows'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.rules.length > 0)?_c('transition-group',{attrs:{\"name\":\"slide\"}},_vm._l((_vm.rules),function(rule){return _c('Rule',{key:rule.id,attrs:{\"rule\":rule}})}),1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\nconst regexIPv4 = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\/(3[0-2]|[1-2][0-9]|[1-9])$/\nconst regexIPv6 = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/\n\nconst validateRegex = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexRegex.exec(string) !== null\n}\n\nconst validateIPv4 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv4.exec(string) !== null\n}\n\nconst validateIPv6 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv6.exec(string) !== null\n}\n\nconst stringValidator = (check) => {\n\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\treturn validateRegex(check.value)\n\t}\n\treturn true\n}\n\nexport { validateRegex, stringValidator, validateIPv4, validateIPv6 }\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst valueMixin = {\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t}\n\t},\n\twatch: {\n\t\tvalue: {\n\t\t\timmediate: true,\n\t\t\thandler(value) {\n\t\t\t\tthis.updateInternalValue(value)\n\t\t\t},\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\tthis.newValue = value\n\t\t},\n\t},\n}\n\nexport default valueMixin\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileMimeType.vue?vue&type=template&id=8c011724&scoped=true&\"\nimport script from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nexport * from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8c011724\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a file type'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.t('workflowengine', 'e.g. httpd/unix-directory')},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst xmlToJson = (xml) => {\n\tlet obj = {}\n\n\tif (xml.nodeType === 1) {\n\t\tif (xml.attributes.length > 0) {\n\t\t\tobj['@attributes'] = {}\n\t\t\tfor (let j = 0; j < xml.attributes.length; j++) {\n\t\t\t\tconst attribute = xml.attributes.item(j)\n\t\t\t\tobj['@attributes'][attribute.nodeName] = attribute.nodeValue\n\t\t\t}\n\t\t}\n\t} else if (xml.nodeType === 3) {\n\t\tobj = xml.nodeValue\n\t}\n\n\tif (xml.hasChildNodes()) {\n\t\tfor (let i = 0; i < xml.childNodes.length; i++) {\n\t\t\tconst item = xml.childNodes.item(i)\n\t\t\tconst nodeName = item.nodeName\n\t\t\tif (typeof (obj[nodeName]) === 'undefined') {\n\t\t\t\tobj[nodeName] = xmlToJson(item)\n\t\t\t} else {\n\t\t\t\tif (typeof obj[nodeName].push === 'undefined') {\n\t\t\t\t\tconst old = obj[nodeName]\n\t\t\t\t\tobj[nodeName] = []\n\t\t\t\t\tobj[nodeName].push(old)\n\t\t\t\t}\n\t\t\t\tobj[nodeName].push(xmlToJson(item))\n\t\t\t}\n\t\t}\n\t}\n\treturn obj\n}\n\nconst parseXml = (xml) => {\n\tlet dom = null\n\ttry {\n\t\tdom = (new DOMParser()).parseFromString(xml, 'text/xml')\n\t} catch (e) {\n\t\tconsole.error('Failed to parse xml document', e)\n\t}\n\treturn dom\n}\n\nconst xmlToTagList = (xml) => {\n\tconst json = xmlToJson(parseXml(xml))\n\tconst list = json['d:multistatus']['d:response']\n\tconst result = []\n\tfor (const index in list) {\n\t\tconst tag = list[index]['d:propstat']\n\n\t\tif (tag['d:status']['#text'] !== 'HTTP/1.1 200 OK') {\n\t\t\tcontinue\n\t\t}\n\t\tresult.push({\n\t\t\tid: tag['d:prop']['oc:id']['#text'],\n\t\t\tdisplayName: tag['d:prop']['oc:display-name']['#text'],\n\t\t\tcanAssign: tag['d:prop']['oc:can-assign']['#text'] === 'true',\n\t\t\tuserAssignable: tag['d:prop']['oc:user-assignable']['#text'] === 'true',\n\t\t\tuserVisible: tag['d:prop']['oc:user-visible']['#text'] === 'true',\n\t\t})\n\t}\n\treturn result\n}\n\nconst searchTags = function() {\n\treturn axios({\n\t\tmethod: 'PROPFIND',\n\t\turl: generateRemoteUrl('dav') + '/systemtags/',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t\t\t<d:propfind xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>`,\n\t}).then((response) => {\n\t\treturn xmlToTagList(response.data)\n\t})\n}\n\nexport {\n\tsearchTags,\n}\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Multiselect v-model=\"inputValObjects\"\n\t\t:options=\"tags\"\n\t\t:options-limit=\"5\"\n\t\t:placeholder=\"label\"\n\t\ttrack-by=\"id\"\n\t\t:custom-label=\"tagLabel\"\n\t\tclass=\"multiselect-vue\"\n\t\t:multiple=\"multiple\"\n\t\t:close-on-select=\"false\"\n\t\t:tag-width=\"60\"\n\t\t:disabled=\"disabled\"\n\t\t@input=\"update\">\n\t\t<span slot=\"noResult\">{{ t('core', 'No results') }}</span>\n\t\t<template #option=\"scope\">\n\t\t\t{{ tagLabel(scope.option) }}\n\t\t</template>\n\t</multiselect>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { searchTags } from './api'\n\nlet uuid = 0\nexport default {\n\tname: 'MultiselectTag',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: [String, Array],\n\t\t\tdefault: null,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tinputValObjects: [],\n\t\t\ttags: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tid() {\n\t\t\treturn 'settings-input-text-' + this.uuid\n\t\t},\n\t},\n\twatch: {\n\t\tvalue(newVal) {\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t},\n\t},\n\tbeforeCreate() {\n\t\tthis.uuid = uuid.toString()\n\t\tuuid += 1\n\t\tsearchTags().then((result) => {\n\t\t\tthis.tags = result\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t}).catch(console.error.bind(this))\n\t},\n\tmethods: {\n\t\tgetValueObject() {\n\t\t\tif (this.tags.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.multiple) {\n\t\t\t\treturn this.value.filter((tag) => tag !== '').map(\n\t\t\t\t\t(id) => this.tags.find((tag2) => tag2.id === id)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn this.tags.find((tag) => tag.id === this.value)\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.multiple) {\n\t\t\t\tthis.$emit('input', this.inputValObjects.map((element) => element.id))\n\t\t\t} else {\n\t\t\t\tif (this.inputValObjects === null) {\n\t\t\t\t\tthis.$emit('input', '')\n\t\t\t\t} else {\n\t\t\t\t\tthis.$emit('input', this.inputValObjects.id)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttagLabel({ displayName, userVisible, userAssignable }) {\n\t\t\tif (userVisible === false) {\n\t\t\t\treturn t('systemtags', '%s (invisible)').replace('%s', displayName)\n\t\t\t}\n\t\t\tif (userAssignable === false) {\n\t\t\t\treturn t('systemtags', '%s (restricted)').replace('%s', displayName)\n\t\t\t}\n\t\t\treturn displayName\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<MultiselectTag v-model=\"newValue\"\n\t\t:multiple=\"false\"\n\t\t:label=\"t('workflowengine', 'Select a tag')\"\n\t\t@input=\"update\" />\n</template>\n\n<script>\nimport { MultiselectTag } from './MultiselectTag'\n\nexport default {\n\tname: 'FileSystemTag',\n\tcomponents: {\n\t\tMultiselectTag,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: [],\n\t\t}\n\t},\n\twatch: {\n\t\tvalue() {\n\t\t\tthis.updateValue()\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.updateValue()\n\t},\n\tmethods: {\n\t\tupdateValue() {\n\t\t\tif (this.value !== '') {\n\t\t\t\tthis.newValue = this.value\n\t\t\t} else {\n\t\t\t\tthis.newValue = null\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tthis.$emit('input', this.newValue || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./MultiselectTag.vue?vue&type=template&id=73cc22e8&\"\nimport script from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.tags,\"options-limit\":5,\"placeholder\":_vm.label,\"track-by\":\"id\",\"custom-label\":_vm.tagLabel,\"multiple\":_vm.multiple,\"close-on-select\":false,\"tag-width\":60,\"disabled\":_vm.disabled},on:{\"input\":_vm.update},scopedSlots:_vm._u([{key:\"option\",fn:function(scope){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.tagLabel(scope.option))+\"\\n\\t\")]}}]),model:{value:(_vm.inputValObjects),callback:function ($$v) {_vm.inputValObjects=$$v},expression:\"inputValObjects\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('core', 'No results')))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&\"\nimport script from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\nexport * from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31f5522d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('MultiselectTag',{attrs:{\"multiple\":false,\"label\":_vm.t('workflowengine', 'Select a tag')},on:{\"input\":_vm.update},model:{value:(_vm.newValue),callback:function ($$v) {_vm.newValue=$$v},expression:\"newValue\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { stringValidator, validateIPv4, validateIPv6 } from '../../helpers/validators'\nimport FileMimeType from './FileMimeType'\nimport FileSystemTag from './FileSystemTag'\n\nconst stringOrRegexOperators = () => {\n\treturn [\n\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t]\n}\n\nconst FileChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileName',\n\t\tname: t('workflowengine', 'File name'),\n\t\toperators: stringOrRegexOperators,\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\t\t\treturn '/^dummy-.+$/i'\n\t\t\t}\n\t\t\treturn 'filename.txt'\n\t\t},\n\t\tvalidate: stringValidator,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileMimeType',\n\t\tname: t('workflowengine', 'File MIME type'),\n\t\toperators: stringOrRegexOperators,\n\t\tcomponent: FileMimeType,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSize',\n\t\tname: t('workflowengine', 'File size (upload)'),\n\t\toperators: [\n\t\t\t{ operator: 'less', name: t('workflowengine', 'less') },\n\t\t\t{ operator: '!greater', name: t('workflowengine', 'less or equals') },\n\t\t\t{ operator: '!less', name: t('workflowengine', 'greater or equals') },\n\t\t\t{ operator: 'greater', name: t('workflowengine', 'greater') },\n\t\t],\n\t\tplaceholder: (check) => '5 MB',\n\t\tvalidate: (check) => check.value ? check.value.match(/^[0-9]+[ ]?[kmgt]?b$/i) !== null : false,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestRemoteAddress',\n\t\tname: t('workflowengine', 'Request remote address'),\n\t\toperators: [\n\t\t\t{ operator: 'matchesIPv4', name: t('workflowengine', 'matches IPv4') },\n\t\t\t{ operator: '!matchesIPv4', name: t('workflowengine', 'does not match IPv4') },\n\t\t\t{ operator: 'matchesIPv6', name: t('workflowengine', 'matches IPv6') },\n\t\t\t{ operator: '!matchesIPv6', name: t('workflowengine', 'does not match IPv6') },\n\t\t],\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn '::1/128'\n\t\t\t}\n\t\t\treturn '127.0.0.1/32'\n\t\t},\n\t\tvalidate: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn validateIPv6(check.value)\n\t\t\t}\n\t\t\treturn validateIPv4(check.value)\n\t\t},\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSystemTags',\n\t\tname: t('workflowengine', 'File system tag'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is tagged with') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not tagged with') },\n\t\t],\n\t\tcomponent: FileSystemTag,\n\t},\n]\n\nexport default FileChecks\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&\"\nimport script from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"475ac1e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a user agent'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),(props.option.$groupLabel)?_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.$groupLabel)}}):_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div class=\"timeslot\">\n\t\t<input v-model=\"newValue.startTime\"\n\t\t\ttype=\"text\"\n\t\t\tclass=\"timeslot--start\"\n\t\t\tplaceholder=\"e.g. 08:00\"\n\t\t\t@input=\"update\">\n\t\t<input v-model=\"newValue.endTime\"\n\t\t\ttype=\"text\"\n\t\t\tplaceholder=\"e.g. 18:00\"\n\t\t\t@input=\"update\">\n\t\t<p v-if=\"!valid\" class=\"invalid-hint\">\n\t\t\t{{ t('workflowengine', 'Please enter a valid time span') }}\n\t\t</p>\n\t\t<Multiselect v-show=\"valid\"\n\t\t\tv-model=\"newValue.timezone\"\n\t\t\t:options=\"timezones\"\n\t\t\t@input=\"update\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport moment from 'moment-timezone'\nimport valueMixin from '../../mixins/valueMixin'\n\nconst zones = moment.tz.names()\nexport default {\n\tname: 'RequestTime',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttimezones: zones,\n\t\t\tvalid: false,\n\t\t\tnewValue: {\n\t\t\t\tstartTime: null,\n\t\t\t\tendTime: null,\n\t\t\t\ttimezone: moment.tz.guess(),\n\t\t\t},\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\ttry {\n\t\t\t\tconst data = JSON.parse(value)\n\t\t\t\tif (data.length === 2) {\n\t\t\t\t\tthis.newValue = {\n\t\t\t\t\t\tstartTime: data[0].split(' ', 2)[0],\n\t\t\t\t\t\tendTime: data[1].split(' ', 2)[0],\n\t\t\t\t\t\ttimezone: data[0].split(' ', 2)[1],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// ignore invalid values\n\t\t\t}\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = this.newValue.startTime && this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& this.newValue.endTime && this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& moment.tz.zone(this.newValue.timezone) !== null\n\t\t\tif (this.valid) {\n\t\t\t\tthis.$emit('valid')\n\t\t\t} else {\n\t\t\t\tthis.$emit('invalid')\n\t\t\t}\n\t\t\treturn this.valid\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.newValue.timezone === null) {\n\t\t\t\tthis.newValue.timezone = moment.tz.guess()\n\t\t\t}\n\t\t\tif (this.validate()) {\n\t\t\t\tconst output = `[\"${this.newValue.startTime} ${this.newValue.timezone}\",\"${this.newValue.endTime} ${this.newValue.timezone}\"]`\n\t\t\t\tthis.$emit('input', output)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.timeslot {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 180px;\n\n\t\t.multiselect {\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\t\tborder: 1px solid transparent;\n\t\t}\n\n\t\tinput[type=text] {\n\t\t\twidth: 50%;\n\t\t\tmargin: 0;\n\t\t\tmargin-bottom: 5px;\n\n\t\t\t&.timeslot--start {\n\t\t\t\tmargin-right: 5px;\n\t\t\t\twidth: calc(50% - 5px);\n\t\t\t}\n\t\t}\n\n\t\t.invalid-hint {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestTime.vue?vue&type=template&id=149baca9&scoped=true&\"\nimport script from \"./RequestTime.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestTime.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"149baca9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"timeslot\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.startTime),expression:\"newValue.startTime\"}],staticClass:\"timeslot--start\",attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 08:00\"},domProps:{\"value\":(_vm.newValue.startTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"startTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.endTime),expression:\"newValue.endTime\"}],attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 18:00\"},domProps:{\"value\":(_vm.newValue.endTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"endTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),(!_vm.valid)?_c('p',{staticClass:\"invalid-hint\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Please enter a valid time span'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('Multiselect',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.valid),expression:\"valid\"}],attrs:{\"options\":_vm.timezones},on:{\"input\":_vm.update},model:{value:(_vm.newValue.timezone),callback:function ($$v) {_vm.$set(_vm.newValue, \"timezone\", $$v)},expression:\"newValue.timezone\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&\"\nimport script from \"./RequestURL.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestURL.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dd8e16be\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a request URL'),\"label\":\"label\",\"track-by\":\"pattern\",\"group-values\":\"children\",\"group-label\":\"label\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label)+\" \"+_vm._s(props.option.$groupLabel))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&\"\nimport script from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"79fa10a5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"loading\":_vm.status.isLoading && _vm.groups.length === 0,\"options\":_vm.groups,\"multiple\":false,\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchAsync,\"input\":function (value) { return _vm.$emit('input', value.id); }}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport RequestUserAgent from './RequestUserAgent'\nimport RequestTime from './RequestTime'\nimport RequestURL from './RequestURL'\nimport RequestUserGroup from './RequestUserGroup'\n\nconst RequestChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestURL',\n\t\tname: t('workflowengine', 'Request URL'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestURL,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestTime',\n\t\tname: t('workflowengine', 'Request time'),\n\t\toperators: [\n\t\t\t{ operator: 'in', name: t('workflowengine', 'between') },\n\t\t\t{ operator: '!in', name: t('workflowengine', 'not between') },\n\t\t],\n\t\tcomponent: RequestTime,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestUserAgent',\n\t\tname: t('workflowengine', 'Request user agent'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestUserAgent,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\UserGroupMembership',\n\t\tname: t('workflowengine', 'User group membership'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is member of') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not member of') },\n\t\t],\n\t\tcomponent: RequestUserGroup,\n\t},\n]\n\nexport default RequestChecks\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport FileChecks from './file'\nimport RequestChecks from './request'\n\nexport default [...FileChecks, ...RequestChecks]\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport store from './store'\nimport Settings from './components/Workflow'\nimport ShippedChecks from './components/Checks'\n\n/**\n * A plugin for displaying a custom value field for checks\n *\n * @typedef {object} CheckPlugin\n * @property {string} class - The PHP class name of the check\n * @property {Comparison[]} operators - A list of possible comparison operations running on the check\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n * @property {Function} placeholder - Return a placeholder of no custom component is used\n * @property {Function} validate - validate a check if no custom component is used\n */\n\n/**\n * A plugin for extending the admin page repesentation of a operator\n *\n * @typedef {object} OperatorPlugin\n * @property {string} id - The PHP class name of the check\n * @property {string} operation - Default value for the operation field\n * @property {string} color - Custom color code to be applied for the operator selector\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n */\n\n/**\n * @typedef {object} Comparison\n * @property {string} operator - value the comparison should have, e.g. !less, greater\n * @property {string} name - Translated readable text, e.g. less or equals\n */\n\n/**\n * Public javascript api for apps to register custom plugins\n */\nwindow.OCA.WorkflowEngine = Object.assign({}, OCA.WorkflowEngine, {\n\n\t/**\n\t *\n\t * @param {CheckPlugin} Plugin the plugin to register\n\t */\n\tregisterCheck(Plugin) {\n\t\tstore.commit('addPluginCheck', Plugin)\n\t},\n\t/**\n\t *\n\t * @param {OperatorPlugin} Plugin the plugin to register\n\t */\n\tregisterOperator(Plugin) {\n\t\tstore.commit('addPluginOperator', Plugin)\n\t},\n})\n\n// Register shipped checks\nShippedChecks.forEach((checkPlugin) => window.OCA.WorkflowEngine.registerCheck(checkPlugin))\n\nVue.use(Vuex)\nVue.prototype.t = t\n\nconst View = Vue.extend(Settings)\nconst workflowengine = new View({\n\tstore,\n})\nworkflowengine.$mount('#workflowengine')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Check.vue\"],\"names\":[],\"mappings\":\"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.check {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\twidth: 100%;\\n\\tpadding-right: 20px;\\n\\t& > *:not(.close) {\\n\\t\\twidth: 180px;\\n\\t}\\n\\t& > .comparator {\\n\\t\\tmin-width: 130px;\\n\\t\\twidth: 130px;\\n\\t}\\n\\t& > .option {\\n\\t\\tmin-width: 230px;\\n\\t\\twidth: 230px;\\n\\t}\\n\\t& > .multiselect,\\n\\t& > input[type=text] {\\n\\t\\tmargin-right: 5px;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__content-wrapper li>span,\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\tdisplay: block;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\ninput[type=text] {\\n\\tmargin: 0;\\n}\\n::placeholder {\\n\\tfont-size: 10px;\\n}\\nbutton.action-item.action-item--single.icon-close {\\n\\theight: 44px;\\n\\twidth: 44px;\\n\\tmargin-top: -5px;\\n\\tmargin-bottom: -5px;\\n}\\n.invalid {\\n\\tborder: 1px solid var(--color-error) !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue\"],\"names\":[],\"mappings\":\"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.timeslot {\\n\\tdisplay: flex;\\n\\tflex-grow: 1;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 180px;\\n\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\\n\\t\\tborder: 1px solid transparent;\\n\\t}\\n\\n\\tinput[type=text] {\\n\\t\\twidth: 50%;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-bottom: 5px;\\n\\n\\t\\t&.timeslot--start {\\n\\t\\t\\tmargin-right: 5px;\\n\\t\\t\\twidth: calc(50% - 5px);\\n\\t\\t}\\n\\t}\\n\\n\\t.invalid-hint {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".event[data-v-57bd6e67]{margin-bottom:5px}.isComplex img[data-v-57bd6e67]{vertical-align:text-top}.isComplex span[data-v-57bd6e67]{padding-top:2px;display:inline-block}.multiselect[data-v-57bd6e67]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-57bd6e67] .multiselect__single{display:flex}.multiselect[data-v-57bd6e67]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-57bd6e67] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-57bd6e67]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-dark);background-repeat:no-repeat;background-position:right center}input[data-v-57bd6e67]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-57bd6e67]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-57bd6e67]{font-weight:900}.option__icon[data-v-57bd6e67]{width:16px;height:16px}.eventlist img[data-v-57bd6e67],.eventlist .text[data-v-57bd6e67]{vertical-align:middle}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Event.vue\"],\"names\":[],\"mappings\":\"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,4CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.event {\\n\\tmargin-bottom: 5px;\\n}\\n.isComplex {\\n\\timg {\\n\\t\\tvertical-align: text-top;\\n\\t}\\n\\tspan {\\n\\t\\tpadding-top: 2px;\\n\\t\\tdisplay: inline-block;\\n\\t}\\n}\\n.multiselect {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n\\tmargin-top: 4px;\\n}\\n.multiselect::v-deep .multiselect__single {\\n\\tdisplay: flex;\\n}\\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\tborder: 1px solid transparent;\\n}\\n\\n.multiselect::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\theight: auto;\\n\\tmin-height: 34px;\\n}\\n\\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\\n\\tbackground-image: var(--icon-triangle-s-dark);\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: right center;\\n}\\n\\ninput {\\n\\tborder: 1px solid transparent;\\n}\\n\\n.option__title {\\n\\tmargin-left: 5px;\\n\\tcolor: var(--color-main-text);\\n}\\n.option__title_single {\\n\\tfont-weight: 900;\\n}\\n\\n.option__icon {\\n\\twidth: 16px;\\n\\theight: 16px;\\n}\\n\\n.eventlist img,\\n.eventlist .text {\\n\\tvertical-align: middle;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA\",\"sourcesContent\":[\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Rule.vue\"],\"names\":[],\"mappings\":\"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.buttons {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\n\\tbutton {\\n\\t\\tmargin-left: 5px;\\n\\t}\\n\\tbutton:last-child{\\n\\t\\tmargin-right: 10px;\\n\\t}\\n}\\n\\n.error-message {\\n\\tfloat: right;\\n\\tmargin-right: 10px;\\n}\\n\\n.flow-icon {\\n\\twidth: 44px;\\n}\\n\\n.rule {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tborder-left: 5px solid var(--color-primary-element);\\n\\n\\t.trigger, .action {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-height: 100px;\\n\\t\\tmax-width: 700px;\\n\\t}\\n\\t.action {\\n\\t\\tmax-width: 400px;\\n\\t\\tposition: relative;\\n\\t}\\n\\t.icon-confirm {\\n\\t\\tbackground-position: right 27px;\\n\\t\\tpadding-right: 20px;\\n\\t\\tmargin-right: 20px;\\n\\t}\\n}\\n.trigger p, .action p {\\n\\tmin-height: 34px;\\n\\tdisplay: flex;\\n\\n\\t& > span {\\n\\t\\tmin-width: 50px;\\n\\t\\ttext-align: right;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-right: 10px;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmax-width: 300px;\\n\\t}\\n}\\n.trigger p:first-child span {\\n\\t\\tpadding-top: 3px;\\n}\\n\\n.check--add {\\n\\tbackground-position: 7px center;\\n\\tbackground-color: transparent;\\n\\tpadding-left: 6px;\\n\\tmargin: 0;\\n\\twidth: 180px;\\n\\tborder-radius: var(--border-radius);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tfont-weight: normal;\\n\\ttext-align: left;\\n\\tfont-size: 1em;\\n}\\n\\n@media (max-width:1400px) {\\n\\t.rule {\\n\\t\\t&, .trigger, .action {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t}\\n\\t\\t.flow-icon {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#workflowengine[data-v-7b3e4a56]{border-bottom:1px solid var(--color-border)}.section[data-v-7b3e4a56]{max-width:100vw}.section h2.configured-flows[data-v-7b3e4a56]{margin-top:50px;margin-bottom:0}.actions[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-7b3e4a56]{max-width:280px;flex-basis:250px}button.icon[data-v-7b3e4a56]{padding-left:32px;background-position:10px center}.slide-enter-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-7b3e4a56]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-7b3e4a56],.slide-leave[data-v-7b3e4a56]{max-height:500px;overflow:hidden}.slide-enter[data-v-7b3e4a56],.slide-leave-to[data-v-7b3e4a56]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-7b3e4a56]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-7b3e4a56]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-7b3e4a56]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-7b3e4a56]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-7b3e4a56],small[data-v-7b3e4a56]{padding:6px;display:block}h3[data-v-7b3e4a56]{margin:0;padding:0;font-weight:600}small[data-v-7b3e4a56]{font-size:10pt;flex-grow:1}.colored[data-v-7b3e4a56]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-7b3e4a56],.colored:not(.more) small[data-v-7b3e4a56]{color:var(--color-primary-text)}.actions__item[data-v-7b3e4a56]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-7b3e4a56]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-7b3e4a56]{padding:0}.actions__item:not(.colored) .icon[data-v-7b3e4a56]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-7b3e4a56]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-7b3e4a56]{filter:invert(1)}.actions__item.more[data-v-7b3e4a56]{background-color:var(--color-background-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Workflow.vue\",\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAuGA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAIF,6BACC,iBAAA,CACA,+BAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CChKD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDyFD,qCACC,6CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#workflowengine {\\n\\tborder-bottom: 1px solid var(--color-border);\\n}\\n.section {\\n\\tmax-width: 100vw;\\n\\n\\th2.configured-flows {\\n\\t\\tmargin-top: 50px;\\n\\t\\tmargin-bottom: 0;\\n\\t}\\n}\\n.actions {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 1200px;\\n\\t.actions__item {\\n\\t\\tmax-width: 280px;\\n\\t\\tflex-basis: 250px;\\n\\t}\\n}\\n\\nbutton.icon {\\n\\tpadding-left: 32px;\\n\\tbackground-position: 10px center;\\n}\\n\\n.slide-enter-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: ease-in;\\n\\t-webkit-transition-timing-function: ease-in;\\n\\t-o-transition-timing-function: ease-in;\\n\\ttransition-timing-function: ease-in;\\n}\\n\\n.slide-leave-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.slide-enter-to, .slide-leave {\\n\\tmax-height: 500px;\\n\\toverflow: hidden;\\n}\\n\\n.slide-enter, .slide-leave-to {\\n\\toverflow: hidden;\\n\\tmax-height: 0;\\n\\tpadding-top: 0;\\n\\tpadding-bottom: 0;\\n}\\n\\n@import \\\"./../styles/operation\\\";\\n\\n.actions__item.more {\\n\\tbackground-color: var(--color-background-dark);\\n}\\n\",\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-8c011724], input[type='text'][data-v-8c011724] {\\n\\twidth: 100%;\\n}\\n.multiselect[data-v-8c011724] .multiselect__content-wrapper li>span,\\n.multiselect[data-v-8c011724] .multiselect__single {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a file type')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'e.g. httpd/unix-directory')\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from './../../mixins/valueMixin'\\nimport { imagePath } from '@nextcloud/router'\\n\\nexport default {\\n\\tname: 'FileMimeType',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-folder',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Folder'),\\n\\t\\t\\t\\t\\tpattern: 'httpd/unix-directory',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-picture',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Images'),\\n\\t\\t\\t\\t\\tpattern: '/image\\\\\\\\/.*/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Office documents'),\\n\\t\\t\\t\\t\\tpattern: '/(vnd\\\\\\\\.(ms-|openxmlformats-|oasis\\\\\\\\.opendocument).*)$/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'PDF documents'),\\n\\t\\t\\t\\t\\tpattern: 'application/pdf',\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn true\\n\\t\\t\\t}\\n\\t\\t\\treturn false\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom mimetype'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom mimetype'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.multiselect >>> .multiselect__content-wrapper li>span,\\n\\t.multiselect >>> .multiselect__single {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue\"],\"names\":[],\"mappings\":\";AA2IA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a request URL')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\tgroup-values=\\\"children\\\"\\n\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"placeholder\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestURL',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Predefined URLs'),\\n\\t\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t\\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\\n\\t\\t\\t\\t\\t],\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tplaceholder() {\\n\\t\\t\\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\\n\\t\\t\\t\\treturn '/^https\\\\\\\\:\\\\\\\\/\\\\\\\\/localhost\\\\\\\\/index\\\\\\\\.php$/i'\\n\\t\\t\\t}\\n\\t\\t\\treturn 'https://localhost/index.php'\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.map(groups => groups.children)\\n\\t\\t\\t\\t.flat()\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Others'),\\n\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t],\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\\n\\twidth: 100%;\\n}\\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.multiselect[data-v-475ac1e6] .multiselect__single {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.option__icon[data-v-475ac1e6] {\\n\\tdisplay: inline-block;\\n\\tmin-width: 30px;\\n\\tbackground-position: left;\\n}\\n.option__title[data-v-475ac1e6] {\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue\"],\"names\":[],\"mappings\":\";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a user agent')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-if=\\\"props.option.$groupLabel\\\" class=\\\"option__title\\\" v-html=\\\"props.option.$groupLabel\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-else class=\\\"option__title\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestUserAgent',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\\n\\t\\t\\t\\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.multiselect .multiselect__content-wrapper li>span {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.option__icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tmin-width: 30px;\\n\\t\\tbackground-position: left;\\n\\t}\\n\\t.option__title {\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-79fa10a5] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue\"],\"names\":[],\"mappings\":\";AA4GA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:loading=\\\"status.isLoading && groups.length === 0\\\"\\n\\t\\t\\t:options=\\\"groups\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\tlabel=\\\"displayname\\\"\\n\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t@search-change=\\\"searchAsync\\\"\\n\\t\\t\\t@input=\\\"(value) => $emit('input', value.id)\\\" />\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport axios from '@nextcloud/axios'\\nimport { generateOcsUrl } from '@nextcloud/router'\\n\\nconst groups = []\\nconst status = {\\n\\tisLoading: false,\\n}\\n\\nexport default {\\n\\tname: 'RequestUserGroup',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tprops: {\\n\\t\\tvalue: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\tdefault: '',\\n\\t\\t},\\n\\t\\tcheck: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\tdefault: () => { return {} },\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tgroups,\\n\\t\\t\\tstatus,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tcurrentValue() {\\n\\t\\t\\treturn this.groups.find(group => group.id === this.value) || null\\n\\t\\t},\\n\\t},\\n\\tasync mounted() {\\n\\t\\tif (this.groups.length === 0) {\\n\\t\\t\\tawait this.searchAsync('')\\n\\t\\t}\\n\\t\\tif (this.currentValue === null) {\\n\\t\\t\\tawait this.searchAsync(this.value)\\n\\t\\t}\\n\\t},\\n\\tmethods: {\\n\\t\\tsearchAsync(searchQuery) {\\n\\t\\t\\tif (this.status.isLoading) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.status.isLoading = true\\n\\t\\t\\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\\n\\t\\t\\t\\tresponse.data.ocs.data.groups.forEach((group) => {\\n\\t\\t\\t\\t\\tthis.addGroup({\\n\\t\\t\\t\\t\\t\\tid: group.id,\\n\\t\\t\\t\\t\\t\\tdisplayname: group.displayname,\\n\\t\\t\\t\\t\\t})\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tthis.status.isLoading = false\\n\\t\\t\\t}, (error) => {\\n\\t\\t\\t\\tconsole.error('Error while loading group list', error.response)\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\taddGroup(group) {\\n\\t\\t\\tconst index = this.groups.findIndex((item) => item.id === group.id)\\n\\t\\t\\tif (index === -1) {\\n\\t\\t\\t\\tthis.groups.push(group)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 2819,\n\t\"./hi.js\": 2819,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 318;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t318: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(98258); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","scopeValue","loadState","getApiUrl","url","generateOcsUrl","Vue","Vuex","Store","state","rules","scope","appstoreEnabled","operations","plugins","checks","operators","entities","events","map","entity","event","id","eventName","flat","mutations","addRule","rule","push","valid","updateRule","index","findIndex","item","newRule","Object","assign","removeRule","splice","addPluginCheck","plugin","class","addPluginOperator","color","actions","fetchRules","context","axios","data","values","ocs","forEach","commit","createNewRule","isComplex","fixedEntity","find","Date","getTime","name","operator","value","operation","JSON","parse","pushUpdateRule","confirmPassword","result","deleteRule","setValid","getters","getRules","filter","sort","rule1","rule2","getOperationForRule","getEntityForOperation","getEventsForOperation","getChecksForEntity","check","supportedEntities","indexOf","length","reduce","obj","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","icon","_v","_s","triggerHint","currentEvent","allEvents","on","updateEvent","scopedSlots","_u","key","fn","ref","isOpen","_l","displayName","_e","props","option","directives","rawName","expression","showDelete","t","updateCheck","model","callback","$$v","currentOption","currentOperator","currentComponent","component","tag","$event","validate","$set","invalid","valuePlaceholder","domProps","target","composing","deleteVisible","$emit","colored","style","backgroundColor","iconClass","backgroundImage","description","_t","borderLeftColor","removeCheck","onAddFilter","updateOperation","dirty","cancelRule","ruleStatus","type","saveRule","proxy","title","error","nativeOn","appstoreUrl","showMoreOperations","regexRegex","regexIPv4","regexIPv6","String","default","newValue","watch","immediate","handler","updateInternalValue","methods","currentValue","setValue","iconUrl","label","isPredefined","pattern","updateCustom","xmlToJson","xml","nodeType","attributes","j","attribute","nodeName","nodeValue","hasChildNodes","i","childNodes","old","method","generateRemoteUrl","then","response","json","dom","DOMParser","parseFromString","e","console","parseXml","list","canAssign","userAssignable","userVisible","xmlToTagList","tags","tagLabel","multiple","disabled","update","inputValObjects","slot","stringOrRegexOperators","placeholder","string","exec","FileMimeType","match","validateIPv4","FileSystemTag","$groupLabel","timezones","status","isLoading","groups","searchAsync","RequestURL","RequestTime","RequestUserAgent","RequestUserGroup","FileChecks","RequestChecks","window","OCA","WorkflowEngine","registerCheck","Plugin","store","registerOperator","ShippedChecks","checkPlugin","Settings","$mount","___CSS_LOADER_EXPORT___","module","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/lib/composer/autoload.php b/lib/composer/autoload.php
index a3d144b1777..fe5311f43f1 100644
--- a/lib/composer/autoload.php
+++ b/lib/composer/autoload.php
@@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c::getLoader();
+return ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2::getLoader();
diff --git a/lib/composer/composer/autoload_real.php b/lib/composer/composer/autoload_real.php
index eecff48bcf9..27e0b34bf5b 100644
--- a/lib/composer/composer/autoload_real.php
+++ b/lib/composer/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c
+class ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2
{
private static $loader;
@@ -22,12 +22,12 @@ class ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
- spl_autoload_unregister(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
- call_user_func(\Composer\Autoload\ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::getInitializer($loader));
+ call_user_func(\Composer\Autoload\ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::getInitializer($loader));
$loader->register(true);
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 4b514fa0831..294969211ec 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -4,7 +4,7 @@
namespace Composer\Autoload;
-class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
+class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
{
public static $prefixLengthsPsr4 = array (
'O' =>
@@ -1596,10 +1596,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$prefixDirsPsr4;
- $loader->fallbackDirsPsr4 = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$fallbackDirsPsr4;
- $loader->classMap = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$classMap;
+ $loader->prefixLengthsPsr4 = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$prefixDirsPsr4;
+ $loader->fallbackDirsPsr4 = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$fallbackDirsPsr4;
+ $loader->classMap = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$classMap;
}, null, ClassLoader::class);
}
diff --git a/package-lock.json b/package-lock.json
index 38abb09f1fe..51b543941df 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -86,14 +86,13 @@
"@nextcloud/eslint-config": "^7.0.2",
"@nextcloud/stylelint-config": "^2.1.2",
"@testing-library/jest-dom": "^5.16.4",
- "@testing-library/user-event": "^14.1.0",
+ "@testing-library/user-event": "^14.1.1",
"@testing-library/vue": "^5.8.2",
"@vue/test-utils": "^1.3.0",
"babel-loader": "^8.2.5",
"babel-loader-exclude-node-modules-except": "^1.2.1",
"css-loader": "^6.7.1",
"eslint-plugin-es": "^4.1.0",
- "eslint-webpack-plugin": "^3.1.1",
"exports-loader": "^3.1.0",
"file-loader": "^6.2.0",
"handlebars": "^4.7.7",
@@ -4450,13 +4449,13 @@
"dev": true
},
"node_modules/accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dev": true,
"dependencies": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
},
"engines": {
"node": ">= 0.6"
@@ -5517,24 +5516,27 @@
"integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w=="
},
"node_modules/body-parser": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
- "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+ "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
"dev": true,
"dependencies": {
- "bytes": "3.1.1",
+ "bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.8.1",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.9.6",
- "raw-body": "2.4.2",
- "type-is": "~1.6.18"
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/body-parser/node_modules/debug": {
@@ -5546,12 +5548,33 @@
"ms": "2.0.0"
}
},
+ "node_modules/body-parser/node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "node_modules/body-parser/node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/bootstrap": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.1.tgz",
@@ -5661,9 +5684,9 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/bytes": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
- "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"dev": true,
"engines": {
"node": ">= 0.8"
@@ -6740,6 +6763,16 @@
"node": ">= 0.6"
}
},
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
"node_modules/detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -7876,48 +7909,6 @@
"node": ">=10"
}
},
- "node_modules/eslint-webpack-plugin": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz",
- "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "^7.28.2",
- "jest-worker": "^27.3.1",
- "micromatch": "^4.0.4",
- "normalize-path": "^3.0.0",
- "schema-utils": "^3.1.1"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0",
- "webpack": "^5.0.0"
- }
- },
- "node_modules/eslint-webpack-plugin/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/eslint/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -9739,19 +9730,37 @@
"dev": true
},
"node_modules/http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dev": true,
"dependencies": {
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
+ "statuses": "2.0.1",
"toidentifier": "1.0.1"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-errors/node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-errors/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
}
},
"node_modules/http-proxy": {
@@ -14071,9 +14080,9 @@
"dev": true
},
"node_modules/negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"dev": true,
"engines": {
"node": ">= 0.6"
@@ -15637,10 +15646,13 @@
}
},
"node_modules/qs": {
- "version": "6.9.6",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
- "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
"dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
"engines": {
"node": ">=0.6"
},
@@ -15718,13 +15730,13 @@
}
},
"node_modules/raw-body": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
- "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dev": true,
"dependencies": {
- "bytes": "3.1.1",
- "http-errors": "1.8.1",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
@@ -23343,13 +23355,13 @@
"dev": true
},
"accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dev": true,
"requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
}
},
"acorn": {
@@ -24179,21 +24191,23 @@
"integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w=="
},
"body-parser": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
- "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+ "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
"dev": true,
"requires": {
- "bytes": "3.1.1",
+ "bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.8.1",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.9.6",
- "raw-body": "2.4.2",
- "type-is": "~1.6.18"
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
},
"dependencies": {
"debug": {
@@ -24205,11 +24219,26 @@
"ms": "2.0.0"
}
},
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
+ },
+ "on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
}
}
},
@@ -24285,9 +24314,9 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"bytes": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
- "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"dev": true
},
"cacache": {
@@ -25140,6 +25169,12 @@
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
"dev": true
},
+ "destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true
+ },
"detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -26158,32 +26193,6 @@
"dev": true,
"peer": true
},
- "eslint-webpack-plugin": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz",
- "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==",
- "dev": true,
- "requires": {
- "@types/eslint": "^7.28.2",
- "jest-worker": "^27.3.1",
- "micromatch": "^4.0.4",
- "normalize-path": "^3.0.0",
- "schema-utils": "^3.1.1"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
"espree": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
@@ -27420,16 +27429,30 @@
"dev": true
},
"http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dev": true,
"requires": {
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
+ "statuses": "2.0.1",
"toidentifier": "1.0.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true
+ }
}
},
"http-proxy": {
@@ -30708,9 +30731,9 @@
"dev": true
},
"negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"dev": true
},
"neo-async": {
@@ -31888,10 +31911,13 @@
}
},
"qs": {
- "version": "6.9.6",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
- "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
- "dev": true
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
},
"query-string": {
"version": "7.1.1",
@@ -31937,13 +31963,13 @@
"dev": true
},
"raw-body": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
- "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dev": true,
"requires": {
- "bytes": "3.1.1",
- "http-errors": "1.8.1",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
diff --git a/package.json b/package.json
index 73ebeac41b5..95021635593 100644
--- a/package.json
+++ b/package.json
@@ -106,14 +106,13 @@
"@nextcloud/eslint-config": "^7.0.2",
"@nextcloud/stylelint-config": "^2.1.2",
"@testing-library/jest-dom": "^5.16.4",
- "@testing-library/user-event": "^14.1.0",
+ "@testing-library/user-event": "^14.1.1",
"@testing-library/vue": "^5.8.2",
"@vue/test-utils": "^1.3.0",
"babel-loader": "^8.2.5",
"babel-loader-exclude-node-modules-except": "^1.2.1",
"css-loader": "^6.7.1",
"eslint-plugin-es": "^4.1.0",
- "eslint-webpack-plugin": "^3.1.1",
"exports-loader": "^3.1.0",
"file-loader": "^6.2.0",
"handlebars": "^4.7.7",
diff --git a/webpack.common.js b/webpack.common.js
index c8bcb740236..401ec6ef3f9 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -2,7 +2,6 @@
const { VueLoaderPlugin } = require('vue-loader')
const path = require('path')
const BabelLoaderExcludeNodeModulesExcept = require('babel-loader-exclude-node-modules-except')
-const ESLintPlugin = require('eslint-webpack-plugin')
const webpack = require('webpack')
const modules = require('./webpack.modules.js')
@@ -54,7 +53,9 @@ module.exports = {
const rel = path.relative(rootDir, info.absoluteResourcePath)
return `webpack:///nextcloud/${rel}`
},
- clean: true,
+ clean: {
+ keep: /icons\.css/, // Keep static icons css
+ },
},
module: {
@@ -138,7 +139,6 @@ module.exports = {
plugins: [
new VueLoaderPlugin(),
- new ESLintPlugin(),
new webpack.ProvidePlugin({
// Provide jQuery to jquery plugins as some are loaded before $ is exposed globally.
jQuery: 'jquery',