mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 01:30:50 -04:00
Merge pull request #56067 from nextcloud/refactor/twofactor-vue3
refactor(twofactor_backupcodes): migrate to Typescript and Vue 3
This commit is contained in:
commit
f67d90ab27
88 changed files with 490 additions and 486 deletions
|
|
@ -9,6 +9,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace OCA\TwoFactorBackupCodes\Settings;
|
||||
|
||||
use OCA\TwoFactorBackupCodes\AppInfo\Application;
|
||||
use OCP\Authentication\TwoFactorAuth\IPersonalProviderSettings;
|
||||
use OCP\Server;
|
||||
use OCP\Template\ITemplate;
|
||||
|
|
@ -16,6 +17,9 @@ use OCP\Template\ITemplateManager;
|
|||
|
||||
class Personal implements IPersonalProviderSettings {
|
||||
public function getBody(): ITemplate {
|
||||
return Server::get(ITemplateManager::class)->getTemplate('twofactor_backupcodes', 'personal');
|
||||
\OCP\Util::addScript(Application::APP_ID, 'settings-personal');
|
||||
\OCP\Util::addStyle(Application::APP_ID, 'settings-personal');
|
||||
return Server::get(ITemplateManager::class)
|
||||
->getTemplate('twofactor_backupcodes', 'personal');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import Axios from '@nextcloud/axios'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export function generateCodes() {
|
||||
const url = generateUrl('/apps/twofactor_backupcodes/settings/create')
|
||||
|
||||
return Axios.post(url, {}).then((resp) => resp.data)
|
||||
}
|
||||
28
apps/twofactor_backupcodes/src/service/BackupCodesService.ts
Normal file
28
apps/twofactor_backupcodes/src/service/BackupCodesService.ts
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import axios from '@nextcloud/axios'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
|
||||
export interface ITwoFactorBackupCodesState {
|
||||
enabled: boolean
|
||||
total: number
|
||||
used: number
|
||||
}
|
||||
|
||||
export interface IApiResponse {
|
||||
codes: string[]
|
||||
state: ITwoFactorBackupCodesState
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate new backup codes
|
||||
*/
|
||||
export async function generateCodes(): Promise<IApiResponse> {
|
||||
const url = generateUrl('/apps/twofactor_backupcodes/settings/create')
|
||||
|
||||
const { data } = await axios.post<IApiResponse>(url)
|
||||
return data
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param {any} data -
|
||||
*/
|
||||
export function print(data) {
|
||||
const name = OC.theme.name || 'Nextcloud'
|
||||
const newTab = window.open('', t('twofactor_backupcodes', '{name} backup codes', { name }))
|
||||
newTab.document.write('<h1>' + t('twofactor_backupcodes', '{name} backup codes', { name }) + '</h1>')
|
||||
newTab.document.write('<pre>' + data + '</pre>')
|
||||
newTab.print()
|
||||
newTab.close()
|
||||
}
|
||||
39
apps/twofactor_backupcodes/src/service/PrintService.ts
Normal file
39
apps/twofactor_backupcodes/src/service/PrintService.ts
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/*!
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { getCapabilities } from '@nextcloud/capabilities'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
|
||||
/**
|
||||
* Open a new tab and print the given backup codes
|
||||
*
|
||||
* @param data - The backup codes to print
|
||||
*/
|
||||
export function print(data: string[]): void {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const name = (getCapabilities() as any).theming.name || 'Nextcloud'
|
||||
const newTab = window.open('', t('twofactor_backupcodes', '{name} backup codes', { name }))
|
||||
if (!newTab) {
|
||||
showError(t('twofactor_backupcodes', 'Unable to open a new tab for printing'))
|
||||
throw new Error('Unable to open a new tab for printing')
|
||||
}
|
||||
|
||||
const heading = newTab.document.createElement('h1')
|
||||
heading.textContent = t('twofactor_backupcodes', '{name} backup codes', { name })
|
||||
const pre = newTab.document.createElement('pre')
|
||||
for (const code of data) {
|
||||
const codeLine = newTab.document.createTextNode(code)
|
||||
pre.appendChild(codeLine)
|
||||
pre.appendChild(newTab.document.createElement('br'))
|
||||
}
|
||||
|
||||
newTab.document.body.innerHTML = ''
|
||||
newTab.document.body.appendChild(heading)
|
||||
newTab.document.body.appendChild(pre)
|
||||
|
||||
newTab.print()
|
||||
newTab.close()
|
||||
}
|
||||
|
|
@ -8,3 +8,4 @@ import { getLoggerBuilder } from '@nextcloud/logger'
|
|||
export const logger = getLoggerBuilder()
|
||||
.detectLogLevel()
|
||||
.setApp('twofactor_backupcodes')
|
||||
.build()
|
||||
13
apps/twofactor_backupcodes/src/settings-personal.ts
Normal file
13
apps/twofactor_backupcodes/src/settings-personal.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { createPinia } from 'pinia'
|
||||
import { createApp } from 'vue'
|
||||
import PersonalSettings from './views/PersonalSettings.vue'
|
||||
|
||||
const pinia = createPinia()
|
||||
const app = createApp(PersonalSettings)
|
||||
app.use(pinia)
|
||||
app.mount('#twofactor-backupcodes-settings')
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import Vue from 'vue'
|
||||
import PersonalSettings from './views/PersonalSettings.vue'
|
||||
import store from './store.js'
|
||||
|
||||
Vue.prototype.t = t
|
||||
|
||||
const initialState = loadState('twofactor_backupcodes', 'state')
|
||||
store.replaceState(initialState)
|
||||
|
||||
const View = Vue.extend(PersonalSettings)
|
||||
new View({
|
||||
store,
|
||||
}).$mount('#twofactor-backupcodes-settings')
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import Vue from 'vue'
|
||||
import Vuex, { Store } from 'vuex'
|
||||
import { generateCodes } from './service/BackupCodesService.js'
|
||||
|
||||
Vue.use(Vuex)
|
||||
|
||||
const state = {
|
||||
enabled: false,
|
||||
total: 0,
|
||||
used: 0,
|
||||
codes: [],
|
||||
}
|
||||
|
||||
const mutations = {
|
||||
setEnabled(state, enabled) {
|
||||
Vue.set(state, 'enabled', enabled)
|
||||
},
|
||||
setTotal(state, total) {
|
||||
Vue.set(state, 'total', total)
|
||||
},
|
||||
setUsed(state, used) {
|
||||
Vue.set(state, 'used', used)
|
||||
},
|
||||
setCodes(state, codes) {
|
||||
Vue.set(state, 'codes', codes)
|
||||
},
|
||||
}
|
||||
|
||||
const actions = {
|
||||
generate({ commit }) {
|
||||
commit('setEnabled', false)
|
||||
|
||||
return generateCodes().then(({ codes, state }) => {
|
||||
commit('setEnabled', state.enabled)
|
||||
commit('setTotal', state.total)
|
||||
commit('setUsed', state.used)
|
||||
commit('setCodes', codes)
|
||||
return true
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
export default new Store({
|
||||
strict: !PRODUCTION,
|
||||
state,
|
||||
mutations,
|
||||
actions,
|
||||
})
|
||||
42
apps/twofactor_backupcodes/src/store/index.ts
Normal file
42
apps/twofactor_backupcodes/src/store/index.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import type { ITwoFactorBackupCodesState } from '../service/BackupCodesService.ts'
|
||||
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
import { generateCodes } from '../service/BackupCodesService.ts'
|
||||
|
||||
const initialState = loadState<ITwoFactorBackupCodesState>('twofactor_backupcodes', 'state')
|
||||
|
||||
export const useStore = defineStore('twofactor_backupcodes', () => {
|
||||
const enabled = ref(initialState.enabled)
|
||||
const total = ref(initialState.total)
|
||||
const used = ref(initialState.used)
|
||||
const codes = ref<string[]>([])
|
||||
|
||||
/**
|
||||
* Generate new backup codes and update the store state
|
||||
*/
|
||||
async function generate(): Promise<void> {
|
||||
enabled.value = false
|
||||
|
||||
const { codes: newCodes, state } = await generateCodes()
|
||||
enabled.value = state.enabled
|
||||
total.value = state.total
|
||||
used.value = state.used
|
||||
codes.value = newCodes
|
||||
}
|
||||
|
||||
return {
|
||||
enabled,
|
||||
total,
|
||||
used,
|
||||
codes,
|
||||
|
||||
generate,
|
||||
}
|
||||
})
|
||||
|
|
@ -2,12 +2,71 @@
|
|||
- SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getCapabilities } from '@nextcloud/capabilities'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { confirmPassword } from '@nextcloud/password-confirmation'
|
||||
import { computed, ref } from 'vue'
|
||||
import NcButton from '@nextcloud/vue/components/NcButton'
|
||||
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import { logger } from '../service/logger.ts'
|
||||
import { print } from '../service/PrintService.js'
|
||||
import { useStore } from '../store/index.ts'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const instanceName = (getCapabilities() as any).theming.name ?? 'Nextcloud'
|
||||
|
||||
const store = useStore()
|
||||
const generatingCodes = ref(false)
|
||||
|
||||
const hasCodes = computed(() => {
|
||||
return store.codes && store.codes.length > 0
|
||||
})
|
||||
|
||||
const downloadFilename = instanceName + '-backup-codes.txt'
|
||||
const downloadUrl = computed(() => {
|
||||
if (!hasCodes.value) {
|
||||
return ''
|
||||
}
|
||||
return 'data:text/plain,' + encodeURIComponent(store.codes.reduce((prev, code) => {
|
||||
return prev + code + '\n'
|
||||
}, ''))
|
||||
})
|
||||
|
||||
/**
|
||||
* Generate new backup codes
|
||||
*/
|
||||
async function generateBackupCodes() {
|
||||
await confirmPassword()
|
||||
// Hide old codes
|
||||
generatingCodes.value = true
|
||||
|
||||
try {
|
||||
await store.generate()
|
||||
} catch (error) {
|
||||
logger.error('Error generating backup codes', { error })
|
||||
showError(t('twofactor_backupcodes', 'An error occurred while generating your backup codes'))
|
||||
} finally {
|
||||
generatingCodes.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the backup codes
|
||||
*/
|
||||
function printCodes() {
|
||||
print(!store.codes || store.codes.length === 0 ? [] : store.codes)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="backupcodes-settings">
|
||||
<div :class="$style.backupcodesSettings">
|
||||
<NcButton
|
||||
v-if="!enabled"
|
||||
id="generate-backup-codes"
|
||||
v-if="!store.enabled"
|
||||
:disabled="generatingCodes"
|
||||
variant="primary"
|
||||
@click="generateBackupCodes">
|
||||
<template #icon>
|
||||
<NcLoadingIcon v-if="generatingCodes" />
|
||||
|
|
@ -15,39 +74,40 @@
|
|||
{{ t('twofactor_backupcodes', 'Generate backup codes') }}
|
||||
</NcButton>
|
||||
<template v-else>
|
||||
<p class="backupcodes-settings__codes">
|
||||
<template v-if="!haveCodes">
|
||||
{{ t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', { used, total }) }}
|
||||
<p>
|
||||
<template v-if="!hasCodes">
|
||||
{{ t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', { used: store.used, total: store.total }) }}
|
||||
</template>
|
||||
<template v-else>
|
||||
{{ t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later.') }}
|
||||
<ul>
|
||||
<ul :aria-label="t('twofactor_backupcodes', 'List of backup codes')">
|
||||
<li
|
||||
v-for="code in codes"
|
||||
v-for="code in store.codes"
|
||||
:key="code"
|
||||
class="backupcodes-settings__codes__code">
|
||||
:class="$style.backupcodesSettings__code">
|
||||
{{ code }}
|
||||
</li>
|
||||
</ul>
|
||||
</template>
|
||||
</p>
|
||||
<p class="backupcodes-settings__actions">
|
||||
<template v-if="haveCodes">
|
||||
<p :class="$style.backupcodesSettings__actions">
|
||||
<NcButton
|
||||
id="generate-backup-codes"
|
||||
variant="error"
|
||||
@click="generateBackupCodes">
|
||||
{{ t('twofactor_backupcodes', 'Regenerate backup codes') }}
|
||||
</NcButton>
|
||||
<template v-if="hasCodes">
|
||||
<NcButton @click="printCodes">
|
||||
{{ t('twofactor_backupcodes', 'Print backup codes') }}
|
||||
</NcButton>
|
||||
<NcButton
|
||||
:href="downloadUrl"
|
||||
:download="downloadFilename"
|
||||
variant="primary">
|
||||
{{ t('twofactor_backupcodes', 'Save backup codes') }}
|
||||
</NcButton>
|
||||
<NcButton @click="printCodes">
|
||||
{{ t('twofactor_backupcodes', 'Print backup codes') }}
|
||||
</NcButton>
|
||||
</template>
|
||||
<NcButton
|
||||
id="generate-backup-codes"
|
||||
@click="generateBackupCodes">
|
||||
{{ t('twofactor_backupcodes', 'Regenerate backup codes') }}
|
||||
</NcButton>
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
|
|
@ -58,113 +118,21 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { confirmPassword } from '@nextcloud/password-confirmation'
|
||||
import NcButton from '@nextcloud/vue/components/NcButton'
|
||||
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import { logger } from '../logger.ts'
|
||||
import { print } from '../service/PrintService.js'
|
||||
|
||||
export default {
|
||||
name: 'PersonalSettings',
|
||||
components: {
|
||||
NcButton,
|
||||
NcLoadingIcon,
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
generatingCodes: false,
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
downloadUrl() {
|
||||
if (!this.codes) {
|
||||
return ''
|
||||
}
|
||||
return 'data:text/plain,' + encodeURIComponent(this.codes.reduce((prev, code) => {
|
||||
return prev + code + '\r\n'
|
||||
}, ''))
|
||||
},
|
||||
|
||||
downloadFilename() {
|
||||
const name = OC.theme.name || 'Nextcloud'
|
||||
return name + '-backup-codes.txt'
|
||||
},
|
||||
|
||||
enabled() {
|
||||
return this.$store.state.enabled
|
||||
},
|
||||
|
||||
total() {
|
||||
return this.$store.state.total
|
||||
},
|
||||
|
||||
used() {
|
||||
return this.$store.state.used
|
||||
},
|
||||
|
||||
codes() {
|
||||
return this.$store.state.codes
|
||||
},
|
||||
|
||||
name() {
|
||||
return OC.theme.name || 'Nextcloud'
|
||||
},
|
||||
|
||||
haveCodes() {
|
||||
return this.codes && this.codes.length > 0
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
generateBackupCodes() {
|
||||
confirmPassword().then(() => {
|
||||
// Hide old codes
|
||||
this.generatingCodes = true
|
||||
|
||||
this.$store.dispatch('generate').then(() => {
|
||||
this.generatingCodes = false
|
||||
}).catch((err) => {
|
||||
OC.Notification.showTemporary(t('twofactor_backupcodes', 'An error occurred while generating your backup codes'))
|
||||
this.generatingCodes = false
|
||||
throw err
|
||||
})
|
||||
}).catch(logger.error)
|
||||
},
|
||||
|
||||
getPrintData(codes) {
|
||||
if (!codes) {
|
||||
return ''
|
||||
}
|
||||
return codes.reduce((prev, code) => {
|
||||
return prev + code + '<br>'
|
||||
}, '')
|
||||
},
|
||||
|
||||
printCodes() {
|
||||
print(this.getPrintData(this.codes))
|
||||
},
|
||||
},
|
||||
<style module>
|
||||
.backupcodesSettings {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.backupcodes-settings {
|
||||
&__codes {
|
||||
&__code {
|
||||
font-family: monospace;
|
||||
letter-spacing: 0.02em;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
}
|
||||
.backupcodesSettings__code {
|
||||
font-family: monospace;
|
||||
letter-spacing: 0.02em;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
&__actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: var(--default-grid-baseline);
|
||||
}
|
||||
.backupcodesSettings__actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--default-grid-baseline);
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ declare(strict_types=1);
|
|||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
\OCP\Util::addScript('twofactor_backupcodes', 'settings', 'core');
|
||||
|
||||
?>
|
||||
|
||||
<div id="twofactor-backupcodes-settings"></div>
|
||||
|
|
|
|||
|
|
@ -97,9 +97,6 @@ module.exports = {
|
|||
'personal-theming': path.join(__dirname, 'apps/theming/src', 'personal-settings.js'),
|
||||
'admin-theming': path.join(__dirname, 'apps/theming/src', 'admin-settings.js'),
|
||||
},
|
||||
twofactor_backupcodes: {
|
||||
settings: path.join(__dirname, 'apps/twofactor_backupcodes/src', 'settings.js'),
|
||||
},
|
||||
updatenotification: {
|
||||
init: path.join(__dirname, 'apps/updatenotification/src', 'init.ts'),
|
||||
'view-changelog-page': path.join(__dirname, 'apps/updatenotification/src', 'view-changelog-page.ts'),
|
||||
|
|
|
|||
|
|
@ -7,6 +7,9 @@ import { createAppConfig } from '@nextcloud/vite-config'
|
|||
import { resolve } from 'node:path'
|
||||
|
||||
const modules = {
|
||||
files_versions: {
|
||||
'sidebar-tab': resolve(import.meta.dirname, 'apps/files_versions/src', 'sidebar_tab.ts'),
|
||||
},
|
||||
dav: {
|
||||
'settings-admin-caldav': resolve(import.meta.dirname, 'apps/dav/src', 'settings-admin.ts'),
|
||||
'settings-admin-example-content': resolve(import.meta.dirname, 'apps/dav/src', 'settings-admin-example-content.ts'),
|
||||
|
|
@ -15,8 +18,8 @@ const modules = {
|
|||
sharebymail: {
|
||||
'admin-settings': resolve(import.meta.dirname, 'apps/sharebymail/src', 'settings-admin.ts'),
|
||||
},
|
||||
files_versions: {
|
||||
'sidebar-tab': resolve(import.meta.dirname, 'apps/files_versions/src', 'sidebar_tab.ts'),
|
||||
twofactor_backupcodes: {
|
||||
'settings-personal': resolve(import.meta.dirname, 'apps/twofactor_backupcodes/src', 'settings-personal.ts'),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
2
dist/1879-1879.js.license
vendored
2
dist/1879-1879.js.license
vendored
|
|
@ -81,7 +81,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 1.2.1
|
||||
- license: BSD-3-Clause
|
||||
- marked
|
||||
- version: 16.3.0
|
||||
- version: 16.4.1
|
||||
- license: MIT
|
||||
- buffer
|
||||
- version: 6.0.3
|
||||
|
|
|
|||
1
dist/NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css
vendored
Normal file
1
dist/NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css
vendored
Normal file
File diff suppressed because one or more lines are too long
8
dist/NcSettingsSection-DFav6ob5-Dvi4WdiE.chunk.mjs
vendored
Normal file
8
dist/NcSettingsSection-DFav6ob5-Dvi4WdiE.chunk.mjs
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/NcSettingsSection-DFav6ob5-Dvi4WdiE.chunk.mjs.map
vendored
Normal file
1
dist/NcSettingsSection-DFav6ob5-Dvi4WdiE.chunk.mjs.map
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
dist/TrashCanOutline-DuVu0q8E.chunk.mjs.map
vendored
Normal file
1
dist/TrashCanOutline-DuVu0q8E.chunk.mjs.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/TrayArrowDown-oHQFuJe8.chunk.mjs.map
vendored
1
dist/TrayArrowDown-oHQFuJe8.chunk.mjs.map
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
dist/check-BUfWmAQ9.chunk.mjs.map
vendored
Normal file
1
dist/check-BUfWmAQ9.chunk.mjs.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4
dist/core-common.js
vendored
4
dist/core-common.js
vendored
File diff suppressed because one or more lines are too long
5
dist/core-common.js.license
vendored
5
dist/core-common.js.license
vendored
|
|
@ -592,7 +592,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.17.21
|
||||
- license: MIT
|
||||
- marked
|
||||
- version: 16.3.0
|
||||
- version: 16.4.1
|
||||
- license: MIT
|
||||
- material-colors
|
||||
- version: 1.2.6
|
||||
|
|
@ -978,9 +978,6 @@ This file is generated from multiple sources. Included packages:
|
|||
- vue
|
||||
- version: 2.7.16
|
||||
- license: MIT
|
||||
- vuex
|
||||
- version: 3.6.2
|
||||
- license: MIT
|
||||
- web-namespaces
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
|
|
|
|||
2
dist/core-common.js.map
vendored
2
dist/core-common.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/dav-settings-admin-caldav.css
vendored
2
dist/dav-settings-admin-caldav.css
vendored
|
|
@ -1,3 +1,3 @@
|
|||
/* extracted by css-entry-points-plugin */
|
||||
@import './dav-dav-settings-admin-caldav-7NASuukx.chunk.css';
|
||||
@import './_plugin-vue_export-helper-BE4hS1RR.chunk.css';
|
||||
@import './NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css';
|
||||
2
dist/dav-settings-admin-caldav.mjs
vendored
2
dist/dav-settings-admin-caldav.mjs
vendored
|
|
@ -1,2 +1,2 @@
|
|||
import{l as i,_ as f,N as g,a as b,c as R,b as E,d as C,t as m,r as p,o as S,w as r,e as n,f as c,g as u,h as l,i as V}from"./_plugin-vue_export-helper-BF2IMoPZ.chunk.mjs";const h=i("dav","userSyncCalendarsDocUrl","#"),k={name:"CalDavSettings",components:{NcCheckboxRadioSwitch:b,NcSettingsSection:g},setup(){return{t:m}},data(){return{userSyncCalendarsDocUrl:h,sendInvitations:i("dav","sendInvitations"),generateBirthdayCalendar:i("dav","generateBirthdayCalendar"),sendEventReminders:i("dav","sendEventReminders"),sendEventRemindersToSharedUsers:i("dav","sendEventRemindersToSharedUsers"),sendEventRemindersPush:i("dav","sendEventRemindersPush")}},computed:{hint(){return m("dav","Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}.").replace("{calendarappstoreopen}",'<a target="_blank" href="../apps/office/calendar">').replace("{calendardocopen}",`<a target="_blank" href="${h}" rel="noreferrer noopener">`).replace(/\{linkclose\}/g,"</a>")},sendInvitationsHelpText(){return m("dav","Please make sure to properly set up {emailopen}the email server{linkclose}.").replace("{emailopen}",'<a href="../admin#mail_general_settings">').replace("{linkclose}","</a>")},sendEventRemindersHelpText(){return m("dav","Please make sure to properly set up {emailopen}the email server{linkclose}.").replace("{emailopen}",'<a href="../admin#mail_general_settings">').replace("{linkclose}","</a>")}},watch:{generateBirthdayCalendar(d){const e=d?"/apps/dav/enableBirthdayCalendar":"/apps/dav/disableBirthdayCalendar";E.post(C(e))},sendInvitations(d){OCP.AppConfig.setValue("dav","sendInvitations",d?"yes":"no")},sendEventReminders(d){OCP.AppConfig.setValue("dav","sendEventReminders",d?"yes":"no")},sendEventRemindersToSharedUsers(d){OCP.AppConfig.setValue("dav","sendEventRemindersToSharedUsers",d?"yes":"no")},sendEventRemindersPush(d){OCP.AppConfig.setValue("dav","sendEventRemindersPush",d?"yes":"no")}}},T=["innerHTML"],w=["innerHTML"],_=["innerHTML"],U={class:"indented"},P={class:"indented"};function H(d,e,x,s,a,v){const o=p("NcCheckboxRadioSwitch"),y=p("NcSettingsSection");return S(),R(y,{name:s.t("dav","Calendar server"),"doc-url":a.userSyncCalendarsDocUrl},{default:r(()=>[n("p",{class:"settings-hint",innerHTML:v.hint},null,8,T),n("p",null,[c(o,{id:"caldavSendInvitations",modelValue:a.sendInvitations,"onUpdate:modelValue":e[0]||(e[0]=t=>a.sendInvitations=t),type:"switch"},{default:r(()=>[u(l(s.t("dav","Send invitations to attendees")),1)]),_:1},8,["modelValue"]),n("em",{innerHTML:v.sendInvitationsHelpText},null,8,w)]),n("p",null,[c(o,{id:"caldavGenerateBirthdayCalendar",modelValue:a.generateBirthdayCalendar,"onUpdate:modelValue":e[1]||(e[1]=t=>a.generateBirthdayCalendar=t),type:"switch",class:"checkbox"},{default:r(()=>[u(l(s.t("dav","Automatically generate a birthday calendar")),1)]),_:1},8,["modelValue"]),n("em",null,l(s.t("dav","Birthday calendars will be generated by a background job.")),1),e[5]||(e[5]=n("br",null,null,-1)),n("em",null,l(s.t("dav","Hence they will not be available immediately after enabling but will show up after some time.")),1)]),n("p",null,[c(o,{id:"caldavSendEventReminders",modelValue:a.sendEventReminders,"onUpdate:modelValue":e[2]||(e[2]=t=>a.sendEventReminders=t),type:"switch"},{default:r(()=>[u(l(s.t("dav","Send notifications for events")),1)]),_:1},8,["modelValue"]),n("em",{innerHTML:v.sendEventRemindersHelpText},null,8,_),e[6]||(e[6]=n("br",null,null,-1)),n("em",null,l(s.t("dav","Notifications are sent via background jobs, so these must occur often enough.")),1)]),n("p",U,[c(o,{id:"caldavSendEventRemindersToSharedGroupMembers",modelValue:a.sendEventRemindersToSharedUsers,"onUpdate:modelValue":e[3]||(e[3]=t=>a.sendEventRemindersToSharedUsers=t),type:"switch",disabled:!a.sendEventReminders},{default:r(()=>[u(l(s.t("dav","Send reminder notifications to calendar sharees as well")),1)]),_:1},8,["modelValue","disabled"]),n("em",null,l(s.t("dav","Reminders are always sent to organizers and attendees.")),1)]),n("p",P,[c(o,{id:"caldavSendEventRemindersPush",modelValue:a.sendEventRemindersPush,"onUpdate:modelValue":e[4]||(e[4]=t=>a.sendEventRemindersPush=t),type:"switch",disabled:!a.sendEventReminders},{default:r(()=>[u(l(s.t("dav","Enable notifications for events via push")),1)]),_:1},8,["modelValue","disabled"])])]),_:1},8,["name","doc-url"])}const I=f(k,[["render",H],["__scopeId","data-v-84465bd0"]]),B=V(I);B.mount("#settings-admin-caldav");
|
||||
import{l as i,_ as f,N as g,a as b,r as p,c as R,o as E,w as r,h as n,b as c,d as u,t as l,e as C,i as S,f as m,g as V}from"./NcSettingsSection-DFav6ob5-Dvi4WdiE.chunk.mjs";const h=i("dav","userSyncCalendarsDocUrl","#"),k={name:"CalDavSettings",components:{NcCheckboxRadioSwitch:b,NcSettingsSection:g},setup(){return{t:m}},data(){return{userSyncCalendarsDocUrl:h,sendInvitations:i("dav","sendInvitations"),generateBirthdayCalendar:i("dav","generateBirthdayCalendar"),sendEventReminders:i("dav","sendEventReminders"),sendEventRemindersToSharedUsers:i("dav","sendEventRemindersToSharedUsers"),sendEventRemindersPush:i("dav","sendEventRemindersPush")}},computed:{hint(){return m("dav","Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}.").replace("{calendarappstoreopen}",'<a target="_blank" href="../apps/office/calendar">').replace("{calendardocopen}",`<a target="_blank" href="${h}" rel="noreferrer noopener">`).replace(/\{linkclose\}/g,"</a>")},sendInvitationsHelpText(){return m("dav","Please make sure to properly set up {emailopen}the email server{linkclose}.").replace("{emailopen}",'<a href="../admin#mail_general_settings">').replace("{linkclose}","</a>")},sendEventRemindersHelpText(){return m("dav","Please make sure to properly set up {emailopen}the email server{linkclose}.").replace("{emailopen}",'<a href="../admin#mail_general_settings">').replace("{linkclose}","</a>")}},watch:{generateBirthdayCalendar(d){const e=d?"/apps/dav/enableBirthdayCalendar":"/apps/dav/disableBirthdayCalendar";C.post(S(e))},sendInvitations(d){OCP.AppConfig.setValue("dav","sendInvitations",d?"yes":"no")},sendEventReminders(d){OCP.AppConfig.setValue("dav","sendEventReminders",d?"yes":"no")},sendEventRemindersToSharedUsers(d){OCP.AppConfig.setValue("dav","sendEventRemindersToSharedUsers",d?"yes":"no")},sendEventRemindersPush(d){OCP.AppConfig.setValue("dav","sendEventRemindersPush",d?"yes":"no")}}},T=["innerHTML"],w=["innerHTML"],_=["innerHTML"],U={class:"indented"},P={class:"indented"};function H(d,e,x,s,a,v){const o=p("NcCheckboxRadioSwitch"),y=p("NcSettingsSection");return E(),R(y,{name:s.t("dav","Calendar server"),"doc-url":a.userSyncCalendarsDocUrl},{default:r(()=>[n("p",{class:"settings-hint",innerHTML:v.hint},null,8,T),n("p",null,[c(o,{id:"caldavSendInvitations",modelValue:a.sendInvitations,"onUpdate:modelValue":e[0]||(e[0]=t=>a.sendInvitations=t),type:"switch"},{default:r(()=>[u(l(s.t("dav","Send invitations to attendees")),1)]),_:1},8,["modelValue"]),n("em",{innerHTML:v.sendInvitationsHelpText},null,8,w)]),n("p",null,[c(o,{id:"caldavGenerateBirthdayCalendar",modelValue:a.generateBirthdayCalendar,"onUpdate:modelValue":e[1]||(e[1]=t=>a.generateBirthdayCalendar=t),type:"switch",class:"checkbox"},{default:r(()=>[u(l(s.t("dav","Automatically generate a birthday calendar")),1)]),_:1},8,["modelValue"]),n("em",null,l(s.t("dav","Birthday calendars will be generated by a background job.")),1),e[5]||(e[5]=n("br",null,null,-1)),n("em",null,l(s.t("dav","Hence they will not be available immediately after enabling but will show up after some time.")),1)]),n("p",null,[c(o,{id:"caldavSendEventReminders",modelValue:a.sendEventReminders,"onUpdate:modelValue":e[2]||(e[2]=t=>a.sendEventReminders=t),type:"switch"},{default:r(()=>[u(l(s.t("dav","Send notifications for events")),1)]),_:1},8,["modelValue"]),n("em",{innerHTML:v.sendEventRemindersHelpText},null,8,_),e[6]||(e[6]=n("br",null,null,-1)),n("em",null,l(s.t("dav","Notifications are sent via background jobs, so these must occur often enough.")),1)]),n("p",U,[c(o,{id:"caldavSendEventRemindersToSharedGroupMembers",modelValue:a.sendEventRemindersToSharedUsers,"onUpdate:modelValue":e[3]||(e[3]=t=>a.sendEventRemindersToSharedUsers=t),type:"switch",disabled:!a.sendEventReminders},{default:r(()=>[u(l(s.t("dav","Send reminder notifications to calendar sharees as well")),1)]),_:1},8,["modelValue","disabled"]),n("em",null,l(s.t("dav","Reminders are always sent to organizers and attendees.")),1)]),n("p",P,[c(o,{id:"caldavSendEventRemindersPush",modelValue:a.sendEventRemindersPush,"onUpdate:modelValue":e[4]||(e[4]=t=>a.sendEventRemindersPush=t),type:"switch",disabled:!a.sendEventReminders},{default:r(()=>[u(l(s.t("dav","Enable notifications for events via push")),1)]),_:1},8,["modelValue","disabled"])])]),_:1},8,["name","doc-url"])}const I=f(k,[["render",H],["__scopeId","data-v-84465bd0"]]),B=V(I);B.mount("#settings-admin-caldav");
|
||||
//# sourceMappingURL=dav-settings-admin-caldav.mjs.map
|
||||
|
|
|
|||
2
dist/dav-settings-admin-caldav.mjs.map
vendored
2
dist/dav-settings-admin-caldav.mjs.map
vendored
File diff suppressed because one or more lines are too long
4
dist/dav-settings-admin-example-content.css
vendored
4
dist/dav-settings-admin-example-content.css
vendored
|
|
@ -1,4 +1,4 @@
|
|||
/* extracted by css-entry-points-plugin */
|
||||
@import './dav-dav-settings-admin-example-content-BvfG00pA.chunk.css';
|
||||
@import './_plugin-vue_export-helper-BE4hS1RR.chunk.css';
|
||||
@import './TrayArrowDown-seKZqyL0.chunk.css';
|
||||
@import './NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css';
|
||||
@import './check-seKZqyL0.chunk.css';
|
||||
2
dist/dav-settings-admin-example-content.mjs
vendored
2
dist/dav-settings-admin-example-content.mjs
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/dav-settings-personal-availability.css
vendored
4
dist/dav-settings-personal-availability.css
vendored
|
|
@ -1,4 +1,4 @@
|
|||
/* extracted by css-entry-points-plugin */
|
||||
@import './dav-dav-settings-personal-availability-Cj5tXAon.chunk.css';
|
||||
@import './_plugin-vue_export-helper-BE4hS1RR.chunk.css';
|
||||
@import './TrayArrowDown-seKZqyL0.chunk.css';
|
||||
@import './NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css';
|
||||
@import './check-seKZqyL0.chunk.css';
|
||||
8
dist/dav-settings-personal-availability.mjs
vendored
8
dist/dav-settings-personal-availability.mjs
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/files_versions-sidebar-tab.css
vendored
4
dist/files_versions-sidebar-tab.css
vendored
|
|
@ -1,4 +1,4 @@
|
|||
/* extracted by css-entry-points-plugin */
|
||||
@import './files_versions-files_versions-sidebar-tab-4BohXFH5.chunk.css';
|
||||
@import './_plugin-vue_export-helper-BE4hS1RR.chunk.css';
|
||||
@import './TrayArrowDown-seKZqyL0.chunk.css';
|
||||
@import './NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css';
|
||||
@import './check-seKZqyL0.chunk.css';
|
||||
24
dist/files_versions-sidebar-tab.mjs
vendored
24
dist/files_versions-sidebar-tab.mjs
vendored
File diff suppressed because one or more lines are too long
2
dist/files_versions-sidebar-tab.mjs.map
vendored
2
dist/files_versions-sidebar-tab.mjs.map
vendored
File diff suppressed because one or more lines are too long
1
dist/index-BrfWz4p2.chunk.mjs.map
vendored
1
dist/index-BrfWz4p2.chunk.mjs.map
vendored
File diff suppressed because one or more lines are too long
2
dist/index-C0zE9_k9.chunk.mjs
vendored
Normal file
2
dist/index-C0zE9_k9.chunk.mjs
vendored
Normal file
File diff suppressed because one or more lines are too long
11
dist/index-C0zE9_k9.chunk.mjs.license
vendored
Normal file
11
dist/index-C0zE9_k9.chunk.mjs.license
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: MIT
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- @nextcloud/password-confirmation
|
||||
- version: 6.0.1
|
||||
- license: MIT
|
||||
- @nextcloud/vue
|
||||
- version: 9.1.0
|
||||
- license: AGPL-3.0-or-later
|
||||
1
dist/index-C0zE9_k9.chunk.mjs.map
vendored
Normal file
1
dist/index-C0zE9_k9.chunk.mjs.map
vendored
Normal file
File diff suppressed because one or more lines are too long
11
dist/index-C0zE9_k9.chunk.mjs.map.license
vendored
Normal file
11
dist/index-C0zE9_k9.chunk.mjs.map.license
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: MIT
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- @nextcloud/password-confirmation
|
||||
- version: 6.0.1
|
||||
- license: MIT
|
||||
- @nextcloud/vue
|
||||
- version: 9.1.0
|
||||
- license: AGPL-3.0-or-later
|
||||
2
dist/logger-CU7k_5CV.chunk.mjs
vendored
2
dist/logger-CU7k_5CV.chunk.mjs
vendored
|
|
@ -1,2 +0,0 @@
|
|||
import{g as t}from"./TrayArrowDown-oHQFuJe8.chunk.mjs";const o=t().setApp("dav").detectUser().build();export{o as l};
|
||||
//# sourceMappingURL=logger-CU7k_5CV.chunk.mjs.map
|
||||
2
dist/logger-ZcpAppoJ.chunk.mjs
vendored
Normal file
2
dist/logger-ZcpAppoJ.chunk.mjs
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
import{g as t}from"./check-BUfWmAQ9.chunk.mjs";const o=t().setApp("dav").detectUser().build();export{o as l};
|
||||
//# sourceMappingURL=logger-ZcpAppoJ.chunk.mjs.map
|
||||
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"logger-CU7k_5CV.chunk.mjs","sources":["../build/frontend/apps/dav/src/service/logger.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport const logger = getLoggerBuilder()\n\t.setApp('dav')\n\t.detectUser()\n\t.build()\n"],"names":["logger","getLoggerBuilder"],"mappings":"uDAOO,MAAMA,EAASC,IACpB,OAAO,KAAK,EACZ,WAAA,EACA,MAAA"}
|
||||
{"version":3,"file":"logger-ZcpAppoJ.chunk.mjs","sources":["../build/frontend/apps/dav/src/service/logger.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport const logger = getLoggerBuilder()\n\t.setApp('dav')\n\t.detectUser()\n\t.build()\n"],"names":["logger","getLoggerBuilder"],"mappings":"+CAOO,MAAMA,EAASC,IACpB,OAAO,KAAK,EACZ,WAAA,EACA,MAAA"}
|
||||
2
dist/settings-apps-view-4529.js.license
vendored
2
dist/settings-apps-view-4529.js.license
vendored
|
|
@ -469,7 +469,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.3.2
|
||||
- license: MIT
|
||||
- marked
|
||||
- version: 16.3.0
|
||||
- version: 16.4.1
|
||||
- license: MIT
|
||||
- material-colors
|
||||
- version: 1.2.6
|
||||
|
|
|
|||
4
dist/settings-vue-settings-admin-security.js
vendored
4
dist/settings-vue-settings-admin-security.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -722,9 +722,6 @@ This file is generated from multiple sources. Included packages:
|
|||
- vue
|
||||
- version: 2.7.16
|
||||
- license: MIT
|
||||
- vuex
|
||||
- version: 3.6.2
|
||||
- license: MIT
|
||||
- webpack
|
||||
- version: 5.102.1
|
||||
- license: MIT
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/sharebymail-admin-settings.css
vendored
4
dist/sharebymail-admin-settings.css
vendored
|
|
@ -1,3 +1,3 @@
|
|||
/* extracted by css-entry-points-plugin */
|
||||
@import './_plugin-vue_export-helper-BE4hS1RR.chunk.css';
|
||||
@import './TrayArrowDown-seKZqyL0.chunk.css';
|
||||
@import './NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css';
|
||||
@import './check-seKZqyL0.chunk.css';
|
||||
2
dist/sharebymail-admin-settings.mjs
vendored
2
dist/sharebymail-admin-settings.mjs
vendored
File diff suppressed because one or more lines are too long
7
dist/sharebymail-admin-settings.mjs.license
vendored
7
dist/sharebymail-admin-settings.mjs.license
vendored
|
|
@ -1,14 +1,7 @@
|
|||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: MIT
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- @nextcloud/password-confirmation
|
||||
- version: 6.0.1
|
||||
- license: MIT
|
||||
- @nextcloud/vue
|
||||
- version: 9.1.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- nextcloud-ui
|
||||
- version: 1.0.0
|
||||
- license: AGPL-3.0-or-later
|
||||
|
|
|
|||
2
dist/sharebymail-admin-settings.mjs.map
vendored
2
dist/sharebymail-admin-settings.mjs.map
vendored
File diff suppressed because one or more lines are too long
|
|
@ -1,14 +1,7 @@
|
|||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: MIT
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- @nextcloud/password-confirmation
|
||||
- version: 6.0.1
|
||||
- license: MIT
|
||||
- @nextcloud/vue
|
||||
- version: 9.1.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- nextcloud-ui
|
||||
- version: 1.0.0
|
||||
- license: AGPL-3.0-or-later
|
||||
|
|
|
|||
4
dist/twofactor_backupcodes-settings-personal.css
vendored
Normal file
4
dist/twofactor_backupcodes-settings-personal.css
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/* extracted by css-entry-points-plugin */
|
||||
@import './twofactor_backupcodes-twofactor_backupcodes-settings-personal-Dny2IOsk.chunk.css';
|
||||
@import './NcSettingsSection-DFav6ob5-BFoYkIs3.chunk.css';
|
||||
@import './check-seKZqyL0.chunk.css';
|
||||
3
dist/twofactor_backupcodes-settings-personal.mjs
vendored
Normal file
3
dist/twofactor_backupcodes-settings-personal.mjs
vendored
Normal file
File diff suppressed because one or more lines are too long
12
dist/twofactor_backupcodes-settings-personal.mjs.license
vendored
Normal file
12
dist/twofactor_backupcodes-settings-personal.mjs.license
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: MIT
|
||||
SPDX-FileCopyrightText: Eduardo San Martin Morote
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- nextcloud-ui
|
||||
- version: 1.0.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- pinia
|
||||
- version: 3.0.3
|
||||
- license: MIT
|
||||
1
dist/twofactor_backupcodes-settings-personal.mjs.map
vendored
Normal file
1
dist/twofactor_backupcodes-settings-personal.mjs.map
vendored
Normal file
File diff suppressed because one or more lines are too long
12
dist/twofactor_backupcodes-settings-personal.mjs.map.license
vendored
Normal file
12
dist/twofactor_backupcodes-settings-personal.mjs.map.license
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: MIT
|
||||
SPDX-FileCopyrightText: Eduardo San Martin Morote
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- nextcloud-ui
|
||||
- version: 1.0.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- pinia
|
||||
- version: 3.0.3
|
||||
- license: MIT
|
||||
2
dist/twofactor_backupcodes-settings.js
vendored
2
dist/twofactor_backupcodes-settings.js
vendored
File diff suppressed because one or more lines are too long
146
dist/twofactor_backupcodes-settings.js.license
vendored
146
dist/twofactor_backupcodes-settings.js.license
vendored
|
|
@ -1,146 +0,0 @@
|
|||
SPDX-License-Identifier: MIT
|
||||
SPDX-License-Identifier: ISC
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
SPDX-License-Identifier: BSD-3-Clause
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: (MPL-2.0 OR Apache-2.0)
|
||||
SPDX-FileCopyrightText: escape-html developers
|
||||
SPDX-FileCopyrightText: debounce developers
|
||||
SPDX-FileCopyrightText: atomiks
|
||||
SPDX-FileCopyrightText: Tobias Koppers @sokra
|
||||
SPDX-FileCopyrightText: T. Jameson Little <t.jameson.little@gmail.com>
|
||||
SPDX-FileCopyrightText: Roman Shtylman <shtylman@gmail.com>
|
||||
SPDX-FileCopyrightText: Roeland Jago Douma
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-FileCopyrightText: Matt Zabriskie
|
||||
SPDX-FileCopyrightText: Guillaume Chau
|
||||
SPDX-FileCopyrightText: GitHub Inc.
|
||||
SPDX-FileCopyrightText: Feross Aboukhadijeh
|
||||
SPDX-FileCopyrightText: Evan You
|
||||
SPDX-FileCopyrightText: Eduardo San Martin Morote
|
||||
SPDX-FileCopyrightText: Dr.-Ing. Mario Heiderich, Cure53 <mario@cure53.de> (https://cure53.de/)
|
||||
SPDX-FileCopyrightText: David Clark
|
||||
SPDX-FileCopyrightText: Christoph Wurst
|
||||
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- @floating-ui/core
|
||||
- version: 1.7.3
|
||||
- license: MIT
|
||||
- @floating-ui/utils
|
||||
- version: 0.2.10
|
||||
- license: MIT
|
||||
- @nextcloud/auth
|
||||
- version: 2.5.3
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/axios
|
||||
- version: 2.5.2
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/browser-storage
|
||||
- version: 0.5.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/initial-state
|
||||
- version: 2.2.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/capabilities
|
||||
- version: 1.2.0
|
||||
- license: GPL-3.0-or-later
|
||||
- semver
|
||||
- version: 7.7.2
|
||||
- license: ISC
|
||||
- @nextcloud/event-bus
|
||||
- version: 3.3.2
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/initial-state
|
||||
- version: 3.0.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/l10n
|
||||
- version: 3.4.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/logger
|
||||
- version: 3.0.2
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 9.0.1
|
||||
- license: AGPL-3.0-or-later
|
||||
- vue-router
|
||||
- version: 4.6.3
|
||||
- license: MIT
|
||||
- vue
|
||||
- version: 3.5.22
|
||||
- license: MIT
|
||||
- @nextcloud/password-confirmation
|
||||
- version: 6.0.1
|
||||
- license: MIT
|
||||
- @nextcloud/router
|
||||
- version: 3.0.1
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @vue/devtools-api
|
||||
- version: 6.6.4
|
||||
- license: MIT
|
||||
- @vue/reactivity
|
||||
- version: 3.5.22
|
||||
- license: MIT
|
||||
- @vue/runtime-core
|
||||
- version: 3.5.22
|
||||
- license: MIT
|
||||
- @vue/runtime-dom
|
||||
- version: 3.5.22
|
||||
- license: MIT
|
||||
- @vue/shared
|
||||
- version: 3.5.22
|
||||
- license: MIT
|
||||
- axios
|
||||
- version: 1.12.2
|
||||
- license: MIT
|
||||
- base64-js
|
||||
- version: 1.5.1
|
||||
- license: MIT
|
||||
- css-loader
|
||||
- version: 7.1.2
|
||||
- license: MIT
|
||||
- debounce
|
||||
- version: 2.2.0
|
||||
- license: MIT
|
||||
- dompurify
|
||||
- version: 3.2.7
|
||||
- license: (MPL-2.0 OR Apache-2.0)
|
||||
- escape-html
|
||||
- version: 1.0.3
|
||||
- license: MIT
|
||||
- focus-trap
|
||||
- version: 7.6.5
|
||||
- license: MIT
|
||||
- ieee754
|
||||
- version: 1.2.1
|
||||
- license: BSD-3-Clause
|
||||
- buffer
|
||||
- version: 6.0.3
|
||||
- license: MIT
|
||||
- process
|
||||
- version: 0.11.10
|
||||
- license: MIT
|
||||
- style-loader
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
- tabbable
|
||||
- version: 6.2.0
|
||||
- license: MIT
|
||||
- vue-loader
|
||||
- version: 15.11.1
|
||||
- license: MIT
|
||||
- vue
|
||||
- version: 2.7.16
|
||||
- license: MIT
|
||||
- vuex
|
||||
- version: 3.6.2
|
||||
- license: MIT
|
||||
- webpack
|
||||
- version: 5.102.1
|
||||
- license: MIT
|
||||
- nextcloud
|
||||
- version: 1.0.0
|
||||
- license: AGPL-3.0-or-later
|
||||
1
dist/twofactor_backupcodes-settings.js.map
vendored
1
dist/twofactor_backupcodes-settings.js.map
vendored
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
twofactor_backupcodes-settings.js.license
|
||||
1
dist/twofactor_backupcodes-twofactor_backupcodes-settings-personal-Dny2IOsk.chunk.css
vendored
Normal file
1
dist/twofactor_backupcodes-twofactor_backupcodes-settings-personal-Dny2IOsk.chunk.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
._backupcodesSettings_bnkw8_2{display:flex;flex-direction:column}._backupcodesSettings__code_bnkw8_7{font-family:monospace;letter-spacing:.02em;font-size:1.2em}._backupcodesSettings__actions_bnkw8_13{display:flex;flex-wrap:wrap;gap:var(--default-grid-baseline)}
|
||||
|
|
@ -79,7 +79,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 1.0.3
|
||||
- license: MIT
|
||||
- marked
|
||||
- version: 16.3.0
|
||||
- version: 16.4.1
|
||||
- license: MIT
|
||||
- process
|
||||
- version: 0.11.10
|
||||
|
|
|
|||
4
dist/user_status-menu.js
vendored
4
dist/user_status-menu.js
vendored
File diff suppressed because one or more lines are too long
2
dist/user_status-menu.js.map
vendored
2
dist/user_status-menu.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/workflowengine-workflowengine.js
vendored
4
dist/workflowengine-workflowengine.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -734,9 +734,6 @@ This file is generated from multiple sources. Included packages:
|
|||
- vue
|
||||
- version: 2.7.16
|
||||
- license: MIT
|
||||
- vuex
|
||||
- version: 3.6.2
|
||||
- license: MIT
|
||||
- webpack
|
||||
- version: 5.102.1
|
||||
- license: MIT
|
||||
|
|
|
|||
2
dist/workflowengine-workflowengine.js.map
vendored
2
dist/workflowengine-workflowengine.js.map
vendored
File diff suppressed because one or more lines are too long
131
package-lock.json
generated
131
package-lock.json
generated
|
|
@ -18,6 +18,7 @@
|
|||
"@nextcloud/password-confirmation": "^6.0.1",
|
||||
"@nextcloud/paths": "^2.2.1",
|
||||
"@nextcloud/vue": "^9.1.0",
|
||||
"pinia": "^3.0.3",
|
||||
"vue": "^3.5.22"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
@ -4509,6 +4510,30 @@
|
|||
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@vue/devtools-kit": {
|
||||
"version": "7.7.7",
|
||||
"resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz",
|
||||
"integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/devtools-shared": "^7.7.7",
|
||||
"birpc": "^2.3.0",
|
||||
"hookable": "^5.5.3",
|
||||
"mitt": "^3.0.1",
|
||||
"perfect-debounce": "^1.0.0",
|
||||
"speakingurl": "^14.0.1",
|
||||
"superjson": "^2.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/devtools-shared": {
|
||||
"version": "7.7.7",
|
||||
"resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz",
|
||||
"integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"rfdc": "^1.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/language-core": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz",
|
||||
|
|
@ -5316,6 +5341,15 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/birpc": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/birpc/-/birpc-2.6.1.tgz",
|
||||
"integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
}
|
||||
},
|
||||
"node_modules/bl": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
|
||||
|
|
@ -6204,6 +6238,21 @@
|
|||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/copy-anything": {
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz",
|
||||
"integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"is-what": "^5.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/mesqueeb"
|
||||
}
|
||||
},
|
||||
"node_modules/core-js": {
|
||||
"version": "3.46.0",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.46.0.tgz",
|
||||
|
|
@ -9220,6 +9269,12 @@
|
|||
"minimalistic-crypto-utils": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/hookable": {
|
||||
"version": "5.5.3",
|
||||
"resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
|
||||
"integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/hookified": {
|
||||
"version": "1.12.2",
|
||||
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.12.2.tgz",
|
||||
|
|
@ -10100,6 +10155,18 @@
|
|||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/is-what": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz",
|
||||
"integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/mesqueeb"
|
||||
}
|
||||
},
|
||||
"node_modules/isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
|
|
@ -12049,6 +12116,12 @@
|
|||
"node": ">=16 || 14 >=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/mitt": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
|
||||
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/mkdirp-classic": {
|
||||
"version": "0.5.3",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
|
||||
|
|
@ -12845,6 +12918,12 @@
|
|||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/perfect-debounce": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
|
||||
"integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/performance-now": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
|
|
@ -12880,6 +12959,36 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pinia": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz",
|
||||
"integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/devtools-api": "^7.7.2"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/posva"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": ">=4.4.4",
|
||||
"vue": "^2.7.0 || ^3.5.11"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"typescript": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/pinia/node_modules/@vue/devtools-api": {
|
||||
"version": "7.7.7",
|
||||
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz",
|
||||
"integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/devtools-kit": "^7.7.7"
|
||||
}
|
||||
},
|
||||
"node_modules/pkg-dir": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
|
||||
|
|
@ -13767,7 +13876,6 @@
|
|||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
|
||||
"integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/ripemd160": {
|
||||
|
|
@ -14549,6 +14657,15 @@
|
|||
"spdx-license-ids": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/speakingurl": {
|
||||
"version": "14.0.1",
|
||||
"resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
|
||||
"integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/spec-change": {
|
||||
"version": "1.11.20",
|
||||
"resolved": "https://registry.npmjs.org/spec-change/-/spec-change-1.11.20.tgz",
|
||||
|
|
@ -15306,6 +15423,18 @@
|
|||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/superjson": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.5.tgz",
|
||||
"integrity": "sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"copy-anything": "^4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
}
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "8.1.1",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
"@nextcloud/password-confirmation": "^6.0.1",
|
||||
"@nextcloud/paths": "^2.2.1",
|
||||
"@nextcloud/vue": "^9.1.0",
|
||||
"pinia": "^3.0.3",
|
||||
"vue": "^3.5.22"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
|||
Loading…
Reference in a new issue