diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index bb6accec6c..d40bdf1310 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -57,14 +57,14 @@ jobs: timeout-minutes: 5 strategy: matrix: - php: ["8.2", "8.3"] + php: ["8.2", "8.3", "8.4"] env: extensions: mbstring, ctype, curl, gd, apcu, memcached, redis ini: apc.enabled=1, apc.enable_cli=1, pcov.directory=., "pcov.exclude=\"~(vendor|tests)~\"" steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v4 with: fetch-depth: 2 @@ -84,27 +84,27 @@ jobs: - name: Setup PHP cache environment id: ext-cache - uses: shivammathur/cache-extensions@f9643262bed1015eb7bfad95e63378b23bc2d319 # pin@v1 + uses: shivammathur/cache-extensions@b5046118b75df28d2b24c968b417e81a6211a7fc # pin@v1 with: php-version: ${{ matrix.php }} extensions: ${{ env.extensions }} key: php-v1 - name: Cache PHP extensions - uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # pin@v3 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # pin@v4 with: path: ${{ steps.ext-cache.outputs.dir }} key: ${{ steps.ext-cache.outputs.key }} restore-keys: ${{ steps.ext-cache.outputs.key }} - name: Setup PHP environment - uses: shivammathur/setup-php@6d7209f44a25a59e904b1ee9f3b0c33ab2cd888d # pin@v2 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # pin@v2 with: php-version: ${{ matrix.php }} extensions: ${{ env.extensions }} ini-values: ${{ env.ini }} coverage: pcov - tools: phpunit:10.5.5, psalm:5.20.0 + tools: phpunit:10.5.38, psalm:5.26.1 - name: Setup problem matchers run: | @@ -113,7 +113,7 @@ jobs: - name: Cache analysis data id: finishPrepare - uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # pin@v3 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # pin@v4 with: path: ~/.cache/psalm key: backend-analysis-${{ matrix.php }} @@ -127,7 +127,7 @@ jobs: run: phpunit --fail-on-skipped --coverage-clover ${{ github.workspace }}/clover.xml - name: Statically analyze using Psalm - if: always() && steps.finishPrepare.outcome == 'success' + if: always() && steps.finishPrepare.outcome == 'success' && matrix.php != '8.4' run: psalm --output-format=github --php-version=${{ matrix.php }} --report=sarif/psalm.sarif --report-show-info=false - name: Upload coverage results to Codecov @@ -135,7 +135,7 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} PHP: ${{ matrix.php }} if: env.token != '' - uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # pin@v3 + uses: codecov/codecov-action@015f24e6818733317a2da2edd6290ab26238649a # pin@v5 with: token: ${{ secrets.CODECOV_TOKEN }} # for better reliability if the GitHub API is down fail_ci_if_error: true @@ -144,8 +144,8 @@ jobs: env_vars: PHP - name: Upload code scanning results to GitHub - if: always() && steps.finishPrepare.outcome == 'success' && github.repository == 'getkirby/kirby' - uses: github/codeql-action/upload-sarif@4a8f20f6b9b5114f354129a1e2f391d75bfd640a # pin@v2 + if: always() && steps.finishPrepare.outcome == 'success' && github.repository == 'getkirby/kirby' && matrix.php != '8.4' + uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # pin@v3 with: sarif_file: sarif @@ -177,21 +177,21 @@ jobs: steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v4 - name: Preparations run: mkdir sarif - name: Setup PHP cache environment id: ext-cache - uses: shivammathur/cache-extensions@f9643262bed1015eb7bfad95e63378b23bc2d319 # pin@v1 + uses: shivammathur/cache-extensions@b5046118b75df28d2b24c968b417e81a6211a7fc # pin@v1 with: php-version: ${{ env.php }} extensions: ${{ env.extensions }} key: php-analysis-v1 - name: Cache PHP extensions - uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # pin@v3 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # pin@v4 with: path: ${{ steps.ext-cache.outputs.dir }} key: ${{ steps.ext-cache.outputs.key }} @@ -199,7 +199,7 @@ jobs: - name: Setup PHP environment id: finishPrepare - uses: shivammathur/setup-php@6d7209f44a25a59e904b1ee9f3b0c33ab2cd888d # pin@v2 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # pin@v2 with: php-version: ${{ env.php }} extensions: ${{ env.extensions }} @@ -226,7 +226,7 @@ jobs: - name: Upload code scanning results to GitHub if: always() && steps.finishPrepare.outcome == 'success' && github.repository == 'getkirby/kirby' - uses: github/codeql-action/upload-sarif@4a8f20f6b9b5114f354129a1e2f391d75bfd640a # pin@v2 + uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # pin@v3 with: sarif_file: sarif @@ -257,10 +257,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v4 - name: Setup PHP environment - uses: shivammathur/setup-php@6d7209f44a25a59e904b1ee9f3b0c33ab2cd888d # pin@v2 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # pin@v2 with: php-version: ${{ env.php }} coverage: none @@ -268,7 +268,7 @@ jobs: - name: Cache analysis data id: finishPrepare - uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # pin@v3 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # pin@v4 with: path: ~/.php-cs-fixer key: coding-style diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 5ad1719fbc..f049d990bf 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -48,10 +48,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v4 - name: Set up Node.js problem matchers and cache npm dependencies - uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # pin@v3 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # pin@v4 with: cache: "npm" cache-dependency-path: panel/package-lock.json @@ -93,10 +93,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v4 - name: Set up Node.js problem matchers and cache npm dependencies - uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # pin@v3 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # pin@v4 with: cache: "npm" cache-dependency-path: panel/package-lock.json diff --git a/bootstrap.php b/bootstrap.php index f1fa6de800..70f27ce50e 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -6,7 +6,7 @@ */ if ( version_compare(PHP_VERSION, '8.2.0', '>=') === false || - version_compare(PHP_VERSION, '8.4.0', '<') === false + version_compare(PHP_VERSION, '8.5.0', '<') === false ) { die(include __DIR__ . '/views/php.php'); } diff --git a/cacert.pem b/cacert.pem index f2c24a589d..eb11b2fd1a 100644 --- a/cacert.pem +++ b/cacert.pem @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Tue Sep 24 03:12:04 2024 GMT +## Certificate data from Mozilla as of: Tue Nov 26 13:58:25 2024 GMT ## ## Find updated versions here: https://curl.se/docs/caextract.html ## @@ -2602,6 +2602,36 @@ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ CAezNIm8BZ/3Hobui3A= -----END CERTIFICATE----- +GLOBALTRUST 2020 +================ +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx +IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT +VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh +BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy +MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi +D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO +VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM +CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm +fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA +A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR +JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG +DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU +clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ +mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud +IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw +4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 +iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS +8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 +HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS +vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 +oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF +YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl +gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + ANF Secure Server Root CA ========================= -----BEGIN CERTIFICATE----- diff --git a/composer.json b/composer.json index d8cf8f3506..a0e5280919 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "description": "The Kirby core", "license": "proprietary", "type": "kirby-cms", - "version": "5.0.0-alpha.3", + "version": "5.0.0-alpha.4", "keywords": [ "kirby", "cms", @@ -24,7 +24,7 @@ "source": "https://github.com/getkirby/kirby" }, "require": { - "php": "~8.2.0 || ~8.3.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "ext-SimpleXML": "*", "ext-ctype": "*", "ext-curl": "*", @@ -37,16 +37,16 @@ "ext-mbstring": "*", "ext-openssl": "*", "christian-riesen/base32": "1.6.0", - "claviska/simpleimage": "4.2.0", + "claviska/simpleimage": "4.2.1", "composer/semver": "3.4.3", - "filp/whoops": "2.15.4", + "filp/whoops": "2.16.0", "getkirby/composer-installer": "^1.2.1", - "laminas/laminas-escaper": "2.13.0", + "laminas/laminas-escaper": "2.14.0", "michelf/php-smartypants": "1.8.1", - "phpmailer/phpmailer": "6.9.1", + "phpmailer/phpmailer": "6.9.2", "symfony/polyfill-intl-idn": "1.31.0", "symfony/polyfill-mbstring": "1.31.0", - "symfony/yaml": "7.1.5" + "symfony/yaml": "7.1.6" }, "replace": { "symfony/polyfill-php72": "*" diff --git a/composer.lock b/composer.lock index 9f66b4618c..1cac39429e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "eb2b56fc295efd5f31cbee1371a5dece", + "content-hash": "b2a4343f6fbd666dd56873cfd0e7e91f", "packages": [ { "name": "christian-riesen/base32", @@ -67,16 +67,16 @@ }, { "name": "claviska/simpleimage", - "version": "4.2.0", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/claviska/SimpleImage.git", - "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2" + "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/dfbe53c01dae8467468ef2b817c09b786a7839d2", - "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2", + "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/ec6d5021e5a7153a2520d64c59b86b6f3c4157c5", + "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5", "shasum": "" }, "require": { @@ -108,7 +108,7 @@ "description": "A PHP class that makes working with images as simple as possible.", "support": { "issues": "https://github.com/claviska/SimpleImage/issues", - "source": "https://github.com/claviska/SimpleImage/tree/4.2.0" + "source": "https://github.com/claviska/SimpleImage/tree/4.2.1" }, "funding": [ { @@ -116,7 +116,7 @@ "type": "github" } ], - "time": "2024-04-15T16:07:16+00:00" + "time": "2024-11-22T13:25:03+00:00" }, { "name": "composer/semver", @@ -201,26 +201,26 @@ }, { "name": "filp/whoops", - "version": "2.15.4", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", + "php": "^7.1 || ^8.0", "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -260,7 +260,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.4" + "source": "https://github.com/filp/whoops/tree/2.16.0" }, "funding": [ { @@ -268,7 +268,7 @@ "type": "github" } ], - "time": "2023-11-03T12:00:00+00:00" + "time": "2024-09-25T12:00:00+00:00" }, { "name": "getkirby/composer-installer", @@ -319,33 +319,33 @@ }, { "name": "laminas/laminas-escaper", - "version": "2.13.0", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba" + "reference": "0f7cb975f4443cf22f33408925c231225cfba8cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba", - "reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/0f7cb975f4443cf22f33408925c231225cfba8cb", + "reference": "0f7cb975f4443cf22f33408925c231225cfba8cb", "shasum": "" }, "require": { "ext-ctype": "*", "ext-mbstring": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "conflict": { "zendframework/zend-escaper": "*" }, "require-dev": { - "infection/infection": "^0.27.0", - "laminas/laminas-coding-standard": "~2.5.0", + "infection/infection": "^0.27.9", + "laminas/laminas-coding-standard": "~3.0.0", "maglnet/composer-require-checker": "^3.8.0", - "phpunit/phpunit": "^9.6.7", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.9" + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^5.21.1" }, "type": "library", "autoload": { @@ -377,7 +377,7 @@ "type": "community_bridge" } ], - "time": "2023-10-10T08:35:13+00:00" + "time": "2024-10-24T10:12:53+00:00" }, { "name": "league/color-extractor", @@ -496,16 +496,16 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.9.1", + "version": "v6.9.2", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "039de174cd9c17a8389754d3b877a2ed22743e18" + "reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18", - "reference": "039de174cd9c17a8389754d3b877a2ed22743e18", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a7b17b42fa4887c92146243f3d2f4ccb962af17c", + "reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c", "shasum": "" }, "require": { @@ -565,7 +565,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.2" }, "funding": [ { @@ -573,7 +573,7 @@ "type": "github" } ], - "time": "2023-11-25T22:23:28+00:00" + "time": "2024-10-09T10:07:50+00:00" }, { "name": "psr/log", @@ -950,16 +950,16 @@ }, { "name": "symfony/yaml", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", - "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", "shasum": "" }, "require": { @@ -1001,7 +1001,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.5" + "source": "https://github.com/symfony/yaml/tree/v7.1.6" }, "funding": [ { @@ -1017,17 +1017,17 @@ "type": "tidelift" } ], - "time": "2024-09-17T12:49:58+00:00" + "time": "2024-09-25T14:20:29+00:00" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~8.2.0 || ~8.3.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "ext-simplexml": "*", "ext-ctype": "*", "ext-curl": "*", @@ -1040,7 +1040,7 @@ "ext-mbstring": "*", "ext-openssl": "*" }, - "platform-dev": {}, + "platform-dev": [], "platform-overrides": { "php": "8.2.0" }, diff --git a/config/api/routes.php b/config/api/routes.php index 6b1337969d..62ce66552d 100644 --- a/config/api/routes.php +++ b/config/api/routes.php @@ -6,12 +6,12 @@ return function ($kirby) { $routes = [ ...include __DIR__ . '/routes/auth.php', + ...include __DIR__ . '/routes/changes.php', ...include __DIR__ . '/routes/pages.php', ...include __DIR__ . '/routes/roles.php', ...include __DIR__ . '/routes/site.php', ...include __DIR__ . '/routes/users.php', ...include __DIR__ . '/routes/files.php', - ...include __DIR__ . '/routes/lock.php', ...include __DIR__ . '/routes/system.php', ...include __DIR__ . '/routes/translations.php' ]; diff --git a/config/api/routes/changes.php b/config/api/routes/changes.php new file mode 100644 index 0000000000..2e35754315 --- /dev/null +++ b/config/api/routes/changes.php @@ -0,0 +1,37 @@ + '(:all)/changes/discard', + 'method' => 'POST', + 'action' => function (string $path) { + return Changes::discard( + model: Find::parent($path), + ); + } + ], + [ + 'pattern' => '(:all)/changes/publish', + 'method' => 'POST', + 'action' => function (string $path) { + return Changes::publish( + model: Find::parent($path), + input: App::instance()->request()->get() + ); + } + ], + [ + 'pattern' => '(:all)/changes/save', + 'method' => 'POST', + 'action' => function (string $path) { + return Changes::save( + model: Find::parent($path), + input: App::instance()->request()->get() + ); + } + ], +]; diff --git a/config/api/routes/lock.php b/config/api/routes/lock.php deleted file mode 100644 index c7095d90cf..0000000000 --- a/config/api/routes/lock.php +++ /dev/null @@ -1,56 +0,0 @@ - '(:all)/lock', - 'method' => 'GET', - 'action' => function (string $path) { - return [ - 'lock' => $this->parent($path)->lock()?->toArray() ?? false - ]; - } - ], - [ - 'pattern' => '(:all)/lock', - 'method' => 'PATCH', - 'action' => function (string $path) { - return $this->parent($path)->lock()?->create(); - } - ], - [ - 'pattern' => '(:all)/lock', - 'method' => 'DELETE', - 'action' => function (string $path) { - try { - return $this->parent($path)->lock()?->remove(); - } catch (NotFoundException) { - return true; - } - } - ], - [ - 'pattern' => '(:all)/unlock', - 'method' => 'PATCH', - 'action' => function (string $path) { - return $this->parent($path)->lock()?->unlock(); - } - ], - [ - 'pattern' => '(:all)/unlock', - 'method' => 'DELETE', - 'action' => function (string $path) { - try { - return $this->parent($path)->lock()?->resolve(); - } catch (NotFoundException) { - return true; - } - } - ], -]; diff --git a/config/areas/account.php b/config/areas/account.php index c6fc9ea152..9f9fe73d21 100644 --- a/config/areas/account.php +++ b/config/areas/account.php @@ -11,7 +11,6 @@ 'dialogs' => require __DIR__ . '/account/dialogs.php', 'drawers' => require __DIR__ . '/account/drawers.php', 'dropdowns' => require __DIR__ . '/account/dropdowns.php', - 'requests' => require __DIR__ . '/account/requests.php', 'views' => require __DIR__ . '/account/views.php' ]; }; diff --git a/config/areas/account/requests.php b/config/areas/account/requests.php deleted file mode 100644 index f22ee0a5c0..0000000000 --- a/config/areas/account/requests.php +++ /dev/null @@ -1,41 +0,0 @@ - [ - ...$requests['user.changes.discard'], - 'pattern' => '(account)/changes/discard', - ], - 'account.changes.publish' => [ - ...$requests['user.changes.publish'], - 'pattern' => '(account)/changes/publish', - ], - 'account.changes.save' => [ - ...$requests['user.changes.save'], - 'pattern' => '(account)/changes/save', - ], - 'account.changes.unlock' => [ - ...$requests['user.changes.unlock'], - 'pattern' => '(account)/changes/unlock', - ], - - // Account File Changes - 'account.file.changes.discard' => [ - ...$requests['user.file.changes.discard'], - 'pattern' => '(account)/files/(:any)/changes/discard', - ], - 'account.file.changes.publish' => [ - ...$requests['user.file.changes.publish'], - 'pattern' => '(account)/files/(:any)/changes/publish', - ], - 'account.file.changes.save' => [ - ...$requests['user.file.changes.save'], - 'pattern' => '(account)/files/(:any)/changes/save', - ], - 'account.file.changes.unlock' => [ - ...$requests['user.file.changes.unlock'], - 'pattern' => '(account)/files/(:any)/changes/unlock', - ], -]; diff --git a/config/areas/files/dialogs.php b/config/areas/files/dialogs.php index 8707bd0da5..400d949e28 100644 --- a/config/areas/files/dialogs.php +++ b/config/areas/files/dialogs.php @@ -45,13 +45,7 @@ $oldUrl = $file->panel()->url(true); $newUrl = $renamed->panel()->url(true); $response = [ - 'event' => 'file.changeName', - 'dispatch' => [ - 'content/move' => [ - $oldUrl, - $newUrl - ] - ], + 'event' => 'file.changeName' ]; // check for a necessary redirect after the filename has changed @@ -163,7 +157,6 @@ return [ 'event' => 'file.delete', - 'dispatch' => ['content/remove' => [$url]], 'redirect' => $redirect ]; } diff --git a/config/areas/files/requests.php b/config/areas/files/requests.php deleted file mode 100644 index c7c541b67e..0000000000 --- a/config/areas/files/requests.php +++ /dev/null @@ -1,49 +0,0 @@ - [ - 'method' => 'POST', - 'action' => function (string $parent, string $filename) { - return Changes::discard( - model: Find::file($parent, $filename), - ); - } - ], - 'changes.publish' => [ - 'method' => 'POST', - 'action' => function (string $parent, string $filename) { - return Changes::publish( - model: Find::file($parent, $filename), - input: App::instance()->request()->get() - ); - } - ], - 'changes.save' => [ - 'method' => 'POST', - 'action' => function (string $parent, string $filename) { - return Changes::save( - model: Find::file($parent, $filename), - input: App::instance()->request()->get() - ); - } - ], - 'changes.unlock' => [ - 'method' => 'POST', - 'action' => function (string $parent, string $filename) { - return Changes::unlock( - model: Find::file($parent, $filename) - ); - } - ] -]; diff --git a/config/areas/site/buttons.php b/config/areas/site/buttons.php index 6daea92d60..575148af5c 100644 --- a/config/areas/site/buttons.php +++ b/config/areas/site/buttons.php @@ -5,16 +5,24 @@ use Kirby\Cms\Site; use Kirby\Panel\Ui\Buttons\LanguagesDropdown; use Kirby\Panel\Ui\Buttons\PageStatusButton; -use Kirby\Panel\Ui\Buttons\PreviewButton; +use Kirby\Panel\Ui\Buttons\PreviewDropdownButton; use Kirby\Panel\Ui\Buttons\SettingsButton; return [ 'site.preview' => function (Site $site) { - return new PreviewButton(link: $site->url()); + return new PreviewDropdownButton( + open: $site->url(), + preview: $site->panel()->url(true) . '/preview/compare', + copy: $site->url(), + ); }, 'page.preview' => function (Page $page) { if ($page->permissions()->can('preview') === true) { - return new PreviewButton(link: $page->previewUrl()); + return new PreviewDropdownButton( + open: $page->previewUrl(), + preview: $page->panel()->url(true) . '/preview/compare', + copy: $page->previewUrl(), + ); } }, 'page.settings' => function (Page $page) { diff --git a/config/areas/site/dialogs.php b/config/areas/site/dialogs.php index 8a4d0cc640..81f7d3e745 100644 --- a/config/areas/site/dialogs.php +++ b/config/areas/site/dialogs.php @@ -266,14 +266,11 @@ // the slug changed if ($page->slug() !== $slug) { - $newPage = $page->changeSlug($slug); $response['event'][] = 'page.changeSlug'; - $response['dispatch'] = [ - 'content/move' => [ - $oldUrl = $page->panel()->url(true), - $newUrl = $newPage->panel()->url(true) - ] - ]; + + $newPage = $page->changeSlug($slug); + $oldUrl = $page->panel()->url(true); + $newUrl = $newPage->panel()->url(true); // check for a necessary redirect after the slug has changed if (Panel::referrer() === $oldUrl && $oldUrl !== $newUrl) { @@ -383,7 +380,6 @@ return [ 'event' => 'page.delete', - 'dispatch' => ['content/remove' => [$url]], 'redirect' => $redirect ]; } @@ -554,13 +550,7 @@ return [ 'event' => 'page.move', - 'redirect' => $newPage->panel()->url(true), - 'dispatch' => [ - 'content/move' => [ - $oldPage->panel()->url(true), - $newPage->panel()->url(true) - ] - ], + 'redirect' => $newPage->panel()->url(true) ]; } ], @@ -641,13 +631,7 @@ 'changes' => [ 'pattern' => 'changes', 'load' => function () { - $dialog = new ChangesDialog(); - return $dialog->load(); + return (new ChangesDialog())->load(); }, - 'submit' => function () { - $dialog = new ChangesDialog(); - $ids = App::instance()->request()->get('ids'); - return $dialog->submit($ids); - } ], ]; diff --git a/config/areas/site/requests.php b/config/areas/site/requests.php index 9658e0a500..360df93d19 100644 --- a/config/areas/site/requests.php +++ b/config/areas/site/requests.php @@ -1,130 +1,9 @@ [ - 'pattern' => 'pages/(:any)/changes/discard', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::discard( - model: Find::page($path), - ); - } - ], - 'page.changes.publish' => [ - 'pattern' => 'pages/(:any)/changes/publish', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::publish( - model: Find::page($path), - input: App::instance()->request()->get() - ); - } - ], - 'page.changes.save' => [ - 'pattern' => 'pages/(:any)/changes/save', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::save( - model: Find::page($path), - input: App::instance()->request()->get() - ); - } - ], - 'page.changes.unlock' => [ - 'pattern' => 'pages/(:any)/changes/unlock', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::unlock( - model: Find::page($path), - ); - } - ], - - // Page File Changes - 'page.file.changes.discard' => [ - ...$files['changes.discard'], - 'pattern' => '(pages/.*?)/files/(:any)/changes/discard', - ], - 'page.file.changes.publish' => [ - ...$files['changes.publish'], - 'pattern' => '(pages/.*?)/files/(:any)/changes/publish', - ], - 'page.file.changes.save' => [ - ...$files['changes.save'], - 'pattern' => '(pages/.*?)/files/(:any)/changes/save', - ], - 'page.file.changes.unlock' => [ - ...$files['changes.unlock'], - 'pattern' => '(pages/.*?)/files/(:any)/changes/unlock', - ], - - // Site Changes - 'site.changes.discard' => [ - 'pattern' => 'site/changes/discard', - 'method' => 'POST', - 'action' => function () { - return Changes::discard( - model: App::instance()->site(), - ); - } - ], - 'site.changes.publish' => [ - 'pattern' => 'site/changes/publish', - 'method' => 'POST', - 'action' => function () { - return Changes::publish( - model: App::instance()->site(), - input: App::instance()->request()->get() - ); - } - ], - 'site.changes.save' => [ - 'pattern' => 'site/changes/save', - 'method' => 'POST', - 'action' => function () { - return Changes::save( - model: App::instance()->site(), - input: App::instance()->request()->get() - ); - } - ], - 'site.changes.unlock' => [ - 'pattern' => 'site/changes/unlock', - 'method' => 'POST', - 'action' => function () { - return Changes::unlock( - model: App::instance()->site(), - ); - } - ], - - // Site File Changes - 'site.file.changes.discard' => [ - ...$files['changes.discard'], - 'pattern' => '(site)/files/(:any)/changes/discard', - ], - 'site.file.changes.publish' => [ - ...$files['changes.publish'], - 'pattern' => '(site)/files/(:any)/changes/publish', - ], - 'site.file.changes.save' => [ - ...$files['changes.save'], - 'pattern' => '(site)/files/(:any)/changes/save', - ], - 'site.file.changes.unlock' => [ - ...$files['changes.unlock'], - 'pattern' => '(site)/files/(:any)/changes/unlock', - ], - - // Tree Navigation 'tree' => [ 'pattern' => 'site/tree', 'action' => function () { diff --git a/config/areas/site/views.php b/config/areas/site/views.php index 7465d2e324..1fd682e463 100644 --- a/config/areas/site/views.php +++ b/config/areas/site/views.php @@ -2,6 +2,8 @@ use Kirby\Cms\App; use Kirby\Cms\Find; +use Kirby\Exception\PermissionException; +use Kirby\Toolkit\I18n; return [ 'page' => [ @@ -14,6 +16,34 @@ return Find::file('pages/' . $id, $filename)->panel()->view(); } ], + 'page.preview' => [ + 'pattern' => 'pages/(:any)/preview/(changes|latest|compare)', + 'action' => function (string $path, string $mode) { + $page = Find::page($path); + $view = $page->panel()->view(); + + $changesUrl = $page->previewUrl('changes'); + $latestUrl = $page->previewUrl('latest'); + + if ($latestUrl === null) { + throw new PermissionException('The preview is not available'); + } + + return [ + 'component' => 'k-preview-view', + 'props' => [ + ...$view['props'], + 'back' => $view['props']['link'], + 'mode' => $mode, + 'src' => [ + 'changes' => $changesUrl, + 'latest' => $latestUrl, + ] + ], + 'title' => $view['props']['title'] . ' | ' . I18n::translate('changes'), + ]; + } + ], 'site' => [ 'pattern' => 'site', 'action' => fn () => App::instance()->site()->panel()->view() @@ -24,4 +54,32 @@ return Find::file('site', $filename)->panel()->view(); } ], + 'site.preview' => [ + 'pattern' => 'site/preview/(changes|latest|compare)', + 'action' => function (string $mode) { + $site = App::instance()->site(); + $view = $site->panel()->view(); + + $changesUrl = $site->previewUrl('changes'); + $latestUrl = $site->previewUrl('latest'); + + if ($latestUrl === null) { + throw new PermissionException('The preview is not available'); + } + + return [ + 'component' => 'k-preview-view', + 'props' => [ + ...$view['props'], + 'back' => $view['props']['link'], + 'mode' => $mode, + 'src' => [ + 'changes' => $changesUrl, + 'latest' => $latestUrl, + ] + ], + 'title' => I18n::translate('view.site') . ' | ' . I18n::translate('changes'), + ]; + } + ], ]; diff --git a/config/areas/users.php b/config/areas/users.php index 3896e2eb2d..05bdad723a 100644 --- a/config/areas/users.php +++ b/config/areas/users.php @@ -12,7 +12,6 @@ 'dialogs' => require __DIR__ . '/users/dialogs.php', 'drawers' => require __DIR__ . '/users/drawers.php', 'dropdowns' => require __DIR__ . '/users/dropdowns.php', - 'requests' => require __DIR__ . '/users/requests.php', 'searches' => require __DIR__ . '/users/searches.php', 'views' => require __DIR__ . '/users/views.php' ]; diff --git a/config/areas/users/dialogs.php b/config/areas/users/dialogs.php index 93419200c5..22a3180fff 100644 --- a/config/areas/users/dialogs.php +++ b/config/areas/users/dialogs.php @@ -54,7 +54,7 @@ 'email' => '', 'password' => '', 'translation' => $kirby->panelLanguage(), - 'role' => $role ?? $roles['options'][0]['value'] ?? null + 'role' => $role ?: $roles['options'][0]['value'] ?? null ] ] ]; @@ -297,7 +297,6 @@ return [ 'event' => 'user.delete', - 'dispatch' => ['content/remove' => [$url]], 'redirect' => $redirect ]; } diff --git a/config/areas/users/requests.php b/config/areas/users/requests.php deleted file mode 100644 index dd0e10c345..0000000000 --- a/config/areas/users/requests.php +++ /dev/null @@ -1,67 +0,0 @@ - [ - 'pattern' => 'users/(:any)/changes/discard', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::discard( - model: Find::user($path), - ); - } - ], - 'user.changes.publish' => [ - 'pattern' => 'users/(:any)/changes/publish', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::publish( - model: Find::user($path), - input: App::instance()->request()->get() - ); - } - ], - 'user.changes.save' => [ - 'pattern' => 'users/(:any)/changes/save', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::save( - model: Find::user($path), - input: App::instance()->request()->get() - ); - } - ], - 'user.changes.unlock' => [ - 'pattern' => 'users/(:any)/changes/unlock', - 'method' => 'POST', - 'action' => function (string $path) { - return Changes::unlock( - model: Find::user($path), - ); - } - ], - - // User File Changes - 'user.file.changes.discard' => [ - ...$files['changes.discard'], - 'pattern' => '(users/.*?)/files/(:any)/changes/discard', - ], - 'user.file.changes.publish' => [ - ...$files['changes.publish'], - 'pattern' => '(users/.*?)/files/(:any)/changes/publish', - ], - 'user.file.changes.save' => [ - ...$files['changes.save'], - 'pattern' => '(users/.*?)/files/(:any)/changes/save', - ], - 'user.file.changes.unlock' => [ - ...$files['changes.unlock'], - 'pattern' => '(users/.*?)/files/(:any)/changes/unlock', - ], -]; diff --git a/dependencies/parsedown-extra/ParsedownExtra.php b/dependencies/parsedown-extra/ParsedownExtra.php index 2f9c62d192..390edd7ccf 100644 --- a/dependencies/parsedown-extra/ParsedownExtra.php +++ b/dependencies/parsedown-extra/ParsedownExtra.php @@ -17,7 +17,7 @@ class ParsedownExtra extends Parsedown { # ~ - public const version = '0.8.0-beta-1'; + public const version = '0.8.0-beta-2'; # ~ @@ -297,7 +297,7 @@ protected function blockMarkupComplete($Block) # # Setext - protected function blockSetextHeader($Line, array $Block = null) + protected function blockSetextHeader($Line, array|null $Block = null) { $Block = parent::blockSetextHeader($Line, $Block); diff --git a/dependencies/parsedown/Parsedown.php b/dependencies/parsedown/Parsedown.php index ab7222582c..76b2a7c205 100644 --- a/dependencies/parsedown/Parsedown.php +++ b/dependencies/parsedown/Parsedown.php @@ -17,7 +17,7 @@ class Parsedown { # ~ - public const version = '1.8.0-beta-7'; + public const version = '1.8.0-beta-8'; # ~ @@ -526,7 +526,7 @@ protected function blockHeader($Line) # # List - protected function blockList($Line, array $CurrentBlock = null) + protected function blockList($Line, array|null $CurrentBlock = null) { list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]{1,9}+[.\)]'); @@ -741,7 +741,7 @@ protected function blockRule($Line) # # Setext - protected function blockSetextHeader($Line, array $Block = null) + protected function blockSetextHeader($Line, array|null $Block = null) { if (! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) { return; @@ -821,7 +821,7 @@ protected function blockReference($Line) # # Table - protected function blockTable($Line, array $Block = null) + protected function blockTable($Line, array|null $Block = null) { if (! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) { return; diff --git a/i18n/translations/cs.json b/i18n/translations/cs.json index 326b6751f3..e2154f9fc6 100644 --- a/i18n/translations/cs.json +++ b/i18n/translations/cs.json @@ -126,12 +126,12 @@ "error.form.notSaved": "Formulář nemohl být uložen", "error.language.code": "Zadejte prosím platný kód jazyka", - "error.language.create.permission": "You are not allowed to create a language", - "error.language.delete.permission": "You are not allowed to delete the language", + "error.language.create.permission": "Nemáte dovoleno vytvořit jazyk", + "error.language.delete.permission": "Nemáte dovoleno jazyk vymazat", "error.language.duplicate": "Jazyk již existuje", "error.language.name": "Zadejte prosím platné jméno jazyka", "error.language.notFound": "Jazyk nebyl nalezen", - "error.language.update.permission": "You are not allowed to update the language", + "error.language.update.permission": "Nemáte dovoleno aktualizovat jazyk", "error.layout.validation.block": "V rozvržení {layoutIndex} je v poli \"{field}\" v bloku {blockIndex} při použití \"{fieldset}\" typu chyba", "error.layout.validation.settings": "Chyba v nastavení rozvržení {index}", @@ -620,8 +620,8 @@ "stats.empty": "Žádná hlášení", "status": "Stav", - "system.info.copy": "Copy info", - "system.info.copied": "System info copied", + "system.info.copy": "Kopírovat informace", + "system.info.copied": "Systémové informace zkopírovány", "system.issues.content": "Složka content je zřejmě přístupná zvenčí", "system.issues.eol.kirby": "Instalovaná verze Kirby dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace", "system.issues.eol.plugin": "Instalovaná verze doplňku { plugin } dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace", diff --git a/i18n/translations/en.json b/i18n/translations/en.json index 8fb81a0ff7..02e14d34f6 100644 --- a/i18n/translations/en.json +++ b/i18n/translations/en.json @@ -20,7 +20,9 @@ "coordinates": "Coordinates", "copy": "Copy", "copy.all": "Copy all", - "copy.success": "{count} copied!", + "copy.success": "Copied", + "copy.success.multiple": "{count} copied!", + "copy.url": "Copy URL", "create": "Create", "custom": "Custom", @@ -90,6 +92,12 @@ "error.cache.type.invalid": "Invalid cache type \"{type}\"", + "error.content.lock.delete": "The version is locked and cannot be deleted", + "error.content.lock.move": "The source version is locked and cannot be moved", + "error.content.lock.publish": "This version is already published", + "error.content.lock.replace": "The version is locked and cannot be replaced", + "error.content.lock.update": "The version is locked and cannot be updated", + "error.email.preset.notFound": "The email preset \"{name}\" cannot be found", "error.field.converter.invalid": "Invalid converter \"{converter}\"", @@ -378,10 +386,15 @@ "filter": "Filter", "form.discard": "Discard changes", - "form.discard.confirm": "Do you really want to delete all unpublished changes?", + "form.discard.confirm": "Do you really want to discard all your changes?", "form.locked": "This content is disabled for you as it is currently edited by another user", + "form.unsaved": "The current changes have not yet been saved", + "form.save.error": "Your changes could not be saved.", + "form.save.success": "Your changes have been saved", "form.preview": "Preview changes", "form.preview.draft": "Preview draft", + "form.publish.error": "Your changes could not be published.", + "form.publish.success": "Your changes have been published", "hide": "Hide", "hour": "Hour", @@ -471,7 +484,10 @@ "loading": "Loading", "lock.unsaved": "Unsaved changes", - "lock.unsaved.empty": "There are no more unsaved changes", + "lock.unsaved.empty": "There are no unsaved changes", + "lock.unsaved.files": "Unsaved files", + "lock.unsaved.pages": "Unsaved pages", + "lock.unsaved.users": "Unsaved accounts", "lock.isLocked": "Unsaved changes by {email}", "lock.unlock": "Unlock", "lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}", @@ -744,10 +760,13 @@ "users": "Users", "version": "Version", + "version.changes": "Changed version", + "version.compare": "Compare versions", "version.current": "Current version", "version.latest": "Latest version", "versionInformation": "Version information", + "view": "View", "view.account": "Your account", "view.installation": "Installation", "view.languages": "Languages", diff --git a/i18n/translations/nl.json b/i18n/translations/nl.json index 997697a581..37fde74dc6 100644 --- a/i18n/translations/nl.json +++ b/i18n/translations/nl.json @@ -126,12 +126,12 @@ "error.form.notSaved": "Het formulier kon niet worden opgeslagen", "error.language.code": "Vul een geldige code voor deze taal in", - "error.language.create.permission": "You are not allowed to create a language", - "error.language.delete.permission": "You are not allowed to delete the language", + "error.language.create.permission": "Je hebt geen rechten om een taal toe te voegen", + "error.language.delete.permission": "Je hebt geen rechten om een taal te verwijderen", "error.language.duplicate": "De taal bestaat al", "error.language.name": "Vul een geldige naam voor deze taal in", "error.language.notFound": "De taal kan niet worden gevonden", - "error.language.update.permission": "You are not allowed to update the language", + "error.language.update.permission": "Je hebt geen rechten om deze taal te updaten", "error.layout.validation.block": "Er is een fout opgetreden bij het \"{field}\" veld in blok {blockIndex} in het \"{fieldset}\" bloktype in layout {layoutIndex}", "error.layout.validation.settings": "Er is een fout gevonden in de instellingen van ontwerp {index} ", diff --git a/i18n/translations/pt_PT.json b/i18n/translations/pt_PT.json index 574c257c87..3da7c4738e 100644 --- a/i18n/translations/pt_PT.json +++ b/i18n/translations/pt_PT.json @@ -104,16 +104,16 @@ "error.file.extension.forbidden": "A extensão \"{extension}\" não é permitida", "error.file.extension.invalid": "Extensão inválida: {extension}", "error.file.extension.missing": "As extensões de \"{filename}\" estão em falta", - "error.file.maxheight": "A altura da imagem não deve exceder {height} pixels", + "error.file.maxheight": "A altura da imagem não deve exceder {height} píxeis", "error.file.maxsize": "O ficheiro é demasiado grande", - "error.file.maxwidth": "A largura da imagem não deve exceder {width} pixels", + "error.file.maxwidth": "A largura da imagem não deve exceder {width} píxeis", "error.file.mime.differs": "O ficheiro enviado precisa de ser do tipo \"{mime}\"", "error.file.mime.forbidden": "O tipo de mídia \"{mime}\" não é permitido", "error.file.mime.invalid": "Tipo de mídia inválido: {mime}", "error.file.mime.missing": "Não foi possível detectar o tipo de mídia de \"{filename}\"", - "error.file.minheight": "A altura da imagem deve ter pelo menos {height} pixels", + "error.file.minheight": "A altura da imagem deve ter pelo menos {height} píxeis", "error.file.minsize": "O ficheiro é demasiado pequeno", - "error.file.minwidth": "A largura da imagem deve ter pelo menos {width} pixels", + "error.file.minwidth": "A largura da imagem deve ter pelo menos {width} píxeis", "error.file.name.unique": "O nome do ficheiro deve ser único", "error.file.name.missing": "O nome do ficheiro não pode ficar em branco", "error.file.notFound": "Não foi possível encontrar o ficheiro \"{filename}\"", @@ -490,7 +490,7 @@ "login.totp.disable.option": "Desativar códigos de segurança", "login.totp.disable.label": "Insira a sua palavra-passe para desativar códigos de segurança", "login.totp.disable.help": "No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando iniciar a sessão. Poderá configurar códigos de segurança novamente mais tarde.", - "login.totp.disable.admin": "

