Merge pull request #55432 from nextcloud/feat/vue3-demi-2

refactor: prepare Vue 3 migration
This commit is contained in:
Ferdinand Thiessen 2025-10-22 22:07:27 +02:00 committed by GitHub
commit 86e47d82e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
441 changed files with 32457 additions and 15005 deletions

View file

@ -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
View file

@ -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/

View file

@ -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"

View file

@ -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', [], '');
}

View file

@ -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()

View file

@ -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')

View 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')

View file

@ -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
View 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

View file

@ -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 = [];

View 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"

View 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() {}

View 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: {} }),
}

View 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,
},
}
}

View 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()

View file

@ -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
}

View file

@ -0,0 +1,5 @@
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
export default {}

View 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>'

View 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: () => {},
}
}

View 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,
)
}

View 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 = ''

View 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'
}

View 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'

View file

@ -0,0 +1 @@
../../../apps/comments

View file

@ -0,0 +1 @@
../../../apps/dashboard

View file

@ -0,0 +1 @@
../../../apps/dav

View file

@ -0,0 +1 @@
../../../apps/federatedfilesharing

View file

@ -0,0 +1 @@
../../../apps/files

View file

@ -0,0 +1 @@
../../../apps/files_external

View file

@ -0,0 +1 @@
../../../apps/files_reminders

View file

@ -0,0 +1 @@
../../../apps/files_sharing

View file

@ -0,0 +1 @@
../../../apps/files_trashbin

View file

@ -0,0 +1 @@
../../../apps/files_versions

View file

@ -0,0 +1 @@
../../../apps/oauth2

View file

@ -0,0 +1 @@
../../../apps/profile

View file

@ -0,0 +1 @@
../../../apps/settings

View file

@ -0,0 +1 @@
../../../apps/systemtags

View file

@ -0,0 +1 @@
../../../apps/theming

View file

@ -0,0 +1 @@
../../../apps/twofactor_backupcodes

View file

@ -0,0 +1 @@
../../../apps/updatenotification

View file

@ -0,0 +1 @@
../../../apps/user_ldap

View file

@ -0,0 +1 @@
../../../apps/user_status

View file

@ -0,0 +1 @@
../../../apps/weather_status

View file

@ -0,0 +1 @@
../../../apps/workflowengine

1
build/frontend-legacy/core Symbolic link
View file

@ -0,0 +1 @@
../../core

View 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

File diff suppressed because it is too large Load diff

View 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"
}
}

View 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
}
}
}

View 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,
},
},
},
})

View file

@ -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,
},

View file

@ -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
View 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"

View file

@ -0,0 +1 @@
../../../apps/sharebymail

5697
build/frontend/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View 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"
}
}

View file

@ -0,0 +1,4 @@
{
"extends": "../../tsconfig.json",
"include": ["./apps", "./core"]
}

View 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,
}, */
},
},
},
},
})

View file

@ -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
View 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)

View file

@ -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

View file

@ -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';

View file

@ -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)

View file

@ -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
View file

@ -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

View file

@ -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

File diff suppressed because one or more lines are too long

4
dist/1543-1543.js vendored
View file

@ -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

View file

@ -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

File diff suppressed because one or more lines are too long

4
dist/1626-1626.js vendored

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because one or more lines are too long

4
dist/1879-1879.js vendored

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because one or more lines are too long

2
dist/1938-1938.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because one or more lines are too long

1
dist/1938-1938.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
1938-1938.js.license

4
dist/23-23.js vendored

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because one or more lines are too long

2
dist/2391-2391.js vendored
View file

@ -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)}}]);

View file

@ -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

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because one or more lines are too long

4
dist/2880-2880.js vendored

File diff suppressed because one or more lines are too long

View file

@ -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

File diff suppressed because one or more lines are too long

2
dist/3128-3128.js vendored Normal file
View 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

View file

@ -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
View 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
View file

@ -0,0 +1 @@
3128-3128.js.license

Some files were not shown because too many files have changed in this diff Show more