Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,18 @@ jobs:
statuses: write

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
with:
cache: true

- uses: actions/setup-node@v6
with:
node-version: 24
cache: "pnpm"

- run: pnpm install --frozen-lockfile

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/publish-pre-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ jobs:
contents: write

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
persist-credentials: false

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6

- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24

- run: pnpm install --frozen-lockfile

Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ jobs:
contents: write

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
persist-credentials: false

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6

- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24

- run: pnpm install --frozen-lockfile

Expand Down Expand Up @@ -53,15 +53,15 @@ jobs:
contents: write

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
persist-credentials: false

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6

- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24

- run: pnpm install --frozen-lockfile

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ jobs:
contents: read

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6

- uses: actions/setup-node@v6
with:
Expand Down
1 change: 1 addition & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"singleQuote": false,
"printWidth": 200,
"plugins": ["prettier-plugin-tailwindcss"],
"tailwindStylesheet": "./src/index.css",
"tailwindFunctions": ["clsx"],
"endOfLine": "lf"
}
3 changes: 2 additions & 1 deletion .redmine/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ This folder provides local Redmine instances for manual testing against multiple
Run from this directory (`.redmine`):

```bash
docker compose up -d redmine-v6
docker compose up -d redmine-v7
```

Available services and ports:

- Redmine end-to-end tests: [http://localhost:9999](http://localhost:9999) (service `redmine-e2e-tests`)
- Redmine 7: [http://localhost:3007](http://localhost:3007) (service `redmine-v7`)
- Redmine 6: [http://localhost:3006](http://localhost:3006) (service `redmine-v6`)
- Redmine 5: [http://localhost:3005](http://localhost:3005) (service `redmine-v5`)
- Redmine 4: [http://localhost:3004](http://localhost:3004) (service `redmine-v4`)
Expand Down
12 changes: 12 additions & 0 deletions .redmine/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ services:
- ./data/e2e-tests/sqlite:/usr/src/redmine/sqlite
- ./themes:/usr/src/redmine/themes:ro

redmine-v7:
container_name: redmine-v7
image: redmine:7
pull_policy: always
restart: unless-stopped
ports:
- "3007:3000"
volumes:
- ./data/v7/files:/usr/src/redmine/files
- ./data/v7/sqlite:/usr/src/redmine/sqlite
- ./themes:/usr/src/redmine/themes:ro

redmine-v6:
container_name: redmine-v6
image: redmine:6
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
![License](https://img.shields.io/github/license/CrawlerCode/redmine-time-tracking?logo=github)
[![Semantic-Release](https://img.shields.io/badge/semantic--release-conventional%20commits-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
![Release Version](https://img.shields.io/github/v/release/CrawlerCode/redmine-time-tracking?logo=github)
![Pre-Release Version](https://img.shields.io/github/v/release/CrawlerCode/redmine-time-tracking?include_prereleases&logo=github&label=pre-release)
![Pre-Release Version](https://img.shields.io/github/v/release/CrawlerCode/redmine-time-tracking?include_prereleases&filter=*-beta.*&logo=github&label=pre-release)

![Chrome Web Store Version](https://img.shields.io/chrome-web-store/v/ldcanhhkffokndenejhafhlkapflgcjg?logo=google-chrome&logoColor=white)
![Chrome Web Store Users](https://img.shields.io/chrome-web-store/users/ldcanhhkffokndenejhafhlkapflgcjg?logo=google-chrome&logoColor=white)
Expand Down
39 changes: 19 additions & 20 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,42 @@ import tanstackRouter from "@tanstack/eslint-plugin-router";
import prettierConfig from "eslint-config-prettier";
import react from "eslint-plugin-react";
import reactHooks from "eslint-plugin-react-hooks";
import globals from "globals";
import tailwind from "eslint-plugin-tailwindcss";
import { defineConfig } from "eslint/config";
import ts from "typescript-eslint";

/** @type {import('eslint').Linter.Config[]} */
export default [
export default defineConfig([
// Ignore
{ ignores: ["dist"] },
// Base
{
files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"],
settings: {
react: {
version: "detect",
},
},
},
{
languageOptions: { globals: globals.browser },
},
// TypeScript
js.configs.recommended,
...ts.configs.recommended,
// React
react.configs.flat.recommended,
reactHooks.configs.flat.recommended,
{
plugins: {
"react-hooks": reactHooks,
settings: {
react: {
version: "detect",
},
},
rules: {
"react/react-in-jsx-scope": "off",
...reactHooks.configs.recommended.rules,
},
},
// Prettier
prettierConfig,
// Tailwind CSS
//...tailwind.configs["flat/recommended"], // TODO: Wait until working with Tailwind CSS v4,
{
...tailwind.configs.recommended,
settings: {
tailwindcss:
/** @type {import('eslint-plugin-tailwindcss').PluginSettings} */
({
cssConfigPath: "./src/index.css",
}),
},
},
// Tanstack
...tanstackRouter.configs["flat/recommended"],
...tanstackQuery.configs["flat/recommended"],
Expand Down Expand Up @@ -69,4 +68,4 @@ export default [
],
},
},
];
]);
4 changes: 4 additions & 0 deletions mise.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[tools]
node = "24"
"npm:corepack" = "latest"
pnpm = "11"
101 changes: 57 additions & 44 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,77 +31,90 @@
"lint:react-doctor": "pnpx react-doctor@latest -y --verbose .",
"test": "playwright test",
"test:update-snapshots": "playwright test --update-snapshots=changed",
"generate-store-screenshots": "tsx screenshots/generate-store-screenshots.ts",
"generate-store-screenshots": "node screenshots/generate-store-screenshots.ts",
"release": "semantic-release"
},
"dependencies": {
"@base-ui/react": "^1.4.1",
"@mantine/hooks": "^9.1.1",
"@tanstack/query-async-storage-persister": "^5.100.9",
"@tanstack/react-form": "^1.29.1",
"@tanstack/react-query": "^5.100.9",
"@tanstack/react-query-devtools": "^5.100.9",
"@tanstack/react-query-persist-client": "^5.100.9",
"@tanstack/react-router": "^1.169.2",
"axios": "^1.16.0",
"@base-ui/react": "^1.6.0",
"@mantine/hooks": "^9.4.1",
"@tanstack/query-async-storage-persister": "^5.101.2",
"@tanstack/react-form": "^1.33.1",
"@tanstack/react-query": "^5.101.2",
"@tanstack/react-query-devtools": "^5.101.2",
"@tanstack/react-query-persist-client": "^5.101.2",
"@tanstack/react-router": "^1.170.17",
"@uiw/react-md-editor": "^4.1.1",
"axios": "^1.18.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"country-flag-icons": "^1.6.17",
"date-fns": "^4.1.0",
"country-flag-icons": "^1.6.20",
"date-fns": "^4.4.0",
"deepmerge": "^4.3.1",
"lucide-react": "^1.14.0",
"qs": "^6.15.1",
"react": "^19.2.6",
"react-day-picker": "^9.14.0",
"react-dom": "^19.2.6",
"react-intl": "^10.1.5",
"lucide-react": "^1.24.0",
"qs": "^6.15.3",
"react": "^19.2.7",
"react-day-picker": "^10.0.1",
"react-dom": "^19.2.7",
"react-intl": "^10.1.15",
"react-reverse-portal": "^2.3.0",
"recharts": "^3.9.2",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"tailwind-merge": "^3.6.0",
"zod": "^4.4.3"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
"@formatjs/cli": "^6.14.5",
"@playwright/test": "^1.59.1",
"@formatjs/cli": "^6.16.12",
"@playwright/test": "^1.61.1",
"@rolldown/plugin-babel": "^0.2.3",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/git": "^10.0.1",
"@tailwindcss/vite": "^4.2.4",
"@tanstack/eslint-plugin-query": "^5.100.9",
"@tanstack/eslint-plugin-router": "^1.161.6",
"@tanstack/router-plugin": "^1.167.35",
"@types/chrome": "^0.1.42",
"@tailwindcss/vite": "^4.3.2",
"@tanstack/eslint-plugin-query": "^5.101.2",
"@tanstack/eslint-plugin-router": "^1.162.0",
"@tanstack/router-plugin": "^1.168.19",
"@types/chrome": "^0.2.2",
"@types/node": "^24.12.3",
"@types/qs": "^6.15.1",
"@types/react": "^19.2.14",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@typescript-eslint/eslint-plugin": "^8.59.2",
"@typescript-eslint/parser": "^8.59.2",
"@vitejs/plugin-react": "^6.0.1",
"@typescript/native": "npm:typescript@^7.0.2",
"@vitejs/plugin-react": "^6.0.3",
"babel-plugin-react-compiler": "1.0.0",
"conventional-changelog-conventionalcommits": "^9.3.1",
"conventional-changelog-conventionalcommits": "^10.2.1",
"cross-env": "^10.1.0",
"dotenv": "^17.4.2",
"eslint": "^9.39.4",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-tailwindcss": "^3.18.3",
"globals": "^17.6.0",
"prettier": "^3.8.3",
"eslint-plugin-tailwindcss": "^4.0.6",
"prettier": "^3.9.4",
"prettier-plugin-tailwindcss": "^0.8.0",
"semantic-release": "^25.0.3",
"shadcn": "^4.7.0",
"sharp": "^0.34.5",
"stylelint": "^17.11.0",
"semantic-release": "^25.0.5",
"shadcn": "^4.13.0",
"sharp": "^0.35.3",
"stylelint": "^17.14.0",
"stylelint-config-standard": "^40.0.0",
"stylelint-config-tailwindcss": "^1.0.1",
"tailwindcss": "^4.2.4",
"tailwindcss": "^4.3.2",
"tw-animate-css": "^1.4.0",
"typescript": "^6.0.3",
"typescript-eslint": "^8.59.2",
"vite": "^8.0.11",
"wxt": "^0.20.25"
"typescript": "npm:@typescript/typescript6@^6.0.2",
"typescript-eslint": "^8.63.0",
"vite": "^8.1.4",
"wxt": "^0.20.27"
},
"packageManager": "pnpm@11.0.9"
"packageManager": "pnpm@11.11.0",
"devEngines": {
"runtime": {
"name": "node",
"version": "^24",
"onFail": "error"
},
"packageManager": {
"name": "pnpm",
"version": "11.11.0",
"onFail": "download"
}
}
}
Loading