From 97e572728f9fe7c24b841194d3151305f4823985 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 10:49:31 +0100 Subject: [PATCH] [upd] web-client (simple): Bump vite in /client/simple (#5738) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.0-beta.13 to 8.0.0-beta.14. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.0.0-beta.14/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.0.0-beta.14 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- client/simple/package-lock.json | 158 ++++++++---------- client/simple/package.json | 2 +- client/simple/vite.config.ts | 3 + .../themes/simple/chunk/DWuhDe2f.min.js | 11 ++ ...zkb_VTO.min.js.map => DWuhDe2f.min.js.map} | 2 +- .../themes/simple/chunk/Dzkb_VTO.min.js | 2 - searx/static/themes/simple/manifest.json | 2 +- searx/static/themes/simple/sxng-core.min.js | 4 +- 8 files changed, 92 insertions(+), 92 deletions(-) create mode 100644 searx/static/themes/simple/chunk/DWuhDe2f.min.js rename searx/static/themes/simple/chunk/{Dzkb_VTO.min.js.map => DWuhDe2f.min.js.map} (73%) delete mode 100644 searx/static/themes/simple/chunk/Dzkb_VTO.min.js diff --git a/client/simple/package-lock.json b/client/simple/package-lock.json index 5de283dfa..afa17d7c5 100644 --- a/client/simple/package-lock.json +++ b/client/simple/package-lock.json @@ -29,7 +29,7 @@ "stylelint-prettier": "^5.0.3", "svgo": "^4.0.0", "typescript": "~5.9.3", - "vite": "8.0.0-beta.13", + "vite": "8.0.0-beta.14", "vite-bundle-analyzer": "^1.3.6" } }, @@ -271,7 +271,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -312,7 +311,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -979,9 +977,9 @@ } }, "node_modules/@oxc-project/runtime": { - "version": "0.112.0", - "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.112.0.tgz", - "integrity": "sha512-4vYtWXMnXM6EaweCxbJ6bISAhkNHeN33SihvuX3wrpqaSJA4ZEoW35i9mSvE74+GDf1yTeVE+aEHA+WBpjDk/g==", + "version": "0.113.0", + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.113.0.tgz", + "integrity": "sha512-apRWH/gXeAsl/sQiblIZnLu7f8P/C9S2fJIicuHV9KOK9J7Hv1JPyTwB8WAcOrDBfjs+cbzjMOGe9UR2ue4ZQg==", "dev": true, "license": "MIT", "engines": { @@ -989,9 +987,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.112.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.112.0.tgz", - "integrity": "sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==", + "version": "0.113.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.113.0.tgz", + "integrity": "sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==", "dev": true, "license": "MIT", "funding": { @@ -1073,9 +1071,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.3.tgz", - "integrity": "sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==", "cpu": [ "arm64" ], @@ -1090,9 +1088,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.3.tgz", - "integrity": "sha512-JWWLzvcmc/3pe7qdJqPpuPk91SoE/N+f3PcWx/6ZwuyDVyungAEJPvKm/eEldiDdwTmaEzWfIR+HORxYWrCi1A==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==", "cpu": [ "arm64" ], @@ -1107,9 +1105,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.3.tgz", - "integrity": "sha512-MTakBxfx3tde5WSmbHxuqlDsIW0EzQym+PJYGF4P6lG2NmKzi128OGynoFUqoD5ryCySEY85dug4v+LWGBElIw==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==", "cpu": [ "x64" ], @@ -1124,9 +1122,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.3.tgz", - "integrity": "sha512-jje3oopyOLs7IwfvXoS6Lxnmie5JJO7vW29fdGFu5YGY1EDbVDhD+P9vDihqS5X6fFiqL3ZQZCMBg6jyHkSVww==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==", "cpu": [ "x64" ], @@ -1141,9 +1139,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.3.tgz", - "integrity": "sha512-A0n8P3hdLAaqzSFrQoA42p23ZKBYQOw+8EH5r15Sa9X1kD9/JXe0YT2gph2QTWvdr0CVK2BOXiK6ENfy6DXOag==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.4.tgz", + "integrity": "sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==", "cpu": [ "arm" ], @@ -1158,9 +1156,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.3.tgz", - "integrity": "sha512-kWXkoxxarYISBJ4bLNf5vFkEbb4JvccOwxWDxuK9yee8lg5XA7OpvlTptfRuwEvYcOZf+7VS69Uenpmpyo5Bjw==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==", "cpu": [ "arm64" ], @@ -1175,9 +1173,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.3.tgz", - "integrity": "sha512-Z03/wrqau9Bicfgb3Dbs6SYTHliELk2PM2LpG2nFd+cGupTMF5kanLEcj2vuuJLLhptNyS61rtk7SOZ+lPsTUA==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==", "cpu": [ "arm64" ], @@ -1192,9 +1190,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.3.tgz", - "integrity": "sha512-iSXXZsQp08CSilff/DCTFZHSVEpEwdicV3W8idHyrByrcsRDVh9sGC3sev6d8BygSGj3vt8GvUKBPCoyMA4tgQ==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==", "cpu": [ "x64" ], @@ -1209,9 +1207,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.3.tgz", - "integrity": "sha512-qaj+MFudtdCv9xZo9znFvkgoajLdc+vwf0Kz5N44g+LU5XMe+IsACgn3UG7uTRlCCvhMAGXm1XlpEA5bZBrOcw==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==", "cpu": [ "x64" ], @@ -1226,9 +1224,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.3.tgz", - "integrity": "sha512-U662UnMETyjT65gFmG9ma+XziENrs7BBnENi/27swZPYagubfHRirXHG2oMl+pEax2WvO7Kb9gHZmMakpYqBHQ==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==", "cpu": [ "arm64" ], @@ -1243,9 +1241,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.3.tgz", - "integrity": "sha512-gekrQ3Q2HiC1T5njGyuUJoGpK/l6B/TNXKed3fZXNf9YRTJn3L5MOZsFBn4bN2+UX+8+7hgdlTcEsexX988G4g==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.4.tgz", + "integrity": "sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==", "cpu": [ "wasm32" ], @@ -1260,9 +1258,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.3.tgz", - "integrity": "sha512-85y5JifyMgs8m5K2XzR/VDsapKbiFiohl7s5lEj7nmNGO0pkTXE7q6TQScei96BNAsoK7JC3pA7ukA8WRHVJpg==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==", "cpu": [ "arm64" ], @@ -1277,9 +1275,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.3.tgz", - "integrity": "sha512-a4VUQZH7LxGbUJ3qJ/TzQG8HxdHvf+jOnqf7B7oFx1TEBm+j2KNL2zr5SQ7wHkNAcaPevF6gf9tQnVBnC4mD+A==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==", "cpu": [ "x64" ], @@ -1294,9 +1292,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", - "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz", + "integrity": "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==", "dev": true, "license": "MIT" }, @@ -1444,7 +1442,6 @@ "integrity": "sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1612,7 +1609,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2739,7 +2735,6 @@ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@keyv/serialize": "^1.1.1" } @@ -2774,7 +2769,6 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -3413,7 +3407,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -3476,7 +3469,6 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3649,14 +3641,14 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.3.tgz", - "integrity": "sha512-Po/YZECDOqVXjIXrtC5h++a5NLvKAQNrd9ggrIG3sbDfGO5BqTUsrI6l8zdniKRp3r5Tp/2JTrXqx4GIguFCMw==", + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.4.tgz", + "integrity": "sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.112.0", - "@rolldown/pluginutils": "1.0.0-rc.3" + "@oxc-project/types": "=0.113.0", + "@rolldown/pluginutils": "1.0.0-rc.4" }, "bin": { "rolldown": "bin/cli.mjs" @@ -3665,19 +3657,19 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.3", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.3", - "@rolldown/binding-darwin-x64": "1.0.0-rc.3", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.3", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.3", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.3", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.3", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.3", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.3", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.3", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.3", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.3", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.3" + "@rolldown/binding-android-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-x64": "1.0.0-rc.4", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.4", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.4", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.4", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.4", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.4", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.4" } }, "node_modules/run-parallel": { @@ -3972,7 +3964,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-syntax-patches-for-csstree": "^1.0.19", @@ -4276,7 +4267,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -4320,7 +4310,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4375,18 +4364,18 @@ "license": "MIT" }, "node_modules/vite": { - "version": "8.0.0-beta.13", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.0-beta.13.tgz", - "integrity": "sha512-7s/rfpYOAo7WUHh9irzaGjhhKb12hGv0BpDegAMV5A391wdyvM45WtX6VMV7hvEtZF2j/QtpDpR6ldXI3GgARQ==", + "version": "8.0.0-beta.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.0-beta.14.tgz", + "integrity": "sha512-oLW66oi8tZcoxu6+1HFXb+5hLHco3OnEVu2Awmj5NqEo7vxaqybjBM0BXHcq+jAFhzkMGXJl8xcO5qDBczgKLg==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/runtime": "0.112.0", + "@oxc-project/runtime": "0.113.0", "fdir": "^6.5.0", "lightningcss": "^1.31.1", "picomatch": "^4.0.3", "postcss": "^8.5.6", - "rolldown": "1.0.0-rc.3", + "rolldown": "1.0.0-rc.4", "tinyglobby": "^0.2.15" }, "bin": { @@ -4403,7 +4392,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.0.0-alpha.24", + "@vitejs/devtools": "^0.0.0-alpha.31", "esbuild": "^0.27.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -4488,7 +4477,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, diff --git a/client/simple/package.json b/client/simple/package.json index ed2ec6f53..c0c089fe5 100644 --- a/client/simple/package.json +++ b/client/simple/package.json @@ -43,7 +43,7 @@ "stylelint-prettier": "^5.0.3", "svgo": "^4.0.0", "typescript": "~5.9.3", - "vite": "8.0.0-beta.13", + "vite": "8.0.0-beta.14", "vite-bundle-analyzer": "^1.3.6" } } diff --git a/client/simple/vite.config.ts b/client/simple/vite.config.ts index 92148bb34..34cb6cdfd 100644 --- a/client/simple/vite.config.ts +++ b/client/simple/vite.config.ts @@ -74,6 +74,9 @@ export default { .normalize("NFD") .replace(/[^a-zA-Z0-9.-]/g, "_") .toLowerCase(); + }, + comments: { + legal: true } } } diff --git a/searx/static/themes/simple/chunk/DWuhDe2f.min.js b/searx/static/themes/simple/chunk/DWuhDe2f.min.js new file mode 100644 index 000000000..51175ad7e --- /dev/null +++ b/searx/static/themes/simple/chunk/DWuhDe2f.min.js @@ -0,0 +1,11 @@ +import{i as e,n as t,r as n}from"../sxng-core.min.js";import{t as r}from"./13gvpunf.min.js"; +/*! +* swiped-events.js - v@version@ +* Pure JavaScript swipe events +* https://github.com/john-doherty/swiped-events +* @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element +* @author John Doherty +* @license MIT +*/ +(function(e,t){typeof e.CustomEvent!=`function`&&(e.CustomEvent=function(e,n){n||={bubbles:!1,cancelable:!1,detail:void 0};var r=t.createEvent(`CustomEvent`);return r.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),r},e.CustomEvent.prototype=e.Event.prototype),t.addEventListener(`touchstart`,u,!1),t.addEventListener(`touchmove`,d,!1),t.addEventListener(`touchend`,l,!1);var n=null,r=null,i=null,a=null,o=null,s=null,c=0;function l(e){if(s===e.target){var l=parseInt(f(s,`data-swipe-threshold`,`20`),10),u=f(s,`data-swipe-unit`,`px`),d=parseInt(f(s,`data-swipe-timeout`,`500`),10),p=Date.now()-o,m=``,h=e.changedTouches||e.touches||[];if(u===`vh`&&(l=Math.round(l/100*t.documentElement.clientHeight)),u===`vw`&&(l=Math.round(l/100*t.documentElement.clientWidth)),Math.abs(i)>Math.abs(a)?Math.abs(i)>l&&p0?`swiped-left`:`swiped-right`):Math.abs(a)>l&&p0?`swiped-up`:`swiped-down`),m!==``){var g={dir:m.replace(/swiped-/,``),touchType:(h[0]||{}).touchType||`direct`,fingers:c,xStart:parseInt(n,10),xEnd:parseInt((h[0]||{}).clientX||-1,10),yStart:parseInt(r,10),yEnd:parseInt((h[0]||{}).clientY||-1,10)};s.dispatchEvent(new CustomEvent(`swiped`,{bubbles:!0,cancelable:!0,detail:g})),s.dispatchEvent(new CustomEvent(m,{bubbles:!0,cancelable:!0,detail:g}))}n=null,r=null,o=null}}function u(e){e.target.getAttribute(`data-swipe-ignore`)!==`true`&&(s=e.target,o=Date.now(),n=e.touches[0].clientX,r=e.touches[0].clientY,i=0,a=0,c=e.touches.length)}function d(e){if(!(!n||!r)){var t=e.touches[0].clientX,o=e.touches[0].clientY;i=n-t,a=r-o}}function f(e,n,r){for(;e&&e!==t.documentElement;){var i=e.getAttribute(n);if(i)return i;e=e.parentNode}return r}})(window,document);var i,a=t=>{i&&clearTimeout(i);let n=t.querySelector(`.result-images-source img`);if(!n)return;let r=t.querySelector(`.image_thumbnail`);if(r){if(r.src===`${e.theme_static_path}/img/img_load_error.svg`)return;n.onerror=()=>{n.src=r.src},n.src=r.src}let a=n.getAttribute(`data-src`);a&&(i=setTimeout(()=>{n.src=a,n.removeAttribute(`data-src`)},1e3))},o=document.querySelectorAll(`#urls img.image_thumbnail`);for(let t of o)t.complete&&t.naturalWidth===0&&(t.src=`${e.theme_static_path}/img/img_load_error.svg`),t.onerror=()=>{t.src=`${e.theme_static_path}/img/img_load_error.svg`};document.querySelector(`#search_url button#copy_url`)?.style.setProperty(`display`,`block`),n.selectImage=e=>{document.getElementById(`results`)?.classList.add(`image-detail-open`),window.location.hash=`#image-viewer`,n.scrollPageToSelected?.(),e&&a(e)},n.closeDetail=()=>{document.getElementById(`results`)?.classList.remove(`image-detail-open`),window.location.hash===`#image-viewer`&&window.history.back(),n.scrollPageToSelected?.()},t(`click`,`.btn-collapse`,function(){let e=this.getAttribute(`data-btn-text-collapsed`),t=this.getAttribute(`data-btn-text-not-collapsed`),n=this.getAttribute(`data-target`);if(!(n&&e&&t))return;let i=document.querySelector(n);r(i);let a=this.classList.contains(`collapsed`),o=a?t:e,s=a?e:t;this.innerHTML=this.innerHTML.replace(s,o),this.classList.toggle(`collapsed`),i.classList.toggle(`invisible`)}),t(`click`,`.media-loader`,function(){let e=this.getAttribute(`data-target`);if(!e)return;let t=document.querySelector(`${e} > iframe`);if(r(t),!t.getAttribute(`src`)){let e=t.getAttribute(`data-src`);e&&t.setAttribute(`src`,e)}}),t(`click`,`#copy_url`,async function(){let e=this.parentElement?.querySelector(`pre`);if(r(e),window.isSecureContext)await navigator.clipboard.writeText(e.innerText);else{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n),document.execCommand(`copy`)}}this.dataset.copiedText&&(this.innerText=this.dataset.copiedText)}),t(`click`,`.result-detail-close`,e=>{e.preventDefault(),n.closeDetail?.()}),t(`click`,`.result-detail-previous`,e=>{e.preventDefault(),n.selectPrevious?.(!1)}),t(`click`,`.result-detail-next`,e=>{e.preventDefault(),n.selectNext?.(!1)}),window.addEventListener(`hashchange`,()=>{window.location.hash!==`#image-viewer`&&n.closeDetail?.()});var s=document.querySelectorAll(`.swipe-horizontal`);for(let e of s)t(`swiped-left`,e,()=>{n.selectNext?.(!1)}),t(`swiped-right`,e,()=>{n.selectPrevious?.(!1)});window.addEventListener(`scroll`,()=>{let e=document.getElementById(`backToTop`),t=document.getElementById(`results`);if(e&&t){let e=(document.documentElement.scrollTop||document.body.scrollTop)>=100;t.classList.toggle(`scrolling`,e)}},!0); +//# sourceMappingURL=DWuhDe2f.min.js.map \ No newline at end of file diff --git a/searx/static/themes/simple/chunk/Dzkb_VTO.min.js.map b/searx/static/themes/simple/chunk/DWuhDe2f.min.js.map similarity index 73% rename from searx/static/themes/simple/chunk/Dzkb_VTO.min.js.map rename to searx/static/themes/simple/chunk/DWuhDe2f.min.js.map index 751392cb6..3d3ee18c2 100644 --- a/searx/static/themes/simple/chunk/Dzkb_VTO.min.js.map +++ b/searx/static/themes/simple/chunk/DWuhDe2f.min.js.map @@ -1 +1 @@ -{"version":3,"file":"Dzkb_VTO.min.js","names":[],"sources":["../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.ts"],"sourcesContent":["/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\nimport { listen, mutable, settings } from \"../toolkit.ts\";\nimport { assertElement } from \"../util/assertElement.ts\";\n\nlet imgTimeoutID: number;\n\nconst imageLoader = (resultElement: HTMLElement): void => {\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n const imgElement = resultElement.querySelector(\".result-images-source img\");\n if (!imgElement) return;\n\n // use thumbnail until full image loads\n const thumbnail = resultElement.querySelector(\".image_thumbnail\");\n if (thumbnail) {\n if (thumbnail.src === `${settings.theme_static_path}/img/img_load_error.svg`) return;\n\n imgElement.onerror = (): void => {\n imgElement.src = thumbnail.src;\n };\n\n imgElement.src = thumbnail.src;\n }\n\n const imgSource = imgElement.getAttribute(\"data-src\");\n if (!imgSource) return;\n\n // unsafe nodejs specific, cast to https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#return_value\n // https://github.com/searxng/searxng/pull/5073#discussion_r2265767231\n imgTimeoutID = setTimeout(() => {\n imgElement.src = imgSource;\n imgElement.removeAttribute(\"data-src\");\n }, 1000) as unknown as number;\n};\n\nconst imageThumbnails: NodeListOf =\n document.querySelectorAll(\"#urls img.image_thumbnail\");\nfor (const thumbnail of imageThumbnails) {\n if (thumbnail.complete && thumbnail.naturalWidth === 0) {\n thumbnail.src = `${settings.theme_static_path}/img/img_load_error.svg`;\n }\n\n thumbnail.onerror = (): void => {\n thumbnail.src = `${settings.theme_static_path}/img/img_load_error.svg`;\n };\n}\n\nconst copyUrlButton: HTMLButtonElement | null =\n document.querySelector(\"#search_url button#copy_url\");\ncopyUrlButton?.style.setProperty(\"display\", \"block\");\n\nmutable.selectImage = (resultElement: HTMLElement): void => {\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n const resultsElement = document.getElementById(\"results\");\n resultsElement?.classList.add(\"image-detail-open\");\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = \"#image-viewer\";\n\n mutable.scrollPageToSelected?.();\n\n // if there is no element given by the caller, stop here\n if (!resultElement) return;\n\n imageLoader(resultElement);\n};\n\nmutable.closeDetail = (): void => {\n const resultsElement = document.getElementById(\"results\");\n resultsElement?.classList.remove(\"image-detail-open\");\n\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash === \"#image-viewer\") {\n window.history.back();\n }\n\n mutable.scrollPageToSelected?.();\n};\n\nlisten(\"click\", \".btn-collapse\", function (this: HTMLElement) {\n const btnLabelCollapsed = this.getAttribute(\"data-btn-text-collapsed\");\n const btnLabelNotCollapsed = this.getAttribute(\"data-btn-text-not-collapsed\");\n const target = this.getAttribute(\"data-target\");\n\n if (!(target && btnLabelCollapsed && btnLabelNotCollapsed)) return;\n\n const targetElement = document.querySelector(target);\n assertElement(targetElement);\n\n const isCollapsed = this.classList.contains(\"collapsed\");\n const newLabel = isCollapsed ? btnLabelNotCollapsed : btnLabelCollapsed;\n const oldLabel = isCollapsed ? btnLabelCollapsed : btnLabelNotCollapsed;\n\n this.innerHTML = this.innerHTML.replace(oldLabel, newLabel);\n this.classList.toggle(\"collapsed\");\n\n targetElement.classList.toggle(\"invisible\");\n});\n\nlisten(\"click\", \".media-loader\", function (this: HTMLElement) {\n const target = this.getAttribute(\"data-target\");\n if (!target) return;\n\n const iframeLoad = document.querySelector(`${target} > iframe`);\n assertElement(iframeLoad);\n\n const srctest = iframeLoad.getAttribute(\"src\");\n if (!srctest) {\n const dataSrc = iframeLoad.getAttribute(\"data-src\");\n if (dataSrc) {\n iframeLoad.setAttribute(\"src\", dataSrc);\n }\n }\n});\n\nlisten(\"click\", \"#copy_url\", async function (this: HTMLElement) {\n const target = this.parentElement?.querySelector(\"pre\");\n assertElement(target);\n\n if (window.isSecureContext) {\n await navigator.clipboard.writeText(target.innerText);\n } else {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(target);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand(\"copy\");\n }\n }\n\n if (this.dataset.copiedText) {\n this.innerText = this.dataset.copiedText;\n }\n});\n\nlisten(\"click\", \".result-detail-close\", (event: Event) => {\n event.preventDefault();\n mutable.closeDetail?.();\n});\n\nlisten(\"click\", \".result-detail-previous\", (event: Event) => {\n event.preventDefault();\n mutable.selectPrevious?.(false);\n});\n\nlisten(\"click\", \".result-detail-next\", (event: Event) => {\n event.preventDefault();\n mutable.selectNext?.(false);\n});\n\n// listen for the back button to be pressed and dismiss the image details when called\nwindow.addEventListener(\"hashchange\", () => {\n if (window.location.hash !== \"#image-viewer\") {\n mutable.closeDetail?.();\n }\n});\n\nconst swipeHorizontal: NodeListOf = document.querySelectorAll(\".swipe-horizontal\");\nfor (const element of swipeHorizontal) {\n listen(\"swiped-left\", element, () => {\n mutable.selectNext?.(false);\n });\n\n listen(\"swiped-right\", element, () => {\n mutable.selectPrevious?.(false);\n });\n}\n\nwindow.addEventListener(\n \"scroll\",\n () => {\n const backToTopElement = document.getElementById(\"backToTop\");\n const resultsElement = document.getElementById(\"results\");\n\n if (backToTopElement && resultsElement) {\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n const isScrolling = scrollTop >= 100;\n resultsElement.classList.toggle(\"scrolling\", isScrolling);\n }\n },\n true\n);\n"],"x_google_ignoreList":[0],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DWuhDe2f.min.js","names":[],"sources":["../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.ts"],"sourcesContent":["/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\nimport { listen, mutable, settings } from \"../toolkit.ts\";\nimport { assertElement } from \"../util/assertElement.ts\";\n\nlet imgTimeoutID: number;\n\nconst imageLoader = (resultElement: HTMLElement): void => {\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n const imgElement = resultElement.querySelector(\".result-images-source img\");\n if (!imgElement) return;\n\n // use thumbnail until full image loads\n const thumbnail = resultElement.querySelector(\".image_thumbnail\");\n if (thumbnail) {\n if (thumbnail.src === `${settings.theme_static_path}/img/img_load_error.svg`) return;\n\n imgElement.onerror = (): void => {\n imgElement.src = thumbnail.src;\n };\n\n imgElement.src = thumbnail.src;\n }\n\n const imgSource = imgElement.getAttribute(\"data-src\");\n if (!imgSource) return;\n\n // unsafe nodejs specific, cast to https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#return_value\n // https://github.com/searxng/searxng/pull/5073#discussion_r2265767231\n imgTimeoutID = setTimeout(() => {\n imgElement.src = imgSource;\n imgElement.removeAttribute(\"data-src\");\n }, 1000) as unknown as number;\n};\n\nconst imageThumbnails: NodeListOf =\n document.querySelectorAll(\"#urls img.image_thumbnail\");\nfor (const thumbnail of imageThumbnails) {\n if (thumbnail.complete && thumbnail.naturalWidth === 0) {\n thumbnail.src = `${settings.theme_static_path}/img/img_load_error.svg`;\n }\n\n thumbnail.onerror = (): void => {\n thumbnail.src = `${settings.theme_static_path}/img/img_load_error.svg`;\n };\n}\n\nconst copyUrlButton: HTMLButtonElement | null =\n document.querySelector(\"#search_url button#copy_url\");\ncopyUrlButton?.style.setProperty(\"display\", \"block\");\n\nmutable.selectImage = (resultElement: HTMLElement): void => {\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n const resultsElement = document.getElementById(\"results\");\n resultsElement?.classList.add(\"image-detail-open\");\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = \"#image-viewer\";\n\n mutable.scrollPageToSelected?.();\n\n // if there is no element given by the caller, stop here\n if (!resultElement) return;\n\n imageLoader(resultElement);\n};\n\nmutable.closeDetail = (): void => {\n const resultsElement = document.getElementById(\"results\");\n resultsElement?.classList.remove(\"image-detail-open\");\n\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash === \"#image-viewer\") {\n window.history.back();\n }\n\n mutable.scrollPageToSelected?.();\n};\n\nlisten(\"click\", \".btn-collapse\", function (this: HTMLElement) {\n const btnLabelCollapsed = this.getAttribute(\"data-btn-text-collapsed\");\n const btnLabelNotCollapsed = this.getAttribute(\"data-btn-text-not-collapsed\");\n const target = this.getAttribute(\"data-target\");\n\n if (!(target && btnLabelCollapsed && btnLabelNotCollapsed)) return;\n\n const targetElement = document.querySelector(target);\n assertElement(targetElement);\n\n const isCollapsed = this.classList.contains(\"collapsed\");\n const newLabel = isCollapsed ? btnLabelNotCollapsed : btnLabelCollapsed;\n const oldLabel = isCollapsed ? btnLabelCollapsed : btnLabelNotCollapsed;\n\n this.innerHTML = this.innerHTML.replace(oldLabel, newLabel);\n this.classList.toggle(\"collapsed\");\n\n targetElement.classList.toggle(\"invisible\");\n});\n\nlisten(\"click\", \".media-loader\", function (this: HTMLElement) {\n const target = this.getAttribute(\"data-target\");\n if (!target) return;\n\n const iframeLoad = document.querySelector(`${target} > iframe`);\n assertElement(iframeLoad);\n\n const srctest = iframeLoad.getAttribute(\"src\");\n if (!srctest) {\n const dataSrc = iframeLoad.getAttribute(\"data-src\");\n if (dataSrc) {\n iframeLoad.setAttribute(\"src\", dataSrc);\n }\n }\n});\n\nlisten(\"click\", \"#copy_url\", async function (this: HTMLElement) {\n const target = this.parentElement?.querySelector(\"pre\");\n assertElement(target);\n\n if (window.isSecureContext) {\n await navigator.clipboard.writeText(target.innerText);\n } else {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(target);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand(\"copy\");\n }\n }\n\n if (this.dataset.copiedText) {\n this.innerText = this.dataset.copiedText;\n }\n});\n\nlisten(\"click\", \".result-detail-close\", (event: Event) => {\n event.preventDefault();\n mutable.closeDetail?.();\n});\n\nlisten(\"click\", \".result-detail-previous\", (event: Event) => {\n event.preventDefault();\n mutable.selectPrevious?.(false);\n});\n\nlisten(\"click\", \".result-detail-next\", (event: Event) => {\n event.preventDefault();\n mutable.selectNext?.(false);\n});\n\n// listen for the back button to be pressed and dismiss the image details when called\nwindow.addEventListener(\"hashchange\", () => {\n if (window.location.hash !== \"#image-viewer\") {\n mutable.closeDetail?.();\n }\n});\n\nconst swipeHorizontal: NodeListOf = document.querySelectorAll(\".swipe-horizontal\");\nfor (const element of swipeHorizontal) {\n listen(\"swiped-left\", element, () => {\n mutable.selectNext?.(false);\n });\n\n listen(\"swiped-right\", element, () => {\n mutable.selectPrevious?.(false);\n });\n}\n\nwindow.addEventListener(\n \"scroll\",\n () => {\n const backToTopElement = document.getElementById(\"backToTop\");\n const resultsElement = document.getElementById(\"results\");\n\n if (backToTopElement && resultsElement) {\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n const isScrolling = scrollTop >= 100;\n resultsElement.classList.toggle(\"scrolling\", isScrolling);\n }\n },\n true\n);\n"],"x_google_ignoreList":[0],"mappings":"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"} \ No newline at end of file diff --git a/searx/static/themes/simple/chunk/Dzkb_VTO.min.js b/searx/static/themes/simple/chunk/Dzkb_VTO.min.js deleted file mode 100644 index 4b21eb1f5..000000000 --- a/searx/static/themes/simple/chunk/Dzkb_VTO.min.js +++ /dev/null @@ -1,2 +0,0 @@ -import{i as e,n as t,r as n}from"../sxng-core.min.js";import{t as r}from"./13gvpunf.min.js";(function(e,t){typeof e.CustomEvent!=`function`&&(e.CustomEvent=function(e,n){n||={bubbles:!1,cancelable:!1,detail:void 0};var r=t.createEvent(`CustomEvent`);return r.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),r},e.CustomEvent.prototype=e.Event.prototype),t.addEventListener(`touchstart`,u,!1),t.addEventListener(`touchmove`,d,!1),t.addEventListener(`touchend`,l,!1);var n=null,r=null,i=null,a=null,o=null,s=null,c=0;function l(e){if(s===e.target){var l=parseInt(f(s,`data-swipe-threshold`,`20`),10),u=f(s,`data-swipe-unit`,`px`),d=parseInt(f(s,`data-swipe-timeout`,`500`),10),p=Date.now()-o,m=``,h=e.changedTouches||e.touches||[];if(u===`vh`&&(l=Math.round(l/100*t.documentElement.clientHeight)),u===`vw`&&(l=Math.round(l/100*t.documentElement.clientWidth)),Math.abs(i)>Math.abs(a)?Math.abs(i)>l&&p0?`swiped-left`:`swiped-right`):Math.abs(a)>l&&p0?`swiped-up`:`swiped-down`),m!==``){var g={dir:m.replace(/swiped-/,``),touchType:(h[0]||{}).touchType||`direct`,fingers:c,xStart:parseInt(n,10),xEnd:parseInt((h[0]||{}).clientX||-1,10),yStart:parseInt(r,10),yEnd:parseInt((h[0]||{}).clientY||-1,10)};s.dispatchEvent(new CustomEvent(`swiped`,{bubbles:!0,cancelable:!0,detail:g})),s.dispatchEvent(new CustomEvent(m,{bubbles:!0,cancelable:!0,detail:g}))}n=null,r=null,o=null}}function u(e){e.target.getAttribute(`data-swipe-ignore`)!==`true`&&(s=e.target,o=Date.now(),n=e.touches[0].clientX,r=e.touches[0].clientY,i=0,a=0,c=e.touches.length)}function d(e){if(!(!n||!r)){var t=e.touches[0].clientX,o=e.touches[0].clientY;i=n-t,a=r-o}}function f(e,n,r){for(;e&&e!==t.documentElement;){var i=e.getAttribute(n);if(i)return i;e=e.parentNode}return r}})(window,document);var i,a=t=>{i&&clearTimeout(i);let n=t.querySelector(`.result-images-source img`);if(!n)return;let r=t.querySelector(`.image_thumbnail`);if(r){if(r.src===`${e.theme_static_path}/img/img_load_error.svg`)return;n.onerror=()=>{n.src=r.src},n.src=r.src}let a=n.getAttribute(`data-src`);a&&(i=setTimeout(()=>{n.src=a,n.removeAttribute(`data-src`)},1e3))},o=document.querySelectorAll(`#urls img.image_thumbnail`);for(let t of o)t.complete&&t.naturalWidth===0&&(t.src=`${e.theme_static_path}/img/img_load_error.svg`),t.onerror=()=>{t.src=`${e.theme_static_path}/img/img_load_error.svg`};document.querySelector(`#search_url button#copy_url`)?.style.setProperty(`display`,`block`),n.selectImage=e=>{document.getElementById(`results`)?.classList.add(`image-detail-open`),window.location.hash=`#image-viewer`,n.scrollPageToSelected?.(),e&&a(e)},n.closeDetail=()=>{document.getElementById(`results`)?.classList.remove(`image-detail-open`),window.location.hash===`#image-viewer`&&window.history.back(),n.scrollPageToSelected?.()},t(`click`,`.btn-collapse`,function(){let e=this.getAttribute(`data-btn-text-collapsed`),t=this.getAttribute(`data-btn-text-not-collapsed`),n=this.getAttribute(`data-target`);if(!(n&&e&&t))return;let i=document.querySelector(n);r(i);let a=this.classList.contains(`collapsed`),o=a?t:e,s=a?e:t;this.innerHTML=this.innerHTML.replace(s,o),this.classList.toggle(`collapsed`),i.classList.toggle(`invisible`)}),t(`click`,`.media-loader`,function(){let e=this.getAttribute(`data-target`);if(!e)return;let t=document.querySelector(`${e} > iframe`);if(r(t),!t.getAttribute(`src`)){let e=t.getAttribute(`data-src`);e&&t.setAttribute(`src`,e)}}),t(`click`,`#copy_url`,async function(){let e=this.parentElement?.querySelector(`pre`);if(r(e),window.isSecureContext)await navigator.clipboard.writeText(e.innerText);else{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n),document.execCommand(`copy`)}}this.dataset.copiedText&&(this.innerText=this.dataset.copiedText)}),t(`click`,`.result-detail-close`,e=>{e.preventDefault(),n.closeDetail?.()}),t(`click`,`.result-detail-previous`,e=>{e.preventDefault(),n.selectPrevious?.(!1)}),t(`click`,`.result-detail-next`,e=>{e.preventDefault(),n.selectNext?.(!1)}),window.addEventListener(`hashchange`,()=>{window.location.hash!==`#image-viewer`&&n.closeDetail?.()});var s=document.querySelectorAll(`.swipe-horizontal`);for(let e of s)t(`swiped-left`,e,()=>{n.selectNext?.(!1)}),t(`swiped-right`,e,()=>{n.selectPrevious?.(!1)});window.addEventListener(`scroll`,()=>{let e=document.getElementById(`backToTop`),t=document.getElementById(`results`);if(e&&t){let e=(document.documentElement.scrollTop||document.body.scrollTop)>=100;t.classList.toggle(`scrolling`,e)}},!0); -//# sourceMappingURL=Dzkb_VTO.min.js.map \ No newline at end of file diff --git a/searx/static/themes/simple/manifest.json b/searx/static/themes/simple/manifest.json index 3c16773a6..652b94e58 100644 --- a/searx/static/themes/simple/manifest.json +++ b/searx/static/themes/simple/manifest.json @@ -57,7 +57,7 @@ ] }, "src/js/main/results.ts": { - "file": "chunk/Dzkb_VTO.min.js", + "file": "chunk/DWuhDe2f.min.js", "name": "results", "src": "src/js/main/results.ts", "isDynamicEntry": true, diff --git a/searx/static/themes/simple/sxng-core.min.js b/searx/static/themes/simple/sxng-core.min.js index fc92a7aac..08f99d4a3 100644 --- a/searx/static/themes/simple/sxng-core.min.js +++ b/searx/static/themes/simple/sxng-core.min.js @@ -1,3 +1,3 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./chunk/DBO1tjH7.min.js","./chunk/13gvpunf.min.js","./chunk/gZqIRpW1.min.js","./chunk/DO33-10z.min.js","./chunk/Cyk8UkF6.min.js","./chunk/Q2W2fJLA.min.js","./chunk/KPZlR0ib.min.js","./chunk/Dzkb_VTO.min.js","./chunk/u0MAGmsp.min.js"])))=>i.map(i=>d[i]); -var e=class{id;constructor(e){this.id=e,this.invoke()}async invoke(){try{console.debug(`[PLUGIN] ${this.id}: Running...`);let e=await this.run();if(!e)return;console.debug(`[PLUGIN] ${this.id}: Running post-exec...`),await this.post(e)}catch(e){console.error(`[PLUGIN] ${this.id}:`,e)}finally{console.debug(`[PLUGIN] ${this.id}: Done.`)}}};const t={index:`index`,results:`results`,preferences:`preferences`,unknown:`unknown`},n={closeDetail:void 0,scrollPageToSelected:void 0,selectImage:void 0,selectNext:void 0,selectPrevious:void 0};var r=()=>{let e=document.querySelector(`meta[name="endpoint"]`)?.getAttribute(`content`);return e&&e in t?e:t.unknown},i=()=>{let e=document.querySelector(`script[client_settings]`)?.getAttribute(`client_settings`);if(!e)return{};try{return JSON.parse(atob(e))}catch(e){return console.error(`Failed to load client_settings:`,e),{}}};const a=async(e,t,n)=>{let r=new AbortController,i=setTimeout(()=>r.abort(),n?.timeout??3e4),a=await fetch(t,{body:n?.body,method:e,signal:r.signal}).finally(()=>clearTimeout(i));if(!a.ok)throw Error(a.statusText);return a},o=(e,t,n,r)=>{if(typeof t!=`string`){t.addEventListener(e,n,r);return}document.addEventListener(e,e=>{for(let r of e.composedPath())if(r instanceof HTMLElement&&r.matches(t)){try{n.call(r,e)}catch(e){console.error(e)}break}},r)},s=(e,t)=>{for(let e of t?.on??[])if(!e)return;document.readyState===`loading`?o(`DOMContentLoaded`,document,e,{once:!0}):e()},c=r(),l=i(),u=(e,t)=>{d(t)&&e()};var d=e=>{switch(e.on){case`global`:return!0;case`endpoint`:return!!e.where.includes(c)}},f=`modulepreload`,p=function(e,t){return new URL(e,t).href},m={};const h=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=p(t,n),t in m)return;m[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:f,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};s(()=>{document.documentElement.classList.remove(`no-js`),document.documentElement.classList.add(`js`),o(`click`,`.close`,function(){this.parentNode?.classList.add(`invisible`)}),o(`click`,`.searxng_init_map`,async function(e){e.preventDefault(),this.classList.remove(`searxng_init_map`),u(()=>h(async()=>{let{default:e}=await import(`./chunk/Cl_zubJc.min.js`);return{default:e}},[],import.meta.url).then(({default:e})=>new e(this)),{on:`endpoint`,where:[t.results]})}),l.plugins?.includes(`infiniteScroll`)&&u(()=>h(async()=>{let{default:e}=await import(`./chunk/DBO1tjH7.min.js`);return{default:e}},__vite__mapDeps([0,1,2]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[t.results]}),l.plugins?.includes(`calculator`)&&u(()=>h(async()=>{let{default:e}=await import(`./chunk/DO33-10z.min.js`);return{default:e}},__vite__mapDeps([3,2,1]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[t.results]})}),s(()=>{h(()=>import(`./chunk/Cyk8UkF6.min.js`),__vite__mapDeps([4,1]),import.meta.url),h(()=>import(`./chunk/Q2W2fJLA.min.js`),__vite__mapDeps([5,2,1]),import.meta.url),l.autocomplete&&h(()=>import(`./chunk/KPZlR0ib.min.js`),__vite__mapDeps([6,1]),import.meta.url)},{on:[c===t.index]}),s(()=>{h(()=>import(`./chunk/Cyk8UkF6.min.js`),__vite__mapDeps([4,1]),import.meta.url),h(()=>import(`./chunk/Dzkb_VTO.min.js`),__vite__mapDeps([7,1]),import.meta.url),h(()=>import(`./chunk/Q2W2fJLA.min.js`),__vite__mapDeps([5,2,1]),import.meta.url),l.autocomplete&&h(()=>import(`./chunk/KPZlR0ib.min.js`),__vite__mapDeps([6,1]),import.meta.url)},{on:[c===t.results]}),s(()=>{h(()=>import(`./chunk/u0MAGmsp.min.js`),__vite__mapDeps([8,1]),import.meta.url)},{on:[c===t.preferences]});export{e as a,l as i,o as n,n as r,a as t}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./chunk/DBO1tjH7.min.js","./chunk/13gvpunf.min.js","./chunk/gZqIRpW1.min.js","./chunk/DO33-10z.min.js","./chunk/Cyk8UkF6.min.js","./chunk/Q2W2fJLA.min.js","./chunk/KPZlR0ib.min.js","./chunk/DWuhDe2f.min.js","./chunk/u0MAGmsp.min.js"])))=>i.map(i=>d[i]); +var e=class{id;constructor(e){this.id=e,this.invoke()}async invoke(){try{console.debug(`[PLUGIN] ${this.id}: Running...`);let e=await this.run();if(!e)return;console.debug(`[PLUGIN] ${this.id}: Running post-exec...`),await this.post(e)}catch(e){console.error(`[PLUGIN] ${this.id}:`,e)}finally{console.debug(`[PLUGIN] ${this.id}: Done.`)}}};const t={index:`index`,results:`results`,preferences:`preferences`,unknown:`unknown`},n={closeDetail:void 0,scrollPageToSelected:void 0,selectImage:void 0,selectNext:void 0,selectPrevious:void 0};var r=()=>{let e=document.querySelector(`meta[name="endpoint"]`)?.getAttribute(`content`);return e&&e in t?e:t.unknown},i=()=>{let e=document.querySelector(`script[client_settings]`)?.getAttribute(`client_settings`);if(!e)return{};try{return JSON.parse(atob(e))}catch(e){return console.error(`Failed to load client_settings:`,e),{}}};const a=async(e,t,n)=>{let r=new AbortController,i=setTimeout(()=>r.abort(),n?.timeout??3e4),a=await fetch(t,{body:n?.body,method:e,signal:r.signal}).finally(()=>clearTimeout(i));if(!a.ok)throw Error(a.statusText);return a},o=(e,t,n,r)=>{if(typeof t!=`string`){t.addEventListener(e,n,r);return}document.addEventListener(e,e=>{for(let r of e.composedPath())if(r instanceof HTMLElement&&r.matches(t)){try{n.call(r,e)}catch(e){console.error(e)}break}},r)},s=(e,t)=>{for(let e of t?.on??[])if(!e)return;document.readyState===`loading`?o(`DOMContentLoaded`,document,e,{once:!0}):e()},c=r(),l=i(),u=(e,t)=>{d(t)&&e()};var d=e=>{switch(e.on){case`global`:return!0;case`endpoint`:return!!e.where.includes(c)}},f=`modulepreload`,p=function(e,t){return new URL(e,t).href},m={};const h=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=p(t,n),t in m)return;m[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:f,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};s(()=>{document.documentElement.classList.remove(`no-js`),document.documentElement.classList.add(`js`),o(`click`,`.close`,function(){this.parentNode?.classList.add(`invisible`)}),o(`click`,`.searxng_init_map`,async function(e){e.preventDefault(),this.classList.remove(`searxng_init_map`),u(()=>h(async()=>{let{default:e}=await import(`./chunk/Cl_zubJc.min.js`);return{default:e}},[],import.meta.url).then(({default:e})=>new e(this)),{on:`endpoint`,where:[t.results]})}),l.plugins?.includes(`infiniteScroll`)&&u(()=>h(async()=>{let{default:e}=await import(`./chunk/DBO1tjH7.min.js`);return{default:e}},__vite__mapDeps([0,1,2]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[t.results]}),l.plugins?.includes(`calculator`)&&u(()=>h(async()=>{let{default:e}=await import(`./chunk/DO33-10z.min.js`);return{default:e}},__vite__mapDeps([3,2,1]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[t.results]})}),s(()=>{h(()=>import(`./chunk/Cyk8UkF6.min.js`),__vite__mapDeps([4,1]),import.meta.url),h(()=>import(`./chunk/Q2W2fJLA.min.js`),__vite__mapDeps([5,2,1]),import.meta.url),l.autocomplete&&h(()=>import(`./chunk/KPZlR0ib.min.js`),__vite__mapDeps([6,1]),import.meta.url)},{on:[c===t.index]}),s(()=>{h(()=>import(`./chunk/Cyk8UkF6.min.js`),__vite__mapDeps([4,1]),import.meta.url),h(()=>import(`./chunk/DWuhDe2f.min.js`),__vite__mapDeps([7,1]),import.meta.url),h(()=>import(`./chunk/Q2W2fJLA.min.js`),__vite__mapDeps([5,2,1]),import.meta.url),l.autocomplete&&h(()=>import(`./chunk/KPZlR0ib.min.js`),__vite__mapDeps([6,1]),import.meta.url)},{on:[c===t.results]}),s(()=>{h(()=>import(`./chunk/u0MAGmsp.min.js`),__vite__mapDeps([8,1]),import.meta.url)},{on:[c===t.preferences]});export{e as a,l as i,o as n,n as r,a as t}; //# sourceMappingURL=sxng-core.min.js.map \ No newline at end of file