mirror of
https://github.com/nextcloud/server.git
synced 2026-04-11 12:07:24 -04:00
Merge pull request #55432 from nextcloud/feat/vue3-demi-2
refactor: prepare Vue 3 migration
This commit is contained in:
commit
86e47d82e8
441 changed files with 32457 additions and 15005 deletions
5
.github/dependabot.yml
vendored
5
.github/dependabot.yml
vendored
|
|
@ -38,7 +38,10 @@ updates:
|
|||
|
||||
# Main master npm frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/frontend"
|
||||
- "/build/frontend-legacy"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
|
|
|
|||
9
.gitignore
vendored
9
.gitignore
vendored
|
|
@ -11,7 +11,7 @@
|
|||
/apps/inc.php
|
||||
/assets
|
||||
/.htaccess
|
||||
/node_modules
|
||||
node_modules/
|
||||
/translationfiles
|
||||
/translationtool.phar
|
||||
|
||||
|
|
@ -55,10 +55,6 @@
|
|||
/apps/files_external/3rdparty/irodsphp/prods/test*
|
||||
/apps/files_external/tests/config.*.php
|
||||
|
||||
# apps modules
|
||||
/apps/*/node_modules
|
||||
|
||||
|
||||
# ignore themes except the example and the README
|
||||
/themes/*
|
||||
!/themes/example
|
||||
|
|
@ -131,9 +127,6 @@ nbproject
|
|||
# Tests
|
||||
/tests/phpunit.xml
|
||||
|
||||
# Node Modules
|
||||
/build/node_modules/
|
||||
|
||||
# nodejs
|
||||
/build/bin
|
||||
/build/lib/
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ SPDX-FileCopyrightText = "2020 Nextcloud GmbH and Nextcloud contributors"
|
|||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
||||
[[annotations]]
|
||||
path = ["cypress/tsconfig.json", "cypress/fixtures/appstore/apps.json", "dist/icons.css"]
|
||||
path = ["cypress/tsconfig.json", "cypress/fixtures/appstore/apps.json", "dist/*.css"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2022 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@ class Admin implements IDelegatedSettings {
|
|||
$this->initialState->provideInitialState('sendPasswordMail', $this->settingsManager->sendPasswordByMail());
|
||||
$this->initialState->provideInitialState('replyToInitiator', $this->settingsManager->replyToInitiator());
|
||||
|
||||
\OCP\Util::addStyle('sharebymail', 'admin-settings');
|
||||
\OCP\Util::addScript('sharebymail', 'admin-settings');
|
||||
return new TemplateResponse('sharebymail', 'settings-admin', [], '');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,17 +7,11 @@
|
|||
<NcSettingsSection
|
||||
:name="t('sharebymail', 'Share by mail')"
|
||||
:description="t('sharebymail', 'Allows people to share a personalized link to a file or folder by putting in an email address.')">
|
||||
<NcCheckboxRadioSwitch
|
||||
type="switch"
|
||||
:checked.sync="sendPasswordMail"
|
||||
@update:checked="update('sendpasswordmail', sendPasswordMail)">
|
||||
<NcCheckboxRadioSwitch v-model="sendPasswordMail" type="switch">
|
||||
{{ t('sharebymail', 'Send password by mail') }}
|
||||
</NcCheckboxRadioSwitch>
|
||||
|
||||
<NcCheckboxRadioSwitch
|
||||
type="switch"
|
||||
:checked.sync="replyToInitiator"
|
||||
@update:checked="update('replyToInitiator', replyToInitiator)">
|
||||
<NcCheckboxRadioSwitch v-model="replyToInitiator" type="switch">
|
||||
{{ t('sharebymail', 'Reply to initiator') }}
|
||||
</NcCheckboxRadioSwitch>
|
||||
</NcSettingsSection>
|
||||
|
|
@ -27,6 +21,7 @@
|
|||
import axios from '@nextcloud/axios'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { confirmPassword } from '@nextcloud/password-confirmation'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
|
||||
|
|
@ -40,6 +35,10 @@ export default {
|
|||
NcSettingsSection,
|
||||
},
|
||||
|
||||
setup() {
|
||||
return { t }
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
sendPasswordMail: loadState('sharebymail', 'sendPasswordMail'),
|
||||
|
|
@ -47,6 +46,16 @@ export default {
|
|||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
sendPasswordMail(newValue) {
|
||||
this.update('sendpasswordmail', newValue)
|
||||
},
|
||||
|
||||
replyToInitiator(newValue) {
|
||||
this.update('replyToInitiator', newValue)
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
async update(key, value) {
|
||||
await confirmPassword()
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { getCSPNonce } from '@nextcloud/auth'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import Vue from 'vue'
|
||||
import AdminSettings from './components/AdminSettings.vue'
|
||||
|
||||
__webpack_nonce__ = getCSPNonce()
|
||||
|
||||
Vue.mixin({
|
||||
methods: {
|
||||
t,
|
||||
},
|
||||
})
|
||||
|
||||
const AdminSettingsView = Vue.extend(AdminSettings)
|
||||
new AdminSettingsView().$mount('#vue-admin-sharebymail')
|
||||
10
apps/sharebymail/src/settings-admin.ts
Normal file
10
apps/sharebymail/src/settings-admin.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { createApp } from 'vue'
|
||||
import AdminSettings from './components/AdminSettings.vue'
|
||||
|
||||
const app = createApp(AdminSettings)
|
||||
app.mount('#vue-admin-sharebymail')
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
\OCP\Util::addScript('sharebymail', 'vue-settings-admin-sharebymail');
|
||||
?>
|
||||
|
||||
<div id="vue-admin-sharebymail"></div>
|
||||
|
|
|
|||
50
build/demi.sh
Executable file
50
build/demi.sh
Executable file
|
|
@ -0,0 +1,50 @@
|
|||
#!/bin/bash
|
||||
|
||||
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
# This is a simple helper to execute npm COMMANDs in two directories
|
||||
# we need this as we cannot use npm workspaces as they break with 2 versions of vue.
|
||||
|
||||
COMMAND=""
|
||||
FRONTEND="$(dirname $0)/frontend"
|
||||
FRONTEND_LEGACY="$(dirname $0)/frontend-legacy"
|
||||
|
||||
build_command() {
|
||||
if [ "install" = "$1" ] || [ "ci" = "$1" ]; then
|
||||
COMMAND=$@
|
||||
elif [ "run" = "$1" ]; then
|
||||
COMMAND="run --if-present ${@:2}"
|
||||
else
|
||||
COMMAND="run --if-present $@"
|
||||
fi
|
||||
}
|
||||
|
||||
run_parallel() {
|
||||
npx concurrently \
|
||||
"cd \"$FRONTEND\" && npm $COMMAND" \
|
||||
"cd \"$FRONTEND_LEGACY\" && npm $COMMAND"
|
||||
}
|
||||
|
||||
run_sequentially() {
|
||||
echo -e "\e[1;34m>> Running 'npm $COMMAND' for Vue 3 based frontend\e[0m"
|
||||
echo
|
||||
pushd "$FRONTEND"
|
||||
npm $COMMAND
|
||||
popd
|
||||
|
||||
echo -e "\e[1;34m>> Running 'npm $COMMAND' for Vue 2 based frontend\e[0m"
|
||||
echo
|
||||
pushd "$FRONTEND_LEGACY"
|
||||
npm $COMMAND
|
||||
popd
|
||||
}
|
||||
|
||||
|
||||
if [ "--parallel" = "$1" ]; then
|
||||
build_command ${@:2}
|
||||
run_parallel
|
||||
else
|
||||
build_command $@
|
||||
run_sequentially
|
||||
fi
|
||||
|
|
@ -45,7 +45,6 @@ $expectedFiles = [
|
|||
'autotest-checkers.sh',
|
||||
'autotest-external.sh',
|
||||
'autotest.sh',
|
||||
'babel.config.js',
|
||||
'build',
|
||||
'codecov.yml',
|
||||
'composer.json',
|
||||
|
|
@ -59,7 +58,7 @@ $expectedFiles = [
|
|||
'cypress.config.ts',
|
||||
'cypress',
|
||||
'dist',
|
||||
'eslint.config.mjs',
|
||||
'eslint.config.js',
|
||||
'flake.lock',
|
||||
'flake.nix',
|
||||
'index.html',
|
||||
|
|
@ -86,10 +85,8 @@ $expectedFiles = [
|
|||
'tsconfig.json',
|
||||
'vendor-bin',
|
||||
'version.php',
|
||||
'vitest.config.mts',
|
||||
'webpack.common.cjs',
|
||||
'webpack.config.js',
|
||||
'webpack.modules.cjs',
|
||||
'vite.config.ts',
|
||||
'vitest.config.ts',
|
||||
'window.d.ts',
|
||||
];
|
||||
$actualFiles = [];
|
||||
|
|
|
|||
10
build/frontend-legacy/REUSE.toml
Normal file
10
build/frontend-legacy/REUSE.toml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
version = 1
|
||||
SPDX-PackageName = "nextcloud"
|
||||
SPDX-PackageSupplier = "Nextcloud <info@nextcloud.com>"
|
||||
SPDX-PackageDownloadLocation = "https://github.com/nextcloud/server"
|
||||
|
||||
[[annotations]]
|
||||
path = ["package.json", "package-lock.json", "tsconfig.json"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2025 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
18
build/frontend-legacy/__mocks__/@nextcloud/auth.ts
Normal file
18
build/frontend-legacy/__mocks__/@nextcloud/auth.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
export function getCurrentUser() {
|
||||
return {
|
||||
uid: 'test',
|
||||
displayName: 'Test',
|
||||
isAdmin: false,
|
||||
}
|
||||
}
|
||||
|
||||
export function getRequestToken() {
|
||||
return 'test-token-1234'
|
||||
}
|
||||
|
||||
export function onRequestTokenUpdate() {}
|
||||
18
build/frontend-legacy/__mocks__/@nextcloud/axios.ts
Normal file
18
build/frontend-legacy/__mocks__/@nextcloud/axios.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
export default {
|
||||
interceptors: {
|
||||
response: {
|
||||
use: () => {},
|
||||
},
|
||||
request: {
|
||||
use: () => {},
|
||||
},
|
||||
},
|
||||
get: async () => ({ status: 200, data: {} }),
|
||||
delete: async () => ({ status: 200, data: {} }),
|
||||
post: async () => ({ status: 200, data: {} }),
|
||||
head: async () => ({ status: 200, data: {} }),
|
||||
}
|
||||
23
build/frontend-legacy/__mocks__/@nextcloud/capabilities.ts
Normal file
23
build/frontend-legacy/__mocks__/@nextcloud/capabilities.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import type { Capabilities } from '../../apps/files/src/types.ts'
|
||||
|
||||
export function getCapabilities(): Capabilities {
|
||||
return {
|
||||
files: {
|
||||
bigfilechunking: true,
|
||||
blacklisted_files: [],
|
||||
forbidden_filename_basenames: [],
|
||||
forbidden_filename_characters: [],
|
||||
forbidden_filename_extensions: [],
|
||||
forbidden_filenames: [],
|
||||
undelete: true,
|
||||
version_deletion: true,
|
||||
version_labeling: true,
|
||||
versioning: true,
|
||||
},
|
||||
}
|
||||
}
|
||||
13
build/frontend-legacy/__mocks__/@nextcloud/dialogs.ts
Normal file
13
build/frontend-legacy/__mocks__/@nextcloud/dialogs.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest'
|
||||
|
||||
export const showMessage = vi.fn()
|
||||
export const showSuccess = vi.fn()
|
||||
export const showWarning = vi.fn()
|
||||
export const showInfo = vi.fn()
|
||||
export const showError = vi.fn()
|
||||
export const showUndo = vi.fn()
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
export function loadState(app: string, key: string, fallback?: any) {
|
||||
return fallback
|
||||
}
|
||||
5
build/frontend-legacy/__mocks__/css.js
Normal file
5
build/frontend-legacy/__mocks__/css.js
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
export default {}
|
||||
5
build/frontend-legacy/__mocks__/svg.js
Normal file
5
build/frontend-legacy/__mocks__/svg.js
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
export default '<svg>SvgMock</svg>'
|
||||
11
build/frontend-legacy/__mocks__/webdav.ts
Normal file
11
build/frontend-legacy/__mocks__/webdav.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
export function createClient() {}
|
||||
export function getPatcher() {
|
||||
return {
|
||||
patch: () => {},
|
||||
}
|
||||
}
|
||||
121
build/frontend-legacy/__tests__/FileSystemAPIUtils.ts
Normal file
121
build/frontend-legacy/__tests__/FileSystemAPIUtils.ts
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import mime from 'mime'
|
||||
import { basename } from 'node:path'
|
||||
|
||||
class FileSystemEntry {
|
||||
private _isFile: boolean
|
||||
private _fullPath: string
|
||||
|
||||
constructor(isFile: boolean, fullPath: string) {
|
||||
this._isFile = isFile
|
||||
this._fullPath = fullPath
|
||||
}
|
||||
|
||||
get isFile() {
|
||||
return !!this._isFile
|
||||
}
|
||||
|
||||
get isDirectory() {
|
||||
return !this.isFile
|
||||
}
|
||||
|
||||
get name() {
|
||||
return basename(this._fullPath)
|
||||
}
|
||||
}
|
||||
|
||||
export class FileSystemFileEntry extends FileSystemEntry {
|
||||
private _contents: string
|
||||
private _lastModified: number
|
||||
|
||||
constructor(fullPath: string, contents: string, lastModified = Date.now()) {
|
||||
super(true, fullPath)
|
||||
this._contents = contents
|
||||
this._lastModified = lastModified
|
||||
}
|
||||
|
||||
file(success: (file: File) => void) {
|
||||
const lastModified = this._lastModified
|
||||
// Faking the mime by using the file extension
|
||||
const type = mime.getType(this.name) || ''
|
||||
success(new File([this._contents], this.name, { lastModified, type }))
|
||||
}
|
||||
}
|
||||
|
||||
export class FileSystemDirectoryEntry extends FileSystemEntry {
|
||||
private _entries: FileSystemEntry[]
|
||||
|
||||
constructor(fullPath: string, entries: FileSystemEntry[]) {
|
||||
super(false, fullPath)
|
||||
this._entries = entries || []
|
||||
}
|
||||
|
||||
createReader() {
|
||||
let read = false
|
||||
return {
|
||||
readEntries: (success: (entries: FileSystemEntry[]) => void) => {
|
||||
if (read) {
|
||||
return success([])
|
||||
}
|
||||
read = true
|
||||
success(this._entries)
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This mocks the File API's File class
|
||||
* It will allow us to test the Filesystem API as well as the
|
||||
* File API in the same test suite.
|
||||
*/
|
||||
export class DataTransferItem {
|
||||
private _type: string
|
||||
private _entry: FileSystemEntry
|
||||
|
||||
getAsEntry?: () => FileSystemEntry
|
||||
|
||||
constructor(type = '', entry: FileSystemEntry, isFileSystemAPIAvailable = true) {
|
||||
this._type = type
|
||||
this._entry = entry
|
||||
|
||||
// Only when the Files API is available we are
|
||||
// able to get the entry
|
||||
if (isFileSystemAPIAvailable) {
|
||||
this.getAsEntry = () => this._entry
|
||||
}
|
||||
}
|
||||
|
||||
get kind() {
|
||||
return 'file'
|
||||
}
|
||||
|
||||
get type() {
|
||||
return this._type
|
||||
}
|
||||
|
||||
getAsFile(): File | null {
|
||||
if (this._entry.isFile && this._entry instanceof FileSystemFileEntry) {
|
||||
let file: File | null = null
|
||||
this._entry.file((f) => {
|
||||
file = f
|
||||
})
|
||||
return file
|
||||
}
|
||||
|
||||
// The browser will return an empty File object if the entry is a directory
|
||||
return new File([], this._entry.name, { type: '' })
|
||||
}
|
||||
}
|
||||
|
||||
export function fileSystemEntryToDataTransferItem(entry: FileSystemEntry, isFileSystemAPIAvailable = true): DataTransferItem {
|
||||
return new DataTransferItem(
|
||||
entry.isFile ? 'text/plain' : 'httpd/unix-directory',
|
||||
entry,
|
||||
isFileSystemAPIAvailable,
|
||||
)
|
||||
}
|
||||
15
build/frontend-legacy/__tests__/mock-window.js
Normal file
15
build/frontend-legacy/__tests__/mock-window.js
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
window.OC = {
|
||||
...window.OC,
|
||||
config: {
|
||||
version: '32.0.0',
|
||||
...(window.OC?.config ?? {}),
|
||||
},
|
||||
}
|
||||
window.OCA = { ...window.OCA }
|
||||
window.OCP = { ...window.OCP }
|
||||
|
||||
window._oc_webroot = ''
|
||||
7
build/frontend-legacy/__tests__/setup-global.js
Normal file
7
build/frontend-legacy/__tests__/setup-global.js
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
export function setup() {
|
||||
process.env.TZ = 'UTC'
|
||||
}
|
||||
6
build/frontend-legacy/__tests__/setup-testing-library.js
Normal file
6
build/frontend-legacy/__tests__/setup-testing-library.js
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
import '@testing-library/jest-dom/vitest'
|
||||
import 'core-js/stable/index.js'
|
||||
1
build/frontend-legacy/apps/comments
Symbolic link
1
build/frontend-legacy/apps/comments
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/comments
|
||||
1
build/frontend-legacy/apps/dashboard
Symbolic link
1
build/frontend-legacy/apps/dashboard
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/dashboard
|
||||
1
build/frontend-legacy/apps/dav
Symbolic link
1
build/frontend-legacy/apps/dav
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/dav
|
||||
1
build/frontend-legacy/apps/federatedfilesharing
Symbolic link
1
build/frontend-legacy/apps/federatedfilesharing
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/federatedfilesharing
|
||||
1
build/frontend-legacy/apps/files
Symbolic link
1
build/frontend-legacy/apps/files
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/files
|
||||
1
build/frontend-legacy/apps/files_external
Symbolic link
1
build/frontend-legacy/apps/files_external
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/files_external
|
||||
1
build/frontend-legacy/apps/files_reminders
Symbolic link
1
build/frontend-legacy/apps/files_reminders
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/files_reminders
|
||||
1
build/frontend-legacy/apps/files_sharing
Symbolic link
1
build/frontend-legacy/apps/files_sharing
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/files_sharing
|
||||
1
build/frontend-legacy/apps/files_trashbin
Symbolic link
1
build/frontend-legacy/apps/files_trashbin
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/files_trashbin
|
||||
1
build/frontend-legacy/apps/files_versions
Symbolic link
1
build/frontend-legacy/apps/files_versions
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/files_versions
|
||||
1
build/frontend-legacy/apps/oauth2
Symbolic link
1
build/frontend-legacy/apps/oauth2
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/oauth2
|
||||
1
build/frontend-legacy/apps/profile
Symbolic link
1
build/frontend-legacy/apps/profile
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/profile
|
||||
1
build/frontend-legacy/apps/settings
Symbolic link
1
build/frontend-legacy/apps/settings
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/settings
|
||||
1
build/frontend-legacy/apps/systemtags
Symbolic link
1
build/frontend-legacy/apps/systemtags
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/systemtags
|
||||
1
build/frontend-legacy/apps/theming
Symbolic link
1
build/frontend-legacy/apps/theming
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/theming
|
||||
1
build/frontend-legacy/apps/twofactor_backupcodes
Symbolic link
1
build/frontend-legacy/apps/twofactor_backupcodes
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/twofactor_backupcodes
|
||||
1
build/frontend-legacy/apps/updatenotification
Symbolic link
1
build/frontend-legacy/apps/updatenotification
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/updatenotification
|
||||
1
build/frontend-legacy/apps/user_ldap
Symbolic link
1
build/frontend-legacy/apps/user_ldap
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/user_ldap
|
||||
1
build/frontend-legacy/apps/user_status
Symbolic link
1
build/frontend-legacy/apps/user_status
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/user_status
|
||||
1
build/frontend-legacy/apps/weather_status
Symbolic link
1
build/frontend-legacy/apps/weather_status
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/weather_status
|
||||
1
build/frontend-legacy/apps/workflowengine
Symbolic link
1
build/frontend-legacy/apps/workflowengine
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/workflowengine
|
||||
1
build/frontend-legacy/core
Symbolic link
1
build/frontend-legacy/core
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../core
|
||||
77
build/frontend-legacy/eslint.config.mjs
Normal file
77
build/frontend-legacy/eslint.config.mjs
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { recommendedVue2 } from '@nextcloud/eslint-config'
|
||||
import CypressEslint from 'eslint-plugin-cypress'
|
||||
import { defineConfig } from 'eslint/config'
|
||||
import * as globals from 'globals'
|
||||
|
||||
export default defineConfig([
|
||||
{
|
||||
linterOptions: {
|
||||
reportUnusedDisableDirectives: 'error',
|
||||
reportUnusedInlineConfigs: 'error',
|
||||
},
|
||||
},
|
||||
|
||||
...recommendedVue2,
|
||||
|
||||
{
|
||||
name: 'server/custom-webpack-globals',
|
||||
files: ['**/*.js', '**/*.ts', '**/*.vue'],
|
||||
languageOptions: {
|
||||
globals: {
|
||||
PRODUCTION: 'readonly',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: 'server/scripts-are-cjs',
|
||||
files: [
|
||||
'*.js',
|
||||
'build/**/*.js',
|
||||
'**/core/src/icons.cjs',
|
||||
],
|
||||
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.es2023,
|
||||
...globals.node,
|
||||
},
|
||||
},
|
||||
|
||||
rules: {
|
||||
'no-console': 'off',
|
||||
'jsdoc/require-jsdoc': 'off',
|
||||
},
|
||||
},
|
||||
// Cypress setup
|
||||
CypressEslint.configs.recommended,
|
||||
{
|
||||
name: 'server/cypress',
|
||||
files: ['cypress/**', '**/*.cy.*'],
|
||||
rules: {
|
||||
'no-console': 'off',
|
||||
'jsdoc/require-jsdoc': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/no-unused-expressions': 'off',
|
||||
},
|
||||
},
|
||||
// customer server ignore files
|
||||
{
|
||||
name: 'server/ignored-files',
|
||||
ignores: [
|
||||
'.devcontainer/',
|
||||
'composer.json',
|
||||
'**/*.php',
|
||||
'3rdparty/',
|
||||
'tests/', // PHP tests
|
||||
'**/js/',
|
||||
'**/l10n/', // all translations (config only ignored in root)
|
||||
'**/vendor/', // different vendors
|
||||
],
|
||||
},
|
||||
])
|
||||
20230
build/frontend-legacy/package-lock.json
generated
Normal file
20230
build/frontend-legacy/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
151
build/frontend-legacy/package.json
Normal file
151
build/frontend-legacy/package.json
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
{
|
||||
"name": "nextcloud-ui-legacy",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"description": "Nextcloud Server",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"author": "Nextcloud GmbH and Nextcloud contributors",
|
||||
"scripts": {
|
||||
"build": "webpack --node-env production --progress",
|
||||
"dev": "webpack --node-env development --progress",
|
||||
"lint": "eslint --suppressions-location ../eslint-baseline.json --no-error-on-unmatched-pattern ./apps/*/ ./core/",
|
||||
"lint:fix": "eslint --suppressions-location ../eslint-baseline.json --fix --no-error-on-unmatched-pattern ./apps/*/ ./core/",
|
||||
"test": "vitest run",
|
||||
"test:coverage": "vitest run --coverage --reporter=default",
|
||||
"test:update-snapshots": "vitest run --update",
|
||||
"test:watch": "vitest watch",
|
||||
"watch": "webpack --node-env development --progress --watch"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
],
|
||||
"overrides": {
|
||||
"@vitejs/plugin-vue2": {
|
||||
"vite": "^7"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@chenfengyuan/vue-qrcode": "^1.0.2",
|
||||
"@mdi/js": "^7.4.47",
|
||||
"@mdi/svg": "^7.4.47",
|
||||
"@nextcloud/auth": "^2.5.3",
|
||||
"@nextcloud/axios": "^2.5.2",
|
||||
"@nextcloud/browser-storage": "^0.5.0",
|
||||
"@nextcloud/calendar-availability-vue": "^2.2.10",
|
||||
"@nextcloud/capabilities": "^1.2.0",
|
||||
"@nextcloud/dialogs": "^7.1.0",
|
||||
"@nextcloud/event-bus": "^3.3.2",
|
||||
"@nextcloud/files": "^3.12.0",
|
||||
"@nextcloud/initial-state": "^3.0.0",
|
||||
"@nextcloud/l10n": "^3.4.0",
|
||||
"@nextcloud/logger": "^3.0.2",
|
||||
"@nextcloud/moment": "^1.3.5",
|
||||
"@nextcloud/password-confirmation": "^6.0.1",
|
||||
"@nextcloud/paths": "^2.2.1",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/sharing": "^0.3.0",
|
||||
"@nextcloud/upload": "^1.11.0",
|
||||
"@nextcloud/vue": "^8.31.0",
|
||||
"@simplewebauthn/browser": "^13.2.2",
|
||||
"@vue/web-component-wrapper": "^1.3.0",
|
||||
"@vueuse/components": "^11.3.0",
|
||||
"@vueuse/core": "^11.3.0",
|
||||
"@vueuse/integrations": "^11.3.0",
|
||||
"backbone": "^1.6.1",
|
||||
"blurhash": "^2.0.5",
|
||||
"browserslist-useragent-regexp": "^4.1.3",
|
||||
"camelcase": "^8.0.0",
|
||||
"cancelable-promise": "^4.3.1",
|
||||
"clipboard": "^2.0.11",
|
||||
"color": "^5.0.2",
|
||||
"core-js": "^3.45.0",
|
||||
"crypto-browserify": "^3.12.1",
|
||||
"davclient.js": "nextcloud-deps/davclient.js#59d7777d7fe290c5f1fd74a58e7eb529b63e153d",
|
||||
"debounce": "^2.2.0",
|
||||
"dompurify": "^3.2.7",
|
||||
"escape-html": "^1.0.3",
|
||||
"focus-trap": "^7.6.5",
|
||||
"handlebars": "^4.7.8",
|
||||
"is-svg": "^6.1.0",
|
||||
"jquery": "~3.7",
|
||||
"jquery-ui": "1.14.1",
|
||||
"jquery-ui-dist": "^1.13.3",
|
||||
"libphonenumber-js": "^1.12.23",
|
||||
"lodash": "^4.17.21",
|
||||
"marked": "^16.3.0",
|
||||
"moment": "^2.30.1",
|
||||
"moment-timezone": "^0.6.0",
|
||||
"p-limit": "^7.1.1",
|
||||
"p-queue": "^8.1.0",
|
||||
"path": "^0.12.7",
|
||||
"pinia": "^2.3.1",
|
||||
"query-string": "^9.3.1",
|
||||
"regenerator-runtime": "^0.14.1",
|
||||
"select2": "3.5.1",
|
||||
"snap.js": "^2.0.9",
|
||||
"strengthify": "github:nextcloud/strengthify#0.5.9",
|
||||
"throttle-debounce": "^5.0.2",
|
||||
"underscore": "1.13.7",
|
||||
"url-search-params-polyfill": "^8.2.5",
|
||||
"v-click-outside": "^3.2.0",
|
||||
"v-tooltip": "^2.1.3",
|
||||
"vue": "^2.7.16",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-cropperjs": "^4.2.0",
|
||||
"vue-frag": "^1.4.3",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-localstorage": "^0.6.2",
|
||||
"vue-material-design-icons": "^5.3.1",
|
||||
"vue-router": "^3.6.5",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-router-sync": "^5.0.0",
|
||||
"webdav": "^5.8.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/node": "^7.28.0",
|
||||
"@babel/plugin-transform-private-methods": "^7.27.1",
|
||||
"@babel/preset-typescript": "^7.27.1",
|
||||
"@codecov/webpack-plugin": "^1.9.1",
|
||||
"@nextcloud/babel-config": "^1.2.0",
|
||||
"@nextcloud/typings": "^1.9.1",
|
||||
"@nextcloud/webpack-vue-config": "^6.3.0",
|
||||
"@pinia/testing": "^0.1.7",
|
||||
"@testing-library/jest-dom": "^6.6.4",
|
||||
"@testing-library/user-event": "^14.6.1",
|
||||
"@testing-library/vue": "^5.8.3",
|
||||
"@types/dockerode": "^3.3.44",
|
||||
"@types/wait-on": "^5.3.4",
|
||||
"@vitejs/plugin-vue2": "^2.3.3",
|
||||
"@vitest/coverage-v8": "^3.2.4",
|
||||
"@vue/test-utils": "^1.3.5",
|
||||
"@vue/tsconfig": "~0.5.1",
|
||||
"@zip.js/zip.js": "^2.8.2",
|
||||
"babel-loader-exclude-node-modules-except": "^1.2.1",
|
||||
"babel-plugin-module-resolver": "^5.0.2",
|
||||
"colord": "^2.9.3",
|
||||
"exports-loader": "^5.0.0",
|
||||
"file-loader": "^6.2.0",
|
||||
"handlebars-loader": "^1.7.3",
|
||||
"mime": "^4.1.0",
|
||||
"msw": "^2.11.3",
|
||||
"raw-loader": "^4.0.2",
|
||||
"regextras": "^0.8.0",
|
||||
"sass": "^1.93.2",
|
||||
"sinon": "<= 5.0.7",
|
||||
"typescript": "^5.9.2",
|
||||
"vite": "^7.1.8",
|
||||
"vitest": "^3.2.4",
|
||||
"vue-loader": "^15.11.1",
|
||||
"vue-template-compiler": "^2.7.16",
|
||||
"wait-on": "^8.0.4",
|
||||
"webpack": "^5.102.0",
|
||||
"webpack-cli": "^6.0.1",
|
||||
"webpack-merge": "^6.0.1",
|
||||
"workbox-webpack-plugin": "^7.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^22.0.0",
|
||||
"npm": "^10.5.0"
|
||||
}
|
||||
}
|
||||
35
build/frontend-legacy/tsconfig.json
Normal file
35
build/frontend-legacy/tsconfig.json
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.json",
|
||||
"include": ["./apps/**/*.ts", "./apps/**/*.vue", "./core/**/*.ts", "./core/**/*.vue", "./*.d.ts"],
|
||||
"exclude": ["./**/*.cy.ts"],
|
||||
"compilerOptions": {
|
||||
"lib": ["DOM", "ESNext"],
|
||||
"types": ["node", "vue", "vue-router"],
|
||||
"outDir": "./dist/",
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
// Set module resolution to bundler and `noEmit` to be able to set `allowImportingTsExtensions`, so we can import Typescript with .ts extension
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"noEmit": true,
|
||||
// Allow ts to import js files
|
||||
"allowJs": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"declaration": false,
|
||||
"noImplicitAny": false,
|
||||
"resolveJsonModule": true,
|
||||
"strict": true,
|
||||
},
|
||||
"vueCompilerOptions": {
|
||||
"target": 2.7
|
||||
},
|
||||
"ts-node": {
|
||||
// these options are overrides used only by ts-node
|
||||
// same as our --compilerOptions flag and our TS_NODE_COMPILER_OPTIONS environment variable
|
||||
"compilerOptions": {
|
||||
"moduleResolution": "node",
|
||||
"module": "commonjs",
|
||||
"verbatimModuleSyntax": false
|
||||
}
|
||||
}
|
||||
}
|
||||
66
build/frontend-legacy/vitest.config.mts
Normal file
66
build/frontend-legacy/vitest.config.mts
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
||||
import vue from '@vitejs/plugin-vue2'
|
||||
import { exec } from 'node:child_process'
|
||||
import { resolve } from 'node:path'
|
||||
import { promisify } from 'node:util'
|
||||
import { defaultExclude, defineConfig } from 'vitest/config'
|
||||
|
||||
const gitIgnore: string[] = []
|
||||
// get all files ignored in the apps directory (e.g. if putting `view` app there).
|
||||
try {
|
||||
const execAsync = promisify(exec)
|
||||
const { stdout } = await execAsync('git check-ignore apps/*', { cwd: __dirname })
|
||||
gitIgnore.push(...stdout.split('\n').filter(Boolean))
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('Git ignored files excluded from tests: ', gitIgnore)
|
||||
} catch (error) {
|
||||
// we can ignore error code 1 as this just means there are no ignored files
|
||||
if (error && (typeof error !== 'object' || !('code' in error && error.code === 1))) {
|
||||
// but otherwise something bad is happening and we should re-throw
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
root: import.meta.dirname,
|
||||
resolve: {
|
||||
preserveSymlinks: true,
|
||||
alias: {
|
||||
vue$: resolve(__dirname, './node_modules/vue/dist/vue.js'),
|
||||
},
|
||||
},
|
||||
test: {
|
||||
include: ['./{apps,core}/**/*.{test,spec}.?(c|m)[jt]s?(x)'],
|
||||
environment: 'jsdom',
|
||||
environmentOptions: {
|
||||
jsdom: {
|
||||
url: 'http://nextcloud.local',
|
||||
},
|
||||
},
|
||||
coverage: {
|
||||
include: ['./apps/*/src/**', 'core/src/**'],
|
||||
exclude: ['**.spec.*', '**.test.*', '**.cy.*', 'core/src/tests/**'],
|
||||
provider: 'v8',
|
||||
reporter: ['lcov', 'text'],
|
||||
},
|
||||
setupFiles: [
|
||||
'./__tests__/mock-window.js',
|
||||
'./__tests__/setup-testing-library.js',
|
||||
],
|
||||
exclude: [
|
||||
...defaultExclude,
|
||||
...gitIgnore,
|
||||
],
|
||||
globalSetup: './__tests__/setup-global.js',
|
||||
server: {
|
||||
deps: {
|
||||
inline: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
@ -11,10 +11,10 @@ const path = require('path')
|
|||
const { VueLoaderPlugin } = require('vue-loader')
|
||||
const webpack = require('webpack')
|
||||
const WorkboxPlugin = require('workbox-webpack-plugin')
|
||||
const WebpackSPDXPlugin = require('./build/WebpackSPDXPlugin.cjs')
|
||||
const modules = require('./webpack.modules.cjs')
|
||||
const WebpackSPDXPlugin = require('./WebpackSPDXPlugin.cjs')
|
||||
|
||||
const appVersion = readFileSync('./version.php').toString().match(/OC_Version.+\[([0-9]{2})/)?.[1] ?? 'unknown'
|
||||
const appVersion = readFileSync(path.join(__dirname, '../../version.php')).toString().match(/OC_Version.+\[([0-9]{2})/)?.[1] ?? 'unknown'
|
||||
const isDev = process.env.NODE_ENV === 'development'
|
||||
const isTesting = process.env.TESTING === 'true'
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ const config = {
|
|||
entry: modulesToBuild(),
|
||||
output: {
|
||||
// Step away from the src folder and extract to the js folder
|
||||
path: path.join(__dirname, 'dist'),
|
||||
path: path.join(__dirname, '../../dist'),
|
||||
// Let webpack determine automatically where it's located
|
||||
publicPath: 'auto',
|
||||
filename: '[name].js?v=[contenthash]',
|
||||
|
|
@ -73,9 +73,7 @@ const config = {
|
|||
const rel = path.relative(rootDir, info.absoluteResourcePath)
|
||||
return `webpack:///nextcloud/${rel}`
|
||||
},
|
||||
clean: {
|
||||
keep: /icons\.css/, // Keep static icons css
|
||||
},
|
||||
clean: false,
|
||||
},
|
||||
|
||||
module: {
|
||||
|
|
@ -182,7 +180,7 @@ const config = {
|
|||
// Provide jQuery to jquery plugins as some are loaded before $ is exposed globally.
|
||||
// We need to provide the path to node_moduels as otherwise npm link will fail due
|
||||
// to tribute.js checking for jQuery in @nextcloud/vue
|
||||
jQuery: path.resolve(path.join(__dirname, 'node_modules/jquery')),
|
||||
jQuery: require.resolve('jquery'),
|
||||
}),
|
||||
|
||||
new WorkboxPlugin.GenerateSW({
|
||||
|
|
@ -256,7 +254,7 @@ const config = {
|
|||
*/
|
||||
'.js': ['.js', '.ts'],
|
||||
},
|
||||
symlinks: true,
|
||||
symlinks: false,
|
||||
fallback: {
|
||||
fs: false,
|
||||
},
|
||||
|
|
@ -97,9 +97,6 @@ module.exports = {
|
|||
'vue-settings-personal-webauthn': path.join(__dirname, 'apps/settings/src', 'main-personal-webauth.js'),
|
||||
'declarative-settings-forms': path.join(__dirname, 'apps/settings/src', 'main-declarative-settings-forms.ts'),
|
||||
},
|
||||
sharebymail: {
|
||||
'vue-settings-admin-sharebymail': path.join(__dirname, 'apps/sharebymail/src', 'main-admin.js'),
|
||||
},
|
||||
systemtags: {
|
||||
init: path.join(__dirname, 'apps/systemtags/src', 'init.ts'),
|
||||
admin: path.join(__dirname, 'apps/systemtags/src', 'admin.ts'),
|
||||
10
build/frontend/REUSE.toml
Normal file
10
build/frontend/REUSE.toml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
version = 1
|
||||
SPDX-PackageName = "nextcloud"
|
||||
SPDX-PackageSupplier = "Nextcloud <info@nextcloud.com>"
|
||||
SPDX-PackageDownloadLocation = "https://github.com/nextcloud/server"
|
||||
|
||||
[[annotations]]
|
||||
path = ["package.json", "package-lock.json", "tsconfig.json"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2025 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
1
build/frontend/apps/sharebymail
Symbolic link
1
build/frontend/apps/sharebymail
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../apps/sharebymail
|
||||
5697
build/frontend/package-lock.json
generated
Normal file
5697
build/frontend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
31
build/frontend/package.json
Normal file
31
build/frontend/package.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"name": "nextcloud-ui",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"description": "Nextcloud Server Vue 3 UI",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"author": "Nextcloud GmbH and Nextcloud contributors",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "NODE_ENV=development vite build --mode development",
|
||||
"lint": "eslint --suppressions-location ../eslint-baseline.json --no-error-on-unmatched-pattern ./apps/*/ ./core/",
|
||||
"lint:fix": "eslint --suppressions-location ../eslint-baseline.json --fix --no-error-on-unmatched-pattern ./apps/*/ ./core/",
|
||||
"test": "vitest run --passWithNoTests",
|
||||
"test:coverage": "vitest run --passWithNoTests --coverage --reporter=default",
|
||||
"test:update-snapshots": "vitest run --update",
|
||||
"test:watch": "vitest watch",
|
||||
"watch": "NODE_ENV=development vite build --mode development --watch"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@nextcloud/vite-config": "^2.5.2",
|
||||
"vite": "npm:rolldown-vite@^7.1.19"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^22.0.0",
|
||||
"npm": "^10.5.0"
|
||||
}
|
||||
}
|
||||
4
build/frontend/tsconfig.json
Normal file
4
build/frontend/tsconfig.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"include": ["./apps", "./core"]
|
||||
}
|
||||
54
build/frontend/vite.config.mts
Normal file
54
build/frontend/vite.config.mts
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
/*!
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
||||
import { createAppConfig } from '@nextcloud/vite-config'
|
||||
import { resolve } from 'node:path'
|
||||
|
||||
export default createAppConfig({
|
||||
'admin-settings': resolve(import.meta.dirname, 'apps/sharebymail/src', 'settings-admin.ts'),
|
||||
}, {
|
||||
emptyOutputDirectory: {
|
||||
additionalDirectories: [resolve(import.meta.dirname, '../..', 'dist')],
|
||||
},
|
||||
extractLicenseInformation: {
|
||||
includeSourceMaps: true,
|
||||
},
|
||||
config: {
|
||||
root: resolve(import.meta.dirname, '../..'),
|
||||
resolve: {
|
||||
preserveSymlinks: true,
|
||||
},
|
||||
build: {
|
||||
outDir: 'dist',
|
||||
rollupOptions: {
|
||||
output: {
|
||||
entryFileNames({ facadeModuleId }) {
|
||||
const [, appId] = facadeModuleId!.match(/apps\/([^/]+)\//)!
|
||||
return `${appId}-[name].mjs`
|
||||
},
|
||||
chunkFileNames: '[name]-[hash].chunk.mjs',
|
||||
assetFileNames({ originalFileNames }) {
|
||||
const [name] = originalFileNames
|
||||
if (name) {
|
||||
const [, appId] = name.match(/apps\/([^/]+)\//)!
|
||||
return `${appId}-[name]-[hash][extname]`
|
||||
}
|
||||
return '[name]-[hash][extname]'
|
||||
},
|
||||
/* advancedChunks: {
|
||||
groups: [{ name: 'common', test: /[\\/]node_modules[\\/]/ }],
|
||||
// only include modules in the groups if they are used at least by 3 different chunks
|
||||
minShareCount: 3,
|
||||
// only include modules in the groups if they are smaller than 200kb on its own
|
||||
maxModuleSize: 200 * 1024,
|
||||
// define the groups output size (not too small but also not too big!)
|
||||
minSize: 50 * 1024,
|
||||
maxSize: 500 * 1024,
|
||||
}, */
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
||||
import vue from '@vitejs/plugin-vue2'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import { exec } from 'node:child_process'
|
||||
import { promisify } from 'node:util'
|
||||
import { defaultExclude, defineConfig } from 'vitest/config'
|
||||
|
|
@ -27,7 +27,7 @@ try {
|
|||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
test: {
|
||||
include: ['{apps,core}/**/*.{test,spec}.?(c|m)[jt]s?(x)'],
|
||||
include: ['./apps/sharebymail/**/*.{test,spec}.?(c|m)[jt]s?(x)'],
|
||||
environment: 'jsdom',
|
||||
environmentOptions: {
|
||||
jsdom: {
|
||||
381
build/icons.mjs
Normal file
381
build/icons.mjs
Normal file
|
|
@ -0,0 +1,381 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { readFileSync, writeFileSync} from 'node:fs'
|
||||
import { join, resolve } from 'node:path'
|
||||
import { compileString } from 'sass'
|
||||
|
||||
const IMAGE_PATH = resolve(import.meta.dirname, '../core/img')
|
||||
|
||||
const colors = {
|
||||
dark: '000',
|
||||
white: 'fff',
|
||||
// gold but for backwards compatibility called yellow
|
||||
yellow: 'a08b00',
|
||||
red: 'e9322d',
|
||||
orange: 'eca700',
|
||||
green: '46ba61',
|
||||
grey: '969696',
|
||||
}
|
||||
|
||||
const variables = {}
|
||||
const icons = {
|
||||
add: join(IMAGE_PATH, 'actions', 'add.svg'),
|
||||
address: join(IMAGE_PATH, 'actions', 'address.svg'),
|
||||
'alert-outline': join(IMAGE_PATH, 'actions', 'alert-outline.svg'),
|
||||
'audio-off': join(IMAGE_PATH, 'actions', 'audio-off.svg'),
|
||||
audio: join(IMAGE_PATH, 'actions', 'audio.svg'),
|
||||
calendar: join(IMAGE_PATH, 'places', 'calendar.svg'),
|
||||
caret: join(IMAGE_PATH, 'actions', 'caret.svg'),
|
||||
'category-app-bundles': join(IMAGE_PATH, 'categories', 'bundles.svg'),
|
||||
'category-auth': join(IMAGE_PATH, 'categories', 'auth.svg'),
|
||||
'category-customization': join(IMAGE_PATH, 'categories', 'customization.svg'),
|
||||
'category-dashboard': join(IMAGE_PATH, 'categories', 'dashboard.svg'),
|
||||
'category-files': join(IMAGE_PATH, 'categories', 'files.svg'),
|
||||
'category-games': join(IMAGE_PATH, 'categories', 'games.svg'),
|
||||
'category-integration': join(IMAGE_PATH, 'categories', 'integration.svg'),
|
||||
'category-monitoring': join(IMAGE_PATH, 'categories', 'monitoring.svg'),
|
||||
'category-multimedia': join(IMAGE_PATH, 'categories', 'multimedia.svg'),
|
||||
'category-office': join(IMAGE_PATH, 'categories', 'office.svg'),
|
||||
'category-organization': join(IMAGE_PATH, 'categories', 'organization.svg'),
|
||||
'category-social': join(IMAGE_PATH, 'categories', 'social.svg'),
|
||||
'category-workflow': join(IMAGE_PATH, 'categories', 'workflow.svg'),
|
||||
change: join(IMAGE_PATH, 'actions', 'change.svg'),
|
||||
checkmark: join(IMAGE_PATH, 'actions', 'checkmark.svg'),
|
||||
circles: join(IMAGE_PATH, 'apps', 'circles.svg'),
|
||||
clippy: join(IMAGE_PATH, 'actions', 'clippy.svg'),
|
||||
close: join(IMAGE_PATH, 'actions', 'close.svg'),
|
||||
comment: join(IMAGE_PATH, 'actions', 'comment.svg'),
|
||||
'confirm-fade': join(IMAGE_PATH, 'actions', 'confirm-fade.svg'),
|
||||
confirm: join(IMAGE_PATH, 'actions', 'confirm.svg'),
|
||||
contacts: join(IMAGE_PATH, 'places', 'contacts.svg'),
|
||||
delete: join(IMAGE_PATH, 'actions', 'delete.svg'),
|
||||
desktop: join(IMAGE_PATH, 'clients', 'desktop.svg'),
|
||||
details: join(IMAGE_PATH, 'actions', 'details.svg'),
|
||||
'disabled-user': join(IMAGE_PATH, 'actions', 'disabled-user.svg'),
|
||||
'disabled-users': join(IMAGE_PATH, 'actions', 'disabled-users.svg'),
|
||||
download: join(IMAGE_PATH, 'actions', 'download.svg'),
|
||||
edit: join(IMAGE_PATH, 'actions', 'edit.svg'),
|
||||
encryption: resolve(import.meta.dirname, '../apps/files_external/img', 'app.svg'),
|
||||
error: join(IMAGE_PATH, 'actions', 'error.svg'),
|
||||
external: join(IMAGE_PATH, 'actions', 'external.svg'),
|
||||
favorite: join(IMAGE_PATH, 'actions', 'star-dark.svg'),
|
||||
files: join(IMAGE_PATH, 'places', 'files.svg'),
|
||||
filter: join(IMAGE_PATH, 'actions', 'filter.svg'),
|
||||
folder: join(IMAGE_PATH, 'filetypes', 'folder.svg'),
|
||||
fullscreen: join(IMAGE_PATH, 'actions', 'fullscreen.svg'),
|
||||
group: join(IMAGE_PATH, 'actions', 'group.svg'),
|
||||
history: join(IMAGE_PATH, 'actions', 'history.svg'),
|
||||
home: join(IMAGE_PATH, 'places', 'home.svg'),
|
||||
info: join(IMAGE_PATH, 'actions', 'info.svg'),
|
||||
link: join(IMAGE_PATH, 'places', 'link.svg'),
|
||||
logout: join(IMAGE_PATH, 'actions', 'logout.svg'),
|
||||
mail: join(IMAGE_PATH, 'actions', 'mail.svg'),
|
||||
'menu-sidebar': join(IMAGE_PATH, 'actions', 'menu-sidebar.svg'),
|
||||
menu: join(IMAGE_PATH, 'actions', 'menu.svg'),
|
||||
more: join(IMAGE_PATH, 'actions', 'more.svg'),
|
||||
music: join(IMAGE_PATH, 'places', 'music.svg'),
|
||||
password: join(IMAGE_PATH, 'actions', 'password.svg'),
|
||||
pause: join(IMAGE_PATH, 'actions', 'pause.svg'),
|
||||
phone: join(IMAGE_PATH, 'clients', 'phone.svg'),
|
||||
picture: join(IMAGE_PATH, 'places', 'picture.svg'),
|
||||
'play-add': join(IMAGE_PATH, 'actions', 'play-add.svg'),
|
||||
'play-next': join(IMAGE_PATH, 'actions', 'play-next.svg'),
|
||||
'play-previous': join(IMAGE_PATH, 'actions', 'play-previous.svg'),
|
||||
play: join(IMAGE_PATH, 'actions', 'play.svg'),
|
||||
projects: join(IMAGE_PATH, 'actions', 'projects.svg'),
|
||||
public: join(IMAGE_PATH, 'actions', 'public.svg'),
|
||||
quota: join(IMAGE_PATH, 'actions', 'quota.svg'),
|
||||
recent: join(IMAGE_PATH, 'actions', 'recent.svg'),
|
||||
rename: join(IMAGE_PATH, 'actions', 'rename.svg'),
|
||||
'screen-off': join(IMAGE_PATH, 'actions', 'screen-off.svg'),
|
||||
screen: join(IMAGE_PATH, 'actions', 'screen.svg'),
|
||||
search: join(IMAGE_PATH, 'actions', 'search.svg'),
|
||||
settings: join(IMAGE_PATH, 'actions', 'settings-dark.svg'),
|
||||
share: join(IMAGE_PATH, 'actions', 'share.svg'),
|
||||
shared: join(IMAGE_PATH, 'actions', 'share.svg'),
|
||||
'sound-off': join(IMAGE_PATH, 'actions', 'sound-off.svg'),
|
||||
sound: join(IMAGE_PATH, 'actions', 'sound.svg'),
|
||||
star: join(IMAGE_PATH, 'actions', 'star.svg'),
|
||||
starred: join(IMAGE_PATH, 'actions', 'star-dark.svg'),
|
||||
'star-rounded': join(IMAGE_PATH, 'actions', 'star-rounded.svg'),
|
||||
tablet: join(IMAGE_PATH, 'clients', 'tablet.svg'),
|
||||
tag: join(IMAGE_PATH, 'actions', 'tag.svg'),
|
||||
talk: join(IMAGE_PATH, 'apps', 'spreed.svg'),
|
||||
teams: join(IMAGE_PATH, 'apps', 'circles.svg'),
|
||||
'template-add': join(IMAGE_PATH, 'actions', 'template-add.svg'),
|
||||
timezone: join(IMAGE_PATH, 'actions', 'timezone.svg'),
|
||||
'toggle-background': join(IMAGE_PATH, 'actions', 'toggle-background.svg'),
|
||||
'toggle-filelist': join(IMAGE_PATH, 'actions', 'toggle-filelist.svg'),
|
||||
'toggle-pictures': join(IMAGE_PATH, 'actions', 'toggle-pictures.svg'),
|
||||
toggle: join(IMAGE_PATH, 'actions', 'toggle.svg'),
|
||||
'triangle-e': join(IMAGE_PATH, 'actions', 'triangle-e.svg'),
|
||||
'triangle-n': join(IMAGE_PATH, 'actions', 'triangle-n.svg'),
|
||||
'triangle-s': join(IMAGE_PATH, 'actions', 'triangle-s.svg'),
|
||||
unshare: join(IMAGE_PATH, 'actions', 'unshare.svg'),
|
||||
upload: join(IMAGE_PATH, 'actions', 'upload.svg'),
|
||||
'user-admin': join(IMAGE_PATH, 'actions', 'user-admin.svg'),
|
||||
user: join(IMAGE_PATH, 'actions', 'user.svg'),
|
||||
'video-off': join(IMAGE_PATH, 'actions', 'video-off.svg'),
|
||||
'video-switch': join(IMAGE_PATH, 'actions', 'video-switch.svg'),
|
||||
video: join(IMAGE_PATH, 'actions', 'video.svg'),
|
||||
'view-close': join(IMAGE_PATH, 'actions', 'view-close.svg'),
|
||||
'view-download': join(IMAGE_PATH, 'actions', 'view-download.svg'),
|
||||
'view-next': join(IMAGE_PATH, 'actions', 'arrow-right.svg'),
|
||||
'view-pause': join(IMAGE_PATH, 'actions', 'view-pause.svg'),
|
||||
'view-play': join(IMAGE_PATH, 'actions', 'view-play.svg'),
|
||||
'view-previous': join(IMAGE_PATH, 'actions', 'arrow-left.svg'),
|
||||
}
|
||||
|
||||
const iconsColor = {
|
||||
'add-folder-description': {
|
||||
path: join(IMAGE_PATH, 'actions', 'add-folder-description.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
settings: {
|
||||
path: join(IMAGE_PATH, 'actions', 'settings.svg'),
|
||||
color: 'black',
|
||||
},
|
||||
'error-color': {
|
||||
path: join(IMAGE_PATH, 'actions', 'error.svg'),
|
||||
color: 'red',
|
||||
},
|
||||
'checkmark-color': {
|
||||
path: join(IMAGE_PATH, 'actions', 'checkmark.svg'),
|
||||
color: 'green',
|
||||
},
|
||||
starred: {
|
||||
path: join(IMAGE_PATH, 'actions', 'star-dark.svg'),
|
||||
color: 'yellow',
|
||||
},
|
||||
star: {
|
||||
path: join(IMAGE_PATH, 'actions', 'star-dark.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'delete-color': {
|
||||
path: join(IMAGE_PATH, 'actions', 'delete.svg'),
|
||||
color: 'red',
|
||||
},
|
||||
file: {
|
||||
path: join(IMAGE_PATH, 'filetypes', 'text.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'filetype-file': {
|
||||
path: join(IMAGE_PATH, 'filetypes', 'file.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'filetype-folder': {
|
||||
path: join(IMAGE_PATH, 'filetypes', 'folder.svg'),
|
||||
// TODO: replace primary ?
|
||||
color: 'primary',
|
||||
},
|
||||
'filetype-folder-drag-accept': {
|
||||
path: join(IMAGE_PATH, 'filetypes', 'folder-drag-accept.svg'),
|
||||
// TODO: replace primary ?
|
||||
color: 'primary',
|
||||
},
|
||||
'filetype-text': {
|
||||
path: join(IMAGE_PATH, 'filetypes', 'text.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'file-text': {
|
||||
path: join(IMAGE_PATH, 'filetypes', 'text.svg'),
|
||||
color: 'black',
|
||||
},
|
||||
}
|
||||
|
||||
// use this to define aliases to existing icons
|
||||
// key is the css selector, value is the variable
|
||||
const iconsAliases = {
|
||||
'icon-caret': 'icon-caret-white',
|
||||
// starring action
|
||||
'icon-star:hover': 'icon-starred',
|
||||
'icon-star:focus': 'icon-starred',
|
||||
// Un-starring action
|
||||
'icon-starred:hover': 'icon-star-grey',
|
||||
'icon-starred:focus': 'icon-star-grey',
|
||||
// Delete normal
|
||||
'icon-delete.no-permission:hover': 'icon-delete-dark',
|
||||
'icon-delete.no-permission:focus': 'icon-delete-dark',
|
||||
'icon-delete.no-hover:hover': 'icon-delete-dark',
|
||||
'icon-delete.no-hover:focus': 'icon-delete-dark',
|
||||
'icon-delete:hover': 'icon-delete-color-red',
|
||||
'icon-delete:focus': 'icon-delete-color-red',
|
||||
// Delete white
|
||||
'icon-delete-white.no-permission:hover': 'icon-delete-white',
|
||||
'icon-delete-white.no-permission:focus': 'icon-delete-white',
|
||||
'icon-delete-white.no-hover:hover': 'icon-delete-white',
|
||||
'icon-delete-white.no-hover:focus': 'icon-delete-white',
|
||||
'icon-delete-white:hover': 'icon-delete-color-red',
|
||||
'icon-delete-white:focus': 'icon-delete-color-red',
|
||||
// Default to white
|
||||
'icon-view-close': 'icon-view-close-white',
|
||||
'icon-view-download': 'icon-view-download-white',
|
||||
'icon-view-pause': 'icon-view-pause-white',
|
||||
'icon-view-play': 'icon-view-play-white',
|
||||
// Default app place to white
|
||||
'icon-calendar': 'icon-calendar-white',
|
||||
'icon-contacts': 'icon-contacts-white',
|
||||
'icon-files': 'icon-files-white',
|
||||
// Re-using existing icons
|
||||
'icon-category-installed': 'icon-user-dark',
|
||||
'icon-category-enabled': 'icon-checkmark-dark',
|
||||
'icon-category-disabled': 'icon-close-dark',
|
||||
'icon-category-updates': 'icon-download-dark',
|
||||
'icon-category-security': 'icon-password-dark',
|
||||
'icon-category-search': 'icon-search-dark',
|
||||
'icon-category-tools': 'icon-settings-dark',
|
||||
'nav-icon-systemtagsfilter': 'icon-tag-dark',
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param svg
|
||||
* @param color
|
||||
*/
|
||||
function colorSvg(svg = '', color = '000') {
|
||||
if (!color.match(/^[0-9a-f]{3,6}$/i)) {
|
||||
// Prevent not-sane colors from being written into the SVG
|
||||
console.warn(color, 'does not match the required format')
|
||||
color = '000'
|
||||
}
|
||||
|
||||
// add fill (fill is not present on black elements)
|
||||
const fillRe = /<((circle|rect|path)((?!fill=)[a-z0-9 =".\-#():;,])+)\/>/gmi
|
||||
svg = svg.replace(fillRe, '<$1 fill="#' + color + '"/>')
|
||||
|
||||
// replace any fill or stroke colors
|
||||
svg = svg.replace(/stroke="#([a-z0-9]{3,6})"/gmi, 'stroke="#' + color + '"')
|
||||
svg = svg.replace(/fill="#([a-z0-9]{3,6})"/gmi, 'fill="#' + color + '"')
|
||||
|
||||
return svg
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param invert
|
||||
*/
|
||||
function generateVariablesAliases(invert = false) {
|
||||
let css = ''
|
||||
Object.keys(variables).forEach((variable) => {
|
||||
if (variable.indexOf('original-') !== -1) {
|
||||
let finalVariable = variable.replace('original-', '')
|
||||
if (invert) {
|
||||
finalVariable = finalVariable.replace('white', 'tempwhite')
|
||||
.replace('dark', 'white')
|
||||
.replace('tempwhite', 'dark')
|
||||
}
|
||||
css += `${finalVariable}: var(${variable});`
|
||||
}
|
||||
})
|
||||
return css
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param icon
|
||||
* @param invert
|
||||
*/
|
||||
function formatIcon(icon, invert = false) {
|
||||
const color1 = invert ? 'white' : 'dark'
|
||||
const color2 = invert ? 'dark' : 'white'
|
||||
return `
|
||||
.icon-${icon},
|
||||
.icon-${icon}-dark {
|
||||
background-image: var(--icon-${icon}-${color1});
|
||||
}
|
||||
.icon-${icon}-white,
|
||||
.icon-${icon}.icon-white {
|
||||
background-image: var(--icon-${icon}-${color2});
|
||||
}`
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param icon
|
||||
*/
|
||||
function formatIconColor(icon) {
|
||||
const { color } = iconsColor[icon]
|
||||
return `
|
||||
.icon-${icon} {
|
||||
background-image: var(--icon-${icon}-${color});
|
||||
}`
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param alias
|
||||
* @param invert
|
||||
*/
|
||||
function formatAlias(alias, invert = false) {
|
||||
let icon = iconsAliases[alias]
|
||||
if (invert) {
|
||||
icon = icon.replace('white', 'tempwhite')
|
||||
.replace('dark', 'white')
|
||||
.replace('tempwhite', 'dark')
|
||||
}
|
||||
return `
|
||||
.${alias} {
|
||||
background-image: var(--${icon})
|
||||
}`
|
||||
}
|
||||
|
||||
let css = ''
|
||||
Object.keys(icons).forEach((icon) => {
|
||||
const path = icons[icon]
|
||||
|
||||
const svg = readFileSync(path, 'utf8')
|
||||
const darkSvg = colorSvg(svg, '000000')
|
||||
const whiteSvg = colorSvg(svg, 'ffffff')
|
||||
|
||||
variables[`--original-icon-${icon}-dark`] = Buffer.from(darkSvg, 'utf-8').toString('base64')
|
||||
variables[`--original-icon-${icon}-white`] = Buffer.from(whiteSvg, 'utf-8').toString('base64')
|
||||
})
|
||||
|
||||
Object.keys(iconsColor).forEach((icon) => {
|
||||
const { path, color } = iconsColor[icon]
|
||||
|
||||
const svg = readFileSync(path, 'utf8')
|
||||
const coloredSvg = colorSvg(svg, colors[color])
|
||||
variables[`--icon-${icon}-${color}`] = Buffer.from(coloredSvg, 'utf-8').toString('base64')
|
||||
})
|
||||
|
||||
// ICONS VARIABLES LIST
|
||||
css += ':root {'
|
||||
Object.keys(variables).forEach((variable) => {
|
||||
const data = variables[variable]
|
||||
css += `${variable}: url(data:image/svg+xml;base64,${data});`
|
||||
})
|
||||
css += '}'
|
||||
|
||||
// DEFAULT THEME
|
||||
css += 'body {'
|
||||
css += generateVariablesAliases()
|
||||
Object.keys(icons).forEach((icon) => {
|
||||
css += formatIcon(icon)
|
||||
})
|
||||
Object.keys(iconsColor).forEach((icon) => {
|
||||
css += formatIconColor(icon)
|
||||
})
|
||||
Object.keys(iconsAliases).forEach((alias) => {
|
||||
css += formatAlias(alias)
|
||||
})
|
||||
css += '}'
|
||||
|
||||
// DARK THEME MEDIA QUERY
|
||||
css += '@media (prefers-color-scheme: dark) { body {'
|
||||
css += generateVariablesAliases(true)
|
||||
css += '}}'
|
||||
|
||||
// DARK THEME
|
||||
css += '[data-themes*=light] {'
|
||||
css += generateVariablesAliases()
|
||||
css += '}'
|
||||
|
||||
// DARK THEME
|
||||
css += '[data-themes*=dark] {'
|
||||
css += generateVariablesAliases(true)
|
||||
css += '}'
|
||||
|
||||
// WRITE CSS
|
||||
writeFileSync(join(import.meta.dirname, '../dist', 'icons.css'), compileString(css).css)
|
||||
|
|
@ -12,13 +12,13 @@ npm run sass:icons
|
|||
|
||||
# Add licenses for source maps
|
||||
if [ -d "dist" ]; then
|
||||
for f in dist/*.js; do
|
||||
for f in dist/*.js dist/*.mjs dist/*.css; do
|
||||
# If license file and source map exists copy license for the source map
|
||||
if [ -f "$f.license" ] && [ -f "$f.map" ]; then
|
||||
# Remove existing link
|
||||
[ -e "$f.map.license" ] || [ -L "$f.map.license" ] && rm "$f.map.license"
|
||||
[ -L "$f.map.license" ] && rm "$f.map.license"
|
||||
# Create a new link
|
||||
ln -s "$(basename "$f.license")" "$f.map.license"
|
||||
[ ! -e "$f.map.license" ] && ln -s "$(basename "$f.license")" "$f.map.license"
|
||||
fi
|
||||
done
|
||||
echo "Copying licenses for sourcemaps done"
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -11,7 +11,7 @@
|
|||
@use 'fixes';
|
||||
@use 'mobile';
|
||||
@use 'tooltip';
|
||||
@use 'public';
|
||||
// If you include .css, it will be imported as url
|
||||
@use '../../node_modules/@nextcloud/dialogs/dist/style' as *;
|
||||
@use '../../node_modules/@nextcloud/password-confirmation/dist/style' as *;
|
||||
@use 'public';
|
||||
|
|
|
|||
|
|
@ -1,379 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import sass from 'sass'
|
||||
|
||||
const colors = {
|
||||
dark: '000',
|
||||
white: 'fff',
|
||||
// gold but for backwards compatibility called yellow
|
||||
yellow: 'a08b00',
|
||||
red: 'e9322d',
|
||||
orange: 'eca700',
|
||||
green: '46ba61',
|
||||
grey: '969696',
|
||||
}
|
||||
|
||||
const variables = {}
|
||||
const icons = {
|
||||
add: path.join(__dirname, '../img', 'actions', 'add.svg'),
|
||||
address: path.join(__dirname, '../img', 'actions', 'address.svg'),
|
||||
'alert-outline': path.join(__dirname, '../img', 'actions', 'alert-outline.svg'),
|
||||
'audio-off': path.join(__dirname, '../img', 'actions', 'audio-off.svg'),
|
||||
audio: path.join(__dirname, '../img', 'actions', 'audio.svg'),
|
||||
calendar: path.join(__dirname, '../img', 'places', 'calendar.svg'),
|
||||
caret: path.join(__dirname, '../img', 'actions', 'caret.svg'),
|
||||
'category-app-bundles': path.join(__dirname, '../img', 'categories', 'bundles.svg'),
|
||||
'category-auth': path.join(__dirname, '../img', 'categories', 'auth.svg'),
|
||||
'category-customization': path.join(__dirname, '../img', 'categories', 'customization.svg'),
|
||||
'category-dashboard': path.join(__dirname, '../img', 'categories', 'dashboard.svg'),
|
||||
'category-files': path.join(__dirname, '../img', 'categories', 'files.svg'),
|
||||
'category-games': path.join(__dirname, '../img', 'categories', 'games.svg'),
|
||||
'category-integration': path.join(__dirname, '../img', 'categories', 'integration.svg'),
|
||||
'category-monitoring': path.join(__dirname, '../img', 'categories', 'monitoring.svg'),
|
||||
'category-multimedia': path.join(__dirname, '../img', 'categories', 'multimedia.svg'),
|
||||
'category-office': path.join(__dirname, '../img', 'categories', 'office.svg'),
|
||||
'category-organization': path.join(__dirname, '../img', 'categories', 'organization.svg'),
|
||||
'category-social': path.join(__dirname, '../img', 'categories', 'social.svg'),
|
||||
'category-workflow': path.join(__dirname, '../img', 'categories', 'workflow.svg'),
|
||||
change: path.join(__dirname, '../img', 'actions', 'change.svg'),
|
||||
checkmark: path.join(__dirname, '../img', 'actions', 'checkmark.svg'),
|
||||
circles: path.join(__dirname, '../img', 'apps', 'circles.svg'),
|
||||
clippy: path.join(__dirname, '../img', 'actions', 'clippy.svg'),
|
||||
close: path.join(__dirname, '../img', 'actions', 'close.svg'),
|
||||
comment: path.join(__dirname, '../img', 'actions', 'comment.svg'),
|
||||
'confirm-fade': path.join(__dirname, '../img', 'actions', 'confirm-fade.svg'),
|
||||
confirm: path.join(__dirname, '../img', 'actions', 'confirm.svg'),
|
||||
contacts: path.join(__dirname, '../img', 'places', 'contacts.svg'),
|
||||
delete: path.join(__dirname, '../img', 'actions', 'delete.svg'),
|
||||
desktop: path.join(__dirname, '../img', 'clients', 'desktop.svg'),
|
||||
details: path.join(__dirname, '../img', 'actions', 'details.svg'),
|
||||
'disabled-user': path.join(__dirname, '../img', 'actions', 'disabled-user.svg'),
|
||||
'disabled-users': path.join(__dirname, '../img', 'actions', 'disabled-users.svg'),
|
||||
download: path.join(__dirname, '../img', 'actions', 'download.svg'),
|
||||
edit: path.join(__dirname, '../img', 'actions', 'edit.svg'),
|
||||
encryption: path.join(__dirname, '../../', 'apps/files_external/img', 'app.svg'),
|
||||
error: path.join(__dirname, '../img', 'actions', 'error.svg'),
|
||||
external: path.join(__dirname, '../img', 'actions', 'external.svg'),
|
||||
favorite: path.join(__dirname, '../img', 'actions', 'star-dark.svg'),
|
||||
files: path.join(__dirname, '../img', 'places', 'files.svg'),
|
||||
filter: path.join(__dirname, '../img', 'actions', 'filter.svg'),
|
||||
folder: path.join(__dirname, '../img', 'filetypes', 'folder.svg'),
|
||||
fullscreen: path.join(__dirname, '../img', 'actions', 'fullscreen.svg'),
|
||||
group: path.join(__dirname, '../img', 'actions', 'group.svg'),
|
||||
history: path.join(__dirname, '../img', 'actions', 'history.svg'),
|
||||
home: path.join(__dirname, '../img', 'places', 'home.svg'),
|
||||
info: path.join(__dirname, '../img', 'actions', 'info.svg'),
|
||||
link: path.join(__dirname, '../img', 'places', 'link.svg'),
|
||||
logout: path.join(__dirname, '../img', 'actions', 'logout.svg'),
|
||||
mail: path.join(__dirname, '../img', 'actions', 'mail.svg'),
|
||||
'menu-sidebar': path.join(__dirname, '../img', 'actions', 'menu-sidebar.svg'),
|
||||
menu: path.join(__dirname, '../img', 'actions', 'menu.svg'),
|
||||
more: path.join(__dirname, '../img', 'actions', 'more.svg'),
|
||||
music: path.join(__dirname, '../img', 'places', 'music.svg'),
|
||||
password: path.join(__dirname, '../img', 'actions', 'password.svg'),
|
||||
pause: path.join(__dirname, '../img', 'actions', 'pause.svg'),
|
||||
phone: path.join(__dirname, '../img', 'clients', 'phone.svg'),
|
||||
picture: path.join(__dirname, '../img', 'places', 'picture.svg'),
|
||||
'play-add': path.join(__dirname, '../img', 'actions', 'play-add.svg'),
|
||||
'play-next': path.join(__dirname, '../img', 'actions', 'play-next.svg'),
|
||||
'play-previous': path.join(__dirname, '../img', 'actions', 'play-previous.svg'),
|
||||
play: path.join(__dirname, '../img', 'actions', 'play.svg'),
|
||||
projects: path.join(__dirname, '../img', 'actions', 'projects.svg'),
|
||||
public: path.join(__dirname, '../img', 'actions', 'public.svg'),
|
||||
quota: path.join(__dirname, '../img', 'actions', 'quota.svg'),
|
||||
recent: path.join(__dirname, '../img', 'actions', 'recent.svg'),
|
||||
rename: path.join(__dirname, '../img', 'actions', 'rename.svg'),
|
||||
'screen-off': path.join(__dirname, '../img', 'actions', 'screen-off.svg'),
|
||||
screen: path.join(__dirname, '../img', 'actions', 'screen.svg'),
|
||||
search: path.join(__dirname, '../img', 'actions', 'search.svg'),
|
||||
settings: path.join(__dirname, '../img', 'actions', 'settings-dark.svg'),
|
||||
share: path.join(__dirname, '../img', 'actions', 'share.svg'),
|
||||
shared: path.join(__dirname, '../img', 'actions', 'share.svg'),
|
||||
'sound-off': path.join(__dirname, '../img', 'actions', 'sound-off.svg'),
|
||||
sound: path.join(__dirname, '../img', 'actions', 'sound.svg'),
|
||||
star: path.join(__dirname, '../img', 'actions', 'star.svg'),
|
||||
starred: path.join(__dirname, '../img', 'actions', 'star-dark.svg'),
|
||||
'star-rounded': path.join(__dirname, '../img', 'actions', 'star-rounded.svg'),
|
||||
tablet: path.join(__dirname, '../img', 'clients', 'tablet.svg'),
|
||||
tag: path.join(__dirname, '../img', 'actions', 'tag.svg'),
|
||||
talk: path.join(__dirname, '../img', 'apps', 'spreed.svg'),
|
||||
teams: path.join(__dirname, '../img', 'apps', 'circles.svg'),
|
||||
'template-add': path.join(__dirname, '../img', 'actions', 'template-add.svg'),
|
||||
timezone: path.join(__dirname, '../img', 'actions', 'timezone.svg'),
|
||||
'toggle-background': path.join(__dirname, '../img', 'actions', 'toggle-background.svg'),
|
||||
'toggle-filelist': path.join(__dirname, '../img', 'actions', 'toggle-filelist.svg'),
|
||||
'toggle-pictures': path.join(__dirname, '../img', 'actions', 'toggle-pictures.svg'),
|
||||
toggle: path.join(__dirname, '../img', 'actions', 'toggle.svg'),
|
||||
'triangle-e': path.join(__dirname, '../img', 'actions', 'triangle-e.svg'),
|
||||
'triangle-n': path.join(__dirname, '../img', 'actions', 'triangle-n.svg'),
|
||||
'triangle-s': path.join(__dirname, '../img', 'actions', 'triangle-s.svg'),
|
||||
unshare: path.join(__dirname, '../img', 'actions', 'unshare.svg'),
|
||||
upload: path.join(__dirname, '../img', 'actions', 'upload.svg'),
|
||||
'user-admin': path.join(__dirname, '../img', 'actions', 'user-admin.svg'),
|
||||
user: path.join(__dirname, '../img', 'actions', 'user.svg'),
|
||||
'video-off': path.join(__dirname, '../img', 'actions', 'video-off.svg'),
|
||||
'video-switch': path.join(__dirname, '../img', 'actions', 'video-switch.svg'),
|
||||
video: path.join(__dirname, '../img', 'actions', 'video.svg'),
|
||||
'view-close': path.join(__dirname, '../img', 'actions', 'view-close.svg'),
|
||||
'view-download': path.join(__dirname, '../img', 'actions', 'view-download.svg'),
|
||||
'view-next': path.join(__dirname, '../img', 'actions', 'arrow-right.svg'),
|
||||
'view-pause': path.join(__dirname, '../img', 'actions', 'view-pause.svg'),
|
||||
'view-play': path.join(__dirname, '../img', 'actions', 'view-play.svg'),
|
||||
'view-previous': path.join(__dirname, '../img', 'actions', 'arrow-left.svg'),
|
||||
}
|
||||
|
||||
const iconsColor = {
|
||||
'add-folder-description': {
|
||||
path: path.join(__dirname, '../img', 'actions', 'add-folder-description.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
settings: {
|
||||
path: path.join(__dirname, '../img', 'actions', 'settings.svg'),
|
||||
color: 'black',
|
||||
},
|
||||
'error-color': {
|
||||
path: path.join(__dirname, '../img', 'actions', 'error.svg'),
|
||||
color: 'red',
|
||||
},
|
||||
'checkmark-color': {
|
||||
path: path.join(__dirname, '../img', 'actions', 'checkmark.svg'),
|
||||
color: 'green',
|
||||
},
|
||||
starred: {
|
||||
path: path.join(__dirname, '../img', 'actions', 'star-dark.svg'),
|
||||
color: 'yellow',
|
||||
},
|
||||
star: {
|
||||
path: path.join(__dirname, '../img', 'actions', 'star-dark.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'delete-color': {
|
||||
path: path.join(__dirname, '../img', 'actions', 'delete.svg'),
|
||||
color: 'red',
|
||||
},
|
||||
file: {
|
||||
path: path.join(__dirname, '../img', 'filetypes', 'text.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'filetype-file': {
|
||||
path: path.join(__dirname, '../img', 'filetypes', 'file.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'filetype-folder': {
|
||||
path: path.join(__dirname, '../img', 'filetypes', 'folder.svg'),
|
||||
// TODO: replace primary ?
|
||||
color: 'primary',
|
||||
},
|
||||
'filetype-folder-drag-accept': {
|
||||
path: path.join(__dirname, '../img', 'filetypes', 'folder-drag-accept.svg'),
|
||||
// TODO: replace primary ?
|
||||
color: 'primary',
|
||||
},
|
||||
'filetype-text': {
|
||||
path: path.join(__dirname, '../img', 'filetypes', 'text.svg'),
|
||||
color: 'grey',
|
||||
},
|
||||
'file-text': {
|
||||
path: path.join(__dirname, '../img', 'filetypes', 'text.svg'),
|
||||
color: 'black',
|
||||
},
|
||||
}
|
||||
|
||||
// use this to define aliases to existing icons
|
||||
// key is the css selector, value is the variable
|
||||
const iconsAliases = {
|
||||
'icon-caret': 'icon-caret-white',
|
||||
// starring action
|
||||
'icon-star:hover': 'icon-starred',
|
||||
'icon-star:focus': 'icon-starred',
|
||||
// Un-starring action
|
||||
'icon-starred:hover': 'icon-star-grey',
|
||||
'icon-starred:focus': 'icon-star-grey',
|
||||
// Delete normal
|
||||
'icon-delete.no-permission:hover': 'icon-delete-dark',
|
||||
'icon-delete.no-permission:focus': 'icon-delete-dark',
|
||||
'icon-delete.no-hover:hover': 'icon-delete-dark',
|
||||
'icon-delete.no-hover:focus': 'icon-delete-dark',
|
||||
'icon-delete:hover': 'icon-delete-color-red',
|
||||
'icon-delete:focus': 'icon-delete-color-red',
|
||||
// Delete white
|
||||
'icon-delete-white.no-permission:hover': 'icon-delete-white',
|
||||
'icon-delete-white.no-permission:focus': 'icon-delete-white',
|
||||
'icon-delete-white.no-hover:hover': 'icon-delete-white',
|
||||
'icon-delete-white.no-hover:focus': 'icon-delete-white',
|
||||
'icon-delete-white:hover': 'icon-delete-color-red',
|
||||
'icon-delete-white:focus': 'icon-delete-color-red',
|
||||
// Default to white
|
||||
'icon-view-close': 'icon-view-close-white',
|
||||
'icon-view-download': 'icon-view-download-white',
|
||||
'icon-view-pause': 'icon-view-pause-white',
|
||||
'icon-view-play': 'icon-view-play-white',
|
||||
// Default app place to white
|
||||
'icon-calendar': 'icon-calendar-white',
|
||||
'icon-contacts': 'icon-contacts-white',
|
||||
'icon-files': 'icon-files-white',
|
||||
// Re-using existing icons
|
||||
'icon-category-installed': 'icon-user-dark',
|
||||
'icon-category-enabled': 'icon-checkmark-dark',
|
||||
'icon-category-disabled': 'icon-close-dark',
|
||||
'icon-category-updates': 'icon-download-dark',
|
||||
'icon-category-security': 'icon-password-dark',
|
||||
'icon-category-search': 'icon-search-dark',
|
||||
'icon-category-tools': 'icon-settings-dark',
|
||||
'nav-icon-systemtagsfilter': 'icon-tag-dark',
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param svg
|
||||
* @param color
|
||||
*/
|
||||
function colorSvg(svg = '', color = '000') {
|
||||
if (!color.match(/^[0-9a-f]{3,6}$/i)) {
|
||||
// Prevent not-sane colors from being written into the SVG
|
||||
console.warn(color, 'does not match the required format')
|
||||
color = '000'
|
||||
}
|
||||
|
||||
// add fill (fill is not present on black elements)
|
||||
const fillRe = /<((circle|rect|path)((?!fill=)[a-z0-9 =".\-#():;,])+)\/>/gmi
|
||||
svg = svg.replace(fillRe, '<$1 fill="#' + color + '"/>')
|
||||
|
||||
// replace any fill or stroke colors
|
||||
svg = svg.replace(/stroke="#([a-z0-9]{3,6})"/gmi, 'stroke="#' + color + '"')
|
||||
svg = svg.replace(/fill="#([a-z0-9]{3,6})"/gmi, 'fill="#' + color + '"')
|
||||
|
||||
return svg
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param invert
|
||||
*/
|
||||
function generateVariablesAliases(invert = false) {
|
||||
let css = ''
|
||||
Object.keys(variables).forEach((variable) => {
|
||||
if (variable.indexOf('original-') !== -1) {
|
||||
let finalVariable = variable.replace('original-', '')
|
||||
if (invert) {
|
||||
finalVariable = finalVariable.replace('white', 'tempwhite')
|
||||
.replace('dark', 'white')
|
||||
.replace('tempwhite', 'dark')
|
||||
}
|
||||
css += `${finalVariable}: var(${variable});`
|
||||
}
|
||||
})
|
||||
return css
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param icon
|
||||
* @param invert
|
||||
*/
|
||||
function formatIcon(icon, invert = false) {
|
||||
const color1 = invert ? 'white' : 'dark'
|
||||
const color2 = invert ? 'dark' : 'white'
|
||||
return `
|
||||
.icon-${icon},
|
||||
.icon-${icon}-dark {
|
||||
background-image: var(--icon-${icon}-${color1});
|
||||
}
|
||||
.icon-${icon}-white,
|
||||
.icon-${icon}.icon-white {
|
||||
background-image: var(--icon-${icon}-${color2});
|
||||
}`
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param icon
|
||||
*/
|
||||
function formatIconColor(icon) {
|
||||
const { color } = iconsColor[icon]
|
||||
return `
|
||||
.icon-${icon} {
|
||||
background-image: var(--icon-${icon}-${color});
|
||||
}`
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param alias
|
||||
* @param invert
|
||||
*/
|
||||
function formatAlias(alias, invert = false) {
|
||||
let icon = iconsAliases[alias]
|
||||
if (invert) {
|
||||
icon = icon.replace('white', 'tempwhite')
|
||||
.replace('dark', 'white')
|
||||
.replace('tempwhite', 'dark')
|
||||
}
|
||||
return `
|
||||
.${alias} {
|
||||
background-image: var(--${icon})
|
||||
}`
|
||||
}
|
||||
|
||||
let css = ''
|
||||
Object.keys(icons).forEach((icon) => {
|
||||
const path = icons[icon]
|
||||
|
||||
const svg = fs.readFileSync(path, 'utf8')
|
||||
const darkSvg = colorSvg(svg, '000000')
|
||||
const whiteSvg = colorSvg(svg, 'ffffff')
|
||||
|
||||
variables[`--original-icon-${icon}-dark`] = Buffer.from(darkSvg, 'utf-8').toString('base64')
|
||||
variables[`--original-icon-${icon}-white`] = Buffer.from(whiteSvg, 'utf-8').toString('base64')
|
||||
})
|
||||
|
||||
Object.keys(iconsColor).forEach((icon) => {
|
||||
const { path, color } = iconsColor[icon]
|
||||
|
||||
const svg = fs.readFileSync(path, 'utf8')
|
||||
const coloredSvg = colorSvg(svg, colors[color])
|
||||
variables[`--icon-${icon}-${color}`] = Buffer.from(coloredSvg, 'utf-8').toString('base64')
|
||||
})
|
||||
|
||||
// ICONS VARIABLES LIST
|
||||
css += ':root {'
|
||||
Object.keys(variables).forEach((variable) => {
|
||||
const data = variables[variable]
|
||||
css += `${variable}: url(data:image/svg+xml;base64,${data});`
|
||||
})
|
||||
css += '}'
|
||||
|
||||
// DEFAULT THEME
|
||||
css += 'body {'
|
||||
css += generateVariablesAliases()
|
||||
Object.keys(icons).forEach((icon) => {
|
||||
css += formatIcon(icon)
|
||||
})
|
||||
Object.keys(iconsColor).forEach((icon) => {
|
||||
css += formatIconColor(icon)
|
||||
})
|
||||
Object.keys(iconsAliases).forEach((alias) => {
|
||||
css += formatAlias(alias)
|
||||
})
|
||||
css += '}'
|
||||
|
||||
// DARK THEME MEDIA QUERY
|
||||
css += '@media (prefers-color-scheme: dark) { body {'
|
||||
css += generateVariablesAliases(true)
|
||||
css += '}}'
|
||||
|
||||
// DARK THEME
|
||||
css += '[data-themes*=light] {'
|
||||
css += generateVariablesAliases()
|
||||
css += '}'
|
||||
|
||||
// DARK THEME
|
||||
css += '[data-themes*=dark] {'
|
||||
css += generateVariablesAliases(true)
|
||||
css += '}'
|
||||
|
||||
// WRITE CSS
|
||||
fs.writeFileSync(path.join(__dirname, '../../dist', 'icons.css'), sass.compileString(css).css)
|
||||
|
|
@ -159,6 +159,7 @@ export default defineConfig({
|
|||
const ip = await startNextcloud(process.env.BRANCH, false, {
|
||||
mounts,
|
||||
exposePort: port,
|
||||
forceRecreate: true,
|
||||
})
|
||||
// Setting container's IP as base Url
|
||||
config.baseUrl = `http://localhost:${port}/index.php`
|
||||
|
|
|
|||
4
dist/1082-1082.js
vendored
4
dist/1082-1082.js
vendored
|
|
@ -1,2 +1,2 @@
|
|||
"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[1082],{1082:(e,t,n)=>{n.r(t),n.d(t,{default:()=>E});var s=n(85471),a=n(9165),r=n(53334),p=n(17334),i=n.n(p),c=n(11275),l=n(6695),o=n(16879),u=n(4114),A=n(82736);const d=(0,s.pM)({__name:"SearchEmptyView",setup(e){const t=(0,A.j)((0,u.u)()),n=i()(e=>{t.query=e},500);return{__sfc:!0,searchStore:t,debouncedUpdate:n,mdiMagnifyClose:a.WBH,t:r.t,NcEmptyContent:c.A,NcIconSvgWrapper:l.A,NcInputField:o.A}}});var f=n(85072),y=n.n(f),m=n(97825),C=n.n(m),h=n(77659),w=n.n(h),v=n(55056),_=n.n(v),x=n(10540),b=n.n(x),g=n(41113),S=n.n(g),k=n(67246),N={};N.styleTagTransform=S(),N.setAttributes=_(),N.insert=w().bind(null,"head"),N.domAPI=C(),N.insertStyleElement=b(),y()(k.A,N),k.A&&k.A.locals&&k.A.locals;const E=(0,n(14486).A)(d,function(){var e=this,t=e._self._c,n=e._self._setupProxy;return t(n.NcEmptyContent,{attrs:{name:n.t("files","No search results for “{query}”",{query:n.searchStore.query})},scopedSlots:e._u([{key:"icon",fn:function(){return[t(n.NcIconSvgWrapper,{attrs:{path:n.mdiMagnifyClose}})]},proxy:!0},{key:"action",fn:function(){return[t("div",{staticClass:"search-empty-view__wrapper"},[t(n.NcInputField,{staticClass:"search-empty-view__input",attrs:{label:n.t("files","Search for files"),"model-value":n.searchStore.query,type:"search"},on:{"update:model-value":n.debouncedUpdate}})],1)]},proxy:!0}])})},[],!1,null,"4e4bf1e2",null).exports},67246:(e,t,n)=>{n.d(t,{A:()=>i});var s=n(71354),a=n.n(s),r=n(76314),p=n.n(r)()(a());p.push([e.id,".search-empty-view__input[data-v-4e4bf1e2]{flex:0 1;min-width:min(400px,50vw)}.search-empty-view__wrapper[data-v-4e4bf1e2]{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline}","",{version:3,sources:["webpack://./apps/files/src/views/SearchEmptyView.vue"],names:[],mappings:"AAEC,2CACC,QAAA,CACA,yBAAA,CAGD,6CACC,YAAA,CACA,cAAA,CACA,QAAA,CACA,oBAAA",sourcesContent:["\n.search-empty-view {\n\t&__input {\n\t\tflex: 0 1;\n\t\tmin-width: min(400px, 50vw);\n\t}\n\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 10px;\n\t\talign-items: baseline;\n\t}\n}\n"],sourceRoot:""}]);const i=p}}]);
|
||||
//# sourceMappingURL=1082-1082.js.map?v=5717071164201a87ca6b
|
||||
"use strict";(self.webpackChunknextcloud_ui_legacy=self.webpackChunknextcloud_ui_legacy||[]).push([[1082],{1082:(e,t,n)=>{n.r(t),n.d(t,{default:()=>E});var a=n(85471),s=n(9165),r=n(53334),p=n(17334),i=n.n(p),c=n(11275),l=n(6695),o=n(16879),u=n(4114),A=n(82736);const d=(0,a.pM)({__name:"SearchEmptyView",setup(e){const t=(0,A.j)((0,u.u)()),n=i()(e=>{t.query=e},500);return{__sfc:!0,searchStore:t,debouncedUpdate:n,mdiMagnifyClose:s.WBH,t:r.t,NcEmptyContent:c.A,NcIconSvgWrapper:l.A,NcInputField:o.A}}});var f=n(85072),y=n.n(f),m=n(97825),C=n.n(m),_=n(77659),h=n.n(_),w=n(55056),v=n.n(w),x=n(10540),b=n.n(x),g=n(41113),S=n.n(g),k=n(67246),N={};N.styleTagTransform=S(),N.setAttributes=v(),N.insert=h().bind(null,"head"),N.domAPI=C(),N.insertStyleElement=b(),y()(k.A,N),k.A&&k.A.locals&&k.A.locals;const E=(0,n(14486).A)(d,function(){var e=this,t=e._self._c,n=e._self._setupProxy;return t(n.NcEmptyContent,{attrs:{name:n.t("files","No search results for “{query}”",{query:n.searchStore.query})},scopedSlots:e._u([{key:"icon",fn:function(){return[t(n.NcIconSvgWrapper,{attrs:{path:n.mdiMagnifyClose}})]},proxy:!0},{key:"action",fn:function(){return[t("div",{staticClass:"search-empty-view__wrapper"},[t(n.NcInputField,{staticClass:"search-empty-view__input",attrs:{label:n.t("files","Search for files"),"model-value":n.searchStore.query,type:"search"},on:{"update:model-value":n.debouncedUpdate}})],1)]},proxy:!0}])})},[],!1,null,"4e4bf1e2",null).exports},67246:(e,t,n)=>{n.d(t,{A:()=>i});var a=n(71354),s=n.n(a),r=n(76314),p=n.n(r)()(s());p.push([e.id,".search-empty-view__input[data-v-4e4bf1e2]{flex:0 1;min-width:min(400px,50vw)}.search-empty-view__wrapper[data-v-4e4bf1e2]{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline}","",{version:3,sources:["webpack://./apps/files/src/views/SearchEmptyView.vue"],names:[],mappings:"AAEC,2CACC,QAAA,CACA,yBAAA,CAGD,6CACC,YAAA,CACA,cAAA,CACA,QAAA,CACA,oBAAA",sourcesContent:["\n.search-empty-view {\n\t&__input {\n\t\tflex: 0 1;\n\t\tmin-width: min(400px, 50vw);\n\t}\n\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 10px;\n\t\talign-items: baseline;\n\t}\n}\n"],sourceRoot:""}]);const i=p}}]);
|
||||
//# sourceMappingURL=1082-1082.js.map?v=97342e1775a1c5225953
|
||||
6
dist/1082-1082.js.license
vendored
6
dist/1082-1082.js.license
vendored
|
|
@ -24,6 +24,7 @@ SPDX-FileCopyrightText: Eduardo San Martin Morote
|
|||
SPDX-FileCopyrightText: Dr.-Ing. Mario Heiderich, Cure53 <mario@cure53.de> (https://cure53.de/)
|
||||
SPDX-FileCopyrightText: Christoph Wurst
|
||||
SPDX-FileCopyrightText: Austin Andrews
|
||||
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
|
||||
SPDX-FileCopyrightText: Alkemics
|
||||
|
||||
|
||||
|
|
@ -74,7 +75,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 3.0.1
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.32.0
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @vue/devtools-api
|
||||
- version: 6.6.4
|
||||
|
|
@ -133,6 +134,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- typescript-event-target
|
||||
- version: 1.1.1
|
||||
- license: MIT
|
||||
- vue-demi
|
||||
- version: 0.14.10
|
||||
- license: MIT
|
||||
- vue-loader
|
||||
- version: 15.11.1
|
||||
- license: MIT
|
||||
|
|
|
|||
2
dist/1082-1082.js.map
vendored
2
dist/1082-1082.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/1543-1543.js
vendored
4
dist/1543-1543.js
vendored
|
|
@ -1,2 +1,2 @@
|
|||
"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[1543],{31543:(t,e,n)=>{n.d(e,{default:()=>b});var o=n(53334),m=n(65463),s=n(70452);const a={name:"ActivityCommentEntry",components:{Comment:m.A},mixins:[s.A],props:{comment:{type:Object,required:!0},reloadCallback:{type:Function,required:!0}},data:()=>({commentMessage:""}),watch:{comment(){this.commentMessage=this.comment.props.message}},mounted(){this.commentMessage=this.comment.props.message},methods:{t:o.t}};var r=n(85072),c=n.n(r),i=n(97825),p=n.n(i),l=n(77659),u=n.n(l),d=n(55056),C=n.n(d),y=n(10540),A=n.n(y),g=n(41113),f=n.n(g),h=n(71048),v={};v.styleTagTransform=f(),v.setAttributes=C(),v.insert=u().bind(null,"head"),v.domAPI=p(),v.insertStyleElement=A(),c()(h.A,v),h.A&&h.A.locals&&h.A.locals;const b=(0,n(14486).A)(a,function(){var t=this;return(0,t._self._c)("Comment",t._b({ref:"comment",staticClass:"comments-activity",attrs:{tag:"li","auto-complete":t.autoComplete,"resource-type":t.resourceType,message:t.commentMessage,"resource-id":t.resourceId,"user-data":t.genMentionsData(t.comment.props.mentions)},on:{delete:function(e){return t.reloadCallback()}}},"Comment",t.comment.props,!1))},[],!1,null,"6f28faaa",null).exports},71048:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(71354),m=n.n(o),s=n(76314),a=n.n(s)()(m());a.push([t.id,"\n.comments-activity[data-v-6f28faaa] {\n\tpadding: 0;\n}\n","",{version:3,sources:["webpack://./apps/comments/src/views/ActivityCommentEntry.vue"],names:[],mappings:";AAqEA;CACA,UAAA;AACA",sourcesContent:['\x3c!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n<template>\n\t<Comment\n\t\tref="comment"\n\t\ttag="li"\n\t\tv-bind="comment.props"\n\t\t:auto-complete="autoComplete"\n\t\t:resource-type="resourceType"\n\t\t:message="commentMessage"\n\t\t:resource-id="resourceId"\n\t\t:user-data="genMentionsData(comment.props.mentions)"\n\t\tclass="comments-activity"\n\t\t@delete="reloadCallback()" />\n</template>\n\n<script lang="ts">\nimport type { PropType } from \'vue\'\n\nimport { t } from \'@nextcloud/l10n\'\nimport Comment from \'../components/Comment.vue\'\nimport CommentView from \'../mixins/CommentView.ts\'\n\nexport default {\n\tname: \'ActivityCommentEntry\',\n\n\tcomponents: {\n\t\tComment,\n\t},\n\n\tmixins: [CommentView],\n\tprops: {\n\t\tcomment: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\treloadCallback: {\n\t\t\ttype: Function as PropType<() => void>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcommentMessage: \'\',\n\t\t}\n\t},\n\n\twatch: {\n\t\tcomment() {\n\t\t\tthis.commentMessage = this.comment.props.message\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.commentMessage = this.comment.props.message\n\t},\n\n\tmethods: {\n\t\tt,\n\t},\n}\n<\/script>\n\n<style scoped>\n.comments-activity {\n\tpadding: 0;\n}\n</style>\n'],sourceRoot:""}]);const r=a}}]);
|
||||
//# sourceMappingURL=1543-1543.js.map?v=d09c7d5e93297c3fd32f
|
||||
"use strict";(self.webpackChunknextcloud_ui_legacy=self.webpackChunknextcloud_ui_legacy||[]).push([[1543],{31543:(t,e,n)=>{n.d(e,{default:()=>b});var o=n(53334),m=n(65463),s=n(70452);const a={name:"ActivityCommentEntry",components:{Comment:m.A},mixins:[s.A],props:{comment:{type:Object,required:!0},reloadCallback:{type:Function,required:!0}},data:()=>({commentMessage:""}),watch:{comment(){this.commentMessage=this.comment.props.message}},mounted(){this.commentMessage=this.comment.props.message},methods:{t:o.t}};var r=n(85072),c=n.n(r),i=n(97825),p=n.n(i),l=n(77659),u=n.n(l),d=n(55056),y=n.n(d),C=n(10540),g=n.n(C),A=n(41113),f=n.n(A),h=n(71048),v={};v.styleTagTransform=f(),v.setAttributes=y(),v.insert=u().bind(null,"head"),v.domAPI=p(),v.insertStyleElement=g(),c()(h.A,v),h.A&&h.A.locals&&h.A.locals;const b=(0,n(14486).A)(a,function(){var t=this;return(0,t._self._c)("Comment",t._b({ref:"comment",staticClass:"comments-activity",attrs:{tag:"li","auto-complete":t.autoComplete,"resource-type":t.resourceType,message:t.commentMessage,"resource-id":t.resourceId,"user-data":t.genMentionsData(t.comment.props.mentions)},on:{delete:function(e){return t.reloadCallback()}}},"Comment",t.comment.props,!1))},[],!1,null,"6f28faaa",null).exports},71048:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(71354),m=n.n(o),s=n(76314),a=n.n(s)()(m());a.push([t.id,"\n.comments-activity[data-v-6f28faaa] {\n\tpadding: 0;\n}\n","",{version:3,sources:["webpack://./apps/comments/src/views/ActivityCommentEntry.vue"],names:[],mappings:";AAqEA;CACA,UAAA;AACA",sourcesContent:['\x3c!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n<template>\n\t<Comment\n\t\tref="comment"\n\t\ttag="li"\n\t\tv-bind="comment.props"\n\t\t:auto-complete="autoComplete"\n\t\t:resource-type="resourceType"\n\t\t:message="commentMessage"\n\t\t:resource-id="resourceId"\n\t\t:user-data="genMentionsData(comment.props.mentions)"\n\t\tclass="comments-activity"\n\t\t@delete="reloadCallback()" />\n</template>\n\n<script lang="ts">\nimport type { PropType } from \'vue\'\n\nimport { t } from \'@nextcloud/l10n\'\nimport Comment from \'../components/Comment.vue\'\nimport CommentView from \'../mixins/CommentView.ts\'\n\nexport default {\n\tname: \'ActivityCommentEntry\',\n\n\tcomponents: {\n\t\tComment,\n\t},\n\n\tmixins: [CommentView],\n\tprops: {\n\t\tcomment: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\treloadCallback: {\n\t\t\ttype: Function as PropType<() => void>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcommentMessage: \'\',\n\t\t}\n\t},\n\n\twatch: {\n\t\tcomment() {\n\t\t\tthis.commentMessage = this.comment.props.message\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.commentMessage = this.comment.props.message\n\t},\n\n\tmethods: {\n\t\tt,\n\t},\n}\n<\/script>\n\n<style scoped>\n.comments-activity {\n\tpadding: 0;\n}\n</style>\n'],sourceRoot:""}]);const r=a}}]);
|
||||
//# sourceMappingURL=1543-1543.js.map?v=3a58c8f0f8ca01cc695a
|
||||
56
dist/1543-1543.js.license
vendored
56
dist/1543-1543.js.license
vendored
|
|
@ -55,6 +55,7 @@ SPDX-FileCopyrightText: José F. Romaniello <jfromaniello@gmail.com> (http://jos
|
|||
SPDX-FileCopyrightText: Jordan Humphreys <jordan@zurb.com>
|
||||
SPDX-FileCopyrightText: Jordan Harband <ljharb@gmail.com>
|
||||
SPDX-FileCopyrightText: Jordan Harband
|
||||
SPDX-FileCopyrightText: Jordan Harbamd <ljharb@gmail.com>
|
||||
SPDX-FileCopyrightText: John Hiesey
|
||||
SPDX-FileCopyrightText: Jeff Sagal <sagalbot@gmail.com>
|
||||
SPDX-FileCopyrightText: James Halliday
|
||||
|
|
@ -85,6 +86,7 @@ SPDX-FileCopyrightText: Ben Drucker
|
|||
SPDX-FileCopyrightText: Arnout Kazemier
|
||||
SPDX-FileCopyrightText: Antoni Andre <antoniandre.web@gmail.com>
|
||||
SPDX-FileCopyrightText: Anthony Fu <https://github.com/antfu>
|
||||
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
|
||||
SPDX-FileCopyrightText: Andrea Giammarchi
|
||||
SPDX-FileCopyrightText: Amit Gupta (https://solothought.com)
|
||||
SPDX-FileCopyrightText: Amit Gupta (https://amitkumargupta.work/)
|
||||
|
|
@ -135,6 +137,12 @@ This file is generated from multiple sources. Included packages:
|
|||
- @vueuse/shared
|
||||
- version: 13.9.0
|
||||
- license: MIT
|
||||
- eventemitter3
|
||||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 9.0.0
|
||||
- license: MIT
|
||||
- rehype-react
|
||||
- version: 8.0.0
|
||||
- license: MIT
|
||||
|
|
@ -142,7 +150,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.0.4
|
||||
- license: MIT
|
||||
- vue-router
|
||||
- version: 4.6.0
|
||||
- version: 4.6.3
|
||||
- license: MIT
|
||||
- vue-select
|
||||
- version: 4.0.0-beta.6
|
||||
|
|
@ -181,7 +189,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 0.4.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.32.0
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @ungap/structured-clone
|
||||
- version: 1.3.0
|
||||
|
|
@ -256,7 +264,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.1.1
|
||||
- license: MIT
|
||||
- browserify-sign
|
||||
- version: 4.2.3
|
||||
- version: 4.2.5
|
||||
- license: ISC
|
||||
- buffer-xor
|
||||
- version: 1.0.3
|
||||
|
|
@ -283,7 +291,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 0.0.2
|
||||
- license: BSD-3-Clause
|
||||
- cipher-base
|
||||
- version: 1.0.6
|
||||
- version: 1.0.7
|
||||
- license: MIT
|
||||
- comma-separated-tokens
|
||||
- version: 2.0.3
|
||||
|
|
@ -387,6 +395,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- function-bind
|
||||
- version: 1.1.2
|
||||
- license: MIT
|
||||
- generator-function
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- get-intrinsic
|
||||
- version: 1.3.0
|
||||
- license: MIT
|
||||
|
|
@ -454,7 +465,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 1.2.7
|
||||
- license: MIT
|
||||
- is-generator-function
|
||||
- version: 1.1.0
|
||||
- version: 1.1.2
|
||||
- license: MIT
|
||||
- is-regex
|
||||
- version: 1.2.1
|
||||
|
|
@ -576,9 +587,6 @@ This file is generated from multiple sources. Included packages:
|
|||
- minimalistic-crypto-utils
|
||||
- version: 1.0.1
|
||||
- license: MIT
|
||||
- minimatch
|
||||
- version: 9.0.5
|
||||
- license: ISC
|
||||
- nested-property
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
|
|
@ -588,29 +596,14 @@ This file is generated from multiple sources. Included packages:
|
|||
- object-inspect
|
||||
- version: 1.13.4
|
||||
- license: MIT
|
||||
- eventemitter3
|
||||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 9.0.0
|
||||
- license: MIT
|
||||
- parse-asn1
|
||||
- version: 5.1.7
|
||||
- version: 5.1.9
|
||||
- license: ISC
|
||||
- path-posix
|
||||
- version: 1.0.0
|
||||
- license: ISC
|
||||
- create-hash
|
||||
- version: 1.1.3
|
||||
- license: MIT
|
||||
- hash-base
|
||||
- version: 2.0.2
|
||||
- license: MIT
|
||||
- ripemd160
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- pbkdf2
|
||||
- version: 3.1.3
|
||||
- version: 3.1.5
|
||||
- license: MIT
|
||||
- pinia
|
||||
- version: 2.3.1
|
||||
|
|
@ -672,8 +665,11 @@ This file is generated from multiple sources. Included packages:
|
|||
- requires-port
|
||||
- version: 1.0.0
|
||||
- license: MIT
|
||||
- hash-base
|
||||
- version: 3.1.2
|
||||
- license: MIT
|
||||
- ripemd160
|
||||
- version: 2.0.2
|
||||
- version: 2.0.3
|
||||
- license: MIT
|
||||
- safe-buffer
|
||||
- version: 5.2.1
|
||||
|
|
@ -739,7 +735,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 2.0.5
|
||||
- license: MIT
|
||||
- to-buffer
|
||||
- version: 1.2.1
|
||||
- version: 1.2.2
|
||||
- license: MIT
|
||||
- toastify-js
|
||||
- version: 1.12.0
|
||||
|
|
@ -801,6 +797,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- vm-browserify
|
||||
- version: 1.1.2
|
||||
- license: MIT
|
||||
- vue-demi
|
||||
- version: 0.14.10
|
||||
- license: MIT
|
||||
- vue-loader
|
||||
- version: 15.11.1
|
||||
- license: MIT
|
||||
|
|
@ -816,6 +815,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- fast-xml-parser
|
||||
- version: 4.5.3
|
||||
- license: MIT
|
||||
- minimatch
|
||||
- version: 9.0.5
|
||||
- license: ISC
|
||||
- strnum
|
||||
- version: 1.1.2
|
||||
- license: MIT
|
||||
|
|
|
|||
2
dist/1543-1543.js.map
vendored
2
dist/1543-1543.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/1626-1626.js
vendored
4
dist/1626-1626.js
vendored
File diff suppressed because one or more lines are too long
42
dist/1626-1626.js.license
vendored
42
dist/1626-1626.js.license
vendored
|
|
@ -81,6 +81,7 @@ SPDX-FileCopyrightText: Austin Andrews
|
|||
SPDX-FileCopyrightText: Arnout Kazemier
|
||||
SPDX-FileCopyrightText: Antoni Andre <antoniandre.web@gmail.com>
|
||||
SPDX-FileCopyrightText: Anthony Fu <https://github.com/antfu>
|
||||
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
|
||||
SPDX-FileCopyrightText: Andrea Giammarchi
|
||||
SPDX-FileCopyrightText: Alkemics
|
||||
SPDX-FileCopyrightText: @nextcloud/dialogs developers
|
||||
|
|
@ -95,7 +96,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 3.6.1
|
||||
- license: MIT
|
||||
- @file-type/xml
|
||||
- version: 0.4.3
|
||||
- version: 0.4.4
|
||||
- license: MIT
|
||||
- @floating-ui/core
|
||||
- version: 1.7.3
|
||||
|
|
@ -139,6 +140,12 @@ This file is generated from multiple sources. Included packages:
|
|||
- @vueuse/shared
|
||||
- version: 13.9.0
|
||||
- license: MIT
|
||||
- eventemitter3
|
||||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 9.0.0
|
||||
- license: MIT
|
||||
- rehype-react
|
||||
- version: 8.0.0
|
||||
- license: MIT
|
||||
|
|
@ -146,7 +153,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.0.4
|
||||
- license: MIT
|
||||
- vue-router
|
||||
- version: 4.6.0
|
||||
- version: 4.6.3
|
||||
- license: MIT
|
||||
- vue-select
|
||||
- version: 4.0.0-beta.6
|
||||
|
|
@ -200,7 +207,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 2.2.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.32.0
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @ungap/structured-clone
|
||||
- version: 1.3.0
|
||||
|
|
@ -266,7 +273,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.1.1
|
||||
- license: MIT
|
||||
- browserify-sign
|
||||
- version: 4.2.3
|
||||
- version: 4.2.5
|
||||
- license: ISC
|
||||
- buffer-xor
|
||||
- version: 1.0.3
|
||||
|
|
@ -290,7 +297,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 0.0.2
|
||||
- license: BSD-3-Clause
|
||||
- cipher-base
|
||||
- version: 1.0.6
|
||||
- version: 1.0.7
|
||||
- license: MIT
|
||||
- comma-separated-tokens
|
||||
- version: 2.0.3
|
||||
|
|
@ -578,10 +585,10 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 9.0.0
|
||||
- version: 8.1.1
|
||||
- license: MIT
|
||||
- parse-asn1
|
||||
- version: 5.1.7
|
||||
- version: 5.1.9
|
||||
- license: ISC
|
||||
- inherits
|
||||
- version: 2.0.3
|
||||
|
|
@ -592,17 +599,8 @@ This file is generated from multiple sources. Included packages:
|
|||
- path
|
||||
- version: 0.12.7
|
||||
- license: MIT
|
||||
- create-hash
|
||||
- version: 1.1.3
|
||||
- license: MIT
|
||||
- hash-base
|
||||
- version: 2.0.2
|
||||
- license: MIT
|
||||
- ripemd160
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- pbkdf2
|
||||
- version: 3.1.3
|
||||
- version: 3.1.5
|
||||
- license: MIT
|
||||
- possible-typed-array-names
|
||||
- version: 1.1.0
|
||||
|
|
@ -649,8 +647,11 @@ This file is generated from multiple sources. Included packages:
|
|||
- remark-unlink-protocols
|
||||
- version: 1.0.0
|
||||
- license: MIT
|
||||
- hash-base
|
||||
- version: 3.1.2
|
||||
- license: MIT
|
||||
- ripemd160
|
||||
- version: 2.0.2
|
||||
- version: 2.0.3
|
||||
- license: MIT
|
||||
- safe-buffer
|
||||
- version: 5.2.1
|
||||
|
|
@ -698,7 +699,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 2.0.5
|
||||
- license: MIT
|
||||
- to-buffer
|
||||
- version: 1.2.1
|
||||
- version: 1.2.2
|
||||
- license: MIT
|
||||
- toastify-js
|
||||
- version: 1.12.0
|
||||
|
|
@ -754,6 +755,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- vm-browserify
|
||||
- version: 1.1.2
|
||||
- license: MIT
|
||||
- vue-demi
|
||||
- version: 0.14.10
|
||||
- license: MIT
|
||||
- vue-loader
|
||||
- version: 15.11.1
|
||||
- license: MIT
|
||||
|
|
|
|||
2
dist/1626-1626.js.map
vendored
2
dist/1626-1626.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/1879-1879.js
vendored
4
dist/1879-1879.js
vendored
File diff suppressed because one or more lines are too long
6
dist/1879-1879.js.license
vendored
6
dist/1879-1879.js.license
vendored
|
|
@ -19,6 +19,7 @@ SPDX-FileCopyrightText: David Clark
|
|||
SPDX-FileCopyrightText: Christopher Jeffrey
|
||||
SPDX-FileCopyrightText: Christoph Wurst
|
||||
SPDX-FileCopyrightText: Anthony Fu <https://github.com/antfu>
|
||||
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
|
||||
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
|
|
@ -47,7 +48,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 3.0.1
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.32.0
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @vueuse/core
|
||||
- version: 11.3.0
|
||||
|
|
@ -94,6 +95,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- tabbable
|
||||
- version: 6.2.0
|
||||
- license: MIT
|
||||
- vue-demi
|
||||
- version: 0.14.10
|
||||
- license: MIT
|
||||
- vue-loader
|
||||
- version: 15.11.1
|
||||
- license: MIT
|
||||
|
|
|
|||
2
dist/1879-1879.js.map
vendored
2
dist/1879-1879.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/1938-1938.js
vendored
Normal file
2
dist/1938-1938.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -6,7 +6,6 @@ SPDX-License-Identifier: Apache-2.0
|
|||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: (MPL-2.0 OR Apache-2.0)
|
||||
SPDX-FileCopyrightText: string_decoder developers
|
||||
SPDX-FileCopyrightText: p-queue developers
|
||||
SPDX-FileCopyrightText: inherits developers
|
||||
SPDX-FileCopyrightText: escape-html developers
|
||||
SPDX-FileCopyrightText: debounce developers
|
||||
|
|
@ -38,6 +37,7 @@ SPDX-FileCopyrightText: Christoph Wurst
|
|||
SPDX-FileCopyrightText: Austin Andrews
|
||||
SPDX-FileCopyrightText: Arnout Kazemier
|
||||
SPDX-FileCopyrightText: Anthony Fu <https://github.com/antfu>
|
||||
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
|
||||
SPDX-FileCopyrightText: Alkemics
|
||||
SPDX-FileCopyrightText: @nextcloud/dialogs developers
|
||||
|
||||
|
|
@ -95,20 +95,11 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 3.0.1
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/dialogs
|
||||
- version: 6.3.2
|
||||
- version: 6.4.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @nextcloud/initial-state
|
||||
- version: 2.2.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/sharing
|
||||
- version: 0.2.5
|
||||
- license: GPL-3.0-or-later
|
||||
- eventemitter3
|
||||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 8.1.1
|
||||
- license: MIT
|
||||
- @nextcloud/vue-select
|
||||
- version: 3.26.0
|
||||
- license: MIT
|
||||
|
|
@ -119,7 +110,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 2.2.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.32.0
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @vueuse/components
|
||||
- version: 11.3.0
|
||||
|
|
@ -223,6 +214,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- unist-util-visit
|
||||
- version: 5.0.0
|
||||
- license: MIT
|
||||
- vue-demi
|
||||
- version: 0.14.10
|
||||
- license: MIT
|
||||
- vue-frag
|
||||
- version: 1.4.3
|
||||
- license: MIT
|
||||
1
dist/1938-1938.js.map
vendored
Normal file
1
dist/1938-1938.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/1938-1938.js.map.license
vendored
Symbolic link
1
dist/1938-1938.js.map.license
vendored
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
1938-1938.js.license
|
||||
4
dist/23-23.js
vendored
4
dist/23-23.js
vendored
File diff suppressed because one or more lines are too long
2
dist/23-23.js.license
vendored
2
dist/23-23.js.license
vendored
|
|
@ -22,7 +22,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 3.0.1
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.32.0
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- css-loader
|
||||
- version: 7.1.2
|
||||
|
|
|
|||
2
dist/23-23.js.map
vendored
2
dist/23-23.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/2391-2391.js
vendored
2
dist/2391-2391.js
vendored
|
|
@ -1 +1 @@
|
|||
"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[2391],{72391:(e,u,c)=>{c.r(u),c.d(u,{default:()=>l.N});var l=c(21829)}}]);
|
||||
"use strict";(self.webpackChunknextcloud_ui_legacy=self.webpackChunknextcloud_ui_legacy||[]).push([[2391],{72391:(e,u,c)=>{c.r(u),c.d(u,{default:()=>l.N});var l=c(21829)}}]);
|
||||
2
dist/2391-2391.js.license
vendored
2
dist/2391-2391.js.license
vendored
|
|
@ -29,7 +29,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 9.0.1
|
||||
- license: AGPL-3.0-or-later
|
||||
- vue-router
|
||||
- version: 4.6.0
|
||||
- version: 4.6.3
|
||||
- license: MIT
|
||||
- vue-select
|
||||
- version: 4.0.0-beta.6
|
||||
|
|
|
|||
4
dist/249-249.js
vendored
4
dist/249-249.js
vendored
File diff suppressed because one or more lines are too long
6
dist/249-249.js.license
vendored
6
dist/249-249.js.license
vendored
|
|
@ -14,6 +14,7 @@ SPDX-FileCopyrightText: Dr.-Ing. Mario Heiderich, Cure53 <mario@cure53.de> (http
|
|||
SPDX-FileCopyrightText: Christoph Wurst
|
||||
SPDX-FileCopyrightText: Austin Andrews
|
||||
SPDX-FileCopyrightText: Anthony Fu <https://github.com/antfu>
|
||||
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
|
||||
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
|
|
@ -45,7 +46,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 3.0.1
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue
|
||||
- version: 8.32.0
|
||||
- version: 8.31.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @vueuse/core
|
||||
- version: 11.3.0
|
||||
|
|
@ -68,6 +69,9 @@ This file is generated from multiple sources. Included packages:
|
|||
- style-loader
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
- vue-demi
|
||||
- version: 0.14.10
|
||||
- license: MIT
|
||||
- vue-loader
|
||||
- version: 15.11.1
|
||||
- license: MIT
|
||||
|
|
|
|||
2
dist/249-249.js.map
vendored
2
dist/249-249.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/2880-2880.js
vendored
4
dist/2880-2880.js
vendored
File diff suppressed because one or more lines are too long
38
dist/2880-2880.js.license
vendored
38
dist/2880-2880.js.license
vendored
|
|
@ -124,6 +124,12 @@ This file is generated from multiple sources. Included packages:
|
|||
- @vueuse/shared
|
||||
- version: 13.9.0
|
||||
- license: MIT
|
||||
- eventemitter3
|
||||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 9.0.0
|
||||
- license: MIT
|
||||
- rehype-react
|
||||
- version: 8.0.0
|
||||
- license: MIT
|
||||
|
|
@ -131,7 +137,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.0.4
|
||||
- license: MIT
|
||||
- vue-router
|
||||
- version: 4.6.0
|
||||
- version: 4.6.3
|
||||
- license: MIT
|
||||
- vue-select
|
||||
- version: 4.0.0-beta.6
|
||||
|
|
@ -227,7 +233,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.1.1
|
||||
- license: MIT
|
||||
- browserify-sign
|
||||
- version: 4.2.3
|
||||
- version: 4.2.5
|
||||
- license: ISC
|
||||
- buffer-xor
|
||||
- version: 1.0.3
|
||||
|
|
@ -248,7 +254,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 4.3.1
|
||||
- license: MIT
|
||||
- cipher-base
|
||||
- version: 1.0.6
|
||||
- version: 1.0.7
|
||||
- license: MIT
|
||||
- comma-separated-tokens
|
||||
- version: 2.0.3
|
||||
|
|
@ -514,14 +520,8 @@ This file is generated from multiple sources. Included packages:
|
|||
- buffer
|
||||
- version: 6.0.3
|
||||
- license: MIT
|
||||
- eventemitter3
|
||||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 9.0.0
|
||||
- license: MIT
|
||||
- parse-asn1
|
||||
- version: 5.1.7
|
||||
- version: 5.1.9
|
||||
- license: ISC
|
||||
- inherits
|
||||
- version: 2.0.3
|
||||
|
|
@ -532,17 +532,8 @@ This file is generated from multiple sources. Included packages:
|
|||
- path
|
||||
- version: 0.12.7
|
||||
- license: MIT
|
||||
- create-hash
|
||||
- version: 1.1.3
|
||||
- license: MIT
|
||||
- hash-base
|
||||
- version: 2.0.2
|
||||
- license: MIT
|
||||
- ripemd160
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- pbkdf2
|
||||
- version: 3.1.3
|
||||
- version: 3.1.5
|
||||
- license: MIT
|
||||
- possible-typed-array-names
|
||||
- version: 1.1.0
|
||||
|
|
@ -589,8 +580,11 @@ This file is generated from multiple sources. Included packages:
|
|||
- remark-unlink-protocols
|
||||
- version: 1.0.0
|
||||
- license: MIT
|
||||
- hash-base
|
||||
- version: 3.1.2
|
||||
- license: MIT
|
||||
- ripemd160
|
||||
- version: 2.0.2
|
||||
- version: 2.0.3
|
||||
- license: MIT
|
||||
- safe-buffer
|
||||
- version: 5.2.1
|
||||
|
|
@ -635,7 +629,7 @@ This file is generated from multiple sources. Included packages:
|
|||
- version: 2.0.5
|
||||
- license: MIT
|
||||
- to-buffer
|
||||
- version: 1.2.1
|
||||
- version: 1.2.2
|
||||
- license: MIT
|
||||
- toastify-js
|
||||
- version: 1.12.0
|
||||
|
|
|
|||
2
dist/2880-2880.js.map
vendored
2
dist/2880-2880.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/3128-3128.js
vendored
Normal file
2
dist/3128-3128.js
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
"use strict";(self.webpackChunknextcloud_ui_legacy=self.webpackChunknextcloud_ui_legacy||[]).push([[3128],{33128:(e,c,l)=>{l.d(c,{FilePickerVue:()=>u});const u=(0,l(85471).$V)(()=>Promise.all([l.e(4208),l.e(9165),l.e(1938)]).then(l.bind(l,91938)))}}]);
|
||||
//# sourceMappingURL=3128-3128.js.map?v=511efa1d13454d52aa76
|
||||
|
|
@ -6,7 +6,7 @@ SPDX-FileCopyrightText: @nextcloud/dialogs developers
|
|||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- @nextcloud/dialogs
|
||||
- version: 6.3.2
|
||||
- version: 6.4.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- vue
|
||||
- version: 2.7.16
|
||||
1
dist/3128-3128.js.map
vendored
Normal file
1
dist/3128-3128.js.map
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"3128-3128.js?v=511efa1d13454d52aa76","mappings":"wJACA,MAAMA,GAAgB,E,SAAA,IAAqB,IAAM,mE","sources":["webpack:///nextcloud/node_modules/@nextcloud/upload/node_modules/@nextcloud/dialogs/dist/chunks/index-CMm4vbO4.mjs"],"sourcesContent":["import { defineAsyncComponent } from \"vue\";\nconst FilePickerVue = defineAsyncComponent(() => import(\"./FilePicker-BMiOO53p.mjs\"));\nexport {\n FilePickerVue\n};\n//# sourceMappingURL=index-CMm4vbO4.mjs.map\n"],"names":["FilePickerVue"],"sourceRoot":""}
|
||||
1
dist/3128-3128.js.map.license
vendored
Symbolic link
1
dist/3128-3128.js.map.license
vendored
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
3128-3128.js.license
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue