Merge remote-tracking branch 'origin/dev' into feat/static-board-ssr
This commit is contained in:
295 files changed
+4142
-6042
No files matched your search
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,13 +11,15 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/auth": "workspace:^0.1.0",
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
@@ -32,10 +31,7 @@
|
||||
"superjson": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,6 +4,8 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"main": "./src/index.ts",
|
||||
"types": "./src/index.ts",
|
||||
"exports": {
|
||||
".": "./src/index.ts",
|
||||
"./client": "./src/client.ts",
|
||||
@@ -12,15 +14,12 @@
|
||||
"./shared": "./src/shared.ts",
|
||||
"./open-api": "./src/open-api.ts"
|
||||
},
|
||||
"main": "./index.ts",
|
||||
"types": "./index.ts",
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/auth": "workspace:^0.1.0",
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
@@ -55,11 +54,7 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"prettier": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -81,13 +81,7 @@ describe("initUser should initialize the first user", () => {
|
||||
await expect(actAsync()).rejects.toThrow("passwordsDoNotMatch");
|
||||
});
|
||||
|
||||
it.each([
|
||||
["aB2%"], // too short
|
||||
["abc123DEF"], // does not contain special characters
|
||||
["abcDEFghi+"], // does not contain numbers
|
||||
["ABC123+/-"], // does not contain lowercase
|
||||
["abc123+/-"], // does not contain uppercase
|
||||
])("should throw error that password requirements do not match for '%s' as password", async (password) => {
|
||||
it.each([["aB2%"], ["short"]])("should reject passwords shorter than 8 characters for '%s'", async (password) => {
|
||||
const db = createDb();
|
||||
await createOnboardingStepAsync(db, "user");
|
||||
const caller = userRouter.createCaller({
|
||||
@@ -103,7 +97,55 @@ describe("initUser should initialize the first user", () => {
|
||||
confirmPassword: password,
|
||||
});
|
||||
|
||||
await expect(actAsync()).rejects.toThrow("passwordRequirements");
|
||||
await expect(actAsync()).rejects.toThrow();
|
||||
});
|
||||
|
||||
it("should accept passwords without complexity requirements", async () => {
|
||||
const db = createDb();
|
||||
await createOnboardingStepAsync(db, "user");
|
||||
const caller = userRouter.createCaller({
|
||||
db,
|
||||
deviceType: undefined,
|
||||
session: null,
|
||||
});
|
||||
|
||||
await caller.initUser({
|
||||
username: "test",
|
||||
password: "abc123DEF",
|
||||
confirmPassword: "abc123DEF",
|
||||
});
|
||||
|
||||
const user = await db.query.users.findFirst({
|
||||
columns: {
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
|
||||
expect(user).toBeDefined();
|
||||
});
|
||||
|
||||
it("should accept passwords with special characters like LoveHomarr<3", async () => {
|
||||
const db = createDb();
|
||||
await createOnboardingStepAsync(db, "user");
|
||||
const caller = userRouter.createCaller({
|
||||
db,
|
||||
deviceType: undefined,
|
||||
session: null,
|
||||
});
|
||||
|
||||
await caller.initUser({
|
||||
username: "test",
|
||||
password: "LoveHomarr<3",
|
||||
confirmPassword: "LoveHomarr<3",
|
||||
});
|
||||
|
||||
const user = await db.query.users.findFirst({
|
||||
columns: {
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
|
||||
expect(user).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -40,6 +40,9 @@ export const env = createEnv({
|
||||
AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE: z.string().optional(),
|
||||
AUTH_OIDC_FORCE_USERINFO: createBooleanSchema(false),
|
||||
AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING: createBooleanSchema(false),
|
||||
AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD: z
|
||||
.enum(["client_secret_basic", "client_secret_post", "client_secret_jwt", "none"])
|
||||
.default("client_secret_basic"),
|
||||
}
|
||||
: {}),
|
||||
...(authProviders.includes("ldap")
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,6 +4,8 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"main": "./index.ts",
|
||||
"types": "./index.ts",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./next": "./next.ts",
|
||||
@@ -14,15 +16,12 @@
|
||||
"./shared": "./shared.ts",
|
||||
"./env": "./env.ts"
|
||||
},
|
||||
"main": "./index.ts",
|
||||
"types": "./index.ts",
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@auth/core": "catalog:",
|
||||
"@auth/drizzle-adapter": "catalog:",
|
||||
@@ -41,13 +40,9 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"@types/bcrypt": "catalog:",
|
||||
"@types/cookies": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"prettier": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,9 @@ export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profil
|
||||
type: "oidc",
|
||||
clientId: env.AUTH_OIDC_CLIENT_ID,
|
||||
clientSecret: env.AUTH_OIDC_CLIENT_SECRET,
|
||||
client: {
|
||||
token_endpoint_auth_method: env.AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD,
|
||||
},
|
||||
issuer: env.AUTH_OIDC_ISSUER,
|
||||
allowDangerousEmailAccountLinking: env.AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING,
|
||||
authorization: {
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,11 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
"./context": "./src/context.tsx",
|
||||
"./updater": "./src/updater.ts",
|
||||
"./edit-mode": "./src/edit-mode.tsx"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -16,23 +11,24 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
"./context": "./src/context.tsx",
|
||||
"./updater": "./src/updater.ts",
|
||||
"./edit-mode": "./src/edit-mode.tsx"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/api": "workspace:^0.1.0",
|
||||
"react": "catalog:",
|
||||
"react-dom": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,16 +11,18 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "esbuild src/index.ts --bundle --platform=node --outfile=cli.cjs --external:bcrypt --external:cpu-features --loader:.html=text --loader:.node=text",
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"run": "pnpm with-env node cli.cjs",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"with-env": "dotenv -e .env --"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@drizzle-team/brocli": "catalog:",
|
||||
"@homarr/auth": "workspace:^0.1.0",
|
||||
@@ -33,11 +32,8 @@
|
||||
"dotenv": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"esbuild": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,13 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./types": "./src/types.ts",
|
||||
"./server": "./src/server.ts",
|
||||
"./client": "./src/client.ts",
|
||||
"./env": "./env.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -18,13 +11,19 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./types": "./src/types.ts",
|
||||
"./server": "./src/server.ts",
|
||||
"./client": "./src/client.ts",
|
||||
"./env": "./env.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/core": "workspace:^0.1.0",
|
||||
"@paralleldrive/cuid2": "catalog:",
|
||||
@@ -39,10 +38,7 @@
|
||||
"zod-validation-error": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,6 +4,13 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
"src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
"./infrastructure/redis": "./src/infrastructure/redis/client.ts",
|
||||
"./infrastructure/env": "./src/infrastructure/env/index.ts",
|
||||
@@ -22,20 +29,12 @@
|
||||
"./infrastructure/http": "./src/infrastructure/http/index.ts",
|
||||
"./infrastructure/http/timeout": "./src/infrastructure/http/timeout.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
"src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@t3-oss/env-nextjs": "catalog:",
|
||||
"better-sqlite3": "catalog:",
|
||||
@@ -49,12 +48,9 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"@types/better-sqlite3": "catalog:",
|
||||
"@types/pg": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,10 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./publisher": "./src/publisher.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -15,21 +11,21 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./publisher": "./src/publisher.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/redis": "workspace:^0.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,11 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./expressions": "./src/expressions.ts",
|
||||
"./logger": "./src/logger.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -16,13 +11,17 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./expressions": "./src/expressions.ts",
|
||||
"./logger": "./src/logger.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/core": "workspace:^",
|
||||
@@ -30,10 +29,7 @@
|
||||
"croner": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,10 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./job-manager": "./src/job-manager.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -15,13 +11,16 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./job-manager": "./src/job-manager.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/analytics": "workspace:^0.1.0",
|
||||
"@homarr/auth": "workspace:^0.1.0",
|
||||
@@ -43,10 +42,7 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,11 @@
|
||||
import { EVERY_HOUR } from "@homarr/cron-jobs-core/expressions";
|
||||
import { EVERY_DAY } from "@homarr/cron-jobs-core/expressions";
|
||||
import { updateCheckerRequestHandler } from "@homarr/request-handler/update-checker";
|
||||
|
||||
import { createCronJob } from "../lib";
|
||||
|
||||
export const updateCheckerJob = createCronJob("updateChecker", EVERY_HOUR, {
|
||||
export const updateCheckerJob = createCronJob("updateChecker", EVERY_DAY, {
|
||||
runOnStart: true,
|
||||
}).withCallback(async () => {
|
||||
const handler = updateCheckerRequestHandler.handler({});
|
||||
await handler.getCachedOrUpdatedDataAsync({
|
||||
forceUpdate: true,
|
||||
});
|
||||
await handler.getCachedOrUpdatedDataAsync({});
|
||||
});
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,6 +4,8 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"main": "./index.ts",
|
||||
"types": "./index.ts",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./collection": "./collection.ts",
|
||||
@@ -12,16 +14,14 @@
|
||||
"./queries": "./queries/index.ts",
|
||||
"./validationSchemas": "./validationSchemas.ts"
|
||||
},
|
||||
"main": "./index.ts",
|
||||
"types": "./index.ts",
|
||||
"scripts": {
|
||||
"build": "pnpm run build:sqlite && pnpm run build:mysql && pnpm run build:postgresql",
|
||||
"build:mysql": "esbuild migrations/mysql/migrate.ts --bundle --platform=node --outfile=migrations/mysql/migrate.cjs",
|
||||
"build:postgresql": "esbuild migrations/postgresql/migrate.ts --bundle --platform=node --outfile=migrations/postgresql/migrate.cjs",
|
||||
"build:sqlite": "esbuild migrations/sqlite/migrate.ts --bundle --platform=node --outfile=migrations/sqlite/migrate.cjs",
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"migration:custom": "pnpm with-env tsx ./migrations/custom/run-custom.ts",
|
||||
"migration:mysql:drop": "pnpm with-env drizzle-kit drop --config ./configs/mysql.config.ts",
|
||||
"migration:mysql:generate": "pnpm with-env drizzle-kit generate --config ./configs/mysql.config.ts",
|
||||
@@ -42,7 +42,6 @@
|
||||
"typecheck": "tsc --noEmit",
|
||||
"with-env": "dotenv -e ../../.env --"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@auth/core": "catalog:",
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
@@ -63,15 +62,11 @@
|
||||
"superjson": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"@types/better-sqlite3": "catalog:",
|
||||
"@types/pg": "catalog:",
|
||||
"dotenv-cli": "catalog:",
|
||||
"esbuild": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"prettier": "catalog:",
|
||||
"tsx": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,24 +11,23 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"format": "oxfmt .",
|
||||
"postinstall": "tsx ./src/docs/codegen.ts",
|
||||
"lint": "eslint",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"fast-xml-parser": "catalog:",
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"tsx": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,11 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./shared": "./src/shared.ts",
|
||||
"./env": "./src/env.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -16,24 +11,25 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./shared": "./src/shared.ts",
|
||||
"./env": "./src/env.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/core": "workspace:^0.1.0",
|
||||
"dockerode": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"@types/dockerode": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,10 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./types": "./src/types.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -15,26 +11,25 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./types": "./src/types.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@mantine/form": "catalog:",
|
||||
"mantine-form-zod-resolver": "catalog:",
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
import { useForm } from "@mantine/form";
|
||||
import { zod4Resolver } from "mantine-form-zod-resolver";
|
||||
import { schemaResolver, useForm } from "@mantine/form";
|
||||
import type { ZodDiscriminatedUnion, ZodIntersection, ZodObject, ZodPipe } from "zod/v4";
|
||||
import { z } from "zod/v4";
|
||||
|
||||
@@ -34,6 +33,6 @@ export const useZodForm = <
|
||||
...options,
|
||||
validateInputOnBlur: true,
|
||||
validateInputOnChange: true,
|
||||
validate: zod4Resolver(schema),
|
||||
validate: schemaResolver(schema, { sync: true }),
|
||||
});
|
||||
};
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,13 +11,15 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/api": "workspace:^0.1.0",
|
||||
"@homarr/auth": "workspace:^0.1.0",
|
||||
@@ -35,10 +34,7 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -108,10 +108,9 @@ export const IconPicker = ({
|
||||
cursor: "pointer",
|
||||
}}
|
||||
className={classes.iconCard}
|
||||
withBorder
|
||||
>
|
||||
<Box w={25} h={25}>
|
||||
<Image src={item.url} w={25} h={25} radius="md" />
|
||||
<Image src={item.url} w={25} h={25} />
|
||||
</Box>
|
||||
</Card>
|
||||
</Indicator>
|
||||
|
||||
@@ -5,3 +5,5 @@ export * from "./icon-picker/icon-picker";
|
||||
export * from "./new-app/icon-matcher";
|
||||
|
||||
export * from "./upload-media/upload-media";
|
||||
|
||||
export * from "./user-create/user-create-password-fields";
|
||||
@@ -114,7 +114,7 @@ export const AppForm = ({
|
||||
mt="md"
|
||||
/>
|
||||
|
||||
<Collapse in={opened}>
|
||||
<Collapse expanded={opened}>
|
||||
<TextInput {...form.getInputProps("pingUrl")} />
|
||||
</Collapse>
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
"use client";
|
||||
|
||||
import { PasswordInput, Stack } from "@mantine/core";
|
||||
import type { PasswordInputProps } from "@mantine/core";
|
||||
|
||||
import { useScopedI18n } from "@homarr/translation/client";
|
||||
import { CustomPasswordInput } from "@homarr/ui";
|
||||
|
||||
interface UserCreatePasswordFieldsProps {
|
||||
passwordInputProps: PasswordInputProps;
|
||||
confirmPasswordInputProps: PasswordInputProps;
|
||||
variant?: PasswordInputProps["variant"];
|
||||
}
|
||||
|
||||
export const UserCreatePasswordFields = ({
|
||||
passwordInputProps,
|
||||
confirmPasswordInputProps,
|
||||
variant,
|
||||
}: UserCreatePasswordFieldsProps) => {
|
||||
const t = useScopedI18n("user.field");
|
||||
|
||||
return (
|
||||
<Stack gap="md">
|
||||
<CustomPasswordInput
|
||||
withPasswordRequirements
|
||||
label={t("password.label")}
|
||||
variant={variant}
|
||||
{...passwordInputProps}
|
||||
/>
|
||||
<PasswordInput label={t("passwordConfirm.label")} variant={variant} {...confirmPasswordInputProps} />
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,10 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./local": "./src/local.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -15,23 +11,23 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./local": "./src/local.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/core": "workspace:^0.1.0",
|
||||
"@homarr/db": "workspace:^0.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./src/index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,13 +11,15 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./src/index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/core": "workspace:^0.1.0",
|
||||
@@ -28,11 +27,8 @@
|
||||
"bcrypt": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"@types/bcrypt": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,12 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./test-connection": "./src/base/test-connection/index.ts",
|
||||
"./client": "./src/client.ts",
|
||||
"./types": "./src/types.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -17,13 +11,18 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./test-connection": "./src/base/test-connection/index.ts",
|
||||
"./client": "./src/client.ts",
|
||||
"./types": "./src/types.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@ctrl/deluge": "catalog:",
|
||||
"@ctrl/qbittorrent": "catalog:",
|
||||
@@ -52,12 +51,9 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"@types/node-unifi": "catalog:",
|
||||
"@types/xml2js": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import { z } from "zod/v4";
|
||||
|
||||
const createEnvelopeSchema = <T extends z.ZodType>(dataSchema: T) => z.object({ data: dataSchema });
|
||||
|
||||
const parseTimestamp = (timestamp: string): Date => new Date(`${timestamp.replace(" ", "T")}Z`);
|
||||
const parseTimestamp = (timestamp: string): Date => new Date(timestamp.replace(" ", "T"));
|
||||
|
||||
export const speedtestTrackerResultSchema = z.object({
|
||||
id: z.number().int(),
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
|
||||
import { speedtestTrackerResultSchema } from "../speedtest-tracker-types";
|
||||
|
||||
describe("speedtestTrackerResultSchema", () => {
|
||||
test("parses created_at as Speedtest Tracker local wall time", () => {
|
||||
const result = speedtestTrackerResultSchema.parse({
|
||||
id: 1,
|
||||
ping: 12,
|
||||
download_bits: 100,
|
||||
upload_bits: 50,
|
||||
healthy: true,
|
||||
created_at: "2026-05-18 18:30:01",
|
||||
});
|
||||
|
||||
expect(result.created_at.getHours()).toBe(18);
|
||||
expect(result.created_at.getMinutes()).toBe(30);
|
||||
});
|
||||
});
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,13 +11,15 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/api": "workspace:^0.1.0",
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
@@ -42,10 +41,7 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -77,7 +77,7 @@ export const AppSelectModal = createModal<AppSelectModalProps>(({ actions, inner
|
||||
{t("app.action.create.description")}
|
||||
</Text>
|
||||
</Stack>
|
||||
<Button onClick={handleAddNewApp} variant="light" size="xs" mt="auto" radius="md" fullWidth>
|
||||
<Button onClick={handleAddNewApp} variant="light" size="xs" mt="auto" fullWidth>
|
||||
{t("app.action.create.action")}
|
||||
</Button>
|
||||
</Stack>
|
||||
@@ -100,7 +100,7 @@ export const AppSelectModal = createModal<AppSelectModalProps>(({ actions, inner
|
||||
{app.description ?? ""}
|
||||
</Text>
|
||||
</Stack>
|
||||
<Button onClick={() => handleSelect(app)} variant="light" size="xs" mt="auto" radius="md" fullWidth>
|
||||
<Button onClick={() => handleSelect(app)} variant="light" size="xs" mt="auto" fullWidth>
|
||||
{t("app.action.select.action", { app: app.name })}
|
||||
</Button>
|
||||
</Stack>
|
||||
|
||||
@@ -58,7 +58,7 @@ export const AddDockerAppToHomarrModal = createModal<AddDockerAppToHomarrProps>(
|
||||
};
|
||||
return (
|
||||
<form onSubmit={form.onSubmit(handleSubmit)}>
|
||||
<LoadingOverlay visible={isPending} zIndex={1000} overlayProps={{ radius: "sm", blur: 2 }} />
|
||||
<LoadingOverlay visible={isPending} />
|
||||
<Stack>
|
||||
<List spacing={"xs"}>
|
||||
{innerProps.selectedContainers.map((container, index) => (
|
||||
|
||||
@@ -83,15 +83,10 @@ export const RequestMediaModal = createModal<RequestMediaModalProps>(({ actions,
|
||||
|
||||
return (
|
||||
<Stack>
|
||||
<LoadingOverlay visible={isPending} zIndex={1000} overlayProps={{ radius: "sm", blur: 2 }} />
|
||||
<LoadingOverlay visible={isPending} />
|
||||
{data && (
|
||||
<Group wrap="nowrap" align="start">
|
||||
<Image
|
||||
src={`https://image.tmdb.org/t/p/w600_and_h900_bestv2${data.posterPath}`}
|
||||
alt="poster"
|
||||
w={100}
|
||||
radius="md"
|
||||
/>
|
||||
<Image src={`https://image.tmdb.org/t/p/w600_and_h900_bestv2${data.posterPath}`} alt="poster" w={100} />
|
||||
<Text c="dimmed" style={{ flex: "1" }}>
|
||||
{data.overview}
|
||||
</Text>
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
import reactConfig from "@homarr/eslint-config/react";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig, ...reactConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,13 +11,15 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
@@ -29,10 +28,7 @@
|
||||
"react": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,10 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./styles.css": "./src/styles.css"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -15,23 +11,23 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./styles.css": "./src/styles.css"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@mantine/notifications": "catalog:",
|
||||
"@tabler/icons-react": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,13 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./analyse": "./src/analyse/index.ts",
|
||||
"./components": "./src/components/index.ts",
|
||||
"./import": "./src/import/index.ts",
|
||||
"./shared": "./src/shared.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -18,13 +11,19 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./analyse": "./src/analyse/index.ts",
|
||||
"./components": "./src/components/index.ts",
|
||||
"./import": "./src/import/index.ts",
|
||||
"./shared": "./src/shared.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/core": "workspace:^0.1.0",
|
||||
@@ -48,11 +47,8 @@
|
||||
"zod-form-data": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"@types/adm-zip": "catalog:",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ export const BoardSelectionCard = ({ selections, updateSelections }: BoardSelect
|
||||
}
|
||||
|
||||
return (
|
||||
<Card w={64 * 12 + 8} maw="90vw">
|
||||
<Card w={64 * 12 + 8} maw="90vw" withBorder={false}>
|
||||
<Stack gap="sm">
|
||||
<Stack gap={0}>
|
||||
<Group justify="space-between" align="center">
|
||||
@@ -57,7 +57,7 @@ export const BoardSelectionCard = ({ selections, updateSelections }: BoardSelect
|
||||
|
||||
<Stack gap="sm">
|
||||
{[...selections.entries()].map(([name, selected]) => (
|
||||
<Card key={name} withBorder>
|
||||
<Card key={name}>
|
||||
<Checkbox
|
||||
checked={selected}
|
||||
onChange={registerToggle(name)}
|
||||
|
||||
@@ -17,7 +17,7 @@ interface ImportSettingsCardProps {
|
||||
export const ImportSettingsCard = ({ settings, updateSetting }: ImportSettingsCardProps) => {
|
||||
const tImportSettings = useScopedI18n("init.step.import.importSettings");
|
||||
return (
|
||||
<Card w={64 * 12 + 8} maw="90vw">
|
||||
<Card w={64 * 12 + 8} maw="90vw" withBorder={false}>
|
||||
<Stack gap="sm">
|
||||
<Stack gap={0}>
|
||||
<Text fw={500}>{tImportSettings("title")}</Text>
|
||||
|
||||
@@ -13,7 +13,7 @@ interface ImportSummaryCardProps {
|
||||
export const ImportSummaryCard = ({ counts, onSubmit, loading }: ImportSummaryCardProps) => {
|
||||
const tSummary = useScopedI18n("init.step.import.summary");
|
||||
return (
|
||||
<Card w={64 * 12 + 8} maw="90vw">
|
||||
<Card w={64 * 12 + 8} maw="90vw" withBorder={false}>
|
||||
<Stack gap="sm">
|
||||
<Stack gap={0}>
|
||||
<Text fw={500}>{tSummary("title")}</Text>
|
||||
@@ -24,7 +24,7 @@ export const ImportSummaryCard = ({ counts, onSubmit, loading }: ImportSummaryCa
|
||||
|
||||
<Stack gap="xs">
|
||||
{objectEntries(counts).map(([key, count]) => (
|
||||
<Card key={key} withBorder p="sm">
|
||||
<Card key={key} p="sm">
|
||||
<Group justify="space-between" align="center">
|
||||
<Text fw={500} size="sm">
|
||||
{tSummary(`entities.${key}`)}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,22 +11,21 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,22 +11,21 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/core": "workspace:^0.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,13 +11,15 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^",
|
||||
"@homarr/core": "workspace:^",
|
||||
@@ -30,10 +29,7 @@
|
||||
"superjson": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
"./*": "./src/*.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,13 +11,15 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
"./*": "./src/*.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@extractus/feed-extractor": "catalog:",
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
@@ -37,10 +36,7 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import dayjs from "dayjs";
|
||||
import type { Duration } from "dayjs/plugin/duration";
|
||||
|
||||
import { ErrorWithMetadata } from "@homarr/core/infrastructure/logs/error";
|
||||
import { createLogger } from "@homarr/core/infrastructure/logs";
|
||||
import type { createChannelWithLatestAndEvents } from "@homarr/redis";
|
||||
|
||||
@@ -15,6 +16,7 @@ interface Options<TData, TInput extends Record<string, unknown>> {
|
||||
options: Options<TData, TInput>,
|
||||
) => ReturnType<typeof createChannelWithLatestAndEvents<TData>>;
|
||||
cacheDuration: Duration;
|
||||
fallbackToStaleOnError?: boolean;
|
||||
}
|
||||
|
||||
export const createCachedRequestHandler = <TData, TInput extends Record<string, unknown>>(
|
||||
@@ -26,13 +28,33 @@ export const createCachedRequestHandler = <TData, TInput extends Record<string,
|
||||
|
||||
return {
|
||||
async getCachedOrUpdatedDataAsync({ forceUpdate = false }) {
|
||||
const channelData = await channel.getAsync();
|
||||
|
||||
const requestNewDataAsync = async () => {
|
||||
const data = await options.requestAsync(input);
|
||||
await channel.publishAndUpdateLastStateAsync(data);
|
||||
return {
|
||||
data,
|
||||
timestamp: new Date(),
|
||||
};
|
||||
try {
|
||||
const data = await options.requestAsync(input);
|
||||
await channel.publishAndUpdateLastStateAsync(data);
|
||||
return {
|
||||
data,
|
||||
timestamp: new Date(),
|
||||
};
|
||||
} catch (error) {
|
||||
if (options.fallbackToStaleOnError && channelData) {
|
||||
logger.warn(
|
||||
new ErrorWithMetadata(
|
||||
"Cached request handler using stale cache after fetch failure",
|
||||
{
|
||||
channel: channel.name,
|
||||
queryKey: options.queryKey,
|
||||
},
|
||||
{ cause: error },
|
||||
),
|
||||
);
|
||||
return channelData;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
if (forceUpdate) {
|
||||
@@ -43,8 +65,6 @@ export const createCachedRequestHandler = <TData, TInput extends Record<string,
|
||||
return await requestNewDataAsync();
|
||||
}
|
||||
|
||||
const channelData = await channel.getAsync();
|
||||
|
||||
const shouldRequestNewData =
|
||||
!channelData ||
|
||||
dayjs().diff(channelData.timestamp, "milliseconds") > options.cacheDuration.asMilliseconds();
|
||||
|
||||
@@ -111,6 +111,24 @@ describe("getAvailableUpdatesAsync", () => {
|
||||
// Assert
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
|
||||
test("should propagate GitHub API auth errors without blocking callers", async () => {
|
||||
const currentVersion = "v1.2.3";
|
||||
const listReleasesSpy = vi.spyOn(new Octokit().rest.repos, "listReleases");
|
||||
listReleasesSpy.mockRejectedValue(new Error("Bad credentials"));
|
||||
|
||||
await expect(getAvailableUpdatesAsync(currentVersion)).rejects.toThrow("Bad credentials");
|
||||
});
|
||||
|
||||
test("should propagate GitHub API quota exhausted errors without blocking callers", async () => {
|
||||
const currentVersion = "v1.2.3";
|
||||
const listReleasesSpy = vi.spyOn(new Octokit().rest.repos, "listReleases");
|
||||
listReleasesSpy.mockRejectedValue(
|
||||
new Error("Request quota exhausted for request GET /repos/{owner}/{repo}/releases"),
|
||||
);
|
||||
|
||||
await expect(getAvailableUpdatesAsync(currentVersion)).rejects.toThrow("quota exhausted");
|
||||
});
|
||||
});
|
||||
|
||||
const fakeReleases = (...inputs: [string, boolean][]) => inputs.map(fakeRelease);
|
||||
|
||||
@@ -15,7 +15,8 @@ const logger = createLogger({ module: "updateCheckerRequestHandler" });
|
||||
|
||||
export const updateCheckerRequestHandler = createCachedRequestHandler({
|
||||
queryKey: "homarr-update-checker",
|
||||
cacheDuration: dayjs.duration(1, "hour"),
|
||||
cacheDuration: dayjs.duration(1, "day"),
|
||||
fallbackToStaleOnError: true,
|
||||
async requestAsync(_) {
|
||||
return {
|
||||
availableUpdates: await getAvailableUpdatesAsync(packageJson.version),
|
||||
@@ -58,6 +59,7 @@ export const getAvailableUpdatesAsync = async (currentVersion: string) => {
|
||||
request: {
|
||||
fetch: fetchWithTrustedCertificatesAsync,
|
||||
},
|
||||
throttle: { enabled: false },
|
||||
});
|
||||
|
||||
const isCurrentPrerelease = isPrereleaseTag(currentVersion);
|
||||
@@ -100,7 +102,7 @@ export const getAvailableUpdatesAsync = async (currentVersion: string) => {
|
||||
const availableUpdates = semanticReleases
|
||||
.filter((release) => isCurrentPrerelease || !release.isPrerelease)
|
||||
.filter((release) => compareSemVer(release.tagName, currentVersion) > 0)
|
||||
.sort((releaseA, releaseB) => compareSemVer(releaseB.tagName, releaseA.tagName));
|
||||
.toSorted((releaseA, releaseB) => compareSemVer(releaseB.tagName, releaseA.tagName));
|
||||
|
||||
if (availableUpdates.length === 0) {
|
||||
logger.debug("No available updates found", { currentVersion });
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,9 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -14,22 +11,21 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/definitions": "workspace:^0.1.0",
|
||||
"@homarr/translation": "workspace:^0.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [
|
||||
{
|
||||
ignores: [],
|
||||
},
|
||||
...baseConfig,
|
||||
];
|
||||
@@ -4,10 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./creator": "./src/creator.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -15,13 +11,16 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./creator": "./src/creator.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/db": "workspace:^0.1.0",
|
||||
"@homarr/server-settings": "workspace:^0.1.0",
|
||||
@@ -31,10 +30,7 @@
|
||||
"react-dom": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
import reactConfig from "@homarr/eslint-config/react";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig, ...reactConfig];
|
||||
@@ -4,10 +4,6 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./styles.css": "./src/styles.css"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
@@ -15,13 +11,16 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./styles.css": "./src/styles.css"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/api": "workspace:^0.1.0",
|
||||
"@homarr/auth": "workspace:^0.1.0",
|
||||
@@ -44,10 +43,7 @@
|
||||
"use-deep-compare-effect": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -110,6 +110,7 @@ const SpotlightWithActiveMode = ({ modeState, queryState, activeMode }: Spotligh
|
||||
inputRef.current?.focus();
|
||||
}}
|
||||
variant="subtle"
|
||||
aria-label={t("common.action.close")}
|
||||
>
|
||||
<IconX stroke={1.5} />
|
||||
</ActionIcon>
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
import baseConfig from "@homarr/eslint-config/base";
|
||||
|
||||
/** @type {import('typescript-eslint').Config} */
|
||||
export default [...baseConfig];
|
||||
@@ -4,6 +4,13 @@
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
"src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./client": "./src/client/index.ts",
|
||||
@@ -12,20 +19,12 @@
|
||||
"./request": "./src/request.ts",
|
||||
"./dayjs": "./src/dayjs.ts"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
"src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rm -rf .turbo node_modules",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"format": "oxfmt .",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/definitions": "workspace:^0.1.0",
|
||||
@@ -38,10 +37,7 @@
|
||||
"react-dom": "catalog:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
"@homarr/tsconfig": "workspace:^0.1.0",
|
||||
"eslint": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Contrasenya",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Inclou com a mínim 8 caràcters",
|
||||
"lowercase": "Inclou minúscules",
|
||||
"uppercase": "Inclou majúscules",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "",
|
||||
"checkLogs": "",
|
||||
"tryAgain": "",
|
||||
"loading": ""
|
||||
"loading": "",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "",
|
||||
"changePosition": ""
|
||||
"changePosition": "",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "密码",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "至少包含 8 个字符",
|
||||
"lowercase": "包含小写字母",
|
||||
"uppercase": "包含大写字母",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "打开媒体"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "查阅文档",
|
||||
"checkLogs": "检查日志获取更多详情",
|
||||
"tryAgain": "重试",
|
||||
"loading": "正在加载"
|
||||
"loading": "正在加载",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "这里",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "新建分类",
|
||||
"changePosition": "换位"
|
||||
"changePosition": "换位",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "此面板是公开的",
|
||||
"private": "此面板是私有的"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "crwdns26:0crwdne26:0",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "crwdns28:0crwdne28:0",
|
||||
"lowercase": "crwdns30:0crwdne30:0",
|
||||
"uppercase": "crwdns32:0crwdne32:0",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "crwdns2680:0crwdne2680:0"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": "crwdns4251:0crwdne4251:0"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "crwdns546:0crwdne546:0",
|
||||
"checkLogs": "crwdns2260:0crwdne2260:0",
|
||||
"tryAgain": "crwdns548:0crwdne548:0",
|
||||
"loading": "crwdns550:0crwdne550:0"
|
||||
"loading": "crwdns550:0crwdne550:0",
|
||||
"show": "crwdns4255:0crwdne4255:0",
|
||||
"hide": "crwdns4257:0crwdne4257:0"
|
||||
},
|
||||
"here": "crwdns552:0crwdne552:0",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "crwdns686:0crwdne686:0",
|
||||
"changePosition": "crwdns688:0crwdne688:0"
|
||||
"changePosition": "crwdns688:0crwdne688:0",
|
||||
"settings": "crwdns4259:0crwdne4259:0"
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "crwdns1656:0crwdne1656:0",
|
||||
"private": "crwdns1658:0crwdne1658:0"
|
||||
},
|
||||
"noResults": {
|
||||
"title": "crwdns4253:0crwdne4253:0"
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Heslo",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Obsahuje alespoň 8 znaků",
|
||||
"lowercase": "Obsahuje malé písmeno",
|
||||
"uppercase": "Obsahuje velké písmeno",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Přečtěte si dokumentaci",
|
||||
"checkLogs": "Pro více podrobností zkontrolujte logy",
|
||||
"tryAgain": "Zkusit znovu",
|
||||
"loading": "Načítání"
|
||||
"loading": "Načítání",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "zde",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Nová kategorie",
|
||||
"changePosition": "Změnit pozici"
|
||||
"changePosition": "Změnit pozici",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Adgangskode",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Inkluderer mindst 8 tegn",
|
||||
"lowercase": "Inkluderer små bogstaver",
|
||||
"uppercase": "Inkluderer store bogstaver",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Åben medie"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Tjek dokumentationen",
|
||||
"checkLogs": "Tjek logs for flere detaljer",
|
||||
"tryAgain": "Prøv igen",
|
||||
"loading": "Indlæser"
|
||||
"loading": "Indlæser",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "her",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Ny kategori",
|
||||
"changePosition": "Ændre placering"
|
||||
"changePosition": "Ændre placering",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "Denne tavle er offentlig",
|
||||
"private": "Denne tavle er privat"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Passwort",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Enthält mindestens 8 Zeichen",
|
||||
"lowercase": "Enthält Kleinbuchstaben",
|
||||
"uppercase": "Enthält Großbuchstaben",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Medium öffnen"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Die Dokumentation ansehen",
|
||||
"checkLogs": "Logs für weitere Details prüfen",
|
||||
"tryAgain": "Erneut versuchen",
|
||||
"loading": "Wird geladen"
|
||||
"loading": "Wird geladen",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "Hier",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Neue Kategorie",
|
||||
"changePosition": "Position wechseln"
|
||||
"changePosition": "Position wechseln",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "Dieses Board ist öffentlich",
|
||||
"private": "Dieses Board ist privat"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Passwort",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Enthält mindestens 8 Zeichen",
|
||||
"lowercase": "Enthält Kleinbuchstaben",
|
||||
"uppercase": "Enthält Großbuchstaben",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Medium öffnen"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Die Dokumentation ansehen",
|
||||
"checkLogs": "Logs für weitere Details prüfen",
|
||||
"tryAgain": "Erneut versuchen",
|
||||
"loading": "Wird geladen"
|
||||
"loading": "Wird geladen",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "Hier",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Neue Kategorie",
|
||||
"changePosition": "Position wechseln"
|
||||
"changePosition": "Position wechseln",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "Dieses Board ist öffentlich",
|
||||
"private": "Dieses Board ist privat"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Κωδικός",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "",
|
||||
"lowercase": "Περιλαμβάνει πεζό γράμμα",
|
||||
"uppercase": "Περιλαμβάνει κεφαλαίο γράμμα",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "",
|
||||
"checkLogs": "",
|
||||
"tryAgain": "Προσπαθήστε ξανά",
|
||||
"loading": ""
|
||||
"loading": "",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "",
|
||||
"changePosition": "Αλλαγή θέσης"
|
||||
"changePosition": "Αλλαγή θέσης",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Password",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Includes a minimum of 8 characters",
|
||||
"lowercase": "Includes a lower-case letter",
|
||||
"uppercase": "Includes an upper-case letter",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Open media"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Check the documentation",
|
||||
"checkLogs": "Check logs for more information",
|
||||
"tryAgain": "Try again",
|
||||
"loading": "Loading"
|
||||
"loading": "Loading",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "here",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "New category",
|
||||
"changePosition": "Change position"
|
||||
"changePosition": "Change position",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,8 +132,9 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Password",
|
||||
"requirement": {
|
||||
"length": "Includes at least 8 characters",
|
||||
"suggestionsTitle": "Password suggestions",
|
||||
"suggestion": {
|
||||
"length": "At least 8 characters",
|
||||
"lowercase": "Includes lowercase letter",
|
||||
"uppercase": "Includes uppercase letter",
|
||||
"number": "Includes number",
|
||||
@@ -1054,6 +1055,9 @@
|
||||
"open": {
|
||||
"label": "Open media"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": "No media uploaded"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1088,9 @@
|
||||
"checkoutDocs": "Check out the documentation",
|
||||
"checkLogs": "Check logs for more details",
|
||||
"tryAgain": "Try again",
|
||||
"loading": "Loading"
|
||||
"loading": "Loading",
|
||||
"show": "Show",
|
||||
"hide": "Hide"
|
||||
},
|
||||
"here": "here",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1255,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "New category",
|
||||
"changePosition": "Change position"
|
||||
"changePosition": "Change position",
|
||||
"settings": "Settings"
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -1399,6 +1406,9 @@
|
||||
"openNewTab": {
|
||||
"label": "Open in new tab"
|
||||
},
|
||||
"withBorder": {
|
||||
"label": "Show border"
|
||||
},
|
||||
"items": {
|
||||
"label": "Bookmarks",
|
||||
"add": "Add bookmark"
|
||||
@@ -3452,6 +3462,9 @@
|
||||
"public": "This board is public",
|
||||
"private": "This board is private"
|
||||
},
|
||||
"noResults": {
|
||||
"title": "No boards yet"
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Contraseña",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Incluye al menos 8 caracteres",
|
||||
"lowercase": "Incluye al menos una letra minúscula",
|
||||
"uppercase": "Incluye al menos una letra mayúscula",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Abrir imagen"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Consultar la documentación",
|
||||
"checkLogs": "Comprueba los registros para más detalles",
|
||||
"tryAgain": "Intentar de nuevo",
|
||||
"loading": "Cargando"
|
||||
"loading": "Cargando",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "aquí",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Nueva Categoría",
|
||||
"changePosition": "Cambiar posición"
|
||||
"changePosition": "Cambiar posición",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "Este tablero es público",
|
||||
"private": "Este tablero es privado"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "",
|
||||
"lowercase": "",
|
||||
"uppercase": "",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "",
|
||||
"checkLogs": "",
|
||||
"tryAgain": "",
|
||||
"loading": ""
|
||||
"loading": "",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "",
|
||||
"changePosition": ""
|
||||
"changePosition": "",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Mot de passe",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Contient au moins 8 caractères",
|
||||
"lowercase": "Inclut une lettre minuscule",
|
||||
"uppercase": "Inclut une lettre majuscule",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Ouvrir le média"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Voir la documentation",
|
||||
"checkLogs": "Vérifiez les logs pour plus de détails",
|
||||
"tryAgain": "Réessayer",
|
||||
"loading": "Chargement"
|
||||
"loading": "Chargement",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "ici",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Nouvelle catégorie",
|
||||
"changePosition": "Modifier la position"
|
||||
"changePosition": "Modifier la position",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "Ce tableau est public",
|
||||
"private": "Ce tableau est privé"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "סיסמה",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "כולל לפחות 8 תווים",
|
||||
"lowercase": "אפשר אותיות קטנות",
|
||||
"uppercase": "אפשר אותיות גדולות",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "פתיחת מדיה"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "בדוק את התיעוד",
|
||||
"checkLogs": "בדוק לוגים לפרטים נוספים",
|
||||
"tryAgain": "נא לנסות שוב",
|
||||
"loading": "טוען"
|
||||
"loading": "טוען",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "כאן",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "קטגוריה חדשה",
|
||||
"changePosition": "שנה מיקום"
|
||||
"changePosition": "שנה מיקום",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "הלוח הזה ציבורי",
|
||||
"private": "הלוח הזה פרטי"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Lozinka",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "",
|
||||
"lowercase": "Uključuje mala slova",
|
||||
"uppercase": "Uključuje veliko slovo",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "",
|
||||
"checkLogs": "",
|
||||
"tryAgain": "Pokušaj ponovno",
|
||||
"loading": ""
|
||||
"loading": "",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "",
|
||||
"changePosition": "Promijenjen položaj"
|
||||
"changePosition": "Promijenjen položaj",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Jelszó",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Tartalmazzon legalább 8 karaktert",
|
||||
"lowercase": "Tartalmazzon kisbetűt",
|
||||
"uppercase": "Tartalmazzon nagybetűt",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Média megnyitása"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Tekintse meg a dokumentációt",
|
||||
"checkLogs": "További részletekért ellenőrizze a naplókat",
|
||||
"tryAgain": "Próbálja újra",
|
||||
"loading": "Töltés"
|
||||
"loading": "Töltés",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "itt",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Új kategória",
|
||||
"changePosition": "Pozíció módosítása"
|
||||
"changePosition": "Pozíció módosítása",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "Password",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "Include almeno 8 caratteri",
|
||||
"lowercase": "Include lettera minuscola",
|
||||
"uppercase": "Include lettera maiuscola",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "Apri media"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": "Nessun media caricato"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "Consulta la documentazione",
|
||||
"checkLogs": "Controlla i log per maggiori dettagli",
|
||||
"tryAgain": "Riprova",
|
||||
"loading": "Caricamento"
|
||||
"loading": "Caricamento",
|
||||
"show": "Visualizza",
|
||||
"hide": "Nascondi"
|
||||
},
|
||||
"here": "qui",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "Nuova categoria",
|
||||
"changePosition": "Cambia posizione"
|
||||
"changePosition": "Cambia posizione",
|
||||
"settings": "Impostazioni"
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "Questa board è pubblica",
|
||||
"private": "Questa board è privata"
|
||||
},
|
||||
"noResults": {
|
||||
"title": "Ancora nessuna board"
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "パスワード",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "少なくとも 8 文字以上を含む",
|
||||
"lowercase": "小文字を含む",
|
||||
"uppercase": "大文字を含む",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": "メディアを開く"
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "ドキュメントを確認する",
|
||||
"checkLogs": "詳細はログを確認してください",
|
||||
"tryAgain": "リトライ",
|
||||
"loading": "読み込み中"
|
||||
"loading": "読み込み中",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "こちら",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "新しいカテゴリー",
|
||||
"changePosition": "ポジションを変更する"
|
||||
"changePosition": "ポジションを変更する",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "このボードは公開中です",
|
||||
"private": "このボードは非公開です"
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
},
|
||||
"password": {
|
||||
"label": "비밀번호",
|
||||
"requirement": {
|
||||
"suggestion": {
|
||||
"length": "",
|
||||
"lowercase": "소문자 포함",
|
||||
"uppercase": "대문자 포함",
|
||||
@@ -1054,6 +1054,9 @@
|
||||
"open": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
@@ -1084,7 +1087,9 @@
|
||||
"checkoutDocs": "",
|
||||
"checkLogs": "",
|
||||
"tryAgain": "다시 시도",
|
||||
"loading": ""
|
||||
"loading": "",
|
||||
"show": "",
|
||||
"hide": ""
|
||||
},
|
||||
"here": "",
|
||||
"iconPicker": {
|
||||
@@ -1249,7 +1254,8 @@
|
||||
"menu": {
|
||||
"label": {
|
||||
"create": "",
|
||||
"changePosition": "위치 변경"
|
||||
"changePosition": "위치 변경",
|
||||
"settings": ""
|
||||
}
|
||||
},
|
||||
"openAllInNewTabs": {
|
||||
@@ -3452,6 +3458,9 @@
|
||||
"public": "",
|
||||
"private": ""
|
||||
},
|
||||
"noResults": {
|
||||
"title": ""
|
||||
},
|
||||
"modal": {
|
||||
"createBoard": {
|
||||
"field": {
|
||||
|
||||
Loaded 100 of 295 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user