mirror of
https://github.com/nextcloud/server.git
synced 2026-02-03 20:41:22 -05:00
1 line
No EOL
71 KiB
Text
1 line
No EOL
71 KiB
Text
{"version":3,"file":"theming-settings-personal.mjs","sources":["../build/frontend/apps/theming/src/components/ThemePreviewItem.vue","../node_modules/vue-material-design-icons/Undo.vue","../build/frontend/apps/theming/src/components/UserSectionAppMenu.vue","../build/frontend/apps/theming/src/components/UserSectionBackground.vue","../build/frontend/apps/theming/src/components/UserSectionHotkeys.vue","../node_modules/colord/index.mjs","../node_modules/vue-material-design-icons/PaletteOutline.vue","../node_modules/vue-material-design-icons/UndoVariant.vue","../build/frontend/apps/theming/src/components/UserSectionPrimaryColor.vue","../build/frontend/apps/theming/src/views/UserTheming.vue","../build/frontend/apps/theming/src/settings-personal.ts"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { t } from '@nextcloud/l10n'\nimport { generateFilePath } from '@nextcloud/router'\nimport { computed } from 'vue'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\n\nexport interface ITheme {\n\tid: string\n\tname: string\n\ttitle: string\n\tdescription: string\n\tenableLabel: string\n\ttype: number // 1 = theme, 2 = font\n\tenabled: boolean\n}\n\nconst selected = defineModel<boolean>('selected', { required: true })\nconst props = defineProps<{\n\tenforced?: boolean\n\ttheme: ITheme\n\ttype: string\n\tunique: boolean\n}>()\n\nconst switchType = computed(() => props.unique ? 'switch' : 'radio')\nconst name = computed(() => !props.unique ? props.type : null)\nconst img = computed(() => generateFilePath('theming', 'img', props.theme.id + '.jpg'))\n\nconst checked = computed({\n\tget() {\n\t\treturn selected.value\n\t},\n\n\tset(checked) {\n\t\tif (props.enforced) {\n\t\t\treturn\n\t\t}\n\t\tselected.value = props.unique ? checked : true\n\t},\n})\n\n/**\n * Handle toggle click\n */\nfunction onToggle() {\n\tif (props.enforced) {\n\t\treturn\n\t}\n\n\tif (switchType.value === 'radio') {\n\t\tchecked.value = true\n\t\treturn\n\t}\n\n\t// Invert state\n\tchecked.value = !checked.value\n}\n</script>\n\n<template>\n\t<div :class=\"'theming__preview--' + theme.id\" class=\"theming__preview\">\n\t\t<div class=\"theming__preview-image\" :style=\"{ backgroundImage: 'url(' + img + ')' }\" @click=\"onToggle\" />\n\t\t<div class=\"theming__preview-description\">\n\t\t\t<h3>{{ theme.title }}</h3>\n\t\t\t<p class=\"theming__preview-explanation\">\n\t\t\t\t{{ theme.description }}\n\t\t\t</p>\n\t\t\t<span v-if=\"enforced\" class=\"theming__preview-warning\" role=\"note\">\n\t\t\t\t{{ t('theming', 'Theme selection is enforced') }}\n\t\t\t</span>\n\n\t\t\t<!-- Only show checkbox if we can change themes -->\n\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\tv-show=\"!enforced\"\n\t\t\t\tv-model=\"checked\"\n\t\t\t\tclass=\"theming__preview-toggle\"\n\t\t\t\t:disabled=\"enforced\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:type=\"switchType\">\n\t\t\t\t{{ theme.enableLabel }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use 'sass:math';\n\n.theming__preview {\n\t// We make previews on 16/10 screens\n\t--ratio: 16;\n\tposition: relative;\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\n\t&,\n\t* {\n\t\tuser-select: none;\n\t}\n\n\t&-image {\n\t\tflex-basis: calc(16px * var(--ratio));\n\t\tflex-shrink: 0;\n\t\theight: calc(10px * var(--ratio));\n\t\tmargin-inline-end: var(--gap);\n\t\tcursor: pointer;\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: top left;\n\t\tbackground-size: cover;\n\t}\n\n\t&-explanation {\n\t\tmargin-bottom: 10px;\n\t}\n\n\t&-description {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\th3 {\n\t\t\tfont-weight: bold;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\tlabel {\n\t\t\tpadding: 12px 0;\n\t\t}\n\t}\n\n\t&-warning {\n\t\tbackground-color: var(--color-warning);\n\t\tcolor: var(--color-warning-text);\n\t}\n}\n\n@media (max-width: math.div(1024px, 1.5)) {\n\t.theming__preview {\n\t\tflex-direction: column;\n\n\t\t&-image {\n\t\t\tmargin: 0;\n\t\t}\n\t}\n}\n\n</style>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon undo-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"UndoIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { INavigationEntry } from '../../../../core/src/types/navigation.d.ts'\nimport type { IApp } from './AppOrderSelector.vue'\n\nimport axios from '@nextcloud/axios'\nimport { showError } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { t } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { computed, ref } from 'vue'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\nimport NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'\nimport IconUndo from 'vue-material-design-icons/Undo.vue'\nimport AppOrderSelector from './AppOrderSelector.vue'\nimport { logger } from '../utils/logger.ts'\n\n/** The app order user setting */\ntype IAppOrder = Record<string, { order: number, app?: string }>\n\n/** OCS responses */\ninterface IOCSResponse<T> {\n\tocs: {\n\t\tmeta: unknown\n\t\tdata: T\n\t}\n}\n\nconst {\n\t/** The app order currently defined by the user */\n\tuserAppOrder,\n\t/** The enforced default app set by the administrator (if any) */\n\tenforcedDefaultApp,\n} = loadState<{ userAppOrder: IAppOrder, enforcedDefaultApp: string }>('theming', 'navigationBar')\n\n/**\n * Array of all available apps, it is set by a core controller for the app menu, so it is always available\n */\nconst initialAppOrder = loadState<INavigationEntry[]>('core', 'apps')\n\t.filter(({ type }) => type === 'link')\n\t.map((app) => ({ ...app, label: app.name, default: app.default && app.id === enforcedDefaultApp }))\n\n/**\n * The current apporder (sorted by user)\n */\nconst appOrder = ref([...initialAppOrder])\n\n/**\n * Check if a custom app order is used or the default is shown\n */\nconst hasCustomAppOrder = ref(!Array.isArray(userAppOrder) || Object.values(userAppOrder).length > 0)\n\n/**\n * Track if the app order has changed, so the user can be informed to reload\n */\nconst hasAppOrderChanged = computed(() => initialAppOrder.some(({ id }, index) => id !== appOrder.value[index]?.id))\n\n/** ID of the \"app order has changed\" NcNodeCard, used for the aria-details of the apporder */\nconst elementIdAppOrderChanged = 'theming-apporder-changed-infocard'\n\n/** ID of the \"you can not change the default app\" NcNodeCard, used for the aria-details of the apporder */\nconst elementIdEnforcedDefaultApp = 'theming-apporder-changed-infocard'\n\n/**\n * The aria-details value of the app order selector\n * contains the space separated list of element ids of NcNoteCards\n */\nconst ariaDetailsAppOrder = computed(() => (hasAppOrderChanged.value ? `${elementIdAppOrderChanged} ` : '') + (enforcedDefaultApp ? elementIdEnforcedDefaultApp : ''))\n\n/**\n * Update the app order, called when the user sorts entries\n *\n * @param value The new app order value\n */\nasync function updateAppOrder(value: IApp[]) {\n\tconst order: IAppOrder = {}\n\tvalue.forEach(({ app, id }, index) => {\n\t\torder[id] = { order: index, app }\n\t})\n\n\ttry {\n\t\tawait saveSetting('apporder', order)\n\t\tappOrder.value = value as never\n\t\thasCustomAppOrder.value = true\n\t} catch (error) {\n\t\tlogger.error('Could not set the app order', { error })\n\t\tshowError(t('theming', 'Could not set the app order'))\n\t}\n}\n\n/**\n * Reset the app order to the default\n */\nasync function resetAppOrder() {\n\ttry {\n\t\tawait saveSetting('apporder', [])\n\t\thasCustomAppOrder.value = false\n\n\t\t// Reset our app order list\n\t\tconst { data } = await axios.get<IOCSResponse<INavigationEntry[]>>(generateOcsUrl('/core/navigation/apps'), {\n\t\t\theaders: {\n\t\t\t\t'OCS-APIRequest': 'true',\n\t\t\t},\n\t\t})\n\t\tappOrder.value = data.ocs.data.map((app) => ({ ...app, label: app.name, default: app.default && app.app === enforcedDefaultApp }))\n\t} catch (error) {\n\t\tlogger.error('Could not reset the app order', { error })\n\t\tshowError(t('theming', 'Could not reset the app order'))\n\t}\n}\n\n/**\n * @param key - The config key\n * @param value - The config value\n */\nasync function saveSetting(key: string, value: unknown) {\n\tconst url = generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\tappId: 'core',\n\t\tconfigKey: key,\n\t})\n\treturn await axios.post(url, {\n\t\tconfigValue: JSON.stringify(value),\n\t})\n}\n</script>\n\n<template>\n\t<NcSettingsSection :name=\"t('theming', 'Navigation bar settings')\">\n\t\t<p>\n\t\t\t{{ t('theming', 'You can configure the app order used for the navigation bar. The first entry will be the default app, opened after login or when clicking on the logo.') }}\n\t\t</p>\n\t\t<NcNoteCard v-if=\"enforcedDefaultApp\" :id=\"elementIdEnforcedDefaultApp\" type=\"info\">\n\t\t\t{{ t('theming', 'The default app can not be changed because it was configured by the administrator.') }}\n\t\t</NcNoteCard>\n\t\t<NcNoteCard v-if=\"hasAppOrderChanged\" :id=\"elementIdAppOrderChanged\" type=\"info\">\n\t\t\t{{ t('theming', 'The app order was changed, to see it in action you have to reload the page.') }}\n\t\t</NcNoteCard>\n\n\t\t<AppOrderSelector\n\t\t\t:class=\"$style.userSectionAppMenu__selector\"\n\t\t\t:aria-details=\"ariaDetailsAppOrder\"\n\t\t\t:modelValue=\"appOrder\"\n\t\t\t@update:modelValue=\"updateAppOrder\" />\n\n\t\t<NcButton\n\t\t\tdata-test-id=\"btn-apporder-reset\"\n\t\t\t:disabled=\"!hasCustomAppOrder\"\n\t\t\tvariant=\"tertiary\"\n\t\t\t@click=\"resetAppOrder\">\n\t\t\t<template #icon>\n\t\t\t\t<IconUndo :size=\"20\" />\n\t\t\t</template>\n\t\t\t{{ t('theming', 'Reset default app order') }}\n\t\t</NcButton>\n\t</NcSettingsSection>\n</template>\n\n<style module>\n.userSectionAppMenu__selector {\n\tmargin-block: 12px;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { mdiCheck, mdiImageEditOutline, mdiPaletteOutline, mdiUndo } from '@mdi/js'\nimport axios from '@nextcloud/axios'\nimport { getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { t } from '@nextcloud/l10n'\nimport { generateFilePath, generateUrl } from '@nextcloud/router'\nimport { ref } from 'vue'\nimport NcColorPicker from '@nextcloud/vue/components/NcColorPicker'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'\nimport { getTextColor } from '../utils/color.ts'\n\ninterface IThemingDefaults {\n\tbackgroundImage: string\n\tbackgroundColor: string\n\tbackgroundMime: string\n\tdefaultShippedBackground: string\n}\n\ninterface IThemingData {\n\tbackgroundImage: string\n\tbackgroundColor: string\n\tbackgroundMime: string\n}\n\ninterface ShippedBackground {\n\tattribution: string\n\tdescription: string\n\tattribution_url: string\n\tdark_variant: string\n\tbackground_color: string\n\tprimary_color: string\n}\n\nconst emit = defineEmits<{\n\trefreshStyles: []\n}>()\n\nconst SHIPPED_BACKGROUNDS = loadState<Record<string, ShippedBackground>>('theming', 'shippedBackgrounds')\nconst THEMING_DEFAULTS = loadState<IThemingDefaults>('theming', 'themingDefaults')\nconst DEFAULT_BACKGROUND_IMAGE = `url('${THEMING_DEFAULTS.backgroundImage}')`\n\nconst loading = ref<false | 'custom' | 'color' | 'default' | keyof typeof SHIPPED_BACKGROUNDS>(false)\nconst currentTheming = ref(structuredClone(loadState<IThemingData>('theming', 'data')))\nconst currentBackgroundImage = ref(loadState<string>('theming', 'userBackgroundImage'))\n\nconst shippedBackgrounds = Object.keys(SHIPPED_BACKGROUNDS)\n\t.filter((background) => {\n\t\t// If the admin did not changed the global background\n\t\t// let's hide the default background to not show it twice\n\t\treturn background !== THEMING_DEFAULTS.defaultShippedBackground\n\t\t\t|| THEMING_DEFAULTS.backgroundMime !== ''\n\t})\n\t.map((fileName) => {\n\t\treturn {\n\t\t\tname: fileName,\n\t\t\turl: prefixWithBaseUrl(fileName),\n\t\t\tpreview: prefixWithBaseUrl('preview/' + fileName),\n\t\t\tdetails: SHIPPED_BACKGROUNDS[fileName]!,\n\t\t}\n\t})\n\n/**\n * Add the theming app prefix to the url\n *\n * @param url - The url to preix\n */\nfunction prefixWithBaseUrl(url: string) {\n\treturn generateFilePath('theming', '', 'img/background/') + url\n}\n\n/**\n * Update local state\n *\n * @param data - Destructuring object\n * @param data.backgroundColor - Background color value\n * @param data.backgroundImage - Background image value\n * @param data.version - Cache buster number\n * @see https://github.com/nextcloud/server/blob/c78bd45c64d9695724fc44fe8453a88824b85f2f/apps/theming/lib/Controller/UserThemeController.php#L187-L191\n */\nasync function update(data: { backgroundColor: string, backgroundImage: string, version: string }) {\n\t// Update state\n\tcurrentBackgroundImage.value = data.backgroundImage\n\tcurrentTheming.value.backgroundColor = data.backgroundColor\n\n\t// Notify parent and reload style\n\temit('refreshStyles')\n\tloading.value = false\n}\n\n/**\n * Set background to default\n */\nasync function setDefault() {\n\tloading.value = 'default'\n\tconst result = await axios.post(generateUrl('/apps/theming/background/default'))\n\tupdate(result.data)\n}\n\n/**\n * Set background to a shipped background\n *\n * @param shipped - The shipped background name\n */\nasync function setShipped(shipped: string) {\n\tloading.value = shipped\n\tconst result = await axios.post(generateUrl('/apps/theming/background/shipped'), { value: shipped })\n\tupdate(result.data)\n}\n\n/**\n * Set background to a Nextcloud file\n *\n * @param path - Path to the file\n */\nasync function setFile(path: string) {\n\tloading.value = 'custom'\n\tconst result = await axios.post(generateUrl('/apps/theming/background/custom'), { value: path })\n\tupdate(result.data)\n}\n\n/**\n * Set a plain color as background\n *\n * @param color - The hex color\n */\nasync function pickColor(color?: string) {\n\tif (!color) {\n\t\treturn\n\t}\n\n\tloading.value = 'color'\n\tconst { data } = await axios.post(generateUrl('/apps/theming/background/color'), { color: color || '#0082c9' })\n\tupdate(data)\n}\n\n/**\n * Open file picker to select a custom background\n */\nasync function pickFile() {\n\tawait getFilePickerBuilder(t('theming', 'Select a background from your files'))\n\t\t.allowDirectories(false)\n\t\t.setFilter((node) => node.mime.startsWith('image/'))\n\t\t.setMultiSelect(false)\n\t\t.addButton({\n\t\t\tlabel: t('theming', 'Select background'),\n\t\t\tcallback: ([node]) => {\n\t\t\t\tsetFile(node!.path)\n\t\t\t},\n\t\t\tvariant: 'primary',\n\t\t})\n\t\t.build()\n\t\t.pick()\n}\n</script>\n\n<template>\n\t<NcSettingsSection\n\t\tclass=\"background\"\n\t\t:name=\"t('theming', 'Background and color')\"\n\t\t:description=\"t('theming', 'The background can be set to an image from the default set, a custom uploaded image, or a plain color.')\">\n\t\t<fieldset>\n\t\t\t<legend class=\"hidden-visually\">\n\t\t\t\t{{ t('theming', 'Background and color') }}\n\t\t\t</legend>\n\n\t\t\t<div :class=\"$style.backgroundSelect\">\n\t\t\t\t<!-- Custom background -->\n\t\t\t\t<button\n\t\t\t\t\t:aria-disabled=\"loading === 'custom'\"\n\t\t\t\t\t:aria-pressed=\"currentBackgroundImage === 'custom'\"\n\t\t\t\t\t:aria-label=\"t('theming', 'Custom background')\"\n\t\t\t\t\t:title=\"t('theming', 'Custom background')\"\n\t\t\t\t\tclass=\"button-vue\"\n\t\t\t\t\t:class=\"[$style.backgroundSelect__entry, $style.backgroundSelect__entryFilePicker]\"\n\t\t\t\t\t@click=\"pickFile\">\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading === 'custom'\" />\n\t\t\t\t\t<NcIconSvgWrapper v-else :path=\"currentBackgroundImage === 'custom' ? mdiCheck : mdiImageEditOutline\" />\n\t\t\t\t</button>\n\n\t\t\t\t<!-- Custom color picker -->\n\t\t\t\t<NcColorPicker v-model=\"currentTheming.backgroundColor\" @submit=\"pickColor\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"button-vue\"\n\t\t\t\t\t\t:class=\"[$style.backgroundSelect__entry, $style.backgroundSelect__entryColor]\"\n\t\t\t\t\t\t:aria-disabled=\"loading === 'color'\"\n\t\t\t\t\t\t:aria-pressed=\"currentBackgroundImage === 'color'\"\n\t\t\t\t\t\t:aria-label=\"t('theming', 'Plain background') /* TRANSLATORS: Background using a single color */\"\n\t\t\t\t\t\t:title=\"t('theming', 'Plain background') /* TRANSLATORS: Background using a single color */\"\n\t\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t\tbackgroundColor: currentTheming.backgroundColor,\n\t\t\t\t\t\t\t'--color-content': getTextColor(currentTheming.backgroundColor),\n\t\t\t\t\t\t}\">\n\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading === 'color'\" />\n\t\t\t\t\t\t<NcIconSvgWrapper v-else :path=\"currentBackgroundImage === 'color' ? mdiCheck : mdiPaletteOutline\" />\n\t\t\t\t\t</button>\n\t\t\t\t</NcColorPicker>\n\n\t\t\t\t<!-- Default background -->\n\t\t\t\t<button\n\t\t\t\t\tclass=\"button-vue\"\n\t\t\t\t\t:class=\"[$style.backgroundSelect__entry, $style.backgroundSelect__entryDefault]\"\n\t\t\t\t\t:aria-disabled=\"loading === 'default'\"\n\t\t\t\t\t:aria-pressed=\"currentBackgroundImage === 'default'\"\n\t\t\t\t\t:aria-label=\"t('theming', 'Default background')\"\n\t\t\t\t\t:title=\"t('theming', 'Default background')\"\n\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t'--color-content': getTextColor(THEMING_DEFAULTS.backgroundColor),\n\t\t\t\t\t}\"\n\t\t\t\t\t@click=\"setDefault\">\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading === 'default'\" />\n\t\t\t\t\t<NcIconSvgWrapper v-else :path=\"currentBackgroundImage === 'default' ? mdiCheck : mdiUndo\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<!-- Background set selection -->\n\t\t\t<fieldset :class=\"$style.backgroundSelect\">\n\t\t\t\t<label class=\"hidden-visually\">\n\t\t\t\t\t{{ t('theming', 'Default shipped background images') }}\n\t\t\t\t</label>\n\t\t\t\t<button\n\t\t\t\t\tv-for=\"shippedBackground in shippedBackgrounds\"\n\t\t\t\t\t:key=\"shippedBackground.name\"\n\t\t\t\t\t:title=\"shippedBackground.details.attribution\"\n\t\t\t\t\t:aria-label=\"shippedBackground.details.description\"\n\t\t\t\t\t:aria-pressed=\"currentBackgroundImage === shippedBackground.name\"\n\t\t\t\t\tclass=\"button-vue\"\n\t\t\t\t\t:class=\"$style.backgroundSelect__entry\"\n\t\t\t\t\t:style=\"{\n\t\t\t\t\t\tbackgroundImage: 'url(' + shippedBackground.preview + ')',\n\t\t\t\t\t}\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t@click=\"setShipped(shippedBackground.name)\">\n\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\tv-if=\"currentBackgroundImage === shippedBackground.name\"\n\t\t\t\t\t\t:class=\"$style.backgroundSelect__entryIcon\"\n\t\t\t\t\t\t:path=\"mdiCheck\" />\n\t\t\t\t</button>\n\t\t\t</fieldset>\n\t\t</fieldset>\n\t</NcSettingsSection>\n</template>\n\n<style module lang=\"css\">\n.backgroundSelect {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n\n\t.backgroundSelect__entry {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\toverflow: hidden;\n\t\theight: 96px;\n\t\twidth: 168px;\n\t\tmargin: var(--default-grid-baseline);\n\t\ttext-align: center;\n\t\toverflow-wrap: break-word;\n\t\thyphens: auto;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-position: center center;\n\t\tbackground-size: cover;\n\n\t\t--color-content: var(--color-background-plain-text);\n\t}\n\n\t.backgroundSelect__entry:hover,\n\t.backgroundSelect__entry:focus {\n\t\toutline: 2px solid var(--color-main-text) !important;\n\t\tborder-color: var(--color-main-background) !important;\n\t}\n\n\t.backgroundSelect__entry > *{\n\t\tcolor: var(--color-content);\n\t\topacity: 1;\n\t}\n\n\t.backgroundSelect__entryColor {\n\t\tbackground-color: var(--color-background-plain);\n\t}\n\n\t.backgroundSelect__entryFilePicker {\n\t\t--color-content: var(--color-main-text);\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t.backgroundSelect__entryFilePicker[aria-pressed=\"true\"] {\n\t\t--color-content: var(--color-background-plain-text);\n\t\tbackground-image: var(--image-background);\n\t}\n\n\t.backgroundSelect__entryDefault {\n\t\tbackground-image: linear-gradient(to bottom, rgba(23, 23, 23, 0.5), rgba(23, 23, 23, 0.5)), v-bind(DEFAULT_BACKGROUND_IMAGE);\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { t } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { ref, watch } from 'vue'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'\n\nconst shortcutsDisabled = ref(loadState('theming', 'shortcutsDisabled', false))\nwatch(shortcutsDisabled, updateHotkeyState)\n\n/**\n * Update the hotkey state on the server\n */\nasync function updateHotkeyState() {\n\tconst url = generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\tappId: 'theming',\n\t\tconfigKey: 'shortcuts_disabled',\n\t})\n\n\tif (shortcutsDisabled.value) {\n\t\tawait axios.post(url, {\n\t\t\tconfigValue: 'yes',\n\t\t})\n\t} else {\n\t\tawait axios.delete(url)\n\t}\n}\n</script>\n\n<template>\n\t<NcSettingsSection\n\t\t:name=\"t('theming', 'Keyboard shortcuts')\"\n\t\t:description=\"t('theming', 'In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.')\">\n\t\t<NcCheckboxRadioSwitch\n\t\t\tv-model=\"shortcutsDisabled\"\n\t\t\tclass=\"theming__preview-toggle\"\n\t\t\ttype=\"switch\">\n\t\t\t{{ t('theming', 'Disable all keyboard shortcuts') }}\n\t\t</NcCheckboxRadioSwitch>\n\t</NcSettingsSection>\n</template>\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return\"string\"==typeof r?N(r.trim(),y.string):\"object\"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon palette-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2C17.5,2 22,6 22,11A6,6 0 0,1 16,17H14.2C13.9,17 13.7,17.2 13.7,17.5C13.7,17.6 13.8,17.7 13.8,17.8C14.2,18.3 14.4,18.9 14.4,19.5C14.5,20.9 13.4,22 12,22M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C12.3,20 12.5,19.8 12.5,19.5C12.5,19.3 12.4,19.2 12.4,19.1C12,18.6 11.8,18.1 11.8,17.5C11.8,16.1 12.9,15 14.3,15H16A4,4 0 0,0 20,11C20,7.1 16.4,4 12,4M6.5,10C7.3,10 8,10.7 8,11.5C8,12.3 7.3,13 6.5,13C5.7,13 5,12.3 5,11.5C5,10.7 5.7,10 6.5,10M9.5,6C10.3,6 11,6.7 11,7.5C11,8.3 10.3,9 9.5,9C8.7,9 8,8.3 8,7.5C8,6.7 8.7,6 9.5,6M14.5,6C15.3,6 16,6.7 16,7.5C16,8.3 15.3,9 14.5,9C13.7,9 13,8.3 13,7.5C13,6.7 13.7,6 14.5,6M17.5,10C18.3,10 19,10.7 19,11.5C19,12.3 18.3,13 17.5,13C16.7,13 16,12.3 16,11.5C16,10.7 16.7,10 17.5,10Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"PaletteOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon undo-variant-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M13.5,7A6.5,6.5 0 0,1 20,13.5A6.5,6.5 0 0,1 13.5,20H10V18H13.5C16,18 18,16 18,13.5C18,11 16,9 13.5,9H7.83L10.91,12.09L9.5,13.5L4,8L9.5,2.5L10.92,3.91L7.83,7H13.5M6,18H8V20H6V18Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"UndoVariantIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport axios from '@nextcloud/axios'\nimport { showError } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { t } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { colord } from 'colord'\nimport debounce from 'debounce'\nimport { computed, ref, useTemplateRef, watch } from 'vue'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcColorPicker from '@nextcloud/vue/components/NcColorPicker'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'\nimport IconColorPalette from 'vue-material-design-icons/PaletteOutline.vue'\nimport IconUndo from 'vue-material-design-icons/UndoVariant.vue'\nimport { logger } from '../utils/logger.ts'\n\nconst emit = defineEmits<{\n\trefreshStyles: []\n}>()\n\ndefineExpose({ reload })\n\nconst { primaryColor: initialPrimaryColor, defaultPrimaryColor } = loadState('theming', 'data', { primaryColor: '#0082c9', defaultPrimaryColor: '#0082c9' })\n\nconst triggerElement = useTemplateRef('trigger')\n\nconst loading = ref(false)\nconst primaryColor = ref(initialPrimaryColor)\nwatch(primaryColor, debounce((newColor) => {\n\tonUpdate(newColor)\n}, 1000))\n\nconst isDefaultPrimaryColor = computed(() => colord(primaryColor.value).isEqual(colord(defaultPrimaryColor)))\n\n/**\n * Global styles are reloaded so we might need to update the current value\n */\nfunction reload() {\n\tlet newColor = window.getComputedStyle(triggerElement.value!).backgroundColor\n\t// sometimes the browser returns the color in the \"rgb(255, 132, 234)\" format\n\tconst rgbMatch = newColor.replaceAll(/\\s/g, '').match(/^rgba?\\((\\d+),(\\d+),(\\d+)/)\n\tif (rgbMatch) {\n\t\tnewColor = `#${numberToHex(rgbMatch[1]!)}${numberToHex(rgbMatch[2]!)}${numberToHex(rgbMatch[3]!)}`\n\t}\n\tif (newColor.toLowerCase() !== primaryColor.value.toLowerCase()) {\n\t\tprimaryColor.value = newColor\n\t}\n}\n\n/**\n * Reset primary color to default\n */\nfunction onReset() {\n\tprimaryColor.value = defaultPrimaryColor\n\tonUpdate(null)\n}\n\n/**\n * Handle saving the new primary color on the server\n *\n * @param value - The new value\n */\nasync function onUpdate(value: string | null) {\n\tloading.value = true\n\tconst url = generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\tappId: 'theming',\n\t\tconfigKey: 'primary_color',\n\t})\n\ttry {\n\t\tif (value) {\n\t\t\tawait axios.post(url, {\n\t\t\t\tconfigValue: value,\n\t\t\t})\n\t\t} else {\n\t\t\tawait axios.delete(url)\n\t\t}\n\t\temit('refreshStyles')\n\t} catch (error) {\n\t\tlogger.error('Could not update primary color', { error })\n\t\tshowError(t('theming', 'Could not set primary color'))\n\t}\n\tloading.value = false\n}\n\n/**\n * @param numeric - Numeric string to convert to hex\n */\nfunction numberToHex(numeric: string): string {\n\tconst parsed = Number.parseInt(numeric)\n\treturn parsed.toString(16).padStart(2, '0')\n}\n</script>\n\n<template>\n\t<NcSettingsSection\n\t\t:name=\"t('theming', 'Primary color')\"\n\t\t:description=\"t('theming', 'Set a primary color to highlight important elements. The color used for elements such as primary buttons might differ a bit as it gets adjusted to fulfill accessibility requirements.')\">\n\t\t<div :class=\"$style.userPrimaryColor\">\n\t\t\t<NcColorPicker\n\t\t\t\tv-model=\"primaryColor\"\n\t\t\t\tdata-user-theming-primary-color>\n\t\t\t\t<button\n\t\t\t\t\tref=\"trigger\"\n\t\t\t\t\t:class=\"$style.userPrimaryColor__trigger\"\n\t\t\t\t\t:style=\"{ 'background-color': primaryColor }\"\n\t\t\t\t\tdata-user-theming-primary-color-trigger>\n\t\t\t\t\t{{ t('theming', 'Primary color') }}\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" />\n\t\t\t\t\t<IconColorPalette v-else :size=\"20\" />\n\t\t\t\t</button>\n\t\t\t</NcColorPicker>\n\t\t\t<NcButton variant=\"tertiary\" :disabled=\"isDefaultPrimaryColor\" @click=\"onReset\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconUndo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('theming', 'Reset primary color') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</NcSettingsSection>\n</template>\n\n<style module lang=\"scss\">\n.userPrimaryColor {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: wrap;\n\tgap: 12px;\n}\n\n.userPrimaryColor .userPrimaryColor__trigger {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 8px;\n\tmargin: 0 !important;\n\n\tbackground-color: var(--color-primary);\n\tcolor: var(--color-primary-text);\n\theight: 96px;\n\twidth: 168px;\n\n\toverflow-wrap: break-word;\n\thyphens: auto;\n\n\tborder: 2px solid var(--color-main-background);\n\tborder-radius: var(--border-radius-large);\n\n\t&:active {\n\t\tbackground-color: var(--color-primary-hover) !important;\n\t}\n\n\t&:hover,\n\t&:focus,\n\t&:focus-visible {\n\t\tborder-color: var(--color-main-background) !important;\n\t\toutline: 2px solid var(--color-main-text) !important;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcSettingsSection\n\t\t:name=\"t('theming', 'Appearance and accessibility settings')\"\n\t\tclass=\"theming\">\n\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t<p v-html=\"description\" />\n\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t<p v-html=\"descriptionDetail\" />\n\n\t\t<div class=\"theming__preview-list\">\n\t\t\t<ThemePreviewItem\n\t\t\t\tv-for=\"theme in themes\"\n\t\t\t\t:key=\"theme.id\"\n\t\t\t\t:enforced=\"theme.id === enforceTheme\"\n\t\t\t\t:selected=\"selectedTheme.id === theme.id\"\n\t\t\t\t:theme=\"theme\"\n\t\t\t\t:unique=\"themes.length === 1\"\n\t\t\t\ttype=\"theme\"\n\t\t\t\t@update:selected=\"changeTheme(theme.id, $event)\" />\n\t\t</div>\n\n\t\t<div class=\"theming__preview-list\">\n\t\t\t<ThemePreviewItem\n\t\t\t\tv-for=\"theme in fonts\"\n\t\t\t\t:key=\"theme.id\"\n\t\t\t\t:selected=\"theme.enabled\"\n\t\t\t\t:theme=\"theme\"\n\t\t\t\t:unique=\"fonts.length === 1\"\n\t\t\t\ttype=\"font\"\n\t\t\t\t@update:selected=\"changeFont(theme.id, $event)\" />\n\t\t</div>\n\n\t\t<h3>{{ t('theming', 'Misc accessibility options') }}</h3>\n\t\t<NcCheckboxRadioSwitch\n\t\t\ttype=\"checkbox\"\n\t\t\t:modelValue=\"enableBlurFilter === 'yes'\"\n\t\t\t:indeterminate=\"enableBlurFilter === ''\"\n\t\t\t@update:modelValue=\"changeEnableBlurFilter\">\n\t\t\t{{ t('theming', 'Enable blur background filter (may increase GPU load)') }}\n\t\t</NcCheckboxRadioSwitch>\n\t</NcSettingsSection>\n\n\t<NcNoteCard v-if=\"isUserThemingDisabled\" type=\"info\">\n\t\t{{ t('theming', 'Customization has been disabled by your administrator') }}\n\t</NcNoteCard>\n\n\t<template v-else>\n\t\t<UserSectionPrimaryColor ref=\"primaryColor\" @refreshStyles=\"refreshGlobalStyles\" />\n\t\t<UserSectionBackground @refreshStyles=\"refreshGlobalStyles\" />\n\t</template>\n\n\t<UserSectionHotkeys />\n\t<UserSectionAppMenu />\n</template>\n\n<script setup lang=\"ts\">\nimport type { ITheme } from '../components/ThemePreviewItem.vue'\n\nimport axios, { isAxiosError } from '@nextcloud/axios'\nimport { showError } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { t } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { computed, nextTick, ref, useTemplateRef } from 'vue'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\nimport NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'\nimport ThemePreviewItem from '../components/ThemePreviewItem.vue'\nimport UserSectionAppMenu from '../components/UserSectionAppMenu.vue'\nimport UserSectionBackground from '../components/UserSectionBackground.vue'\nimport UserSectionHotkeys from '../components/UserSectionHotkeys.vue'\nimport UserSectionPrimaryColor from '../components/UserSectionPrimaryColor.vue'\nimport { logger } from '../utils/logger.ts'\nimport { refreshStyles } from '../utils/refreshStyles.js'\n\nconst enforceTheme = loadState('theming', 'enforceTheme', '')\nconst isUserThemingDisabled = loadState('theming', 'isUserThemingDisabled')\n\nconst enableBlurFilter = ref(loadState('theming', 'enableBlurFilter', ''))\n\nconst availableThemes = loadState<ITheme[]>('theming', 'themes', [])\nconst themes = ref(availableThemes.filter((theme) => theme.type === 1))\nconst fonts = ref(availableThemes.filter((theme) => theme.type === 2))\nconst selectedTheme = computed(() => themes.value.find((theme) => theme.enabled)\n\t|| themes.value[0]!)\n\nconst primaryColorSection = useTemplateRef('primaryColor')\n\nconst description = t(\n\t'theming',\n\t'Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {linkstart}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level.',\n\t{\n\t\tlinkstart: '<a target=\"_blank\" href=\"https://www.w3.org/WAI/standards-guidelines/wcag/\" rel=\"noreferrer nofollow\">',\n\t\tlinkend: '</a>',\n\t},\n\t{ escape: false },\n)\n\nconst descriptionDetail = t(\n\t'theming',\n\t'If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!',\n\t{\n\t\tissuetracker: '<a target=\"_blank\" href=\"https://github.com/nextcloud/server/issues/\" rel=\"noreferrer nofollow\">',\n\t\tdesignteam: '<a target=\"_blank\" href=\"https://nextcloud.com/design\" rel=\"noreferrer nofollow\">',\n\t\tlinkend: '</a>',\n\t},\n\t{ escape: false },\n)\n\n/**\n * Refresh server-side generated theming CSS\n */\nasync function refreshGlobalStyles() {\n\tawait refreshStyles()\n\tnextTick(() => primaryColorSection.value?.reload())\n}\n\n/**\n * Handle theme change\n *\n * @param id - The theme ID to change\n * @param enabled - The theme state\n */\nfunction changeTheme(id: string, enabled: boolean) {\n\t// Reset selected and select new one\n\tthemes.value.forEach((theme) => {\n\t\tif (theme.id === id && enabled) {\n\t\t\ttheme.enabled = true\n\t\t\treturn\n\t\t}\n\t\ttheme.enabled = false\n\t})\n\n\tupdateBodyAttributes()\n\tselectItem(enabled, id)\n}\n\n/**\n * Handle font change\n *\n * @param id - The font ID to change\n * @param enabled - The font state\n */\nfunction changeFont(id: string, enabled: boolean) {\n\t// Reset selected and select new one\n\tfonts.value.forEach((font) => {\n\t\tif (font.id === id && enabled) {\n\t\t\tfont.enabled = true\n\t\t\treturn\n\t\t}\n\t\tfont.enabled = false\n\t})\n\n\tupdateBodyAttributes()\n\tselectItem(enabled, id)\n}\n\n/**\n * Handle blur filter change\n */\nasync function changeEnableBlurFilter() {\n\tenableBlurFilter.value = enableBlurFilter.value === 'no' ? 'yes' : 'no'\n\tawait axios({\n\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\tappId: 'theming',\n\t\t\tconfigKey: 'force_enable_blur_filter',\n\t\t}),\n\t\tdata: {\n\t\t\tconfigValue: enableBlurFilter.value,\n\t\t},\n\t\tmethod: 'POST',\n\t})\n\t// Refresh the styles\n\trefreshStyles()\n}\n\n/**\n *\n */\nfunction updateBodyAttributes() {\n\tconst enabledThemesIDs = themes.value.filter((theme) => theme.enabled === true).map((theme) => theme.id)\n\tconst enabledFontsIDs = fonts.value.filter((font) => font.enabled === true).map((font) => font.id)\n\n\tthemes.value.forEach((theme) => {\n\t\tdocument.body.toggleAttribute(`data-theme-${theme.id}`, theme.enabled)\n\t})\n\tfonts.value.forEach((font) => {\n\t\tdocument.body.toggleAttribute(`data-theme-${font.id}`, font.enabled)\n\t})\n\n\tdocument.body.setAttribute('data-themes', [...enabledThemesIDs, ...enabledFontsIDs].join(','))\n}\n\n/**\n * Commit a change and force reload css\n * Fetching the file again will trigger the server update\n *\n * @param enabled - The theme state\n * @param themeId - The theme ID to change\n */\nasync function selectItem(enabled: boolean, themeId: string) {\n\ttry {\n\t\tif (enabled) {\n\t\t\tawait axios({\n\t\t\t\turl: generateOcsUrl('apps/theming/api/v1/theme/{themeId}/enable', { themeId }),\n\t\t\t\tmethod: 'PUT',\n\t\t\t})\n\t\t} else {\n\t\t\tawait axios({\n\t\t\t\turl: generateOcsUrl('apps/theming/api/v1/theme/{themeId}', { themeId }),\n\t\t\t\tmethod: 'DELETE',\n\t\t\t})\n\t\t}\n\t} catch (error) {\n\t\tlogger.error('theming: Unable to apply setting.', { error })\n\t\tlet message = t('theming', 'Unable to apply the setting.')\n\t\tif (isAxiosError(error) && error.response?.data.ocs?.meta?.message) {\n\t\t\tmessage = `${error.response.data.ocs.meta.message}. ${message}`\n\t\t}\n\t\tshowError(message)\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.theming {\n\t// Limit width of settings sections for readability\n\tp {\n\t\tmax-width: 800px;\n\t}\n\n\t// Proper highlight for links and focus feedback\n\t:deep(a) {\n\t\tfont-weight: bold;\n\n\t\t&:hover,\n\t\t&:focus {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t}\n\n\t&__preview-list {\n\t\t--gap: 30px;\n\t\tdisplay: grid;\n\t\tmargin-top: var(--gap);\n\t\tcolumn-gap: var(--gap);\n\t\trow-gap: var(--gap);\n\t}\n}\n\n.background {\n\t&__grid {\n\t\tmargin-top: 30px;\n\t}\n}\n\n@media (max-width: 1440px) {\n\t.theming__preview-list {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n}\n</style>\n","/*!\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport UserTheming from './views/UserTheming.vue'\n\nimport 'vite/modulepreload-polyfill'\n\nconst app = createApp(UserTheming)\napp.config.idPrefix = 'settings'\napp.mount('#settings-personal-theming')\n"],"names":["selected","_useModel","__props","props","switchType","computed","name","img","generateFilePath","checked","onToggle","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_toDisplayString","_hoisted_2","_hoisted_3","_unref","t","_createVNode","NcCheckboxRadioSwitch","$event","_createTextVNode","_sfc_main","_mergeProps","_ctx","$props","_cache","_openBlock","elementIdAppOrderChanged","elementIdEnforcedDefaultApp","userAppOrder","enforcedDefaultApp","loadState","initialAppOrder","type","app","appOrder","ref","hasCustomAppOrder","hasAppOrderChanged","id","index","ariaDetailsAppOrder","updateAppOrder","value","order","saveSetting","error","logger","showError","resetAppOrder","data","axios","generateOcsUrl","key","url","_createBlock","NcSettingsSection","NcNoteCard","AppOrderSelector","$style","NcButton","IconUndo","emit","__emit","SHIPPED_BACKGROUNDS","THEMING_DEFAULTS","DEFAULT_BACKGROUND_IMAGE","loading","currentTheming","currentBackgroundImage","shippedBackgrounds","background","fileName","prefixWithBaseUrl","update","setDefault","result","generateUrl","setShipped","shipped","setFile","path","pickColor","color","pickFile","getFilePickerBuilder","node","NcLoadingIcon","NcIconSvgWrapper","mdiCheck","mdiImageEditOutline","NcColorPicker","_normalizeStyle","getTextColor","mdiPaletteOutline","mdiUndo","_hoisted_5","_Fragment","_renderList","shippedBackground","shortcutsDisabled","watch","updateHotkeyState","r","n","e","u","a","o","i","s","h","b","g","d","f","c","l","p","v","m","y","N","x","M","H","$","j","w","__expose","reload","initialPrimaryColor","defaultPrimaryColor","triggerElement","useTemplateRef","primaryColor","debounce","newColor","onUpdate","isDefaultPrimaryColor","colord","rgbMatch","numberToHex","onReset","numeric","IconColorPalette","enforceTheme","isUserThemingDisabled","enableBlurFilter","availableThemes","themes","theme","fonts","selectedTheme","primaryColorSection","description","descriptionDetail","refreshGlobalStyles","refreshStyles","nextTick","changeTheme","enabled","updateBodyAttributes","selectItem","changeFont","font","changeEnableBlurFilter","enabledThemesIDs","enabledFontsIDs","themeId","message","isAxiosError","ThemePreviewItem","_hoisted_4","UserSectionPrimaryColor","UserSectionBackground","UserSectionHotkeys","UserSectionAppMenu","createApp","UserTheming"],"mappings":"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","x_google_ignoreList":[1,5,6,7]} |