{
  "name": "vikunja-frontend",
  "description": "The todo app to organize your life.",
  "private": true,
  "version": "2.3.0",
  "license": "AGPL-3.0-or-later",
  "repository": {
    "type": "git",
    "url": "https://code.vikunja.io/vikunja"
  },
  "bugs": {
    "url": "https://code.vikunja.io/vikunja/issues"
  },
  "homepage": "https://vikunja.io/",
  "funding": "https://opencollective.com/vikunja",
  "packageManager": "pnpm@10.28.1",
  "engines": {
    "node": ">=24.0.0"
  },
  "keywords": [
    "todo",
    "productivity",
    "task management",
    "organisation",
    "gantt",
    "kanban"
  ],
  "type": "module",
  "scripts": {
    "dev": "vite",
    "serve": "pnpm run dev",
    "preview": "vite preview --port 4173",
    "preview:dev": "vite preview --outDir dist-dev --mode development --port 4173",
    "preview:vikunja": "../vikunja",
    "build": "vite build && workbox copyLibraries dist/",
    "build:dev": "vite build --mode development --outDir dist-dev/",
    "lint": "eslint 'src/**/*.{js,ts,vue}'",
    "lint:fix": "pnpm run lint --fix",
    "lint:styles": "stylelint 'src/**/*.{css,scss,vue}'",
    "lint:styles:fix": "pnpm run lint:styles --fix",
    "test:e2e": "playwright test",
    "test:e2e:headed": "playwright test --headed",
    "test:e2e:ui": "playwright test --ui-host=0.0.0.0",
    "test:unit": "vitest --dir ./src",
    "typecheck": "vue-tsc --build --force",
    "fonts:update": "pnpm fonts:download && pnpm fonts:subset",
    "fonts:download": "./scripts/fonts-download.sh",
    "fonts:subset": "./scripts/fonts-subset.sh",
    "story:dev": "histoire dev",
    "story:build": "histoire build",
    "story:preview": "histoire preview"
  },
  "dependencies": {
    "@floating-ui/dom": "1.7.4",
    "@fortawesome/fontawesome-svg-core": "7.1.0",
    "@fortawesome/free-regular-svg-icons": "7.1.0",
    "@fortawesome/free-solid-svg-icons": "7.1.0",
    "@fortawesome/vue-fontawesome": "3.1.3",
    "@intlify/unplugin-vue-i18n": "11.0.3",
    "@kyvg/vue3-notification": "3.4.2",
    "@sentry/vue": "10.36.0",
    "@tiptap/core": "3.17.0",
    "@tiptap/extension-blockquote": "3.17.0",
    "@tiptap/extension-code-block-lowlight": "3.17.0",
    "@tiptap/extension-hard-break": "3.17.0",
    "@tiptap/extension-image": "3.17.0",
    "@tiptap/extension-link": "3.17.0",
    "@tiptap/extension-list": "3.17.0",
    "@tiptap/extension-mention": "3.17.0",
    "@tiptap/extension-table": "3.17.0",
    "@tiptap/extension-typography": "3.17.0",
    "@tiptap/extension-underline": "3.17.0",
    "@tiptap/extensions": "3.17.0",
    "@tiptap/pm": "3.17.0",
    "@tiptap/starter-kit": "3.17.0",
    "@tiptap/suggestion": "3.17.0",
    "@tiptap/vue-3": "3.17.0",
    "@vueuse/core": "14.1.0",
    "@vueuse/router": "14.1.0",
    "axios": "1.16.0",
    "blurhash": "2.0.5",
    "bulma-css-variables": "0.9.33",
    "change-case": "5.4.4",
    "dayjs": "1.11.19",
    "dompurify": "3.4.0",
    "fast-deep-equal": "3.1.3",
    "flatpickr": "4.6.13",
    "floating-vue": "5.2.2",
    "is-touch-device": "1.0.1",
    "klona": "2.0.6",
    "lowlight": "3.3.0",
    "marked": "17.0.1",
    "nanoid": "5.1.6",
    "pinia": "3.0.4",
    "register-service-worker": "1.7.2",
    "sortablejs": "1.15.6",
    "ufo": "1.6.3",
    "vue": "3.5.27",
    "vue-advanced-cropper": "2.8.9",
    "vue-flatpickr-component": "11.0.5",
    "vue-i18n": "11.2.8",
    "vue-router": "4.6.4",
    "vuemoji-picker": "0.3.2",
    "workbox-precaching": "7.4.1",
    "zhyswan-vuedraggable": "4.1.3"
  },
  "devDependencies": {
    "@faker-js/faker": "10.4.0",
    "@histoire/plugin-screenshot": "1.0.0-beta.1",
    "@histoire/plugin-vue": "1.0.0-beta.1",
    "@playwright/test": "1.58.2",
    "@sentry/vite-plugin": "3.6.1",
    "@tailwindcss/vite": "4.3.0",
    "@tsconfig/node24": "24.0.4",
    "@types/codemirror": "5.60.17",
    "@types/is-touch-device": "1.0.3",
    "@types/node": "24.13.1",
    "@types/sortablejs": "1.15.9",
    "@types/ws": "8.18.1",
    "@typescript-eslint/eslint-plugin": "8.61.0",
    "@typescript-eslint/parser": "8.61.0",
    "@vitejs/plugin-vue": "6.0.7",
    "@vue/eslint-config-typescript": "14.8.0",
    "@vue/test-utils": "2.4.11",
    "@vue/tsconfig": "0.9.1",
    "@vueuse/shared": "14.3.0",
    "autoprefixer": "10.5.0",
    "browserslist": "4.28.2",
    "caniuse-lite": "1.0.30001797",
    "csstype": "3.2.3",
    "esbuild": "0.28.0",
    "eslint": "9.39.4",
    "eslint-plugin-depend": "1.5.0",
    "eslint-plugin-vue": "10.9.2",
    "happy-dom": "20.10.2",
    "histoire": "1.0.0-beta.1",
    "otplib": "12.0.1",
    "postcss": "8.5.15",
    "postcss-easing-gradients": "3.0.1",
    "postcss-html": "1.8.1",
    "postcss-preset-env": "11.3.0",
    "rollup": "4.61.1",
    "rollup-plugin-visualizer": "6.0.11",
    "sass-embedded": "1.100.0",
    "stylelint": "17.13.0",
    "stylelint-config-property-sort-order-smacss": "10.0.0",
    "stylelint-config-recommended-vue": "1.6.1",
    "stylelint-config-standard-scss": "17.0.0",
    "stylelint-use-logical": "2.1.3",
    "tailwindcss": "4.3.0",
    "typescript": "5.9.3",
    "unplugin-inject-preload": "3.0.0",
    "vite": "7.3.5",
    "vite-plugin-pwa": "1.3.0",
    "vite-plugin-vue-devtools": "8.1.2",
    "vite-svg-loader": "5.1.1",
    "vitest": "4.1.8",
    "vue-tsc": "3.3.4",
    "wait-on": "9.0.10",
    "workbox-cli": "7.4.1",
    "ws": "8.21.0"
  },
  "pnpm": {
    "onlyBuiltDependencies": [
      "@parcel/watcher",
      "@sentry/cli",
      "esbuild",
      "puppeteer",
      "vue-demi"
    ],
    "overrides": {
      "minimatch": "^10.2.3",
      "rollup": "$rollup",
      "basic-ftp": ">=5.2.2",
      "serialize-javascript": "^7.0.5",
      "flatted": "^3.4.1",
      "ip-address": ">=10.1.1",
      "postcss": ">=8.5.10",
      "tmp": ">=0.2.6"
    }
  }
}