Isto irá desactivar os códigos de segurança para {user}.

No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando eles iniciarem a sessão. {user} poderá configurar códigos de segurança novamente após o próximo início de sessão.

", + "login.totp.disable.admin": "

Isto irá desativar os códigos de segurança para {user}.

No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando eles iniciarem a sessão. {user} poderá configurar códigos de segurança novamente após o próximo início de sessão.

", "login.totp.disable.success": "Códigos de segurança desativados", "logout": "Sair", @@ -573,7 +573,7 @@ "paste": "Colar", "paste.after": "Colar após", "paste.success": "{count} colados!", - "pixel": "Pixel", + "pixel": "Píxel", "plugin": "Plugin", "plugins": "Plugins", "prev": "Anterior", diff --git a/i18n/translations/sv_SE.json b/i18n/translations/sv_SE.json index feb5caf9c9..75e2e206ed 100644 --- a/i18n/translations/sv_SE.json +++ b/i18n/translations/sv_SE.json @@ -126,12 +126,12 @@ "error.form.notSaved": "Formuläret kunde inte sparas", "error.language.code": "Ange en giltig kod för språket", - "error.language.create.permission": "You are not allowed to create a language", - "error.language.delete.permission": "You are not allowed to delete the language", + "error.language.create.permission": "Du saknar behörighet att skapa ett nytt språk", + "error.language.delete.permission": "Du saknar behörighet att radera språket", "error.language.duplicate": "Språket finns redan", "error.language.name": "Ange ett giltigt namn för språket", "error.language.notFound": "Språket hittades inte", - "error.language.update.permission": "You are not allowed to update the language", + "error.language.update.permission": "Du saknar behörighet att redigera språket", "error.layout.validation.block": "Det finns ett fel i fältet \"{field}\" i blocket {blockIndex} med blocktypen \"{fieldset}\" i layouten {layoutIndex}", "error.layout.validation.settings": "Det finns ett fel i inställningarna för layout {index}", @@ -620,8 +620,8 @@ "stats.empty": "Inga rapporter", "status": "Status", - "system.info.copy": "Copy info", - "system.info.copied": "System info copied", + "system.info.copy": "Kopiera info", + "system.info.copied": "Systeminformation kopierad", "system.issues.content": "Mappen content verkar vara exponerad", "system.issues.eol.kirby": "Din installerade Kirby-version har nått slutet av sin livscykel och kommer inte att få fler säkerhetsuppdateringar", "system.issues.eol.plugin": "Den installerade versionen av tillägget { plugin } har nått slutet på sin livscykel och kommer inte att få fler säkerhetsuppdateringar.", diff --git a/panel/dist/img/icons.svg b/panel/dist/img/icons.svg index 4ac88fe8b5..8ea8e714b4 100644 --- a/panel/dist/img/icons.svg +++ b/panel/dist/img/icons.svg @@ -36,6 +36,9 @@ + + + @@ -131,6 +134,9 @@ + + + @@ -179,6 +185,9 @@ + + + @@ -359,6 +368,15 @@ + + + + + + + + + @@ -643,6 +661,9 @@ + + + diff --git a/panel/dist/ui/Button.json b/panel/dist/ui/Button.json index 5bc3ddf901..c78a32c600 100644 --- a/panel/dist/ui/Button.json +++ b/panel/dist/ui/Button.json @@ -1 +1 @@ -{"displayName":"Button","description":"","tags":{"examples":[{"title":"example","content":"Save"},{"title":"example","content":"Save"}]},"props":[{"name":"disabled","description":"A disabled button/link will have no pointer events and\nthe opacity is be reduced.","type":{"name":"boolean"}},{"name":"download","description":"Whether the link should be downloaded directly","type":{"name":"boolean"}},{"name":"rel","description":"`rel` attribute for the link","type":{"name":"string"}},{"name":"tabindex","description":"Custom tabindex; only use if you really know\nhow to adjust the order properly","type":{"name":"string|number"}},{"name":"target","description":"Set the target of the link","type":{"name":"string"}},{"name":"title","description":"The title attribute can be used to add additional text\nto the button/link, which is shown on mouseover.","type":{"name":"string"}},{"name":"autofocus","description":"Sets autofocus on button (when supported by element)","type":{"name":"boolean"}},{"name":"click","description":"Pass instead of a link URL to be triggered on clicking the button","type":{"name":"func"},"defaultValue":{"value":"() => {}"}},{"name":"current","description":"Sets the `aria-current` attribute.\nEspecially useful in connection with the `link` attribute.","type":{"name":"string|boolean"}},{"name":"dialog","description":"Name/path of a dialog to open on click","type":{"name":"string"}},{"name":"drawer","description":"Name/path of a drawer to open on click","type":{"name":"string"}},{"name":"dropdown","description":"Whether the button opens a dropdown","type":{"name":"boolean"}},{"name":"element","description":"Force which HTML element to use","type":{"name":"string"}},{"name":"icon","description":"Adds an icon to the button.","type":{"name":"string"}},{"name":"id","description":"A unique id for the HTML element","type":{"name":"string|number"}},{"name":"link","description":"If the link attribute is set, the button will be represented\nas a proper `a` tag with `link`'s value as `href` attribute.","type":{"name":"string"}},{"name":"responsive","description":"A responsive button will hide the button text on smaller screens\nautomatically and only keep the icon. An icon must be set in this case.\nIf set to `text`, the icon will be hidden instead.","type":{"name":"boolean|string"}},{"name":"role","description":"`role` attribute for the button","type":{"name":"string"}},{"name":"selected","description":"Sets the `aria-selected` attribute.","type":{"name":"string|boolean"}},{"name":"size","description":"Specific sizes for button styling","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"xs\"","\"sm\""],"type":{"name":"string"}},{"name":"text","description":"The button text","type":{"name":"string|number"}},{"name":"theme","description":"With the theme you can control the general design of the button.","type":{"name":"string"}},{"name":"type","description":"The type attribute sets the button type like in HTML.","tags":{},"values":["\"button\"","\"submit\"","\"reset\""],"type":{"name":"string"},"defaultValue":{"value":"\"button\""}},{"name":"variant","description":"Styling variants for the button","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"filled\"","\"dimmed\""],"type":{"name":"string"}}],"events":[{"name":"click","type":{"names":["undefined"]},"description":"The button has been clicked","properties":[{"type":{"names":["PointerEvent"]},"name":"event","description":"the native click event"}]}],"methods":[{"name":"focus","description":"Focus the button","tags":{"access":[{"description":"public"}]}}],"slots":[{"name":"default","description":"The Button text. You can also use the `text` prop. Leave empty for icon buttons."}],"component":"k-button","sourceFile":"src/components/Navigation/Button.vue"} \ No newline at end of file +{"displayName":"Button","description":"","tags":{"examples":[{"title":"example","content":"Save"},{"title":"example","content":"Save"}]},"props":[{"name":"disabled","description":"A disabled button/link will have no pointer events and\nthe opacity is be reduced.","type":{"name":"boolean"}},{"name":"download","description":"Whether the link should be downloaded directly","type":{"name":"boolean"}},{"name":"rel","description":"`rel` attribute for the link","type":{"name":"string"}},{"name":"tabindex","description":"Custom tabindex; only use if you really know\nhow to adjust the order properly","type":{"name":"string|number"}},{"name":"target","description":"Set the target of the link","type":{"name":"string"}},{"name":"title","description":"The title attribute can be used to add additional text\nto the button/link, which is shown on mouseover.","type":{"name":"string"}},{"name":"autofocus","description":"Sets autofocus on button (when supported by element)","type":{"name":"boolean"}},{"name":"badge","description":"Display a (colored) badge on the top-right of the button","tags":{"value":[{"description":"{ text, theme }","title":"value"}],"example":[{"description":"{ text: 5, theme: \"positive\" }","title":"example"}],"since":[{"description":"5.0.0","title":"since"}]},"type":{"name":"object"}},{"name":"click","description":"Pass instead of a link URL to be triggered on clicking the button","type":{"name":"func"},"defaultValue":{"value":"() => {}"}},{"name":"current","description":"Sets the `aria-current` attribute.\nEspecially useful in connection with the `link` attribute.","type":{"name":"string|boolean"}},{"name":"dialog","description":"Name/path of a dialog to open on click","type":{"name":"string"}},{"name":"drawer","description":"Name/path of a drawer to open on click","type":{"name":"string"}},{"name":"dropdown","description":"Whether the button opens a dropdown","type":{"name":"boolean"}},{"name":"element","description":"Force which HTML element to use","type":{"name":"string"}},{"name":"icon","description":"Adds an icon to the button.","type":{"name":"string"}},{"name":"id","description":"A unique id for the HTML element","type":{"name":"string|number"}},{"name":"link","description":"If the link attribute is set, the button will be represented\nas a proper `a` tag with `link`'s value as `href` attribute.","type":{"name":"string"}},{"name":"responsive","description":"A responsive button will hide the button text on smaller screens\nautomatically and only keep the icon. An icon must be set in this case.\nIf set to `text`, the icon will be hidden instead.","type":{"name":"boolean|string"}},{"name":"role","description":"`role` attribute for the button","type":{"name":"string"}},{"name":"selected","description":"Sets the `aria-selected` attribute.","type":{"name":"string|boolean"}},{"name":"size","description":"Specific sizes for button styling","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"xs\"","\"sm\""],"type":{"name":"string"}},{"name":"text","description":"The button text","type":{"name":"string|number"}},{"name":"theme","description":"With the theme you can control the general design of the button.","type":{"name":"string"}},{"name":"type","description":"The type attribute sets the button type like in HTML.","tags":{},"values":["\"button\"","\"submit\"","\"reset\""],"type":{"name":"string"},"defaultValue":{"value":"\"button\""}},{"name":"variant","description":"Styling variants for the button","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"filled\"","\"dimmed\""],"type":{"name":"string"}}],"events":[{"name":"click","type":{"names":["undefined"]},"description":"The button has been clicked","properties":[{"type":{"names":["PointerEvent"]},"name":"event","description":"the native click event"}]}],"methods":[{"name":"focus","description":"Focus the button","tags":{"access":[{"description":"public"}]}}],"slots":[{"name":"default","description":"The Button text. You can also use the `text` prop. Leave empty for icon buttons."}],"component":"k-button","sourceFile":"src/components/Navigation/Button.vue"} \ No newline at end of file diff --git a/panel/dist/ui/ChangesDialog.json b/panel/dist/ui/ChangesDialog.json index 4db8c75f77..c1146b33e5 100644 --- a/panel/dist/ui/ChangesDialog.json +++ b/panel/dist/ui/ChangesDialog.json @@ -1 +1 @@ -{"displayName":"ChangesDialog","description":"","tags":{"since":[{"description":"4.0.0","title":"since"}]},"props":[{"name":"cancelButton","description":"Options for the cancel button","type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"disabled","description":"Whether to disable the submit button","tags":{"deprecated":[{"description":"4.0.0 use the `submit-button` prop instead","title":"deprecated"}]},"type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"icon","description":"The icon type for the submit button","tags":{"deprecated":[{"description":"4.0.0 use the `submit-button` prop instead","title":"deprecated"}]},"type":{"name":"string"},"defaultValue":{"value":"\"check\""}},{"name":"submitButton","description":"Options for the submit button","type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"theme","description":"The theme of the submit button","tags":{"deprecated":[{"description":"4.0.0 use the `submit-button` prop instead","title":"deprecated"}]},"values":["\"positive\"","\"negative\""],"type":{"name":"string"},"defaultValue":{"value":"\"positive\""}},{"name":"size","description":"Width of the dialog","tags":{},"values":["\"small\"","\"default\"","\"medium\"","\"large\"","\"huge\""],"type":{"name":"string"},"defaultValue":{"value":"\"medium\""}},{"name":"visible","type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"changes","type":{"name":"array"}},{"name":"loading","type":{"name":"boolean"}}],"events":[{"name":"cancel"},{"name":"close"},{"name":"input","type":{"names":["undefined"]}},{"name":"submit","type":{"names":["undefined"]},"description":"The submit button is clicked or the form is submitted."},{"name":"success","type":{"names":["undefined"]}}],"methods":[{"name":"cancel","description":"Triggers the `@cancel` event and closes the dialog.","tags":{"access":[{"description":"public"}]}},{"name":"close","description":"Triggers the `@close` event and closes the dialog.","tags":{"access":[{"description":"public"}]}},{"name":"focus","description":"Sets the focus on the first usable input\nor a given input by name","params":[{"name":"input","type":{"name":"String"}}],"tags":{"access":[{"description":"public"}],"params":[{"title":"param","type":{"name":"String"},"name":"input"}]}},{"name":"input","description":"Updates the dialog values","params":[{"name":"value","type":{"name":"Object"},"description":"new values"}],"tags":{"access":[{"description":"public"}],"params":[{"title":"param","type":{"name":"Object"},"name":"value","description":"new values"}]}},{"name":"open","description":"Opens the dialog and triggers the `@open` event.\nUse ready to fire events that should be run as\nsoon as the dialog is open","tags":{"access":[{"description":"public"}]}}],"component":"k-changes-dialog","sourceFile":"src/components/Dialogs/ChangesDialog.vue"} \ No newline at end of file +{"displayName":"ChangesDialog","description":"","tags":{"since":[{"description":"4.0.0","title":"since"}]},"props":[{"name":"cancelButton","description":"Options for the cancel button","type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"disabled","description":"Whether to disable the submit button","tags":{"deprecated":[{"description":"4.0.0 use the `submit-button` prop instead","title":"deprecated"}]},"type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"icon","description":"The icon type for the submit button","tags":{"deprecated":[{"description":"4.0.0 use the `submit-button` prop instead","title":"deprecated"}]},"type":{"name":"string"},"defaultValue":{"value":"\"check\""}},{"name":"submitButton","description":"Options for the submit button","type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"theme","description":"The theme of the submit button","tags":{"deprecated":[{"description":"4.0.0 use the `submit-button` prop instead","title":"deprecated"}]},"values":["\"positive\"","\"negative\""],"type":{"name":"string"},"defaultValue":{"value":"\"positive\""}},{"name":"size","description":"Width of the dialog","tags":{},"values":["\"small\"","\"default\"","\"medium\"","\"large\"","\"huge\""],"type":{"name":"string"},"defaultValue":{"value":"\"medium\""}},{"name":"visible","type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"files","type":{"name":"array"},"defaultValue":{"value":"[]"}},{"name":"pages","type":{"name":"array"},"defaultValue":{"value":"[]"}},{"name":"users","type":{"name":"array"},"defaultValue":{"value":"[]"}}],"events":[{"name":"cancel"},{"name":"close"},{"name":"input","type":{"names":["undefined"]}},{"name":"submit","type":{"names":["undefined"]},"description":"The submit button is clicked or the form is submitted."},{"name":"success","type":{"names":["undefined"]}}],"methods":[{"name":"cancel","description":"Triggers the `@cancel` event and closes the dialog.","tags":{"access":[{"description":"public"}]}},{"name":"close","description":"Triggers the `@close` event and closes the dialog.","tags":{"access":[{"description":"public"}]}},{"name":"focus","description":"Sets the focus on the first usable input\nor a given input by name","params":[{"name":"input","type":{"name":"String"}}],"tags":{"access":[{"description":"public"}],"params":[{"title":"param","type":{"name":"String"},"name":"input"}]}},{"name":"input","description":"Updates the dialog values","params":[{"name":"value","type":{"name":"Object"},"description":"new values"}],"tags":{"access":[{"description":"public"}],"params":[{"title":"param","type":{"name":"Object"},"name":"value","description":"new values"}]}},{"name":"open","description":"Opens the dialog and triggers the `@open` event.\nUse ready to fire events that should be run as\nsoon as the dialog is open","tags":{"access":[{"description":"public"}]}}],"component":"k-changes-dialog","sourceFile":"src/components/Dialogs/ChangesDialog.vue"} \ No newline at end of file diff --git a/panel/dist/ui/DropdownContent.json b/panel/dist/ui/DropdownContent.json index 3d2132df2f..acc36d4425 100644 --- a/panel/dist/ui/DropdownContent.json +++ b/panel/dist/ui/DropdownContent.json @@ -1 +1 @@ -{"description":"Dropdowns are constructed with two elements: `` holds any content shown when opening the dropdown: any number of `` elements or any other HTML; typically a `` then is used to call the `toggle()` method on ``.","tags":{"todo":[{"description":"rename to `k-dropdown` in v6 (with alias to old name)","title":"todo"}]},"displayName":"DropdownContent","props":[{"name":"align","tags":{"deprecated":[{"description":"4.0.0 Use `align-x` instead","title":"deprecated"}],"todo":[{"description":"rename `axis` data to `align` when removed","title":"todo"}]},"type":{"name":"string"}},{"name":"alignX","description":"Default horizontal alignment of the dropdown","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"start\"","\"end\"","\"center\""],"type":{"name":"string"},"defaultValue":{"value":"\"start\""}},{"name":"alignY","description":"Default vertical alignment of the dropdown","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"top\"","\"bottom\""],"type":{"name":"string"},"defaultValue":{"value":"\"bottom\""}},{"name":"disabled","tags":{"since":[{"description":"4.0.0","title":"since"}]},"type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"navigate","tags":{"since":[{"description":"4.0.0","title":"since"}]},"type":{"name":"boolean"},"defaultValue":{"value":"true"}},{"name":"options","type":{"name":"array|func|string"}},{"name":"theme","description":"Visual theme of the dropdown","tags":{},"values":["\"dark\"","\"light\""],"type":{"name":"string"},"defaultValue":{"value":"\"dark\""}}],"events":[{"name":"action","type":{"names":["undefined"]}},{"name":"close","description":"When the dropdown content is closed"},{"name":"open","description":"When the dropdown content is opened"}],"methods":[{"name":"close","description":"Closes the dropdown","tags":{"access":[{"description":"public"}]}},{"name":"open","description":"Opens the dropdown","params":[{"name":"opener"}],"tags":{"access":[{"description":"public"}]}},{"name":"toggle","description":"Toggles the open state of the dropdown","params":[{"name":"opener"}],"tags":{"access":[{"description":"public"}]}}],"slots":[{"name":"default","description":"Content of the dropdown which overrides passed `options` prop"}],"component":"k-dropdown-content","sourceFile":"src/components/Dropdowns/DropdownContent.vue"} \ No newline at end of file +{"description":"Dropdowns are constructed with two elements: `` holds any content shown when opening the dropdown: any number of `` elements or any other HTML; typically a `` then is used to call the `toggle()` method on ``.","tags":{"todo":[{"description":"rename to `k-dropdown` in v6 (with alias to old name)","title":"todo"}]},"displayName":"DropdownContent","props":[{"name":"align","tags":{"deprecated":[{"description":"4.0.0 Use `align-x` instead","title":"deprecated"}],"todo":[{"description":"rename `axis` data to `align` when removed","title":"todo"}]},"type":{"name":"string"}},{"name":"alignX","description":"Default horizontal alignment of the dropdown","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"start\"","\"end\"","\"center\""],"type":{"name":"string"},"defaultValue":{"value":"\"start\""}},{"name":"alignY","description":"Default vertical alignment of the dropdown","tags":{"since":[{"description":"4.0.0","title":"since"}]},"values":["\"top\"","\"bottom\""],"type":{"name":"string"},"defaultValue":{"value":"\"bottom\""}},{"name":"disabled","tags":{"since":[{"description":"4.0.0","title":"since"}]},"type":{"name":"boolean"},"defaultValue":{"value":"false"}},{"name":"navigate","tags":{"since":[{"description":"4.0.0","title":"since"}]},"type":{"name":"boolean"},"defaultValue":{"value":"true"}},{"name":"options","type":{"name":"array|func|string"}},{"name":"theme","description":"Visual theme of the dropdown","tags":{},"values":["\"dark\"","\"light\""],"type":{"name":"string"},"defaultValue":{"value":"\"dark\""}}],"events":[{"name":"action","type":{"names":["undefined"]}},{"name":"close","description":"When the dropdown content is closed"},{"name":"open","description":"When the dropdown content is opened"}],"methods":[{"name":"close","description":"Closes the dropdown","tags":{"access":[{"description":"public"}]}},{"name":"open","description":"Opens the dropdown","params":[{"name":"opener"}],"tags":{"access":[{"description":"public"}]}},{"name":"toggle","description":"Toggles the open state of the dropdown","params":[{"name":"opener"}],"tags":{"access":[{"description":"public"}]}}],"slots":[{"name":"default","scoped":true,"description":"Content of the dropdown which overrides passed `options` prop","bindings":[{"name":"items","title":"binding"}]},{"name":"item","scoped":true,"bindings":[{"name":"item","title":"binding"},{"name":"index","title":"binding"}]}],"component":"k-dropdown-content","sourceFile":"src/components/Dropdowns/DropdownContent.vue"} \ No newline at end of file diff --git a/panel/dist/ui/FilePreview.json b/panel/dist/ui/FilePreview.json index be39e48508..7bc011aa7e 100644 --- a/panel/dist/ui/FilePreview.json +++ b/panel/dist/ui/FilePreview.json @@ -1 +1 @@ -{"description":"Wrapper for file view previews","tags":{"since":[{"description":"5.0.0","title":"since"}]},"displayName":"FilePreview","props":[{"name":"component","type":{"name":"string"}},{"name":"content","type":{"name":"object"}},{"name":"props","type":{"name":"object"}}],"events":[{"name":"input"},{"name":"submit"}],"component":"k-file-preview","sourceFile":"src/components/Views/Files/FilePreview.vue"} \ No newline at end of file +{"description":"Wrapper for file view previews","tags":{"since":[{"description":"5.0.0","title":"since"}]},"displayName":"FilePreview","props":[{"name":"component","type":{"name":"string"}},{"name":"content","type":{"name":"object"}},{"name":"isLocked","type":{"name":"boolean"}},{"name":"props","type":{"name":"object"}}],"events":[{"name":"input"},{"name":"submit"}],"component":"k-file-preview","sourceFile":"src/components/Views/Files/FilePreview.vue"} \ No newline at end of file diff --git a/panel/dist/ui/FormButtons.json b/panel/dist/ui/FormButtons.json deleted file mode 100644 index 20544a3630..0000000000 --- a/panel/dist/ui/FormButtons.json +++ /dev/null @@ -1 +0,0 @@ -{"displayName":"FormButtons","description":"","tags":{},"events":[{"name":"discard"},{"name":"submit"}],"component":"k-form-buttons","sourceFile":"src/components/Forms/FormButtons.vue"} \ No newline at end of file diff --git a/panel/dist/ui/FormControls.json b/panel/dist/ui/FormControls.json index 220374ffb9..a5f5ce381e 100644 --- a/panel/dist/ui/FormControls.json +++ b/panel/dist/ui/FormControls.json @@ -1 +1 @@ -{"description":"","displayName":"FormControls","tags":{"since":[{"description":"5.0.0","title":"since"}]},"props":[{"name":"isDraft","description":"Whether the model is currently a draft","type":{"name":"boolean"}},{"name":"isLocked","description":"Whether the content is locked, and if, by whom","type":{"name":"string|boolean"}},{"name":"isPublished","description":"Whether the content is fully published (no changes)","type":{"name":"boolean"}},{"name":"isSaved","description":"Whether all content are saved","type":{"name":"boolean"}},{"name":"preview","description":"Optional URL for preview dropdown entry","type":{"name":"string"}}],"events":[{"name":"discard"},{"name":"publish"},{"name":"save"}],"component":"k-form-controls","sourceFile":"src/components/Forms/Controls/Controls.vue"} \ No newline at end of file +{"description":"","displayName":"FormControls","tags":{"since":[{"description":"5.0.0","title":"since"}]},"props":[{"name":"editor","type":{"name":"string"}},{"name":"hasChanges","type":{"name":"boolean"}},{"name":"isLocked","type":{"name":"boolean"}},{"name":"modified","type":{"name":"string|date"}},{"name":"preview","description":"Preview URL for changes","type":{"name":"string|boolean"}}],"events":[{"name":"discard"},{"name":"submit"}],"component":"k-form-controls","sourceFile":"src/components/Forms/FormControls.vue"} \ No newline at end of file diff --git a/panel/dist/ui/ImageFilePreview.json b/panel/dist/ui/ImageFilePreview.json index 4abb20c859..5f1f03d97a 100644 --- a/panel/dist/ui/ImageFilePreview.json +++ b/panel/dist/ui/ImageFilePreview.json @@ -1 +1 @@ -{"description":"File view preview for image files","tags":{"since":[{"description":"5.0.0","title":"since"}]},"displayName":"ImageFilePreview","props":[{"name":"content","type":{"name":"object"}},{"name":"details","type":{"name":"array"}},{"name":"focusable","type":{"name":"boolean"}},{"name":"image","type":{"name":"object"},"defaultValue":{"value":"{}"}},{"name":"url","type":{"name":"string"}}],"events":[{"name":"focus"},{"name":"input","type":{"names":["undefined"]}}],"component":"k-image-file-preview","sourceFile":"src/components/Views/Files/ImageFilePreview.vue"} \ No newline at end of file +{"description":"File view preview for image files","tags":{"since":[{"description":"5.0.0","title":"since"}]},"displayName":"ImageFilePreview","props":[{"name":"content","type":{"name":"object"},"defaultValue":{"value":"{}"}},{"name":"details","type":{"name":"array"}},{"name":"focusable","type":{"name":"boolean"}},{"name":"image","type":{"name":"object"},"defaultValue":{"value":"{}"}},{"name":"isLocked","type":{"name":"boolean"}},{"name":"url","type":{"name":"string"}}],"events":[{"name":"focus"},{"name":"input","type":{"names":["undefined"]}}],"component":"k-image-file-preview","sourceFile":"src/components/Views/Files/ImageFilePreview.vue"} \ No newline at end of file diff --git a/panel/dist/ui/ModelTabs.json b/panel/dist/ui/ModelTabs.json index c5623924ca..b3e5cbaa32 100644 --- a/panel/dist/ui/ModelTabs.json +++ b/panel/dist/ui/ModelTabs.json @@ -1 +1 @@ -{"description":"","tags":{"since":[{"description":"4.0.0","title":"since"}]},"displayName":"ModelTabs","props":[{"name":"tab","type":{"name":"string"}},{"name":"tabs","type":{"name":"array"},"defaultValue":{"value":"[]"}}],"component":"k-model-tabs","sourceFile":"src/components/Navigation/ModelTabs.vue"} \ No newline at end of file +{"description":"","tags":{"since":[{"description":"4.0.0","title":"since"}]},"displayName":"ModelTabs","props":[{"name":"changes","type":{"name":"object"}},{"name":"tab","type":{"name":"string"}},{"name":"tabs","type":{"name":"array"},"defaultValue":{"value":"[]"}}],"component":"k-model-tabs","sourceFile":"src/components/Navigation/ModelTabs.vue"} \ No newline at end of file diff --git a/panel/lab/basics/icons/1_iconset/index.vue b/panel/lab/basics/icons/1_iconset/index.vue index 8978558be4..4469d42530 100644 --- a/panel/lab/basics/icons/1_iconset/index.vue +++ b/panel/lab/basics/icons/1_iconset/index.vue @@ -36,6 +36,7 @@ export default { align-items: center; gap: 0.75rem; padding: var(--spacing-2); + color: var(--color-black); background: var(--color-white); border-radius: var(--rounded); box-shadow: var(--shadow); diff --git a/panel/lab/components/browsers/browser/index.vue b/panel/lab/components/browsers/browser/index.vue index 216d7851ec..caa9e9f415 100644 --- a/panel/lab/components/browsers/browser/index.vue +++ b/panel/lab/components/browsers/browser/index.vue @@ -32,10 +32,4 @@ export default { .k-lab-example .k-headline { margin-bottom: 0.5rem; } -.k-lab-example .k-browser { - border: 1px solid var(--color-border); - background: var(--color-white); - border-radius: var(--rounded); - padding: var(--spacing-2); -} diff --git a/panel/lab/components/formcontrols/index.vue b/panel/lab/components/formcontrols/index.vue index db57e3413f..9185c55c8a 100644 --- a/panel/lab/components/formcontrols/index.vue +++ b/panel/lab/components/formcontrols/index.vue @@ -15,10 +15,10 @@ /> - + @@ -59,7 +62,7 @@ .k-writer-input { - background-color: white; + background-color: var(--input-color-back); border-radius: var(--rounded); } diff --git a/panel/package-lock.json b/panel/package-lock.json index 969969dd3b..309230a955 100644 --- a/panel/package-lock.json +++ b/panel/package-lock.json @@ -13,26 +13,27 @@ "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", - "prosemirror-model": "^1.23.0", - "prosemirror-schema-list": "^1.4.1", - "prosemirror-view": "^1.36.0", - "sortablejs": "^1.15.3", + "prosemirror-model": "^1.24.0", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-view": "^1.37.0", + "sortablejs": "^1.15.6", "vuex": "^4.1.0" }, "devDependencies": { + "@csstools/postcss-light-dark-function": "^2.0.7", "@vitejs/plugin-vue": "^5.2.0", "@vue/compiler-sfc": "^3.5.12", - "eslint": "^9.14.0", + "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-vue": "^9.31.0", + "eslint-plugin-vue": "^9.32.0", "glob": "^11.0.0", "jsdom": "^25.0.1", - "prettier": "^3.3.3", - "rollup-plugin-external-globals": "^0.12.0", - "terser": "^5.36.0", - "vite": "^5.4.11", - "vite-plugin-static-copy": "^1.0.6", - "vitest": "^2.1.5", + "prettier": "^3.4.2", + "rollup-plugin-external-globals": "^0.13.0", + "terser": "^5.37.0", + "vite": "^6.0.3", + "vite-plugin-static-copy": "^2.2.0", + "vitest": "^2.1.8", "vue-docgen-api": "^4.79.2", "vue-template-compiler": "^2.7.16" } @@ -84,10 +85,131 @@ "node": ">=6.9.0" } }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", + "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", + "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], @@ -98,7 +220,7 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -141,9 +263,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -156,9 +278,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -166,9 +288,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { @@ -190,9 +312,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", - "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", + "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", "dev": true, "license": "MIT", "engines": { @@ -210,9 +332,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", - "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -466,28 +588,28 @@ "license": "MIT" }, "node_modules/@vitejs/plugin-vue": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.0.tgz", - "integrity": "sha512-7n7KdUEtx/7Yl7I/WVAMZ1bEb0eVvXF3ummWTeLcs/9gvo9pJhuLdouSXGjdZ/MKD1acf1I272+X0RMua4/R3g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", "dev": true, "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "vite": "^5.0.0", + "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "node_modules/@vitest/expect": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", - "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.5", - "@vitest/utils": "2.1.5", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, @@ -495,37 +617,10 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/mocker": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", - "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.1.5", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, "node_modules/@vitest/pretty-format": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", - "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -536,13 +631,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", - "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.5", + "@vitest/utils": "2.1.8", "pathe": "^1.1.2" }, "funding": { @@ -550,13 +645,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", - "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.5", + "@vitest/pretty-format": "2.1.8", "magic-string": "^0.30.12", "pathe": "^1.1.2" }, @@ -565,9 +660,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", - "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", "dev": true, "license": "MIT", "dependencies": { @@ -578,13 +673,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", - "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.5", + "@vitest/pretty-format": "2.1.8", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, @@ -593,13 +688,13 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", - "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.12", + "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" @@ -612,29 +707,29 @@ "license": "MIT" }, "node_modules/@vue/compiler-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", - "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", - "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.12", - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", - "postcss": "^8.4.47", + "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, @@ -645,13 +740,13 @@ "license": "MIT" }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", - "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/devtools-api": { @@ -661,57 +756,57 @@ "license": "MIT" }, "node_modules/@vue/reactivity": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz", - "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", "license": "MIT", "peer": true, "dependencies": { - "@vue/shared": "3.5.12" + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz", - "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", "license": "MIT", "peer": true, "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz", - "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", "license": "MIT", "peer": true, "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/runtime-core": "3.5.12", - "@vue/shared": "3.5.12", + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz", - "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { - "vue": "3.5.12" + "vue": "3.5.13" } }, "node_modules/@vue/shared": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", - "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", "license": "MIT" }, "node_modules/acorn": { @@ -1129,9 +1224,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -1337,9 +1432,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1347,32 +1442,33 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "node_modules/escape-string-regexp": { @@ -1389,27 +1485,27 @@ } }, "node_modules/eslint": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", - "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz", + "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.14.0", - "@eslint/plugin-kit": "^0.2.0", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.16.0", + "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.0", + "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", @@ -1428,8 +1524,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -1463,9 +1558,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.31.0.tgz", - "integrity": "sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz", + "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==", "dev": true, "license": "MIT", "dependencies": { @@ -2483,9 +2578,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -2790,9 +2885,9 @@ } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -2809,9 +2904,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -2829,7 +2924,7 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -2850,6 +2945,13 @@ "node": ">=4" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2861,9 +2963,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "license": "MIT", "bin": { @@ -2930,18 +3032,18 @@ } }, "node_modules/prosemirror-model": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.23.0.tgz", - "integrity": "sha512-Q/fgsgl/dlOAW9ILu4OOhYWQbc7TQd4BwKH/RwmUjyVf8682Be4zj3rOYdLnYEcGzyg8LL9Q5IWYKD8tdToreQ==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.24.0.tgz", + "integrity": "sha512-Ft7epNnycoQSM+2ObF35SBbBX+5WY39v8amVlrtlAcpglhlHs2tCTnWl7RX5tbp/PsMKcRcWV9cXPuoBWq0AIQ==", "license": "MIT", "dependencies": { "orderedmap": "^2.0.0" } }, "node_modules/prosemirror-schema-list": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.4.1.tgz", - "integrity": "sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.0.tgz", + "integrity": "sha512-gg1tAfH1sqpECdhIHOA/aLg2VH3ROKBWQ4m8Qp9mBKrOxQRW61zc+gMCI8nh22gnBzd1t2u1/NPLmO3nAa3ssg==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", @@ -2970,9 +3072,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.36.0.tgz", - "integrity": "sha512-U0GQd5yFvV5qUtT41X1zCQfbw14vkbbKwLlQXhdylEmgpYVHkefXYcC4HHwWOfZa3x6Y8wxDLUBv7dxN5XQ3nA==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.37.0.tgz", + "integrity": "sha512-z2nkKI1sJzyi7T47Ji/ewBPuIma1RNvQCCYVdV+MqWBV7o4Sa1n94UJCJJ1aQRF/xRkFfyqLGlGFWitIcCOtbg==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.20.0", @@ -3253,9 +3355,9 @@ } }, "node_modules/rollup-plugin-external-globals": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-external-globals/-/rollup-plugin-external-globals-0.12.0.tgz", - "integrity": "sha512-65Tqhh/f7hDY0qHmT4lYTVdDkY/BZU5bUQwS+SPvy6seSlACpcFRu2HzOmbLozXJS0/mOjwFyLlzJjlT2MTt8g==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-external-globals/-/rollup-plugin-external-globals-0.13.0.tgz", + "integrity": "sha512-wBS3hmoF0OtEnA0lWsmTC6Nhnkk2zjZbfhaX2gLo8VnfNGFdGhiYKwMpIPQPrYbAw+mAYUYmoHYktAl1eZHgVw==", "dev": true, "license": "MIT", "dependencies": { @@ -3400,9 +3502,9 @@ } }, "node_modules/sortablejs": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz", - "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.6.tgz", + "integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==", "license": "MIT" }, "node_modules/source-map": { @@ -3600,9 +3702,9 @@ "license": "MIT" }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3618,13 +3720,6 @@ "node": ">=10" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -3819,21 +3914,21 @@ "license": "MIT" }, "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", + "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -3842,19 +3937,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -3875,13 +3976,19 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vite-node": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", - "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "dev": true, "license": "MIT", "dependencies": { @@ -3901,10 +4008,126 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/vite-plugin-static-copy": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-1.0.6.tgz", - "integrity": "sha512-3uSvsMwDVFZRitqoWHj0t4137Kz7UynnJeq1EZlRW7e25h2068fyIZX4ORCCOAkfp1FklGxJNVJBkBOD+PZIew==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-2.2.0.tgz", + "integrity": "sha512-ytMrKdR9iWEYHbUxs6x53m+MRl4SJsOSoMu1U1+Pfg0DjPeMlsRVx3RR5jvoonineDquIue83Oq69JvNsFSU5w==", "dev": true, "license": "MIT", "dependencies": { @@ -3917,23 +4140,23 @@ "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "vite": "^5.0.0" + "vite": "^5.0.0 || ^6.0.0" } }, "node_modules/vitest": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", - "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.5", - "@vitest/mocker": "2.1.5", - "@vitest/pretty-format": "^2.1.5", - "@vitest/runner": "2.1.5", - "@vitest/snapshot": "2.1.5", - "@vitest/spy": "2.1.5", - "@vitest/utils": "2.1.5", + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", @@ -3945,7 +4168,7 @@ "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.5", + "vite-node": "2.1.8", "why-is-node-running": "^2.3.0" }, "bin": { @@ -3960,8 +4183,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.5", - "@vitest/ui": "2.1.5", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", "happy-dom": "*", "jsdom": "*" }, @@ -3986,6 +4209,149 @@ } } }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -3997,17 +4363,17 @@ } }, "node_modules/vue": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz", - "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-sfc": "3.5.12", - "@vue/runtime-dom": "3.5.12", - "@vue/server-renderer": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" diff --git a/panel/package.json b/panel/package.json index 43bd987cfe..48a24da8ed 100644 --- a/panel/package.json +++ b/panel/package.json @@ -18,26 +18,27 @@ "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", - "prosemirror-model": "^1.23.0", - "prosemirror-schema-list": "^1.4.1", - "prosemirror-view": "^1.36.0", - "sortablejs": "^1.15.3", + "prosemirror-model": "^1.24.0", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-view": "^1.37.0", + "sortablejs": "^1.15.6", "vuex": "^4.1.0" }, "devDependencies": { + "@csstools/postcss-light-dark-function": "^2.0.7", "@vitejs/plugin-vue": "^5.2.0", "@vue/compiler-sfc": "^3.5.12", - "eslint": "^9.14.0", + "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-vue": "^9.31.0", + "eslint-plugin-vue": "^9.32.0", "glob": "^11.0.0", "jsdom": "^25.0.1", - "prettier": "^3.3.3", - "rollup-plugin-external-globals": "^0.12.0", - "terser": "^5.36.0", - "vite": "^5.4.11", - "vite-plugin-static-copy": "^1.0.6", - "vitest": "^2.1.5", + "prettier": "^3.4.2", + "rollup-plugin-external-globals": "^0.13.0", + "terser": "^5.37.0", + "vite": "^6.0.3", + "vite-plugin-static-copy": "^2.2.0", + "vitest": "^2.1.8", "vue-docgen-api": "^4.79.2", "vue-template-compiler": "^2.7.16" }, diff --git a/panel/public/img/icons.svg b/panel/public/img/icons.svg index 4ac88fe8b5..8ea8e714b4 100644 --- a/panel/public/img/icons.svg +++ b/panel/public/img/icons.svg @@ -36,6 +36,9 @@ + + + @@ -131,6 +134,9 @@ + + + @@ -179,6 +185,9 @@ + + + @@ -359,6 +368,15 @@ + + + + + + + + + @@ -643,6 +661,9 @@ + + + diff --git a/panel/src/api/index.js b/panel/src/api/index.js index af39143a72..7a5422bac2 100644 --- a/panel/src/api/index.js +++ b/panel/src/api/index.js @@ -44,7 +44,7 @@ export default (panel) => { api.requests.push(id); // start the loader if it's not a silent request - if (silent === false) { + if (silent === false && options.silent !== true) { panel.isLoading = true; } diff --git a/panel/src/api/request.js b/panel/src/api/request.js index 04c49d9fc6..500543a292 100644 --- a/panel/src/api/request.js +++ b/panel/src/api/request.js @@ -9,15 +9,18 @@ export default (api) => { cache: "no-store", credentials: "same-origin", mode: "same-origin", - headers: { - "content-type": "application/json", - "x-csrf": api.csrf, - "x-language": api.language, - ...toLowerKeys(options.headers ?? {}) - }, ...options }; + // make sure to keep essential headers + // unless they are explicitely overwritten + options.headers = { + "content-type": "application/json", + "x-csrf": api.csrf, + "x-language": api.language, + ...toLowerKeys(options.headers ?? {}) + }; + // adapt headers for all non-GET and non-POST methods if ( api.methodOverwrite && diff --git a/panel/src/components/Collection/Item.vue b/panel/src/components/Collection/Item.vue index 8de071d27a..66f7adca5a 100644 --- a/panel/src/components/Collection/Item.vue +++ b/panel/src/components/Collection/Item.vue @@ -140,13 +140,14 @@ export default { :root { --item-button-height: var(--height-md); --item-button-width: var(--height-md); + --item-color-back: light-dark(var(--color-white), var(--color-gray-850)); --item-height: auto; --item-height-cardlet: calc(var(--height-md) * 3); } .k-item { position: relative; - background: var(--color-white); + background: var(--item-color-back); box-shadow: var(--shadow); border-radius: var(--rounded); min-height: var(--item-height); @@ -252,6 +253,7 @@ export default { .k-item:is([data-layout="cardlets"], [data-layout="cards"]) .k-sort-button { top: var(--spacing-2); inset-inline-start: var(--spacing-2); + color: var(--color-black); background: hsla(0, 0%, var(--color-l-max), 50%); backdrop-filter: blur(5px); box-shadow: 0 2px 5px hsla(0, 0%, 0%, 20%); diff --git a/panel/src/components/Dialogs/ChangesDialog.vue b/panel/src/components/Dialogs/ChangesDialog.vue index 1ef85b0ebb..9f3bae5adf 100644 --- a/panel/src/components/Dialogs/ChangesDialog.vue +++ b/panel/src/components/Dialogs/ChangesDialog.vue @@ -1,13 +1,24 @@ @@ -24,11 +35,13 @@ export default { cancelButton: { default: false }, - changes: { - type: Array + files: { + type: Array, + default: () => [] }, - loading: { - type: Boolean + pages: { + type: Array, + default: () => [] }, // eslint-disable-next-line vue/require-prop-types size: { @@ -37,35 +50,19 @@ export default { // eslint-disable-next-line vue/require-prop-types submitButton: { default: false - } - }, - computed: { - ids() { - return Object.keys(this.store).filter( - (id) => this.$helper.object.length(this.store[id]?.changes) > 0 - ); }, - store() { - return this.$store.state.content.models; - } - }, - watch: { - ids: { - handler(ids) { - this.$panel.dialog.refresh({ - method: "POST", - body: { - ids: ids - } - }); - }, - immediate: true + users: { + type: Array, + default: () => [] } } }; diff --git a/panel/src/components/Dialogs/Elements/Text.vue b/panel/src/components/Dialogs/Elements/Text.vue index 880110cdf7..9cc7813969 100644 --- a/panel/src/components/Dialogs/Elements/Text.vue +++ b/panel/src/components/Dialogs/Elements/Text.vue @@ -15,7 +15,7 @@ export const props = { */ empty: { type: String, - default: () => window.panel.$t("dialog.text.empty") + default: () => window.panel.t("dialog.text.empty") }, text: { type: String diff --git a/panel/src/components/Dialogs/EmailDialog.vue b/panel/src/components/Dialogs/EmailDialog.vue index 6e01554d33..05f3ef8205 100644 --- a/panel/src/components/Dialogs/EmailDialog.vue +++ b/panel/src/components/Dialogs/EmailDialog.vue @@ -19,12 +19,12 @@ export default { fields: { default: () => ({ href: { - label: window.panel.$t("email"), + label: window.panel.t("email"), type: "email", icon: "email" }, title: { - label: window.panel.$t("title"), + label: window.panel.t("title"), type: "text", icon: "title" } @@ -36,7 +36,7 @@ export default { }, // eslint-disable-next-line vue/require-prop-types submitButton: { - default: () => window.panel.$t("insert") + default: () => window.panel.t("insert") } }, data() { diff --git a/panel/src/components/Dialogs/ErrorDialog.vue b/panel/src/components/Dialogs/ErrorDialog.vue index 70ed767036..6066cef422 100644 --- a/panel/src/components/Dialogs/ErrorDialog.vue +++ b/panel/src/components/Dialogs/ErrorDialog.vue @@ -55,10 +55,11 @@ export default { diff --git a/panel/src/components/Dialogs/PageCreateDialog.vue b/panel/src/components/Dialogs/PageCreateDialog.vue index 040a8ba1fd..84d35ae831 100644 --- a/panel/src/components/Dialogs/PageCreateDialog.vue +++ b/panel/src/components/Dialogs/PageCreateDialog.vue @@ -40,7 +40,7 @@ export default { }, submitButton: { type: [String, Boolean], - default: () => window.panel.$t("save") + default: () => window.panel.t("save") }, template: { type: String diff --git a/panel/src/components/Dialogs/PageMoveDialog.vue b/panel/src/components/Dialogs/PageMoveDialog.vue index 96d15ff7ca..8b4e7cba0e 100644 --- a/panel/src/components/Dialogs/PageMoveDialog.vue +++ b/panel/src/components/Dialogs/PageMoveDialog.vue @@ -53,10 +53,9 @@ export default { margin-bottom: var(--spacing-2); } .k-page-move-parent { - --tree-color-back: var(--color-white); - --tree-color-hover-back: var(--color-light); + --tree-color-back: var(--input-color-back); padding: var(--spacing-3); - background: var(--color-white); + background: var(--tree-color-back); border-radius: var(--rounded); box-shadow: var(--shadow); } diff --git a/panel/src/components/Dialogs/PagesDialog.vue b/panel/src/components/Dialogs/PagesDialog.vue index ce1fa6803d..99d819ec3e 100644 --- a/panel/src/components/Dialogs/PagesDialog.vue +++ b/panel/src/components/Dialogs/PagesDialog.vue @@ -41,7 +41,7 @@ export default { type: Object, default: () => ({ icon: "page", - text: window.panel.$t("dialog.pages.empty") + text: window.panel.t("dialog.pages.empty") }) } }, diff --git a/panel/src/components/Dialogs/RemoveDialog.vue b/panel/src/components/Dialogs/RemoveDialog.vue index 5c59f355da..b5826eb02a 100644 --- a/panel/src/components/Dialogs/RemoveDialog.vue +++ b/panel/src/components/Dialogs/RemoveDialog.vue @@ -21,7 +21,7 @@ export default { }, // eslint-disable-next-line vue/require-prop-types submitButton: { - default: () => window.panel.$t("delete") + default: () => window.panel.t("delete") }, // eslint-disable-next-line vue/require-prop-types theme: { diff --git a/panel/src/components/Dialogs/TotpDialog.vue b/panel/src/components/Dialogs/TotpDialog.vue index 22620b885f..84614dbcad 100644 --- a/panel/src/components/Dialogs/TotpDialog.vue +++ b/panel/src/components/Dialogs/TotpDialog.vue @@ -84,7 +84,7 @@ export default { // eslint-disable-next-line vue/require-prop-types submitButton: { default: () => ({ - text: window.panel.$t("activate"), + text: window.panel.t("activate"), icon: "lock", theme: "notice" }) diff --git a/panel/src/components/Dialogs/UploadDialog.vue b/panel/src/components/Dialogs/UploadDialog.vue index 857e26c135..57f204e125 100644 --- a/panel/src/components/Dialogs/UploadDialog.vue +++ b/panel/src/components/Dialogs/UploadDialog.vue @@ -51,7 +51,7 @@ export default { default: () => { return { icon: "upload", - text: window.panel.$t("upload") + text: window.panel.t("upload") }; } } diff --git a/panel/src/components/Dialogs/UploadReplaceDialog.vue b/panel/src/components/Dialogs/UploadReplaceDialog.vue index 3b261c82c3..ea9557112d 100644 --- a/panel/src/components/Dialogs/UploadReplaceDialog.vue +++ b/panel/src/components/Dialogs/UploadReplaceDialog.vue @@ -45,7 +45,7 @@ export default { default: () => { return { icon: "upload", - text: window.panel.$t("replace") + text: window.panel.t("replace") }; } } diff --git a/panel/src/components/Dialogs/UsersDialog.vue b/panel/src/components/Dialogs/UsersDialog.vue index 20777a27cc..d8afffc7f5 100644 --- a/panel/src/components/Dialogs/UsersDialog.vue +++ b/panel/src/components/Dialogs/UsersDialog.vue @@ -17,7 +17,7 @@ export default { type: Object, default: () => ({ icon: "users", - text: window.panel.$t("dialog.users.empty") + text: window.panel.t("dialog.users.empty") }) }, item: { diff --git a/panel/src/components/Dialogs/index.js b/panel/src/components/Dialogs/index.js index e37b7449c5..2a898a5186 100644 --- a/panel/src/components/Dialogs/index.js +++ b/panel/src/components/Dialogs/index.js @@ -12,6 +12,7 @@ import FilesDialog from "./FilesDialog.vue"; import FormDialog from "./FormDialog.vue"; import LanguageDialog from "./LanguageDialog.vue"; import LicenseDialog from "./LicenseDialog.vue"; +import LockAlertDialog from "./LockAlertDialog.vue"; import LinkDialog from "./LinkDialog.vue"; import ModelsDialog from "./ModelsDialog.vue"; import PageCreateDialog from "./PageCreateDialog.vue"; @@ -38,6 +39,7 @@ export default { app.component("k-form-dialog", FormDialog); app.component("k-license-dialog", LicenseDialog); app.component("k-link-dialog", LinkDialog); + app.component("k-lock-alert-dialog", LockAlertDialog); app.component("k-language-dialog", LanguageDialog); app.component("k-models-dialog", ModelsDialog); app.component("k-page-create-dialog", PageCreateDialog); diff --git a/panel/src/components/Drawers/Drawer.vue b/panel/src/components/Drawers/Drawer.vue index 4007a73a8d..900d1db28f 100644 --- a/panel/src/components/Drawers/Drawer.vue +++ b/panel/src/components/Drawers/Drawer.vue @@ -61,7 +61,7 @@ export default { diff --git a/panel/src/components/Forms/Blocks/Block.vue b/panel/src/components/Forms/Blocks/Block.vue index 44e37044b2..d3e95fd133 100644 --- a/panel/src/components/Forms/Blocks/Block.vue +++ b/panel/src/components/Forms/Blocks/Block.vue @@ -362,11 +362,11 @@ export default { .k-block-container { position: relative; padding: var(--spacing-3); - background: var(--color-white); + background: var(--block-color-back); border-radius: var(--rounded); } .k-block-container:not(:last-of-type) { - border-bottom: 1px dashed var(--color-border-dimmed); + border-bottom: 1px dashed var(--panel-color-back); } .k-block-container:focus { outline: 0; @@ -403,7 +403,7 @@ export default { display: inline-grid; } .k-block-container[data-disabled="true"] { - background: var(--color-light); + background: var(--panel-color-back); } /* Collapse long blocks while dragging */ @@ -418,6 +418,6 @@ export default { content: ""; height: 2rem; width: 100%; - background: linear-gradient(to top, var(--color-white), transparent); + background: linear-gradient(to top, var(--block-color-back), transparent); } diff --git a/panel/src/components/Forms/Blocks/BlockOptions.vue b/panel/src/components/Forms/Blocks/BlockOptions.vue index c5e6c99032..0a6a0a7d3a 100644 --- a/panel/src/components/Forms/Blocks/BlockOptions.vue +++ b/panel/src/components/Forms/Blocks/BlockOptions.vue @@ -199,11 +199,11 @@ export default { diff --git a/panel/src/components/Forms/Blocks/Types/Heading.vue b/panel/src/components/Forms/Blocks/Types/Heading.vue index 3f4a2b8932..fee29597ae 100644 --- a/panel/src/components/Forms/Blocks/Types/Heading.vue +++ b/panel/src/components/Forms/Blocks/Types/Heading.vue @@ -128,7 +128,7 @@ export default { .k-block-type-heading-level { --input-color-back: transparent; --input-color-border: none; - --input-color-text: var(--color-gray-600); + --input-color-text: light-dark(var(--color-gray-600), var(--color-gray-500)); font-weight: var(--font-bold); text-transform: uppercase; } diff --git a/panel/src/components/Forms/Blocks/Types/Image.vue b/panel/src/components/Forms/Blocks/Types/Image.vue index a5f419bf85..e152d09443 100644 --- a/panel/src/components/Forms/Blocks/Types/Image.vue +++ b/panel/src/components/Forms/Blocks/Types/Image.vue @@ -40,7 +40,7 @@ export default { extends: Block, data() { return { - back: this.onBack() ?? "var(--color-white)" + back: this.onBack() ?? "transparent" }; }, computed: { diff --git a/panel/src/components/Forms/Blocks/Types/Markdown.vue b/panel/src/components/Forms/Blocks/Types/Markdown.vue index aea08fae58..248e322eec 100644 --- a/panel/src/components/Forms/Blocks/Types/Markdown.vue +++ b/panel/src/components/Forms/Blocks/Types/Markdown.vue @@ -36,7 +36,7 @@ export default { diff --git a/panel/src/components/Forms/Field/FilesField.vue b/panel/src/components/Forms/Field/FilesField.vue index b62580df10..9746b8f36e 100644 --- a/panel/src/components/Forms/Field/FilesField.vue +++ b/panel/src/components/Forms/Field/FilesField.vue @@ -44,7 +44,7 @@ export default { preview: this.uploads.preview, url: this.$panel.urls.api + "/" + this.endpoints.field + "/upload", on: { - done: (files) => { + done: async (files) => { if (this.multiple === false) { this.selected = []; } @@ -55,7 +55,10 @@ export default { } } - this.onInput(); + await this.$panel.content.update({ + [this.name]: this.selected + }); + this.$events.emit("file.upload"); this.$events.emit("model.update"); } diff --git a/panel/src/components/Forms/Field/LinkField.vue b/panel/src/components/Forms/Field/LinkField.vue index 2e0d747131..2a6e196601 100644 --- a/panel/src/components/Forms/Field/LinkField.vue +++ b/panel/src/components/Forms/Field/LinkField.vue @@ -275,7 +275,7 @@ export default { .k-link-input-toggle.k-button { --button-height: var(--height-sm); --button-rounded: var(--rounded-sm); - --button-color-back: var(--color-gray-200); + --button-color-back: var(--panel-color-back); margin-inline-start: 0.25rem; } @@ -320,10 +320,11 @@ export default { .k-link-input-body { display: grid; overflow: hidden; - border-top: 1px solid var(--color-gray-300); - background: var(--color-gray-100); - --tree-color-back: var(--color-gray-100); - --tree-color-hover-back: var(--color-gray-200); + border-top: 1px solid var(--color-border); + background: var(--input-color-back); + --tree-color-back: var(--input-color-back); + --tree-branch-color-back: var(--input-color-back); + --tree-branch-hover-color-back: var(--panel-color-back); } .k-link-input-body[data-type="page"] .k-page-browser { diff --git a/panel/src/components/Forms/FormButtons.vue b/panel/src/components/Forms/FormButtons.vue deleted file mode 100644 index 4faa0d4f43..0000000000 --- a/panel/src/components/Forms/FormButtons.vue +++ /dev/null @@ -1,299 +0,0 @@ - - - diff --git a/panel/src/components/Forms/FormControls.vue b/panel/src/components/Forms/FormControls.vue index b45719ad73..d63d104f08 100644 --- a/panel/src/components/Forms/FormControls.vue +++ b/panel/src/components/Forms/FormControls.vue @@ -1,42 +1,53 @@ diff --git a/panel/src/components/Navigation/Button.vue b/panel/src/components/Navigation/Button.vue index 9d59cc4770..92a1eeca51 100644 --- a/panel/src/components/Navigation/Button.vue +++ b/panel/src/components/Navigation/Button.vue @@ -240,6 +240,7 @@ export default { --button-rounded: var(--spacing-1); --button-text-display: block; --button-icon-display: block; + --button-filled-color-back: light-dark(var(--color-gray-300), var(--color-gray-950)); } .k-button { @@ -305,26 +306,21 @@ export default { /** Filled Buttons **/ .k-button:where([data-variant="filled"]) { - --button-color-back: var(--color-gray-300); + --button-color-back: var(--button-filled-color-back); } .k-button:where([data-variant="filled"]):not([aria-disabled="true"]):hover { filter: brightness(97%); } -.k-panel[data-theme="dark"] - .k-button:where([data-variant="filled"]):not([aria-disabled="true"]):hover { - filter: brightness(87%); -} .k-button:where([data-variant="filled"][data-theme]) { - --button-color-icon: var(--theme-color-700); + --button-color-icon: var(--theme-color-icon-highlight); --button-color-back: var(--theme-color-back); + --button-color-text: var(--theme-color-text-highlight); } .k-button:where([data-theme$="-icon"][data-variant="filled"]) { - --button-color-icon: hsl( - var(--theme-color-hs), - 57% - ); /* slightly improve the contrast */ - --button-color-back: var(--color-gray-300); + --button-color-icon: var(--theme-color-icon); + --button-color-back: var(--button-filled-color-back); + --button-color-text: currentColor; } /** Icon Buttons **/ @@ -381,17 +377,19 @@ export default { position: absolute; top: 0; inset-inline-end: 0; - transform: translate(50%, -20%); + transform: translate(40%, -20%); + min-width: 1em; + min-height: 1em; font-variant-numeric: tabular-nums; line-height: 1.5; padding: 0 var(--spacing-1); - border-radius: 1rem; + border-radius: 1em; text-align: center; font-size: 0.6rem; box-shadow: var(--shadow-md); background: var(--theme-color-back); - border: 1px solid var(--theme-color-500); - color: var(--theme-color-text); + border: 1px solid light-dark(var(--theme-color-500), var(--color-black)); + color: var(--theme-color-text-highlight); z-index: 1; } diff --git a/panel/src/components/Navigation/ButtonGroup.vue b/panel/src/components/Navigation/ButtonGroup.vue index d8a47ec7d6..82a9fc7e2c 100644 --- a/panel/src/components/Navigation/ButtonGroup.vue +++ b/panel/src/components/Navigation/ButtonGroup.vue @@ -84,11 +84,14 @@ export default { border-end-end-radius: 0; } +.k-button-group[data-layout="collapsed"] > .k-button:not([data-theme]) { + --theme-color-border: var(--panel-color-back); +} .k-button-group[data-layout="collapsed"] > .k-button[data-variant="filled"]:not(:first-child) { border-start-start-radius: 0; border-end-start-radius: 0; - border-left: 1px solid var(--theme-color-500, var(--color-gray-400)); + border-left: 1px solid var(--theme-color-border); } .k-button-group[data-layout="collapsed"] diff --git a/panel/src/components/Navigation/FileBrowser.vue b/panel/src/components/Navigation/FileBrowser.vue index 2d23c3fdee..f3bf9ebbe7 100644 --- a/panel/src/components/Navigation/FileBrowser.vue +++ b/panel/src/components/Navigation/FileBrowser.vue @@ -112,6 +112,10 @@ export default { diff --git a/panel/src/components/View/Activation.vue b/panel/src/components/View/Activation.vue index b5b001d3f0..bdb49f06b5 100644 --- a/panel/src/components/View/Activation.vue +++ b/panel/src/components/View/Activation.vue @@ -58,9 +58,6 @@ export default { text-underline-offset: 2px; border-radius: var(--rounded-sm); } -.k-panel[data-theme="dark"] .k-activation p :where(button, a) { - color: var(--color-pink-600); -} /* Hide Button */ .k-activation-toggle { diff --git a/panel/src/components/View/Buttons/LanguagesDropdown.vue b/panel/src/components/View/Buttons/LanguagesDropdown.vue index a37e7944ad..0db8caa38e 100644 --- a/panel/src/components/View/Buttons/LanguagesDropdown.vue +++ b/panel/src/components/View/Buttons/LanguagesDropdown.vue @@ -1,5 +1,43 @@ + + diff --git a/panel/src/components/View/Buttons/SettingsButton.vue b/panel/src/components/View/Buttons/SettingsButton.vue index 5aa3d31d28..ac0d18388c 100644 --- a/panel/src/components/View/Buttons/SettingsButton.vue +++ b/panel/src/components/View/Buttons/SettingsButton.vue @@ -1,7 +1,7 @@ diff --git a/panel/src/components/View/Buttons/StatusButton.vue b/panel/src/components/View/Buttons/StatusButton.vue index 64a2608e18..bf85503686 100644 --- a/panel/src/components/View/Buttons/StatusButton.vue +++ b/panel/src/components/View/Buttons/StatusButton.vue @@ -1,7 +1,7 @@ diff --git a/panel/src/components/View/Menu.vue b/panel/src/components/View/Menu.vue index 6bb958af9c..021235a33a 100644 --- a/panel/src/components/View/Menu.vue +++ b/panel/src/components/View/Menu.vue @@ -98,8 +98,8 @@ export default { :root { --menu-button-height: var(--height); --menu-button-width: 100%; - --menu-color-back: var(--color-gray-250); - --menu-color-border: var(--color-gray-300); + --menu-color-back: light-dark(var(--color-gray-250), var(--color-gray-950)); + --menu-color-border: light-dark(var(--color-gray-300), var(--color-gray-850)); --menu-display: none; --menu-display-backdrop: block; --menu-padding: var(--spacing-3); @@ -171,12 +171,9 @@ export default { flex-shrink: 0; } .k-panel-menu-button[aria-current="true"] { - --button-color-back: var(--color-white); + --button-color-back: light-dark(var(--color-white), var(--color-gray-850)); box-shadow: var(--shadow); } -.k-panel[data-theme="dark"] .k-panel-menu-button[aria-current="true"] { - --button-color-back: var(--color-gray-400); -} /* Outline should not vanish behind other buttons */ .k-panel-menu-button:focus { diff --git a/panel/src/components/View/Panel.vue b/panel/src/components/View/Panel.vue index f0746a27a7..36f24cf84a 100644 --- a/panel/src/components/View/Panel.vue +++ b/panel/src/components/View/Panel.vue @@ -60,13 +60,14 @@ export default {}; diff --git a/panel/src/components/Views/Files/FilePreviewFrame.vue b/panel/src/components/Views/Files/FilePreviewFrame.vue index e081439c98..cf3994f85b 100644 --- a/panel/src/components/Views/Files/FilePreviewFrame.vue +++ b/panel/src/components/Views/Files/FilePreviewFrame.vue @@ -41,6 +41,7 @@ export default { background: var(--pattern); } .k-file-preview-frame { + position: relative; display: flex; align-items: center; justify-content: center; @@ -62,7 +63,4 @@ export default { .k-button.k-file-preview-frame-dropdown-toggle { --button-color-icon: var(--color-gray-500); } -.k-panel[data-theme="dark"] .k-button.k-file-preview-frame-dropdown-toggle { - --button-color-icon: var(--color-gray-700); -} diff --git a/panel/src/components/Views/Files/FileView.vue b/panel/src/components/Views/Files/FileView.vue index daff32b066..6aea0e57d3 100644 --- a/panel/src/components/Views/Files/FileView.vue +++ b/panel/src/components/Views/Files/FileView.vue @@ -1,7 +1,7 @@