vikunja/frontend
Copilot 9bc67032c3
fix: validate coordinates before elementsFromPoint on Firefox mobile (#1992)
Firefox mobile drag events can provide non-finite coordinate values
(`undefined`, `NaN`, `Infinity`) which cause
`document.elementsFromPoint()` to throw: "Argument 1 is not a finite
floating-point value."

**Changes**
- Added `Number.isFinite()` validation in `findProjectIdAtPosition()`
before calling `elementsFromPoint()`
- Returns `null` when coordinates are invalid, gracefully aborting the
drop operation

```typescript
function findProjectIdAtPosition(mouseX: number, mouseY: number): number | null {
	// Validate coordinates are finite numbers (required by elementsFromPoint)
	if (!Number.isFinite(mouseX) || !Number.isFinite(mouseY)) {
		return null
	}

	const elementsUnderMouse = document.elementsFromPoint(mouseX, mouseY)
	// ... rest of implementation
}
```

The caller already handles `null` returns appropriately, treating it as
"no valid drop target found."

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kolaente <13721712+kolaente@users.noreply.github.com>
2025-12-16 23:05:42 +00:00
..
docs fix: markdown spelling 2025-06-10 12:10:42 +02:00
originalMedia chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
patches fix(deps): update dependency flexsearch to v0.7.43 (#2095) 2024-09-12 12:35:35 +00:00
public chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
scripts feat: add subsets for all supported languages 2025-08-17 23:11:30 +02:00
src fix: validate coordinates before elementsFromPoint on Firefox mobile (#1992) 2025-12-16 23:05:42 +00:00
tests fix(editor): prevent TypeError when typing mentions in comments (#1997) 2025-12-16 22:56:05 +00:00
.editorconfig chore(dev): insert final newline 2025-05-23 11:56:50 +02:00
.env.local.example chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
.gitignore chore(tests): remove Cypress, use Playwright exclusively (#1976) 2025-12-12 20:07:18 +00:00
.npmrc chore(tests): remove Cypress, use Playwright exclusively (#1976) 2025-12-12 20:07:18 +00:00
.nvmrc chore(deps): update node.js to v24.12.0 (#1962) 2025-12-10 19:13:30 +00:00
.stylelintrc.json chore(tests): remove Cypress, use Playwright exclusively (#1976) 2025-12-12 20:07:18 +00:00
CHANGELOG.md chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
LICENSE fix: correct license header references (#882) 2025-06-10 12:18:38 +02:00
README.md docs(frontend): fix env file example name 2025-06-10 12:10:42 +02:00
cliff.toml chore: move frontend files 2024-02-07 14:56:56 +01:00
embed.go fix: correct license header references (#882) 2025-06-10 12:18:38 +02:00
env.config.d.ts feat(ts): improve module declarations (#957) 2025-06-16 22:32:40 +02:00
env.d.ts chore(tests): remove Cypress, use Playwright exclusively (#1976) 2025-12-12 20:07:18 +00:00
eslint.config.js chore(tests): remove Cypress, use Playwright exclusively (#1976) 2025-12-12 20:07:18 +00:00
histoire.config.ts chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
index.html feat: add logo change toggle setting (#1031) 2025-06-26 15:59:34 +00:00
netlify.toml feat(dev): use proxy server in dev mode (#3069) 2025-03-09 13:40:57 +00:00
package.json chore(deps): replace dev-dependencies (#1990) 2025-12-16 08:51:06 +00:00
playwright.config.ts feat: make sidebar resizable (#1965) 2025-12-12 10:46:46 +00:00
pnpm-lock.yaml chore(deps): replace dev-dependencies (#1990) 2025-12-16 08:51:06 +00:00
tailwind.config.js fix: correct comments 2025-07-02 17:46:21 +02:00
tsconfig.app.json feat(ts): improve module declarations (#957) 2025-06-16 22:32:40 +02:00
tsconfig.config.json chore(deps): replace dev-dependencies (#1990) 2025-12-16 08:51:06 +00:00
tsconfig.json fix(ts): align with create-vue setup 2024-06-19 14:05:41 +00:00
tsconfig.vitest.json chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
vite.config.ts fix(components): handle null values in DatepickerWithValues 2025-11-22 17:23:03 +01:00

README.md

Web frontend for Vikunja

The todo app to organize your life.

License: AGPL-3.0-or-later Translation

This is the web frontend for Vikunja, written in Vue.js.

Take a look at our roadmap (hosted on Vikunja!) for a list of things we're currently working on!

For general information about the project, refer to the top-level readme of this repo.

Project setup

pnpm install

Development

Define backend server

You can develop the web front end against any accessible backend, including the demo at https://try.vikunja.io

In order to do so, you need to set the DEV_PROXY env variable. The recommended way to do so is to:

  • Copy .env.local.example as .env.local
  • Uncomment the DEV_PROXY line
  • Set the backend url you want to use

In the end, it should look like DEV_PROXY=https://try.vikunja.io if you work against the online demo backend.

Start dev server (compiles and hot-reloads)

pnpm run dev

Compiles and minifies for production

pnpm run build

Lints and fixes files

pnpm run lint

License

This project is licensed under the AGPL-3.0-or-later license. See the LICENSE file for details.