diff --git a/.env.example b/.env.example index 31bc619..46b1311 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ ENV=development -NC_VERSION=31 +NC_VERSION=33 APP_URL=localhost API_URL=https://hejbit.local diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index af521dd..0d6ecb3 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -17,6 +17,9 @@ jobs: uses: appleboy/ssh-action@master with: host: ${{ vars.STAGING_SERVER_HOST }} - username: deploy + username: ${{ vars.STAGING_SERVER_USER }} key: ${{ secrets.STAGING_SSH_PRIVATE_KEY }} + proxy_host: ${{ vars.STAGING_PROXY_HOST }} + proxy_username: ${{ vars.STAGING_PROXY_USER }} + proxy_key: ${{ secrets.STAGING_PROXY_SSH_PRIVATE_KEY }} script: bash deploy diff --git a/.gitignore b/.gitignore index 2372cdf..6d590b6 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ js/nextcloud-swarm-plugin*.* # IDE .idea +.history # OS .DS_Store diff --git a/README.md b/README.md index c3b2753..c5351da 100755 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ This plugin integrates [Swarm](https://www.ethswarm.org/) (a decentralized, bloc Before using the plugin, ensure you have the following: -- An active Nextcloud instance (version 31 or 32) +- An active Nextcloud instance (version 32 or 33) - A valid Access Key and URL to activate the service - [Get Your Free Trial for the Nextcloud Swarm Plugin](https://app.hejbit.com) diff --git a/appinfo/info.xml b/appinfo/info.xml index 7b5a25b..7c33c0b 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -26,7 +26,7 @@ This plugin integrates [Swarm](https://www.ethswarm.org/) (a decentralized, bloc Before using the plugin, ensure you have the following: -- An active Nextcloud instance (version 31 or 32) +- An active Nextcloud instance (version 32 or 33) - A valid Access Key and URL to activate the service - [Get Your Free Trial for the Nextcloud Swarm Plugin](https://app.hejbit.com) @@ -104,7 +104,7 @@ This program is licensed under the AGPLv3 or later. https://github.com/MetaProvide/nextcloud-swarm-plugin.git https://raw.githubusercontent.com/MetaProvide/nextcloud-swarm-plugin/main/assets/images/swarm_Files.png - + OCA\Files_External_Ethswarm\Settings\Admin diff --git a/cli/staging/deploy.sh b/cli/staging/deploy.sh index 4a566a3..64f2755 100644 --- a/cli/staging/deploy.sh +++ b/cli/staging/deploy.sh @@ -64,7 +64,7 @@ action() { deploy() { local version=$1 - cd hejbit-"$version" || failed "hejbit-$version not found" + cd "/opt/hejbit/hejbit-$version" || failed "$version" "/opt/hejbit/hejbit-$version not found" buffer "$(log_note "deploying hejbit-$version")" @@ -85,6 +85,24 @@ sync_code() { git pull 2>&1 || return 1 } +setup_node() { + command -v npm > /dev/null 2>&1 && return 0 + + export NVM_DIR="$HOME/.nvm" + if [ -s "$NVM_DIR/nvm.sh" ]; then + . "$NVM_DIR/nvm.sh" + + NODE_20_VERSION=$(nvm version 20 2> /dev/null) + if [ "$NODE_20_VERSION" != "N/A" ]; then + nvm use --silent "$NODE_20_VERSION" > /dev/null 2>&1 || return 1 + else + nvm use --silent default > /dev/null 2>&1 || return 1 + fi + fi + + command -v npm > /dev/null 2>&1 || return 1 +} + build_app() { result=$(npm install 2>&1) status=$? @@ -114,24 +132,19 @@ nextcloud_upgrade() { } cd /opt/hejbit || log_error "/opt/hejbit not found" + +if ! setup_node; then + log_error "npm not found for user $(whoami)" + log_error "install node/npm or configure nvm default" + exit 1 +fi + log_note "deploying hejbit to staging" log_gap -DEPLOYMENT=() TIMESTAMP=$(date +%s) -for version in {30..32}; do - deploy "$version" & - DEPLOYMENT+=($!) -done - -statuses=0 -for pid in "${DEPLOYMENT[@]}"; do - wait "$pid" - statuses+=$? +for version in {32..33}; do + deploy "$version" done -if [ $statuses -ne 0 ]; then - log_error "failed to deploy hejbit to staging" - exit 1 -fi log_success "deployed hejbit to staging" diff --git a/composer.lock b/composer.lock index eb54f20..9e37ca0 100644 --- a/composer.lock +++ b/composer.lock @@ -216,5 +216,5 @@ "platform-dev": { "ext-fileinfo": "*" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/css/app.css b/css/app.css index c1db97a..e7f3b26 100644 --- a/css/app.css +++ b/css/app.css @@ -1,13 +1,4 @@ .hejbit-overlay { - position: absolute; - top: 30px; - left: 75px; - width: 16px; - height: 16px; - pointer-events: none; -} - -.hejbit-overlay-32 { position: absolute; top: 23px; left: 60px; @@ -21,11 +12,6 @@ height: 16px; } -.hejbit-overlay-32 svg { - width: 16px; - height: 16px; -} - .hejbit-archive svg { filter: grayscale(100%); diff --git a/docker-compose.yml b/docker-compose.yml index dceeecc..61b2c54 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -105,7 +105,27 @@ services: networks: - backend - adminer: # visit https://adminer.hejbit.local/?pgsql=postgres&username=swarmbox&db=swarmbox + rsync: + build: + context: ./docker/rsync + dockerfile: Dockerfile + restart: unless-stopped + cpu_shares: 512 + mem_limit: 256m + volumes: + - nc-app:/app:ro + - ./dev-environment/nextcloud_source:/source + environment: + - RSYNC_CRONTAB=crontab + depends_on: + - nextcloud + networks: + - backend + + adminer: + profiles: + - development + # visit https://adminer.hejbit.local/?pgsql=postgres&username=swarmbox&db=swarmbox image: adminer:latest restart: unless-stopped # ports: @@ -113,7 +133,6 @@ services: networks: - backend - proxy - depends_on: postgres: condition: service_healthy @@ -125,24 +144,9 @@ services: environment: ADMINER_DEFAULT_SERVER: postgres - rsync: - build: - context: ./docker/rsync - dockerfile: Dockerfile - restart: unless-stopped - cpu_shares: 512 - mem_limit: 256m - volumes: - - nc-app:/app:ro - - ./dev-environment/nextcloud_source:/source - environment: - - RSYNC_CRONTAB=crontab - depends_on: - - nextcloud - networks: - - backend - flagd: + profiles: + - feature image: ghcr.io/open-feature/flagd:latest restart: unless-stopped command: 'start --uri file:/etc/flagd/hejbit.flagd.json --cors-origin *' @@ -158,10 +162,10 @@ services: depends_on: proxy: condition: service_healthy - profiles: - - feature onlyoffice: + profiles: + - onlyoffice image: onlyoffice/documentserver environment: JWT_ENABLED: true @@ -186,8 +190,6 @@ services: depends_on: proxy: condition: service_healthy - profiles: - - onlyoffice proxy: image: lucaslorentz/caddy-docker-proxy:alpine @@ -220,6 +222,7 @@ volumes: onlyoffice_lib: onlyoffice_logs: + networks: frontend: backend: diff --git a/lib/Storage/BeeSwarm.php b/lib/Storage/BeeSwarm.php index 88cbe46..e2a5901 100755 --- a/lib/Storage/BeeSwarm.php +++ b/lib/Storage/BeeSwarm.php @@ -26,7 +26,6 @@ use OC; use OC\Files\Cache\Cache; use OC\Files\Storage\Common; -use OC_Helper; use OCA\Files_External_Ethswarm\AppInfo\Application; use OCA\Files_External_Ethswarm\Db\SwarmFile; use OCA\Files_External_Ethswarm\Db\SwarmFileMapper; @@ -515,7 +514,7 @@ protected function createTempFile($stream): string { $extension = ''; $tmpFile = $this->tempManager->getTemporaryFile($extension); $target = fopen($tmpFile, 'w'); - OC_Helper::streamCopy($stream, $target); + stream_copy_to_stream($stream, $target); fclose($target); return $tmpFile; diff --git a/package-lock.json b/package-lock.json index 5291f6c..325597a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,9 @@ "@betahuhn/feedback-js": "^2.1.25", "@material-design-icons/svg": "^0.14.15", "@nextcloud/axios": "^2.5.1", - "@nextcloud/dialogs": "^6.1.1", + "@nextcloud/dialogs": "^7.0.0", "@nextcloud/event-bus": "^3.3.1", - "@nextcloud/files": "^3.6.0", + "@nextcloud/files": "^4.0.0", "@nextcloud/router": "^2.0.0", "@nextcloud/vue": "^8.25.1", "@openfeature/flagd-web-provider": "^0.7.3", @@ -159,16 +159,15 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", - "dev": true, + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -382,18 +381,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -439,12 +438,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1613,13 +1612,13 @@ } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1755,6 +1754,15 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -1970,29 +1978,39 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@file-type/xml": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@file-type/xml/-/xml-0.4.4.tgz", + "integrity": "sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==", + "license": "MIT", + "dependencies": { + "sax": "^1.4.1", + "strtok3": "^10.3.4" + } + }, "node_modules/@floating-ui/core": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", - "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.9" + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", - "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.9" + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", - "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { @@ -2089,35 +2107,29 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2135,17 +2147,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2234,32 +2244,39 @@ } }, "node_modules/@nextcloud/auth": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.4.0.tgz", - "integrity": "sha512-T5OFltKd0O9Hfj47VrzE7TVjCwqOMHH9JLyjjLUR3pu2MaTY9WL6AjL79sHbFTXUaIkftZgJKu12lHYmqXnL2Q==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.5.3.tgz", + "integrity": "sha512-KIhWLk0BKcP4hvypE4o11YqKOPeFMfEFjRrhUUF+h7Fry+dhTBIEIxuQPVCKXMIpjTDd8791y8V6UdRZ2feKAQ==", "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/browser-storage": "^0.4.0", - "@nextcloud/event-bus": "^3.3.1" + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/event-bus": "^3.3.2" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/auth/node_modules/@nextcloud/browser-storage": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@nextcloud/browser-storage/-/browser-storage-0.5.0.tgz", + "integrity": "sha512-usYr4GlJQlK3hgZURvklqWb9ivi7sgsSuFqXrs7s4hl1LTS4enzPrnkQumm6nRsQruf0ITS+OBsK+oELEbvYPA==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^24 || ^22 || ^20" } }, "node_modules/@nextcloud/axios": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@nextcloud/axios/-/axios-2.5.1.tgz", - "integrity": "sha512-AA7BPF/rsOZWAiVxqlobGSdD67AEwjOnymZCKUIwEIBArKxYK7OQEqcILDjQwgj6G0e/Vg9Y8zTVsPZp+mlvwA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@nextcloud/axios/-/axios-2.5.2.tgz", + "integrity": "sha512-8frJb77jNMbz00TjsSqs1PymY0nIEbNM4mVmwen2tXY7wNgRai6uXilIlXKOYB9jR/F/HKRj6B4vUwVwZbhdbw==", "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/auth": "^2.3.0", + "@nextcloud/auth": "^2.5.1", "@nextcloud/router": "^3.0.1", - "axios": "^1.6.8" + "axios": "^1.12.2" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/axios/node_modules/@nextcloud/router": { @@ -2308,62 +2325,538 @@ "license": "GPL-3.0-or-later" }, "node_modules/@nextcloud/capabilities": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.0.tgz", - "integrity": "sha512-L1NQtOfHWzkfj0Ple1MEJt6HmOHWAi3y4qs+OnwSWexqJT0DtXTVPyRxi7ADyITwRxS5H9R/HMl6USAj4Nr1nQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.1.tgz", + "integrity": "sha512-snZ0/910zzwN6PDsIlx2Uvktr1S5x0ClhDUnfPlCj7ntNvECzuVHNY5wzby22LIkc+9ZjaDKtCwuCt2ye+9p/Q==", "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/initial-state": "^2.1.0" + "@nextcloud/initial-state": "^3.0.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/capabilities/node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/dialogs": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-6.1.1.tgz", - "integrity": "sha512-RrvFPt8SgCkg8rC0PtMC0fvyEu77kKbY2cJ/j+6RLse3rFWcNGwgNZNuRkA/Nn4GgzQ7QNhKTqWknsy0ld6rNQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-7.3.0.tgz", + "integrity": "sha512-pFuM10Dkvip+wSBaElcbSAN7Jynp41HJUh5kndRYpJipYl0SpNfjIe32+uNfOI43/tln4ScTlrfjIX6cK+3uHg==", "license": "AGPL-3.0-or-later", "dependencies": { "@mdi/js": "^7.4.47", - "@nextcloud/auth": "^2.4.0", - "@nextcloud/axios": "^2.5.1", - "@nextcloud/event-bus": "^3.3.1", - "@nextcloud/files": "^3.9.0", - "@nextcloud/initial-state": "^2.2.0", - "@nextcloud/l10n": "^3.1.0", - "@nextcloud/router": "^3.0.1", - "@nextcloud/sharing": "^0.2.4", - "@nextcloud/typings": "^1.9.1", - "@types/toastify-js": "^1.12.3", - "@vueuse/core": "^11.2.0", - "cancelable-promise": "^4.3.1", - "p-queue": "^8.1.0", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/axios": "^2.5.2", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^4.0.0", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.4.0", + "@nextcloud/vue": "^9.5.0", + "@types/toastify-js": "^1.12.4", + "@vueuse/core": "^14.2.1", + "p-queue": "^9.0.1", "toastify-js": "^1.12.0", - "vue-frag": "^1.4.3", - "webdav": "^5.7.1" + "vue": "^3.5.28", + "webdav": "^5.8.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@ckpack/vue-color": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@ckpack/vue-color/-/vue-color-1.6.0.tgz", + "integrity": "sha512-b9kFTKhYbNArfgP1lmnaVm0VNsWdZjqIbyHUYry7mZ+E7JeTQclbjq1+2xWn0SE3wzqRYlXmAVjECPOgteWmMQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.6.0", + "material-colors": "^1.2.6" + }, + "engines": { + "node": ">=12" }, "peerDependencies": { - "@nextcloud/vue": "^8.16.0", - "vue": "^2.7.16" + "vue": "^3.2.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/browser-storage": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@nextcloud/browser-storage/-/browser-storage-0.5.0.tgz", + "integrity": "sha512-usYr4GlJQlK3hgZURvklqWb9ivi7sgsSuFqXrs7s4hl1LTS4enzPrnkQumm6nRsQruf0ITS+OBsK+oELEbvYPA==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^24 || ^22 || ^20" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/router": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.0.1.tgz", - "integrity": "sha512-Ci/uD3x8OKHdxSqXL6gRJ+mGJOEXjeiHjj7hqsZqVTsT7kOrCjDf0/J8z5RyLlokKZ0IpSe+hGxgi3YB7Gpw3Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/typings": "^1.7.0" + "@nextcloud/typings": "^1.10.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/sharing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.4.0.tgz", + "integrity": "sha512-1hUNyc7uJdBpnimOnEshJjEtAPAjzDYVl6qmWqF5ZxoN9wOvbExw0QjX3xFIbHbX2dmvbRNLBj0RzLzipmZyeg==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.2 || ^4.0.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/vue": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-9.5.0.tgz", + "integrity": "sha512-CQxBfHhF+Q+2r7RXd+l/eSjttJU8A2JFUyq5VpvjfpIql355kejc8bbNnM1pKgGRGSBuW9qw5Ohx0puzHge10w==", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@ckpack/vue-color": "^1.6.0", + "@floating-ui/dom": "^1.7.5", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/axios": "^2.5.2", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "@vuepic/vue-datepicker": "^11.0.3", + "@vueuse/components": "^14.2.0", + "@vueuse/core": "^14.0.0", + "blurhash": "^2.0.5", + "clone": "^2.1.2", + "debounce": "^3.0.0", + "dompurify": "^3.3.1", + "emoji-mart-vue-fast": "^15.0.5", + "escape-html": "^1.0.3", + "floating-vue": "^5.2.2", + "focus-trap": "^8.0.0", + "linkifyjs": "^4.3.2", + "p-queue": "^9.1.0", + "rehype-external-links": "^3.0.0", + "rehype-highlight": "^7.0.2", + "rehype-react": "^8.0.0", + "remark-breaks": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-unlink-protocols": "^1.0.0", + "splitpanes": "^4.0.4", + "striptags": "^3.2.0", + "tabbable": "^6.4.0", + "tributejs": "^5.1.3", + "ts-md5": "^2.0.1", + "unified": "^11.0.5", + "unist-builder": "^4.0.0", + "unist-util-visit": "^5.1.0", + "vue": "^3.5.18", + "vue-router": "^5.0.2", + "vue-select": "^4.0.0-beta.6" + }, + "engines": { + "node": "^20.11.0 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/vue/node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "license": "AGPL-3.0-or-later", + "optional": true, + "dependencies": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/vue/node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@nextcloud/dialogs/node_modules/@vue/compiler-sfc": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz", + "integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.29", + "@vue/compiler-dom": "3.5.29", + "@vue/compiler-ssr": "3.5.29", + "@vue/shared": "3.5.29", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vue/server-renderer": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.29.tgz", + "integrity": "sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.29", + "@vue/shared": "3.5.29" + }, + "peerDependencies": { + "vue": "3.5.29" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vuepic/vue-datepicker": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-11.0.3.tgz", + "integrity": "sha512-sb2adwqwK2PizLQOpxCYps2SwhVT6/ic2HMIOqHJXuYa6iAJZWGL5YVlS7O4aW+sk6ZyxlDURLO7kDZPL4HB/w==", + "license": "MIT", + "dependencies": { + "date-fns": "^4.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.3.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vueuse/components": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-14.2.1.tgz", + "integrity": "sha512-wB0SvwJ22mNm1hWCMI1wTWz4x55nDTugT5RIg/KCwlWc1vITWL6ry5VTU3SQzsMD2XcazJK8Be1siIsrBb/Vcw==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/debounce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-3.0.0.tgz", + "integrity": "sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/floating-vue": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", + "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/@nextcloud/dialogs/node_modules/floating-vue/node_modules/@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.1.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/focus-trap": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-8.0.0.tgz", + "integrity": "sha512-Aa84FOGHs99vVwufDMdq2qgOwXPC2e9U66GcqBhn1/jEHPDhJaP8PYhkIbqG9lhfL5Kddk/567lj46LLHYCRUw==", + "license": "MIT", + "dependencies": { + "tabbable": "^6.4.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/rehype-react": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-8.0.0.tgz", + "integrity": "sha512-vzo0YxYbB2HE+36+9HWXVdxNoNDubx63r5LBzpxBGVWM8s9mdnMdbmuJBAX6TTyuGdZjZix6qU3GcSuKCIWivw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/splitpanes": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-4.0.4.tgz", + "integrity": "sha512-RbysugZhjbCw5fgplvk3hOXr41stahQDtZhHVkhnnJI6H4wlGDhM2kIpbehy7v92duy9GnMa8zIhHigIV1TWtg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antoniandre" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/vue": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.29.tgz", + "integrity": "sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.29", + "@vue/compiler-sfc": "3.5.29", + "@vue/runtime-dom": "3.5.29", + "@vue/server-renderer": "3.5.29", + "@vue/shared": "3.5.29" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@nextcloud/dialogs/node_modules/vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/vue-router": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.0.3.tgz", + "integrity": "sha512-nG1c7aAFac7NYj8Hluo68WyWfc41xkEjaR0ViLHCa3oDvTQ/nIuLJlXJX1NUPw/DXzx/8+OKMng045HHQKQKWw==", + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.28.6", + "@vue-macros/common": "^3.1.1", + "@vue/devtools-api": "^8.0.6", + "ast-walker-scope": "^0.8.3", + "chokidar": "^5.0.0", + "json5": "^2.2.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "muggle-string": "^0.4.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "scule": "^1.3.0", + "tinyglobby": "^0.2.15", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1", + "yaml": "^2.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@pinia/colada": ">=0.21.2", + "@vue/compiler-sfc": "^3.5.17", + "pinia": "^3.0.4", + "vue": "^3.5.0" + }, + "peerDependenciesMeta": { + "@pinia/colada": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/@nextcloud/dialogs/node_modules/vue-select": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", + "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", + "license": "MIT", + "peerDependencies": { + "vue": "3.x" } }, "node_modules/@nextcloud/eslint-config": { @@ -2426,23 +2919,22 @@ } }, "node_modules/@nextcloud/event-bus": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.2.tgz", - "integrity": "sha512-1Qfs6i7Tz2qd1A33NpBQOt810ydHIRjhyXMFwSEkYX2yUI80lAk/sWO8HIB2Fqp+iffhyviPPcQYoytMDRyDNw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.3.tgz", + "integrity": "sha512-zIfvKmUGkXpVzRKoXrcO9hkoiKDm65fqNxy/XIbIxrQhZByPq3gDkjBpnu3V5Gs8JdYwa73R8DjzV9oH8HYhIg==", "license": "GPL-3.0-or-later", "dependencies": { - "@types/semver": "^7.5.8", - "semver": "^7.6.3" + "@types/semver": "^7.7.0", + "semver": "^7.7.2" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20 || ^22 || ^24" } }, "node_modules/@nextcloud/event-bus/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2452,39 +2944,84 @@ } }, "node_modules/@nextcloud/files": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.10.2.tgz", - "integrity": "sha512-8k6zN3nvGW8nEV5Db5DyfqcyK99RWw1iOSPIafi2RttiRQGpFzHlnF2EoM4buH5vWzI39WEvJnfuLZpkPX0cFw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-4.0.0.tgz", + "integrity": "sha512-TmecnZIS+PGWGtRh7RpGEboCT4K6iTbHULUcfR6hs3eEzjDVsCc1Ldf8popGY/70lbpdlfYle8xbXnPIo3qaXA==", "license": "AGPL-3.0-or-later", "dependencies": { - "@nextcloud/auth": "^2.4.0", - "@nextcloud/capabilities": "^1.2.0", - "@nextcloud/l10n": "^3.1.0", - "@nextcloud/logger": "^3.0.2", - "@nextcloud/paths": "^2.2.1", - "@nextcloud/router": "^3.0.1", - "@nextcloud/sharing": "^0.2.4", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.2", + "webdav": "^5.9.0" + }, + "engines": { + "node": "^24.0.0" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "license": "AGPL-3.0-or-later", + "optional": true, + "dependencies": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", "cancelable-promise": "^4.3.1", - "is-svg": "^5.1.0", + "is-svg": "^6.1.0", "typescript-event-target": "^1.1.1", - "webdav": "^5.7.1" + "webdav": "^5.8.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/files/node_modules/@nextcloud/router": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.0.1.tgz", - "integrity": "sha512-Ci/uD3x8OKHdxSqXL6gRJ+mGJOEXjeiHjj7hqsZqVTsT7kOrCjDf0/J8z5RyLlokKZ0IpSe+hGxgi3YB7Gpw3Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/typings": "^1.7.0" + "@nextcloud/typings": "^1.10.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" } }, "node_modules/@nextcloud/initial-state": { @@ -2498,21 +3035,19 @@ } }, "node_modules/@nextcloud/l10n": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.2.0.tgz", - "integrity": "sha512-5TbIc415C0r8YUA0i4bOXKL0iInY8ka+t8PGHihqevzqf/LAkFatd+p6mCLJT3tQPxgkcIRCIuyOkiUM0Lyw5Q==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", "license": "GPL-3.0-or-later", "dependencies": { "@nextcloud/router": "^3.0.1", "@nextcloud/typings": "^1.9.1", - "@types/dompurify": "^3.2.0", "@types/escape-html": "^1.0.4", - "dompurify": "^3.2.4", + "dompurify": "^3.2.6", "escape-html": "^1.0.3" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20 || ^22 || ^24" } }, "node_modules/@nextcloud/l10n/node_modules/@nextcloud/router": { @@ -2529,26 +3064,24 @@ } }, "node_modules/@nextcloud/logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.2.tgz", - "integrity": "sha512-wByt0R0/6QC44RBpaJr1MWghjjOxk/pRbACHo/ZWWKht1qYbJRHB4GtEi+35KEIHY07ZpqxiDk6dIRuN7sXYWQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", + "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/auth": "^2.3.0" + "@nextcloud/auth": "^2.5.3" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-2.2.1.tgz", - "integrity": "sha512-M3ShLjrxR7B48eKThLMoqbxTqTKyQXcwf9TgeXQGbCIhiHoXU6as5j8l5qNv/uZlANokVdowpuWHBi3b2+YNNA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.1.0.tgz", + "integrity": "sha512-vtFYA/kthaUDzu6KejTOL1OwnOy7/yynq5zdB/UBpYacAWjUX5Ddh4OMWx3rEavkBJ9/QGhrFryNJLjNfe8OQA==", "license": "GPL-3.0-or-later", "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/router": { @@ -2603,16 +3136,15 @@ } }, "node_modules/@nextcloud/typings": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.9.1.tgz", - "integrity": "sha512-i0l/L5gKW8EACbXHVxXM6wn3sUhY2qmnL2OijppzU4dENC7/hqySMQDer7/+cJbNSNG7uHF/Z+9JmHtDfRfuGg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.10.0.tgz", + "integrity": "sha512-SMC42rDjOH3SspPTLMZRv76ZliHpj2JJkF8pGLP8l1QrVTZxE47Qz5qeKmbj2VL+dRv2e/NgixlAFmzVnxkhqg==", "license": "GPL-3.0-or-later", "dependencies": { "@types/jquery": "3.5.16" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/vue": { @@ -3188,6 +3720,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, "node_modules/@tybys/wasm-util": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", @@ -3251,16 +3789,6 @@ "@types/ms": "*" } }, - "node_modules/@types/dompurify": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.2.0.tgz", - "integrity": "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg==", - "deprecated": "This is a stub types definition. dompurify provides its own type definitions, so you do not need this installed.", - "license": "MIT", - "dependencies": { - "dompurify": "*" - } - }, "node_modules/@types/escape-html": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", @@ -3293,9 +3821,17 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", @@ -3554,9 +4090,9 @@ } }, "node_modules/@types/toastify-js": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.3.tgz", - "integrity": "sha512-9RjLlbAHMSaae/KZNHGv19VG4gcLIm3YjvacCXBtfMfYn26h76YP5oxXI8k26q4iKXCB9LNfv18lsoS0JnFPTg==", + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.4.tgz", + "integrity": "sha512-zfZHU4tKffPCnZRe7pjv/eFKzTVHozKewFCKaCjZ4gFinKgJRz/t0bkZiMCXJxPhv/ZoeDGNOeRD09R0kQZ/nw==", "license": "MIT" }, "node_modules/@types/trusted-types": { @@ -4098,6 +4634,85 @@ ], "peer": true }, + "node_modules/@vue-macros/common": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.2.tgz", + "integrity": "sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.22", + "ast-kit": "^2.1.2", + "local-pkg": "^1.1.2", + "magic-string-ast": "^1.0.2", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/vue-macros" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue-macros/common/node_modules/@vue/compiler-sfc": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz", + "integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.29", + "@vue/compiler-dom": "3.5.29", + "@vue/compiler-ssr": "3.5.29", + "@vue/shared": "3.5.29", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.29.tgz", + "integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.29", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz", + "integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.29", + "@vue/shared": "3.5.29" + } + }, "node_modules/@vue/compiler-sfc": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", @@ -4111,6 +4726,16 @@ "prettier": "^1.18.2 || ^2.0.0" } }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.29.tgz", + "integrity": "sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.29", + "@vue/shared": "3.5.29" + } + }, "node_modules/@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -4174,6 +4799,33 @@ "dev": true, "license": "ISC" }, + "node_modules/@vue/devtools-api": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.0.7.tgz", + "integrity": "sha512-tc1TXAxclsn55JblLkFVcIRG7MeSJC4fWsPjfM7qu/IcmPUYnQ5Q8vzWwBpyDY24ZjmZTUCCwjRSNbx58IhlAA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.0.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.7.tgz", + "integrity": "sha512-H6esJGHGl5q0E9iV3m2EoBQHJ+V83WMW83A0/+Fn95eZ2iIvdsq4+UCS6yT/Fdd4cGZSchx/MdWDreM3WqMsDw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.0.7", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.7.tgz", + "integrity": "sha512-CgAb9oJH5NUmbQRdYDj/1zMiaICYSLtm+B1kxcP72LBrifGAjUmt8bx52dDH1gWRPlQgxGPqpAMKavzVirAEhA==", + "license": "MIT" + }, "node_modules/@vue/eslint-config-typescript": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", @@ -4200,6 +4852,43 @@ } } }, + "node_modules/@vue/reactivity": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.29.tgz", + "integrity": "sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.29" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.29.tgz", + "integrity": "sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.29", + "@vue/shared": "3.5.29" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.29.tgz", + "integrity": "sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.29", + "@vue/runtime-core": "3.5.29", + "@vue/shared": "3.5.29", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.29.tgz", + "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==", + "license": "MIT" + }, "node_modules/@vueuse/components": { "version": "11.3.0", "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-11.3.0.tgz", @@ -4585,10 +5274,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true, + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4904,6 +5592,38 @@ "util": "^0.12.5" } }, + "node_modules/ast-kit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz", + "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.8.3.tgz", + "integrity": "sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "ast-kit": "^2.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -4947,13 +5667,13 @@ } }, "node_modules/axios": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", + "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, @@ -5090,6 +5810,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -5588,7 +6317,8 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/cancelable-promise/-/cancelable-promise-4.3.1.tgz", "integrity": "sha512-A/8PwLk/T7IJDfUdQ68NR24QHa8rIlnN/stiJEBo6dmVUkD4K14LswG0w3VwdeK/o7qOwRUR1k2MhK5Rpy2m7A==", - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/caniuse-lite": { "version": "1.0.30001715", @@ -5611,6 +6341,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5647,6 +6387,36 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -5891,6 +6661,12 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", @@ -6219,9 +6995,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/data-uri-to-buffer": { @@ -6287,6 +7063,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/date-format-parse": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/date-format-parse/-/date-format-parse-0.2.7.tgz", @@ -6658,10 +7444,13 @@ } }, "node_modules/dompurify": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.5.tgz", - "integrity": "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.2.tgz", + "integrity": "sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ==", "license": "(MPL-2.0 OR Apache-2.0)", + "engines": { + "node": ">=20" + }, "optionalDependencies": { "@types/trusted-types": "^2.0.7" } @@ -6733,9 +7522,9 @@ "license": "MIT" }, "node_modules/emoji-mart-vue-fast": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-15.0.4.tgz", - "integrity": "sha512-OjuxqoMJRTTG7Vevz0mR1ZnqY1DI8gGnmoskuuC8qL8VwwTjrGdwAO4WRWtAUN8P6Di7kxvY6cUgNETNFmbP4A==", + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-15.0.5.tgz", + "integrity": "sha512-wnxLor8ggpqshoOPwIc33MdOC3A1XFeDLgUwYLPtNPL8VeAtXJAVrnFq1CN5PeCYAFoLo4IufHQZ9CfHD4IZiw==", "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.18.6", @@ -7890,6 +8679,22 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -8051,6 +8856,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -8123,10 +8934,23 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-builder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.0.0.tgz", + "integrity": "sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/fast-xml-parser": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "dev": true, "funding": [ { "type": "github", @@ -8373,9 +9197,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -8409,14 +9233,15 @@ } }, "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -8980,6 +9805,56 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-to-text": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", @@ -9037,6 +9912,12 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -9574,6 +10455,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-arguments": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", @@ -9793,6 +10698,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -9877,6 +10792,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -10043,15 +10968,15 @@ } }, "node_modules/is-svg": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-5.1.0.tgz", - "integrity": "sha512-uVg5yifaTxHoefNf5Jcx+i9RZe2OBYd/UStp1umx+EERa4xGRa3LLGXjoEph43qUORC0qkafUgrXZ6zzK89yGA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", + "integrity": "sha512-i7YPdvYuSCYcaLQrKwt8cvKTlwHcdA6Hp8N9SO3Q5jIzo8x6kH3N47W0BvPP7NdxVBmIHx7X9DK36czYYW7lHg==", "license": "MIT", "dependencies": { - "fast-xml-parser": "^4.4.1" + "@file-type/xml": "^0.4.3" }, "engines": { - "node": ">=14.16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10257,7 +11182,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -10306,7 +11230,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -10390,11 +11313,10 @@ } }, "node_modules/linkifyjs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.2.0.tgz", - "integrity": "sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw==", - "license": "MIT", - "peer": true + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", + "license": "MIT" }, "node_modules/loader-runner": { "version": "4.3.0", @@ -10434,6 +11356,23 @@ "json5": "lib/cli.js" } }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -10484,6 +11423,16 @@ "dev": true, "license": "MIT" }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/lowlight": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", @@ -10509,6 +11458,30 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magic-string-ast": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-1.0.3.tgz", + "integrity": "sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.19" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -10571,6 +11544,20 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-6.0.0.tgz", + "integrity": "sha512-6NDbJPTg0M0Ye+TlYwX1KJ1LFbp515P2immRJyJQhc9Na9cetHzSoHNYIQcXpANEAP1sm9yd/CTZU2uHqR5A+w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", @@ -10587,36 +11574,96 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "license": "MIT", "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { "type": "opencollective", @@ -10637,6 +11684,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-to-hast": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", @@ -10658,6 +11719,27 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-to-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", @@ -11373,12 +12455,47 @@ "node": ">= 6" } }, + "node_modules/mlly": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.1.tgz", + "integrity": "sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "license": "MIT" + }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", @@ -11988,6 +13105,31 @@ "node": ">= 0.10" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -12084,6 +13226,12 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -12101,6 +13249,12 @@ "node": ">=0.12" } }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -12224,6 +13378,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -12235,9 +13400,9 @@ } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "funding": [ { "type": "opencollective", @@ -12254,7 +13419,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -12593,6 +13758,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", @@ -13172,6 +14353,17 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-unlink-protocols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-unlink-protocols/-/remark-unlink-protocols-1.0.0.tgz", + "integrity": "sha512-5j/F28jhFmxeyz8nuJYYIWdR4nNpKWZ8A+tVwnK/0pq7Rjue33CINEYSckSq2PZvedhKUwbn08qyiuGoPLBung==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-squeeze-paragraphs": "^6.0.0", + "unist-util-visit": "^5.0.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -13487,6 +14679,15 @@ } } }, + "node_modules/sax": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", + "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/schema-utils": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", @@ -13507,6 +14708,12 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -14289,6 +15496,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -14361,6 +15582,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "dev": true, "funding": [ { "type": "github", @@ -14369,6 +15591,22 @@ ], "license": "MIT" }, + "node_modules/strtok3": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/style-loader": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", @@ -14393,6 +15631,30 @@ "dev": true, "license": "ISC" }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-js/node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/style-to-js/node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, "node_modules/style-to-object": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", @@ -14719,9 +15981,9 @@ "dev": true }, "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", "license": "MIT" }, "node_modules/table": { @@ -14870,15 +16132,13 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", - "dev": true, + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", - "peer": true, "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -14888,12 +16148,13 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", - "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", - "dev": true, + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", - "peer": true, + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -14904,12 +16165,10 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -14999,6 +16258,15 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-md5": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-md5/-/ts-md5-2.0.1.tgz", + "integrity": "sha512-yF35FCoEOFBzOclSkMNEUbFQZuv89KEQ+5Xz03HrMSGUGB1+r+El+JiGOFwsP4p9RFNzwlrydYoTLvPOuICl9w==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -15160,7 +16428,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "peer": true, "bin": { @@ -15172,9 +16440,15 @@ } }, "node_modules/typescript-event-target": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.1.tgz", - "integrity": "sha512-dFSOFBKV6uwaloBCCUhxlD3Pr/P1a/tJdcmPrTXCHlEFD3faj0mztjcGn6VBAhQ0/Bdy8K3VWrrqwbt/ffsYsg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.2.tgz", + "integrity": "sha512-TvkrTUpv7gCPlcnSoEwUVUBwsdheKm+HF5u2tPAKubkIGMfovdSizCTaZRY/NhR8+Ijy8iZZUapbVQAsNrkFrw==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", "license": "MIT" }, "node_modules/unbox-primitive": { @@ -15345,9 +16619,9 @@ } }, "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -15383,6 +16657,60 @@ "node": ">= 0.8" } }, + "node_modules/unplugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz", + "integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-utils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unplugin/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/unrs-resolver": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.0.tgz", @@ -15858,16 +17186,16 @@ } }, "node_modules/webdav": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.8.0.tgz", - "integrity": "sha512-iuFG7NamJ41Oshg4930iQgfIpRrUiatPWIekeznYgEf2EOraTRcDPTjy7gIOMtkdpKTaqPk1E68NO5PAGtJahA==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.9.0.tgz", + "integrity": "sha512-OMJ6wtK1WvCO++aOLoQgE96S8KT4e5aaClWHmHXfFU369r4eyELN569B7EqT4OOUb99mmO58GkyuiCv/Ag6J0Q==", "license": "MIT", "dependencies": { "@buttercup/fetch": "^0.2.1", "base-64": "^1.0.0", "byte-length": "^1.0.2", - "entities": "^6.0.0", - "fast-xml-parser": "^4.5.1", + "entities": "^6.0.1", + "fast-xml-parser": "^5.3.4", "hot-patcher": "^2.0.1", "layerr": "^3.0.0", "md5": "^2.3.0", @@ -15883,9 +17211,9 @@ } }, "node_modules/webdav/node_modules/entities": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -15894,6 +17222,37 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/webdav/node_modules/fast-xml-parser": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.2.tgz", + "integrity": "sha512-pw/6pIl4k0CSpElPEJhDppLzaixDEuWui2CUQQBH/ECDf7+y6YwA4Gf7Tyb0Rfe4DIMuZipYj4AEL0nACKglvQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "fast-xml-builder": "^1.0.0", + "strnum": "^2.1.2" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/webdav/node_modules/strnum": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz", + "integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/webpack": { "version": "5.99.6", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.6.tgz", @@ -16157,6 +17516,12 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -16387,6 +17752,21 @@ "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -16409,6 +17789,16 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index 91f34ea..c9ff928 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,9 @@ "@betahuhn/feedback-js": "^2.1.25", "@material-design-icons/svg": "^0.14.15", "@nextcloud/axios": "^2.5.1", - "@nextcloud/dialogs": "^6.1.1", + "@nextcloud/dialogs": "^7.0.0", "@nextcloud/event-bus": "^3.3.1", - "@nextcloud/files": "^3.6.0", + "@nextcloud/files": "^4.0.0", "@nextcloud/router": "^2.0.0", "@nextcloud/vue": "^8.25.1", "@openfeature/flagd-web-provider": "^0.7.3", diff --git a/src/app/dav.js b/src/app/dav.js index fc42fda..0b2da88 100644 --- a/src/app/dav.js +++ b/src/app/dav.js @@ -1,13 +1,4 @@ -import { registerDavProperty } from "@nextcloud/files"; +import { registerDavPropertyCompat } from "@/util/FilesCompatibility"; -const registeredProperties = new Set(); - -const registerDavPropertyIfNeeded = (property) => { - if (!registeredProperties.has(property)) { - registerDavProperty(property); - registeredProperties.add(property); - } -}; - -registerDavPropertyIfNeeded("nc:ethswarm-fileref"); -registerDavPropertyIfNeeded("nc:ethswarm-node"); +registerDavPropertyCompat("nc:ethswarm-fileref"); +registerDavPropertyCompat("nc:ethswarm-node"); diff --git a/src/app/files/actions/archive.js b/src/app/files/actions/archive.js index 03e7638..6a29744 100644 --- a/src/app/files/actions/archive.js +++ b/src/app/files/actions/archive.js @@ -1,4 +1,3 @@ -import { FileAction, registerFileAction } from "@nextcloud/files"; import axios from "@nextcloud/axios"; import { showError, showSuccess } from "@nextcloud/dialogs"; import { emit } from "@nextcloud/event-bus"; @@ -6,81 +5,78 @@ import ArchiveSvg from "@material-design-icons/svg/filled/archive.svg"; import UnarchiveSvg from "@material-design-icons/svg/filled/unarchive.svg"; import FilesHelper from "@/util/FilesHelper"; import SvgHelper from "@/util/SvgHelper"; +import { registerFileActionCompat } from "@/util/FilesCompatibility"; -registerFileAction( - new FileAction({ - id: "archiveAction", - displayName(nodes) { - return t( - "files_external_ethswarm", - FilesHelper.isArchive(nodes) ? "Restore" : "Archive" +registerFileActionCompat({ + id: "archiveAction", + displayName({ nodes }) { + return t( + "files_external_ethswarm", + FilesHelper.isArchive(nodes) ? "Restore" : "Archive" + ); + }, + iconSvgInline({ nodes }) { + const logo = FilesHelper.isArchive(nodes) ? UnarchiveSvg : ArchiveSvg; + return SvgHelper.convert(logo); + }, + enabled({ nodes }) { + if (nodes[0].attributes["ethswarm-node"]) { + return !( + FilesHelper.isRoot(nodes) || FilesHelper.isArchiveFolder(nodes) ); - }, - iconSvgInline(nodes) { - const logo = FilesHelper.isArchive(nodes) - ? UnarchiveSvg - : ArchiveSvg; - return SvgHelper.convert(logo); - }, - enabled(files) { - if (files[0].attributes["ethswarm-node"]) { - return !( - FilesHelper.isRoot(files) || - FilesHelper.isArchiveFolder(files) - ); - } - return false; - }, - async exec(node) { - const action = FilesHelper.isArchive(node) - ? "unarchive" - : "archive"; - if (action === "unarchive") { - const path = await FilesHelper.locationPicker( - node, - "Restore", - UnarchiveSvg - ); - const destination = FilesHelper.getPathParts(path) - .slice(1) - .join("/"); - await axios({ - method: "post", - url: node.encodedSource, - headers: { - "Hejbit-Action": action, - Destination: destination, - }, - }).then((response) => { - if (response.data.status === true) { - emit("files:node:deleted", node); - showSuccess("Restored successfully"); - } else { - console.error("Error while restoring file", response); - showError(response.data.message); - } - }); - } else { - await axios({ - method: "post", - url: node.encodedSource, - headers: { "Hejbit-Action": action }, - }).then((response) => { - if (response.data.status === true) { - emit("files:node:deleted", node); - showSuccess("Archived successfully"); - if (FilesHelper.isRootLevel(node)) { - emit('files:config:updated'); - } - } else { - console.error("Error while archiving file", response); - showError(response.data.message); + } + return false; + }, + async exec({ nodes }) { + const node = nodes[0]; + const action = FilesHelper.isArchive(node) ? "unarchive" : "archive"; + if (action === "unarchive") { + const path = await FilesHelper.locationPicker( + node, + "Restore", + UnarchiveSvg + ); + const destination = FilesHelper.getPathParts(path) + .slice(1) + .join("/"); + await axios({ + method: "post", + url: node.encodedSource, + headers: { + "Hejbit-Action": action, + Destination: destination, + }, + }).then((response) => { + if (response.data.status === true) { + emit("files:node:deleted", node); + showSuccess("Restored successfully"); + } else { + console.error("Error while restoring file", response); + showError(response.data.message); + } + }); + } else { + await axios({ + method: "post", + url: node.encodedSource, + headers: { "Hejbit-Action": action }, + }).then((response) => { + if (response.data.status === true) { + emit("files:node:deleted", node); + showSuccess("Archived successfully"); + if (FilesHelper.isRootLevel(node)) { + emit("files:config:updated"); } - }); - } - }, - execBatch(nodes) { - return Promise.all(nodes.map((node) => this.exec(node))); - }, - }) -); + } else { + console.error("Error while archiving file", response); + showError(response.data.message); + } + }); + } + }, + execBatch({ nodes, view }) { + return Promise.all( + nodes.map((node) => this.exec({ nodes: [node], view })) + ); + }, +}); diff --git a/src/app/files/actions/export.js b/src/app/files/actions/export.js index 9123c6a..d598e69 100644 --- a/src/app/files/actions/export.js +++ b/src/app/files/actions/export.js @@ -1,48 +1,47 @@ -import { FileAction, registerFileAction } from "@nextcloud/files"; import axios from "@nextcloud/axios"; import { showError, showSuccess } from "@nextcloud/dialogs"; import { getDialogBuilder } from "@nextcloud/dialogs"; import DownloadSvg from "@material-design-icons/svg/filled/download.svg"; import FilesHelper from "@/util/FilesHelper"; import SvgHelper from "@/util/SvgHelper"; +import { registerFileActionCompat } from "@/util/FilesCompatibility"; -registerFileAction( - new FileAction({ - id: "exportAction", - displayName() { - return t( - "files_external_ethswarm", - "Export" - ); - }, - iconSvgInline() { - return SvgHelper.convert(DownloadSvg); - }, - enabled(files) { - if (files[0].attributes["ethswarm-node"]) { - return FilesHelper.isRoot(files); - } - return false; - }, - async exec(node) { - await getDialogBuilder("Export HejBit Storage Metadata") - .setSeverity("warning") - .setText(` - This action will export your HejBit storage metadata such as Swarm references for this storage to a JSON file. - You're responsible for keeping this file secure. Are you sure you want to export your HejBit storage metadata? - `) - .addButton({ - label: "Cancel", - }) - .addButton({ - label: "Export", - callback: async () => downloadMetadata(node), - }) - .build() - .show(); - }, - }) -); +registerFileActionCompat({ + id: "exportAction", + displayName() { + return t("files_external_ethswarm", "Export"); + }, + iconSvgInline() { + return SvgHelper.convert(DownloadSvg); + }, + enabled({ nodes }) { + if (nodes[0].attributes["ethswarm-node"]) { + return FilesHelper.isRoot(nodes); + } + return false; + }, + async exec({ nodes }) { + const node = nodes[0]; + await getDialogBuilder("Export HejBit Storage Metadata") + .setSeverity("warning") + .setText( + ` + This action will export your HejBit storage metadata such as Swarm references for this storage to a JSON file. + You're responsible for keeping this file secure. Are you sure you want to export your HejBit storage metadata? + ` + ) + .addButton({ + label: "Cancel", + callback: () => {}, + }) + .addButton({ + label: "Export", + callback: async () => downloadMetadata(node), + }) + .build() + .show(); + }, +}); const downloadMetadata = async (node) => { await axios({ @@ -58,11 +57,17 @@ const downloadMetadata = async (node) => { }); const storageName = FilesHelper.getStoragePath(node.path); const date = new Date().toISOString().split("T")[0]; - FilesHelper.downloadFile(blob, `hejbit-export-${storageName}-${date}.json`); + FilesHelper.downloadFile( + blob, + `hejbit-export-${storageName}-${date}.json` + ); showSuccess("Exported storage metadata successfully"); } else { - console.error("Error while exporting metadata of the storage", response); + console.error( + "Error while exporting metadata of the storage", + response + ); showError(response.data.message); } }); -} +}; diff --git a/src/app/files/actions/hide.js b/src/app/files/actions/hide.js index 1b4308c..4cb70a6 100644 --- a/src/app/files/actions/hide.js +++ b/src/app/files/actions/hide.js @@ -1,4 +1,4 @@ -import { FileAction, FileType, registerFileAction } from "@nextcloud/files"; +import { FileType } from "@nextcloud/files"; import { showError, showInfo } from "@nextcloud/dialogs"; import axios from "@nextcloud/axios"; import { emit } from "@nextcloud/event-bus"; @@ -8,191 +8,194 @@ import HideSource from "@material-design-icons/svg/filled/visibility_off.svg"; import UnhideSource from "@material-design-icons/svg/filled/settings_backup_restore.svg"; import FilesHelper from "@/util/FilesHelper"; import SvgHelper from "@/util/SvgHelper"; +import { registerFileActionCompat } from "@/util/FilesCompatibility"; -registerFileAction( - new FileAction({ - id: "unhideAction", - displayName(nodes, view) { - /** - * If we're only selecting files, use proper wording - */ - if (FilesHelper.isAllFiles(nodes)) { - if (nodes.length === 1) { - return t("files_external_ethswarm", "Unhide"); - } +registerFileActionCompat({ + id: "unhideAction", + displayName({ nodes, view }) { + /** + * If we're only selecting files, use proper wording + */ + if (FilesHelper.isAllFiles(nodes)) { + if (nodes.length === 1) { return t("files_external_ethswarm", "Unhide"); } - /** - * If we're only selecting folders, use proper wording - */ - if (FilesHelper.isAllFolders(nodes)) { - if (nodes.length === 1) { - return t("files_external_ethswarm", "Unhide"); - } + return t("files_external_ethswarm", "Unhide"); + } + /** + * If we're only selecting folders, use proper wording + */ + if (FilesHelper.isAllFolders(nodes)) { + if (nodes.length === 1) { return t("files_external_ethswarm", "Unhide"); } return t("files_external_ethswarm", "Unhide"); - }, - iconSvgInline: (nodes) => { - return SvgHelper.convert(UnhideSource); - }, - inline(file, view) { - return true; - }, + } + return t("files_external_ethswarm", "Unhide"); + }, + iconSvgInline: ({ nodes }) => { + return SvgHelper.convert(UnhideSource); + }, + inline({ nodes }) { + return true; + }, - enabled(files, view) { - if (files.length !== 1) - // We don't support batch actions - return false; - const attrs = files[0].attributes["ethswarm-node"]; - const hidden = files[0].attributes.hidden; + enabled({ nodes, view }) { + if (nodes.length !== 1) + // We don't support batch actions + return false; + const attrs = nodes[0].attributes["ethswarm-node"]; + const hidden = nodes[0].attributes.hidden; - if (attrs === undefined) return false; - else if (attrs === "") return false; - if (!hidden) return false; + if (attrs === undefined) return false; + else if (attrs === "") return false; + if (!hidden) return false; - return attrs; - }, - async exec(node, view, dir) { - try { - await axios({ - method: "post", - url: node.encodedSource, - headers: { - "Hejbit-Action": "unhide", - }, - }); + return attrs; + }, + async exec({ nodes, view }) { + const node = nodes[0]; + try { + await axios({ + method: "post", + url: node.encodedSource, + headers: { + "Hejbit-Action": "unhide", + }, + }); - emit('files:config:updated'); + emit("files:config:updated"); - return true; - } catch (error) { - showError("Error while unhidding file"); - console.log("Error while unhidding a file", { - error, - source: node.source, - node, - }); - return false; - } - }, - execBatch(nodes, view) { - return Promise.all(nodes.map((node) => this.exec(node, view))); - }, - order: 150, - }) -); + return true; + } catch (error) { + showError("Error while unhidding file"); + console.log("Error while unhidding a file", { + error, + source: node.source, + node, + }); + return false; + } + }, + execBatch({ nodes, view }) { + return Promise.all( + nodes.map((node) => this.exec({ nodes: [node], view })) + ); + }, + order: 150, +}); -registerFileAction( - new FileAction({ - id: "hideAction", - displayName(nodes, view) { - /** - * If we're in the sharing view, we can only unshare - */ - if (FilesHelper.isMixedUnshareAndDelete(nodes)) { - return t("files_external_ethswarm", "Hide and unshare"); - } - /** - * If those nodes are all the root node of a - * share, we can only unshare them. - */ - if (FilesHelper.canUnshareOnly(nodes)) { - if (nodes.length === 1) { - return t("files_external_ethswarm", "Leave this share"); - } - return t("files_external_ethswarm", "Leave these shares"); +registerFileActionCompat({ + id: "hideAction", + displayName({ nodes, view }) { + /** + * If we're in the sharing view, we can only unshare + */ + if (FilesHelper.isMixedUnshareAndDelete(nodes)) { + return t("files_external_ethswarm", "Hide and unshare"); + } + /** + * If those nodes are all the root node of a + * share, we can only unshare them. + */ + if (FilesHelper.canUnshareOnly(nodes)) { + if (nodes.length === 1) { + return t("files_external_ethswarm", "Leave this share"); } - /** - * If those nodes are all the root node of an - * external storage, we can only disconnect it. - */ - if (FilesHelper.canDisconnectOnly(nodes)) { - if (nodes.length === 1) { - return t("files_external_ethswarm", "Disconnect storage"); - } - return t("files_external_ethswarm", "Disconnect storages"); + return t("files_external_ethswarm", "Leave these shares"); + } + /** + * If those nodes are all the root node of an + * external storage, we can only disconnect it. + */ + if (FilesHelper.canDisconnectOnly(nodes)) { + if (nodes.length === 1) { + return t("files_external_ethswarm", "Disconnect storage"); } - /** - * If we're only selecting files, use proper wording - */ - if (FilesHelper.isAllFiles(nodes)) { - if (nodes.length === 1) { - return t("files_external_ethswarm", "Hide file"); - } - return t("files_external_ethswarm", "Hide files"); + return t("files_external_ethswarm", "Disconnect storages"); + } + /** + * If we're only selecting files, use proper wording + */ + if (FilesHelper.isAllFiles(nodes)) { + if (nodes.length === 1) { + return t("files_external_ethswarm", "Hide file"); } - /** - * If we're only selecting folders, use proper wording - */ - if (FilesHelper.isAllFolders(nodes)) { - if (nodes.length === 1) { - return t("files_external_ethswarm", "Hide folder"); - } - return t("files_external_ethswarm", "Hide folders"); + return t("files_external_ethswarm", "Hide files"); + } + /** + * If we're only selecting folders, use proper wording + */ + if (FilesHelper.isAllFolders(nodes)) { + if (nodes.length === 1) { + return t("files_external_ethswarm", "Hide folder"); } - return t("files_external_ethswarm", "Hide"); - }, - iconSvgInline: (nodes) => { - if (FilesHelper.canUnshareOnly(nodes)) { - return SvgHelper.convert(Close); - } - if (FilesHelper.canDisconnectOnly(nodes)) { - return SvgHelper.convert(CloudOff); - } - return SvgHelper.convert(HideSource); - }, - enabled(files, view) { - if (files.length !== 1) - // We don't support batch actions - return false; - const attrs = files[0].attributes["ethswarm-node"]; - const hidden = files[0].attributes.hidden; + return t("files_external_ethswarm", "Hide folders"); + } + return t("files_external_ethswarm", "Hide"); + }, + iconSvgInline: ({ nodes }) => { + if (FilesHelper.canUnshareOnly(nodes)) { + return SvgHelper.convert(Close); + } + if (FilesHelper.canDisconnectOnly(nodes)) { + return SvgHelper.convert(CloudOff); + } + return SvgHelper.convert(HideSource); + }, + enabled({ nodes, view }) { + if (nodes.length !== 1) + // We don't support batch actions + return false; + const attrs = nodes[0].attributes["ethswarm-node"]; + const hidden = nodes[0].attributes.hidden; - if (attrs === undefined) return false; - else if (attrs === "") return false; - if (hidden) return false; + if (attrs === undefined) return false; + else if (attrs === "") return false; + if (hidden) return false; - return attrs; - }, - async exec(node, view, dir) { - let message = ""; - if (node.type === FileType.File) { - message = t( - "files_external_ethswarm", - "The file will be set to hide on the folder view. The file will continue to exist on the Swarm network." - ); - } else if (node.type === FileType.Folder) { - message = t( - "files_external_ethswarm", - "The folder will be set to hide on the folder view. All the files inside the folder will continue to exist on the Swarm network." - ); - } - showInfo(message); - try { - await axios({ - method: "post", - url: node.encodedSource, - headers: { - "Hejbit-Action": "hide", - }, - }); + return attrs; + }, + async exec({ nodes, view }) { + const node = nodes[0]; + let message = ""; + if (node.type === FileType.File) { + message = t( + "files_external_ethswarm", + "The file will be set to hide on the folder view. The file will continue to exist on the Swarm network." + ); + } else if (node.type === FileType.Folder) { + message = t( + "files_external_ethswarm", + "The folder will be set to hide on the folder view. All the files inside the folder will continue to exist on the Swarm network." + ); + } + showInfo(message); + try { + await axios({ + method: "post", + url: node.encodedSource, + headers: { + "Hejbit-Action": "hide", + }, + }); - emit('files:config:updated'); - return true; - } catch (error) { - showError("Error while hiding file"); - console.log("Error while hidding a file", { - error, - source: node.source, - node, - }); - return false; - } - }, - execBatch(nodes, view) { - return Promise.all(nodes.map((node) => this.exec(node, view))); - }, - order: 150, - }) -); + emit("files:config:updated"); + return true; + } catch (error) { + showError("Error while hiding file"); + console.log("Error while hidding a file", { + error, + source: node.source, + node, + }); + return false; + } + }, + execBatch({ nodes, view }) { + return Promise.all( + nodes.map((node) => this.exec({ nodes: [node], view })) + ); + }, + order: 150, +}); diff --git a/src/app/files/actions/move.js b/src/app/files/actions/move.js index 50c2fed..24ce4d0 100644 --- a/src/app/files/actions/move.js +++ b/src/app/files/actions/move.js @@ -1,60 +1,49 @@ -import { FileAction, registerFileAction } from "@nextcloud/files"; import { emit } from "@nextcloud/event-bus"; import MoveSvg from "@material-design-icons/svg/filled/drive_file_move.svg"; import FilesHelper from "@/util/FilesHelper"; import SvgHelper from "@/util/SvgHelper"; import axios from "@nextcloud/axios"; import { showError, showSuccess } from "@nextcloud/dialogs"; +import { registerFileActionCompat } from "@/util/FilesCompatibility"; -registerFileAction( - new FileAction({ - id: "moveAction", - displayName(nodes) { - return t( - "files_external_ethswarm", - "Move" - ); - }, - iconSvgInline(nodes) { - return SvgHelper.convert(MoveSvg); - }, - enabled(files) { - if (files[0].attributes["ethswarm-node"]) { - return !( - FilesHelper.isArchive(files) || - FilesHelper.isRoot(files) - ); +registerFileActionCompat({ + id: "moveAction", + displayName({ nodes }) { + return t("files_external_ethswarm", "Move"); + }, + iconSvgInline({ nodes }) { + return SvgHelper.convert(MoveSvg); + }, + enabled({ nodes }) { + if (nodes[0].attributes["ethswarm-node"]) { + return !(FilesHelper.isArchive(nodes) || FilesHelper.isRoot(nodes)); + } + return false; + }, + async exec({ nodes }) { + const node = nodes[0]; + const path = await FilesHelper.locationPicker(node, "Move", MoveSvg); + const destination = FilesHelper.getPathParts(path).slice(1).join("/"); + await axios({ + method: "post", + url: node.encodedSource, + headers: { + "Hejbit-Action": "move", + Destination: destination, + }, + }).then((response) => { + if (response.data.status === true) { + emit("files:node:deleted", node); + showSuccess("Moved successfully"); + } else { + console.error("Error while moving file", response); + showError(response.data.message); } - return false; - }, - async exec(node) { - const path = await FilesHelper.locationPicker( - node, - "Move", - MoveSvg - ); - const destination = FilesHelper.getPathParts(path) - .slice(1) - .join("/"); - await axios({ - method: "post", - url: node.encodedSource, - headers: { - "Hejbit-Action": "move", - Destination: destination, - }, - }).then((response) => { - if (response.data.status === true) { - emit("files:node:deleted", node); - showSuccess("Moved successfully"); - } else { - console.error("Error while moving file", response); - showError(response.data.message); - } - }); - }, - execBatch(nodes) { - return Promise.all(nodes.map((node) => this.exec(node))); - }, - }) -); + }); + }, + execBatch({ nodes, view }) { + return Promise.all( + nodes.map((node) => this.exec({ nodes: [node], view })) + ); + }, +}); diff --git a/src/app/files/actions/overlay.js b/src/app/files/actions/overlay.js index 4b21b00..178fc72 100644 --- a/src/app/files/actions/overlay.js +++ b/src/app/files/actions/overlay.js @@ -1,122 +1,102 @@ -import { FileAction, registerFileAction } from "@nextcloud/files"; import { showInfo } from "@nextcloud/dialogs"; import HejBitSvg from "@/../img/hejbit-logo.svg"; -import HejBitPaddedSvg from "@/../img/hejbit-logo-padded.svg"; +import HejBitSvgPadded from "@/../img/hejbit-logo-padded.svg"; import InfoSvg from "@material-design-icons/svg/filled/info.svg"; import FilesHelper from "@/util/FilesHelper"; import SvgHelper from "@/util/SvgHelper"; -import { loadState } from '@nextcloud/initial-state'; - - - -registerFileAction( - new FileAction({ - id: "overlayAction", - - displayName() { - return ""; - }, - - enabled(files, view) { - if (files.length !== 1) - // We don't support batch actions - return false; - - // To fix fileaction navigation bug this action is now available for - // files and folders on Swarm storage - const attrs = files[0].attributes["ethswarm-node"]; - - if (attrs === undefined) return false; - else if (attrs === "") return false; - - return true; - }, - - iconSvgInline(files, view) { - const config = loadState('core', 'config'); - const majorVersion = config?.version ? parseInt(config.version.split('.')[0]) : null; - if (majorVersion === 32){ - return SvgHelper.convert(FilesHelper.isArchiveFolder(files) ? InfoSvg : HejBitPaddedSvg); - }else{ - return SvgHelper.convert(FilesHelper.isArchiveFolder(files) ? InfoSvg : HejBitSvg); - } - - }, - - inline(file, view) { - return true; - }, - - async renderInline(node, view) { - - const config = loadState('core', 'config'); - const majorVersion = config?.version ? parseInt(config.version.split('.')[0]) : null; - - // Create the overlay element - const overlay = document.createElement("div"); - - if (majorVersion === 32) { - overlay.classList.add("hejbit-overlay-32"); - } else { - overlay.classList.add("hejbit-overlay"); - } - - if (FilesHelper.isArchive(node)) { - overlay.classList.add("hejbit-archive"); - } - - - overlay.innerHTML = SvgHelper.convert(HejBitSvg); - - return overlay; - }, - - async exec(node, view) { - if (FilesHelper.isArchiveFolder(node)) { - showInfo( - ` -
-
${t( - "files_external_ethswarm", - "Archive folder is for keeping your HejBit storage more organized." - )}
-
${t( - "files_external_ethswarm", - "You can archive files and folder from menu action." - )}
-
${t( - "files_external_ethswarm", - "You can restore archived files in the archive folder from menu action." - )}
-
- `, - { - isHTML: true, - }, - t("files_external_ethswarm", "Hejbit") - ); - } else if (FilesHelper.isFolder(node)) { - showInfo( - t( - "files_external_ethswarm", - "Folder structure is not yet supported on Swarm. This folder is only available on Nextcloud, although all files within it are accessible on Swarm." - ), - t("files_external_ethswarm", "Hejbit") - ); - } else { - showInfo( - t( - "files_external_ethswarm", - "This file is on Swarm Network by Hejbit!" - ), - t("files_external_ethswarm", "Hejbit") - ); - } - }, - - execBatch(nodes, view) { - return Promise.all(nodes.map((node) => this.exec(node, view))); - }, - }) -); - +import { registerFileActionCompat } from "@/util/FilesCompatibility"; + +registerFileActionCompat({ + id: "overlayAction", + + displayName() { + return ""; + }, + + enabled({ nodes, view }) { + if (nodes.length !== 1) + // We don't support batch actions + return false; + + // To fix fileaction navigation bug this action is now available for + // files and folders on Swarm storage + const attrs = nodes[0].attributes["ethswarm-node"]; + + if (attrs === undefined) return false; + else if (attrs === "") return false; + + return true; + }, + + iconSvgInline({ nodes }) { + return SvgHelper.convert( + FilesHelper.isArchiveFolder(nodes) ? InfoSvg : HejBitSvgPadded + ); + }, + + inline({ nodes }) { + return true; + }, + + async renderInline({ nodes, view }) { + const node = nodes[0]; + // Create the overlay element + const overlay = document.createElement("div"); + overlay.classList.add("hejbit-overlay"); + + if (FilesHelper.isArchive(node)) { + overlay.classList.add("hejbit-archive"); + } + + overlay.innerHTML = SvgHelper.convert(HejBitSvg); + + return overlay; + }, + + async exec({ nodes, view }) { + const node = nodes[0]; + if (FilesHelper.isArchiveFolder(node)) { + showInfo( + ` +
+
${t( + "files_external_ethswarm", + "Archive folder is for keeping your HejBit storage more organized." + )}
+
${t( + "files_external_ethswarm", + "You can archive files and folder from menu action." + )}
+
${t( + "files_external_ethswarm", + "You can restore archived files in the archive folder from menu action." + )}
+
+ `, + { + isHTML: true, + } + ); + } else if (FilesHelper.isFolder(node)) { + showInfo( + t( + "files_external_ethswarm", + "Folder structure is not yet supported on Swarm. This folder is only available on Nextcloud, although all files within it are accessible on Swarm." + ) + ); + } else { + showInfo( + t( + "files_external_ethswarm", + "This file is on Swarm Network by Hejbit!" + ) + ); + } + }, + + execBatch({ nodes, view }) { + return Promise.all( + nodes.map((node) => this.exec({ nodes: [node], view })) + ); + }, +}); diff --git a/src/app/files/actions/reference.js b/src/app/files/actions/reference.js index 8bf89d4..ac4185e 100644 --- a/src/app/files/actions/reference.js +++ b/src/app/files/actions/reference.js @@ -1,82 +1,91 @@ -import { FileAction, registerFileAction } from "@nextcloud/files"; import { Dialog, showSuccess, showWarning } from "@nextcloud/dialogs"; import SwarmSvg from "@/../img/swarm-logo.svg"; import ClipboardSvg from "@material-design-icons/svg/filled/content_paste.svg"; +import OpenSvg from "@material-design-icons/svg/filled/open_in_new.svg"; import SvgHelper from "@/util/SvgHelper"; import FilesHelper from "@/util/FilesHelper"; +import { registerFileActionCompat } from "@/util/FilesCompatibility"; -registerFileAction( - new FileAction({ - id: "EthswarmCopyRef", +registerFileActionCompat({ + id: "EthswarmCopyRef", - displayName() { - return t("files_external_ethswarm", "View Swarm Reference"); - }, + displayName() { + return t("files_external_ethswarm", "Swarm Reference"); + }, - altText() { - return t("files_external_ethswarm", "Swarm Reference"); - }, + altText() { + return t("files_external_ethswarm", "Swarm Reference"); + }, - enabled(files) { - return ( - FilesHelper.isSwarmNode(files) && - !FilesHelper.isRoot(files) && - !FilesHelper.isArchiveFolder(files) - ); - }, + enabled({ nodes }) { + return ( + FilesHelper.isSwarmNode(nodes) && + !FilesHelper.isRoot(nodes) && + !FilesHelper.isArchiveFolder(nodes) + ); + }, - inline() { - return false; - }, + inline() { + return false; + }, - iconSvgInline() { - return SvgHelper.convert(SwarmSvg); - }, + iconSvgInline() { + return SvgHelper.convert(SwarmSvg); + }, - async exec(node, view) { - const swarmref = FilesHelper.getSwarmRef(node); - if (FilesHelper.isFolder(node)) { - showWarning( - t( - "files_external_ethswarm", - "Folder structure is not yet supported on Swarm. This folder is only available on Nextcloud, although all files within it are accessible on Swarm." - ), - t("files_external_ethswarm", "Swarm Reference") - ); - return; - } + async exec({ nodes, view }) { + const node = nodes[0]; + const swarmref = FilesHelper.getSwarmRef(node); + if (FilesHelper.isFolder(node)) { + showWarning( + t( + "files_external_ethswarm", + "Folder structure is not yet supported on Swarm. This folder is only available on Nextcloud, although all files within it are accessible on Swarm." + ) + ); + return; + } - await new Dialog("View Swarm Reference", swarmref, [ - { - label: t("files_external_ethswarm", "Copy to Clipboard"), - type: "secondary", - icon: SvgHelper.convert(ClipboardSvg), - callback: () => - navigator.clipboard.writeText(swarmref).then( - () => - showSuccess( - t( - "files_external_ethswarm", - "The Swarm reference has been copied to your clipboard" - ) - ), - () => - showWarning( - ` -
- ${t( - "files_external_ethswarm", - "Unable to write the Swarm Reference into your clipboard. Copy it manually" - )} -
- `, - { - isHTML: true, - } + const gatewayUrl = `https://gateway.ethswarm.org/access/${swarmref}`; + + await new Dialog("Swarm Reference", swarmref, [ + { + label: t("files_external_ethswarm", "Copy to Clipboard"), + variant: "secondary", + icon: SvgHelper.convert(ClipboardSvg), + callback: () => + navigator.clipboard.writeText(swarmref).then( + () => + showSuccess( + t( + "files_external_ethswarm", + "The Swarm reference has been copied to your clipboard" ) - ), + ), + () => + showWarning( + ` +
+ ${t( + "files_external_ethswarm", + "Unable to write the Swarm Reference into your clipboard. Copy it manually" + )} +
+ `, + { + isHTML: true, + } + ) + ), + }, + { + label: t("files_external_ethswarm", "Access on Swarm Gateway"), + variant: "secondary", + icon: SvgHelper.convert(OpenSvg), + callback: () => { + window.open(gatewayUrl, "_blank", "noopener,noreferrer"); }, - ]).show(); - }, - }) -); + }, + ]).show(); + }, +}); diff --git a/src/app/files/actions/rename.js b/src/app/files/actions/rename.js index b1ad024..b2000b7 100644 --- a/src/app/files/actions/rename.js +++ b/src/app/files/actions/rename.js @@ -1,32 +1,24 @@ -import { FileAction, registerFileAction } from "@nextcloud/files"; import { emit } from "@nextcloud/event-bus"; import EditSvg from "@material-design-icons/svg/filled/edit.svg"; import FilesHelper from "@/util/FilesHelper"; import SvgHelper from "@/util/SvgHelper"; +import { registerFileActionCompat } from "@/util/FilesCompatibility"; -registerFileAction( - new FileAction({ - id: "renameAction", - displayName(nodes) { - return t( - "files_external_ethswarm", - "Rename" - ); - }, - iconSvgInline(nodes) { - return SvgHelper.convert(EditSvg); - }, - enabled(files) { - if (files[0].attributes["ethswarm-node"]) { - return !( - FilesHelper.isArchive(files) || - FilesHelper.isRoot(files) - ); - } - return false; - }, - async exec(node) { - emit('files:node:rename', node); - }, - }) -); +registerFileActionCompat({ + id: "renameAction", + displayName({ nodes }) { + return t("files_external_ethswarm", "Rename"); + }, + iconSvgInline({ nodes }) { + return SvgHelper.convert(EditSvg); + }, + enabled({ nodes }) { + if (nodes[0].attributes["ethswarm-node"]) { + return !(FilesHelper.isArchive(nodes) || FilesHelper.isRoot(nodes)); + } + return false; + }, + async exec({ nodes }) { + emit("files:node:rename", nodes[0]); + }, +}); diff --git a/src/app/files/menu.js b/src/app/files/menu.js index 0260848..c058d8a 100644 --- a/src/app/files/menu.js +++ b/src/app/files/menu.js @@ -1,9 +1,9 @@ -import { - addNewFileMenuEntry, - getNewFileMenuEntries, - removeNewFileMenuEntry, -} from "@nextcloud/files"; import { subscribe } from "@nextcloud/event-bus"; +import { + getNewFileMenuEntriesCompat, + addNewFileMenuEntryCompat, + removeNewFileMenuEntryCompat, +} from "@/util/FilesCompatibility"; const filesMenu = { originalMenu: [], @@ -21,7 +21,7 @@ const filesMenu = { }, backup() { if (!this.originalMenu.length) { - this.originalMenu = getNewFileMenuEntries().map((entry) => ({ + this.originalMenu = getNewFileMenuEntriesCompat().map((entry) => ({ ...entry, })); } @@ -29,16 +29,16 @@ const filesMenu = { cleanup() { this.originalMenu.forEach(function (removeMenuEntry) { if (removeMenuEntry.id !== "newFolder") { - removeNewFileMenuEntry(removeMenuEntry); + removeNewFileMenuEntryCompat(removeMenuEntry); } }); }, restore() { - const currentEntries = getNewFileMenuEntries(); + const currentEntries = getNewFileMenuEntriesCompat(); this.originalMenu.forEach(function (backedUpMenuEntry) { !currentEntries.some( (entry) => entry.id === backedUpMenuEntry.id - ) && addNewFileMenuEntry(backedUpMenuEntry); + ) && addNewFileMenuEntryCompat(backedUpMenuEntry); }); this.originalMenu = []; }, diff --git a/src/util/FilesCompatibility.js b/src/util/FilesCompatibility.js new file mode 100644 index 0000000..f333563 --- /dev/null +++ b/src/util/FilesCompatibility.js @@ -0,0 +1,315 @@ +/** + * @copyright Copyright (c) 2024, MetaProvide Pty Ltd + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +/** + * Compatibility layer for running the same plugin code on both + * Nextcloud 32 (@nextcloud/files v3) and Nextcloud 33+ (@nextcloud/files v4). + * + * The plugin is built with @nextcloud/files v4 which is bundled into the + * JS output. v3 and v4 use **different window-global registries**: + * + * v3 (NC 32): window._nc_fileactions (array) + * window._nc_dav_properties (array) + * window._nc_dav_namespaces (object) + * window._nc_newfilemenu (NewMenu instance) + * + * v4 (NC 33+): window._nc_files_scope.v4_0.* (scoped object) + * + * The bundled v4 functions always write to the v4 scope. On NC 32 we + * must also (or instead) write into the v3 globals so the NC 32 Files + * app picks the registrations up. + */ + +import { + registerFileAction, + addNewFileMenuEntry, + getNewFileMenuEntries, + removeNewFileMenuEntry, +} from "@nextcloud/files"; +import { registerDavProperty } from "@nextcloud/files/dav"; + +/* ================================================================== */ +/* Version detection */ +/* ================================================================== */ + +/** + * Get the Nextcloud major version number from the runtime environment. + * @returns {number} The major version (e.g. 32 or 33) + */ +function getNextcloudMajorVersion() { + if (window.OC?.config?.version) { + return parseInt(window.OC.config.version.split(".")[0], 10) || 0; + } + // Fallback: if the v4 scoped globals already exist, NC 33+ is running. + if (window._nc_files_scope?.v4_0) { + return 33; + } + console.warn( + "[FilesCompatibility] Could not detect Nextcloud version, defaulting to 32" + ); + return 32; +} + +/** True when running on Nextcloud 32 or lower (v3 API). */ +export function isNextcloud32OrLower() { + return getNextcloudMajorVersion() <= 32; +} + +/** True when running on Nextcloud 33 or higher (v4 API). */ +export function isNextcloud33OrHigher() { + return !isNextcloud32OrLower(); +} + +/* ================================================================== */ +/* File Actions */ +/* ================================================================== */ + +/** + * Register an action into the NC 32 / v3 global registry. + * + * v3 callback signatures (what the NC 32 Files app calls): + * displayName(nodes: Node[], view: View) + * iconSvgInline(nodes: Node[], view: View) + * enabled(nodes: Node[], view: View) + * exec(node: Node, view: View, dir: string) + * execBatch(nodes: Node[], view: View, dir: string) + * inline(node: Node, view: View) + * renderInline(node: Node, view: View) + * + * v4 callback signatures (what our action code uses): + * displayName({ nodes, view }) + * iconSvgInline({ nodes, view }) + * enabled({ nodes, view }) + * exec({ nodes: [node], view }) + * execBatch({ nodes, view }) + * inline({ nodes: [node], view }) + * renderInline({ nodes: [node], view }) + */ +function registerFileActionV3(actionConfig) { + if (typeof window._nc_fileactions === "undefined") { + window._nc_fileactions = []; + } + + if (window._nc_fileactions.find((a) => a.id === actionConfig.id)) { + console.error( + `[FilesCompatibility] FileAction ${actionConfig.id} already registered` + ); + return; + } + + const wrapped = {}; + + if (typeof actionConfig.displayName === "function") { + wrapped.displayName = function (nodes, view) { + return actionConfig.displayName.call(actionConfig, { nodes, view }); + }; + } + + if (typeof actionConfig.iconSvgInline === "function") { + wrapped.iconSvgInline = function (nodes, view) { + return actionConfig.iconSvgInline.call(actionConfig, { + nodes, + view, + }); + }; + } + + if (typeof actionConfig.enabled === "function") { + wrapped.enabled = function (nodes, view) { + return actionConfig.enabled.call(actionConfig, { nodes, view }); + }; + } + + if (typeof actionConfig.exec === "function") { + wrapped.exec = function (node, view, dir) { + return actionConfig.exec.call(actionConfig, { + nodes: [node], + view, + }); + }; + } + + if (typeof actionConfig.execBatch === "function") { + wrapped.execBatch = function (nodes, view, dir) { + return actionConfig.execBatch.call(actionConfig, { nodes, view }); + }; + } + + if (typeof actionConfig.inline === "function") { + wrapped.inline = function (node, view) { + return actionConfig.inline.call(actionConfig, { + nodes: [node], + view, + }); + }; + } + + if (typeof actionConfig.renderInline === "function") { + wrapped.renderInline = function (node, view) { + return actionConfig.renderInline.call(actionConfig, { + nodes: [node], + view, + }); + }; + } + + const v3Action = { + get id() { + return actionConfig.id; + }, + get displayName() { + return wrapped.displayName || actionConfig.displayName; + }, + get title() { + return actionConfig.title; + }, + get iconSvgInline() { + return wrapped.iconSvgInline || actionConfig.iconSvgInline; + }, + get enabled() { + return wrapped.enabled || actionConfig.enabled; + }, + get exec() { + return wrapped.exec || actionConfig.exec; + }, + get execBatch() { + return wrapped.execBatch || actionConfig.execBatch; + }, + get order() { + return actionConfig.order; + }, + get parent() { + return actionConfig.parent; + }, + get default() { + return actionConfig.default; + }, + get destructive() { + return actionConfig.destructive; + }, + get inline() { + return wrapped.inline || actionConfig.inline; + }, + get renderInline() { + return wrapped.renderInline || actionConfig.renderInline; + }, + get hotkey() { + return actionConfig.hotkey; + }, + }; + + window._nc_fileactions.push(v3Action); +} + +/** + * Register a file action compatible with both NC 32 and NC 33+. + * + * Action code should use the v4 context-object style for callbacks, + * e.g. `exec({ nodes, view }) { ... }`. + */ +export function registerFileActionCompat(actionConfig) { + if (isNextcloud32OrLower()) { + registerFileActionV3(actionConfig); + } else { + registerFileAction(actionConfig); + } +} + +/* ================================================================== */ +/* DAV Properties */ +/* ================================================================== */ + +const registeredDavProperties = new Set(); + +/** + * Register a DAV property compatible with both NC 32 and NC 33+. + * + * v3 stores properties in `window._nc_dav_properties` and namespaces + * in `window._nc_dav_namespaces`. The bundled v4 `registerDavProperty` + * writes to the v4 scoped globals, so on NC 32 we additionally push + * into the v3 globals. + */ +export function registerDavPropertyCompat(property) { + if (registeredDavProperties.has(property)) { + return; + } + + // Always call the bundled v4 function (works on NC 33+) + registerDavProperty(property); + + // On NC 32 also write into the v3 globals + if (isNextcloud32OrLower()) { + const defaultDavNamespaces = { + d: "DAV:", + nc: "http://nextcloud.org/ns", + oc: "http://owncloud.org/ns", + ocs: "http://open-collaboration-services.org/ns", + }; + + if (typeof window._nc_dav_properties === "undefined") { + window._nc_dav_properties = []; + window._nc_dav_namespaces = { ...defaultDavNamespaces }; + } + + if (!window._nc_dav_properties.find((p) => p === property)) { + window._nc_dav_properties.push(property); + window._nc_dav_namespaces = { + ...window._nc_dav_namespaces, + nc: "http://nextcloud.org/ns", + }; + } + } + + registeredDavProperties.add(property); +} + +/* ================================================================== */ +/* New-file menu */ +/* ================================================================== */ + +/** + * Get new-file menu entries, compatible with both NC 32 and NC 33+. + */ +export function getNewFileMenuEntriesCompat(context) { + if (isNextcloud32OrLower() && window._nc_newfilemenu) { + return window._nc_newfilemenu.getEntries(context); + } + return getNewFileMenuEntries(context); +} + +/** + * Add a new-file menu entry, compatible with both NC 32 and NC 33+. + */ +export function addNewFileMenuEntryCompat(entry) { + if (isNextcloud32OrLower() && window._nc_newfilemenu) { + return window._nc_newfilemenu.registerEntry(entry); + } + return addNewFileMenuEntry(entry); +} + +/** + * Remove a new-file menu entry, compatible with both NC 32 and NC 33+. + */ +export function removeNewFileMenuEntryCompat(entry) { + if (isNextcloud32OrLower() && window._nc_newfilemenu) { + return window._nc_newfilemenu.unregisterEntry(entry); + } + return removeNewFileMenuEntry(entry); +} diff --git a/vendor-bin/sentry/composer.lock b/vendor-bin/sentry/composer.lock index 2bd7697..bd5cc45 100644 --- a/vendor-bin/sentry/composer.lock +++ b/vendor-bin/sentry/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "guzzlehttp/psr7", - "version": "2.8.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "21dc724a0583619cd1652f673303492272778051" + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", - "reference": "21dc724a0583619cd1652f673303492272778051", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", "shasum": "" }, "require": { @@ -33,6 +33,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", + "jshttp/mime-db": "1.54.0.1", "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { @@ -104,7 +105,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.8.0" + "source": "https://github.com/guzzle/psr7/tree/2.9.0" }, "funding": [ { @@ -120,7 +121,7 @@ "type": "tidelift" } ], - "time": "2025-08-23T21:21:41+00:00" + "time": "2026-03-10T16:41:02+00:00" }, { "name": "jean85/pretty-package-versions", @@ -386,16 +387,16 @@ }, { "name": "sentry/sentry", - "version": "4.17.1", + "version": "4.21.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "5c696b8de57e841a2bf3b6f6eecfd99acfdda80c" + "reference": "2bf405fc4d38f00073a7d023cf321e59f614d54c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/5c696b8de57e841a2bf3b6f6eecfd99acfdda80c", - "reference": "5c696b8de57e841a2bf3b6f6eecfd99acfdda80c", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2bf405fc4d38f00073a7d023cf321e59f614d54c", + "reference": "2bf405fc4d38f00073a7d023cf321e59f614d54c", "shasum": "" }, "require": { @@ -406,7 +407,7 @@ "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", "psr/log": "^1.0|^2.0|^3.0", - "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0" + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0" }, "conflict": { "raven/raven": "*" @@ -416,9 +417,12 @@ "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^1.8.4|^2.1.1", "monolog/monolog": "^1.6|^2.0|^3.0", + "nyholm/psr7": "^1.8", "phpbench/phpbench": "^1.0", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^8.5|^9.6", + "phpunit/phpunit": "^8.5.52|^9.6.34", + "spiral/roadrunner-http": "^3.6", + "spiral/roadrunner-worker": "^3.6", "vimeo/psalm": "^4.17" }, "suggest": { @@ -458,7 +462,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.17.1" + "source": "https://github.com/getsentry/sentry-php/tree/4.21.0" }, "funding": [ { @@ -470,7 +474,7 @@ "type": "custom" } ], - "time": "2025-10-23T15:19:24+00:00" + "time": "2026-02-24T15:32:51+00:00" }, { "name": "symfony/deprecation-contracts", @@ -541,16 +545,16 @@ }, { "name": "symfony/options-resolver", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d" + "reference": "b38026df55197f9e39a44f3215788edf83187b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0ff2f5c3df08a395232bbc3c2eb7e84912df911d", - "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", "shasum": "" }, "require": { @@ -588,7 +592,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.3.3" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" }, "funding": [ { @@ -608,7 +612,7 @@ "type": "tidelift" } ], - "time": "2025-08-05T10:16:07+00:00" + "time": "2025-11-12T15:39:26+00:00" } ], "packages-dev": [], @@ -619,5 +623,5 @@ "prefer-lowest": false, "platform": {}, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/webpack.config.js b/webpack.config.js index f513c06..a248f88 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,12 @@ const path = require("path"); const webpackConfig = require("@nextcloud/webpack-vue-config"); + +// Remove vue$ alias set by @nextcloud/webpack-vue-config +// This is required for @nextcloud/dialogs v7+ which uses Vue 3 internally +// and must not be forced to resolve to the project's Vue 2 +// See: https://github.com/nextcloud-libraries/nextcloud-dialogs/blob/master/CHANGELOG.md#v700 +delete webpackConfig.resolve.alias["vue$"]; + webpackConfig.resolve.alias = { ...webpackConfig.resolve.alias, "@": path.resolve(__dirname, "src"),