summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@protonmail.com>2022-11-30 17:45:58 +0100
committerJohn Molakvoæ <skjnldsv@protonmail.com>2022-11-30 18:39:57 +0100
commitf26ee9c69d98b9208f709e0c7aa284755708adbd (patch)
tree1edfb8f4d680e6e4ff3940e3f1ac3f068326fd8e
parent8434259b1bfef22adbf30b166043e29763bf9507 (diff)
downloadnextcloud-server-f26ee9c69d98b9208f709e0c7aa284755708adbd.tar.gz
nextcloud-server-f26ee9c69d98b9208f709e0c7aa284755708adbd.zip
Faster theming tests, better colours comparison and properly follow admin theming changes
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
-rw-r--r--apps/theming/appinfo/routes.php5
-rw-r--r--apps/theming/lib/Controller/ThemingController.php21
-rw-r--r--apps/theming/lib/Controller/UserThemeController.php1
-rw-r--r--apps/theming/lib/Service/BackgroundService.php2
-rw-r--r--apps/theming/lib/ThemingDefaults.php12
-rw-r--r--apps/theming/src/AdminTheming.vue6
-rw-r--r--apps/theming/src/components/admin/FileInputField.vue6
-rw-r--r--cypress/e2e/theming/admin-settings.cy.ts170
-rw-r--r--cypress/e2e/theming/themingUtils.ts75
-rw-r--r--cypress/e2e/theming/user-background.cy.ts10
-rw-r--r--cypress/support/commands.ts33
-rw-r--r--dist/theming-admin-theming.js4
-rw-r--r--dist/theming-admin-theming.js.map2
-rw-r--r--package-lock.json17
-rw-r--r--package.json1
15 files changed, 257 insertions, 108 deletions
diff --git a/apps/theming/appinfo/routes.php b/apps/theming/appinfo/routes.php
index eceb447620d..8647ae135a8 100644
--- a/apps/theming/appinfo/routes.php
+++ b/apps/theming/appinfo/routes.php
@@ -40,6 +40,11 @@ return [
'verb' => 'POST'
],
[
+ 'name' => 'Theming#undoAll',
+ 'url' => '/ajax/undoAllChanges',
+ 'verb' => 'POST'
+ ],
+ [
'name' => 'Theming#uploadImage',
'url' => '/ajax/uploadImage',
'verb' => 'POST'
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 2cac9a345a4..8868208197d 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -276,6 +276,27 @@ class ThemingController extends Controller {
}
/**
+ * Revert all theming settings to their default values
+ * @AuthorizedAdminSetting(settings=OCA\Theming\Settings\Admin)
+ *
+ * @return DataResponse
+ * @throws NotPermittedException
+ */
+ public function undoAll(): DataResponse {
+ $this->themingDefaults->undoAll();
+
+ return new DataResponse(
+ [
+ 'data' =>
+ [
+ 'message' => $this->l10n->t('Saved'),
+ ],
+ 'status' => 'success'
+ ]
+ );
+ }
+
+ /**
* @PublicPage
* @NoCSRFRequired
* @NoSameSiteCookieRequired
diff --git a/apps/theming/lib/Controller/UserThemeController.php b/apps/theming/lib/Controller/UserThemeController.php
index 112a8a23638..a227e72d998 100644
--- a/apps/theming/lib/Controller/UserThemeController.php
+++ b/apps/theming/lib/Controller/UserThemeController.php
@@ -186,6 +186,7 @@ class UserThemeController extends OCSController {
$this->backgroundService->setFileBackground($value);
break;
case BackgroundService::BACKGROUND_DEFAULT:
+ // Delete both background and color keys
$this->backgroundService->setDefaultBackground();
break;
default:
diff --git a/apps/theming/lib/Service/BackgroundService.php b/apps/theming/lib/Service/BackgroundService.php
index a3af56b08f8..4879ad1cbad 100644
--- a/apps/theming/lib/Service/BackgroundService.php
+++ b/apps/theming/lib/Service/BackgroundService.php
@@ -160,7 +160,7 @@ class BackgroundService {
public function setDefaultBackground(): void {
$this->config->deleteUserValue($this->userId, Application::APP_ID, 'background_image');
- $this->config->setUserValue($this->userId, Application::APP_ID, 'background_color', $this->themingDefaults->getDefaultColorPrimary());
+ $this->config->deleteUserValue($this->userId, Application::APP_ID, 'background_color');
}
/**
diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php
index 881a27f9936..afec58dc3a3 100644
--- a/apps/theming/lib/ThemingDefaults.php
+++ b/apps/theming/lib/ThemingDefaults.php
@@ -439,18 +439,26 @@ class ThemingDefaults extends \OC_Defaults {
* @param string $setting
* @param string $value
*/
- public function set($setting, $value) {
+ public function set($setting, $value): void {
$this->config->setAppValue('theming', $setting, $value);
$this->increaseCacheBuster();
}
/**
+ * Revert all settings to the default value
+ */
+ public function undoAll(): void {
+ $this->config->deleteAppValues('theming');
+ $this->increaseCacheBuster();
+ }
+
+ /**
* Revert settings to the default value
*
* @param string $setting setting which should be reverted
* @return string default value
*/
- public function undo($setting) {
+ public function undo($setting): string {
$this->config->deleteAppValue('theming', $setting);
$this->increaseCacheBuster();
diff --git a/apps/theming/src/AdminTheming.vue b/apps/theming/src/AdminTheming.vue
index bb26dcc0f30..f922143e04d 100644
--- a/apps/theming/src/AdminTheming.vue
+++ b/apps/theming/src/AdminTheming.vue
@@ -58,15 +58,15 @@
<FileInputField v-for="field in fileInputFields"
:key="field.name"
:aria-label="field.ariaLabel"
+ :data-admin-theming-setting-file="field.name"
:default-mime-value="field.defaultMimeValue"
:display-name="field.displayName"
:mime-name="field.mimeName"
:mime-value.sync="field.mimeValue"
:name="field.name"
- data-admin-theming-setting-background
@update:theming="$emit('update:theming')" />
- <div class="admin-theming__preview">
- <div class="admin-theming__preview-logo" />
+ <div class="admin-theming__preview" data-admin-theming-preview>
+ <div class="admin-theming__preview-logo" data-admin-theming-preview-logo />
</div>
</div>
</NcSettingsSection>
diff --git a/apps/theming/src/components/admin/FileInputField.vue b/apps/theming/src/components/admin/FileInputField.vue
index ba046ec8b31..c15d1ee2c8e 100644
--- a/apps/theming/src/components/admin/FileInputField.vue
+++ b/apps/theming/src/components/admin/FileInputField.vue
@@ -27,7 +27,7 @@
<NcButton type="secondary"
:id="id"
:aria-label="ariaLabel"
- data-admin-theming-setting-background-picker
+ data-admin-theming-setting-file-picker
@click="activateLocalFilePicker">
<template #icon>
<Upload :size="20" />
@@ -37,7 +37,7 @@
<NcButton v-if="showReset"
type="tertiary"
:aria-label="t('theming', 'Reset to default')"
- data-admin-theming-setting-background-reset
+ data-admin-theming-setting-file-reset
@click="undo">
<template #icon>
<Undo :size="20" />
@@ -46,7 +46,7 @@
<NcButton v-if="showRemove"
type="tertiary"
:aria-label="t('theming', 'Remove background image')"
- data-admin-theming-setting-background-remove
+ data-admin-theming-setting-file-remove
@click="removeBackground">
<template #icon>
<Delete :size="20" />
diff --git a/cypress/e2e/theming/admin-settings.cy.ts b/cypress/e2e/theming/admin-settings.cy.ts
index 1c825ecd89e..23e7ab9858f 100644
--- a/cypress/e2e/theming/admin-settings.cy.ts
+++ b/cypress/e2e/theming/admin-settings.cy.ts
@@ -20,6 +20,9 @@
*
*/
import { User } from '@nextcloud/cypress'
+import { colord } from 'colord'
+
+import { pickRandomColor, validateBodyThemingCss, validateUserThemingDefaultCss } from './themingUtils'
const admin = new User('admin', 'admin')
@@ -28,6 +31,8 @@ const defaultBackground = 'kamil-porembinski-clouds.jpg'
describe('Admin theming settings', function() {
before(function() {
+ // Just in case previous test failed
+ cy.resetTheming()
cy.login(admin)
})
@@ -39,13 +44,16 @@ describe('Admin theming settings', function() {
it('See the default settings', function() {
cy.get('[data-admin-theming-setting-primary-color-picker]').should('contain.text', defaultPrimary)
cy.get('[data-admin-theming-setting-primary-color-reset]').should('not.exist')
- cy.get('[data-admin-theming-setting-background-reset]').should('not.exist')
- cy.get('[data-admin-theming-setting-background-remove]').should('be.visible')
+ cy.get('[data-admin-theming-setting-file-reset]').should('not.exist')
+ cy.get('[data-admin-theming-setting-file-remove]').should('be.visible')
})
})
-describe('Change the primary colour', function() {
+describe('Change the primary colour and reset it', function() {
+ let selectedColor = ''
before(function() {
+ // Just in case previous test failed
+ cy.resetTheming()
cy.login(admin)
})
@@ -57,14 +65,11 @@ describe('Change the primary colour', function() {
it('Change the primary colour', function() {
cy.intercept('*/apps/theming/ajax/updateStylesheet').as('setColor')
- cy.get('[data-admin-theming-setting-primary-color-picker]').click()
- cy.get('.color-picker__simple-color-circle:eq(3)').click()
+ pickRandomColor('[data-admin-theming-setting-primary-color-picker]')
+ .then(color => selectedColor = color)
cy.wait('@setColor')
- cy.waitUntil(() => cy.window().then((win) => {
- const primary = getComputedStyle(win.document.body).getPropertyValue('--color-primary-default')
- return primary !== defaultPrimary
- }))
+ cy.waitUntil(() => validateBodyThemingCss(selectedColor, defaultBackground))
})
it('Screenshot the login page', function() {
@@ -73,32 +78,21 @@ describe('Change the primary colour', function() {
cy.screenshot()
})
- it('Login again and go to the admin theming section', function() {
- cy.login(admin)
- cy.visit('/settings/admin/theming')
- })
-
- it('Reset the primary colour', function() {
- cy.intercept('*/apps/theming/ajax/undoChanges').as('undoChanges')
-
- cy.get('[data-admin-theming-setting-primary-color-reset]').click()
-
- cy.wait('@undoChanges')
- cy.waitUntil(() => cy.window().then((win) => {
- const primary = getComputedStyle(win.document.body).getPropertyValue('--color-primary-default')
- return primary === defaultPrimary
- }))
+ it('Undo theming settings', function() {
+ cy.resetTheming()
})
it('Screenshot the login page', function() {
- cy.logout()
cy.visit('/')
+ cy.waitUntil(validateBodyThemingCss)
cy.screenshot()
})
})
-describe('Remove the default background', function() {
+describe('Remove the default background and restore it', function() {
before(function() {
+ // Just in case previous test failed
+ cy.resetTheming()
cy.login(admin)
})
@@ -110,13 +104,13 @@ describe('Remove the default background', function() {
it('Remove the default background', function() {
cy.intercept('*/apps/theming/ajax/updateStylesheet').as('removeBackground')
- cy.get('[data-admin-theming-setting-background-remove]').click()
+ cy.get('[data-admin-theming-setting-file-remove]').click()
cy.wait('@removeBackground')
cy.waitUntil(() => cy.window().then((win) => {
- const backgroundDefault = getComputedStyle(win.document.body).getPropertyValue('--image-background-default')
+ const currentBackgroundDefault = getComputedStyle(win.document.body).getPropertyValue('--image-background-default')
const backgroundPlain = getComputedStyle(win.document.body).getPropertyValue('--image-background-plain')
- return !backgroundDefault.includes(defaultBackground)
+ return !currentBackgroundDefault.includes(defaultBackground)
&& backgroundPlain !== ''
}))
})
@@ -127,38 +121,25 @@ describe('Remove the default background', function() {
cy.screenshot()
})
- it('Login again and go to the admin theming section', function() {
- cy.login(admin)
- cy.visit('/settings/admin/theming')
- })
-
- it('Restore the default background', function() {
- cy.intercept('*/apps/theming/ajax/undoChanges').as('undoChanges')
-
- cy.get('[data-admin-theming-setting-background-reset]').click()
-
- cy.wait('@undoChanges')
- cy.waitUntil(() => cy.window().then((win) => {
- const backgroundDefault = getComputedStyle(win.document.body).getPropertyValue('--image-background-default')
- const backgroundPlain = getComputedStyle(win.document.body).getPropertyValue('--image-background-plain')
- return backgroundDefault.includes(defaultBackground)
- && backgroundPlain === ''
- }))
+ it('Undo theming settings', function() {
+ cy.resetTheming()
})
it('Screenshot the login page', function() {
- cy.logout()
cy.visit('/')
+ cy.waitUntil(validateBodyThemingCss)
cy.screenshot()
})
})
-describe('Change the login fields', function() {
+describe('Change the login fields then reset them', function() {
const name = 'ABCdef123'
const url = 'https://example.com'
const slogan = 'Testing is fun'
before(function() {
+ // Just in case previous test failed
+ cy.resetTheming()
cy.login(admin)
})
@@ -214,29 +195,11 @@ describe('Change the login fields', function() {
cy.get('footer p').should('contain.text', `– ${slogan}`)
})
- it('Login again and go to the admin theming section', function() {
- cy.login(admin)
- cy.visit('/settings/admin/theming')
- })
-
- it('Undo changes', function() {
- cy.intercept('*/apps/theming/ajax/undoChanges').as('undoChanges')
-
- cy.get('[data-admin-theming-setting-field="name"] .input-field__clear-button')
- .scrollIntoView().click()
- cy.wait('@undoChanges')
-
- cy.get('[data-admin-theming-setting-field="url"] .input-field__clear-button')
- .scrollIntoView().click()
- cy.wait('@undoChanges')
-
- cy.get('[data-admin-theming-setting-field="slogan"] .input-field__clear-button')
- .scrollIntoView().click()
- cy.wait('@undoChanges')
+ it('Undo theming settings', function() {
+ cy.resetTheming()
})
it('Check login screen changes', function() {
- cy.logout()
cy.visit('/')
cy.get('[data-login-form-headline]').should('not.contain.text', name)
@@ -246,8 +209,10 @@ describe('Change the login fields', function() {
})
})
-describe('Disable user theming', function() {
+describe('Disable user theming and enable it back', function() {
before(function() {
+ // Just in case previous test failed
+ cy.resetTheming()
cy.login(admin)
})
@@ -278,25 +243,74 @@ describe('Disable user theming', function() {
cy.visit('/settings/user/theming')
cy.get('[data-user-theming-background-disabled]').scrollIntoView().should('be.visible')
})
+})
- it('Login back as admin', function() {
- cy.logout()
+describe('User default option matches admin theming', function() {
+ let selectedColor = ''
+
+ before(function() {
+ // Just in case previous test failed
+ cy.resetTheming()
cy.login(admin)
})
+ after(function() {
+ cy.resetTheming()
+ })
+
it('See the admin theming section', function() {
cy.visit('/settings/admin/theming')
cy.get('[data-admin-theming-settings]').scrollIntoView().should('be.visible')
})
- it('Enable back user theming', function() {
- cy.intercept('*/apps/theming/ajax/updateStylesheet').as('enableUserTheming')
+ it('Change the primary colour', function() {
+ cy.intercept('*/apps/theming/ajax/updateStylesheet').as('setColor')
- cy.get('[data-admin-theming-setting-disable-user-theming]')
- .scrollIntoView().should('be.visible')
- cy.get('[data-admin-theming-setting-disable-user-theming] input[type="checkbox"]').uncheck({ force: true })
- cy.get('[data-admin-theming-setting-disable-user-theming] input[type="checkbox"]').should('not.be.checked')
+ pickRandomColor('[data-admin-theming-setting-primary-color-picker]')
+ .then(color => selectedColor = color)
+
+ cy.wait('@setColor')
+ cy.waitUntil(() => cy.window().then((win) => {
+ const primary = getComputedStyle(win.document.body).getPropertyValue('--color-primary-default')
+ return colord(primary).isEqual(selectedColor)
+ }))
+ })
+
+ it('Change the default background', function() {
+ cy.intercept('*/apps/theming/ajax/uploadImage').as('setBackground')
+
+ cy.fixture('image.jpg', null).as('background')
+ cy.get('[data-admin-theming-setting-file="background"] input[type="file"]').selectFile('@background', { force: true })
+
+ cy.wait('@setBackground')
+ cy.waitUntil(() => cy.window().then((win) => {
+ const currentBackgroundDefault = getComputedStyle(win.document.body).getPropertyValue('--image-background-default')
+ return currentBackgroundDefault.includes('/apps/theming/image/background?v=')
+ }))
+ })
+
+ it('Logout and check changes', function() {
+ cy.logout()
+ cy.visit('/')
+
+ cy.waitUntil(() => validateBodyThemingCss(selectedColor, '/apps/theming/image/background?v='))
+ })
+
+ it('Login as user', function() {
+ cy.createRandomUser().then((user) => {
+ cy.login(user)
+ })
+ })
+
+ it('See the user background settings', function() {
+ cy.visit('/settings/user/theming')
+ cy.get('[data-user-theming-background-settings]').scrollIntoView().should('be.visible')
+ })
+
+ it('See the default background option selected', function() {
+ cy.get('[data-user-theming-background-default]').should('be.visible')
+ cy.get('[data-user-theming-background-default]').should('have.class', 'background--active')
- cy.wait('@enableUserTheming')
+ cy.waitUntil(() => validateUserThemingDefaultCss(selectedColor, '/apps/theming/image/background?v='))
})
})
diff --git a/cypress/e2e/theming/themingUtils.ts b/cypress/e2e/theming/themingUtils.ts
new file mode 100644
index 00000000000..2cdbb07c000
--- /dev/null
+++ b/cypress/e2e/theming/themingUtils.ts
@@ -0,0 +1,75 @@
+/**
+ * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * 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 { colord } from 'colord'
+
+/**
+ * Validate the current page body css variables
+ *
+ * @param {string} expectedColor the expected color
+ * @param {string} expectedBackground the expected background
+ */
+export const validateBodyThemingCss = function(expectedColor = '#0082c9', expectedBackground = 'kamil-porembinski-clouds.jpg') {
+ return cy.window().then((win) => {
+ const guestBackgroundColor = getComputedStyle(win.document.body).backgroundColor
+ const guestBackgroundImage = getComputedStyle(win.document.body).backgroundImage
+ return colord(guestBackgroundColor).isEqual(expectedColor)
+ && guestBackgroundImage.includes(expectedBackground)
+ })
+}
+
+/**
+ * Validate the user theming default select option css
+ *
+ * @param {string} expectedColor the expected color
+ * @param {string} expectedBackground the expected background
+ */
+export const validateUserThemingDefaultCss = function(expectedColor = '#0082c9', expectedBackground = 'kamil-porembinski-clouds.jpg') {
+ return cy.window().then((win) => {
+ const defaultSelectButton = win.document.querySelector('[data-user-theming-background-default]')
+ const customColorSelectButton = win.document.querySelector('[data-user-theming-background-color]')
+ if (!defaultSelectButton || !customColorSelectButton) {
+ return false
+ }
+
+ const defaultOptionBackground = getComputedStyle(defaultSelectButton).backgroundImage
+ const defaultOptionBorderColor = getComputedStyle(defaultSelectButton).borderColor
+ const colorPickerOptionColor = getComputedStyle(customColorSelectButton).backgroundColor
+ return defaultOptionBackground.includes(expectedBackground)
+ && colord(defaultOptionBorderColor).isEqual(expectedColor)
+ && colord(colorPickerOptionColor).isEqual(expectedColor)
+ })
+}
+
+export const pickRandomColor = function(pickerSelector: string): Cypress.Chainable<string> {
+ // Pick one of the first 8 options
+ const randColour = Math.floor(Math.random() * 8)
+
+ // Open picker
+ cy.get(pickerSelector).click()
+
+ // Return selected colour
+ return cy.get(pickerSelector).get(`.color-picker__simple-color-circle`).eq(randColour)
+ .click().then(colorElement => {
+ const selectedColor = colorElement.css('background-color')
+ return selectedColor
+ })
+} \ No newline at end of file
diff --git a/cypress/e2e/theming/user-background.cy.ts b/cypress/e2e/theming/user-background.cy.ts
index 846bc984fe1..ded0d89efec 100644
--- a/cypress/e2e/theming/user-background.cy.ts
+++ b/cypress/e2e/theming/user-background.cy.ts
@@ -23,16 +23,17 @@ import type { User } from '@nextcloud/cypress'
const defaultPrimary = '#006aa3'
const defaultBackground = 'kamil-porembinski-clouds.jpg'
+import { colord } from 'colord'
const validateThemingCss = function(expectedPrimary = '#0082c9', expectedBackground = 'kamil-porembinski-clouds.jpg', bright = false) {
return cy.window().then((win) => {
- const primary = getComputedStyle(win.document.body).getPropertyValue('--color-primary')
- const background = getComputedStyle(win.document.body).getPropertyValue('--image-background')
+ const backgroundColor = getComputedStyle(win.document.body).backgroundColor
+ const backgroundImage = getComputedStyle(win.document.body).backgroundImage
const invertIfBright = getComputedStyle(win.document.body).getPropertyValue('--background-image-invert-if-bright')
// Returning boolean for cy.waitUntil usage
- return primary === expectedPrimary
- && background.includes(expectedBackground)
+ return colord(backgroundColor).isEqual(expectedPrimary)
+ && backgroundImage.includes(expectedBackground)
&& invertIfBright === (bright ? 'invert(100%)' : 'no')
})
}
@@ -163,7 +164,6 @@ describe('User select a custom background', function() {
})
})
-
describe('User changes settings and reload the page', function() {
const image = 'image.jpg'
const primaryFromImage = '#4c0c04'
diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts
index 2b51f719452..eab26beda79 100644
--- a/cypress/support/commands.ts
+++ b/cypress/support/commands.ts
@@ -21,7 +21,7 @@
*/
/* eslint-disable node/no-unpublished-import */
import axios from '@nextcloud/axios'
-import { addCommands, type User} from '@nextcloud/cypress'
+import { addCommands, User } from '@nextcloud/cypress'
import { basename } from 'path'
// Add custom commands
@@ -33,7 +33,8 @@ declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cypress {
interface Chainable<Subject = any> {
- uploadFile(user: User, fixture: string, mimeType: string, target ?: string): Cypress.Chainable<void>
+ uploadFile(user: User, fixture?: string, mimeType?: string, target ?: string): Cypress.Chainable<void>,
+ resetTheming(): Cypress.Chainable<void>,
}
}
}
@@ -50,7 +51,7 @@ Cypress.env('baseUrl', url)
* @param {string} mimeType e.g. image/png
* @param {string} [target] the target of the file relative to the user root
*/
-Cypress.Commands.add('uploadFile', (user, fixture, mimeType, target = `/${fixture}`) => {
+Cypress.Commands.add('uploadFile', (user, fixture = 'image.jpg', mimeType = 'image/jpeg', target = `/${fixture}`) => {
cy.clearCookies()
const fileName = basename(target)
@@ -84,3 +85,29 @@ Cypress.Commands.add('uploadFile', (user, fixture, mimeType, target = `/${fixtur
}
})
})
+
+/**
+ * Reset the admin theming entirely
+ */
+ Cypress.Commands.add('resetTheming', () => {
+ const admin = new User('admin', 'admin')
+
+ cy.clearCookies()
+ cy.login(admin)
+
+ // Clear all settings
+ cy.request('/csrftoken').then(({ body }) => {
+ const requestToken = body.token
+
+ axios({
+ method: 'POST',
+ url: '/index.php/apps/theming/ajax/undoAllChanges',
+ headers: {
+ 'requesttoken': requestToken,
+ },
+ })
+ })
+
+ // Clear admin session
+ cy.clearCookies()
+})
diff --git a/dist/theming-admin-theming.js b/dist/theming-admin-theming.js
index 7899e9de3a1..846f3bb3306 100644
--- a/dist/theming-admin-theming.js
+++ b/dist/theming-admin-theming.js
@@ -1,3 +1,3 @@
/*! For license information please see theming-admin-theming.js.LICENSE.txt */
-!function(){"use strict";var n,e={10787:function(n,e,a){var r=a(20144),i=a(16453),o=a(15961),l=a(4820),s=a(79753),u=["color","logo","background","logoheader","favicon","disable-user-theming"],d={emits:["update:theming"],data:function(){return{showSuccess:!1,errorMessage:""}},computed:{id:function(){return"admin-theming-".concat(this.name)}},methods:{reset:function(){this.showSuccess=!1,this.errorMessage=""},handleSuccess:function(){var n=this;this.showSuccess=!0,setTimeout((function(){n.showSuccess=!1}),2e3),u.includes(this.name)&&this.$emit("update:theming")}}};function c(n,e,t,a,r,i,o){try{var l=n[i](o),s=l.value}catch(n){return void t(n)}l.done?e(s):Promise.resolve(s).then(a,r)}function m(n){return function(){var e=this,t=arguments;return new Promise((function(a,r){var i=n.apply(e,t);function o(n){c(i,a,r,o,l,"next",n)}function l(n){c(i,a,r,o,l,"throw",n)}o(void 0)}))}}var p={mixins:[d],watch:{value:function(n){this.localValue=n}},data:function(){return{localValue:this.value}},methods:{save:function(){var n=this;return m(regeneratorRuntime.mark((function e(){var t,a,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet"),a=!0===n.localValue?"yes":!1===n.localValue?"no":n.localValue,e.prev=3,e.next=6,l.default.post(t,{setting:n.name,value:a});case 6:n.$emit("update:value",n.localValue),n.handleSuccess(),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(3),n.errorMessage=null===(r=e.t0.response.data.data)||void 0===r?void 0:r.message;case 13:case"end":return e.stop()}}),e,null,[[3,10]])})))()},undo:function(){var n=this;return m(regeneratorRuntime.mark((function e(){var t,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/undoChanges"),e.prev=2,e.next=5,l.default.post(t,{setting:n.name});case 5:n.$emit("update:value",n.defaultValue),n.handleSuccess(),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),n.errorMessage=null===(a=e.t0.response.data.data)||void 0===a?void 0:a.message;case 12:case"end":return e.stop()}}),e,null,[[2,9]])})))()}}},g={name:"CheckboxField",components:{NcCheckboxRadioSwitch:o.rw,NcNoteCard:o.qf},mixins:[p],props:{name:{type:String,required:!0},value:{type:Boolean,required:!0},defaultValue:{type:Boolean,required:!0},displayName:{type:String,required:!0},label:{type:String,required:!0},description:{type:String,required:!0}}},h=a(93379),f=a.n(h),A=a(7795),v=a.n(A),y=a(90569),b=a.n(y),C=a(3565),x=a.n(C),N=a(19216),w=a.n(N),k=a(44589),_=a.n(k),S=a(57631),M={};M.styleTagTransform=_(),M.setAttributes=x(),M.insert=b().bind(null,"head"),M.domAPI=v(),M.insertStyleElement=w(),f()(S.Z,M),S.Z&&S.Z.locals&&S.Z.locals;var T=a(51900),I=(0,T.Z)(g,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("label",{attrs:{for:n.id}},[n._v(n._s(n.displayName))]),n._v(" "),t("div",{staticClass:"field__row"},[t("NcCheckboxRadioSwitch",{attrs:{type:"switch",id:n.id,checked:n.localValue},on:{"update:checked":[function(e){n.localValue=e},n.save]}},[n._v("\n\t\t\t"+n._s(n.label)+"\n\t\t")])],1),n._v(" "),t("p",{staticClass:"field__description"},[n._v(n._s(n.description))]),n._v(" "),n.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.errorMessage))])]):n._e()],1)}),[],!1,null,"17145f08",null).exports,L=a(20296),F=a(45923);function U(n,e,t,a,r,i,o){try{var l=n[i](o),s=l.value}catch(n){return void t(n)}l.done?e(s):Promise.resolve(s).then(a,r)}function E(n){return function(){var e=this,t=arguments;return new Promise((function(a,r){var i=n.apply(e,t);function o(n){U(i,a,r,o,l,"next",n)}function l(n){U(i,a,r,o,l,"throw",n)}o(void 0)}))}}var P={name:"ColorPickerField",components:{NcButton:o.P2,NcColorPicker:o.m,NcNoteCard:o.qf,Undo:F.default},mixins:[p],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},displayName:{type:String,required:!0}},methods:{debounceSave:(0,L.debounce)(E(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.save();case 2:case"end":return n.stop()}}),n,this)}))),200)}},j=a(43875),D={};D.styleTagTransform=_(),D.setAttributes=x(),D.insert=b().bind(null,"head"),D.domAPI=v(),D.insertStyleElement=w(),f()(j.Z,D),j.Z&&j.Z.locals&&j.Z.locals;var V=(0,T.Z)(P,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("label",{attrs:{for:n.id}},[n._v(n._s(n.displayName))]),n._v(" "),t("div",{staticClass:"field__row"},[t("NcColorPicker",{attrs:{value:n.localValue,"advanced-fields":!0},on:{"update:value":[function(e){n.localValue=e},n.debounceSave]}},[t("NcButton",{staticClass:"field__button",attrs:{type:"primary",id:n.id,"aria-label":n.t("theming","Select a custom color"),"data-admin-theming-setting-primary-color-picker":""}},[n._v("\n\t\t\t\t"+n._s(n.value)+"\n\t\t\t")])],1),n._v(" "),n.value!==n.defaultValue?t("NcButton",{attrs:{type:"tertiary","aria-label":n.t("theming","Reset to default"),"data-admin-theming-setting-primary-color-reset":""},on:{click:n.undo},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):n._e()],1),n._v(" "),n.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.errorMessage))])]):n._e()],1)}),[],!1,null,"105820ba",null).exports,z=a(33691),R=a(75843);function O(n,e,t,a,r,i,o){try{var l=n[i](o),s=l.value}catch(n){return void t(n)}l.done?e(s):Promise.resolve(s).then(a,r)}function B(n){return function(){var e=this,t=arguments;return new Promise((function(a,r){var i=n.apply(e,t);function o(n){O(i,a,r,o,l,"next",n)}function l(n){O(i,a,r,o,l,"throw",n)}o(void 0)}))}}var Z={name:"FileInputField",components:{Delete:z.Z,NcButton:o.P2,NcLoadingIcon:o.lb,NcNoteCard:o.qf,Undo:F.default,Upload:R.Z},mixins:[d],props:{name:{type:String,required:!0},mimeName:{type:String,required:!0},mimeValue:{type:String,required:!0},defaultMimeValue:{type:String,required:!0},displayName:{type:String,required:!0},ariaLabel:{type:String,required:!0}},data:function(){return{showLoading:!1}},computed:{showReset:function(){return this.mimeValue!==this.defaultMimeValue},showRemove:function(){if("background"===this.name){if(this.mimeValue.startsWith("image/"))return!0;if(this.mimeValue===this.defaultMimeValue)return!0}return!1}},methods:{activateLocalFilePicker:function(){this.reset(),this.$refs.input.value=null,this.$refs.input.click()},onChange:function(n){var e=this;return B(regeneratorRuntime.mark((function t(){var a,r,i,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=n.target.files[0],(r=new FormData).append("key",e.name),r.append("image",a),i=(0,s.generateUrl)("/apps/theming/ajax/uploadImage"),t.prev=5,e.showLoading=!0,t.next=9,l.default.post(i,r);case 9:e.showLoading=!1,e.$emit("update:mime-value",a.type),e.handleSuccess(),t.next=18;break;case 14:t.prev=14,t.t0=t.catch(5),e.showLoading=!1,e.errorMessage=null===(o=t.t0.response.data.data)||void 0===o?void 0:o.message;case 18:case"end":return t.stop()}}),t,null,[[5,14]])})))()},undo:function(){var n=this;return B(regeneratorRuntime.mark((function e(){var t,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/undoChanges"),e.prev=2,e.next=5,l.default.post(t,{setting:n.mimeName});case 5:n.$emit("update:mime-value",n.defaultMimeValue),n.handleSuccess(),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),n.errorMessage=null===(a=e.t0.response.data.data)||void 0===a?void 0:a.message;case 12:case"end":return e.stop()}}),e,null,[[2,9]])})))()},removeBackground:function(){var n=this;return B(regeneratorRuntime.mark((function e(){var t,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet"),e.prev=2,e.next=5,l.default.post(t,{setting:n.mimeName,value:"backgroundColor"});case 5:n.$emit("update:mime-value","backgroundColor"),n.handleSuccess(),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),n.errorMessage=null===(a=e.t0.response.data.data)||void 0===a?void 0:a.message;case 12:case"end":return e.stop()}}),e,null,[[2,9]])})))()}}},Y=Z,q=a(22400),$={};$.styleTagTransform=_(),$.setAttributes=x(),$.insert=b().bind(null,"head"),$.domAPI=v(),$.insertStyleElement=w(),f()(q.Z,$),q.Z&&q.Z.locals&&q.Z.locals;var G=(0,T.Z)(Y,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("label",{attrs:{for:n.id}},[n._v(n._s(n.displayName))]),n._v(" "),t("div",{staticClass:"field__row"},[t("NcButton",{attrs:{type:"secondary",id:n.id,"aria-label":n.ariaLabel,"data-admin-theming-setting-background-picker":""},on:{click:n.activateLocalFilePicker},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Upload",{attrs:{size:20}})]},proxy:!0}])},[n._v("\n\t\t\t"+n._s(n.t("theming","Upload"))+"\n\t\t")]),n._v(" "),n.showReset?t("NcButton",{attrs:{type:"tertiary","aria-label":n.t("theming","Reset to default"),"data-admin-theming-setting-background-reset":""},on:{click:n.undo},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):n._e(),n._v(" "),n.showRemove?t("NcButton",{attrs:{type:"tertiary","aria-label":n.t("theming","Remove background image"),"data-admin-theming-setting-background-remove":""},on:{click:n.removeBackground},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Delete",{attrs:{size:20}})]},proxy:!0}],null,!1,2705356561)}):n._e(),n._v(" "),n.showLoading?t("NcLoadingIcon",{staticClass:"field__loading-icon",attrs:{size:20}}):n._e()],1),n._v(" "),"logoheader"!==n.name&&"favicon"!==n.name||n.mimeValue===n.defaultMimeValue?n._e():t("div",{staticClass:"field__preview",class:{"field__preview--logoheader":"logoheader"===n.name,"field__preview--favicon":"favicon"===n.name}}),n._v(" "),n.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.errorMessage))])]):n._e(),n._v(" "),t("input",{ref:"input",attrs:{type:"file"},on:{change:n.onChange}})],1)}),[],!1,null,"1f1d42ee",null).exports,W={name:"TextField",components:{NcTextField:o.h3},mixins:[p],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},type:{type:String,required:!0},displayName:{type:String,required:!0},placeholder:{type:String,required:!0},maxlength:{type:Number,required:!0}}},H=a(91967),Q={};Q.styleTagTransform=_(),Q.setAttributes=x(),Q.insert=b().bind(null,"head"),Q.domAPI=v(),Q.insertStyleElement=w(),f()(H.Z,Q),H.Z&&H.Z.locals&&H.Z.locals;var X=(0,T.Z)(W,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("NcTextField",{attrs:{value:n.localValue,label:n.displayName,"label-visible":!0,placeholder:n.placeholder,type:n.type,maxlength:n.maxlength,spellcheck:!1,success:n.showSuccess,error:Boolean(n.errorMessage),"helper-text":n.errorMessage,"show-trailing-button":n.value!==n.defaultValue,"trailing-button-icon":"undo"},on:{"update:value":function(e){n.localValue=e},"trailing-button-click":n.undo,keydown:function(e){return!e.type.indexOf("key")&&n._k(e.keyCode,"enter",13,e.key,"Enter")?null:n.save.apply(null,arguments)},blur:n.save}})],1)}),[],!1,null,"21244e1d",null),J=X.exports,K=(0,i.loadState)("theming","adminThemingParameters"),nn=K.backgroundMime,en=K.canThemeIcons,tn=K.color,an=K.docUrl,rn=K.docUrlIcons,on=K.faviconMime,ln=K.isThemable,sn=K.legalNoticeUrl,un=K.logoheaderMime,dn=K.logoMime,cn=K.name,mn=K.notThemableErrorMessage,pn=K.privacyPolicyUrl,gn=K.slogan,hn=K.url,fn=K.userThemingDisabled,An=[{name:"name",value:cn,defaultValue:"Nextcloud",type:"text",displayName:t("theming","Name"),placeholder:t("theming","Name"),maxlength:250},{name:"url",value:hn,defaultValue:"https://nextcloud.com",type:"url",displayName:t("theming","Web link"),placeholder:"https://…",maxlength:500},{name:"slogan",value:gn,defaultValue:t("theming","a safe home for all your data"),type:"text",displayName:t("theming","Slogan"),placeholder:t("theming","Slogan"),maxlength:500}],vn={name:"color",value:tn,defaultValue:"#0082c9",displayName:t("theming","Color")},yn=[{name:"logo",mimeName:"logoMime",mimeValue:dn,defaultMimeValue:"",displayName:t("theming","Logo"),ariaLabel:t("theming","Upload new logo")},{name:"background",mimeName:"backgroundMime",mimeValue:nn,defaultMimeValue:"",displayName:t("theming","Background and login image"),ariaLabel:t("theming","Upload new background and login image")}],bn=[{name:"imprintUrl",value:sn,defaultValue:"",type:"url",displayName:t("theming","Legal notice link"),placeholder:"https://…",maxlength:500},{name:"privacyUrl",value:pn,defaultValue:"",type:"url",displayName:t("theming","Privacy policy link"),placeholder:"https://…",maxlength:500}],Cn=[{name:"logoheader",mimeName:"logoheaderMime",mimeValue:un,defaultMimeValue:"",displayName:t("theming","Header logo"),ariaLabel:t("theming","Upload new header logo")},{name:"favicon",mimeName:"faviconMime",mimeValue:on,defaultMimeValue:"",displayName:t("theming","Favicon"),ariaLabel:t("theming","Upload new favicon")}],xn={name:"disable-user-theming",value:fn,defaultValue:!1,displayName:t("theming","User settings"),label:t("theming","Disable user theming"),description:t("theming","Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.")},Nn={name:"AdminTheming",components:{CheckboxField:I,ColorPickerField:V,FileInputField:G,NcNoteCard:o.qf,NcSettingsSection:o.gE,TextField:J},emits:["update:theming"],data:function(){return{textFields:An,colorPickerField:vn,fileInputFields:yn,advancedTextFields:bn,advancedFileInputFields:Cn,userThemingField:xn,canThemeIcons:en,docUrl:an,docUrlIcons:rn,isThemable:ln,notThemableErrorMessage:mn}}},wn=a(12813),kn={};kn.styleTagTransform=_(),kn.setAttributes=x(),kn.insert=b().bind(null,"head"),kn.domAPI=v(),kn.insertStyleElement=w(),f()(wn.Z,kn),wn.Z&&wn.Z.locals&&wn.Z.locals;var _n=(0,T.Z)(Nn,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("section",[t("NcSettingsSection",{attrs:{title:n.t("theming","Theming"),description:n.t("theming","Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users."),"doc-url":n.docUrl,"data-admin-theming-settings":""}},[t("div",{staticClass:"admin-theming"},[n.isThemable?n._e():t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.notThemableErrorMessage))])]),n._v(" "),n._l(n.textFields,(function(e){return t("TextField",{key:e.name,attrs:{"data-admin-theming-setting-field":e.name,"default-value":e.defaultValue,"display-name":e.displayName,maxlength:e.maxlength,name:e.name,placeholder:e.placeholder,type:e.type,value:e.value},on:{"update:value":function(t){return n.$set(e,"value",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),t("ColorPickerField",{attrs:{name:n.colorPickerField.name,"default-value":n.colorPickerField.defaultValue,"display-name":n.colorPickerField.displayName,value:n.colorPickerField.value,"data-admin-theming-setting-primary-color":""},on:{"update:value":function(e){return n.$set(n.colorPickerField,"value",e)},"update:theming":function(e){return n.$emit("update:theming")}}}),n._v(" "),n._l(n.fileInputFields,(function(e){return t("FileInputField",{key:e.name,attrs:{"aria-label":e.ariaLabel,"default-mime-value":e.defaultMimeValue,"display-name":e.displayName,"mime-name":e.mimeName,"mime-value":e.mimeValue,name:e.name,"data-admin-theming-setting-background":""},on:{"update:mimeValue":function(t){return n.$set(e,"mimeValue",t)},"update:mime-value":function(t){return n.$set(e,"mimeValue",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),t("div",{staticClass:"admin-theming__preview"},[t("div",{staticClass:"admin-theming__preview-logo"})])],2)]),n._v(" "),t("NcSettingsSection",{attrs:{title:n.t("theming","Advanced options")}},[t("div",{staticClass:"admin-theming-advanced"},[n._l(n.advancedTextFields,(function(e){return t("TextField",{key:e.name,attrs:{name:e.name,value:e.value,"default-value":e.defaultValue,type:e.type,"display-name":e.displayName,placeholder:e.placeholder,maxlength:e.maxlength},on:{"update:value":function(t){return n.$set(e,"value",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),n._l(n.advancedFileInputFields,(function(e){return t("FileInputField",{key:e.name,attrs:{name:e.name,"mime-name":e.mimeName,"mime-value":e.mimeValue,"default-mime-value":e.defaultMimeValue,"display-name":e.displayName,"aria-label":e.ariaLabel},on:{"update:mimeValue":function(t){return n.$set(e,"mimeValue",t)},"update:mime-value":function(t){return n.$set(e,"mimeValue",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),t("CheckboxField",{attrs:{name:n.userThemingField.name,value:n.userThemingField.value,"default-value":n.userThemingField.defaultValue,"display-name":n.userThemingField.displayName,label:n.userThemingField.label,description:n.userThemingField.description,"data-admin-theming-setting-disable-user-theming":""},on:{"update:theming":function(e){return n.$emit("update:theming")}}}),n._v(" "),n.canThemeIcons?n._e():t("a",{attrs:{href:n.docUrlIcons,rel:"noreferrer noopener"}},[t("em",[n._v(n._s(n.t("theming","Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.")))])])],2)])],1)}),[],!1,null,"ce2595a6",null).exports;function Sn(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,a=new Array(e);t<e;t++)a[t]=n[t];return a}r.ZP.prototype.OC=OC,r.ZP.prototype.t=t;var Mn=new(r.ZP.extend(_n));Mn.$mount("#admin-theming"),Mn.$on("update:theming",(function(){var n;(n=document.head.querySelectorAll("link.theme"),function(n){if(Array.isArray(n))return Sn(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||function(n,e){if(n){if("string"==typeof n)return Sn(n,e);var t=Object.prototype.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Sn(n,e):void 0}}(n)||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.")}()).forEach((function(n){var e=new URL(n.href);e.searchParams.set("v",Date.now());var t=n.cloneNode();t.href=e.toString(),t.onload=function(){return n.remove()},document.head.append(t)}))}))},12813:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i),l=t(61667),s=t.n(l),u=new URL(t(92770),t.b),d=o()(r()),c=s()(u);d.push([n.id,".admin-theming[data-v-ce2595a6],.admin-theming-advanced[data-v-ce2595a6]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-ce2595a6]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-ce2595a6]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url("+c+"))}","",{version:3,sources:["webpack://./apps/theming/src/AdminTheming.vue"],names:[],mappings:"AA2RA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA",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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=d},57631:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/CheckboxField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoED,qCACC,mCAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]),e.Z=o},43875:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-105820ba]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-105820ba]{display:flex;gap:0 4px}.field__button[data-v-105820ba]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-105820ba]:hover{background-color:var(--color-primary-element-default-hover) !important}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/ColorPickerField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoFD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CACA,sCACC,sEAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-element-default-hover) !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=o},22400:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-1f1d42ee]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-1f1d42ee]{display:flex;gap:0 4px}.field__loading-icon[data-v-1f1d42ee]{width:44px;height:44px}.field__preview[data-v-1f1d42ee]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-1f1d42ee]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-1f1d42ee]{background-image:var(--image-favicon)}input[type=file][data-v-1f1d42ee]{display:none}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/FileInputField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCmMD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n"],sourceRoot:""}]),e.Z=o},91967:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-21244e1d]{max-width:400px}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/TextField.vue"],names:[],mappings:"AA4FA,wBACC,eAAA",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.field {\n\tmax-width: 400px;\n}\n"],sourceRoot:""}]),e.Z=o},92770:function(n){n.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjEyOCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjU2IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMTI4IDdjLTI1Ljg3MSAwLTQ3LjgxNyAxNy40ODUtNTQuNzEzIDQxLjIwOS01Ljk3OTUtMTIuNDYxLTE4LjY0Mi0yMS4yMDktMzMuMjg3LTIxLjIwOS0yMC4zMDQgMC0zNyAxNi42OTYtMzcgMzdzMTYuNjk2IDM3IDM3IDM3YzE0LjY0NSAwIDI3LjMwOC04Ljc0ODEgMzMuMjg3LTIxLjIwOSA2Ljg5NTcgMjMuNzI0IDI4Ljg0MiA0MS4yMDkgNTQuNzEzIDQxLjIwOXM0Ny44MTctMTcuNDg1IDU0LjcxMy00MS4yMDljNS45Nzk1IDEyLjQ2MSAxOC42NDIgMjEuMjA5IDMzLjI4NyAyMS4yMDkgMjAuMzA0IDAgMzctMTYuNjk2IDM3LTM3cy0xNi42OTYtMzctMzctMzdjLTE0LjY0NSAwLTI3LjMwOCA4Ljc0ODEtMzMuMjg3IDIxLjIwOS02Ljg5NTctMjMuNzI0LTI4Ljg0Mi00MS4yMDktNTQuNzEzLTQxLjIwOXptMCAyMmMxOS40NiAwIDM1IDE1LjU0IDM1IDM1cy0xNS41NCAzNS0zNSAzNS0zNS0xNS41NC0zNS0zNSAxNS41NC0zNSAzNS0zNXptLTg4IDIwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6bTE3NiAwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iI2ZmZiIgc3R5bGU9Ii1pbmtzY2FwZS1zdHJva2U6bm9uZSIvPjwvc3ZnPgo="}},a={};function r(n){var t=a[n];if(void 0!==t)return t.exports;var i=a[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=e,r.amdD=function(){throw new Error("define cannot be used indirect")},r.amdO={},n=[],r.O=function(e,t,a,i){if(!t){var o=1/0;for(d=0;d<n.length;d++){t=n[d][0],a=n[d][1],i=n[d][2];for(var l=!0,s=0;s<t.length;s++)(!1&i||o>=i)&&Object.keys(r.O).every((function(n){return r.O[n](t[s])}))?t.splice(s--,1):(l=!1,i<o&&(o=i));if(l){n.splice(d--,1);var u=a();void 0!==u&&(e=u)}}return e}i=i||0;for(var d=n.length;d>0&&n[d-1][2]>i;d--)n[d]=n[d-1];n[d]=[t,a,i]},r.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(e,{a:e}),e},r.d=function(n,e){for(var t in e)r.o(e,t)&&!r.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:e[t]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),r.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},r.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},r.j=5544,function(){r.b=document.baseURI||self.location.href;var n={5544:0};r.O.j=function(e){return 0===n[e]};var e=function(e,t){var a,i,o=t[0],l=t[1],s=t[2],u=0;if(o.some((function(e){return 0!==n[e]}))){for(a in l)r.o(l,a)&&(r.m[a]=l[a]);if(s)var d=s(r)}for(e&&e(t);u<o.length;u++)i=o[u],r.o(n,i)&&n[i]&&n[i][0](),n[i]=0;return r.O(d)},t=self.webpackChunknextcloud=self.webpackChunknextcloud||[];t.forEach(e.bind(null,0)),t.push=e.bind(null,t.push.bind(t))}(),r.nc=void 0;var i=r.O(void 0,[7874],(function(){return r(10787)}));i=r.O(i)}();
-//# sourceMappingURL=theming-admin-theming.js.map?v=a5651032b813a9b4cfab \ No newline at end of file
+!function(){"use strict";var n,e={77012:function(n,e,a){var r=a(20144),i=a(16453),o=a(15961),l=a(4820),s=a(79753),u=["color","logo","background","logoheader","favicon","disable-user-theming"],d={emits:["update:theming"],data:function(){return{showSuccess:!1,errorMessage:""}},computed:{id:function(){return"admin-theming-".concat(this.name)}},methods:{reset:function(){this.showSuccess=!1,this.errorMessage=""},handleSuccess:function(){var n=this;this.showSuccess=!0,setTimeout((function(){n.showSuccess=!1}),2e3),u.includes(this.name)&&this.$emit("update:theming")}}};function c(n,e,t,a,r,i,o){try{var l=n[i](o),s=l.value}catch(n){return void t(n)}l.done?e(s):Promise.resolve(s).then(a,r)}function m(n){return function(){var e=this,t=arguments;return new Promise((function(a,r){var i=n.apply(e,t);function o(n){c(i,a,r,o,l,"next",n)}function l(n){c(i,a,r,o,l,"throw",n)}o(void 0)}))}}var p={mixins:[d],watch:{value:function(n){this.localValue=n}},data:function(){return{localValue:this.value}},methods:{save:function(){var n=this;return m(regeneratorRuntime.mark((function e(){var t,a,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet"),a=!0===n.localValue?"yes":!1===n.localValue?"no":n.localValue,e.prev=3,e.next=6,l.default.post(t,{setting:n.name,value:a});case 6:n.$emit("update:value",n.localValue),n.handleSuccess(),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(3),n.errorMessage=null===(r=e.t0.response.data.data)||void 0===r?void 0:r.message;case 13:case"end":return e.stop()}}),e,null,[[3,10]])})))()},undo:function(){var n=this;return m(regeneratorRuntime.mark((function e(){var t,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/undoChanges"),e.prev=2,e.next=5,l.default.post(t,{setting:n.name});case 5:n.$emit("update:value",n.defaultValue),n.handleSuccess(),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),n.errorMessage=null===(a=e.t0.response.data.data)||void 0===a?void 0:a.message;case 12:case"end":return e.stop()}}),e,null,[[2,9]])})))()}}},g={name:"CheckboxField",components:{NcCheckboxRadioSwitch:o.rw,NcNoteCard:o.qf},mixins:[p],props:{name:{type:String,required:!0},value:{type:Boolean,required:!0},defaultValue:{type:Boolean,required:!0},displayName:{type:String,required:!0},label:{type:String,required:!0},description:{type:String,required:!0}}},h=a(93379),f=a.n(h),A=a(7795),v=a.n(A),y=a(90569),b=a.n(y),C=a(3565),x=a.n(C),w=a(19216),N=a.n(w),k=a(44589),_=a.n(k),S=a(57631),M={};M.styleTagTransform=_(),M.setAttributes=x(),M.insert=b().bind(null,"head"),M.domAPI=v(),M.insertStyleElement=N(),f()(S.Z,M),S.Z&&S.Z.locals&&S.Z.locals;var T=a(51900),I=(0,T.Z)(g,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("label",{attrs:{for:n.id}},[n._v(n._s(n.displayName))]),n._v(" "),t("div",{staticClass:"field__row"},[t("NcCheckboxRadioSwitch",{attrs:{type:"switch",id:n.id,checked:n.localValue},on:{"update:checked":[function(e){n.localValue=e},n.save]}},[n._v("\n\t\t\t"+n._s(n.label)+"\n\t\t")])],1),n._v(" "),t("p",{staticClass:"field__description"},[n._v(n._s(n.description))]),n._v(" "),n.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.errorMessage))])]):n._e()],1)}),[],!1,null,"17145f08",null).exports,L=a(20296),F=a(45923);function U(n,e,t,a,r,i,o){try{var l=n[i](o),s=l.value}catch(n){return void t(n)}l.done?e(s):Promise.resolve(s).then(a,r)}function E(n){return function(){var e=this,t=arguments;return new Promise((function(a,r){var i=n.apply(e,t);function o(n){U(i,a,r,o,l,"next",n)}function l(n){U(i,a,r,o,l,"throw",n)}o(void 0)}))}}var P={name:"ColorPickerField",components:{NcButton:o.P2,NcColorPicker:o.m,NcNoteCard:o.qf,Undo:F.default},mixins:[p],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},displayName:{type:String,required:!0}},methods:{debounceSave:(0,L.debounce)(E(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.save();case 2:case"end":return n.stop()}}),n,this)}))),200)}},j=a(43875),D={};D.styleTagTransform=_(),D.setAttributes=x(),D.insert=b().bind(null,"head"),D.domAPI=v(),D.insertStyleElement=N(),f()(j.Z,D),j.Z&&j.Z.locals&&j.Z.locals;var V=(0,T.Z)(P,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("label",{attrs:{for:n.id}},[n._v(n._s(n.displayName))]),n._v(" "),t("div",{staticClass:"field__row"},[t("NcColorPicker",{attrs:{value:n.localValue,"advanced-fields":!0},on:{"update:value":[function(e){n.localValue=e},n.debounceSave]}},[t("NcButton",{staticClass:"field__button",attrs:{type:"primary",id:n.id,"aria-label":n.t("theming","Select a custom color"),"data-admin-theming-setting-primary-color-picker":""}},[n._v("\n\t\t\t\t"+n._s(n.value)+"\n\t\t\t")])],1),n._v(" "),n.value!==n.defaultValue?t("NcButton",{attrs:{type:"tertiary","aria-label":n.t("theming","Reset to default"),"data-admin-theming-setting-primary-color-reset":""},on:{click:n.undo},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):n._e()],1),n._v(" "),n.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.errorMessage))])]):n._e()],1)}),[],!1,null,"105820ba",null).exports,z=a(33691),R=a(75843);function O(n,e,t,a,r,i,o){try{var l=n[i](o),s=l.value}catch(n){return void t(n)}l.done?e(s):Promise.resolve(s).then(a,r)}function B(n){return function(){var e=this,t=arguments;return new Promise((function(a,r){var i=n.apply(e,t);function o(n){O(i,a,r,o,l,"next",n)}function l(n){O(i,a,r,o,l,"throw",n)}o(void 0)}))}}var Z={name:"FileInputField",components:{Delete:z.Z,NcButton:o.P2,NcLoadingIcon:o.lb,NcNoteCard:o.qf,Undo:F.default,Upload:R.Z},mixins:[d],props:{name:{type:String,required:!0},mimeName:{type:String,required:!0},mimeValue:{type:String,required:!0},defaultMimeValue:{type:String,required:!0},displayName:{type:String,required:!0},ariaLabel:{type:String,required:!0}},data:function(){return{showLoading:!1}},computed:{showReset:function(){return this.mimeValue!==this.defaultMimeValue},showRemove:function(){if("background"===this.name){if(this.mimeValue.startsWith("image/"))return!0;if(this.mimeValue===this.defaultMimeValue)return!0}return!1}},methods:{activateLocalFilePicker:function(){this.reset(),this.$refs.input.value=null,this.$refs.input.click()},onChange:function(n){var e=this;return B(regeneratorRuntime.mark((function t(){var a,r,i,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=n.target.files[0],(r=new FormData).append("key",e.name),r.append("image",a),i=(0,s.generateUrl)("/apps/theming/ajax/uploadImage"),t.prev=5,e.showLoading=!0,t.next=9,l.default.post(i,r);case 9:e.showLoading=!1,e.$emit("update:mime-value",a.type),e.handleSuccess(),t.next=18;break;case 14:t.prev=14,t.t0=t.catch(5),e.showLoading=!1,e.errorMessage=null===(o=t.t0.response.data.data)||void 0===o?void 0:o.message;case 18:case"end":return t.stop()}}),t,null,[[5,14]])})))()},undo:function(){var n=this;return B(regeneratorRuntime.mark((function e(){var t,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/undoChanges"),e.prev=2,e.next=5,l.default.post(t,{setting:n.mimeName});case 5:n.$emit("update:mime-value",n.defaultMimeValue),n.handleSuccess(),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),n.errorMessage=null===(a=e.t0.response.data.data)||void 0===a?void 0:a.message;case 12:case"end":return e.stop()}}),e,null,[[2,9]])})))()},removeBackground:function(){var n=this;return B(regeneratorRuntime.mark((function e(){var t,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.reset(),t=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet"),e.prev=2,e.next=5,l.default.post(t,{setting:n.mimeName,value:"backgroundColor"});case 5:n.$emit("update:mime-value","backgroundColor"),n.handleSuccess(),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),n.errorMessage=null===(a=e.t0.response.data.data)||void 0===a?void 0:a.message;case 12:case"end":return e.stop()}}),e,null,[[2,9]])})))()}}},Y=Z,q=a(81529),$={};$.styleTagTransform=_(),$.setAttributes=x(),$.insert=b().bind(null,"head"),$.domAPI=v(),$.insertStyleElement=N(),f()(q.Z,$),q.Z&&q.Z.locals&&q.Z.locals;var G=(0,T.Z)(Y,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("label",{attrs:{for:n.id}},[n._v(n._s(n.displayName))]),n._v(" "),t("div",{staticClass:"field__row"},[t("NcButton",{attrs:{type:"secondary",id:n.id,"aria-label":n.ariaLabel,"data-admin-theming-setting-file-picker":""},on:{click:n.activateLocalFilePicker},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Upload",{attrs:{size:20}})]},proxy:!0}])},[n._v("\n\t\t\t"+n._s(n.t("theming","Upload"))+"\n\t\t")]),n._v(" "),n.showReset?t("NcButton",{attrs:{type:"tertiary","aria-label":n.t("theming","Reset to default"),"data-admin-theming-setting-file-reset":""},on:{click:n.undo},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):n._e(),n._v(" "),n.showRemove?t("NcButton",{attrs:{type:"tertiary","aria-label":n.t("theming","Remove background image"),"data-admin-theming-setting-file-remove":""},on:{click:n.removeBackground},scopedSlots:n._u([{key:"icon",fn:function(){return[t("Delete",{attrs:{size:20}})]},proxy:!0}],null,!1,2705356561)}):n._e(),n._v(" "),n.showLoading?t("NcLoadingIcon",{staticClass:"field__loading-icon",attrs:{size:20}}):n._e()],1),n._v(" "),"logoheader"!==n.name&&"favicon"!==n.name||n.mimeValue===n.defaultMimeValue?n._e():t("div",{staticClass:"field__preview",class:{"field__preview--logoheader":"logoheader"===n.name,"field__preview--favicon":"favicon"===n.name}}),n._v(" "),n.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.errorMessage))])]):n._e(),n._v(" "),t("input",{ref:"input",attrs:{type:"file"},on:{change:n.onChange}})],1)}),[],!1,null,"3d620660",null).exports,W={name:"TextField",components:{NcTextField:o.h3},mixins:[p],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},type:{type:String,required:!0},displayName:{type:String,required:!0},placeholder:{type:String,required:!0},maxlength:{type:Number,required:!0}}},H=a(91967),Q={};Q.styleTagTransform=_(),Q.setAttributes=x(),Q.insert=b().bind(null,"head"),Q.domAPI=v(),Q.insertStyleElement=N(),f()(H.Z,Q),H.Z&&H.Z.locals&&H.Z.locals;var X=(0,T.Z)(W,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"field"},[t("NcTextField",{attrs:{value:n.localValue,label:n.displayName,"label-visible":!0,placeholder:n.placeholder,type:n.type,maxlength:n.maxlength,spellcheck:!1,success:n.showSuccess,error:Boolean(n.errorMessage),"helper-text":n.errorMessage,"show-trailing-button":n.value!==n.defaultValue,"trailing-button-icon":"undo"},on:{"update:value":function(e){n.localValue=e},"trailing-button-click":n.undo,keydown:function(e){return!e.type.indexOf("key")&&n._k(e.keyCode,"enter",13,e.key,"Enter")?null:n.save.apply(null,arguments)},blur:n.save}})],1)}),[],!1,null,"21244e1d",null),J=X.exports,K=(0,i.loadState)("theming","adminThemingParameters"),nn=K.backgroundMime,en=K.canThemeIcons,tn=K.color,an=K.docUrl,rn=K.docUrlIcons,on=K.faviconMime,ln=K.isThemable,sn=K.legalNoticeUrl,un=K.logoheaderMime,dn=K.logoMime,cn=K.name,mn=K.notThemableErrorMessage,pn=K.privacyPolicyUrl,gn=K.slogan,hn=K.url,fn=K.userThemingDisabled,An=[{name:"name",value:cn,defaultValue:"Nextcloud",type:"text",displayName:t("theming","Name"),placeholder:t("theming","Name"),maxlength:250},{name:"url",value:hn,defaultValue:"https://nextcloud.com",type:"url",displayName:t("theming","Web link"),placeholder:"https://…",maxlength:500},{name:"slogan",value:gn,defaultValue:t("theming","a safe home for all your data"),type:"text",displayName:t("theming","Slogan"),placeholder:t("theming","Slogan"),maxlength:500}],vn={name:"color",value:tn,defaultValue:"#0082c9",displayName:t("theming","Color")},yn=[{name:"logo",mimeName:"logoMime",mimeValue:dn,defaultMimeValue:"",displayName:t("theming","Logo"),ariaLabel:t("theming","Upload new logo")},{name:"background",mimeName:"backgroundMime",mimeValue:nn,defaultMimeValue:"",displayName:t("theming","Background and login image"),ariaLabel:t("theming","Upload new background and login image")}],bn=[{name:"imprintUrl",value:sn,defaultValue:"",type:"url",displayName:t("theming","Legal notice link"),placeholder:"https://…",maxlength:500},{name:"privacyUrl",value:pn,defaultValue:"",type:"url",displayName:t("theming","Privacy policy link"),placeholder:"https://…",maxlength:500}],Cn=[{name:"logoheader",mimeName:"logoheaderMime",mimeValue:un,defaultMimeValue:"",displayName:t("theming","Header logo"),ariaLabel:t("theming","Upload new header logo")},{name:"favicon",mimeName:"faviconMime",mimeValue:on,defaultMimeValue:"",displayName:t("theming","Favicon"),ariaLabel:t("theming","Upload new favicon")}],xn={name:"disable-user-theming",value:fn,defaultValue:!1,displayName:t("theming","User settings"),label:t("theming","Disable user theming"),description:t("theming","Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.")},wn={name:"AdminTheming",components:{CheckboxField:I,ColorPickerField:V,FileInputField:G,NcNoteCard:o.qf,NcSettingsSection:o.gE,TextField:J},emits:["update:theming"],data:function(){return{textFields:An,colorPickerField:vn,fileInputFields:yn,advancedTextFields:bn,advancedFileInputFields:Cn,userThemingField:xn,canThemeIcons:en,docUrl:an,docUrlIcons:rn,isThemable:ln,notThemableErrorMessage:mn}}},Nn=a(88448),kn={};kn.styleTagTransform=_(),kn.setAttributes=x(),kn.insert=b().bind(null,"head"),kn.domAPI=v(),kn.insertStyleElement=N(),f()(Nn.Z,kn),Nn.Z&&Nn.Z.locals&&Nn.Z.locals;var _n=(0,T.Z)(wn,(function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("section",[t("NcSettingsSection",{attrs:{title:n.t("theming","Theming"),description:n.t("theming","Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users."),"doc-url":n.docUrl,"data-admin-theming-settings":""}},[t("div",{staticClass:"admin-theming"},[n.isThemable?n._e():t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[n._v(n._s(n.notThemableErrorMessage))])]),n._v(" "),n._l(n.textFields,(function(e){return t("TextField",{key:e.name,attrs:{"data-admin-theming-setting-field":e.name,"default-value":e.defaultValue,"display-name":e.displayName,maxlength:e.maxlength,name:e.name,placeholder:e.placeholder,type:e.type,value:e.value},on:{"update:value":function(t){return n.$set(e,"value",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),t("ColorPickerField",{attrs:{name:n.colorPickerField.name,"default-value":n.colorPickerField.defaultValue,"display-name":n.colorPickerField.displayName,value:n.colorPickerField.value,"data-admin-theming-setting-primary-color":""},on:{"update:value":function(e){return n.$set(n.colorPickerField,"value",e)},"update:theming":function(e){return n.$emit("update:theming")}}}),n._v(" "),n._l(n.fileInputFields,(function(e){return t("FileInputField",{key:e.name,attrs:{"aria-label":e.ariaLabel,"data-admin-theming-setting-file":e.name,"default-mime-value":e.defaultMimeValue,"display-name":e.displayName,"mime-name":e.mimeName,"mime-value":e.mimeValue,name:e.name},on:{"update:mimeValue":function(t){return n.$set(e,"mimeValue",t)},"update:mime-value":function(t){return n.$set(e,"mimeValue",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),t("div",{staticClass:"admin-theming__preview",attrs:{"data-admin-theming-preview":""}},[t("div",{staticClass:"admin-theming__preview-logo",attrs:{"data-admin-theming-preview-logo":""}})])],2)]),n._v(" "),t("NcSettingsSection",{attrs:{title:n.t("theming","Advanced options")}},[t("div",{staticClass:"admin-theming-advanced"},[n._l(n.advancedTextFields,(function(e){return t("TextField",{key:e.name,attrs:{name:e.name,value:e.value,"default-value":e.defaultValue,type:e.type,"display-name":e.displayName,placeholder:e.placeholder,maxlength:e.maxlength},on:{"update:value":function(t){return n.$set(e,"value",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),n._l(n.advancedFileInputFields,(function(e){return t("FileInputField",{key:e.name,attrs:{name:e.name,"mime-name":e.mimeName,"mime-value":e.mimeValue,"default-mime-value":e.defaultMimeValue,"display-name":e.displayName,"aria-label":e.ariaLabel},on:{"update:mimeValue":function(t){return n.$set(e,"mimeValue",t)},"update:mime-value":function(t){return n.$set(e,"mimeValue",t)},"update:theming":function(e){return n.$emit("update:theming")}}})})),n._v(" "),t("CheckboxField",{attrs:{name:n.userThemingField.name,value:n.userThemingField.value,"default-value":n.userThemingField.defaultValue,"display-name":n.userThemingField.displayName,label:n.userThemingField.label,description:n.userThemingField.description,"data-admin-theming-setting-disable-user-theming":""},on:{"update:theming":function(e){return n.$emit("update:theming")}}}),n._v(" "),n.canThemeIcons?n._e():t("a",{attrs:{href:n.docUrlIcons,rel:"noreferrer noopener"}},[t("em",[n._v(n._s(n.t("theming","Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.")))])])],2)])],1)}),[],!1,null,"4f7ac635",null).exports;function Sn(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,a=new Array(e);t<e;t++)a[t]=n[t];return a}r.ZP.prototype.OC=OC,r.ZP.prototype.t=t;var Mn=new(r.ZP.extend(_n));Mn.$mount("#admin-theming"),Mn.$on("update:theming",(function(){var n;(n=document.head.querySelectorAll("link.theme"),function(n){if(Array.isArray(n))return Sn(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||function(n,e){if(n){if("string"==typeof n)return Sn(n,e);var t=Object.prototype.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Sn(n,e):void 0}}(n)||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.")}()).forEach((function(n){var e=new URL(n.href);e.searchParams.set("v",Date.now());var t=n.cloneNode();t.href=e.toString(),t.onload=function(){return n.remove()},document.head.append(t)}))}))},88448:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i),l=t(61667),s=t.n(l),u=new URL(t(92770),t.b),d=o()(r()),c=s()(u);d.push([n.id,".admin-theming[data-v-4f7ac635],.admin-theming-advanced[data-v-4f7ac635]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-4f7ac635]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-4f7ac635]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url("+c+"))}","",{version:3,sources:["webpack://./apps/theming/src/AdminTheming.vue"],names:[],mappings:"AA2RA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA",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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=d},57631:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/CheckboxField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoED,qCACC,mCAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]),e.Z=o},43875:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-105820ba]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-105820ba]{display:flex;gap:0 4px}.field__button[data-v-105820ba]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-105820ba]:hover{background-color:var(--color-primary-element-default-hover) !important}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/ColorPickerField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoFD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CACA,sCACC,sEAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-element-default-hover) !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=o},81529:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-3d620660]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-3d620660]{display:flex;gap:0 4px}.field__loading-icon[data-v-3d620660]{width:44px;height:44px}.field__preview[data-v-3d620660]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-3d620660]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-3d620660]{background-image:var(--image-favicon)}input[type=file][data-v-3d620660]{display:none}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/FileInputField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCmMD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n"],sourceRoot:""}]),e.Z=o},91967:function(n,e,t){var a=t(87537),r=t.n(a),i=t(23645),o=t.n(i)()(r());o.push([n.id,".field[data-v-21244e1d]{max-width:400px}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/TextField.vue"],names:[],mappings:"AA4FA,wBACC,eAAA",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.field {\n\tmax-width: 400px;\n}\n"],sourceRoot:""}]),e.Z=o},92770:function(n){n.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjEyOCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjU2IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMTI4IDdjLTI1Ljg3MSAwLTQ3LjgxNyAxNy40ODUtNTQuNzEzIDQxLjIwOS01Ljk3OTUtMTIuNDYxLTE4LjY0Mi0yMS4yMDktMzMuMjg3LTIxLjIwOS0yMC4zMDQgMC0zNyAxNi42OTYtMzcgMzdzMTYuNjk2IDM3IDM3IDM3YzE0LjY0NSAwIDI3LjMwOC04Ljc0ODEgMzMuMjg3LTIxLjIwOSA2Ljg5NTcgMjMuNzI0IDI4Ljg0MiA0MS4yMDkgNTQuNzEzIDQxLjIwOXM0Ny44MTctMTcuNDg1IDU0LjcxMy00MS4yMDljNS45Nzk1IDEyLjQ2MSAxOC42NDIgMjEuMjA5IDMzLjI4NyAyMS4yMDkgMjAuMzA0IDAgMzctMTYuNjk2IDM3LTM3cy0xNi42OTYtMzctMzctMzdjLTE0LjY0NSAwLTI3LjMwOCA4Ljc0ODEtMzMuMjg3IDIxLjIwOS02Ljg5NTctMjMuNzI0LTI4Ljg0Mi00MS4yMDktNTQuNzEzLTQxLjIwOXptMCAyMmMxOS40NiAwIDM1IDE1LjU0IDM1IDM1cy0xNS41NCAzNS0zNSAzNS0zNS0xNS41NC0zNS0zNSAxNS41NC0zNSAzNS0zNXptLTg4IDIwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6bTE3NiAwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iI2ZmZiIgc3R5bGU9Ii1pbmtzY2FwZS1zdHJva2U6bm9uZSIvPjwvc3ZnPgo="}},a={};function r(n){var t=a[n];if(void 0!==t)return t.exports;var i=a[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=e,r.amdD=function(){throw new Error("define cannot be used indirect")},r.amdO={},n=[],r.O=function(e,t,a,i){if(!t){var o=1/0;for(d=0;d<n.length;d++){t=n[d][0],a=n[d][1],i=n[d][2];for(var l=!0,s=0;s<t.length;s++)(!1&i||o>=i)&&Object.keys(r.O).every((function(n){return r.O[n](t[s])}))?t.splice(s--,1):(l=!1,i<o&&(o=i));if(l){n.splice(d--,1);var u=a();void 0!==u&&(e=u)}}return e}i=i||0;for(var d=n.length;d>0&&n[d-1][2]>i;d--)n[d]=n[d-1];n[d]=[t,a,i]},r.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(e,{a:e}),e},r.d=function(n,e){for(var t in e)r.o(e,t)&&!r.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:e[t]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),r.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},r.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},r.j=5544,function(){r.b=document.baseURI||self.location.href;var n={5544:0};r.O.j=function(e){return 0===n[e]};var e=function(e,t){var a,i,o=t[0],l=t[1],s=t[2],u=0;if(o.some((function(e){return 0!==n[e]}))){for(a in l)r.o(l,a)&&(r.m[a]=l[a]);if(s)var d=s(r)}for(e&&e(t);u<o.length;u++)i=o[u],r.o(n,i)&&n[i]&&n[i][0](),n[i]=0;return r.O(d)},t=self.webpackChunknextcloud=self.webpackChunknextcloud||[];t.forEach(e.bind(null,0)),t.push=e.bind(null,t.push.bind(t))}(),r.nc=void 0;var i=r.O(void 0,[7874],(function(){return r(77012)}));i=r.O(i)}();
+//# sourceMappingURL=theming-admin-theming.js.map?v=30747fab46e3fb725cf4 \ No newline at end of file
diff --git a/dist/theming-admin-theming.js.map b/dist/theming-admin-theming.js.map
index 8490a8e2753..b44386cd8c2 100644
--- a/dist/theming-admin-theming.js.map
+++ b/dist/theming-admin-theming.js.map
@@ -1 +1 @@
-{"version":3,"file":"theming-admin-theming.js?v=a5651032b813a9b4cfab","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/theming/src/mixins/admin/FieldMixin.js","webpack:///nextcloud/apps/theming/src/mixins/admin/TextValueMixin.js","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?4277","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?8981","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=template&id=17145f08&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?6dbd","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?977d","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=template&id=105820ba&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?8d16","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?4d24","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=template&id=1f1d42ee&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?91e3","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?c7b6","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=template&id=21244e1d&scoped=true&","webpack:///nextcloud/apps/theming/src/AdminTheming.vue","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?1e0e","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?6138","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=template&id=ce2595a6&scoped=true&","webpack:///nextcloud/apps/theming/src/admin-settings.js","webpack:///nextcloud/apps/theming/src/helpers/refreshStyles.js","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=style&index=0&id=ce2595a6&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=style&index=0&id=1f1d42ee&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&","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/runtime/nonce","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 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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 styleRefreshFields = [\n\t'color',\n\t'logo',\n\t'background',\n\t'logoheader',\n\t'favicon',\n\t'disable-user-theming',\n]\n\nexport default {\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowSuccess: false,\n\t\t\terrorMessage: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `admin-theming-${this.name}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\treset() {\n\t\t\tthis.showSuccess = false\n\t\t\tthis.errorMessage = ''\n\t\t},\n\n\t\thandleSuccess() {\n\t\t\tthis.showSuccess = true\n\t\t\tsetTimeout(() => { this.showSuccess = false }, 2000)\n\t\t\tif (styleRefreshFields.includes(this.name)) {\n\t\t\t\tthis.$emit('update:theming')\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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 { generateUrl } from '@nextcloud/router'\n\nimport FieldMixin from './FieldMixin.js'\n\nexport default {\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\twatch: {\n\t\tvalue(value) {\n\t\t\tthis.localValue = value\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocalValue: this.value,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync save() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\t// Convert boolean to string as server expects string value\n\t\t\tconst valueToPost = this.localValue === true ? 'yes' : this.localValue === false ? 'no' : this.localValue\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t\tvalue: valueToPost,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.localValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.defaultValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxField.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!./CheckboxField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:checked.sync=\"localValue\"\n\t\t\t\t@update:checked=\"save\">\n\t\t\t\t{{ label }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</div>\n\n\t\t<p class=\"field__description\">{{ description }}</p>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport {\n\tNcCheckboxRadioSwitch,\n\tNcNoteCard,\n} from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'CheckboxField',\n\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t\tNcNoteCard,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\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!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&\";\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!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CheckboxField.vue?vue&type=template&id=17145f08&scoped=true&\"\nimport script from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&\"\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 \"17145f08\",\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:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"id\":_vm.id,\"checked\":_vm.localValue},on:{\"update:checked\":[function($event){_vm.localValue=$event},_vm.save]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('p',{staticClass:\"field__description\"},[_vm._v(_vm._s(_vm.description))]),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcColorPicker :value.sync=\"localValue\"\n\t\t\t\t:advanced-fields=\"true\"\n\t\t\t\t@update:value=\"debounceSave\">\n\t\t\t\t<NcButton class=\"field__button\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:id=\"id\"\n\t\t\t\t\t:aria-label=\"t('theming', 'Select a custom color')\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color-picker>\n\t\t\t\t\t{{ value }}\n\t\t\t\t</NcButton>\n\t\t\t</NcColorPicker>\n\t\t\t<NcButton v-if=\"value !== defaultValue\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-primary-color-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport { debounce } from 'debounce'\nimport {\n\tNcButton,\n\tNcColorPicker,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'ColorPickerField',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcColorPicker,\n\t\tNcNoteCard,\n\t\tUndo,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tdebounceSave: debounce(async function() {\n\t\t\tawait this.save()\n\t\t}, 200),\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-element-default-hover) !important;\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!./ColorPickerField.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!./ColorPickerField.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!./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&\";\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!./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ColorPickerField.vue?vue&type=template&id=105820ba&scoped=true&\"\nimport script from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nexport * from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&\"\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 \"105820ba\",\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:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcColorPicker',{attrs:{\"value\":_vm.localValue,\"advanced-fields\":true},on:{\"update:value\":[function($event){_vm.localValue=$event},_vm.debounceSave]}},[_c('NcButton',{staticClass:\"field__button\",attrs:{\"type\":\"primary\",\"id\":_vm.id,\"aria-label\":_vm.t('theming', 'Select a custom color'),\"data-admin-theming-setting-primary-color-picker\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.value)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.value !== _vm.defaultValue)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-primary-color-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e()],1),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcButton type=\"secondary\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t\tdata-admin-theming-setting-background-picker\n\t\t\t\t@click=\"activateLocalFilePicker\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Upload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('theming', 'Upload') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showReset\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-background-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showRemove\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Remove background image')\"\n\t\t\t\tdata-admin-theming-setting-background-remove\n\t\t\t\t@click=\"removeBackground\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcLoadingIcon v-if=\"showLoading\"\n\t\t\t\tclass=\"field__loading-icon\"\n\t\t\t\t:size=\"20\" />\n\t\t</div>\n\n\t\t<div v-if=\"(name === 'logoheader' || name === 'favicon') && mimeValue !== defaultMimeValue\"\n\t\t\tclass=\"field__preview\"\n\t\t\t:class=\"{\n\t\t\t\t'field__preview--logoheader': name === 'logoheader',\n\t\t\t\t'field__preview--favicon': name === 'favicon',\n\t\t\t}\" />\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\n\t\t<input ref=\"input\"\n\t\t\ttype=\"file\"\n\t\t\t@change=\"onChange\">\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nimport {\n\tNcButton,\n\tNcLoadingIcon,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\nimport Upload from 'vue-material-design-icons/Upload.vue'\n\nimport FieldMixin from '../../mixins/admin/FieldMixin.js'\n\nexport default {\n\tname: 'FileInputField',\n\n\tcomponents: {\n\t\tDelete,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tNcNoteCard,\n\t\tUndo,\n\t\tUpload,\n\t},\n\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultMimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshowReset() {\n\t\t\treturn this.mimeValue !== this.defaultMimeValue\n\t\t},\n\n\t\tshowRemove() {\n\t\t\tif (this.name === 'background') {\n\t\t\t\tif (this.mimeValue.startsWith('image/')) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tif (this.mimeValue === this.defaultMimeValue) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t},\n\n\tmethods: {\n\t\tactivateLocalFilePicker() {\n\t\t\tthis.reset()\n\t\t\t// Set to null so that selecting the same file will trigger the change event\n\t\t\tthis.$refs.input.value = null\n\t\t\tthis.$refs.input.click()\n\t\t},\n\n\t\tasync onChange(e) {\n\t\t\tconst file = e.target.files[0]\n\n\t\t\tconst formData = new FormData()\n\t\t\tformData.append('key', this.name)\n\t\t\tformData.append('image', file)\n\n\t\t\tconst url = generateUrl('/apps/theming/ajax/uploadImage')\n\t\t\ttry {\n\t\t\t\tthis.showLoading = true\n\t\t\t\tawait axios.post(url, formData)\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.$emit('update:mime-value', file.type)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', this.defaultMimeValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync removeBackground() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t\tvalue: 'backgroundColor',\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', 'backgroundColor')\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileInputField.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!./FileInputField.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!./FileInputField.vue?vue&type=style&index=0&id=1f1d42ee&lang=scss&scoped=true&\";\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!./FileInputField.vue?vue&type=style&index=0&id=1f1d42ee&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileInputField.vue?vue&type=template&id=1f1d42ee&scoped=true&\"\nimport script from \"./FileInputField.vue?vue&type=script&lang=js&\"\nexport * from \"./FileInputField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileInputField.vue?vue&type=style&index=0&id=1f1d42ee&lang=scss&scoped=true&\"\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 \"1f1d42ee\",\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:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcButton',{attrs:{\"type\":\"secondary\",\"id\":_vm.id,\"aria-label\":_vm.ariaLabel,\"data-admin-theming-setting-background-picker\":\"\"},on:{\"click\":_vm.activateLocalFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Upload',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Upload'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showReset)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-background-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e(),_vm._v(\" \"),(_vm.showRemove)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Remove background image'),\"data-admin-theming-setting-background-remove\":\"\"},on:{\"click\":_vm.removeBackground},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete',{attrs:{\"size\":20}})]},proxy:true}],null,false,2705356561)}):_vm._e(),_vm._v(\" \"),(_vm.showLoading)?_c('NcLoadingIcon',{staticClass:\"field__loading-icon\",attrs:{\"size\":20}}):_vm._e()],1),_vm._v(\" \"),((_vm.name === 'logoheader' || _vm.name === 'favicon') && _vm.mimeValue !== _vm.defaultMimeValue)?_c('div',{staticClass:\"field__preview\",class:{\n\t\t\t'field__preview--logoheader': _vm.name === 'logoheader',\n\t\t\t'field__preview--favicon': _vm.name === 'favicon',\n\t\t}}):_vm._e(),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e(),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"type\":\"file\"},on:{\"change\":_vm.onChange}})],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!./TextField.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!./TextField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<NcTextField :value.sync=\"localValue\"\n\t\t\t:label=\"displayName\"\n\t\t\t:label-visible=\"true\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:type=\"type\"\n\t\t\t:maxlength=\"maxlength\"\n\t\t\t:spellcheck=\"false\"\n\t\t\t:success=\"showSuccess\"\n\t\t\t:error=\"Boolean(errorMessage)\"\n\t\t\t:helper-text=\"errorMessage\"\n\t\t\t:show-trailing-button=\"value !== defaultValue\"\n\t\t\ttrailing-button-icon=\"undo\"\n\t\t\t@trailing-button-click=\"undo\"\n\t\t\t@keydown.enter=\"save\"\n\t\t\t@blur=\"save\" />\n\t</div>\n</template>\n\n<script>\nimport { NcTextField } from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'TextField',\n\n\tcomponents: {\n\t\tNcTextField,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmaxlength: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.field {\n\tmax-width: 400px;\n}\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!./TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&\";\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!./TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TextField.vue?vue&type=template&id=21244e1d&scoped=true&\"\nimport script from \"./TextField.vue?vue&type=script&lang=js&\"\nexport * from \"./TextField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&\"\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 \"21244e1d\",\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:\"field\"},[_c('NcTextField',{attrs:{\"value\":_vm.localValue,\"label\":_vm.displayName,\"label-visible\":true,\"placeholder\":_vm.placeholder,\"type\":_vm.type,\"maxlength\":_vm.maxlength,\"spellcheck\":false,\"success\":_vm.showSuccess,\"error\":Boolean(_vm.errorMessage),\"helper-text\":_vm.errorMessage,\"show-trailing-button\":_vm.value !== _vm.defaultValue,\"trailing-button-icon\":\"undo\"},on:{\"update:value\":function($event){_vm.localValue=$event},\"trailing-button-click\":_vm.undo,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.save.apply(null, arguments)},\"blur\":_vm.save}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<section>\n\t\t<NcSettingsSection :title=\"t('theming', 'Theming')\"\n\t\t\t:description=\"t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.')\"\n\t\t\t:doc-url=\"docUrl\"\n\t\t\tdata-admin-theming-settings>\n\t\t\t<div class=\"admin-theming\">\n\t\t\t\t<NcNoteCard v-if=\"!isThemable\"\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t\t:show-alert=\"true\">\n\t\t\t\t\t<p>{{ notThemableErrorMessage }}</p>\n\t\t\t\t</NcNoteCard>\n\n\t\t\t\t<!-- Name, web link, slogan... fields -->\n\t\t\t\t<TextField v-for=\"field in textFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:data-admin-theming-setting-field=\"field.name\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Primary color picker -->\n\t\t\t\t<ColorPickerField :name=\"colorPickerField.name\"\n\t\t\t\t\t:default-value=\"colorPickerField.defaultValue\"\n\t\t\t\t\t:display-name=\"colorPickerField.displayName\"\n\t\t\t\t\t:value.sync=\"colorPickerField.value\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Default background picker -->\n\t\t\t\t<FileInputField v-for=\"field in fileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\tdata-admin-theming-setting-background\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<div class=\"admin-theming__preview\">\n\t\t\t\t\t<div class=\"admin-theming__preview-logo\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t\t<NcSettingsSection :title=\"t('theming', 'Advanced options')\">\n\t\t\t<div class=\"admin-theming-advanced\">\n\t\t\t\t<TextField v-for=\"field in advancedTextFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<FileInputField v-for=\"field in advancedFileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<CheckboxField :name=\"userThemingField.name\"\n\t\t\t\t\t:value=\"userThemingField.value\"\n\t\t\t\t\t:default-value=\"userThemingField.defaultValue\"\n\t\t\t\t\t:display-name=\"userThemingField.displayName\"\n\t\t\t\t\t:label=\"userThemingField.label\"\n\t\t\t\t\t:description=\"userThemingField.description\"\n\t\t\t\t\tdata-admin-theming-setting-disable-user-theming\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<a v-if=\"!canThemeIcons\"\n\t\t\t\t\t:href=\"docUrlIcons\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t<em>{{ t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.') }}</em>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport {\n\tNcNoteCard,\n\tNcSettingsSection,\n} from '@nextcloud/vue'\nimport CheckboxField from './components/admin/CheckboxField.vue'\nimport ColorPickerField from './components/admin/ColorPickerField.vue'\nimport FileInputField from './components/admin/FileInputField.vue'\nimport TextField from './components/admin/TextField.vue'\n\nconst {\n\tbackgroundMime,\n\tcanThemeIcons,\n\tcolor,\n\tdocUrl,\n\tdocUrlIcons,\n\tfaviconMime,\n\tisThemable,\n\tlegalNoticeUrl,\n\tlogoheaderMime,\n\tlogoMime,\n\tname,\n\tnotThemableErrorMessage,\n\tprivacyPolicyUrl,\n\tslogan,\n\turl,\n\tuserThemingDisabled,\n} = loadState('theming', 'adminThemingParameters')\n\nconst textFields = [\n\t{\n\t\tname: 'name',\n\t\tvalue: name,\n\t\tdefaultValue: 'Nextcloud',\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Name'),\n\t\tplaceholder: t('theming', 'Name'),\n\t\tmaxlength: 250,\n\t},\n\t{\n\t\tname: 'url',\n\t\tvalue: url,\n\t\tdefaultValue: 'https://nextcloud.com',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Web link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'slogan',\n\t\tvalue: slogan,\n\t\tdefaultValue: t('theming', 'a safe home for all your data'),\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Slogan'),\n\t\tplaceholder: t('theming', 'Slogan'),\n\t\tmaxlength: 500,\n\t},\n]\n\nconst colorPickerField = {\n\tname: 'color',\n\tvalue: color,\n\tdefaultValue: '#0082c9',\n\tdisplayName: t('theming', 'Color'),\n}\n\nconst fileInputFields = [\n\t{\n\t\tname: 'logo',\n\t\tmimeName: 'logoMime',\n\t\tmimeValue: logoMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Logo'),\n\t\tariaLabel: t('theming', 'Upload new logo'),\n\t},\n\t{\n\t\tname: 'background',\n\t\tmimeName: 'backgroundMime',\n\t\tmimeValue: backgroundMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Background and login image'),\n\t\tariaLabel: t('theming', 'Upload new background and login image'),\n\t},\n]\n\nconst advancedTextFields = [\n\t{\n\t\tname: 'imprintUrl',\n\t\tvalue: legalNoticeUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Legal notice link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'privacyUrl',\n\t\tvalue: privacyPolicyUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Privacy policy link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n]\n\nconst advancedFileInputFields = [\n\t{\n\t\tname: 'logoheader',\n\t\tmimeName: 'logoheaderMime',\n\t\tmimeValue: logoheaderMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Header logo'),\n\t\tariaLabel: t('theming', 'Upload new header logo'),\n\t},\n\t{\n\t\tname: 'favicon',\n\t\tmimeName: 'faviconMime',\n\t\tmimeValue: faviconMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Favicon'),\n\t\tariaLabel: t('theming', 'Upload new favicon'),\n\t},\n]\n\nconst userThemingField = {\n\tname: 'disable-user-theming',\n\tvalue: userThemingDisabled,\n\tdefaultValue: false,\n\tdisplayName: t('theming', 'User settings'),\n\tlabel: t('theming', 'Disable user theming'),\n\tdescription: t('theming', 'Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.'),\n}\n\nexport default {\n\tname: 'AdminTheming',\n\n\tcomponents: {\n\t\tCheckboxField,\n\t\tColorPickerField,\n\t\tFileInputField,\n\t\tNcNoteCard,\n\t\tNcSettingsSection,\n\t\tTextField,\n\t},\n\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\ttextFields,\n\t\t\tcolorPickerField,\n\t\t\tfileInputFields,\n\t\t\tadvancedTextFields,\n\t\t\tadvancedFileInputFields,\n\t\t\tuserThemingField,\n\n\t\t\tcanThemeIcons,\n\t\t\tdocUrl,\n\t\t\tdocUrlIcons,\n\t\t\tisThemable,\n\t\t\tnotThemableErrorMessage,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\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!./AdminTheming.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!./AdminTheming.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!./AdminTheming.vue?vue&type=style&index=0&id=ce2595a6&lang=scss&scoped=true&\";\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!./AdminTheming.vue?vue&type=style&index=0&id=ce2595a6&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AdminTheming.vue?vue&type=template&id=ce2595a6&scoped=true&\"\nimport script from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminTheming.vue?vue&type=style&index=0&id=ce2595a6&lang=scss&scoped=true&\"\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 \"ce2595a6\",\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('section',[_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Theming'),\"description\":_vm.t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.'),\"doc-url\":_vm.docUrl,\"data-admin-theming-settings\":\"\"}},[_c('div',{staticClass:\"admin-theming\"},[(!_vm.isThemable)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.notThemableErrorMessage))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.textFields),function(field){return _c('TextField',{key:field.name,attrs:{\"data-admin-theming-setting-field\":field.name,\"default-value\":field.defaultValue,\"display-name\":field.displayName,\"maxlength\":field.maxlength,\"name\":field.name,\"placeholder\":field.placeholder,\"type\":field.type,\"value\":field.value},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('ColorPickerField',{attrs:{\"name\":_vm.colorPickerField.name,\"default-value\":_vm.colorPickerField.defaultValue,\"display-name\":_vm.colorPickerField.displayName,\"value\":_vm.colorPickerField.value,\"data-admin-theming-setting-primary-color\":\"\"},on:{\"update:value\":function($event){return _vm.$set(_vm.colorPickerField, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),_vm._l((_vm.fileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"aria-label\":field.ariaLabel,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"name\":field.name,\"data-admin-theming-setting-background\":\"\"},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('div',{staticClass:\"admin-theming__preview\"},[_c('div',{staticClass:\"admin-theming__preview-logo\"})])],2)]),_vm._v(\" \"),_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Advanced options')}},[_c('div',{staticClass:\"admin-theming-advanced\"},[_vm._l((_vm.advancedTextFields),function(field){return _c('TextField',{key:field.name,attrs:{\"name\":field.name,\"value\":field.value,\"default-value\":field.defaultValue,\"type\":field.type,\"display-name\":field.displayName,\"placeholder\":field.placeholder,\"maxlength\":field.maxlength},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_vm._l((_vm.advancedFileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"name\":field.name,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"aria-label\":field.ariaLabel},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('CheckboxField',{attrs:{\"name\":_vm.userThemingField.name,\"value\":_vm.userThemingField.value,\"default-value\":_vm.userThemingField.defaultValue,\"display-name\":_vm.userThemingField.displayName,\"label\":_vm.userThemingField.label,\"description\":_vm.userThemingField.description,\"data-admin-theming-setting-disable-user-theming\":\"\"},on:{\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),(!_vm.canThemeIcons)?_c('a',{attrs:{\"href\":_vm.docUrlIcons,\"rel\":\"noreferrer noopener\"}},[_c('em',[_vm._v(_vm._s(_vm.t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.')))])]):_vm._e()],2)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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 App from './AdminTheming.vue'\nimport { refreshStyles } from './helpers/refreshStyles.js'\n\nVue.prototype.OC = OC\nVue.prototype.t = t\n\nconst View = Vue.extend(App)\nconst theming = new View()\ntheming.$mount('#admin-theming')\ntheming.$on('update:theming', refreshStyles)\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\nexport const refreshStyles = () => {\n\t// Refresh server-side generated theming CSS\n\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\tconst url = new URL(theme.href)\n\t\turl.searchParams.set('v', Date.now())\n\t\tconst newTheme = theme.cloneNode()\n\t\tnewTheme.href = url.toString()\n\t\tnewTheme.onload = () => theme.remove()\n\t\tdocument.head.append(newTheme)\n\t})\n}\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../../core/img/logo/logo.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".admin-theming[data-v-ce2595a6],.admin-theming-advanced[data-v-ce2595a6]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-ce2595a6]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-ce2595a6]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \"))}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/AdminTheming.vue\"],\"names\":[],\"mappings\":\"AA2RA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.admin-theming,\\n.admin-theming-advanced {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 8px 0;\\n}\\n\\n.admin-theming {\\n\\t&__preview {\\n\\t\\twidth: 230px;\\n\\t\\theight: 140px;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-position: center;\\n\\t\\ttext-align: center;\\n\\t\\tmargin-top: 10px;\\n\\t\\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\\n\\t\\t But without the user variables. That way the admin can preview the render as guest*/\\n\\t\\t/* As guest, there is no user color color-background-plain */\\n\\t\\tbackground-color: var(--color-primary-default, #0082c9);\\n\\t\\t/* As guest, there is no user background (--image-background)\\n\\t\\t1. Empty background if defined\\n\\t\\t2. Else default background\\n\\t\\t3. Finally default gradient (should not happened, the background is always defined anyway) */\\n\\t\\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\\n\\n\\t\\t&-logo {\\n\\t\\t\\twidth: 20%;\\n\\t\\t\\theight: 20%;\\n\\t\\t\\tmargin-top: 20px;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\tbackground-size: contain;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\\n\\t\\t}\\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, \".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/CheckboxField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoED,qCACC,mCAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\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\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__description {\\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, \".field[data-v-105820ba]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-105820ba]{display:flex;gap:0 4px}.field__button[data-v-105820ba]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-105820ba]:hover{background-color:var(--color-primary-element-default-hover) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/ColorPickerField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoFD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CACA,sCACC,sEAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\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\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import './shared/field.scss';\\n\\n.field {\\n\\t// Override default NcButton styles\\n\\t&__button {\\n\\t\\twidth: 230px !important;\\n\\t\\tborder-radius: var(--border-radius-large) !important;\\n\\t\\tbackground-color: var(--color-primary-default) !important;\\n\\t\\t&:hover {\\n\\t\\t\\tbackground-color: var(--color-primary-element-default-hover) !important;\\n\\t\\t}\\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, \".field[data-v-1f1d42ee]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-1f1d42ee]{display:flex;gap:0 4px}.field__loading-icon[data-v-1f1d42ee]{width:44px;height:44px}.field__preview[data-v-1f1d42ee]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-1f1d42ee]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-1f1d42ee]{background-image:var(--image-favicon)}input[type=file][data-v-1f1d42ee]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/FileInputField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCmMD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\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\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__loading-icon {\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&__preview {\\n\\t\\twidth: 70px;\\n\\t\\theight: 70px;\\n\\t\\tbackground-size: contain;\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tmargin: 10px 0;\\n\\n\\t\\t&--logoheader {\\n\\t\\t\\tbackground-image: var(--image-logoheader);\\n\\t\\t}\\n\\n\\t\\t&--favicon {\\n\\t\\t\\tbackground-image: var(--image-favicon);\\n\\t\\t}\\n\\t}\\n}\\n\\ninput[type=\\\"file\\\"] {\\n\\tdisplay: none;\\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, \".field[data-v-21244e1d]{max-width:400px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/TextField.vue\"],\"names\":[],\"mappings\":\"AA4FA,wBACC,eAAA\",\"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.field {\\n\\tmax-width: 400px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// 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 = 5544;","__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\t5544: 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));","__webpack_require__.nc = undefined;","// 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, [7874], function() { return __webpack_require__(10787); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","styleRefreshFields","emits","data","showSuccess","errorMessage","computed","id","this","name","methods","reset","handleSuccess","setTimeout","includes","$emit","mixins","FieldMixin","watch","value","localValue","save","url","generateUrl","valueToPost","axios","setting","response","message","undo","defaultValue","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_h","$createElement","_c","_self","staticClass","attrs","_v","_s","displayName","on","$event","label","description","_e","debounceSave","t","scopedSlots","_u","key","fn","proxy","ariaLabel","activateLocalFilePicker","removeBackground","mimeValue","defaultMimeValue","class","ref","onChange","placeholder","type","maxlength","Boolean","indexOf","_k","keyCode","apply","arguments","docUrl","isThemable","notThemableErrorMessage","_l","field","$set","colorPickerField","mimeName","userThemingField","canThemeIcons","docUrlIcons","Vue","OC","theming","App","$mount","$on","document","head","querySelectorAll","forEach","theme","URL","href","searchParams","set","Date","now","newTheme","cloneNode","toString","onload","remove","append","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"theming-admin-theming.js?v=30747fab46e3fb725cf4","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/theming/src/mixins/admin/FieldMixin.js","webpack:///nextcloud/apps/theming/src/mixins/admin/TextValueMixin.js","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?4277","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?8981","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=template&id=17145f08&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?6dbd","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?977d","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=template&id=105820ba&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?843a","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?4d24","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=template&id=3d620660&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?91e3","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?c7b6","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=template&id=21244e1d&scoped=true&","webpack:///nextcloud/apps/theming/src/AdminTheming.vue","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?09e9","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?6138","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=template&id=4f7ac635&scoped=true&","webpack:///nextcloud/apps/theming/src/admin-settings.js","webpack:///nextcloud/apps/theming/src/helpers/refreshStyles.js","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=style&index=0&id=3d620660&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&","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/runtime/nonce","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 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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 styleRefreshFields = [\n\t'color',\n\t'logo',\n\t'background',\n\t'logoheader',\n\t'favicon',\n\t'disable-user-theming',\n]\n\nexport default {\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowSuccess: false,\n\t\t\terrorMessage: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `admin-theming-${this.name}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\treset() {\n\t\t\tthis.showSuccess = false\n\t\t\tthis.errorMessage = ''\n\t\t},\n\n\t\thandleSuccess() {\n\t\t\tthis.showSuccess = true\n\t\t\tsetTimeout(() => { this.showSuccess = false }, 2000)\n\t\t\tif (styleRefreshFields.includes(this.name)) {\n\t\t\t\tthis.$emit('update:theming')\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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 { generateUrl } from '@nextcloud/router'\n\nimport FieldMixin from './FieldMixin.js'\n\nexport default {\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\twatch: {\n\t\tvalue(value) {\n\t\t\tthis.localValue = value\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocalValue: this.value,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync save() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\t// Convert boolean to string as server expects string value\n\t\t\tconst valueToPost = this.localValue === true ? 'yes' : this.localValue === false ? 'no' : this.localValue\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t\tvalue: valueToPost,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.localValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.defaultValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxField.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!./CheckboxField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:checked.sync=\"localValue\"\n\t\t\t\t@update:checked=\"save\">\n\t\t\t\t{{ label }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</div>\n\n\t\t<p class=\"field__description\">{{ description }}</p>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport {\n\tNcCheckboxRadioSwitch,\n\tNcNoteCard,\n} from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'CheckboxField',\n\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t\tNcNoteCard,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\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!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&\";\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!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CheckboxField.vue?vue&type=template&id=17145f08&scoped=true&\"\nimport script from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CheckboxField.vue?vue&type=style&index=0&id=17145f08&lang=scss&scoped=true&\"\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 \"17145f08\",\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:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"id\":_vm.id,\"checked\":_vm.localValue},on:{\"update:checked\":[function($event){_vm.localValue=$event},_vm.save]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('p',{staticClass:\"field__description\"},[_vm._v(_vm._s(_vm.description))]),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcColorPicker :value.sync=\"localValue\"\n\t\t\t\t:advanced-fields=\"true\"\n\t\t\t\t@update:value=\"debounceSave\">\n\t\t\t\t<NcButton class=\"field__button\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:id=\"id\"\n\t\t\t\t\t:aria-label=\"t('theming', 'Select a custom color')\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color-picker>\n\t\t\t\t\t{{ value }}\n\t\t\t\t</NcButton>\n\t\t\t</NcColorPicker>\n\t\t\t<NcButton v-if=\"value !== defaultValue\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-primary-color-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport { debounce } from 'debounce'\nimport {\n\tNcButton,\n\tNcColorPicker,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'ColorPickerField',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcColorPicker,\n\t\tNcNoteCard,\n\t\tUndo,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tdebounceSave: debounce(async function() {\n\t\t\tawait this.save()\n\t\t}, 200),\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-element-default-hover) !important;\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!./ColorPickerField.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!./ColorPickerField.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!./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&\";\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!./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ColorPickerField.vue?vue&type=template&id=105820ba&scoped=true&\"\nimport script from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nexport * from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&lang=scss&scoped=true&\"\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 \"105820ba\",\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:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcColorPicker',{attrs:{\"value\":_vm.localValue,\"advanced-fields\":true},on:{\"update:value\":[function($event){_vm.localValue=$event},_vm.debounceSave]}},[_c('NcButton',{staticClass:\"field__button\",attrs:{\"type\":\"primary\",\"id\":_vm.id,\"aria-label\":_vm.t('theming', 'Select a custom color'),\"data-admin-theming-setting-primary-color-picker\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.value)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.value !== _vm.defaultValue)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-primary-color-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e()],1),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcButton type=\"secondary\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t\tdata-admin-theming-setting-file-picker\n\t\t\t\t@click=\"activateLocalFilePicker\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Upload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('theming', 'Upload') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showReset\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-file-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showRemove\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Remove background image')\"\n\t\t\t\tdata-admin-theming-setting-file-remove\n\t\t\t\t@click=\"removeBackground\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcLoadingIcon v-if=\"showLoading\"\n\t\t\t\tclass=\"field__loading-icon\"\n\t\t\t\t:size=\"20\" />\n\t\t</div>\n\n\t\t<div v-if=\"(name === 'logoheader' || name === 'favicon') && mimeValue !== defaultMimeValue\"\n\t\t\tclass=\"field__preview\"\n\t\t\t:class=\"{\n\t\t\t\t'field__preview--logoheader': name === 'logoheader',\n\t\t\t\t'field__preview--favicon': name === 'favicon',\n\t\t\t}\" />\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\n\t\t<input ref=\"input\"\n\t\t\ttype=\"file\"\n\t\t\t@change=\"onChange\">\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nimport {\n\tNcButton,\n\tNcLoadingIcon,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\nimport Upload from 'vue-material-design-icons/Upload.vue'\n\nimport FieldMixin from '../../mixins/admin/FieldMixin.js'\n\nexport default {\n\tname: 'FileInputField',\n\n\tcomponents: {\n\t\tDelete,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tNcNoteCard,\n\t\tUndo,\n\t\tUpload,\n\t},\n\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultMimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshowReset() {\n\t\t\treturn this.mimeValue !== this.defaultMimeValue\n\t\t},\n\n\t\tshowRemove() {\n\t\t\tif (this.name === 'background') {\n\t\t\t\tif (this.mimeValue.startsWith('image/')) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tif (this.mimeValue === this.defaultMimeValue) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t},\n\n\tmethods: {\n\t\tactivateLocalFilePicker() {\n\t\t\tthis.reset()\n\t\t\t// Set to null so that selecting the same file will trigger the change event\n\t\t\tthis.$refs.input.value = null\n\t\t\tthis.$refs.input.click()\n\t\t},\n\n\t\tasync onChange(e) {\n\t\t\tconst file = e.target.files[0]\n\n\t\t\tconst formData = new FormData()\n\t\t\tformData.append('key', this.name)\n\t\t\tformData.append('image', file)\n\n\t\t\tconst url = generateUrl('/apps/theming/ajax/uploadImage')\n\t\t\ttry {\n\t\t\t\tthis.showLoading = true\n\t\t\t\tawait axios.post(url, formData)\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.$emit('update:mime-value', file.type)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', this.defaultMimeValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync removeBackground() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t\tvalue: 'backgroundColor',\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', 'backgroundColor')\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileInputField.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!./FileInputField.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!./FileInputField.vue?vue&type=style&index=0&id=3d620660&lang=scss&scoped=true&\";\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!./FileInputField.vue?vue&type=style&index=0&id=3d620660&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileInputField.vue?vue&type=template&id=3d620660&scoped=true&\"\nimport script from \"./FileInputField.vue?vue&type=script&lang=js&\"\nexport * from \"./FileInputField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileInputField.vue?vue&type=style&index=0&id=3d620660&lang=scss&scoped=true&\"\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 \"3d620660\",\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:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcButton',{attrs:{\"type\":\"secondary\",\"id\":_vm.id,\"aria-label\":_vm.ariaLabel,\"data-admin-theming-setting-file-picker\":\"\"},on:{\"click\":_vm.activateLocalFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Upload',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Upload'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showReset)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-file-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e(),_vm._v(\" \"),(_vm.showRemove)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Remove background image'),\"data-admin-theming-setting-file-remove\":\"\"},on:{\"click\":_vm.removeBackground},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete',{attrs:{\"size\":20}})]},proxy:true}],null,false,2705356561)}):_vm._e(),_vm._v(\" \"),(_vm.showLoading)?_c('NcLoadingIcon',{staticClass:\"field__loading-icon\",attrs:{\"size\":20}}):_vm._e()],1),_vm._v(\" \"),((_vm.name === 'logoheader' || _vm.name === 'favicon') && _vm.mimeValue !== _vm.defaultMimeValue)?_c('div',{staticClass:\"field__preview\",class:{\n\t\t\t'field__preview--logoheader': _vm.name === 'logoheader',\n\t\t\t'field__preview--favicon': _vm.name === 'favicon',\n\t\t}}):_vm._e(),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e(),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"type\":\"file\"},on:{\"change\":_vm.onChange}})],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!./TextField.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!./TextField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<div class=\"field\">\n\t\t<NcTextField :value.sync=\"localValue\"\n\t\t\t:label=\"displayName\"\n\t\t\t:label-visible=\"true\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:type=\"type\"\n\t\t\t:maxlength=\"maxlength\"\n\t\t\t:spellcheck=\"false\"\n\t\t\t:success=\"showSuccess\"\n\t\t\t:error=\"Boolean(errorMessage)\"\n\t\t\t:helper-text=\"errorMessage\"\n\t\t\t:show-trailing-button=\"value !== defaultValue\"\n\t\t\ttrailing-button-icon=\"undo\"\n\t\t\t@trailing-button-click=\"undo\"\n\t\t\t@keydown.enter=\"save\"\n\t\t\t@blur=\"save\" />\n\t</div>\n</template>\n\n<script>\nimport { NcTextField } from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'TextField',\n\n\tcomponents: {\n\t\tNcTextField,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmaxlength: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.field {\n\tmax-width: 400px;\n}\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!./TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&\";\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!./TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TextField.vue?vue&type=template&id=21244e1d&scoped=true&\"\nimport script from \"./TextField.vue?vue&type=script&lang=js&\"\nexport * from \"./TextField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TextField.vue?vue&type=style&index=0&id=21244e1d&lang=scss&scoped=true&\"\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 \"21244e1d\",\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:\"field\"},[_c('NcTextField',{attrs:{\"value\":_vm.localValue,\"label\":_vm.displayName,\"label-visible\":true,\"placeholder\":_vm.placeholder,\"type\":_vm.type,\"maxlength\":_vm.maxlength,\"spellcheck\":false,\"success\":_vm.showSuccess,\"error\":Boolean(_vm.errorMessage),\"helper-text\":_vm.errorMessage,\"show-trailing-button\":_vm.value !== _vm.defaultValue,\"trailing-button-icon\":\"undo\"},on:{\"update:value\":function($event){_vm.localValue=$event},\"trailing-button-click\":_vm.undo,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.save.apply(null, arguments)},\"blur\":_vm.save}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\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\n<template>\n\t<section>\n\t\t<NcSettingsSection :title=\"t('theming', 'Theming')\"\n\t\t\t:description=\"t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.')\"\n\t\t\t:doc-url=\"docUrl\"\n\t\t\tdata-admin-theming-settings>\n\t\t\t<div class=\"admin-theming\">\n\t\t\t\t<NcNoteCard v-if=\"!isThemable\"\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t\t:show-alert=\"true\">\n\t\t\t\t\t<p>{{ notThemableErrorMessage }}</p>\n\t\t\t\t</NcNoteCard>\n\n\t\t\t\t<!-- Name, web link, slogan... fields -->\n\t\t\t\t<TextField v-for=\"field in textFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:data-admin-theming-setting-field=\"field.name\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Primary color picker -->\n\t\t\t\t<ColorPickerField :name=\"colorPickerField.name\"\n\t\t\t\t\t:default-value=\"colorPickerField.defaultValue\"\n\t\t\t\t\t:display-name=\"colorPickerField.displayName\"\n\t\t\t\t\t:value.sync=\"colorPickerField.value\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Default background picker -->\n\t\t\t\t<FileInputField v-for=\"field in fileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t:data-admin-theming-setting-file=\"field.name\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<div class=\"admin-theming__preview\" data-admin-theming-preview>\n\t\t\t\t\t<div class=\"admin-theming__preview-logo\" data-admin-theming-preview-logo />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t\t<NcSettingsSection :title=\"t('theming', 'Advanced options')\">\n\t\t\t<div class=\"admin-theming-advanced\">\n\t\t\t\t<TextField v-for=\"field in advancedTextFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<FileInputField v-for=\"field in advancedFileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<CheckboxField :name=\"userThemingField.name\"\n\t\t\t\t\t:value=\"userThemingField.value\"\n\t\t\t\t\t:default-value=\"userThemingField.defaultValue\"\n\t\t\t\t\t:display-name=\"userThemingField.displayName\"\n\t\t\t\t\t:label=\"userThemingField.label\"\n\t\t\t\t\t:description=\"userThemingField.description\"\n\t\t\t\t\tdata-admin-theming-setting-disable-user-theming\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<a v-if=\"!canThemeIcons\"\n\t\t\t\t\t:href=\"docUrlIcons\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t<em>{{ t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.') }}</em>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport {\n\tNcNoteCard,\n\tNcSettingsSection,\n} from '@nextcloud/vue'\nimport CheckboxField from './components/admin/CheckboxField.vue'\nimport ColorPickerField from './components/admin/ColorPickerField.vue'\nimport FileInputField from './components/admin/FileInputField.vue'\nimport TextField from './components/admin/TextField.vue'\n\nconst {\n\tbackgroundMime,\n\tcanThemeIcons,\n\tcolor,\n\tdocUrl,\n\tdocUrlIcons,\n\tfaviconMime,\n\tisThemable,\n\tlegalNoticeUrl,\n\tlogoheaderMime,\n\tlogoMime,\n\tname,\n\tnotThemableErrorMessage,\n\tprivacyPolicyUrl,\n\tslogan,\n\turl,\n\tuserThemingDisabled,\n} = loadState('theming', 'adminThemingParameters')\n\nconst textFields = [\n\t{\n\t\tname: 'name',\n\t\tvalue: name,\n\t\tdefaultValue: 'Nextcloud',\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Name'),\n\t\tplaceholder: t('theming', 'Name'),\n\t\tmaxlength: 250,\n\t},\n\t{\n\t\tname: 'url',\n\t\tvalue: url,\n\t\tdefaultValue: 'https://nextcloud.com',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Web link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'slogan',\n\t\tvalue: slogan,\n\t\tdefaultValue: t('theming', 'a safe home for all your data'),\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Slogan'),\n\t\tplaceholder: t('theming', 'Slogan'),\n\t\tmaxlength: 500,\n\t},\n]\n\nconst colorPickerField = {\n\tname: 'color',\n\tvalue: color,\n\tdefaultValue: '#0082c9',\n\tdisplayName: t('theming', 'Color'),\n}\n\nconst fileInputFields = [\n\t{\n\t\tname: 'logo',\n\t\tmimeName: 'logoMime',\n\t\tmimeValue: logoMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Logo'),\n\t\tariaLabel: t('theming', 'Upload new logo'),\n\t},\n\t{\n\t\tname: 'background',\n\t\tmimeName: 'backgroundMime',\n\t\tmimeValue: backgroundMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Background and login image'),\n\t\tariaLabel: t('theming', 'Upload new background and login image'),\n\t},\n]\n\nconst advancedTextFields = [\n\t{\n\t\tname: 'imprintUrl',\n\t\tvalue: legalNoticeUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Legal notice link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'privacyUrl',\n\t\tvalue: privacyPolicyUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Privacy policy link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n]\n\nconst advancedFileInputFields = [\n\t{\n\t\tname: 'logoheader',\n\t\tmimeName: 'logoheaderMime',\n\t\tmimeValue: logoheaderMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Header logo'),\n\t\tariaLabel: t('theming', 'Upload new header logo'),\n\t},\n\t{\n\t\tname: 'favicon',\n\t\tmimeName: 'faviconMime',\n\t\tmimeValue: faviconMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Favicon'),\n\t\tariaLabel: t('theming', 'Upload new favicon'),\n\t},\n]\n\nconst userThemingField = {\n\tname: 'disable-user-theming',\n\tvalue: userThemingDisabled,\n\tdefaultValue: false,\n\tdisplayName: t('theming', 'User settings'),\n\tlabel: t('theming', 'Disable user theming'),\n\tdescription: t('theming', 'Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.'),\n}\n\nexport default {\n\tname: 'AdminTheming',\n\n\tcomponents: {\n\t\tCheckboxField,\n\t\tColorPickerField,\n\t\tFileInputField,\n\t\tNcNoteCard,\n\t\tNcSettingsSection,\n\t\tTextField,\n\t},\n\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\ttextFields,\n\t\t\tcolorPickerField,\n\t\t\tfileInputFields,\n\t\t\tadvancedTextFields,\n\t\t\tadvancedFileInputFields,\n\t\t\tuserThemingField,\n\n\t\t\tcanThemeIcons,\n\t\t\tdocUrl,\n\t\t\tdocUrlIcons,\n\t\t\tisThemable,\n\t\t\tnotThemableErrorMessage,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\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!./AdminTheming.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!./AdminTheming.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!./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&lang=scss&scoped=true&\";\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!./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AdminTheming.vue?vue&type=template&id=4f7ac635&scoped=true&\"\nimport script from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&lang=scss&scoped=true&\"\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 \"4f7ac635\",\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('section',[_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Theming'),\"description\":_vm.t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.'),\"doc-url\":_vm.docUrl,\"data-admin-theming-settings\":\"\"}},[_c('div',{staticClass:\"admin-theming\"},[(!_vm.isThemable)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.notThemableErrorMessage))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.textFields),function(field){return _c('TextField',{key:field.name,attrs:{\"data-admin-theming-setting-field\":field.name,\"default-value\":field.defaultValue,\"display-name\":field.displayName,\"maxlength\":field.maxlength,\"name\":field.name,\"placeholder\":field.placeholder,\"type\":field.type,\"value\":field.value},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('ColorPickerField',{attrs:{\"name\":_vm.colorPickerField.name,\"default-value\":_vm.colorPickerField.defaultValue,\"display-name\":_vm.colorPickerField.displayName,\"value\":_vm.colorPickerField.value,\"data-admin-theming-setting-primary-color\":\"\"},on:{\"update:value\":function($event){return _vm.$set(_vm.colorPickerField, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),_vm._l((_vm.fileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"aria-label\":field.ariaLabel,\"data-admin-theming-setting-file\":field.name,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"name\":field.name},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('div',{staticClass:\"admin-theming__preview\",attrs:{\"data-admin-theming-preview\":\"\"}},[_c('div',{staticClass:\"admin-theming__preview-logo\",attrs:{\"data-admin-theming-preview-logo\":\"\"}})])],2)]),_vm._v(\" \"),_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Advanced options')}},[_c('div',{staticClass:\"admin-theming-advanced\"},[_vm._l((_vm.advancedTextFields),function(field){return _c('TextField',{key:field.name,attrs:{\"name\":field.name,\"value\":field.value,\"default-value\":field.defaultValue,\"type\":field.type,\"display-name\":field.displayName,\"placeholder\":field.placeholder,\"maxlength\":field.maxlength},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_vm._l((_vm.advancedFileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"name\":field.name,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"aria-label\":field.ariaLabel},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('CheckboxField',{attrs:{\"name\":_vm.userThemingField.name,\"value\":_vm.userThemingField.value,\"default-value\":_vm.userThemingField.defaultValue,\"display-name\":_vm.userThemingField.displayName,\"label\":_vm.userThemingField.label,\"description\":_vm.userThemingField.description,\"data-admin-theming-setting-disable-user-theming\":\"\"},on:{\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),(!_vm.canThemeIcons)?_c('a',{attrs:{\"href\":_vm.docUrlIcons,\"rel\":\"noreferrer noopener\"}},[_c('em',[_vm._v(_vm._s(_vm.t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.')))])]):_vm._e()],2)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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 App from './AdminTheming.vue'\nimport { refreshStyles } from './helpers/refreshStyles.js'\n\nVue.prototype.OC = OC\nVue.prototype.t = t\n\nconst View = Vue.extend(App)\nconst theming = new View()\ntheming.$mount('#admin-theming')\ntheming.$on('update:theming', refreshStyles)\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\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\nexport const refreshStyles = () => {\n\t// Refresh server-side generated theming CSS\n\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\tconst url = new URL(theme.href)\n\t\turl.searchParams.set('v', Date.now())\n\t\tconst newTheme = theme.cloneNode()\n\t\tnewTheme.href = url.toString()\n\t\tnewTheme.onload = () => theme.remove()\n\t\tdocument.head.append(newTheme)\n\t})\n}\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../../core/img/logo/logo.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".admin-theming[data-v-4f7ac635],.admin-theming-advanced[data-v-4f7ac635]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-4f7ac635]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-4f7ac635]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \"))}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/AdminTheming.vue\"],\"names\":[],\"mappings\":\"AA2RA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.admin-theming,\\n.admin-theming-advanced {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 8px 0;\\n}\\n\\n.admin-theming {\\n\\t&__preview {\\n\\t\\twidth: 230px;\\n\\t\\theight: 140px;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-position: center;\\n\\t\\ttext-align: center;\\n\\t\\tmargin-top: 10px;\\n\\t\\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\\n\\t\\t But without the user variables. That way the admin can preview the render as guest*/\\n\\t\\t/* As guest, there is no user color color-background-plain */\\n\\t\\tbackground-color: var(--color-primary-default, #0082c9);\\n\\t\\t/* As guest, there is no user background (--image-background)\\n\\t\\t1. Empty background if defined\\n\\t\\t2. Else default background\\n\\t\\t3. Finally default gradient (should not happened, the background is always defined anyway) */\\n\\t\\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\\n\\n\\t\\t&-logo {\\n\\t\\t\\twidth: 20%;\\n\\t\\t\\theight: 20%;\\n\\t\\t\\tmargin-top: 20px;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\tbackground-size: contain;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\\n\\t\\t}\\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, \".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/CheckboxField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoED,qCACC,mCAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\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\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__description {\\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, \".field[data-v-105820ba]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-105820ba]{display:flex;gap:0 4px}.field__button[data-v-105820ba]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-105820ba]:hover{background-color:var(--color-primary-element-default-hover) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/ColorPickerField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCoFD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CACA,sCACC,sEAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\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\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import './shared/field.scss';\\n\\n.field {\\n\\t// Override default NcButton styles\\n\\t&__button {\\n\\t\\twidth: 230px !important;\\n\\t\\tborder-radius: var(--border-radius-large) !important;\\n\\t\\tbackground-color: var(--color-primary-default) !important;\\n\\t\\t&:hover {\\n\\t\\t\\tbackground-color: var(--color-primary-element-default-hover) !important;\\n\\t\\t}\\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, \".field[data-v-3d620660]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-3d620660]{display:flex;gap:0 4px}.field__loading-icon[data-v-3d620660]{width:44px;height:44px}.field__preview[data-v-3d620660]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-3d620660]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-3d620660]{background-image:var(--image-favicon)}input[type=file][data-v-3d620660]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/FileInputField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCmMD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\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\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__loading-icon {\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&__preview {\\n\\t\\twidth: 70px;\\n\\t\\theight: 70px;\\n\\t\\tbackground-size: contain;\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tmargin: 10px 0;\\n\\n\\t\\t&--logoheader {\\n\\t\\t\\tbackground-image: var(--image-logoheader);\\n\\t\\t}\\n\\n\\t\\t&--favicon {\\n\\t\\t\\tbackground-image: var(--image-favicon);\\n\\t\\t}\\n\\t}\\n}\\n\\ninput[type=\\\"file\\\"] {\\n\\tdisplay: none;\\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, \".field[data-v-21244e1d]{max-width:400px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/TextField.vue\"],\"names\":[],\"mappings\":\"AA4FA,wBACC,eAAA\",\"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.field {\\n\\tmax-width: 400px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// 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 = 5544;","__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\t5544: 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));","__webpack_require__.nc = undefined;","// 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, [7874], function() { return __webpack_require__(77012); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","styleRefreshFields","emits","data","showSuccess","errorMessage","computed","id","this","name","methods","reset","handleSuccess","setTimeout","includes","$emit","mixins","FieldMixin","watch","value","localValue","save","url","generateUrl","valueToPost","axios","setting","response","message","undo","defaultValue","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_h","$createElement","_c","_self","staticClass","attrs","_v","_s","displayName","on","$event","label","description","_e","debounceSave","t","scopedSlots","_u","key","fn","proxy","ariaLabel","activateLocalFilePicker","removeBackground","mimeValue","defaultMimeValue","class","ref","onChange","placeholder","type","maxlength","Boolean","indexOf","_k","keyCode","apply","arguments","docUrl","isThemable","notThemableErrorMessage","_l","field","$set","colorPickerField","mimeName","userThemingField","canThemeIcons","docUrlIcons","Vue","OC","theming","App","$mount","$on","document","head","querySelectorAll","forEach","theme","URL","href","searchParams","set","Date","now","newTheme","cloneNode","toString","onload","remove","append","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 8ab0b464dc2..c4221db8757 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -39,6 +39,7 @@
"buffer": "^6.0.3",
"camelcase": "^6.3.0",
"clipboard": "^2.0.10",
+ "colord": "^2.9.3",
"core-js": "^3.24.0",
"davclient.js": "git+https://github.com/owncloud/davclient.js.git#0.2.1",
"debounce": "^1.2.1",
@@ -8245,11 +8246,9 @@
}
},
"node_modules/colord": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz",
- "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
- "dev": true,
- "peer": true
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
},
"node_modules/colorette": {
"version": "2.0.16",
@@ -30099,11 +30098,9 @@
"peer": true
},
"colord": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz",
- "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
- "dev": true,
- "peer": true
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
},
"colorette": {
"version": "2.0.16",
diff --git a/package.json b/package.json
index 4b39657d0b9..f48c8684095 100644
--- a/package.json
+++ b/package.json
@@ -62,6 +62,7 @@
"buffer": "^6.0.3",
"camelcase": "^6.3.0",
"clipboard": "^2.0.10",
+ "colord": "^2.9.3",
"core-js": "^3.24.0",
"davclient.js": "git+https://github.com/owncloud/davclient.js.git#0.2.1",
"debounce": "^1.2.1",