diff --git a/.goreleaser.yml b/.goreleaser.yml index 57b7b44a..be192ef8 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -17,6 +17,7 @@ builds: - linux - windows - freebsd + - openbsd goarch: - amd64 - "386" @@ -30,6 +31,12 @@ builds: ignore: - goos: darwin goarch: "386" + # Experimental, may not work properly + - goos: openbsd + goarch: riscv64 + # Broken as of Go 1.24, deprecated as of Go 1.26 + - goos: windows + goarch: arm - goos: freebsd goarch: arm diff --git a/CHANGELOG.md b/CHANGELOG.md index c69b24aa..0f49dca9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,44 @@ All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. +## [2.55.0](https://github.com/filebrowser/filebrowser/compare/v2.54.0...v2.55.0) (2026-01-18) + + +### Features + +* added cut, copy, paste and show command palette functions in header ([#5648](https://github.com/filebrowser/filebrowser/issues/5648)) ([785b7ab](https://github.com/filebrowser/filebrowser/commit/785b7abb7ba7a86cc0deae1052c319ff714c222c)) +* update translations ([#5677](https://github.com/filebrowser/filebrowser/issues/5677)) ([e7ea1ad](https://github.com/filebrowser/filebrowser/commit/e7ea1ad27d3d17e249489d3338be40bfea15e2a1)) + + +### Bug Fixes + +* prevent context menu clicks from clearing file selection ([#5681](https://github.com/filebrowser/filebrowser/issues/5681)) ([59ca0c3](https://github.com/filebrowser/filebrowser/commit/59ca0c340afc7774747c70ede9a5a5a3c9349d6b)) +* request current password when deleting users ([#5667](https://github.com/filebrowser/filebrowser/issues/5667)) ([cfa6c58](https://github.com/filebrowser/filebrowser/commit/cfa6c5864e5e7673aa9f3180e4964e0db92cc4da)) +* retain file selection when closing the editor ([#5693](https://github.com/filebrowser/filebrowser/issues/5693)) ([4094fb3](https://github.com/filebrowser/filebrowser/commit/4094fb359babac70e88d0ed4bfe3bd100744aad6)) + +## [2.54.0](https://github.com/filebrowser/filebrowser/compare/v2.53.1...v2.54.0) (2026-01-10) + + +### Features + +* add "redirect after copy/move" user setting ([#5662](https://github.com/filebrowser/filebrowser/issues/5662)) ([fda8a99](https://github.com/filebrowser/filebrowser/commit/fda8a992929b1466e75fb2813f2c4e293c12d244)) +* force file sync while uploading file ([#5668](https://github.com/filebrowser/filebrowser/issues/5668)) ([4fd18a3](https://github.com/filebrowser/filebrowser/commit/4fd18a382c31bbe7059d6733ffa371e70051865b)) +* update translations ([#5659](https://github.com/filebrowser/filebrowser/issues/5659)) ([464b581](https://github.com/filebrowser/filebrowser/commit/464b581953139c17e3276b774e381e4052827125)) + + +### Bug Fixes + +* clear selection by clicking on empty area ([#5663](https://github.com/filebrowser/filebrowser/issues/5663)) ([208535a](https://github.com/filebrowser/filebrowser/commit/208535a8cc23254de0013dfab9008486707ee6c2)) +* hide "change password form" in noauth setting ([#5652](https://github.com/filebrowser/filebrowser/issues/5652)) ([219582c](https://github.com/filebrowser/filebrowser/commit/219582c0b03fd90979b1d1398dba7919d086a23f)) + +## [2.53.1](https://github.com/filebrowser/filebrowser/compare/v2.53.0...v2.53.1) (2026-01-03) + + +### Bug Fixes + +* download path encoding file paths ([#5655](https://github.com/filebrowser/filebrowser/issues/5655)) ([ffa893e](https://github.com/filebrowser/filebrowser/commit/ffa893e9ac387a49dba5917a41df7c3b7ce120fc)) +* request a password to change sensitive user data ([#5629](https://github.com/filebrowser/filebrowser/issues/5629)) ([b8151a0](https://github.com/filebrowser/filebrowser/commit/b8151a038a1ea55afae8073b439b74e364cac12f)) + ## [2.53.0](https://github.com/filebrowser/filebrowser/compare/v2.52.0...v2.53.0) (2025-12-29) diff --git a/auth/hook.go b/auth/hook.go index 9bb38969..0c5efac5 100644 --- a/auth/hook.go +++ b/auth/hook.go @@ -158,16 +158,17 @@ func (a *HookAuth) SaveUser() (*users.User, error) { // create user with the provided credentials d := &users.User{ - Username: a.Cred.Username, - Password: pass, - Scope: a.Settings.Defaults.Scope, - Locale: a.Settings.Defaults.Locale, - ViewMode: a.Settings.Defaults.ViewMode, - SingleClick: a.Settings.Defaults.SingleClick, - Sorting: a.Settings.Defaults.Sorting, - Perm: a.Settings.Defaults.Perm, - Commands: a.Settings.Defaults.Commands, - HideDotfiles: a.Settings.Defaults.HideDotfiles, + Username: a.Cred.Username, + Password: pass, + Scope: a.Settings.Defaults.Scope, + Locale: a.Settings.Defaults.Locale, + ViewMode: a.Settings.Defaults.ViewMode, + SingleClick: a.Settings.Defaults.SingleClick, + RedirectAfterCopyMove: a.Settings.Defaults.RedirectAfterCopyMove, + Sorting: a.Settings.Defaults.Sorting, + Perm: a.Settings.Defaults.Perm, + Commands: a.Settings.Defaults.Commands, + HideDotfiles: a.Settings.Defaults.HideDotfiles, } u = a.GetUser(d) @@ -219,13 +220,14 @@ func (a *HookAuth) GetUser(d *users.User) *users.User { Download: isAdmin || a.Fields.GetBoolean("user.perm.download", d.Perm.Download), } user := users.User{ - ID: d.ID, - Username: d.Username, - Password: d.Password, - Scope: a.Fields.GetString("user.scope", d.Scope), - Locale: a.Fields.GetString("user.locale", d.Locale), - ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))), - SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick), + ID: d.ID, + Username: d.Username, + Password: d.Password, + Scope: a.Fields.GetString("user.scope", d.Scope), + Locale: a.Fields.GetString("user.locale", d.Locale), + ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))), + SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick), + RedirectAfterCopyMove: a.Fields.GetBoolean("user.redirectAfterCopyMove", d.RedirectAfterCopyMove), Sorting: files.Sorting{ Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc), By: a.Fields.GetString("user.sorting.by", d.Sorting.By), @@ -251,6 +253,7 @@ var validHookFields = []string{ "user.locale", "user.viewMode", "user.singleClick", + "user.redirectAfterCopyMove", "user.sorting.by", "user.sorting.asc", "user.commands", diff --git a/auth/json.go b/auth/json.go index f779c476..2284dc7f 100644 --- a/auth/json.go +++ b/auth/json.go @@ -14,6 +14,10 @@ import ( // MethodJSONAuth is used to identify json auth. const MethodJSONAuth settings.AuthMethod = "json" +// dummyHash is used to prevent user enumeration timing attacks. +// It MUST be a valid bcrypt hash. +const dummyHash = "$2a$10$O4mEMeOL/nit6zqe.WQXauLRbRlzb3IgLHsa26Pf0N/GiU9b.wK1m" + type jsonCred struct { Password string `json:"password"` Username string `json:"username"` @@ -52,7 +56,17 @@ func (a JSONAuth) Auth(r *http.Request, usr users.Store, _ *settings.Settings, s } u, err := usr.Get(srv.Root, cred.Username) - if err != nil || !users.CheckPwd(cred.Password, u.Password) { + + hash := dummyHash + if err == nil { + hash = u.Password + } + + if !users.CheckPwd(cred.Password, hash) { + return nil, os.ErrPermission + } + + if err != nil { return nil, os.ErrPermission } diff --git a/cmd/config.go b/cmd/config.go index 3fb2e7e4..5b3314ed 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -240,6 +240,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale) fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode) fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.Defaults.SingleClick) + fmt.Fprintf(w, "\tRedirect after Copy/Move:\t%t\n", set.Defaults.RedirectAfterCopyMove) fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode) fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode) fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " ")) diff --git a/cmd/root.go b/cmd/root.go index 0f78535c..981eec4f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -393,10 +393,11 @@ func quickSetup(v *viper.Viper, s *storage.Storage) error { MinimumPasswordLength: settings.DefaultMinimumPasswordLength, UserHomeBasePath: settings.DefaultUsersHomeBasePath, Defaults: settings.UserDefaults{ - Scope: ".", - Locale: "en", - SingleClick: false, - AceEditorTheme: v.GetString("defaults.aceEditorTheme"), + Scope: ".", + Locale: "en", + SingleClick: false, + RedirectAfterCopyMove: true, + AceEditorTheme: v.GetString("defaults.aceEditorTheme"), Perm: users.Permissions{ Admin: false, Execute: true, diff --git a/cmd/users.go b/cmd/users.go index 86434a42..66487862 100644 --- a/cmd/users.go +++ b/cmd/users.go @@ -30,13 +30,14 @@ func printUsers(usrs []*users.User) { fmt.Fprintln(w, "ID\tUsername\tScope\tLocale\tV. Mode\tS.Click\tAdmin\tExecute\tCreate\tRename\tModify\tDelete\tShare\tDownload\tPwd Lock") for _, u := range usrs { - fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n", + fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n", u.ID, u.Username, u.Scope, u.Locale, u.ViewMode, u.SingleClick, + u.RedirectAfterCopyMove, u.Perm.Admin, u.Perm.Execute, u.Perm.Create, @@ -77,6 +78,7 @@ func addUserFlags(flags *pflag.FlagSet) { flags.String("locale", "en", "locale for users") flags.String("viewMode", string(users.ListViewMode), "view mode for users") flags.Bool("singleClick", false, "use single clicks only") + flags.Bool("redirectAfterCopyMove", false, "redirect to destination after copy/move") flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)") flags.Bool("hideDotfiles", false, "hide dotfiles") flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users") @@ -110,6 +112,8 @@ func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all defaults.ViewMode, err = getAndParseViewMode(flags) case "singleClick": defaults.SingleClick, err = flags.GetBool(flag.Name) + case "redirectAfterCopyMove": + defaults.RedirectAfterCopyMove, err = flags.GetBool(flag.Name) case "aceEditorTheme": defaults.AceEditorTheme, err = flags.GetString(flag.Name) case "perm.admin": diff --git a/cmd/users_update.go b/cmd/users_update.go index 96f1e2d3..e9a484fc 100644 --- a/cmd/users_update.go +++ b/cmd/users_update.go @@ -52,13 +52,14 @@ options you want to change.`, } defaults := settings.UserDefaults{ - Scope: user.Scope, - Locale: user.Locale, - ViewMode: user.ViewMode, - SingleClick: user.SingleClick, - Perm: user.Perm, - Sorting: user.Sorting, - Commands: user.Commands, + Scope: user.Scope, + Locale: user.Locale, + ViewMode: user.ViewMode, + SingleClick: user.SingleClick, + RedirectAfterCopyMove: user.RedirectAfterCopyMove, + Perm: user.Perm, + Sorting: user.Sorting, + Commands: user.Commands, } err = getUserDefaults(flags, &defaults, false) @@ -70,6 +71,7 @@ options you want to change.`, user.Locale = defaults.Locale user.ViewMode = defaults.ViewMode user.SingleClick = defaults.SingleClick + user.RedirectAfterCopyMove = defaults.RedirectAfterCopyMove user.Perm = defaults.Perm user.Commands = defaults.Commands user.Sorting = defaults.Sorting diff --git a/errors/errors.go b/errors/errors.go index 85258e5b..748354a8 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -6,22 +6,23 @@ import ( ) var ( - ErrEmptyKey = errors.New("empty key") - ErrExist = errors.New("the resource already exists") - ErrNotExist = errors.New("the resource does not exist") - ErrEmptyPassword = errors.New("password is empty") - ErrEasyPassword = errors.New("password is too easy") - ErrEmptyUsername = errors.New("username is empty") - ErrEmptyRequest = errors.New("empty request") - ErrScopeIsRelative = errors.New("scope is a relative path") - ErrInvalidDataType = errors.New("invalid data type") - ErrIsDirectory = errors.New("file is directory") - ErrInvalidOption = errors.New("invalid option") - ErrInvalidAuthMethod = errors.New("invalid auth method") - ErrPermissionDenied = errors.New("permission denied") - ErrInvalidRequestParams = errors.New("invalid request params") - ErrSourceIsParent = errors.New("source is parent") - ErrRootUserDeletion = errors.New("user with id 1 can't be deleted") + ErrEmptyKey = errors.New("empty key") + ErrExist = errors.New("the resource already exists") + ErrNotExist = errors.New("the resource does not exist") + ErrEmptyPassword = errors.New("password is empty") + ErrEasyPassword = errors.New("password is too easy") + ErrEmptyUsername = errors.New("username is empty") + ErrEmptyRequest = errors.New("empty request") + ErrScopeIsRelative = errors.New("scope is a relative path") + ErrInvalidDataType = errors.New("invalid data type") + ErrIsDirectory = errors.New("file is directory") + ErrInvalidOption = errors.New("invalid option") + ErrInvalidAuthMethod = errors.New("invalid auth method") + ErrPermissionDenied = errors.New("permission denied") + ErrInvalidRequestParams = errors.New("invalid request params") + ErrSourceIsParent = errors.New("source is parent") + ErrRootUserDeletion = errors.New("user with id 1 can't be deleted") + ErrCurrentPasswordIncorrect = errors.New("the current password is incorrect") ) type ErrShortPassword struct { diff --git a/frontend/package.json b/frontend/package.json index 80809665..44144b3a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -71,5 +71,5 @@ "vite-plugin-compression2": "^2.3.1", "vue-tsc": "^3.1.3" }, - "packageManager": "pnpm@10.26.2+sha512.0e308ff2005fc7410366f154f625f6631ab2b16b1d2e70238444dd6ae9d630a8482d92a451144debc492416896ed16f7b114a86ec68b8404b2443869e68ffda6" + "packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48" } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 67088f72..d3b79699 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -82,7 +82,7 @@ importers: version: 4.5.5(@vueuse/core@14.1.0(vue@3.5.26(typescript@5.9.3)))(@vueuse/integrations@14.1.0(focus-trap@7.6.2)(jwt-decode@4.0.0)(vue@3.5.26(typescript@5.9.3)))(focus-trap@7.6.2)(vue@3.5.26(typescript@5.9.3)) vue-i18n: specifier: ^11.1.10 - version: 11.2.7(vue@3.5.26(typescript@5.9.3)) + version: 11.2.8(vue@3.5.26(typescript@5.9.3)) vue-lazyload: specifier: ^3.0.0 version: 3.0.0 @@ -98,31 +98,31 @@ importers: devDependencies: '@intlify/unplugin-vue-i18n': specifier: ^11.0.1 - version: 11.0.3(@vue/compiler-dom@3.5.26)(eslint@9.39.2)(rollup@4.54.0)(typescript@5.9.3)(vue-i18n@11.2.7(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) + version: 11.0.3(@vue/compiler-dom@3.5.26)(eslint@9.39.2)(rollup@4.55.1)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) '@tsconfig/node24': specifier: ^24.0.2 - version: 24.0.3 + version: 24.0.4 '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 '@types/node': specifier: ^24.10.1 - version: 24.10.4 + version: 24.10.9 '@typescript-eslint/eslint-plugin': specifier: ^8.37.0 - version: 8.50.1(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) + version: 8.53.0(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) '@vitejs/plugin-legacy': specifier: ^7.2.1 - version: 7.2.1(terser@5.44.1)(vite@7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2)) + version: 7.2.1(terser@5.46.0)(vite@7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2)) '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.3(vite@7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + version: 6.0.3(vite@7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) '@vue/eslint-config-prettier': specifier: ^10.2.0 - version: 10.2.0(eslint@9.39.2)(prettier@3.7.4) + version: 10.2.0(eslint@9.39.2)(prettier@3.8.0) '@vue/eslint-config-typescript': specifier: ^14.6.0 - version: 14.6.0(eslint-plugin-vue@10.6.2(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)))(eslint@9.39.2)(typescript@5.9.3) + version: 14.6.0(eslint-plugin-vue@10.7.0(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)))(eslint@9.39.2)(typescript@5.9.3) '@vue/tsconfig': specifier: ^0.8.1 version: 0.8.1(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) @@ -137,31 +137,31 @@ importers: version: 10.1.8(eslint@9.39.2) eslint-plugin-prettier: specifier: ^5.5.1 - version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.7.4) + version: 5.5.5(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.8.0) eslint-plugin-vue: specifier: ^10.5.1 - version: 10.6.2(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)) + version: 10.7.0(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)) postcss: specifier: ^8.5.6 version: 8.5.6 prettier: specifier: ^3.6.2 - version: 3.7.4 + version: 3.8.0 terser: specifier: ^5.43.1 - version: 5.44.1 + version: 5.46.0 typescript: specifier: ^5.9.3 version: 5.9.3 vite: specifier: ^7.2.2 - version: 7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2) + version: 7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2) vite-plugin-compression2: specifier: ^2.3.1 - version: 2.4.0(rollup@4.54.0) + version: 2.4.0(rollup@4.55.1) vue-tsc: specifier: ^3.1.3 - version: 3.2.1(typescript@5.9.3) + version: 3.2.2(typescript@5.9.3) packages: @@ -983,6 +983,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.2': resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1043,20 +1049,20 @@ packages: vue-i18n: optional: true - '@intlify/core-base@11.2.7': - resolution: {integrity: sha512-+Ra9I/LAzXDnmv/IrTO03WMCiLya7pHRmGJvNl9fKwx/W4REJ0xaMk2PxCRqnxcBsX443amEMdebQ3R1geiuIw==} + '@intlify/core-base@11.2.8': + resolution: {integrity: sha512-nBq6Y1tVkjIUsLsdOjDSJj4AsjvD0UG3zsg9Fyc+OivwlA/oMHSKooUy9tpKj0HqZ+NWFifweHavdljlBLTwdA==} engines: {node: '>= 16'} - '@intlify/message-compiler@11.2.7': - resolution: {integrity: sha512-TFamC+GzJAotAFwUNvbtRVBgvuSn2nCwKNresmPUHv3IIVMmXJt7QQJj/DORI1h8hs46ZF6L0Fs2xBohSOE4iQ==} + '@intlify/message-compiler@11.2.8': + resolution: {integrity: sha512-A5n33doOjmHsBtCN421386cG1tWp5rpOjOYPNsnpjIJbQ4POF0QY2ezhZR9kr0boKwaHjbOifvyQvHj2UTrDFQ==} engines: {node: '>= 16'} '@intlify/shared@11.2.2': resolution: {integrity: sha512-OtCmyFpSXxNu/oET/aN6HtPCbZ01btXVd0f3w00YsHOb13Kverk1jzA2k47pAekM55qbUw421fvPF1yxZ+gicw==} engines: {node: '>= 16'} - '@intlify/shared@11.2.7': - resolution: {integrity: sha512-uvlkvc/0uQ4FDlHQZccpUnmcOwNcaI3i+69ck2YJ+GqM35AoVbuS63b+YfirV4G0SZh64Ij2UMcFRMmB4nr95w==} + '@intlify/shared@11.2.8': + resolution: {integrity: sha512-l6e4NZyUgv8VyXXH4DbuucFOBmxLF56C/mqh2tvApbzl2Hrhi1aTDcuv5TKdxzfHYmpO3UB0Cz04fgDT9vszfw==} engines: {node: '>= 16'} '@intlify/unplugin-vue-i18n@11.0.3': @@ -1137,118 +1143,133 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.54.0': - resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} + '@rollup/rollup-android-arm-eabi@4.55.1': + resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.54.0': - resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} + '@rollup/rollup-android-arm64@4.55.1': + resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.54.0': - resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} + '@rollup/rollup-darwin-arm64@4.55.1': + resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.54.0': - resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} + '@rollup/rollup-darwin-x64@4.55.1': + resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.54.0': - resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} + '@rollup/rollup-freebsd-arm64@4.55.1': + resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.54.0': - resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} + '@rollup/rollup-freebsd-x64@4.55.1': + resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': - resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.54.0': - resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.54.0': - resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} + '@rollup/rollup-linux-arm64-gnu@4.55.1': + resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.54.0': - resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} + '@rollup/rollup-linux-arm64-musl@4.55.1': + resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.54.0': - resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} + '@rollup/rollup-linux-loong64-gnu@4.55.1': + resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.54.0': - resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} + '@rollup/rollup-linux-loong64-musl@4.55.1': + resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.54.0': - resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} + '@rollup/rollup-linux-ppc64-musl@4.55.1': + resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.54.0': - resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} + '@rollup/rollup-linux-riscv64-musl@4.55.1': + resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.54.0': - resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} + '@rollup/rollup-linux-s390x-gnu@4.55.1': + resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.54.0': - resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} + '@rollup/rollup-linux-x64-gnu@4.55.1': + resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.54.0': - resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} + '@rollup/rollup-linux-x64-musl@4.55.1': + resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.54.0': - resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} + '@rollup/rollup-openbsd-x64@4.55.1': + resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.55.1': + resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.54.0': - resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} + '@rollup/rollup-win32-arm64-msvc@4.55.1': + resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.54.0': - resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} + '@rollup/rollup-win32-ia32-msvc@4.55.1': + resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.54.0': - resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} + '@rollup/rollup-win32-x64-gnu@4.55.1': + resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.54.0': - resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} + '@rollup/rollup-win32-x64-msvc@4.55.1': + resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} cpu: [x64] os: [win32] - '@tsconfig/node24@24.0.3': - resolution: {integrity: sha512-vcERKtKQKHgzt/vfS3Gjasd8SUI2a0WZXpgJURdJsMySpS5+ctgbPfuLj2z/W+w4lAfTWxoN4upKfu2WzIRYnw==} + '@tsconfig/node24@24.0.4': + resolution: {integrity: sha512-2A933l5P5oCbv6qSxHs7ckKwobs8BDAe9SJ/Xr2Hy+nDlwmLE1GhFh/g/vXGRZWgxBg9nX/5piDtHR9Dkw/XuA==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1266,8 +1287,8 @@ packages: '@types/lodash@4.17.13': resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} - '@types/node@24.10.4': - resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} + '@types/node@24.10.9': + resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1283,11 +1304,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/eslint-plugin@8.50.1': - resolution: {integrity: sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==} + '@typescript-eslint/eslint-plugin@8.53.0': + resolution: {integrity: sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.50.1 + '@typescript-eslint/parser': ^8.53.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -1310,8 +1331,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.50.1': - resolution: {integrity: sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==} + '@typescript-eslint/project-service@8.53.0': + resolution: {integrity: sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1324,8 +1345,8 @@ packages: resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.50.1': - resolution: {integrity: sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==} + '@typescript-eslint/scope-manager@8.53.0': + resolution: {integrity: sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.37.0': @@ -1340,8 +1361,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.50.1': - resolution: {integrity: sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==} + '@typescript-eslint/tsconfig-utils@8.53.0': + resolution: {integrity: sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1353,8 +1374,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.50.1': - resolution: {integrity: sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==} + '@typescript-eslint/type-utils@8.53.0': + resolution: {integrity: sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1368,8 +1389,8 @@ packages: resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.50.1': - resolution: {integrity: sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==} + '@typescript-eslint/types@8.53.0': + resolution: {integrity: sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.37.0': @@ -1384,8 +1405,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.50.1': - resolution: {integrity: sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==} + '@typescript-eslint/typescript-estree@8.53.0': + resolution: {integrity: sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1397,8 +1418,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.50.1': - resolution: {integrity: sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==} + '@typescript-eslint/utils@8.53.0': + resolution: {integrity: sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1412,8 +1433,8 @@ packages: resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.50.1': - resolution: {integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==} + '@typescript-eslint/visitor-keys@8.53.0': + resolution: {integrity: sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@videojs/http-streaming@3.17.2': @@ -1493,8 +1514,8 @@ packages: typescript: optional: true - '@vue/language-core@3.2.1': - resolution: {integrity: sha512-g6oSenpnGMtpxHGAwKuu7HJJkNZpemK/zg3vZzZbJ6cnnXq1ssxuNrXSsAHYM3NvH8p4IkTw+NLmuxyeYz4r8A==} + '@vue/language-core@3.2.2': + resolution: {integrity: sha512-5DAuhxsxBN9kbriklh3Q5AMaJhyOCNiQJvCskN9/30XOpdLiqZU9Q+WvjArP17ubdGEyZtBzlIeG5nIjEbNOrQ==} '@vue/reactivity@3.5.26': resolution: {integrity: sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==} @@ -1825,8 +1846,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-prettier@5.5.4: - resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + eslint-plugin-prettier@5.5.5: + resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1839,8 +1860,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-vue@10.6.2: - resolution: {integrity: sha512-nA5yUs/B1KmKzvC42fyD0+l9Yd+LtEpVhWRbXuDj0e+ZURcTtyRbMDWUeJmTAh2wC6jC83raS63anNM2YT3NPw==} + eslint-plugin-vue@10.7.0: + resolution: {integrity: sha512-r2XFCK4qlo1sxEoAMIoTTX0PZAdla0JJDt1fmYiworZUX67WeEGqm+JbyAg3M+pGiJ5U6Mp5WQbontXWtIW7TA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -2330,12 +2351,12 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier@3.7.4: - resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + prettier@3.8.0: + resolution: {integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==} engines: {node: '>=14'} hasBin: true @@ -2415,8 +2436,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.54.0: - resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} + rollup@4.55.1: + resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2483,21 +2504,21 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + synckit@0.11.12: + resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} systemjs@6.15.1: resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==} - tabbable@6.3.0: - resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} tar-mini@0.2.0: resolution: {integrity: sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==} - terser@5.44.1: - resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} + terser@5.46.0: + resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} engines: {node: '>=10'} hasBin: true @@ -2509,8 +2530,8 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - ts-api-utils@2.3.0: - resolution: {integrity: sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2612,8 +2633,8 @@ packages: vite-plugin-compression2@2.4.0: resolution: {integrity: sha512-8J4CBF1+dM1I06azba/eXJuJHinLF0Am7lUvRH8AZpu0otJoBaDEnxrIEr5iPZJSwH0AEglJGYCveh7pN52jCg==} - vite@7.3.0: - resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2669,8 +2690,8 @@ packages: focus-trap: '>=7.2.0' vue: '>=3.2.0' - vue-i18n@11.2.7: - resolution: {integrity: sha512-LPv8bAY5OA0UvFEXl4vBQOBqJzRrlExy92tWgRuwW7tbykHf7CH71G2Y4TM2OwGcIS4+hyqKHS2EVBqaYwPY9Q==} + vue-i18n@11.2.8: + resolution: {integrity: sha512-vJ123v/PXCZntd6Qj5Jumy7UBmIuE92VrtdX+AXr+1WzdBHojiBxnAxdfctUFL+/JIN+VQH4BhsfTtiGsvVObg==} engines: {node: '>= 16'} peerDependencies: vue: ^3.0.0 @@ -2691,8 +2712,8 @@ packages: peerDependencies: vue: ^3.0.2 - vue-tsc@3.2.1: - resolution: {integrity: sha512-I23Rk8dkQfmcSbxDO0dmg9ioMLjKA1pjlU3Lz6Jfk2pMGu3Uryu9810XkcZH24IzPbhzPCnkKo2rEMRX0skSrw==} + vue-tsc@3.2.2: + resolution: {integrity: sha512-r9YSia/VgGwmbbfC06hDdAatH634XJ9nVl6Zrnz1iK4ucp8Wu78kawplXnIDa3MSu1XdQQePTHLXYwPDWn+nyQ==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -3558,6 +3579,11 @@ snapshots: eslint: 9.39.2 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2)': + dependencies: + eslint: 9.39.2 + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.2': {} '@eslint/config-array@0.21.1': @@ -3610,9 +3636,9 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@intlify/bundle-utils@11.0.3(vue-i18n@11.2.7(vue@3.5.26(typescript@5.9.3)))': + '@intlify/bundle-utils@11.0.3(vue-i18n@11.2.8(vue@3.5.26(typescript@5.9.3)))': dependencies: - '@intlify/message-compiler': 11.2.7 + '@intlify/message-compiler': 11.2.8 '@intlify/shared': 11.2.2 acorn: 8.15.0 esbuild: 0.25.12 @@ -3622,29 +3648,29 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.3.2 optionalDependencies: - vue-i18n: 11.2.7(vue@3.5.26(typescript@5.9.3)) + vue-i18n: 11.2.8(vue@3.5.26(typescript@5.9.3)) - '@intlify/core-base@11.2.7': + '@intlify/core-base@11.2.8': dependencies: - '@intlify/message-compiler': 11.2.7 - '@intlify/shared': 11.2.7 + '@intlify/message-compiler': 11.2.8 + '@intlify/shared': 11.2.8 - '@intlify/message-compiler@11.2.7': + '@intlify/message-compiler@11.2.8': dependencies: - '@intlify/shared': 11.2.7 + '@intlify/shared': 11.2.8 source-map-js: 1.2.1 '@intlify/shared@11.2.2': {} - '@intlify/shared@11.2.7': {} + '@intlify/shared@11.2.8': {} - '@intlify/unplugin-vue-i18n@11.0.3(@vue/compiler-dom@3.5.26)(eslint@9.39.2)(rollup@4.54.0)(typescript@5.9.3)(vue-i18n@11.2.7(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3))': + '@intlify/unplugin-vue-i18n@11.0.3(@vue/compiler-dom@3.5.26)(eslint@9.39.2)(rollup@4.55.1)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3))': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) - '@intlify/bundle-utils': 11.0.3(vue-i18n@11.2.7(vue@3.5.26(typescript@5.9.3))) + '@intlify/bundle-utils': 11.0.3(vue-i18n@11.2.8(vue@3.5.26(typescript@5.9.3))) '@intlify/shared': 11.2.2 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.2.2)(@vue/compiler-dom@3.5.26)(vue-i18n@11.2.7(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.2.2)(@vue/compiler-dom@3.5.26)(vue-i18n@11.2.8(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) + '@rollup/pluginutils': 5.3.0(rollup@4.55.1) '@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) debug: 4.4.3 @@ -3654,7 +3680,7 @@ snapshots: unplugin: 2.3.11 vue: 3.5.26(typescript@5.9.3) optionalDependencies: - vue-i18n: 11.2.7(vue@3.5.26(typescript@5.9.3)) + vue-i18n: 11.2.8(vue@3.5.26(typescript@5.9.3)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -3662,14 +3688,14 @@ snapshots: - supports-color - typescript - '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.2.2)(@vue/compiler-dom@3.5.26)(vue-i18n@11.2.7(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3))': + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.2.2)(@vue/compiler-dom@3.5.26)(vue-i18n@11.2.8(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3))': dependencies: '@babel/parser': 7.28.5 optionalDependencies: '@intlify/shared': 11.2.2 '@vue/compiler-dom': 3.5.26 vue: 3.5.26(typescript@5.9.3) - vue-i18n: 11.2.7(vue@3.5.26(typescript@5.9.3)) + vue-i18n: 11.2.8(vue@3.5.26(typescript@5.9.3)) '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -3711,81 +3737,90 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.53': {} - '@rollup/pluginutils@5.3.0(rollup@4.54.0)': + '@rollup/pluginutils@5.3.0(rollup@4.55.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.54.0 + rollup: 4.55.1 - '@rollup/rollup-android-arm-eabi@4.54.0': + '@rollup/rollup-android-arm-eabi@4.55.1': optional: true - '@rollup/rollup-android-arm64@4.54.0': + '@rollup/rollup-android-arm64@4.55.1': optional: true - '@rollup/rollup-darwin-arm64@4.54.0': + '@rollup/rollup-darwin-arm64@4.55.1': optional: true - '@rollup/rollup-darwin-x64@4.54.0': + '@rollup/rollup-darwin-x64@4.55.1': optional: true - '@rollup/rollup-freebsd-arm64@4.54.0': + '@rollup/rollup-freebsd-arm64@4.55.1': optional: true - '@rollup/rollup-freebsd-x64@4.54.0': + '@rollup/rollup-freebsd-x64@4.55.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.54.0': + '@rollup/rollup-linux-arm-musleabihf@4.55.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.54.0': + '@rollup/rollup-linux-arm64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.54.0': + '@rollup/rollup-linux-arm64-musl@4.55.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-musl@4.55.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.54.0': + '@rollup/rollup-linux-ppc64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.54.0': + '@rollup/rollup-linux-ppc64-musl@4.55.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-musl@4.55.1': optional: true - '@rollup/rollup-linux-x64-musl@4.54.0': + '@rollup/rollup-linux-s390x-gnu@4.55.1': optional: true - '@rollup/rollup-openharmony-arm64@4.54.0': + '@rollup/rollup-linux-x64-gnu@4.55.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.54.0': + '@rollup/rollup-linux-x64-musl@4.55.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.54.0': + '@rollup/rollup-openbsd-x64@4.55.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.54.0': + '@rollup/rollup-openharmony-arm64@4.55.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.54.0': + '@rollup/rollup-win32-arm64-msvc@4.55.1': optional: true - '@tsconfig/node24@24.0.3': {} + '@rollup/rollup-win32-ia32-msvc@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.55.1': + optional: true + + '@tsconfig/node24@24.0.4': {} '@types/estree@1.0.8': {} @@ -3801,7 +3836,7 @@ snapshots: '@types/lodash@4.17.13': {} - '@types/node@24.10.4': + '@types/node@24.10.9': dependencies: undici-types: 7.16.0 @@ -3822,23 +3857,23 @@ snapshots: graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.50.1(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.53.0(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 '@typescript-eslint/parser': 8.37.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.50.1 - '@typescript-eslint/type-utils': 8.50.1(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.1(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.50.1 + '@typescript-eslint/scope-manager': 8.53.0 + '@typescript-eslint/type-utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.53.0 eslint: 9.39.2 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3873,10 +3908,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.50.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.53.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.9.3) - '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) + '@typescript-eslint/types': 8.53.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: @@ -3892,10 +3927,10 @@ snapshots: '@typescript-eslint/types': 8.49.0 '@typescript-eslint/visitor-keys': 8.49.0 - '@typescript-eslint/scope-manager@8.50.1': + '@typescript-eslint/scope-manager@8.53.0': dependencies: - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/visitor-keys': 8.50.1 + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/visitor-keys': 8.53.0 '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.9.3)': dependencies: @@ -3905,7 +3940,7 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.50.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.53.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -3916,19 +3951,19 @@ snapshots: '@typescript-eslint/utils': 8.37.0(eslint@9.39.2)(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.50.1(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.53.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.1(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3937,7 +3972,7 @@ snapshots: '@typescript-eslint/types@8.49.0': {} - '@typescript-eslint/types@8.50.1': {} + '@typescript-eslint/types@8.53.0': {} '@typescript-eslint/typescript-estree@8.37.0(typescript@5.9.3)': dependencies: @@ -3950,7 +3985,7 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3965,29 +4000,29 @@ snapshots: minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.50.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.53.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.50.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.9.3) - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/visitor-keys': 8.50.1 + '@typescript-eslint/project-service': 8.53.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/visitor-keys': 8.53.0 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/utils@8.37.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) '@typescript-eslint/scope-manager': 8.37.0 '@typescript-eslint/types': 8.37.0 '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.9.3) @@ -3996,12 +4031,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.50.1(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/utils@8.53.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) - '@typescript-eslint/scope-manager': 8.50.1 - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) + '@typescript-eslint/scope-manager': 8.53.0 + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) eslint: 9.39.2 typescript: 5.9.3 transitivePeerDependencies: @@ -4017,9 +4052,9 @@ snapshots: '@typescript-eslint/types': 8.49.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.50.1': + '@typescript-eslint/visitor-keys@8.53.0': dependencies: - '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/types': 8.53.0 eslint-visitor-keys: 4.2.1 '@videojs/http-streaming@3.17.2(video.js@8.23.4)': @@ -4044,7 +4079,7 @@ snapshots: global: 4.4.0 is-function: 1.0.2 - '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2))': + '@vitejs/plugin-legacy@7.2.1(terser@5.46.0)(vite@7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) @@ -4058,15 +4093,15 @@ snapshots: magic-string: 0.30.21 regenerator-runtime: 0.14.1 systemjs: 6.15.1 - terser: 5.44.1 - vite: 7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2) + terser: 5.46.0 + vite: 7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.3(vite@7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.3(vite@7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.53 - vite: 7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2) vue: 3.5.26(typescript@5.9.3) '@volar/language-core@2.4.27': @@ -4131,20 +4166,20 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/eslint-config-prettier@10.2.0(eslint@9.39.2)(prettier@3.7.4)': + '@vue/eslint-config-prettier@10.2.0(eslint@9.39.2)(prettier@3.8.0)': dependencies: eslint: 9.39.2 eslint-config-prettier: 10.1.8(eslint@9.39.2) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.7.4) - prettier: 3.7.4 + eslint-plugin-prettier: 5.5.5(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.8.0) + prettier: 3.8.0 transitivePeerDependencies: - '@types/eslint' - '@vue/eslint-config-typescript@14.6.0(eslint-plugin-vue@10.6.2(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)))(eslint@9.39.2)(typescript@5.9.3)': + '@vue/eslint-config-typescript@14.6.0(eslint-plugin-vue@10.7.0(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)))(eslint@9.39.2)(typescript@5.9.3)': dependencies: '@typescript-eslint/utils': 8.37.0(eslint@9.39.2)(typescript@5.9.3) eslint: 9.39.2 - eslint-plugin-vue: 10.6.2(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)) + eslint-plugin-vue: 10.7.0(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)) fast-glob: 3.3.3 typescript-eslint: 8.37.0(eslint@9.39.2)(typescript@5.9.3) vue-eslint-parser: 10.2.0(eslint@9.39.2) @@ -4153,7 +4188,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vue/language-core@3.2.1': + '@vue/language-core@3.2.2': dependencies: '@volar/language-core': 2.4.27 '@vue/compiler-dom': 3.5.26 @@ -4508,18 +4543,18 @@ snapshots: dependencies: eslint: 9.39.2 - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.7.4): + eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.8.0): dependencies: eslint: 9.39.2 - prettier: 3.7.4 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 + prettier: 3.8.0 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.12 optionalDependencies: eslint-config-prettier: 10.1.8(eslint@9.39.2) - eslint-plugin-vue@10.6.2(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)): + eslint-plugin-vue@10.7.0(@typescript-eslint/parser@8.37.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) eslint: 9.39.2 natural-compare: 1.4.0 nth-check: 2.1.1 @@ -4670,7 +4705,7 @@ snapshots: focus-trap@7.6.2: dependencies: - tabbable: 6.3.0 + tabbable: 6.4.0 fraction.js@5.3.4: {} @@ -4980,11 +5015,11 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: + prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 - prettier@3.7.4: {} + prettier@3.8.0: {} pretty-bytes@7.1.0: {} @@ -5057,32 +5092,35 @@ snapshots: rfdc@1.4.1: {} - rollup@4.54.0: + rollup@4.55.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.54.0 - '@rollup/rollup-android-arm64': 4.54.0 - '@rollup/rollup-darwin-arm64': 4.54.0 - '@rollup/rollup-darwin-x64': 4.54.0 - '@rollup/rollup-freebsd-arm64': 4.54.0 - '@rollup/rollup-freebsd-x64': 4.54.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 - '@rollup/rollup-linux-arm-musleabihf': 4.54.0 - '@rollup/rollup-linux-arm64-gnu': 4.54.0 - '@rollup/rollup-linux-arm64-musl': 4.54.0 - '@rollup/rollup-linux-loong64-gnu': 4.54.0 - '@rollup/rollup-linux-ppc64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-musl': 4.54.0 - '@rollup/rollup-linux-s390x-gnu': 4.54.0 - '@rollup/rollup-linux-x64-gnu': 4.54.0 - '@rollup/rollup-linux-x64-musl': 4.54.0 - '@rollup/rollup-openharmony-arm64': 4.54.0 - '@rollup/rollup-win32-arm64-msvc': 4.54.0 - '@rollup/rollup-win32-ia32-msvc': 4.54.0 - '@rollup/rollup-win32-x64-gnu': 4.54.0 - '@rollup/rollup-win32-x64-msvc': 4.54.0 + '@rollup/rollup-android-arm-eabi': 4.55.1 + '@rollup/rollup-android-arm64': 4.55.1 + '@rollup/rollup-darwin-arm64': 4.55.1 + '@rollup/rollup-darwin-x64': 4.55.1 + '@rollup/rollup-freebsd-arm64': 4.55.1 + '@rollup/rollup-freebsd-x64': 4.55.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 + '@rollup/rollup-linux-arm-musleabihf': 4.55.1 + '@rollup/rollup-linux-arm64-gnu': 4.55.1 + '@rollup/rollup-linux-arm64-musl': 4.55.1 + '@rollup/rollup-linux-loong64-gnu': 4.55.1 + '@rollup/rollup-linux-loong64-musl': 4.55.1 + '@rollup/rollup-linux-ppc64-gnu': 4.55.1 + '@rollup/rollup-linux-ppc64-musl': 4.55.1 + '@rollup/rollup-linux-riscv64-gnu': 4.55.1 + '@rollup/rollup-linux-riscv64-musl': 4.55.1 + '@rollup/rollup-linux-s390x-gnu': 4.55.1 + '@rollup/rollup-linux-x64-gnu': 4.55.1 + '@rollup/rollup-linux-x64-musl': 4.55.1 + '@rollup/rollup-openbsd-x64': 4.55.1 + '@rollup/rollup-openharmony-arm64': 4.55.1 + '@rollup/rollup-win32-arm64-msvc': 4.55.1 + '@rollup/rollup-win32-ia32-msvc': 4.55.1 + '@rollup/rollup-win32-x64-gnu': 4.55.1 + '@rollup/rollup-win32-x64-msvc': 4.55.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -5132,17 +5170,17 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - synckit@0.11.11: + synckit@0.11.12: dependencies: '@pkgr/core': 0.2.9 systemjs@6.15.1: {} - tabbable@6.3.0: {} + tabbable@6.4.0: {} tar-mini@0.2.0: {} - terser@5.44.1: + terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 @@ -5158,7 +5196,7 @@ snapshots: dependencies: is-number: 7.0.0 - ts-api-utils@2.3.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -5271,25 +5309,25 @@ snapshots: dependencies: global: 4.4.0 - vite-plugin-compression2@2.4.0(rollup@4.54.0): + vite-plugin-compression2@2.4.0(rollup@4.55.1): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.55.1) tar-mini: 0.2.0 transitivePeerDependencies: - rollup - vite@7.3.0(@types/node@24.10.4)(terser@5.44.1)(yaml@2.8.2): + vite@7.3.1(@types/node@24.10.9)(terser@5.46.0)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.54.0 + rollup: 4.55.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.4 + '@types/node': 24.10.9 fsevents: 2.3.3 - terser: 5.44.1 + terser: 5.46.0 yaml: 2.8.2 vscode-uri@3.1.0: {} @@ -5313,10 +5351,10 @@ snapshots: focus-trap: 7.6.2 vue: 3.5.26(typescript@5.9.3) - vue-i18n@11.2.7(vue@3.5.26(typescript@5.9.3)): + vue-i18n@11.2.8(vue@3.5.26(typescript@5.9.3)): dependencies: - '@intlify/core-base': 11.2.7 - '@intlify/shared': 11.2.7 + '@intlify/core-base': 11.2.8 + '@intlify/shared': 11.2.8 '@vue/devtools-api': 6.6.4 vue: 3.5.26(typescript@5.9.3) @@ -5335,10 +5373,10 @@ snapshots: dependencies: vue: 3.5.26(typescript@5.9.3) - vue-tsc@3.2.1(typescript@5.9.3): + vue-tsc@3.2.2(typescript@5.9.3): dependencies: '@volar/typescript': 2.4.27 - '@vue/language-core': 3.2.1 + '@vue/language-core': 3.2.2 typescript: 5.9.3 vue@3.5.26(typescript@5.9.3): diff --git a/frontend/src/api/pub.ts b/frontend/src/api/pub.ts index 964cb030..5070cae3 100644 --- a/frontend/src/api/pub.ts +++ b/frontend/src/api/pub.ts @@ -41,12 +41,12 @@ export function download( let url = `${baseURL}/api/public/dl/${hash}`; if (files.length === 1) { - url += encodeURIComponent(files[0]) + "?"; + url += files[0] + "?"; } else { let arg = ""; for (const file of files) { - arg += encodeURIComponent(file) + ","; + arg += file + ","; } arg = arg.substring(0, arg.length - 1); diff --git a/frontend/src/api/users.ts b/frontend/src/api/users.ts index 78096b49..dc45e084 100644 --- a/frontend/src/api/users.ts +++ b/frontend/src/api/users.ts @@ -8,12 +8,13 @@ export async function get(id: number) { return fetchJSON(`/api/users/${id}`, {}); } -export async function create(user: IUser) { +export async function create(user: IUser, currentPassword: string) { const res = await fetchURL(`/api/users`, { method: "POST", body: JSON.stringify({ what: "user", which: [], + current_password: currentPassword, data: user, }), }); @@ -25,19 +26,30 @@ export async function create(user: IUser) { throw new StatusError(await res.text(), res.status); } -export async function update(user: Partial, which = ["all"]) { +export async function update( + user: Partial, + which = ["all"], + currentPassword: string | null = null +) { await fetchURL(`/api/users/${user.id}`, { method: "PUT", body: JSON.stringify({ what: "user", which: which, + ...(currentPassword != null ? { current_password: currentPassword } : {}), data: user, }), }); } -export async function remove(id: number) { +export async function remove( + id: number, + currentPassword: string | null = null +) { await fetchURL(`/api/users/${id}`, { method: "DELETE", + body: JSON.stringify({ + ...(currentPassword != null ? { current_password: currentPassword } : {}), + }), }); } diff --git a/frontend/src/components/prompts/Copy.vue b/frontend/src/components/prompts/Copy.vue index 9b5e4c63..09040e0a 100644 --- a/frontend/src/components/prompts/Copy.vue +++ b/frontend/src/components/prompts/Copy.vue @@ -109,7 +109,8 @@ export default { return; } - this.$router.push({ path: this.dest }); + if (this.user.redirectAfterCopyMove) + this.$router.push({ path: this.dest }); }) .catch((e) => { buttons.done("copy"); diff --git a/frontend/src/components/prompts/Move.vue b/frontend/src/components/prompts/Move.vue index d92e4b6e..0fec8679 100644 --- a/frontend/src/components/prompts/Move.vue +++ b/frontend/src/components/prompts/Move.vue @@ -79,7 +79,7 @@ export default { computed: { ...mapState(useFileStore, ["req", "selected"]), ...mapState(useAuthStore, ["user"]), - ...mapWritableState(useFileStore, ["preselect"]), + ...mapWritableState(useFileStore, ["reload", "preselect"]), excludedFolders() { return this.selected .filter((idx) => this.req.items[idx].isDir) @@ -108,7 +108,9 @@ export default { .then(() => { buttons.success("move"); this.preselect = removePrefix(items[0].to); - this.$router.push({ path: this.dest }); + if (this.user.redirectAfterCopyMove) + this.$router.push({ path: this.dest }); + else this.reload = true; }) .catch((e) => { buttons.done("move"); diff --git a/frontend/src/css/base.css b/frontend/src/css/base.css index be5b0b98..f0b8ef0c 100644 --- a/frontend/src/css/base.css +++ b/frontend/src/css/base.css @@ -185,3 +185,7 @@ html[dir="rtl"] .breadcrumbs a { .vfm-modal { z-index: 9999999 !important; } + +body > div[style*="z-index: 9990"] { + z-index: 10000 !important; +} diff --git a/frontend/src/i18n/ar.json b/frontend/src/i18n/ar.json index b6d1d39b..b8f431eb 100644 --- a/frontend/src/i18n/ar.json +++ b/frontend/src/i18n/ar.json @@ -24,7 +24,7 @@ "ok": "موافق", "permalink": "الحصول على رابط دائم", "previous": "السابق", - "preview": "Preview", + "preview": "معاينة", "publish": "نشر", "rename": "إعادة تسمية", "replace": "استبدال", @@ -43,11 +43,11 @@ "upload": "رفع", "openFile": "فتح الملف", "discardChanges": "إلغاء التغييرات", - "stopSearch": "Stop searching", - "saveChanges": "Save changes", - "editAsText": "Edit as Text", - "increaseFontSize": "Increase font size", - "decreaseFontSize": "Decrease font size" + "stopSearch": "توقف عن البحث", + "saveChanges": "حفظ التغييرات", + "editAsText": "تعديل على شكل نص", + "increaseFontSize": "زيادة حجم الخط", + "decreaseFontSize": "تصغير حجم الخط" }, "download": { "downloadFile": "تحميل الملف", @@ -80,7 +80,7 @@ "sortByName": "الترتيب باﻹسم", "sortBySize": "الترتيب بالحجم", "noPreview": "لا يوجد عرض مسبق لهذا الملف.", - "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", + "csvTooLarge": "حجم الملف اكبر من (<5MB), يرجى تحميل الملف للمعاينة", "csvLoadFailed": "Failed to load CSV file.", "showingRows": "Showing {count} row(s)", "columnSeparator": "Column Separator", @@ -138,7 +138,7 @@ "filesSelected": "تم تحديد {count} ملفات.", "lastModified": "آخر تعديل", "move": "نقل", - "moveMessage": "إختر مكان جديد للملفات أو المجلدات المراد نقلها:", + "moveMessage": "اختر منزلاً جديداً لملفك (ملفاتك)/مجلدك (مجلداتك):", "newArchetype": "إنشاء منشور من المنشور اﻷصلي. الملف سيتم انشاءه في مجلد المحتويات.", "newDir": "مجلد جديد", "newDirMessage": "أدخل اسم المجلد الجديد.", @@ -189,15 +189,15 @@ "commandRunner": "منفذ اﻷوامر", "commandRunnerHelp": "هنا بإمكانك تعيين اﻷوامر التي سيتم تنفيذها في اﻷحداث المسماة. يجب كتابة أمر واحد في كل سطر. ستكون المتغيرات البيئية (env) {0} و {1} متاحة، حيث {0} نسبي لـ {1}. لمزيد من المعلومات حول هذه الميزة و المتغيرات البيئية المتاحة، يرجى قراءة {2}.", "commandsUpdated": "تم تحديث اﻷوامر", - "createUserDir": "إنشاء مجلد المستخدم (home) تلقائياً عند إنشاء مستخدم جديد", + "createUserDir": "إنشاء مجلد المستخدم الرئيسي تلقائياً عند إنشاء مستخدم جديد", "minimumPasswordLength": "Minimum password length", "tusUploads": "التحميلات المتقطعة", "tusUploadsHelp": "يدعم متصفح الملفات تحميل الملفات المتقطعة، مما يسمح بتحميلات الملفات بشكل فعال و موثوق و قابلة للمتابغة و متقطعة حتى على الشبكات غير الموثوقة.", "tusUploadsChunkSize": "يشير إلى الحد اﻷقصى لحجم الطلب (سيتم استخدام التحميل المباشر للتحميلات صغيرة الخحم). يمكنك إدخال عدد صحيح عادي يدل على الحجم بوحدة البايت أو نمظ مثل10MB, 1GB, إلخ.", "tusUploadsRetryCount": "عدد مرات إعادة المحاولة إذا فشلت عملية تحميل القطعة.", - "userHomeBasePath": "المسار الرئيسي لمجلد المستخدم (home)", + "userHomeBasePath": "المسار الرئيسي لمجلد المستخدم الرئيسي", "userScopeGenerationPlaceholder": "سيتم تعيين نطاق المستخدم تلقائياً", - "createUserHomeDirectory": "إنشاء مجلد المستخدم (home)", + "createUserHomeDirectory": "إنشاء مجلد المستخدم الرئيسي", "customStylesheet": "ستايل مخصص", "defaultUserDescription": "هذه اﻹعدادات اﻹفتراضية للمستخدمين الجدد.", "disableExternalLinks": "تعطيل الروابط الخارجية (بإسثناء الوثائق)", @@ -232,6 +232,7 @@ "permissions": "الصلاحيات", "permissionsHelp": "يمكنك تعيين المستخدم كـ \"مدير\" أو تحديد الصلاحيات بشكل منفرد.\n إذا قمت بتحديد المستخدم كـ \"مدير\"، باقي الخيارات سيتم تحديدها تلقائياً.\n إدارة المستخدمين تبقى صلاحية فريدة للـ \"مدير\" فقط.\n", "profileSettings": "إعدادات الحساب", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "منع الوصول إلى الملفات التي تبدأ بنقطة مثل (.git، و .gitignore) في كل مجلد.\n", "ruleExample2": "منع الوصول إلى الملف المسمى Caddyfile في نطاق الجذر.", "rules": "المجموعات", @@ -258,7 +259,8 @@ "userManagement": "إدارة المستخدمين", "userUpdated": "تم تعديل المستخدم", "username": "إسم المستخدم", - "users": "المستخدمين" + "users": "المستخدمين", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "مساعدة", diff --git a/frontend/src/i18n/bg.json b/frontend/src/i18n/bg.json index 2f1b2a06..d1388d3f 100644 --- a/frontend/src/i18n/bg.json +++ b/frontend/src/i18n/bg.json @@ -232,6 +232,7 @@ "permissions": "Разрешения", "permissionsHelp": "Можете да зададете потребител да бъде администратор или да изберете разрешения индивидуално. Ако изберете \"Администратор\" всички други опции ще бъдат автоматично отметнати. Управлението на потребителите е привилегия на администратор.\n", "profileSettings": "Настройки на Профила", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "предотвратете достъпа до всеки файл започващ с точка (като .git, .gitignore) във всяка папка.\n", "ruleExample2": "блокира достъпа до файл именуван Caddyfile поставен в началото за обхвата.", "rules": "Правила", @@ -258,7 +259,8 @@ "userManagement": "Управление на потребители", "userUpdated": "Потребителя е обновен!", "username": "Потребителско име", - "users": "Потребители" + "users": "Потребители", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Помощ", diff --git a/frontend/src/i18n/ca.json b/frontend/src/i18n/ca.json index f269f06b..2ca2b5d4 100644 --- a/frontend/src/i18n/ca.json +++ b/frontend/src/i18n/ca.json @@ -232,6 +232,7 @@ "permissions": "Permisos", "permissionsHelp": "Pots nomenar l'usuari com a administrador o triar els permisos individualment. Si selecciones \"Administrador\", totes les altres opcions s'activaran automàticament. L'administració d'usuaris és un privilegi d'administrador.\n", "profileSettings": "Ajustos del perfil", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "prevé l'accés a una extensió de fitxer (Com .git) en cada carpeta.\n", "ruleExample2": "bloqueja l'accés al fitxer anomenat Caddyfile a la carpeta arrel.", "rules": "Regles", @@ -258,7 +259,8 @@ "userManagement": "Administració d'usuaris", "userUpdated": "Usuari actualitzat!", "username": "Usuari", - "users": "Usuaris" + "users": "Usuaris", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ajuda", diff --git a/frontend/src/i18n/cs.json b/frontend/src/i18n/cs.json index dce412dd..d57c4336 100644 --- a/frontend/src/i18n/cs.json +++ b/frontend/src/i18n/cs.json @@ -232,6 +232,7 @@ "permissions": "Oprávnění", "permissionsHelp": "Můžete nastavit uživatele jako administrátora nebo zvolit jednotlivá oprávnění. Pokud vyberete \"Administrátor\", všechny ostatní možnosti budou automaticky zaškrtnuty. Správa uživatelů zůstává výsadou administrátora.\n", "profileSettings": "Nastavení profilu", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "zabraňuje přístupu k jakémukoli skrytému souboru (např. .git, .gitignore) v každé složce.\n", "ruleExample2": "blokuje přístup k souboru s názvem Caddyfile v kořenovém adresáři.", "rules": "Pravidla", @@ -258,7 +259,8 @@ "userManagement": "Správa uživatelů", "userUpdated": "Uživatel aktualizován!", "username": "Uživatelské jméno", - "users": "Uživatelé" + "users": "Uživatelé", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Nápověda", diff --git a/frontend/src/i18n/de.json b/frontend/src/i18n/de.json index 4f398cfa..872b29e2 100644 --- a/frontend/src/i18n/de.json +++ b/frontend/src/i18n/de.json @@ -43,11 +43,11 @@ "upload": "Upload", "openFile": "Datei öffnen", "discardChanges": "Verwerfen", - "stopSearch": "Stop searching", + "stopSearch": "Suche abbrechen", "saveChanges": "Änderungen speichern", "editAsText": "Als Text bearbeiten", - "increaseFontSize": "Increase font size", - "decreaseFontSize": "Decrease font size" + "increaseFontSize": "Schriftgröße vergrößern", + "decreaseFontSize": "Schriftgröße verkleinern" }, "download": { "downloadFile": "Download Datei", @@ -82,12 +82,12 @@ "noPreview": "Für diese Datei ist keine Vorschau verfügbar.", "csvTooLarge": "Die CSV-Datei ist zu groß für die Vorschau (>5 MB). Bitte herunterladen, um sie anzuzeigen.", "csvLoadFailed": "Fehler beim Laden der CSV-Datei.", - "showingRows": "Showing {count} row(s)", - "columnSeparator": "Column Separator", + "showingRows": "{count} Zeile(n) werden angezeigt", + "columnSeparator": "Spaltentrennzeichen", "csvSeparators": { - "comma": "Comma (,)", - "semicolon": "Semicolon (;)", - "both": "Both (,) and (;)" + "comma": "Komma (,)", + "semicolon": "Semikolon (;)", + "both": "Sowohl (,) als auch (;)" } }, "help": { @@ -214,7 +214,7 @@ "instanceName": "Instanzname", "language": "Sprache", "lockPassword": "Verhindere, dass der Benutzer sein Passwort ändert", - "newPassword": "Ihr neues Passwort.", + "newPassword": "Ihr neues Passwort", "newPasswordConfirm": "Bestätigen Sie Ihr neues Passwort", "newUser": "Neuer Benutzer", "password": "Passwort", @@ -232,6 +232,7 @@ "permissions": "Berechtigungen", "permissionsHelp": "Sie können einem Benutzer Administratorrechte einräumen oder die Berechtigungen individuell festlegen. Wenn Sie \"Administrator\" auswählen, werden alle anderen Rechte automatisch vergeben. Die Nutzerverwaltung kann nur durch einen Administrator erfolgen.\n", "profileSettings": "Profileinstellungen", + "redirectAfterCopyMove": "Nach Kopieren/Verschieben zum Zielverzeichnis wechseln", "ruleExample1": "Verhindert den Zugang zu versteckten Dateien (dot-Files, wie .git, .gitignore) in allen Ordnern\n", "ruleExample2": "blockiert den Zugang auf Dateien mit dem Namen Caddyfile in der Wurzel/Basis des Scopes.", "rules": "Regeln", @@ -258,7 +259,8 @@ "userManagement": "Benutzerverwaltung", "userUpdated": "Benutzer aktualisiert!", "username": "Nutzername", - "users": "Nutzer" + "users": "Nutzer", + "currentPassword": "Ihr aktuelles Passwort" }, "sidebar": { "help": "Hilfe", diff --git a/frontend/src/i18n/el.json b/frontend/src/i18n/el.json index 8f61e538..04e837f3 100644 --- a/frontend/src/i18n/el.json +++ b/frontend/src/i18n/el.json @@ -232,6 +232,7 @@ "permissions": "Δικαιώματα", "permissionsHelp": "Μπορείτε να ορίσετε τον χρήστη ως διαχειριστή ή να επιλέξετε τα δικαιώματα μεμονωμένα. Αν επιλέξετε \"Διαχειριστής\", όλες οι υπόλοιπες επιλογές θα είναι αυτόματα επιλεγμένες. Η διαχείριση χρηστών παραμένει προνόμιο ενός χρήστη με τον ρόλο του διαχειριστή.\n", "profileSettings": "Ρυθμίσεις προφίλ", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "αποκλείει την πρόσβαση σε οποιοδήποτε κρυφό αρχείο (όπως .git, .gitignore) σε κάθε φάκελο.\n", "ruleExample2": "αποκλείει την πρόσβαση στο αρχείο με το όνομα Caddyfile στον ριζικό φάκελο της εμβέλειας του κανόνα.", "rules": "Κανόνες", @@ -258,7 +259,8 @@ "userManagement": "Διαχείριση χρηστών", "userUpdated": "Ο χρήστης ενημερώθηκε!", "username": "Όνομα χρήστη", - "users": "Χρήστες" + "users": "Χρήστες", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Βοήθεια", diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index de5368bd..3fcdf635 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -232,6 +232,7 @@ "permissions": "Permissions", "permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n", "profileSettings": "Profile Settings", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "prevents the access to any dotfile (such as .git, .gitignore) in every folder.\n", "ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.", "rules": "Rules", @@ -258,7 +259,8 @@ "userManagement": "User Management", "userUpdated": "User updated!", "username": "Username", - "users": "Users" + "users": "Users", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Help", diff --git a/frontend/src/i18n/es.json b/frontend/src/i18n/es.json index a60f84a0..aaab108b 100644 --- a/frontend/src/i18n/es.json +++ b/frontend/src/i18n/es.json @@ -232,6 +232,7 @@ "permissions": "Permisos", "permissionsHelp": "Puedes nombrar al usuario como administrador o elegir los permisos individualmente. Si seleccionas \"Administrador\", todas las otras opciones serán activadas automáticamente. La administración de usuarios es un privilegio de administrador.\n", "profileSettings": "Ajustes del perfil", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "previene el acceso a una extensión de archivo (Como .git) en cada carpeta.\n", "ruleExample2": "bloquea el acceso al archivo llamado Caddyfile en la carpeta raíz.", "rules": "Reglas", @@ -258,7 +259,8 @@ "userManagement": "Administración de usuarios", "userUpdated": "¡Usuario actualizado!", "username": "Usuario", - "users": "Usuarios" + "users": "Usuarios", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ayuda", diff --git a/frontend/src/i18n/fa.json b/frontend/src/i18n/fa.json index fb26f19c..3484d3a0 100644 --- a/frontend/src/i18n/fa.json +++ b/frontend/src/i18n/fa.json @@ -232,6 +232,7 @@ "permissions": "دسترسی ها", "permissionsHelp": "شما می‌توانید کاربر را به عنوان مدیر تنظیم کنید یا دسترسی‌ها را به صورت جداگانه انتخاب کنید. اگر \"مدیر\" را انتخاب کنید، تمام گزینه‌های دیگر به طور خودکار اعمال می‌شوند. مدیریت کاربران همچنان از اختیارات مدیر است.", "profileSettings": "تنظیمات ناحیه کاربری", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "از دسترسی به هرگونه فایل نقطه‌ای (مانند .git، .gitignore) در هر پوشه جلوگیری می‌کند.", "ruleExample2": "دسترسی به فایلی به نام Caddyfile را در ریشه دامنه مسدود می‌کند.", "rules": "قواعد", @@ -258,7 +259,8 @@ "userManagement": "مدیریت کاربران", "userUpdated": "کاربر به روز شد!", "username": "نام کاربری", - "users": "کاربران" + "users": "کاربران", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "راهنما", diff --git a/frontend/src/i18n/fr.json b/frontend/src/i18n/fr.json index 1710b637..798cee50 100644 --- a/frontend/src/i18n/fr.json +++ b/frontend/src/i18n/fr.json @@ -43,11 +43,11 @@ "upload": "Importer", "openFile": "Ouvrir le fichier", "discardChanges": "Annuler", - "stopSearch": "Stop searching", - "saveChanges": "Save changes", - "editAsText": "Edit as Text", - "increaseFontSize": "Increase font size", - "decreaseFontSize": "Decrease font size" + "stopSearch": "Arrêter recherche", + "saveChanges": "Enregistrer changements", + "editAsText": "Editer comme Texte", + "increaseFontSize": "Augmenter taille police", + "decreaseFontSize": "Réduire taille police" }, "download": { "downloadFile": "Télécharger le fichier", @@ -80,14 +80,14 @@ "sortByName": "Trier par nom", "sortBySize": "Trier par taille", "noPreview": "L'aperçu n'est pas disponible pour ce fichier.", - "csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.", - "csvLoadFailed": "Failed to load CSV file.", - "showingRows": "Showing {count} row(s)", - "columnSeparator": "Column Separator", + "csvTooLarge": "Le fichier CSV est trop volumineux pour être prévisualisé (>5MB). Veuillez le télécharger pour le voir.", + "csvLoadFailed": "Impossible de charger le fichier CSV.", + "showingRows": "Affichage de {count} ligne(s)", + "columnSeparator": "Séparateur de Colonnes", "csvSeparators": { - "comma": "Comma (,)", - "semicolon": "Semicolon (;)", - "both": "Both (,) and (;)" + "comma": "Virgule (,)", + "semicolon": "Point-virgule (;)", + "both": "Les (,) et (;)" } }, "help": { @@ -115,9 +115,9 @@ "username": "Utilisateur·ice", "usernameTaken": "Le nom d'utilisateur·ice est déjà pris", "wrongCredentials": "Identifiants incorrects !", - "passwordTooShort": "Password must be at least {min} characters", + "passwordTooShort": "Le mot de passe doit contenir au moins {min} caractères", "logout_reasons": { - "inactivity": "You have been logged out due to inactivity." + "inactivity": "Vous avez été déconnecté(e) en raison d'une inactivité prolongée." } }, "permanent": "Permanent", @@ -172,7 +172,7 @@ "video": "Vidéo" }, "settings": { - "aceEditorTheme": "Ace editor theme", + "aceEditorTheme": "Éditeur de Thème Ace", "admin": "Admin", "administrator": "Administrateur·ice", "allowCommands": "Exécuter des commandes", @@ -180,7 +180,7 @@ "allowNew": "Créer de nouveaux fichiers et dossiers", "allowPublish": "Publier de nouveaux posts et pages", "allowSignup": "Autoriser les utilisateur·ices à s'inscrire", - "hideLoginButton": "Hide the login button from public pages", + "hideLoginButton": "Cacher le bouton d’identification sur les pages publiques", "avoidChanges": "(Laisser vide pour conserver l'actuel)", "branding": "Image de marque", "brandingDirectoryPath": "Chemin du dossier d'image de marque", @@ -232,6 +232,7 @@ "permissions": "Permissions", "permissionsHelp": "Vous pouvez définir l'utilisateur·ice comme étant administrateur·ice ou encore choisir les permissions individuellement. Si vous sélectionnez \"Administrateur·ice\", toutes les autres options seront automatiquement activées. La gestion des utilisateur·ices est un privilège que seul l'administrateur·ice possède.\n", "profileSettings": "Paramètres du profil", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "Bloque l'accès à tous les fichiers commençant par un point (comme par exemple .git, .gitignore) dans tous les dossiers.\n", "ruleExample2": "Bloque l'accès au fichier nommé \"Caddyfile\" à la racine du dossier utilisateur·ice.", "rules": "Règles", @@ -258,7 +259,8 @@ "userManagement": "Gestion des utilisateur·ices", "userUpdated": "Utilisateur·ice mis à jour !", "username": "Nom d'utilisateur·ice", - "users": "Utilisateur·ices" + "users": "Utilisateur·ices", + "currentPassword": "Mot de Passe Actuel" }, "sidebar": { "help": "Aide", diff --git a/frontend/src/i18n/he.json b/frontend/src/i18n/he.json index 1f896bcf..f340feca 100644 --- a/frontend/src/i18n/he.json +++ b/frontend/src/i18n/he.json @@ -232,6 +232,7 @@ "permissions": "הרשאות", "permissionsHelp": "אתה יכול להגדיר את המשתמש להיות מנהל מערכת או לבחור את ההרשאות בנפרד. אם תבחר \"מנהל מערכת\", כל ההרשאות יינתנו אוטומטית. ניהול המשתמשים נשאר הרשאה של מנהל מערכת.\n", "profileSettings": "הגדרות פרופיל", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "מנע גישה לקבצים נסתרים (כל קובץ/תיקייה שמתחיל בנקודה, לדוגמא .git)", "ruleExample2": "חסימת גישה לקובץ בשם Caddyfile בהיקף הראשי.", "rules": "חוקים", @@ -258,7 +259,8 @@ "userManagement": "ניהול משתמש", "userUpdated": "המשתמש עודכן!", "username": "שם משתמש", - "users": "משתמשים" + "users": "משתמשים", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "עזרה", diff --git a/frontend/src/i18n/hr.json b/frontend/src/i18n/hr.json index 42fa9bea..e21ffd80 100644 --- a/frontend/src/i18n/hr.json +++ b/frontend/src/i18n/hr.json @@ -232,6 +232,7 @@ "permissions": "Dopuštenja", "permissionsHelp": "Korisnika možete postaviti administratorom ili odabrati dopuštenja individualno. Odabirom na \"Administrator\", sve druge opcije bit će automatski odabrane. Upravljanje korisnicima ostaje privilegija administratora.\n", "profileSettings": "Postavke profila", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "onemogućava pristup svakoj datoteci koja započinje točkom (poput .git, .gitignore) u svakoj mapi.\n", "ruleExample2": "blokira pristup datoteci naziva Caddyfile na korijenu opsega.", "rules": "Pravila", @@ -258,7 +259,8 @@ "userManagement": "Upravljanje Korisnicima", "userUpdated": "Korisnik ažuriran!", "username": "Korisničko ime", - "users": "Korisnici" + "users": "Korisnici", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Pomoć", diff --git a/frontend/src/i18n/hu.json b/frontend/src/i18n/hu.json index 3a0b047a..f6d856cf 100644 --- a/frontend/src/i18n/hu.json +++ b/frontend/src/i18n/hu.json @@ -232,6 +232,7 @@ "permissions": "Jogosultságok", "permissionsHelp": "A felhasználót beállíthatja rendszergazdának, vagy egyénileg is kiválaszthatja a jogosultságokat. Ha a \"Rendszergazda\" lehetőséget választja, az összes többi opció automatikusan be lesz jelölve. A felhasználók kezelése továbbra is a rendszergazda kiváltsága marad.\n", "profileSettings": "Profilbeállítások", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "megakadályozza a hozzáférést bármely rejtett fájlhoz (pl. .git, .gitignore) bármely mappában.\n", "ruleExample2": "blokkolja a hozzáférést a Caddyfile nevű fájlhoz a hatókör gyökerében.", "rules": "Szabályok", @@ -258,7 +259,8 @@ "userManagement": "Felhasználókezelés", "userUpdated": "Felhasználó frissítve!", "username": "Felhasználói név", - "users": "Felhasználók" + "users": "Felhasználók", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Súgó", diff --git a/frontend/src/i18n/is.json b/frontend/src/i18n/is.json index 595098a1..01b3ace6 100644 --- a/frontend/src/i18n/is.json +++ b/frontend/src/i18n/is.json @@ -232,6 +232,7 @@ "permissions": "Heimildir", "permissionsHelp": "Þú getur stillt notenda sem stjórnanda eða valið einstaklingsbundnar heimildir. Ef þú velur \"Stjórnandi\", þá verða allir aðrir valmöguleikar valdir sjálfrafa. Aðgangstýring notenda er á hendi stjórnenda. \n", "profileSettings": "Stilla prófíl", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "kemur í veg fyrir aðgang að dot-skjali (t.d. .git, .gitignore) í öllum möppum. \n", "ruleExample2": "kemur í veg fyrir aðgang að Caddyfile-skjalinu í root-möppu í sýn notandans. ", "rules": "Reglur", @@ -258,7 +259,8 @@ "userManagement": "Notendastýring", "userUpdated": "Notandastillingar vistaðar!", "username": "Notendanafn", - "users": "Notendur" + "users": "Notendur", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Hjálp", diff --git a/frontend/src/i18n/it.json b/frontend/src/i18n/it.json index 29798359..ad54172c 100644 --- a/frontend/src/i18n/it.json +++ b/frontend/src/i18n/it.json @@ -232,6 +232,7 @@ "permissions": "Permessi", "permissionsHelp": "È possibile impostare l'utente come amministratore o scegliere i permessi singolarmente. Se si seleziona \"Amministratore\", tutte le altre opzioni saranno automaticamente assegnate. La gestione degli utenti rimane un privilegio di un amministratore.\n", "profileSettings": "Impostazioni del profilo", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "impedisci l'accesso a qualsiasi file avente come prefisso un punto\n (ad esempio .git, .gitignore) presente in ogni cartella.\n", "ruleExample2": "blocca l'accesso al file denominato Caddyfile nella radice del campo di applicazione.", "rules": "Regole", @@ -258,7 +259,8 @@ "userManagement": "Gestione degli utenti", "userUpdated": "Utente aggiornato!", "username": "Nome utente", - "users": "Utenti" + "users": "Utenti", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Aiuto", diff --git a/frontend/src/i18n/ja.json b/frontend/src/i18n/ja.json index 0a94d2e1..44beb9cb 100644 --- a/frontend/src/i18n/ja.json +++ b/frontend/src/i18n/ja.json @@ -42,7 +42,6 @@ "update": "更新", "upload": "アップロード", "openFile": "ファイルを開く", - "stopSearch": "検索を停止", "discardChanges": "Discard", "stopSearch": "Stop searching", "saveChanges": "Save changes", @@ -233,6 +232,7 @@ "permissions": "権限", "permissionsHelp": "ユーザーを管理者に設定するか、その他の権限を個別に選択することができます。「管理者」を選択すると、他のオプションはすべて自動的にチェックされます。ユーザーを管理するには管理者権限が必要です。\n", "profileSettings": "プロフィール設定", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": ".git や .gitignore のようなドットから始まるファイルへのアクセスを禁止します。\n", "ruleExample2": "スコープのルートにある Caddyfile という名前のファイルへのアクセスを禁止します。", "rules": "ルール", @@ -259,7 +259,8 @@ "userManagement": "ユーザー管理", "userUpdated": "ユーザーを更新しました!", "username": "ユーザー名", - "users": "ユーザー" + "users": "ユーザー", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "ヘルプ", diff --git a/frontend/src/i18n/ko.json b/frontend/src/i18n/ko.json index acbdac95..c1d49b18 100644 --- a/frontend/src/i18n/ko.json +++ b/frontend/src/i18n/ko.json @@ -41,7 +41,6 @@ "toggleSidebar": "사이드바 전환", "update": "업데이트", "upload": "업로드", - "stopSearch": "검색 중지", "openFile": "파일 열기", "discardChanges": "변경 사항 취소", "stopSearch": "Stop searching", @@ -233,6 +232,7 @@ "permissions": "권한", "permissionsHelp": "사용자를 관리자로 만들거나 권한을 부여할 수 있습니다. 관리자를 선택하면, 모든 옵션이 자동으로 선택됩니다. 사용자 관리는 현재 관리자만 할 수 있습니다.\n", "profileSettings": "프로필 설정", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "점(.)으로 시작하는 모든 파일의 접근을 방지합니다.(예 .git, .gitignore)\n", "ruleExample2": "Caddyfile파일의 접근을 방지합니다.", "rules": "룰", @@ -259,7 +259,8 @@ "userManagement": "사용자 관리", "userUpdated": "사용자 수정됨!", "username": "사용자 이름", - "users": "사용자" + "users": "사용자", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "도움말", diff --git a/frontend/src/i18n/lv.json b/frontend/src/i18n/lv.json index 8a57f578..c7e1d02f 100644 --- a/frontend/src/i18n/lv.json +++ b/frontend/src/i18n/lv.json @@ -232,6 +232,7 @@ "permissions": "Atļaujas", "permissionsHelp": "Varat iestatīt lietotāju kā administratoru vai izvēlēties atļaujas individuāli. Ja atlasīsiet “Administrators”, visas pārējās opcijas tiks automātiski atzīmētas. Lietotāju pārvaldība joprojām ir administratora privilēģija.\n", "profileSettings": "Profila iestatījumi", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "neļauj piekļūt jebkuram dotfile failam (piemēram, .git, .gitignore) katrā mapē.\n", "ruleExample2": "bloķē piekļuvi failam ar nosaukumu Caddyfile darbības jomas saknē.", "rules": "Noteikumi", @@ -258,7 +259,8 @@ "userManagement": "Lietotāju pārvaldība", "userUpdated": "Lietotājs atjaunināts!", "username": "Lietotājvārds", - "users": "Lietotāji" + "users": "Lietotāji", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Palīdzība", diff --git a/frontend/src/i18n/lv_LV.json b/frontend/src/i18n/lv_LV.json index 8a57f578..c6af9aed 100644 --- a/frontend/src/i18n/lv_LV.json +++ b/frontend/src/i18n/lv_LV.json @@ -43,7 +43,7 @@ "upload": "Augšupielādēt", "openFile": "Atvērt failu", "discardChanges": "Izmest", - "stopSearch": "Stop searching", + "stopSearch": "Beigt meklēšanu", "saveChanges": "Saglabāt izmaiņas", "editAsText": "Rediģēt kā tekstu", "increaseFontSize": "Palieliniet fonta lielumu", @@ -232,6 +232,7 @@ "permissions": "Atļaujas", "permissionsHelp": "Varat iestatīt lietotāju kā administratoru vai izvēlēties atļaujas individuāli. Ja atlasīsiet “Administrators”, visas pārējās opcijas tiks automātiski atzīmētas. Lietotāju pārvaldība joprojām ir administratora privilēģija.\n", "profileSettings": "Profila iestatījumi", + "redirectAfterCopyMove": "Pārvirzīt uz galapunktu pēc kopēšanas/pārvietošanas", "ruleExample1": "neļauj piekļūt jebkuram dotfile failam (piemēram, .git, .gitignore) katrā mapē.\n", "ruleExample2": "bloķē piekļuvi failam ar nosaukumu Caddyfile darbības jomas saknē.", "rules": "Noteikumi", @@ -241,7 +242,7 @@ "settingsUpdated": "Iestatījumi atjaunināti!", "shareDuration": "Kopīgošanas ilgums", "shareManagement": "Kopīgošanas pārvaldība", - "shareDeleted": "Kopīgošana ir izdzēsta!", + "shareDeleted": "Kopīgojums izdzēsts!", "singleClick": "Failu un direktoriju atvēršanai izmantojiet vienus klikšķi", "themes": { "default": "Sistēmas noklusējums", @@ -258,7 +259,8 @@ "userManagement": "Lietotāju pārvaldība", "userUpdated": "Lietotājs atjaunināts!", "username": "Lietotājvārds", - "users": "Lietotāji" + "users": "Lietotāji", + "currentPassword": "Esošā Parole" }, "sidebar": { "help": "Palīdzība", diff --git a/frontend/src/i18n/nl-be.json b/frontend/src/i18n/nl-be.json index b78ff204..a5fcb062 100644 --- a/frontend/src/i18n/nl-be.json +++ b/frontend/src/i18n/nl-be.json @@ -232,6 +232,7 @@ "permissions": "Permissies", "permissionsHelp": "U kunt de gebruiker instellen als beheerder of de machtigingen afzonderlijk kiezen. Als u \"Beheerder\" selecteert, worden alle andere opties automatisch gecontroleerd. Het beheer van gebruikers blijft een privilege van een beheerder.\n", "profileSettings": "Profielinstellingen", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "voorkomt de toegang tot elk puntbestand (zoals .git, .gitignore) in elke map.\n", "ruleExample2": "blokkeert de toegang tot het bestand met de naam Caddyfile in de hoofdmap van het bereik.", "rules": "Regels", @@ -258,7 +259,8 @@ "userManagement": "Gebruikersbeheer", "userUpdated": "Gebruiker bijgewerkt!", "username": "Gebruikersnaam", - "users": "Gebruikers" + "users": "Gebruikers", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Help", diff --git a/frontend/src/i18n/no.json b/frontend/src/i18n/no.json index eb1a1c12..3a5e7bdd 100644 --- a/frontend/src/i18n/no.json +++ b/frontend/src/i18n/no.json @@ -232,6 +232,7 @@ "permissions": "Tilaterser", "permissionsHelp": "Du kan angi brukeren som administrator eller velge tillatelsene individuelt. Hvis du velger «Administrator», vil alle de andre alternativene bli automatisk avkrysset. Administrasjon av brukere er fortsatt et privilegium for en administrator.\n", "profileSettings": "Profil Innstilinger", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "forhindrer tilgang til noen dotfiler (som .git, .gitignore) i alle mapper.\n", "ruleExample2": "blokkerer tilgangen til filen med navnet Caddyfile på roten av omfanget.", "rules": "Regler", @@ -258,7 +259,8 @@ "userManagement": "Brukeradministrasjon", "userUpdated": "Bruker opprettet!", "username": "Brukernavn", - "users": "Bruker" + "users": "Bruker", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Hjelp", diff --git a/frontend/src/i18n/pl.json b/frontend/src/i18n/pl.json index 79cbb5d8..64b9f04a 100644 --- a/frontend/src/i18n/pl.json +++ b/frontend/src/i18n/pl.json @@ -231,7 +231,8 @@ }, "permissions": "Uprawnienia", "permissionsHelp": "Możesz ustawić użytkownika jako administratora lub wybrać uprawnienia indywidualnie. Jeśli wybierzesz „Administrator”, wszystkie pozostałe opcje zostaną automatycznie zaznaczone. Zarządzanie użytkownikami pozostaje przywilejem administratora.\n", - "profileSettings": "Twój profil", + "profileSettings": "Ustawienia profilu", + "redirectAfterCopyMove": "Przekieruj do miejsca docelowego po skopiowaniu lub przeniesieniu", "ruleExample1": "uniemożliwia dostęp do plików poprzedzonych kropką (takich jak .git, .gitignore) we wszystkich folderach.\n", "ruleExample2": "blokuje dostęp do pliku o nazwie Caddyfile w katalogu głównym zakresu.", "rules": "Uprawnienia", @@ -258,7 +259,8 @@ "userManagement": "Zarządzanie użytkownikami", "userUpdated": "Użytkownik zapisany!", "username": "Nazwa użytkownika", - "users": "Użytkownicy" + "users": "Użytkownicy", + "currentPassword": "Twoje aktualne hasło" }, "sidebar": { "help": "Pomoc", diff --git a/frontend/src/i18n/pt-br.json b/frontend/src/i18n/pt-br.json index d994cbaa..f6aa8f4e 100644 --- a/frontend/src/i18n/pt-br.json +++ b/frontend/src/i18n/pt-br.json @@ -232,6 +232,7 @@ "permissions": "Permissões", "permissionsHelp": "Pode definir o usuário como administrador ou escolher as permissões manualmente. Se selecionar a opção \"Administrador\", todas as outras opções serão automaticamente selecionadas. A gestão dos usuários é um privilégio restringido aos administradores.\n", "profileSettings": "Configurações do usuário", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n", "ruleExample2": "bloqueia o acesso ao arquivo chamado Caddyfile.", "rules": "Regras", @@ -258,7 +259,8 @@ "userManagement": "Gerenciamento de usuários", "userUpdated": "Usuário atualizado!", "username": "Nome do usuário", - "users": "Usuários" + "users": "Usuários", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ajuda", diff --git a/frontend/src/i18n/pt.json b/frontend/src/i18n/pt.json index 249a775a..dcacf3b6 100644 --- a/frontend/src/i18n/pt.json +++ b/frontend/src/i18n/pt.json @@ -232,6 +232,7 @@ "permissions": "Permissões", "permissionsHelp": "Pode definir o utilizador como administrador ou escolher as permissões manualmente. Se selecionar a opção \"Administrador\", todas as outras opções serão automaticamente selecionadas. A gestão dos utilizadores é um privilégio restringido aos administradores.\n", "profileSettings": "Configurações do utilizador", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n", "ruleExample2": "bloqueia o acesso ao ficheiro chamado Caddyfile na raiz.", "rules": "Regras", @@ -258,7 +259,8 @@ "userManagement": "Gestão de utilizadores", "userUpdated": "Utilizador atualizado!", "username": "Nome de utilizador", - "users": "Utilizadores" + "users": "Utilizadores", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ajuda", diff --git a/frontend/src/i18n/ro.json b/frontend/src/i18n/ro.json index d5184d63..c80c4e28 100644 --- a/frontend/src/i18n/ro.json +++ b/frontend/src/i18n/ro.json @@ -232,6 +232,7 @@ "permissions": "Permisiuni", "permissionsHelp": "Poți alege ca un utilizator să fie administrator sau să-i alegi permisiunile individual. Dacă alegi \"Administrator\", toate celelalte opțiuni vor fi bifate automat. Gestionarea utilizatorilor rămâne un privilegiu exclusiv al administratorilor.\n", "profileSettings": "Setări profil", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "împiedică accesul la fisiere cu punct in față (.), cum ar fi .git, .gitignore în orice director.\n", "ruleExample2": "împiedică accesul la fișierul Caddyfile din rădăcina domeniului.", "rules": "Reguli", @@ -258,7 +259,8 @@ "userManagement": "Gestionare utilizatori", "userUpdated": "Utilizator actualizat!", "username": "Utilizator", - "users": "Utilizatori" + "users": "Utilizatori", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Ajutor", diff --git a/frontend/src/i18n/ru.json b/frontend/src/i18n/ru.json index 48e9fde6..60b211f6 100644 --- a/frontend/src/i18n/ru.json +++ b/frontend/src/i18n/ru.json @@ -42,7 +42,6 @@ "update": "Обновить", "upload": "Загрузить", "openFile": "Открыть файл", - "stopSearch": "Прекратить поиск", "discardChanges": "Отказаться", "stopSearch": "Stop searching", "saveChanges": "Сохранить", @@ -233,6 +232,7 @@ "permissions": "Права доступа", "permissionsHelp": "Можно настроить пользователя как администратора или выбрать разрешения индивидуально. При выборе \"Администратор\", все остальные параметры будут автоматически выбраны. Управление пользователями - привилегия администратора.\n", "profileSettings": "Настройки профиля", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "предотвратить доступ к любому скрытому файлу (например: .git, .gitignore) в каждой папке.\n", "ruleExample2": "блокирует доступ к файлу с именем Caddyfile в корневой области.", "rules": "Права", @@ -259,7 +259,8 @@ "userManagement": "Управление пользователями", "userUpdated": "Пользователь изменен!", "username": "Имя пользователя", - "users": "Пользователи" + "users": "Пользователи", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Помощь", diff --git a/frontend/src/i18n/sk.json b/frontend/src/i18n/sk.json index ee85b1d5..201d2d3d 100644 --- a/frontend/src/i18n/sk.json +++ b/frontend/src/i18n/sk.json @@ -232,6 +232,7 @@ "permissions": "Práva", "permissionsHelp": "Môžete nastaviť používateľa, aby bol administrátorom alebo vybrať práva jednotlivo. Ak zvolíte \"Administrator\", všetky ďalšie budú automaticky zaškrtnuté. Manažment používateľov ostáva v správe administrátora.\n", "profileSettings": "Nastavenia profilu", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "blokuje prístup ku všetkým súborom začínajúcim bodkou (napríklad .git, .gitignore) v každom priečinku.\n", "ruleExample2": "blokuje prístup k súborom s názvom Caddyfile v koreňovom priečinku.", "rules": "Pravidlá", @@ -258,7 +259,8 @@ "userManagement": "Správa používateľov", "userUpdated": "Používateľ upravený!", "username": "Meno používateľa", - "users": "Používatelia" + "users": "Používatelia", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Pomoc", diff --git a/frontend/src/i18n/sv-se.json b/frontend/src/i18n/sv-se.json index 3e1f82cf..642252d9 100644 --- a/frontend/src/i18n/sv-se.json +++ b/frontend/src/i18n/sv-se.json @@ -232,6 +232,7 @@ "permissions": "Rättigheter", "permissionsHelp": "Du kan ange att användaren ska vara administratör eller välja behörigheterna individuellt. Om du väljer \"administratör \" kommer alla andra alternativ att kontrolleras automatiskt. Hanteringen av användare är fortfarande ett privilegium för en administratör.\n", "profileSettings": "Profil inställningar", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "förhindrar åtkomst till en dot-fil (till exempel. git,. gitignore) i varje mapp.\n", "ruleExample2": "blockerar åtkomsten till filen som heter Caddyfilen i roten av scopet.", "rules": "Regler", @@ -258,7 +259,8 @@ "userManagement": "Användarehantering", "userUpdated": "Användare uppdaterad!", "username": "Användarnamn", - "users": "Användare" + "users": "Användare", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Hjälp", diff --git a/frontend/src/i18n/tr.json b/frontend/src/i18n/tr.json index cdaf8e25..f83e7103 100644 --- a/frontend/src/i18n/tr.json +++ b/frontend/src/i18n/tr.json @@ -232,6 +232,7 @@ "permissions": "İzinler", "permissionsHelp": "Kullanıcıyı yönetici olarak ayarlayabilir veya izinleri ayrı ayrı seçebilirsiniz. \"Yönetici\"yi seçerseniz, diğer tüm seçenekler otomatik olarak kontrol edilecektir. Kullanıcıların yönetimi, bir yöneticinin yetkisi olarak kalır.\n", "profileSettings": "Profil ayarları", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "her klasördeki herhangi bir noktalı dosyaya (.git, .gitignore gibi) erişimi engeller.\n", "ruleExample2": "Root erişimidenki CaddyFile dosyalarına erişimi engelle.", "rules": "Kurallar", @@ -258,7 +259,8 @@ "userManagement": "Kullanıcı yönetimi", "userUpdated": "Kullanıcı güncellendi!", "username": "Kullanıcı adı", - "users": "Kullanıcılar" + "users": "Kullanıcılar", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Yardım", diff --git a/frontend/src/i18n/uk.json b/frontend/src/i18n/uk.json index e53adc31..782b86e9 100644 --- a/frontend/src/i18n/uk.json +++ b/frontend/src/i18n/uk.json @@ -232,6 +232,7 @@ "permissions": "Дозволи", "permissionsHelp": "Можна налаштувати користувача як адміністратора чи вибрати індивідуальні дозволи. При виборі \"Адміністратор\" всі інші параметри будуть автоматично вибрані. Керування користувачами - привілей адміністратора.\n", "profileSettings": "Налаштування профілю", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "запобігти доступу до будь-якого прихованого файлу (наприклад: .git, .gitignore) у кожній папці.\n", "ruleExample2": "блокує доступ до файлу з ім'ям Caddyfile у кореневій області.", "rules": "Права", @@ -258,7 +259,8 @@ "userManagement": "Керування користувачами", "userUpdated": "Користувача змінено!", "username": "Ім'я користувача", - "users": "Користувачі" + "users": "Користувачі", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Допомога", diff --git a/frontend/src/i18n/vi.json b/frontend/src/i18n/vi.json index 8a71150d..65e7fe01 100644 --- a/frontend/src/i18n/vi.json +++ b/frontend/src/i18n/vi.json @@ -232,6 +232,7 @@ "permissions": "Quyền", "permissionsHelp": "Bạn có thể đặt người dùng làm quản trị viên hoặc chọn quyền riêng lẻ. Nếu chọn \"Người quản trị\", tất cả các tùy chọn khác sẽ tự động được chọn. Việc quản lý người dùng vẫn là đặc quyền của quản trị viên.\n", "profileSettings": "Cài đặt hồ sơ", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "ngăn truy cập vào bất kỳ tệp ẩn nào (chẳng hạn như .git, .gitignore) trong mọi thư mục.\n", "ruleExample2": "chặn truy cập vào tệp có tên Caddyfile trong thư mục gốc của phạm vi.", "rules": "Quy tắc", @@ -258,7 +259,8 @@ "userManagement": "Quản lý người dùng", "userUpdated": "Người dùng đã được cập nhật!", "username": "Tên người dùng", - "users": "Người dùng" + "users": "Người dùng", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "Trợ giúp", diff --git a/frontend/src/i18n/zh-cn.json b/frontend/src/i18n/zh-cn.json index d7bb63c6..93486c21 100644 --- a/frontend/src/i18n/zh-cn.json +++ b/frontend/src/i18n/zh-cn.json @@ -42,9 +42,8 @@ "update": "更新", "upload": "上传", "openFile": "打开文件", - "stopSearch": "停止搜索", "discardChanges": "放弃更改", - "stopSearch": "Stop searching", + "stopSearch": "停止搜索", "saveChanges": "保存更改", "editAsText": "以文本形式编辑", "increaseFontSize": "增大字体大小", @@ -233,6 +232,7 @@ "permissions": "权限", "permissionsHelp": "你可以将该用户设置为管理员或单独选择各项权限。如果你选择了“管理员”,则其他的选项会被自动选中,同时该用户可以管理其他用户。\n", "profileSettings": "个人设置", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "阻止用户访问所有文件夹下任何以 . 开头的文件(隐藏文件, 例如: .git, .gitignore)。\n", "ruleExample2": "阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。", "rules": "规则", @@ -259,7 +259,8 @@ "userManagement": "用户管理", "userUpdated": "用户已更新!", "username": "用户名", - "users": "用户" + "users": "用户", + "currentPassword": "您当前的密码" }, "sidebar": { "help": "帮助", diff --git a/frontend/src/i18n/zh-tw.json b/frontend/src/i18n/zh-tw.json index e5a32801..c0cafc3d 100644 --- a/frontend/src/i18n/zh-tw.json +++ b/frontend/src/i18n/zh-tw.json @@ -42,7 +42,6 @@ "update": "更新", "upload": "上傳", "openFile": "開啟檔案", - "stopSearch": "停止搜尋", "discardChanges": "放棄變更", "stopSearch": "Stop searching", "saveChanges": "Save changes", @@ -233,6 +232,7 @@ "permissions": "權限", "permissionsHelp": "您可以將該使用者設置為管理員,也可以單獨選擇各項權限。如果選擇了“管理員”,則其他的選項會被自動勾上,同時該使用者可以管理其他使用者。", "profileSettings": "個人設定", + "redirectAfterCopyMove": "Redirect to destination after copy/move", "ruleExample1": "封鎖使用者存取所有資料夾下任何以 . 開頭的檔案(隱藏文件, 例如: .git, .gitignore)。", "ruleExample2": "封鎖使用者存取其目錄範圍的根目錄下名為 Caddyfile 的檔案。", "rules": "規則", @@ -259,7 +259,8 @@ "userManagement": "使用者管理", "userUpdated": "使用者已更新!", "username": "使用者名稱", - "users": "使用者" + "users": "使用者", + "currentPassword": "Your Current Password" }, "sidebar": { "help": "幫助", diff --git a/frontend/src/types/settings.d.ts b/frontend/src/types/settings.d.ts index 562c718b..18672bdf 100644 --- a/frontend/src/types/settings.d.ts +++ b/frontend/src/types/settings.d.ts @@ -5,6 +5,7 @@ interface ISettings { minimumPasswordLength: number; userHomeBasePath: string; defaults: SettingsDefaults; + authMethod: string; rules: any[]; branding: SettingsBranding; tus: SettingsTus; @@ -17,6 +18,7 @@ interface SettingsDefaults { locale: string; viewMode: ViewModeType; singleClick: boolean; + redirectAfterCopyMove: boolean; sorting: Sorting; perm: Permissions; commands: any[]; diff --git a/frontend/src/types/user.d.ts b/frontend/src/types/user.d.ts index 40c453c5..317f1e43 100644 --- a/frontend/src/types/user.d.ts +++ b/frontend/src/types/user.d.ts @@ -10,6 +10,7 @@ interface IUser { lockPassword: boolean; hideDotfiles: boolean; singleClick: boolean; + redirectAfterCopyMove: boolean; dateFormat: boolean; viewMode: ViewModeType; sorting?: Sorting; @@ -30,6 +31,7 @@ interface IUserForm { lockPassword?: boolean; hideDotfiles?: boolean; singleClick?: boolean; + redirectAfterCopyMove?: boolean; dateFormat?: boolean; } diff --git a/frontend/src/utils/clipboard.ts b/frontend/src/utils/clipboard.ts index 23bb7895..53e03589 100644 --- a/frontend/src/utils/clipboard.ts +++ b/frontend/src/utils/clipboard.ts @@ -51,6 +51,20 @@ export function copy(data: ClipboardArgs, opts?: ClipboardOpts) { }); } +export function read() { + return new Promise((resolve, reject) => { + if ( + // Clipboard API requires secure context + window.isSecureContext && + typeof navigator.clipboard !== "undefined" + ) { + navigator.clipboard.readText().then(resolve).catch(reject); + } else { + reject(); + } + }); +} + function getPermission(name: string) { return new Promise((resolve, reject) => { typeof navigator.permissions !== "undefined" && diff --git a/frontend/src/views/files/Editor.vue b/frontend/src/views/files/Editor.vue index 58f0d524..7d3a8dfc 100644 --- a/frontend/src/views/files/Editor.vue +++ b/frontend/src/views/files/Editor.vue @@ -41,7 +41,30 @@