Compare commits

...

665 Commits

Author SHA1 Message Date
renovate e0c00b306e fix(deps): update dependency pinia to v2.0.32 2023-02-21 08:04:09 +00:00
renovate 10eaacc552 chore(deps): update dependency vue-tsc to v1.1.5 2023-02-20 20:04:05 +00:00
renovate 4b1465955a chore(deps): update typescript-eslint monorepo to v5.53.0 2023-02-20 19:16:38 +00:00
renovate 1711318212 chore(deps): update dependency esbuild to v0.17.10 2023-02-20 18:04:33 +00:00
renovate b042547aaa chore(deps): update dependency netlify-cli to v12.13.2 2023-02-20 12:29:07 +00:00
renovate ed0db956eb chore(deps): update dependency happy-dom to v8.6.0 2023-02-20 12:04:07 +00:00
renovate a66f8a6484 chore(deps): update dependency rollup to v3.17.2 2023-02-20 11:34:43 +00:00
renovate 47e895149e chore(deps): update dependency vue-tsc to v1.1.4 2023-02-20 11:34:01 +00:00
renovate 8e00014feb fix(deps): update dependency pinia to v2.0.31 2023-02-20 11:33:30 +00:00
renovate 6146340034 fix(deps): update dependency codemirror to v5.65.12 2023-02-20 11:04:16 +00:00
renovate c7b761b0eb chore(deps): update dependency caniuse-lite to v1.0.30001457 2023-02-20 09:32:51 +00:00
renovate a1e84b3460 chore(deps): update dependency @vue/test-utils to v2.3.0 2023-02-20 09:32:12 +00:00
renovate 038debaa22 chore(deps): update dependency vite to v4.1.3 2023-02-20 09:04:17 +00:00
renovate 88faf04251 chore(deps): update dependency esbuild to v0.17.9 2023-02-19 18:04:07 +00:00
renovate 04be2b9745 chore(deps): update dependency rollup to v3.17.1 2023-02-18 20:04:05 +00:00
renovate 815e8cce0e chore(deps): update dependency sass to v1.58.3 2023-02-18 13:04:11 +00:00
renovate d12f9247ff chore(deps): update dependency vue-tsc to v1.1.3 2023-02-18 12:38:10 +00:00
renovate 85e7a17934 chore(deps): update pnpm to v7.27.1 2023-02-18 12:37:43 +00:00
renovate 59c5d43348 chore(deps): update dependency rollup to v3.17.0 2023-02-18 12:37:10 +00:00
renovate c011f9aa52 fix(deps): update dependency @vueuse/core to v9.13.0 2023-02-18 12:36:29 +00:00
renovate b9f5319a4f chore(deps): update histoire to v0.15.8 2023-02-18 12:04:22 +00:00
renovate f120ba4169 chore(deps): update dependency @types/node to v18.14.0 2023-02-17 21:04:08 +00:00
renovate b2b70f4a9d chore(deps): update dependency @cypress/vite-dev-server to v5.0.3 2023-02-17 15:04:01 +00:00
renovate 9facffe3e9 fix(deps): update dependency blurhash to v2.0.5 2023-02-17 14:38:30 +00:00
renovate c31aff1d88 chore(deps): update histoire to v0.15.7 2023-02-17 14:23:27 +00:00
renovate 60dea80462 chore(deps): update dependency rollup to v3.16.0 2023-02-17 14:20:21 +00:00
renovate cd10ccfbc0 fix(deps): update sentry-javascript monorepo to v7.38.0 2023-02-17 14:04:40 +00:00
renovate 8647402038 chore(deps): update dependency vite to v4.1.2 2023-02-17 11:04:08 +00:00
renovate 990fd46302 chore(deps): update node.js to v18.14.1 2023-02-17 10:17:25 +00:00
renovate cf0aafd9e6 fix(deps): update dependency ufo to v1.1.0 2023-02-17 09:15:10 +00:00
renovate 70d2535e93 chore(deps): update dependency sass to v1.58.2 2023-02-17 02:04:07 +00:00
Frederick [Bot] 0c6f1a4083 [skip ci] Updated translations via Crowdin 2023-02-17 00:06:13 +00:00
renovate 29eb42932a chore(deps): update dependency vue-tsc to v1.1.2 2023-02-16 17:04:00 +00:00
renovate 736e9051d8 chore(deps): update histoire to v0.15.4 2023-02-16 10:04:01 +00:00
renovate 4a4c401558 chore(deps): update dependency cypress to v12.6.0 (#3115)
Reviewed-on: vikunja/frontend#3115
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-15 22:45:51 +00:00
renovate 9198abe24d chore(deps): pin node.js to 18.14.0 2023-02-15 22:02:55 +00:00
Dominik Pschenitschni 97c8970dd6 feat: use renovate js-app as preset (#3087)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#3087
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-02-15 21:58:35 +00:00
renovate 5303b6bc97 chore(deps): update dependency vue-tsc to v1.1.0 2023-02-15 20:04:24 +00:00
renovate 24a0a8f5eb chore(deps): update histoire to v0.15.3 2023-02-15 19:03:46 +00:00
Dominik Pschenitschni d07ad495e2 fix(postcss-preset-env): client side polyfills (#3051)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#3051
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-02-15 15:40:00 +00:00
renovate 8465afe421 chore(deps): update histoire to v0.15.1 2023-02-15 15:03:47 +00:00
kolaente d40729cbe7
fix: button styles
Partially reverts eaeddda4e4
2023-02-15 11:28:25 +01:00
kolaente fa0e46a399
chore: remove sponsor 2023-02-15 11:12:00 +01:00
renovate b78481f9f6 fix(deps): update dependency @kyvg/vue3-notification to v2.9.0 (#3113)
Reviewed-on: vikunja/frontend#3113
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-14 15:16:03 +00:00
renovate cbc9cf6f7f fix(deps): update dependency vue-flatpickr-component to v11.0.2 (#3112)
Reviewed-on: vikunja/frontend#3112
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-14 10:28:55 +00:00
renovate 62fd9a656e chore(deps): update dependency sass to v1.58.1 2023-02-14 01:04:11 +00:00
renovate 85269b4524 chore(deps): update dependency start-server-and-test to v1.15.4 (#3109)
Reviewed-on: vikunja/frontend#3109
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-13 20:15:41 +00:00
renovate 536d709961 fix(deps): update dependency axios to v1.3.3 2023-02-13 19:04:37 +00:00
renovate 59d6d7e786 chore(deps): update typescript-eslint monorepo to v5.52.0 2023-02-13 18:04:07 +00:00
renovate ae86d0d42a fix(deps): update dependency dompurify to v3 (#3107)
Reviewed-on: vikunja/frontend#3107
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-13 17:39:29 +00:00
renovate 9a20b7a853 fix(deps): update sentry-javascript monorepo to v7.37.2 2023-02-13 16:04:08 +00:00
renovate 5687b66ea5 chore(deps): update dependency vitest to v0.28.5 2023-02-13 13:04:04 +00:00
renovate 1da411e1f6 chore(deps): update dependency vite-plugin-inject-preload to v1.3.0 2023-02-13 09:48:27 +00:00
renovate e8a6d3f31b chore(deps): update dependency caniuse-lite to v1.0.30001451 2023-02-13 09:47:50 +00:00
renovate a25a795276 chore(deps): update dependency netlify-cli to v12.12.0 2023-02-13 09:45:48 +00:00
renovate 57f6abd99f chore(deps): update dependency esbuild to v0.17.8 2023-02-13 07:04:03 +00:00
renovate 84d205f90b chore(deps): update dependency vite-plugin-pwa to v0.14.4 2023-02-11 10:04:05 +00:00
renovate de91e7c9ae chore(deps): update histoire to v0.14.2 2023-02-11 09:04:37 +00:00
renovate 2cf9c35acb chore(deps): update dependency eslint to v8.34.0 2023-02-11 08:04:56 +00:00
konrad db525db6eb fix(deps): histoire renovate group 2023-02-11 08:04:20 +00:00
konrad 88525ae7c8 chore(deps): include histoire main package in histoire renovate group 2023-02-11 08:03:36 +00:00
renovate 957bfdc8f1 chore(deps): update dependency histoire to v0.14.2 2023-02-11 00:05:13 +00:00
renovate c52ae83b75 fix(deps): update sentry-javascript monorepo to v7.37.1 2023-02-10 16:03:55 +00:00
renovate df40c4e475
chore(deps): update dependency histoire to v0.14.0 2023-02-10 14:29:39 +01:00
renovate 3f41e9a3a6 chore(deps): update dependency @histoire/plugin-vue to v0.14.0 2023-02-10 13:04:04 +00:00
renovate 1da510b5dd
chore(deps): update dependency @histoire/plugin-screenshot to v0.14.0 2023-02-10 13:35:01 +01:00
renovate 536db3fd46 chore(deps): update dependency @histoire/plugin-vue to v0.14.0 2023-02-10 12:26:56 +00:00
kolaente cefa5250c5
chore(deps): create a group for all histoire dependencies 2023-02-10 13:10:46 +01:00
kolaente f697640636
chore: remove minimist dependency (not used anywhere) 2023-02-10 12:57:48 +01:00
renovate 09b7595b68 chore(deps): update dependency rollup to v3.15.0 2023-02-10 07:08:20 +00:00
renovate 6b7f73f724 chore(deps): update dependency esbuild to v0.17.7 2023-02-09 23:04:14 +00:00
Dominik Pschenitschni d6b55c7570 feat: fix calculation of token invalidation (#3077)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#3077
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-02-09 21:45:18 +00:00
Yurii Vlasov 3f4b08b8be Added ipv6 control script 2023-02-09 21:43:32 +00:00
kolaente 791c61cabb
fix(docker): default api url 2023-02-09 22:30:36 +01:00
konrad e3dd4ef78a feat: persistent menuActive state with Local Storage (#3011)
Reviewed-on: vikunja/frontend#3011
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-02-09 21:14:49 +00:00
renovate 830d0887b9 fix(deps): update sentry-javascript monorepo to v7.37.0 2023-02-09 17:04:06 +00:00
Dominik Pschenitschni e8db2c2b45
feat: header improvements 2023-02-09 15:19:33 +01:00
renovate 706a13242e fix(deps): update dependency @intlify/unplugin-vue-i18n to v0.8.2 2023-02-08 23:34:16 +00:00
renovate 13fab10584 chore(deps): update dependency histoire to v0.13.2 2023-02-08 23:05:01 +00:00
renovate 4b0c8aa66b chore(deps): update dependency @histoire/plugin-vue to v0.13.2 2023-02-08 22:04:14 +00:00
renovate bfaf9401f4 chore(deps): update dependency @histoire/plugin-screenshot to v0.13.2 2023-02-08 21:07:12 +00:00
renovate 13607124a6
chore(deps): update dependency histoire to v0.13.1 2023-02-08 17:34:13 +01:00
renovate 9fc3d0a965 chore(deps): update dependency vite-plugin-pwa to v0.14.3 2023-02-08 16:27:37 +00:00
renovate 4d6286451e chore(deps): update dependency @histoire/plugin-vue to v0.13.1 2023-02-08 16:04:15 +00:00
renovate 0479d17e69 chore(deps): update dependency @histoire/plugin-screenshot to v0.13.1 2023-02-08 15:04:13 +00:00
renovate 5ca272959d chore(deps): update pnpm to v7.27.0 2023-02-08 14:03:48 +00:00
Dominik Pschenitschni c502f9b840
feat: refactor to composable
- using useMediaQuery and useLocalStorage
- remove watcher in contentAuth
2023-02-08 12:56:32 +01:00
renovate a3a313a21f fix(deps): update font awesome to v6.3.0 2023-02-07 20:04:47 +00:00
renovate c58d1ffd2e chore(deps): update dependency vite-plugin-pwa to v0.14.2 2023-02-07 17:04:16 +00:00
David Angel 99dc5cf34f
Refactor to only used local storage value when on desktop viewport widths 2023-02-07 14:58:45 +01:00
David Angel 3604cb3ec7
Solve for resize() 2023-02-07 14:58:45 +01:00
David Angel aa01a92278
Persist menuActive state in Local Storage 2023-02-07 14:58:44 +01:00
Dominik Pschenitschni 7b96397e3b feat: use klona instead of lodash.clonedeep (#3073)
Resolves: vikunja/frontend#3032
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#3073
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-02-07 13:04:03 +00:00
renovate b45a4e1aaf chore(deps): update dependency @types/node to v18.13.0 2023-02-07 09:04:26 +00:00
Frederick [Bot] d3365d6add [skip ci] Updated translations via Crowdin 2023-02-07 00:10:26 +00:00
renovate 49cb2b9e6f chore(deps): update dependency @cypress/vue to v5.0.4 2023-02-06 22:04:02 +00:00
renovate d4ce10e79a chore(deps): update dependency esbuild to v0.17.6 2023-02-06 20:04:01 +00:00
renovate 345c5e3588 chore(deps): update typescript-eslint monorepo to v5.51.0 2023-02-06 18:04:17 +00:00
renovate 7ff84bcd29 chore(deps): update dependency happy-dom to v8.2.6 2023-02-06 10:56:28 +00:00
renovate d1633ef622 chore(deps): update dependency @histoire/plugin-vue to v0.13.0 2023-02-06 10:04:27 +00:00
renovate 7e92bc63ac chore(deps): update caniuse-and-related 2023-02-06 09:41:54 +00:00
renovate be076b65cf chore(deps): update dependency histoire to v0.13.0 2023-02-06 01:05:40 +00:00
Frederick [Bot] 65b90cbee0 [skip ci] Updated translations via Crowdin 2023-02-06 00:09:40 +00:00
renovate 74aac1b245 chore(deps): update dependency @histoire/plugin-screenshot to v0.13.0 2023-02-05 23:38:03 +00:00
renovate ade791ed43 chore(deps): update dependency @types/node to v18.11.19 2023-02-05 12:04:08 +00:00
renovate 55b008c67c chore(deps): update dependency rollup to v3.14.0 2023-02-05 06:03:59 +00:00
Frederick [Bot] 1f088cca18 [skip ci] Updated translations via Crowdin 2023-02-05 00:10:26 +00:00
renovate 6fad1e4969 fix(deps): update dependency axios to v1.3.2 2023-02-03 19:04:04 +00:00
Dominik Pschenitschni eaeddda4e4
feat: improve naming and styles 2023-02-03 17:25:38 +01:00
kolaente 7cbf0acac5
fix: always show update popup on top 2023-02-03 17:04:51 +01:00
Dominik Pschenitschni 3db5ea45d7
feat: move update from navigation to app 2023-02-03 17:04:51 +01:00
RoboMagus dcd5c3fd6a
Disable listening on IPv6 ports when IPv6 is not supported (#102) 2023-02-03 15:55:36 +01:00
renovate 61fff44764 chore(deps): update dependency rollup to v3.13.0 2023-02-03 13:03:57 +00:00
renovate ecdae4e03e chore(deps): update dependency vitest to v0.28.4 2023-02-03 11:04:06 +00:00
kolaente b26ea45fe0
chore: update funding links 2023-02-03 11:47:46 +01:00
kolaente 7cb0cd293d
chore: update funding links 2023-02-03 11:46:37 +01:00
konrad 6572f75e5d fix: Use Build Time Base Path (#2964)
Reviewed-on: vikunja/frontend#2964
Reviewed-by: konrad <k@knt.li>
2023-02-03 08:57:27 +00:00
Jef Oliver af55992057
feat(config): Support Setting Base Path in .env
* This uses loadEnv to load an environment file at configuration
  time.
  * Documentation:
    * https://vitejs.dev/config/#environment-variables
  * More on environment files:
    * https://vitejs.dev/guide/env-and-mode.html
  * `VIKUNJA_FRONTEND_BASE` is the variable in the environment
     file that will be used to set Vite’s base option.
* This adds a commented example to .env.local.example

Signed-off-by: Jef Oliver <jef@eljef.me>
2023-02-03 09:21:08 +01:00
Jef Oliver e92559dc00
fix(base): Use Build Time Base Path
* If a base path is provided at build time, use it.
  * Base path can be set with `VIKUNJA_FRONTEND_BASE` at
    build time
    * `VIKUNJA_FRONTEND_BASE` sets `import.meta.env.BASE_URL` after Vite resolves it.
    * Usages of `import.meta.env.BASE_URL` are statically replaced
      at build time.
    * If base path is not provided, `import.meta.env.BASE_URL`
      defaults to '/'.
    * Documentation:
      https://vitejs.dev/guide/env-and-mode.html

* Fixes:
  * Manifest not loading because of incorrect path.
  * Service Worker not loading because path is incorrect in
    manifest.
  * Service Worker crashing because import of workbox is from
    wrong path.
  * Service Worker not loading a task because path is incorrect
    in event listener.
  * Incorrect URLs being set on window because base path is
    incorrect.
    * ex: `/login` vs `/base/login`

Signed-off-by: Jef Oliver <jef@eljef.me>
2023-02-03 09:21:06 +01:00
renovate 3dbf02fd7a chore(deps): update dependency @vue/test-utils to v2.2.10 2023-02-03 00:05:11 +00:00
Dominik Pschenitschni 81a4f2d977 chore: typo 2023-02-02 19:11:08 +00:00
renovate 2972d0d400 chore(deps): update dependency cypress to v12.5.1 2023-02-02 18:03:56 +00:00
renovate c11ebc44c4 chore(deps): update dependency vite to v4.1.1 2023-02-02 15:04:03 +00:00
renovate 144f90c5f7 fix(deps): update sentry-javascript monorepo to v7.36.0 2023-02-02 14:14:47 +00:00
renovate 913879604a chore(deps): update dependency @vitejs/plugin-legacy to v4.0.1 2023-02-02 14:03:59 +00:00
renovate 1589ed5739 chore(deps): update dependency @vitejs/plugin-legacy to v4 2023-02-02 12:04:02 +00:00
renovate a991c537ac chore(deps): update dependency postcss-preset-env to v8 (#3000)
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: vikunja/frontend#3000
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-02 11:49:30 +00:00
renovate 69b57aa23a chore(deps): update dependency vite to v4.1.0 2023-02-02 11:04:00 +00:00
renovate 1a1939963a fix(deps): update dependency vue to v3.2.47 2023-02-02 07:03:57 +00:00
renovate 3d62c9789c fix(deps): update dependency axios to v1.3.1 2023-02-02 06:56:51 +00:00
renovate c18df8687c chore(deps): update dependency @vue/test-utils to v2.2.9 2023-02-02 00:05:20 +00:00
renovate d83ba0c158 fix(deps): update dependency pinia to v2.0.30 (#3042)
Reviewed-on: vikunja/frontend#3042
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-01 14:26:35 +00:00
kolaente cea31d1da7
fix(docker): cross compilation with buildx 2023-02-01 15:08:12 +01:00
renovate 12509a7e0f fix(deps): update sentry-javascript monorepo to v7.35.0 (#3041)
Reviewed-on: vikunja/frontend#3041
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-02-01 13:12:20 +00:00
renovate dd43057a08 chore(deps): update dependency rollup to v3.12.1 2023-02-01 10:03:47 +00:00
renovate 19d3cf01cd chore(deps): update pnpm to v7.26.3 2023-02-01 09:36:45 +00:00
renovate 80012bf035 chore(deps): update dependency cypress to v12.5.0 2023-02-01 09:11:17 +00:00
renovate 899d9e1cb7 chore(deps): update dependency sass to v1.58.0 2023-02-01 02:04:06 +00:00
renovate 56830ddadc fix(deps): update dependency axios to v1.3.0 (#3036)
Reviewed-on: vikunja/frontend#3036
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-31 17:16:19 +00:00
kolaente 1749d6ba0a
fix(list): make sure favorite lists are not duplicated in the menu when renaming them
Resolves vikunja/frontend#3031
2023-01-31 17:12:11 +01:00
renovate b29008d304 chore(deps): update typescript-eslint monorepo to v5.50.0 2023-01-31 10:03:47 +00:00
renovate 8ae3054b1a chore(deps): update dependency typescript to v4.9.5 2023-01-30 22:03:50 +00:00
renovate f9dad79b23 chore(deps): update dependency caniuse-lite to v1.0.30001449 2023-01-30 07:21:12 +00:00
renovate 30f5cb0656 chore(deps): update dependency happy-dom to v8.2.0 2023-01-30 07:20:45 +00:00
renovate 3f58c983da chore(deps): update dependency netlify-cli to v12.10.0 2023-01-30 01:04:11 +00:00
kolaente 8fa8b03aa6
fix(tests): only look in src for tests 2023-01-29 20:24:44 +01:00
Yurii Vlasov e4499f44b7 Docker refactoring (#3018)
Co-authored-by: Yurii Vlasov <yv@itsvit.org>
Reviewed-on: vikunja/frontend#3018
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Yurii Vlasov <yuriy@vlasov.pro>
Co-committed-by: Yurii Vlasov <yuriy@vlasov.pro>
2023-01-29 14:47:22 +00:00
kolaente b799233bca
fix(quick add magic): correctly parse "next {weekday}" on the beginning of the text
Resolves vikunja/frontend#3022
2023-01-29 15:32:01 +01:00
renovate be0ae4bc29 chore(deps): update dependency eslint to v8.33.0 2023-01-29 13:49:19 +00:00
renovate 60d99f3bba chore(deps): update pnpm to v7.26.2 2023-01-29 13:48:52 +00:00
renovate fa666d2817 fix(deps): update dependency @vueuse/core to v9.12.0 2023-01-29 04:04:10 +00:00
renovate 9312aa14fa fix(deps): update dependency axios to v1.2.6 2023-01-28 17:03:57 +00:00
renovate 68e4f776b9 chore(deps): update dependency esbuild to v0.17.5 2023-01-28 07:32:56 +00:00
renovate 2d137d564e chore(deps): update dependency rollup to v3.12.0 2023-01-28 06:03:58 +00:00
Frederick [Bot] fc8824d942 [skip ci] Updated translations via Crowdin 2023-01-28 00:27:10 +00:00
renovate 6d4ca57601 chore(deps): update dependency cypress to v12.4.1 2023-01-27 16:04:04 +00:00
renovate d2bf4e38b1 chore(deps): update dependency vitest to v0.28.3 (#3019)
Reviewed-on: vikunja/frontend#3019
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-27 13:13:52 +00:00
renovate a5f6857a40 chore(deps): update dependency @vue/test-utils to v2.2.8 2023-01-27 07:48:21 +00:00
renovate ed3d79fa4c chore(deps): update pnpm to v7.26.1 2023-01-27 05:03:37 +00:00
Frederick [Bot] 81c5c54aed [skip ci] Updated translations via Crowdin 2023-01-27 00:28:14 +00:00
renovate 793e06c6ac fix(deps): update sentry-javascript monorepo to v7.34.0 2023-01-26 22:04:00 +00:00
Nikola Sivkov v2 7eb07e92f8
Add Ipv6 support to nginx (#100)
(cherry picked from commit 0e68bcfd5a518b5cbd0bafce1fc48d31b25e1fa1)
2023-01-26 22:00:49 +01:00
renovate 2a15878b81 fix(deps): update dependency axios to v1.2.5 2023-01-26 16:03:45 +00:00
renovate ebd2b1e8c0 chore(deps): update dependency @vitejs/plugin-legacy to v3.0.2 (#3012)
Reviewed-on: vikunja/frontend#3012
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-26 15:20:58 +00:00
renovate d11fcfa072 chore(deps): update dependency rollup to v3.11.0 (#3013)
Reviewed-on: vikunja/frontend#3013
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-26 14:19:03 +00:00
Frederick [Bot] 8e6e976867 [skip ci] Updated translations via Crowdin 2023-01-26 00:28:07 +00:00
kolaente 9adf1aba89
chore: simplify getting the error text from an exception 2023-01-25 18:44:02 +01:00
kolaente e67088fdb7
chore: simplify error handling for login and OpenId Auth 2023-01-25 18:41:30 +01:00
kolaente da241d21f3
fix(quick actions): hide edges of last entry on hover 2023-01-25 16:26:05 +01:00
kolaente 97133010af
fix(quick actions): don't throw an error message when selecting the last items with the arrow keys 2023-01-25 16:23:46 +01:00
kolaente 4576da0dd3
fix: make sure global error handler handles unrejected promises correctly
Resolves vikunja/frontend#2992
2023-01-25 15:05:54 +01:00
renovate fd4a68daf0 chore(deps): update dependency vitest to v0.28.2 (#3008)
Reviewed-on: vikunja/frontend#3008
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-25 12:30:19 +00:00
renovate 6f02d43801 fix(deps): update dependency @infectoone/vue-ganttastic to v2.1.4 (#3009)
Reviewed-on: vikunja/frontend#3009
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-25 12:29:41 +00:00
konrad 2be784766f feat: small content auth improvements (#2998)
Reviewed-on: vikunja/frontend#2998
2023-01-24 22:09:25 +00:00
Dominik Pschenitschni 13a39be3de feat: unindent settings page (#2996)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2996
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-24 21:54:48 +00:00
renovate d2e07efc7d chore(deps): update dependency cypress to v12.4.0 (#3006)
Reviewed-on: vikunja/frontend#3006
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-24 21:16:24 +00:00
renovate a44299e786 chore(deps): update pnpm to v7.26.0 (#3002)
Reviewed-on: vikunja/frontend#3002
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-24 20:50:13 +00:00
renovate 221f73c347 fix(deps): update dependency axios to v1.2.4 (#3005)
Reviewed-on: vikunja/frontend#3005
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-24 18:21:26 +00:00
renovate 9b170d0d81 fix(deps): update sentry-javascript monorepo to v7.33.0 (#3004)
Reviewed-on: vikunja/frontend#3004
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-24 17:49:43 +00:00
kolaente 16e61a8492
fix(ci): disable auto_tag for release docker images 2023-01-24 18:24:36 +01:00
kolaente a95f1090d7
fix(ci): save .tags file to generate release tags 2023-01-24 17:46:28 +01:00
kolaente c6026107fa
chore: 0.20.3 release preperations 2023-01-24 17:17:03 +01:00
renovate e07e6bf677 fix(deps): update dependency @fortawesome/vue-fontawesome to v3.0.3 (#3003)
Reviewed-on: vikunja/frontend#3003
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-24 15:56:09 +00:00
Dominik Pschenitschni c6ed925424
chore: move class name to top 2023-01-23 22:26:26 +01:00
Dominik Pschenitschni 7ed1a37de5
feat: use v-show for navigation buttons 2023-01-23 22:26:14 +01:00
renovate 1a2e9af88f chore(deps): update dependency start-server-and-test to v1.15.3 2023-01-23 21:24:26 +00:00
renovate f5e90067f6 chore(deps): update typescript-eslint monorepo to v5.49.0 (#2994)
Reviewed-on: vikunja/frontend#2994
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-23 21:07:36 +00:00
renovate 188ae57dc0 chore(deps): update dependency @types/codemirror to v5.60.7 (#2993)
Reviewed-on: vikunja/frontend#2993
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-23 17:17:39 +00:00
renovate 3e4bbd58a3 chore(deps): update dependency vitest to v0.28.1 (#2990)
Reviewed-on: vikunja/frontend#2990
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-23 17:01:15 +00:00
renovate bb8ee15a2d fix(deps): update sentry-javascript monorepo to v7.32.1 (#2991)
Reviewed-on: vikunja/frontend#2991
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-23 17:00:23 +00:00
renovate 4c46ae5b2f chore(deps): update dependency netlify-cli to v12.9.1 (#2988)
Reviewed-on: vikunja/frontend#2988
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-23 10:04:50 +00:00
renovate ff27030e1c chore(deps): update dependency happy-dom to v8.1.5 (#2987)
Reviewed-on: vikunja/frontend#2987
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-23 10:04:03 +00:00
renovate 639e5e3d23 chore(deps): update dependency caniuse-lite to v1.0.30001447 (#2986)
Reviewed-on: vikunja/frontend#2986
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-23 10:03:19 +00:00
Frederick [Bot] e49e9352e5 [skip ci] Updated translations via Crowdin 2023-01-23 00:29:07 +00:00
renovate 705afa0272 chore(deps): update dependency esbuild to v0.17.4 (#2985)
Reviewed-on: vikunja/frontend#2985
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-22 13:14:39 +00:00
renovate 83864a6bac chore(deps): update dependency vitest to v0.27.3 (#2984)
Reviewed-on: vikunja/frontend#2984
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-22 12:03:32 +00:00
renovate 664a39b70d chore(deps): update dependency vite-plugin-inject-preload to v1.2.0 (#2983)
Reviewed-on: vikunja/frontend#2983
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-22 11:59:51 +00:00
Dominik Pschenitschni 9922fcba65 fix: close button hover for sidebar (#2981)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2981
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-21 11:02:17 +00:00
Dominik Pschenitschni 489014944a feat: fix broken font preloading (#2980)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2980
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-21 11:01:32 +00:00
Frederick [Bot] bb44beb4ba [skip ci] Updated translations via Crowdin 2023-01-21 00:29:03 +00:00
renovate d996f24028 chore(deps): update dependency rollup to v3.10.1 2023-01-20 16:03:52 +00:00
renovate 59cac0eb38 fix(deps): update dependency @vueuse/core to v9.11.1 2023-01-20 14:03:51 +00:00
Frederick [Bot] 7adc5ceb9f [skip ci] Updated translations via Crowdin 2023-01-20 00:31:29 +00:00
renovate a3d9cb5324 chore(deps): update pnpm to v7.25.1 (#2977)
Reviewed-on: vikunja/frontend#2977
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-19 11:14:20 +00:00
Frederick [Bot] 6c192b6f59 [skip ci] Updated translations via Crowdin 2023-01-19 00:30:50 +00:00
konrad 8ff1b3006b fix(task): don't show the list color on the task when only viewing the list (#2975)
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: vikunja/frontend#2975
2023-01-18 21:12:59 +00:00
renovate 0414352b02 chore(deps): update dependency esbuild to v0.17.3 (#2976)
Reviewed-on: vikunja/frontend#2976
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-18 20:47:14 +00:00
Dominik Pschenitschni 2a2c27af92 chore: use es6 imports for deploy-preview-netlify (#2970)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2970
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-18 15:54:37 +00:00
Dominik Pschenitschni e1b35ff023 feat: add .env.local.example (#2972)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2972
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-18 00:06:18 +00:00
renovate 95b2bcf5fb fix(deps): update dependency axios to v1.2.3 (#2974)
Reviewed-on: vikunja/frontend#2974
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-17 22:34:18 +00:00
renovate da26ec7f1c fix(deps): update sentry-javascript monorepo to v7.31.1 (#2973)
Reviewed-on: vikunja/frontend#2973
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-17 15:15:06 +00:00
Dominik Pschenitschni 14466bf9b7 feat: add describe project better in package.json (#2971)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2971
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-17 14:46:36 +00:00
Dominik Pschenitschni 903e9a9904 chore: add has content="false" to gantt charts (#2969)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2969
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-17 14:32:56 +00:00
Dominik Pschenitschni 56fd25e888 chore: improve migrate title (#2968)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2968
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-17 14:04:48 +00:00
renovate c815830700 fix(deps): update dependency @vueuse/core to v9.11.0 (#2967)
Reviewed-on: vikunja/frontend#2967
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-17 10:48:41 +00:00
renovate 69f398f789 chore(deps): update dependency vitest to v0.27.2 (#2966)
Reviewed-on: vikunja/frontend#2966
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-17 09:42:03 +00:00
renovate 8280bd6bf5 chore(deps): update dependency esbuild to v0.17.2 (#2965)
Reviewed-on: vikunja/frontend#2965
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-17 09:41:25 +00:00
renovate 89559557b8 chore(deps): update typescript-eslint monorepo to v5.48.2 (#2962)
Reviewed-on: vikunja/frontend#2962
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-16 19:22:16 +00:00
renovate 84b1b61af4 chore(deps): update dependency esbuild to v0.17.1 (#2963)
Reviewed-on: vikunja/frontend#2963
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-16 19:21:33 +00:00
renovate 7f84441e78 fix(deps): update sentry-javascript monorepo to v7.31.0 2023-01-16 16:04:13 +00:00
renovate ec6d6018da chore(deps): update dependency netlify-cli to v12.7.2 (#2960)
Reviewed-on: vikunja/frontend#2960
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-16 08:24:22 +00:00
renovate bcec4b97d2 chore(deps): update dependency happy-dom to v8.1.4 (#2959)
Reviewed-on: vikunja/frontend#2959
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-16 08:23:39 +00:00
renovate 9e9e7eaecb chore(deps): update dependency caniuse-lite to v1.0.30001445 (#2958)
Reviewed-on: vikunja/frontend#2958
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-16 08:22:55 +00:00
renovate 665f1a7a18 fix(deps): update dependency @kyvg/vue3-notification to v2.8.0 (#2957)
Reviewed-on: vikunja/frontend#2957
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-15 19:21:51 +00:00
renovate 25a56a89ae fix(deps): update dependency pinia to v2.0.29 (#2956)
Reviewed-on: vikunja/frontend#2956
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-15 16:13:03 +00:00
renovate 9b21d23245 fix(deps): update dependency vue-advanced-cropper to v2.8.8 (#2955)
Reviewed-on: vikunja/frontend#2955
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-15 15:44:36 +00:00
renovate 5c500c711e chore(deps): update dependency eslint to v8.32.0 (#2954)
Reviewed-on: vikunja/frontend#2954
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-15 09:52:49 +00:00
renovate af65447920 chore(deps): update dependency esbuild to v0.17.0 (#2953)
Reviewed-on: vikunja/frontend#2953
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-14 07:42:39 +00:00
renovate 60fee6da7f fix(deps): update dependency marked to v4.2.12 (#2952)
Reviewed-on: vikunja/frontend#2952
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-14 07:40:28 +00:00
renovate d1dbc7f983 chore(deps): update pnpm to v7.25.0 (#2951)
Reviewed-on: vikunja/frontend#2951
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-13 21:14:36 +00:00
renovate 28ace38ebb chore(deps): update dependency eslint-plugin-vue to v9.9.0 (#2950)
Reviewed-on: vikunja/frontend#2950
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-13 07:42:38 +00:00
kolaente 2af42f8fbe
fix(quick add magic): make sure assignees which don't exist are not removed from task title
Resolves vikunja/frontend#2927
2023-01-12 13:32:00 +01:00
kolaente 5999def569
fix(task): update task description when switching between related tasks
Resolves vikunja/frontend#2936
2023-01-12 12:22:56 +01:00
renovate 3b99facbfe chore(deps): update dependency rollup to v3.10.0 (#2949)
Reviewed-on: vikunja/frontend#2949
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-12 08:31:37 +00:00
renovate c980729b0e chore(deps): update dependency esbuild to v0.16.17 (#2948)
Reviewed-on: vikunja/frontend#2948
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-11 22:20:06 +00:00
viehlieb b719766062 redirect to oidc provider if configured correctly (#2805)
Co-authored-by: konrad <k@knt.li>
Reviewed-on: vikunja/frontend#2805
Reviewed-by: konrad <k@knt.li>
Co-authored-by: viehlieb <pf@pragma-shift.net>
Co-committed-by: viehlieb <pf@pragma-shift.net>
2023-01-11 21:17:53 +00:00
kolaente 61592a3c33
fix(ci): sign drone config 2023-01-11 22:03:55 +01:00
renovate e8877174d4 chore(deps): update dependency vitest to v0.27.1 (#2947)
Reviewed-on: vikunja/frontend#2947
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-11 17:21:25 +00:00
kolaente 2edf3aebef
fix(ci): tagging logic for release docker images 2023-01-11 18:15:24 +01:00
renovate 63b409e3bd chore(deps): update pnpm to v7.24.3 (#2946)
Reviewed-on: vikunja/frontend#2946
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-11 06:46:05 +00:00
renovate de45568a17 fix(deps): update sentry-javascript monorepo to v7.30.0 (#2945)
Reviewed-on: vikunja/frontend#2945
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-10 14:23:55 +00:00
renovate c3224a72c1 chore(deps): update pnpm to v7.24.2 (#2944)
Reviewed-on: vikunja/frontend#2944
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-10 14:23:26 +00:00
renovate 6a151a8cf3 chore(deps): update typescript-eslint monorepo to v5.48.1 (#2942)
Reviewed-on: vikunja/frontend#2942
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-09 18:12:51 +00:00
renovate a61ce6f1d6 chore(deps): update dependency vitest to v0.27.0 (#2941)
Reviewed-on: vikunja/frontend#2941
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-09 14:37:26 +00:00
renovate 0124f60bac chore(deps): update dependency caniuse-lite to v1.0.30001442 (#2938)
Reviewed-on: vikunja/frontend#2938
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-09 10:21:24 +00:00
renovate 1a14b1dac6 chore(deps): update dependency esbuild to v0.16.16 (#2937)
Reviewed-on: vikunja/frontend#2937
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-09 10:17:22 +00:00
renovate 9662c79b95 chore(deps): update dependency happy-dom to v8.1.3 (#2939)
Reviewed-on: vikunja/frontend#2939
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-09 10:16:29 +00:00
renovate 43b67a9d33 chore(deps): update pnpm to v7.23.0 (#2940)
Reviewed-on: vikunja/frontend#2940
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-09 10:15:58 +00:00
renovate 37368a64df chore(deps): update dependency vue-tsc to v1.0.24 2023-01-08 14:04:14 +00:00
renovate 098113b3a4 chore(deps): update dependency esbuild to v0.16.15 (#2934)
Reviewed-on: vikunja/frontend#2934
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-07 08:48:07 +00:00
renovate 5c13945393 chore(deps): update dependency postcss to v8.4.21 (#2933)
Reviewed-on: vikunja/frontend#2933
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-06 21:17:25 +00:00
Dominik Pschenitschni 86d957be4f fix(drone): pnpm cache folder path (#2932)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: vikunja/frontend#2932
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-06 17:48:40 +00:00
renovate 9fe2b4ad73 fix(deps): update dependency dompurify to v2.4.3 (#2931)
Reviewed-on: vikunja/frontend#2931
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-06 15:14:54 +00:00
Dominik Pschenitschni 72e80f637d feat(postcss): mock plugin types (#2930)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2930
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-06 09:27:55 +00:00
konrad a4424e089c feat: add histoire (#2724)
Reviewed-on: vikunja/frontend#2724
2023-01-06 09:27:09 +00:00
Frederick [Bot] 945128c3cd [skip ci] Updated translations via Crowdin 2023-01-06 00:34:21 +00:00
Dominik Pschenitschni 35cfb2f3ca
feat: add card story 2023-01-05 23:12:58 +01:00
Dominik Pschenitschni ccc85b9a82
feat: add XButton story 2023-01-05 23:12:58 +01:00
Dominik Pschenitschni 9523f60763
fix(BaseButton): prop type 2023-01-05 23:12:58 +01:00
Dominik Pschenitschni 7be8e892e2
feat: add histoire 2023-01-05 23:12:58 +01:00
renovate 2a6aff6ffa fix(deps): update dependency dompurify to v2.4.2 2023-01-05 17:04:34 +00:00
Dominik Pschenitschni 6a03972f16 feat(netlify): abstract createSlug helper function (#2923)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2923
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 16:46:38 +00:00
Dominik Pschenitschni 4023ebcdd1 fix(drone): use correct property value (#2920)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: vikunja/frontend#2920
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 13:50:32 +00:00
Dominik Pschenitschni 6049427322 chore(config): remove unused URL_PREFIX const (#2926)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2926
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 13:35:28 +00:00
Dominik Pschenitschni f658d3bbba fix(cypress): use env for API_URL (#2925)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2925
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 13:34:40 +00:00
Dominik Pschenitschni a029887102 fix(useOnline): only log if actually faking state (#2924)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2924
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 13:33:37 +00:00
Dominik Pschenitschni 0f7b7f72d0 fix(faker): remove mock types (#2921)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2921
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 13:27:36 +00:00
Dominik Pschenitschni a29131e7d4 feat: remove formatISO from list-view-gantt.spec (#2922)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2922
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 13:27:04 +00:00
Dominik Pschenitschni b71d41c5ec chore(package): use pnpm commands (#2919)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2919
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-05 10:29:16 +00:00
renovate 81594e234a chore(deps): update dependency vue-tsc to v1.0.22 2023-01-05 02:05:01 +00:00
renovate 0846d1dc5e chore(deps): update dependency vue-tsc to v1.0.21 2023-01-04 23:26:07 +00:00
renovate 5dfaa48ea5 fix(deps): update dependency axios to v1 2023-01-04 23:13:25 +00:00
renovate 63671efbe2 chore(deps): update dependency esbuild to v0.16.14 2023-01-04 21:04:20 +00:00
Dominik Pschenitschni 4be53b098c feat: add-task usability improvements (#2767)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2767
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-04 15:54:09 +00:00
renovate 5a89bc0183 fix(deps): update sentry-javascript monorepo to v7.29.0 (#2915)
Reviewed-on: vikunja/frontend#2915
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-04 14:14:26 +00:00
renovate 97b1149a90 chore(deps): update dependency vite to v4.0.4 (#2908)
Reviewed-on: vikunja/frontend#2908
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-04 13:14:24 +00:00
renovate 2ca33671aa chore(deps): update dependency @vue/test-utils to v2.2.7 (#2914)
Reviewed-on: vikunja/frontend#2914
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-04 13:13:44 +00:00
renovate d82f377f94 chore(deps): update pnpm to v7.22.0 (#2910)
Reviewed-on: vikunja/frontend#2910
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-04 12:20:17 +00:00
kolaente a2cd08a7af
fix(ci): sign drone config 2023-01-04 11:38:06 +01:00
renovate 830d6d0a38 fix(deps): update dependency @vueuse/core to v9.10.0 (#2911)
Reviewed-on: vikunja/frontend#2911
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-04 09:48:37 +00:00
renovate 6cc23ff7aa chore(deps): update dependency cypress to v12.3.0 2023-01-04 03:32:05 +00:00
konrad bb4ed3d223 chore(tests): fix macos cypress and align with create vite (#2898)
Reviewed-on: vikunja/frontend#2898
Reviewed-by: konrad <k@knt.li>
2023-01-04 03:19:36 +00:00
renovate f56302a99f chore(deps): update dependency vue-tsc to v1.0.20 2023-01-04 00:05:43 +00:00
Dominik Pschenitschni d850d5b98f
fix(cypress): use ts for updateUserSettings 2023-01-03 16:30:46 +01:00
Dominik Pschenitschni 4908469d49
feat(cypress): use cy.session
Also align repo closer to `create-vue` template and improve cypress integration
2023-01-03 16:30:46 +01:00
Dominik Pschenitschni 1f25386f54 feat: remove date-fns formatISO (#2899)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2899
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2023-01-03 14:20:06 +00:00
renovate c97ed67f50 chore(deps): update typescript-eslint monorepo to v5.48.0 (#2906)
Reviewed-on: vikunja/frontend#2906
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-03 14:05:36 +00:00
renovate be53474eeb chore(deps): update dependency esbuild to v0.16.13 (#2907)
Reviewed-on: vikunja/frontend#2907
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-03 14:04:57 +00:00
renovate c6cb2343ae chore(deps): update dependency vite-plugin-pwa to v0.14.1 (#2909)
Reviewed-on: vikunja/frontend#2909
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-01-03 14:03:50 +00:00
renovate 76bb081db5 chore(deps): update dependency vitest to v0.26.3 2023-01-02 16:51:44 +00:00
renovate 8e9468228e chore(deps): update dependency rollup to v3.9.1 2023-01-02 14:04:05 +00:00
renovate 61ba2facbc chore(deps): update dependency @types/codemirror to v5.60.6 2022-12-31 11:02:14 +00:00
renovate 1bec289021 chore(deps): update dependency vue-tsc to v1.0.19 2022-12-31 11:01:28 +00:00
renovate 82b108a79d chore(deps): update dependency eslint to v8.31.0 2022-12-31 06:04:13 +00:00
renovate 54c49391d1 chore(deps): update pnpm to v7.21.0 (#2895)
Reviewed-on: vikunja/frontend#2895
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-30 16:50:17 +00:00
Dominik Pschenitschni 6ddfba4f1f
feat(cypress): remove getSettled 2022-12-30 16:39:51 +01:00
renovate b2bf39fffa fix(deps): update dependency marked to v4.2.5 (#2880)
Reviewed-on: vikunja/frontend#2880
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-30 14:13:11 +00:00
Dominik Pschenitschni 09d13520b0 feat: enable ts for rollup-plugin-visualizer (#2897)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2897
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-12-30 13:37:31 +00:00
renovate 0d91d2845f chore(deps): update dependency rollup-plugin-visualizer to v5.9.0 (#2896)
Reviewed-on: vikunja/frontend#2896
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-30 13:13:05 +00:00
renovate 1b69b1b527 chore(deps): update dependency rollup to v3.9.0 (#2894)
Reviewed-on: vikunja/frontend#2894
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-28 08:30:18 +00:00
renovate e14b34fca2 chore(deps): update dependency esbuild to v0.16.12 (#2893)
Reviewed-on: vikunja/frontend#2893
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-28 08:29:39 +00:00
renovate ce5e4aad6f chore(deps): update dependency esbuild to v0.16.11 2022-12-27 02:03:43 +00:00
renovate 12e85909b2 chore(deps): update typescript-eslint monorepo to v5.47.1 (#2890)
Reviewed-on: vikunja/frontend#2890
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-26 20:08:47 +00:00
renovate 5c245d8921 chore(deps): update dependency @types/node to v18.11.18 (#2889)
Reviewed-on: vikunja/frontend#2889
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-26 20:08:10 +00:00
renovate ee89aa3b46 chore(deps): update dependency happy-dom to v8.1.1 (#2885)
Reviewed-on: vikunja/frontend#2885
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-26 11:15:55 +00:00
renovate efe22c339a chore(deps): update dependency vue-tsc to v1.0.18 (#2888)
Reviewed-on: vikunja/frontend#2888
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-26 10:59:09 +00:00
renovate 0aa4d1cb65 chore(deps): update pnpm to v7.20.0 (#2887)
Reviewed-on: vikunja/frontend#2887
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-26 08:45:09 +00:00
renovate 5b6ad786ee chore(deps): update dependency netlify-cli to v12.5.0 (#2886)
Reviewed-on: vikunja/frontend#2886
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-26 08:44:18 +00:00
renovate 53b4352e04 chore(deps): update dependency caniuse-lite to v1.0.30001441 (#2884)
Reviewed-on: vikunja/frontend#2884
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-26 08:43:38 +00:00
renovate ac5b849d06 chore(deps): update dependency vue-tsc to v1.0.17 (#2883)
Reviewed-on: vikunja/frontend#2883
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-25 20:32:50 +00:00
renovate 3a8a45375c chore(deps): update dependency vite-svg-loader to v4 (#2882)
Reviewed-on: vikunja/frontend#2882
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-24 10:36:36 +00:00
drone 93f2ccf2e6 [skip ci] Updated translations via Crowdin 2022-12-24 00:34:12 +00:00
renovate a910b263cb chore(deps): update dependency rollup to v3.8.1 (#2879)
Reviewed-on: vikunja/frontend#2879
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-23 21:17:25 +00:00
renovate a6e4bbebec fix(deps): update dependency @vueuse/core to v9.9.0 (#2881)
Reviewed-on: vikunja/frontend#2881
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-23 20:17:16 +00:00
kolaente 96dd0aab34
fix(i18n): incorrect translation string 2022-12-23 17:19:05 +01:00
kolaente a6a0c3b121
fix(ci): sign drone config 2022-12-23 11:22:20 +01:00
drone 367f55c04a [skip ci] Updated translations via Crowdin 2022-12-23 00:34:13 +00:00
kolaente c2fd41b80a
fix(ci): make sure the i18n sync cron job actually runs 2022-12-22 13:06:16 +01:00
kolaente 373b04bd58
feat(i18n): add Norwegian translation 2022-12-22 13:05:42 +01:00
renovate 60890e4bb7 fix(deps): update sentry-javascript monorepo to v7.28.1 (#2878)
Reviewed-on: vikunja/frontend#2878
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-22 10:24:04 +00:00
renovate aaa8a3859a chore(deps): update dependency rollup to v3.8.0 (#2877)
Reviewed-on: vikunja/frontend#2877
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-22 08:52:22 +00:00
renovate 7f886bc6ac chore(deps): update pnpm to v7.19.0 (#2875)
Reviewed-on: vikunja/frontend#2875
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-21 15:20:56 +00:00
renovate cacb59d6e3 chore(deps): update dependency vite to v4.0.3 (#2876)
Reviewed-on: vikunja/frontend#2876
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-21 15:19:56 +00:00
renovate 017dad9b4b chore(deps): update dependency vitest to v0.26.2 (#2874)
Reviewed-on: vikunja/frontend#2874
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-21 11:23:36 +00:00
renovate 7123bbc440 chore(deps): update dependency cypress to v12.2.0 (#2873)
Reviewed-on: vikunja/frontend#2873
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-21 09:39:42 +00:00
renovate 4eb63452cb fix(deps): update sentry-javascript monorepo to v7.28.0 2022-12-20 17:13:54 +00:00
renovate 4ee201e7bd fix(deps): update dependency @vueuse/core to v9.8.2 2022-12-20 15:03:43 +00:00
renovate 7eb971890c fix(deps): update dependency @vueuse/core to v9.8.1 (#2870)
Reviewed-on: vikunja/frontend#2870
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-20 14:14:58 +00:00
renovate 872197414d chore(deps): update dependency vitest to v0.26.1 2022-12-20 12:53:40 +00:00
renovate 59b99407cc fix(deps): update dependency @vueuse/core to v9.8.0 2022-12-20 12:51:57 +00:00
renovate f5d30ccd44 fix(deps): update dependency codemirror to v5.65.11 2022-12-20 11:03:43 +00:00
renovate 46f89bd5ed chore(deps): update dependency vue-tsc to v1.0.16 (#2867)
Reviewed-on: vikunja/frontend#2867
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-20 09:14:33 +00:00
renovate 65167c5989 chore(deps): update dependency sass to v1.57.1 (#2866)
Reviewed-on: vikunja/frontend#2866
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-20 07:23:10 +00:00
renovate e8b46829dd chore(deps): update dependency esbuild to v0.16.10 (#2865)
Reviewed-on: vikunja/frontend#2865
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-20 07:22:38 +00:00
renovate 865172951a chore(deps): update typescript-eslint monorepo to v5.47.0 (#2864)
Reviewed-on: vikunja/frontend#2864
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-19 18:14:54 +00:00
renovate f152a84847 chore(deps): update dependency netlify-cli to v12.4.0 (#2862)
Reviewed-on: vikunja/frontend#2862
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-19 07:57:24 +00:00
kolaente c09fbe9abe
fix(migration): actually pass migration oauth code from query param 2022-12-18 20:38:38 +01:00
renovate a6bafe1a9a chore(deps): update dependency vite to v4.0.2 (#2861)
Reviewed-on: vikunja/frontend#2861
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-18 12:17:39 +00:00
kolaente 3dfb8b858e
chore: 0.20.2 release preperations 2022-12-18 12:23:51 +01:00
renovate ebccd6f411 chore(deps): update dependency @types/node to v18.11.17 (#2858)
Reviewed-on: vikunja/frontend#2858
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-18 11:16:10 +00:00
renovate f465576baa chore(deps): update dependency esbuild to v0.16.9 (#2859)
Reviewed-on: vikunja/frontend#2859
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-18 10:43:41 +00:00
renovate 25b082c45d chore(deps): update dependency vue-tsc to v1.0.14 (#2860)
Reviewed-on: vikunja/frontend#2860
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-18 10:04:35 +00:00
renovate 3e42eeba2c chore(deps): update dependency sass to v1.57.0 (#2856)
Reviewed-on: vikunja/frontend#2856
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-17 10:19:44 +00:00
renovate 263265157a chore(deps): update dependency esbuild to v0.16.8 (#2854)
Reviewed-on: vikunja/frontend#2854
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-17 09:05:23 +00:00
renovate fc95c8e2be chore(deps): update dependency rollup to v3.7.5 (#2857)
Reviewed-on: vikunja/frontend#2857
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-17 09:04:25 +00:00
renovate f58013fc32 chore(deps): update dependency eslint to v8.30.0 2022-12-17 00:06:14 +00:00
renovate 563ff7b20e chore(deps): update dependency @types/node to v18.11.16 (#2853)
Reviewed-on: vikunja/frontend#2853
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-16 21:18:15 +00:00
renovate 44821b4f24 chore(deps): update dependency wait-on to v7 (#2852)
Reviewed-on: vikunja/frontend#2852
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-16 20:53:31 +00:00
renovate 344b38bf93 fix(deps): update dependency @vueuse/core to v9.7.0 (#2851)
Reviewed-on: vikunja/frontend#2851
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-16 16:20:03 +00:00
kolaente f6171935ca
fix(tasks): translation for multiple related tasks now works
Resolves https://github.com/go-vikunja/frontend/issues/98
2022-12-16 14:42:58 +01:00
renovate 5f96407dc0 fix(deps): update sentry-javascript monorepo to v7.27.0 (#2850)
Reviewed-on: vikunja/frontend#2850
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-16 13:24:53 +00:00
Dominik Pschenitschni b6a89a0cde feat: use variable fonts with subsetting (#2817)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2817
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-12-15 21:37:02 +00:00
renovate a3978bb359 chore(deps): update dependency esbuild to v0.16.7 2022-12-14 23:05:51 +00:00
renovate 43eb7c4abf chore(deps): update dependency esbuild to v0.16.6 (#2848)
Reviewed-on: vikunja/frontend#2848
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-14 07:19:37 +00:00
renovate 6dd566ba46 chore(deps): update dependency @types/node to v18.11.15 2022-12-13 22:05:16 +00:00
Dominik Pschenitschni 318e8c83a6 fix: vite.config imports (#2843)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2843
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-12-13 19:02:23 +00:00
Dominik Pschenitschni f6c6f52abe feat: use vite preview for serve:dist:dev (#2842)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2842
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-12-13 19:01:56 +00:00
Dominik Pschenitschni c449925826 fix(bug-report.yml): list (#2845)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2845
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-12-13 19:00:50 +00:00
renovate c6eb72bdeb chore(deps): update dependency esbuild to v0.16.5 (#2846)
Reviewed-on: vikunja/frontend#2846
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-13 18:15:34 +00:00
renovate aecfe7e15f fix(deps): update sentry-javascript monorepo to v7.26.0 2022-12-13 17:03:45 +00:00
renovate f3a7093ed8 chore(deps): update dependency vitest to v0.25.8 2022-12-13 11:03:48 +00:00
renovate b37ae37116 chore(deps): update dependency rollup to v3.7.4 (#2840)
Reviewed-on: vikunja/frontend#2840
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-13 10:30:01 +00:00
renovate a3a482769d chore(deps): update dependency cypress to v12.1.0 (#2838)
Reviewed-on: vikunja/frontend#2838
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-13 08:36:05 +00:00
renovate 7cc6cf233f chore(deps): update dependency @types/node to v18.11.14 (#2839)
Reviewed-on: vikunja/frontend#2839
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-13 08:35:15 +00:00
renovate ce529579c3 chore(deps): update dependency @4tw/cypress-drag-drop to v2.2.3 (#2836)
Reviewed-on: vikunja/frontend#2836
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 22:08:18 +00:00
renovate 7680c82ce1 chore(deps): update typescript-eslint monorepo to v5.46.1 (#2837)
Reviewed-on: vikunja/frontend#2837
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 22:07:10 +00:00
renovate 1bb6bedd6e chore(deps): update pnpm to v7.18.2 (#2834)
Reviewed-on: vikunja/frontend#2834
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 22:06:35 +00:00
renovate 4b29e3d9dd chore(deps): update dependency vite to v4 (#2816)
Reviewed-on: vikunja/frontend#2816
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 20:15:40 +00:00
renovate 00b869c727 fix(deps): update sentry-javascript monorepo to v7.25.0 2022-12-12 13:03:44 +00:00
renovate fe2db90c4a chore(deps): update dependency vue-tsc to v1.0.13 (#2832)
Reviewed-on: vikunja/frontend#2832
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 10:32:57 +00:00
renovate 5b566178b3 chore(deps): update dependency rollup to v3.7.3 (#2825)
Reviewed-on: vikunja/frontend#2825
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 10:32:10 +00:00
renovate c887e15421 chore(deps): update dependency vite-plugin-pwa to v0.14.0 (#2833)
Reviewed-on: vikunja/frontend#2833
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 10:31:07 +00:00
renovate 99813772ef chore(deps): update dependency netlify-cli to v12.2.10 (#2829)
Reviewed-on: vikunja/frontend#2829
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 10:30:32 +00:00
renovate 4d280a26d3 fix(deps): update dependency @intlify/unplugin-vue-i18n to v0.8.1 (#2826)
Reviewed-on: vikunja/frontend#2826
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 09:35:23 +00:00
renovate 6d6922c90b chore(deps): update dependency caniuse-lite to v1.0.30001439 (#2828)
Reviewed-on: vikunja/frontend#2828
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 09:34:53 +00:00
renovate ab65276e6b chore(deps): update dependency postcss to v8.4.20 (#2827)
Reviewed-on: vikunja/frontend#2827
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 09:34:12 +00:00
renovate 3b6dfcec78 chore(deps): update dependency happy-dom to v8 (#2831)
Reviewed-on: vikunja/frontend#2831
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-12 09:33:05 +00:00
drone a72cd31202 [skip ci] Updated translations via Crowdin 2022-12-11 00:30:17 +00:00
kolaente 2141171529
fix(task): move task color bubble next to task index and done badge on mobile 2022-12-10 22:28:19 +01:00
kolaente 9b050846a4
Revert "feat: use img for logo so that it's not part of the main bundle (#2684)"
This reverts commit 02de481297.
2022-12-10 22:21:50 +01:00
renovate f6b8d2c4ca chore(deps): update dependency @types/node to v18.11.13 (#2823)
Reviewed-on: vikunja/frontend#2823
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-10 21:18:26 +00:00
renovate 86119ff414 chore(deps): update dependency vitest to v0.25.7 (#2824)
Reviewed-on: vikunja/frontend#2824
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-10 20:25:24 +00:00
renovate 7c5622af11 chore(deps): update dependency esbuild to v0.16.4 (#2821)
Reviewed-on: vikunja/frontend#2821
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-10 09:04:33 +00:00
renovate 6ac3ce65b4 chore(deps): update dependency rollup to v3.7.2 (#2822)
Reviewed-on: vikunja/frontend#2822
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-10 09:03:41 +00:00
renovate 07f9784e0d chore(deps): update dependency rollup to v3.7.1 (#2820)
Reviewed-on: vikunja/frontend#2820
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 20:12:45 +00:00
renovate fb751236d1 chore(deps): update dependency @cypress/vite-dev-server to v5.0.2 (#2819)
Reviewed-on: vikunja/frontend#2819
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 18:51:31 +00:00
renovate 396943b3a6 chore(deps): update dependency @vitejs/plugin-legacy to v3.0.1 (#2818)
Reviewed-on: vikunja/frontend#2818
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 14:23:13 +00:00
renovate b8a19ac88a fix(deps): update dependency pinia to v2.0.28 (#2815)
Reviewed-on: vikunja/frontend#2815
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 11:33:27 +00:00
renovate 02fac73e07 chore(deps): update dependency @vitejs/plugin-legacy to v3 (#2813)
Reviewed-on: vikunja/frontend#2813
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 11:32:49 +00:00
renovate 21e52c3b1f chore(deps): update dependency @vitejs/plugin-vue to v4 (#2814)
Reviewed-on: vikunja/frontend#2814
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 10:17:24 +00:00
renovate 213ef84586 chore(deps): update dependency cypress to v12.0.2 (#2807)
Reviewed-on: vikunja/frontend#2807
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 10:14:38 +00:00
renovate 25852ffac3 chore(deps): update dependency @types/node to v18.11.12 (#2808)
Reviewed-on: vikunja/frontend#2808
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 10:14:10 +00:00
renovate 1255b50ed7 chore(deps): update dependency vue-tsc to v1.0.12 (#2811)
Reviewed-on: vikunja/frontend#2811
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 10:13:23 +00:00
renovate afe8198158 chore(deps): update dependency @types/marked to v4.0.8 (#2812)
Reviewed-on: vikunja/frontend#2812
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 09:34:43 +00:00
renovate abe43c4ef8 chore(deps): update dependency sass to v1.56.2 (#2810)
Reviewed-on: vikunja/frontend#2810
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 09:33:58 +00:00
renovate 8d5ddd695a chore(deps): update dependency esbuild to v0.16.3 (#2809)
Reviewed-on: vikunja/frontend#2809
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 09:33:28 +00:00
renovate a0087bc34a chore(deps): update dependency @cypress/vite-dev-server to v5.0.1 (#2806)
Reviewed-on: vikunja/frontend#2806
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-09 09:32:51 +00:00
renovate 18a73c39e5 chore(deps): update dependency vitest to v0.25.6 (#2804)
Reviewed-on: vikunja/frontend#2804
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-08 11:14:02 +00:00
renovate e0351495ff chore(deps): update typescript-eslint monorepo to v5.46.0 (#2803)
Reviewed-on: vikunja/frontend#2803
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-08 10:26:51 +00:00
renovate b97e045118 chore(deps): update dependency esbuild to v0.16.2 (#2802)
Reviewed-on: vikunja/frontend#2802
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-08 09:32:28 +00:00
renovate a052305adf chore(deps): update dependency rollup to v3.7.0 (#2801)
Reviewed-on: vikunja/frontend#2801
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-08 09:30:16 +00:00
renovate 237de35b25 chore(deps): update dependency typescript to v4.9.4 (#2800)
Reviewed-on: vikunja/frontend#2800
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-08 09:29:39 +00:00
renovate 85beebf0d8 fix(deps): update sentry-javascript monorepo to v7.24.2 (#2799)
Reviewed-on: vikunja/frontend#2799
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-07 20:14:23 +00:00
renovate e81b216f85 fix(deps): update sentry-javascript monorepo to v7.24.1 (#2798)
Reviewed-on: vikunja/frontend#2798
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-07 13:32:51 +00:00
renovate fc9e75e9b3 fix(deps): update sentry-javascript monorepo to v7.24.0 (#2797)
Reviewed-on: vikunja/frontend#2797
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-07 11:15:30 +00:00
renovate b576621569 chore(deps): update dependency cypress to v12.0.1 (#2794)
Reviewed-on: vikunja/frontend#2794
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-07 10:12:16 +00:00
renovate 08a031ca07 chore(deps): update dependency esbuild to v0.16.1 (#2795)
Reviewed-on: vikunja/frontend#2795
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-07 09:13:46 +00:00
renovate d306bb967c fix(deps): update dependency marked to v4.2.4 (#2796)
Reviewed-on: vikunja/frontend#2796
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-07 09:12:25 +00:00
renovate 3f6a64d7f9 chore(deps): update dependency vitest to v0.25.5 (#2793)
Reviewed-on: vikunja/frontend#2793
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-06 21:48:16 +00:00
renovate 2d392c9973 chore(deps): update dependency cypress to v12 (#2792)
Reviewed-on: vikunja/frontend#2792
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-06 18:47:02 +00:00
renovate 9897bc9b43 fix(deps): update dependency dayjs to v1.11.7 (#2791)
Reviewed-on: vikunja/frontend#2791
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-06 16:25:41 +00:00
renovate 92546f4b34 chore(deps): update pnpm to v7.18.1 (#2790)
Reviewed-on: vikunja/frontend#2790
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-06 14:35:50 +00:00
renovate 8d326aca03 chore(deps): update dependency @types/node to v18.11.11 (#2789)
Reviewed-on: vikunja/frontend#2789
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 21:13:45 +00:00
renovate 4bf9284b38 chore(deps): update dependency vitest to v0.25.4 (#2788)
Reviewed-on: vikunja/frontend#2788
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 19:14:26 +00:00
renovate 0de9376b2b chore(deps): update typescript-eslint monorepo to v5.45.1 (#2787)
Reviewed-on: vikunja/frontend#2787
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 18:38:15 +00:00
renovate 0602f6693b chore(deps): update dependency rollup to v3.6.0 (#2786)
Reviewed-on: vikunja/frontend#2786
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 12:14:06 +00:00
renovate 7d5cde53e3 chore(deps): update dependency vite to v3.2.5 (#2785)
Reviewed-on: vikunja/frontend#2785
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 09:27:20 +00:00
renovate 8361640559 chore(deps): update dependency happy-dom to v7.7.2 (#2781)
Reviewed-on: vikunja/frontend#2781
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 08:13:36 +00:00
renovate 517a6cea1e chore(deps): update dependency netlify-cli to v12.2.8 (#2782)
Reviewed-on: vikunja/frontend#2782
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 07:40:17 +00:00
renovate ed4dd93bba chore(deps): update dependency esbuild to v0.15.18 (#2783)
Reviewed-on: vikunja/frontend#2783
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 07:39:38 +00:00
renovate d50de97490 chore(deps): update dependency @vue/test-utils to v2.2.6 (#2784)
Reviewed-on: vikunja/frontend#2784
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 07:38:49 +00:00
renovate aa719d3a68 chore(deps): update dependency caniuse-lite to v1.0.30001436 (#2780)
Reviewed-on: vikunja/frontend#2780
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-05 07:38:08 +00:00
kolaente 463d22b07c
fix(quick add magic): don't create a new label multiple times if it is used in multiple tasks
Resolves https://github.com/go-vikunja/frontend/issues/94
2022-12-04 20:19:43 +01:00
renovate 33494cab6b chore(deps): update dependency esbuild to v0.15.17 (#2779)
Reviewed-on: vikunja/frontend#2779
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-04 12:51:12 +00:00
renovate 8fa922a0ca chore(deps): update pnpm to v7.18.0 (#2778)
Reviewed-on: vikunja/frontend#2778
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-03 23:19:41 +00:00
renovate e5815e21cb chore(deps): update dependency @cypress/vite-dev-server to v5 (#2776)
Reviewed-on: vikunja/frontend#2776
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-03 10:12:17 +00:00
renovate 529b47e488 chore(deps): update dependency vue-tsc to v1.0.11 (#2777)
Reviewed-on: vikunja/frontend#2777
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-03 09:33:19 +00:00
renovate 63c3e4ea58 chore(deps): update dependency @cypress/vue to v5.0.3 (#2775)
Reviewed-on: vikunja/frontend#2775
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-03 09:32:32 +00:00
renovate d52e917357 chore(deps): update dependency eslint to v8.29.0 (#2774)
Reviewed-on: vikunja/frontend#2774
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-03 09:31:53 +00:00
kolaente b2da4fd126
fix(task): pass a list specified via quick add magic down to all subtasks created via indention
Resolves vikunja/frontend#2771
2022-12-02 18:39:52 +01:00
kolaente 83fb8c3ded
fix(tasks): missing space when showing parent tasks and list title
See vikunja/frontend#2771
2022-12-02 18:05:48 +01:00
Dominik Pschenitschni b44d11cfc0 feat: add @intlify/unplugin-vue-i18n (#2772)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2772
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-12-02 15:16:15 +00:00
renovate d4133b9e78 chore(deps): update dependency @vue/test-utils to v2.2.5 (#2773)
Reviewed-on: vikunja/frontend#2773
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-02 14:27:23 +00:00
renovate c478926038 fix(deps): update sentry-javascript monorepo to v7.23.0 2022-12-01 17:03:38 +00:00
renovate 00e40a0f53 chore(deps): update dependency rollup to v3.5.1 (#2769)
Reviewed-on: vikunja/frontend#2769
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-12-01 07:23:21 +00:00
renovate 0567ba2a47 chore(deps): update dependency @types/node to v18.11.10 (#2768)
Reviewed-on: vikunja/frontend#2768
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-30 21:39:34 +00:00
Dominik Pschenitschni 3b95824f58 feat: use Intl.DateTimeFormat for gantt weekdays (#2766)
Fixes vikunja/frontend#2728

Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2766
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-30 15:58:04 +00:00
renovate 963f3bfb07 fix(deps): update sentry-javascript monorepo to v7.22.0 (#2765)
Reviewed-on: vikunja/frontend#2765
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-29 14:16:53 +00:00
renovate d1c05eb3fb chore(deps): update dependency vue-tsc to v1.0.10 (#2764)
Reviewed-on: vikunja/frontend#2764
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-29 14:15:48 +00:00
renovate 2326e50d5d fix(deps): update dependency ufo to v1.0.1 (#2763)
Reviewed-on: vikunja/frontend#2763
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-29 13:13:46 +00:00
drone b7fa1a3ca1 [skip ci] Updated translations via Crowdin 2022-11-29 00:29:59 +00:00
renovate a3e1e43ec7 chore(deps): update typescript-eslint monorepo to v5.45.0 (#2762)
Reviewed-on: vikunja/frontend#2762
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-28 18:15:03 +00:00
renovate 39f163df4a fix(deps): update dependency @kyvg/vue3-notification to v2.7.0 (#2761)
Reviewed-on: vikunja/frontend#2761
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-28 11:13:49 +00:00
renovate f0e8ff93ff chore(deps): update dependency netlify-cli to v12.2.7 (#2760)
Reviewed-on: vikunja/frontend#2760
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-28 10:13:47 +00:00
Dominik Pschenitschni 3ee0bc345d feat: remove useRouteQuery (#2751)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2751
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-28 09:06:07 +00:00
renovate b4ffee8929 chore(deps): update dependency caniuse-lite to v1.0.30001434 (#2759)
Reviewed-on: vikunja/frontend#2759
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-28 09:04:04 +00:00
renovate e3c3d3ee53 fix(deps): update dependency pinia to v2.0.27 (#2757)
Reviewed-on: vikunja/frontend#2757
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-28 09:03:03 +00:00
renovate 67e7b94f5d chore(deps): update dependency esbuild to v0.15.16 2022-11-27 17:03:30 +00:00
renovate 6bbddeae8c chore(deps): update pnpm to v7.17.1 (#2755)
Reviewed-on: vikunja/frontend#2755
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-27 09:49:01 +00:00
renovate 94a0e1e25f chore(deps): update dependency rollup to v3.5.0 (#2756)
Reviewed-on: vikunja/frontend#2756
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-27 09:48:26 +00:00
renovate 4df9bc33df fix(deps): update dependency @infectoone/vue-ganttastic to v2.1.3 2022-11-26 18:03:30 +00:00
drone 5c64e8a2d7 [skip ci] Updated translations via Crowdin 2022-11-25 00:12:02 +00:00
renovate e10791f28c chore(deps): update dependency eslint-plugin-vue to v9.8.0 (#2753)
Reviewed-on: vikunja/frontend#2753
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-24 07:44:19 +00:00
drone 44b58ff34b [skip ci] Updated translations via Crowdin 2022-11-24 00:11:48 +00:00
renovate da17f78d30 fix(deps): update dependency highlight.js to v11.7.0 (#2752)
Reviewed-on: vikunja/frontend#2752
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-23 23:15:37 +00:00
renovate 61cdb7a91f chore(deps): update dependency @cypress/vue to v5.0.2 2022-11-23 19:03:58 +00:00
renovate 1b8ed9417a fix(deps): update dependency pinia to v2.0.26 2022-11-23 14:04:04 +00:00
renovate 4657da8c90 fix(deps): update sentry-javascript monorepo to v7.21.1 (#2747)
Reviewed-on: vikunja/frontend#2747
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-23 12:41:33 +00:00
renovate 6cd2908040 chore(deps): update dependency @4tw/cypress-drag-drop to v2.2.2 2022-11-23 09:03:55 +00:00
renovate 4dd99ae6fc fix(deps): update sentry-javascript monorepo to v7.21.0 2022-11-22 20:22:49 +00:00
renovate 0d5fa1326d chore(deps): update dependency cypress to v11.2.0 2022-11-22 20:03:57 +00:00
renovate dd692de7c4 chore(deps): update dependency vitest to v0.25.3 (#2743)
Reviewed-on: vikunja/frontend#2743
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-22 13:26:18 +00:00
Dominik Pschenitschni 93d95b0821 feat: use fetch instead of axios for deploy preview (#2719)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2719
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-22 13:11:26 +00:00
Dominik Pschenitschni 422e731fe0 fix: add all json files in src (#2737)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2737
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-22 13:08:32 +00:00
Dominik Pschenitschni 7db79ff04e fix: only load buckets if listId set (#2741)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2741
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-22 13:00:36 +00:00
renovate 59cc241226 fix(deps): update vueuse to v9.6.0 (#2742)
Reviewed-on: vikunja/frontend#2742
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-22 12:58:21 +00:00
renovate 2ac2e95cf2 chore(deps): update typescript-eslint monorepo to v5.44.0 2022-11-22 09:32:54 +00:00
renovate f8ce3d6ed6 chore(deps): update dependency rollup to v3.4.0 2022-11-22 06:04:25 +00:00
drone 93f33d9647 [skip ci] Updated translations via Crowdin 2022-11-22 00:12:21 +00:00
renovate 6d32b22da3 fix(deps): update dependency pinia to v2.0.25 2022-11-21 22:04:33 +00:00
renovate b333898595 fix(deps): update sentry-javascript monorepo to v7.20.1 2022-11-21 13:04:18 +00:00
renovate ccc633f3d9 fix(deps): update dependency codemirror to v5.65.10 2022-11-21 10:39:30 +00:00
renovate d39b0675d3 fix(deps): update dependency marked to v4.2.3 2022-11-21 10:38:45 +00:00
renovate 274092bfc4 chore(deps): update pnpm to v7.17.0 2022-11-21 10:38:05 +00:00
renovate cb2c032e60 chore(deps): update dependency @vue/test-utils to v2.2.4 2022-11-21 10:37:06 +00:00
renovate fdf294bcb3 chore(deps): update dependency netlify-cli to v12.2.4 2022-11-21 10:36:15 +00:00
renovate 58baa5960c chore(deps): update dependency esbuild to v0.15.15 2022-11-21 05:04:34 +00:00
renovate e948678e42 chore(deps): update dependency eslint to v8.28.0 2022-11-19 01:04:33 +00:00
Dominik Pschenitschni 5ccedc6f67 [skip ci] Updated translations via Crowdin 2022-11-19 00:12:18 +00:00
Dominik Pschenitschni 74ad98de68 fix: icon offset and color 2022-11-18 15:49:38 +00:00
Dominik Pschenitschni 3282f55c34 chore: add TODO comment 2022-11-18 15:49:38 +00:00
Dominik Pschenitschni d9984b28f7 feat: move link color location together 2022-11-18 15:49:38 +00:00
Dominik Pschenitschni 4fc7b9c67e feat: group navigation styles further 2022-11-18 15:49:38 +00:00
Dominik Pschenitschni ff9efe7889 feat: outdent navigation logo styles 2022-11-18 15:49:38 +00:00
Dominik Pschenitschni 66be0e6ac4 feat: undent and order navigation css 2022-11-18 15:49:38 +00:00
Dominik Pschenitschni da8df8b667 feat: move avatar class to where it is used (#2725)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2725
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-18 13:30:41 +00:00
Dominik Pschenitschni 42e9f306e8
feat: grid for list cards 2022-11-18 14:04:20 +01:00
Angelo Delicato 4b47478440
feat: change list-content style (#91)
Co-authored-by: thelicato <thelicato@users.noreply.github.com>
Reviewed-on: https://github.com/go-vikunja/frontend/pull/91
2022-11-17 17:35:06 +01:00
Dominik Pschenitschni b42e4cca59 feat: more horizontal space on mobile (#2722)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2722
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-17 16:17:18 +00:00
Dominik Pschenitschni 33d4efecc4 feat: move useAutoHeightTextarea to composable (#2723)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2723
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-17 15:39:34 +00:00
Dominik Pschenitschni 45ec1623d5 feat: remove edit-task from list view (#2721)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2721
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-17 15:35:18 +00:00
Dominik Pschenitschni 8ef309243d feat: improve loadTask logic (#2715)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2715
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-17 15:31:21 +00:00
Dominik Pschenitschni 3aaacf4533 fix: remove vuex leftover from setModuleLoading (#2716)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2716
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-17 15:02:26 +00:00
renovate 0350e37fbb fix(deps): update sentry-javascript monorepo to v7.20.0 (#2720)
Reviewed-on: vikunja/frontend#2720
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-17 12:13:40 +00:00
renovate 244c436202 fix(deps): update dependency pinia to v2.0.24 2022-11-17 08:04:15 +00:00
drone 18d0c8ba2c [skip ci] Updated translations via Crowdin 2022-11-17 00:12:14 +00:00
kolaente 3891d5b876
feat: only automatically redirect to provider if the url contains ?redirectToProvider=true and it's the only one
Resolves https://github.com/go-vikunja/frontend/issues/90
2022-11-16 16:37:00 +01:00
Dominik Pschenitschni 98b38af43c feat: disable fullscreen for EasyMDE side-by-side mode (#2710)
Fixes https://github.com/go-vikunja/frontend/issues/92
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2710
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-16 14:37:03 +00:00
konrad 77ff0aa256 feat: move transition in component (#2694)
Reviewed-on: vikunja/frontend#2694
Reviewed-by: konrad <k@knt.li>
2022-11-16 14:36:17 +00:00
renovate 2ab26ee7c5 chore(deps): update pnpm to v7.16.1 (#2717)
Reviewed-on: vikunja/frontend#2717
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-16 14:16:20 +00:00
renovate 58f38bcfc3 fix(deps): update font awesome to v6.2.1 (#2712)
Reviewed-on: vikunja/frontend#2712
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-16 09:04:05 +00:00
renovate bcb5190365 chore(deps): update dependency cypress to v11.1.0 2022-11-15 21:06:37 +00:00
renovate c99d09c83e chore(deps): update dependency typescript to v4.9.3 2022-11-15 19:04:55 +00:00
renovate f49ea9752d chore(deps): update dependency vite to v3.2.4 2022-11-15 14:04:41 +00:00
renovate a56683cdc2 chore(deps): update dependency @vue/test-utils to v2.2.3 (#2707)
Reviewed-on: vikunja/frontend#2707
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-15 09:17:14 +00:00
renovate 7f4af63003 chore(deps): update dependency esbuild to v0.15.14 (#2706)
Reviewed-on: vikunja/frontend#2706
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-15 08:36:58 +00:00
Dominik Pschenitschni 8c44ed83e6
feat: use transition component everywhere 2022-11-14 22:08:54 +01:00
renovate b388677eaf fix(deps): update dependency ufo to v1 2022-11-14 18:42:12 +00:00
renovate bd7430b405 chore(deps): update typescript-eslint monorepo to v5.43.0 2022-11-14 18:05:00 +00:00
renovate 4baed8fe79 chore(deps): update pnpm to v7.16.0 (#2703)
Reviewed-on: vikunja/frontend#2703
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-14 16:01:36 +00:00
renovate fdbe4e8314 chore(deps): update dependency vitest to v0.25.2 (#2702)
Reviewed-on: vikunja/frontend#2702
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-14 16:00:57 +00:00
renovate 4a7f839449 chore(deps): update dependency postcss-preset-env to v7.8.3 (#2701)
Reviewed-on: vikunja/frontend#2701
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-14 10:15:12 +00:00
renovate c359f4d4dd chore(deps): update dependency netlify-cli to v12.1.1 (#2699)
Reviewed-on: vikunja/frontend#2699
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-14 09:16:36 +00:00
renovate 79d6212e48 chore(deps): update dependency happy-dom to v7.7.0 2022-11-14 08:54:27 +00:00
renovate e541213872 chore(deps): update dependency caniuse-lite to v1.0.30001431 2022-11-14 00:05:39 +00:00
Dominik Pschenitschni fd1d01164f feature/load-views-async (#2672)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2672
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-13 21:52:28 +00:00
renovate 34edf0dc5f chore(deps): update dependency @vue/test-utils to v2.2.2 (#2696)
Reviewed-on: vikunja/frontend#2696
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-13 10:17:32 +00:00
Dominik Pschenitschni 631a19fa92
feat: move transition in own component 2022-11-12 19:32:39 +01:00
Dominik Pschenitschni fba402fcd0
feat: reduce TaskDetailView selector specificity 2022-11-12 19:29:20 +01:00
Dominik Pschenitschni 4c4adfdf4e fix: reactive const assignment (#2692)
Resolves #2691

Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2692
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 16:14:32 +00:00
Dominik Pschenitschni 06775cf4c7 fix: use scss for datemathHelp (#2690)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2690
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 14:38:31 +00:00
kolaente c07954f2b8
feat(ci): use docker buildx for multiarch builds 2022-11-12 14:43:29 +01:00
kolaente 995cc12880
fix(tasks): remove a task from its bucket when it is in the first kanban bucket
Resolves https://github.com/go-vikunja/frontend/issues/89
2022-11-12 12:13:00 +01:00
Dominik Pschenitschni 293402b6fd fix: move heading styles to component (#2686)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2686
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:52:16 +00:00
Dominik Pschenitschni 708ef2d72e feat: improve user component (#2687)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2687
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:51:35 +00:00
Dominik Pschenitschni 4c458a1ad0 fix: move createdUpdated styles to component (#2685)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2685
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:50:48 +00:00
Dominik Pschenitschni 02de481297 feat: use img for logo so that it's not part of the main bundle (#2684)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2684
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:48:52 +00:00
Dominik Pschenitschni 9d604f7a3b feat: reduce ready selector specificity (#2683)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2683
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:48:15 +00:00
Dominik Pschenitschni 0f1f131f7a feat: reduce attachments selector specificity (#2682)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2682
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:47:46 +00:00
Dominik Pschenitschni eb4c2a4b9d feat: reduce dropdown-item selector specificity (#2680)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2680
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:46:39 +00:00
Dominik Pschenitschni 599c1ba4b5 feat: reduce ListWrapper selector specificity (#2679)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2679
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:46:00 +00:00
Dominik Pschenitschni 12a8f7ebe9 feat: reduce contentAuth selector specifity (#2677)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2677
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:45:24 +00:00
Dominik Pschenitschni 9f0f0b39f8 feat: reduce multiselect selector specificity (#2678)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2678
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-12 10:44:49 +00:00
konrad 4a550da6a6 feat: filters script setup (#2671)
Reviewed-on: vikunja/frontend#2671
2022-11-12 10:43:24 +00:00
renovate 52ba168d41 chore(deps): update dependency @types/dompurify to v2.4.0 (#2688)
Reviewed-on: vikunja/frontend#2688
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-12 10:42:19 +00:00
renovate 9c7680aa55 chore(deps): update dependency rollup to v3.3.0 (#2689)
Reviewed-on: vikunja/frontend#2689
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-12 10:41:30 +00:00
Dominik Pschenitschni 83bb030c6e [skip ci] Updated translations via Crowdin 2022-11-12 00:12:21 +00:00
Dominik Pschenitschni 163d9366d3 feat: add vite build target esnext (#2674)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2674
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-11 14:43:23 +00:00
kolaente 5cff9988a3
chore: 0.20.1 release preperations 2022-11-11 12:02:16 +01:00
renovate a15ace0dbc fix(deps): update dependency vue to v3.2.45 2022-11-11 10:04:28 +00:00
renovate 65bb514093 chore(deps): update dependency postcss to v8.4.19 (#2673)
Reviewed-on: vikunja/frontend#2673
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-11 07:59:45 +00:00
renovate 403f1ee400 fix(deps): update sentry-javascript monorepo to v7.19.0 (#2670)
Reviewed-on: vikunja/frontend#2670
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-10 16:17:18 +00:00
Dominik Pschenitschni bb58dba8e0
feat: move select filters to dedicated components 2022-11-10 17:11:56 +01:00
Dominik Pschenitschni 4bad685f39
feat: filters script setup 2022-11-10 17:11:56 +01:00
kolaente e5f631af8d
fix(tasks): show any errors happening during task load 2022-11-10 16:44:16 +01:00
renovate 925f2aa837 fix(deps): update dependency dompurify to v2.4.1 (#2669)
Reviewed-on: vikunja/frontend#2669
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-10 14:14:01 +00:00
renovate 1de22386da chore(deps): update dependency cypress to v11 (#2659)
Reviewed-on: vikunja/frontend#2659
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-10 13:52:24 +00:00
renovate 602af9ec96 chore(deps): update pnpm to v7.15.0 (#2667)
Reviewed-on: vikunja/frontend#2667
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-10 07:29:51 +00:00
renovate 57feb65e00 fix(deps): update dependency vue to v3.2.44 (#2666)
Reviewed-on: vikunja/frontend#2666
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-10 07:29:10 +00:00
konrad 94508173dc fix: gantt route sync (#2664)
Reviewed-on: vikunja/frontend#2664
2022-11-09 19:48:17 +00:00
kolaente bd0c4d0355
feat(tests): add tests for gantt chart task detail open 2022-11-09 20:16:30 +01:00
kolaente 2952a0155f
feat(tests): add tests for gantt chart time range 2022-11-09 20:10:18 +01:00
kolaente 6055fecc5d
fix(gantt): don't try to load list NaN when opening a task from the gantt chart 2022-11-09 19:54:53 +01:00
Dominik Pschenitschni 7ec2b6c0d2
fix: gantt route sync 2022-11-09 18:39:29 +01:00
renovate 13bd434cb9 fix(deps): update dependency vue to v3.2.43 (#2663)
Reviewed-on: vikunja/frontend#2663
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-09 14:18:57 +00:00
kolaente b98d9fb7ec
fix(table): sort tasks by index instead of id 2022-11-09 14:46:58 +01:00
kolaente c2dd18edaa
fix: lint & formatting 2022-11-09 14:27:26 +01:00
kolaente d47791b957
fix: too much recursion error when opening a task from the gantt chart
Resolves F-905
Resolves https://community.vikunja.io/t/gantt-view-showing-too-much-recursion-error/935
2022-11-09 14:05:13 +01:00
renovate e6eaac1b46
fix(deps): update dependency @fortawesome/vue-fontawesome to v3.0.2 2022-11-09 12:30:50 +01:00
renovate cf2103734b fix(deps): update dependency vue to v3.2.42 2022-11-09 11:05:14 +00:00
renovate bb9c5046b3 chore(deps): update dependency sass to v1.56.1 (#2661)
Reviewed-on: vikunja/frontend#2661
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-09 10:20:32 +00:00
renovate a7a6a4c2d6 fix(deps): update vueuse to v9.5.0 (#2660)
Reviewed-on: vikunja/frontend#2660
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-09 10:19:58 +00:00
renovate 28257fcf5f chore(deps): update dependency @cypress/vite-dev-server to v4.0.1 (#2658)
Reviewed-on: vikunja/frontend#2658
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-09 10:18:57 +00:00
renovate c314d56f73 chore(deps): update dependency vitest to v0.25.1 (#2657)
Reviewed-on: vikunja/frontend#2657
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-08 16:15:14 +00:00
kolaente 612e592da7
fix: sort task alphabetically
Resolves F-906
2022-11-08 16:16:22 +01:00
konrad 1a329464ab feat(ci): improve drone config (#2637)
Reviewed-on: vikunja/frontend#2637
2022-11-08 14:56:45 +00:00
kolaente d5efe9f656
chore(ci): sign drone config 2022-11-08 15:42:41 +01:00
Dominik Pschenitschni 4a5f1a783a
fix(ci): cache folder name 2022-11-08 15:42:37 +01:00
Dominik Pschenitschni 906b3a5cdf
feat(ci): update cypress image 2022-11-08 15:42:33 +01:00
Dominik Pschenitschni 678dc8ef51
feat(ci): add kind everywhere 2022-11-08 15:42:28 +01:00
Dominik Pschenitschni da1d5eaba1
feat(ci): use 'always' for pull 2022-11-08 15:42:13 +01:00
kolaente 02448700b3
fix(quick add magic): don't parse labels, assignees or lists as date expressions if they are called that
Resolves https://community.vikunja.io/t/setting-today-label-using-quick-add-magic/969
2022-11-08 15:35:13 +01:00
renovate d9ca798aad fix(deps): update sentry-javascript monorepo to v7.18.0 2022-11-08 10:05:54 +00:00
renovate 23668e55d7 chore(deps): update dependency @cypress/vue to v5.0.1 (#2655)
Reviewed-on: vikunja/frontend#2655
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-08 07:25:00 +00:00
drone 3be9de76c5 [skip ci] Updated translations via Crowdin 2022-11-08 00:12:23 +00:00
renovate a9f41e3f37 chore(deps): update typescript-eslint monorepo to v5.42.1 (#2653)
Reviewed-on: vikunja/frontend#2653
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 18:29:19 +00:00
Dominik Pschenitschni f0492d49ef
feat: kanban store with composition api 2022-11-07 18:25:52 +01:00
Dominik Pschenitschni d85abbd77a feat: ListKanban script setup (#2643)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2643
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-07 17:23:11 +00:00
renovate 5186aeb086 chore(deps): update dependency @cypress/vue to v5 (#2652)
Reviewed-on: vikunja/frontend#2652
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 17:16:40 +00:00
renovate 7ba421e810 chore(deps): update dependency vitest to v0.25.0 (#2650)
Reviewed-on: vikunja/frontend#2650
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 16:17:25 +00:00
renovate e0fd4f216f chore(deps): update dependency @cypress/vite-dev-server to v4 (#2651)
Reviewed-on: vikunja/frontend#2651
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 16:17:20 +00:00
Dominik Pschenitschni 5057b69382 chore: move run.sh in scripts folder (#2649)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2649
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-07 14:33:37 +00:00
renovate 07297196f9 chore(deps): update dependency vite-plugin-pwa to v0.13.3 (#2648)
Reviewed-on: vikunja/frontend#2648
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 14:13:09 +00:00
Dominik Pschenitschni 7fbb6e8f70 fix: Flatpickr types (#2647)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2647
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-07 14:05:29 +00:00
Dominik Pschenitschni 38cef79f68 fix: remove duplicate store assignment (#2644)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2644
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-07 11:43:19 +00:00
Dominik Pschenitschni 6a93701649 feat: remove comments from prioritySelect (#2645)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2645
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-07 11:42:32 +00:00
Dominik Pschenitschni d9a8382049 feat: simpliy editAssignees (#2646)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2646
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-07 11:41:49 +00:00
renovate 66e60a4e6a chore(deps): update dependency @vitejs/plugin-legacy to v2.3.1 (#2641)
Reviewed-on: vikunja/frontend#2641
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 10:47:56 +00:00
renovate 0f67a78ec8 chore(deps): update dependency vite to v3.2.3 2022-11-07 09:04:32 +00:00
renovate 722802fb2e chore(deps): update dependency netlify-cli to v12.1.0 (#2640)
Reviewed-on: vikunja/frontend#2640
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 07:14:15 +00:00
renovate 752ead3a75 chore(deps): update dependency caniuse-lite to v1.0.30001430 (#2639)
Reviewed-on: vikunja/frontend#2639
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-07 06:35:25 +00:00
renovate b0b261d647 chore(deps): update dependency eslint to v8.27.0 2022-11-06 07:04:02 +00:00
renovate 442a14242c fix(deps): update dependency marked to v4.2.2 (#2636)
Reviewed-on: vikunja/frontend#2636
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-05 09:43:08 +00:00
Dominik Pschenitschni 66c0c322a2 [skip ci] Updated translations via Crowdin 2022-11-05 00:29:13 +00:00
Dominik Pschenitschni f4bc2b94f0 feat: sticky action buttons (#2622)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2622
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-04 13:49:28 +00:00
Dominik Pschenitschni f7728e5384 fix: remove wrong loadTask params (#2635)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2635
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-04 13:39:14 +00:00
kolaente 78b765ddc4 fix(kanban): don't allow dragging a bucket if a task input is focused
Resolves vikunja/frontend#2452
2022-11-04 12:16:25 +00:00
kolaente f967bcb205
fix(auth): always redirect to external openid provider if only one is enabled 2022-11-04 13:08:12 +01:00
Dominik Pschenitschni e49f960aea chore: inline simple helper (#2631)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2631
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-04 08:22:58 +00:00
renovate 98cb878250 chore(deps): update dependency sass to v1.56.0 (#2633)
Reviewed-on: vikunja/frontend#2633
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-04 08:17:28 +00:00
renovate 03f2b253b8 chore(deps): update dependency vite-plugin-pwa to v0.13.2 (#2632)
Reviewed-on: vikunja/frontend#2632
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-04 07:54:53 +00:00
renovate 69c0726b9d chore(deps): pin dependency @types/codemirror to 5.60.5 2022-11-03 15:03:57 +00:00
Dominik Pschenitschni eb59ca5836 fix: resolve issues with vue-easymde (#2629)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2629
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-03 14:37:24 +00:00
Dominik Pschenitschni 8b7b4d61a3 feat: MigrateService script setup (#2432)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2432
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-03 14:19:42 +00:00
renovate 0ed7114260 fix(deps): update sentry-javascript monorepo to v7.17.4 (#2628)
Reviewed-on: vikunja/frontend#2628
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-03 11:14:18 +00:00
renovate dda162c16f chore(deps): update dependency esbuild to v0.15.13 (#2627)
Reviewed-on: vikunja/frontend#2627
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-03 07:44:19 +00:00
Dominik Pschenitschni eeb562314e [skip ci] Updated translations via Crowdin 2022-11-03 00:29:00 +00:00
Dominik Pschenitschni 7f00c7dabd chore: remove unused processModel in services (#2624)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2624
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-02 16:19:26 +00:00
konrad 0ff0d8c5b8 feat: improved types (#2547)
Reviewed-on: vikunja/frontend#2547
Reviewed-by: konrad <k@knt.li>
2022-11-02 16:06:55 +00:00
renovate 9c9a5d08ff chore(deps): update pnpm to v7.14.2 2022-11-02 10:04:26 +00:00
renovate 9a2b88d295 fix(deps): update dependency marked to v4.2.1 (#2625)
Reviewed-on: vikunja/frontend#2625
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-02 09:45:05 +00:00
kolaente 09b76b7bd4
fix: don't show user deletion menu entry in user settings if the server disabled it 2022-11-02 10:44:14 +01:00
renovate f72c847e99 chore(deps): update dependency @cypress/vue to v4.2.2 2022-11-01 21:04:04 +00:00
renovate 8ea899fa26 chore(deps): update dependency vitest to v0.24.5 (#2621)
Reviewed-on: vikunja/frontend#2621
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-01 18:15:29 +00:00
Dominik Pschenitschni e01df4d369
fix: coverImageAttachmentId 2022-11-01 14:27:35 +01:00
Dominik Pschenitschni 096daad80a feat: rename http-common to fetcher (#2620)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2620
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-01 13:06:27 +00:00
Dominik Pschenitschni 3c5bfcc6f3
fix: potential issue with refs in Avatar 2022-11-01 13:12:13 +01:00
Dominik Pschenitschni 0182695cda
feat: add type info 2022-11-01 13:12:12 +01:00
Dominik Pschenitschni 44e6981759 feat: singleTaskInList script setup (#2463)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2463
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-11-01 10:43:01 +00:00
renovate 15b64c7e8a chore(deps): update dependency @types/node to v18.11.9 (#2619)
Reviewed-on: vikunja/frontend#2619
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-01 10:13:19 +00:00
renovate 9c357cb83e fix(deps): update dependency marked to v4.2.0 (#2616)
Reviewed-on: vikunja/frontend#2616
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-01 07:27:30 +00:00
renovate 0cf9b7595a chore(deps): update dependency @cypress/vite-dev-server to v3.4.0 (#2617)
Reviewed-on: vikuja/frontend#2617
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-01 07:26:42 +00:00
renovate 21dce0d8a8 chore(deps): update dependency rollup to v3.2.5 (#2618)
Reviewed-on: vikunja/frontend#2618
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-01 07:25:55 +00:00
renovate 218b96b230 fix(deps): update dependency @kyvg/vue3-notification to v2.6.1 (#2615)
Reviewed-on: vikunja/frontend#2615
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-11-01 07:25:14 +00:00
Dominik Pschenitschni d19c48a4f5 [skip ci] Updated translations via Crowdin 2022-11-01 00:28:44 +00:00
Dominik Pschenitschni 480aa8813e
fix: Multiselect modelValue prop type 2022-10-31 22:42:30 +01:00
Dominik Pschenitschni caa29c152d
chore: improve multiselect hover types
when hovering over props you can only see comments if written with JSDoc
2022-10-31 22:42:30 +01:00
Dominik Pschenitschni 1101fcb3ff
chore: remove comment 2022-10-31 22:42:30 +01:00
Dominik Pschenitschni 5d601ca4b3
fix: missing href 2022-10-31 22:42:30 +01:00
Dominik Pschenitschni 53c9a9bc9c
jsx templates 2022-10-31 22:42:30 +01:00
Dominik Pschenitschni d6cb965ea7
fix: disable props destructure error 2022-10-31 22:42:30 +01:00
Dominik Pschenitschni 964aba4824
fix: better kanban updateBucket types 2022-10-31 22:42:30 +01:00
Dominik Pschenitschni 35f4bb1385
fix: setModuleLoading LoadingState type 2022-10-31 22:42:29 +01:00
Dominik Pschenitschni 0b58973d87
feat: rework popup 2022-10-31 22:42:29 +01:00
Dominik Pschenitschni 02deb0bedd
feat: rework dropdown-item 2022-10-31 22:42:29 +01:00
Dominik Pschenitschni 4cd0e90fea
feat: rework XButton 2022-10-31 22:42:29 +01:00
Dominik Pschenitschni e8c6afce72
feat: rework BaseButton 2022-10-31 22:42:29 +01:00
Dominik Pschenitschni a2c1702eef
feat: type global components and especially icon prop 2022-10-31 22:42:29 +01:00
Dominik Pschenitschni 599e28e5e5
feat: type improvements 2022-10-31 22:42:28 +01:00
Dominik Pschenitschni 1002579173 feat: label store with composition api (#2605)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2605
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:45:36 +00:00
Dominik Pschenitschni 5ae8bace82 feat: lists store with composition api (#2606)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2606
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:41:23 +00:00
Dominik Pschenitschni 0832184222 feat: namespaces store with composition api (#2607)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2607
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:40:55 +00:00
Dominik Pschenitschni a50eca852f feat: attachments store with composition api (#2603)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2603
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:40:26 +00:00
Dominik Pschenitschni b4f4fd45a4 feat: base store with composition api (#2601)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2601
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:31:58 +00:00
Dominik Pschenitschni 15ef86d597 feat: config store with composition api (#2604)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2604
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:29:56 +00:00
Dominik Pschenitschni 825ba100f0 feat: auth store with composition api (#2602)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2602
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:25:35 +00:00
Dominik Pschenitschni 839d331bf5 feat: task store with composition api (#2610)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: vikunja/frontend#2610
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
2022-10-31 20:22:00 +00:00
renovate 1798388e31 chore(deps): update dependency rollup to v3.2.4 (#2614)
Reviewed-on: vikunja/frontend#2614
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-10-31 20:17:07 +00:00
renovate c3f8dcefb6 chore(deps): update typescript-eslint monorepo to v5.42.0 2022-10-31 18:04:06 +00:00
renovate 816292e86a fix(deps): update dependency @kyvg/vue3-notification to v2.6.0 (#2612)
Reviewed-on: vikunja/frontend#2612
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-10-31 17:51:22 +00:00
renovate ea1c7f1a7e fix(deps): update dependency @kyvg/vue3-notification to v2.5.1 2022-10-31 15:04:09 +00:00
renovate 6cb17c1267 fix(deps): update dependency @kyvg/vue3-notification to v2.5.0 2022-10-31 14:29:35 +00:00
renovate cbb2cf2951 chore(deps): update dependency vite to v3.2.2 2022-10-31 14:04:16 +00:00
renovate 85e1b36b00 chore(deps): update dependency @types/node to v18.11.8 2022-10-31 13:15:55 +00:00
renovate c9b9367c0b chore(deps): update dependency vitest to v0.24.4 2022-10-31 13:14:46 +00:00
renovate a14644c156 fix(deps): update dependency blurhash to v2.0.4 2022-10-31 13:09:02 +00:00
renovate 189b5ee8aa chore(deps): update dependency caniuse-lite to v1.0.30001427 2022-10-31 13:08:20 +00:00
renovate 61ed47fab4 chore(deps): update dependency eslint-plugin-vue to v9.7.0 2022-10-31 13:07:35 +00:00
renovate f18c03fa4d fix(deps): update sentry-javascript monorepo to v7.17.3 2022-10-31 12:04:02 +00:00
renovate 0e219b48a3 fix(deps): update dependency vue-flatpickr-component to v11 2022-10-30 12:48:43 +00:00
renovate 9ee05d5583 chore(deps): update pnpm to v7.14.1 (#2593)
Reviewed-on: vikunja/frontend#2593
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-10-30 10:25:37 +00:00
renovate 6d20e762ee chore(deps): update dependency @vue/test-utils to v2.2.1 (#2591)
Reviewed-on: vikunja/frontend#2591
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2022-10-30 10:24:54 +00:00
drone 5143e09d2b [skip ci] Updated translations via Crowdin 2022-10-30 00:29:14 +00:00
drone b428523c89 [skip ci] Updated translations via Crowdin 2022-10-29 00:29:10 +00:00
renovate 6ef0a0ded9 chore(deps): update dependency vite to v3.2.1 2022-10-28 11:03:47 +00:00
315 changed files with 16511 additions and 10974 deletions

View File

@ -1,5 +1,6 @@
---
kind: pipeline
type: docker
name: build
trigger:
@ -22,7 +23,7 @@ steps:
# Disabled until we figure out why it is so slow
# - name: restore-cache
# image: meltwater/drone-cache:dev
# pull: true
# pull: always
# environment:
# AWS_ACCESS_KEY_ID:
# from_secret: cache_aws_access_key_id
@ -41,7 +42,7 @@ steps:
- name: dependencies
image: node:18-alpine
pull: true
pull: always
environment:
PNPM_CACHE_FOLDER: .cache/pnpm
CYPRESS_CACHE_FOLDER: .cache/cypress
@ -53,7 +54,7 @@ steps:
- name: lint
image: node:18-alpine
pull: true
pull: always
environment:
PNPM_CACHE_FOLDER: .cache/pnpm
commands:
@ -64,7 +65,7 @@ steps:
- name: build-prod
image: node:18-alpine
pull: true
pull: always
environment:
PNPM_CACHE_FOLDER: .cache/pnpm
commands:
@ -75,7 +76,7 @@ steps:
- name: test-unit
image: node:18-alpine
pull: true
pull: always
commands:
- corepack enable && pnpm config set store-dir .cache/pnpm
- pnpm run test:unit
@ -85,7 +86,7 @@ steps:
- name: typecheck
failure: ignore
image: node:18-alpine
pull: true
pull: always
environment:
PNPM_CACHE_FOLDER: .cache/pnpm
commands:
@ -95,8 +96,8 @@ steps:
- dependencies
- name: test-frontend
image: cypress/browsers:node16.14.0-chrome99-ff97
pull: true
image: cypress/browsers:node18.12.0-chrome107
pull: always
environment:
CYPRESS_API_URL: http://api:3456/api/v1
CYPRESS_TEST_SECRET: averyLongSecretToSe33dtheDB
@ -109,14 +110,13 @@ steps:
- sed -i 's/localhost/api/g' dist/index.html
- corepack enable && pnpm config set store-dir .cache/pnpm
- pnpm cypress install
- pnpm run serve:dist & npx wait-on http://localhost:4173
- pnpm run test:frontend --browser chrome --record
- pnpm run test:e2e-record
depends_on:
- build-prod
# - name: rebuild-cache
# image: meltwater/drone-cache:dev
# pull: true
# pull: always
# environment:
# AWS_ACCESS_KEY_ID:
# from_secret: cache_aws_access_key_id
@ -136,7 +136,7 @@ steps:
- name: deploy-preview
image: node:18-alpine
pull: true
pull: always
environment:
NETLIFY_AUTH_TOKEN:
from_secret: netlify_auth_token
@ -149,8 +149,10 @@ steps:
# Override the default api url used for preview
- sed -i 's|http://localhost:3456|https://try.vikunja.io|g' dist-preview/index.html
- apk add --no-cache perl-utils
- shasum -a 384 -c ./scripts/deploy-preview-netlify.js.sha384
- node ./scripts/deploy-preview-netlify.js
# create via:
# `shasum -a 384 ./scripts/deploy-preview-netlify.mjs > ./scripts/deploy-preview-netlify.mjs.sha384`
- shasum -a 384 -c ./scripts/deploy-preview-netlify.mjs.sha384
- node ./scripts/deploy-preview-netlify.mjs
depends_on:
- build-prod
when:
@ -160,6 +162,7 @@ steps:
---
kind: pipeline
type: docker
name: release-latest
depends_on:
@ -179,7 +182,7 @@ steps:
# - name: restore-cache
# image: meltwater/drone-cache:dev
# pull: true
# pull: always
# environment:
# AWS_ACCESS_KEY_ID:
# from_secret: cache_aws_access_key_id
@ -197,13 +200,12 @@ steps:
- name: build
image: node:18-alpine
pull: true
group: build-static
pull: always
environment:
PNPM_CACHE_FOLDER: .cache/pnpm
commands:
- apk add git
- corepack enable && pnpm config set store-dir .cache/.pnp
- corepack enable && pnpm config set store-dir .cache/pnpm
- pnpm install --fetch-timeout 100000 --frozen-lockfile
- pnpm run lint
- "echo '{\"VERSION\": \"'$(git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/')'\"}' > src/version.json"
@ -214,7 +216,7 @@ steps:
- name: static
image: kolaente/zip
pull: true
pull: always
commands:
- cd dist
- zip -r ../vikunja-frontend-unstable.zip *
@ -223,7 +225,7 @@ steps:
- name: release
image: plugins/s3
pull: true
pull: always
settings:
bucket: vikunja-releases
access_key:
@ -239,6 +241,7 @@ steps:
---
kind: pipeline
type: docker
name: release-version
depends_on:
@ -256,7 +259,7 @@ steps:
# - name: restore-cache
# image: meltwater/drone-cache:dev
# pull: true
# pull: always
# environment:
# AWS_ACCESS_KEY_ID:
# from_secret: cache_aws_access_key_id
@ -274,8 +277,7 @@ steps:
- name: build
image: node:18-alpine
pull: true
group: build-static
pull: always
environment:
PNPM_CACHE_FOLDER: .cache/pnpm
commands:
@ -291,7 +293,7 @@ steps:
- name: static
image: kolaente/zip
pull: true
pull: always
commands:
- cd dist
- zip -r ../vikunja-frontend-${DRONE_TAG##v}.zip *
@ -300,7 +302,7 @@ steps:
- name: release
image: plugins/s3
pull: true
pull: always
settings:
bucket: vikunja-releases
access_key:
@ -316,6 +318,7 @@ steps:
---
kind: pipeline
type: docker
name: trigger-desktop-update
trigger:
@ -340,111 +343,7 @@ steps:
---
kind: pipeline
type: docker
name: docker-arm-release
depends_on:
- release-latest
- release-version
platform:
os: linux
arch: arm64
trigger:
ref:
- refs/heads/main
- "refs/tags/**"
event:
exclude:
- cron
steps:
- name: docker-unstable
image: plugins/docker:linux-arm
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
tags: unstable-linux-arm
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=unstable
when:
ref:
- refs/heads/main
depends_on:
- clone
- name: docker-version
image: plugins/docker:linux-arm
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
auto_tag: true
auto_tag_suffix: linux-arm
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=${DRONE_TAG##v}
when:
ref:
- "refs/tags/**"
depends_on:
- clone
- name: docker-unstable-arm64
image: plugins/docker:linux-arm64
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
tags: unstable-linux-arm64
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=unstable
when:
ref:
- refs/heads/main
depends_on:
- clone
- name: docker-version-arm64
image: plugins/docker:linux-arm64
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
auto_tag: true
auto_tag_suffix: linux-arm64
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=${DRONE_TAG##v}
when:
ref:
- "refs/tags/**"
depends_on:
- clone
---
kind: pipeline
type: docker
name: docker-amd64-release
platform:
os: linux
arch: amd64
name: docker-release
depends_on:
- release-latest
@ -459,101 +358,67 @@ trigger:
- cron
steps:
- name: fetch-tags
image: docker:git
commands:
- git fetch --tags
- name: docker-unstable
image: plugins/docker:linux-amd64
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
tags: unstable-linux-amd64
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=unstable
when:
ref:
- refs/heads/main
- name: docker-version
image: plugins/docker:linux-amd64
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
auto_tag: true
auto_tag_suffix: linux-amd64
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=${DRONE_TAG##v}
when:
ref:
- "refs/tags/**"
---
kind: pipeline
type: docker
name: docker-manifest
trigger:
ref:
- refs/heads/main
- "refs/tags/**"
event:
exclude:
- cron
depends_on:
- docker-amd64-release
- docker-arm-release
steps:
- name: manifest-unstable
image: thegeeklab/drone-docker-buildx
privileged: true
pull: always
image: plugins/manifest
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
tags: unstable
spec: docker-manifest-unstable.tmpl
password:
from_secret: docker_password
username:
from_secret: docker_username
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=unstable
platforms:
- linux/386
- linux/amd64
- linux/arm/v6
- linux/arm/v7
- linux/arm64/v8
depends_on: [ fetch-tags ]
when:
ref:
- refs/heads/main
- name: manifest-release
pull: always
image: plugins/manifest
settings:
auto_tag: true
ignore_missing: true
spec: docker-manifest.tmpl
password:
from_secret: docker_password
username:
from_secret: docker_username
- name: generate-tags
image: thegeeklab/docker-autotag
environment:
DOCKER_AUTOTAG_VERSION: ${DRONE_TAG}
DOCKER_AUTOTAG_EXTRA_TAGS: latest
DOCKER_AUTOTAG_OUTPUT_FILE: .tags
depends_on: [ fetch-tags ]
when:
ref:
- "refs/tags/**"
- name: manifest-release-latest
- name: docker-release
image: thegeeklab/drone-docker-buildx
privileged: true
pull: always
image: plugins/manifest
depends_on:
- clone
settings:
tags: latest
ignore_missing: true
spec: docker-manifest.tmpl
password:
from_secret: docker_password
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=${DRONE_TAG##v}
platforms:
- linux/386
- linux/amd64
- linux/arm/v6
- linux/arm/v7
- linux/arm64/v8
depends_on: [ generate-tags ]
when:
ref:
- "refs/tags/**"
@ -576,9 +441,7 @@ depends_on:
- release-version
- release-latest
- trigger-desktop-update
- docker-arm-release
- docker-amd64-release
- docker-manifest
- docker-release
steps:
- name: notify
@ -599,9 +462,6 @@ kind: pipeline
type: docker
name: update-translations
depends_on:
- build
trigger:
branch:
- main
@ -661,6 +521,6 @@ steps:
from_secret: crowdin_key
---
kind: signature
hmac: 5dc7ab785b6e4d1611fc2851971e23c444d93d4988517f116e02e8c4d1af82f3
hmac: 971875b90c7bb1649d1b00d022d0b594ba9b68f927bf8f0dbe840190816d676b
...

13
.env.local.example Normal file
View File

@ -0,0 +1,13 @@
# (1) Duplicate this file and remove the '.example' suffix.
# Naming this file '.env.local' is a Vite convention to prevent accidentally
# submitting to git.
# For more info see: https://vitejs.dev/guide/env-and-mode.html#env-files
# (2) Comment in and adjust the values as needed.
# VITE_IS_ONLINE=true
# VITE_WORKBOX_DEBUG=false
# SENTRY_AUTH_TOKEN=YOUR_TOKEN
# SENTRY_ORG=vikunja
# SENTRY_PROJECT=frontend-oss
# VIKUNJA_FRONTEND_BASE=/custom-subpath

View File

@ -37,6 +37,10 @@ module.exports = {
'@typescript-eslint/no-unused-vars': ['error', { vars: 'all', args: 'after-used', ignoreRestSiblings: true }],
'vue/multi-word-component-names': 0,
// disabled until we have support for reactivityTransform
// See https://github.com/vuejs/eslint-plugin-vue/issues/1948
// see also setting in `vite.config`
'vue/no-setup-props-destructure': 0,
},
'parser': 'vue-eslint-parser',
'parserOptions': {

3
.github/FUNDING.yml vendored
View File

@ -1,2 +1,3 @@
github: kolaente
custom: https://www.buymeacoffee.com/kolaente
open_collective: vikunja
custom: ["https://vikunja.cloud", "https://www.buymeacoffee.com/kolaente"]

View File

@ -1,6 +1,7 @@
name: Bug Report
description: Found something you weren't expecting? Report it here!
labels: kind/bug
labels:
- kind/bug
body:
- type: markdown
attributes:

37
.gitignore vendored
View File

@ -1,26 +1,31 @@
.DS_Store
node_modules
/dist*
*.zip
.direnv/
# local env files
.env.local
.env.*.local
# Log files
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
stats.html
pnpm-debug.log*
lerna-debug.log*
stats.html
node_modules
.DS_Store
/dist*
coverage
*.zip
.direnv/
# Test files
cypress/screenshots
cypress/videos
# local env files
.env.local
.env.*.local
# Editor directories and files
.idea
.vscode
.idea
*.suo
*.ntvs*
*.njsproj
@ -28,9 +33,9 @@ lerna-debug.log*
*.sw*
!rollup.sw.js
# Test files
cypress/screenshots
cypress/videos
# Local Netlify folder
.netlify
# histoire
.histoire

2
.nvmrc
View File

@ -1 +1 @@
v18
18.14.1

View File

@ -9,6 +9,507 @@ All releases can be found on https://code.vikunja.io/frontend/releases.
The releases aim at the api versions which is why there are missing versions.
## [0.20.3] - 2023-01-24
### Bug Fixes
* *(BaseButton)* Prop type
* *(ci)* Make sure the i18n sync cron job actually runs
* *(ci)* Sign drone config
* *(ci)* Sign drone config
* *(ci)* Tagging logic for release docker images
* *(ci)* Sign drone config
* *(cypress)* Use ts for updateUserSettings
* *(cypress)* Use env for API_URL (#2925)
* *(drone)* Use correct property value (#2920)
* *(drone)* Pnpm cache folder path (#2932)
* *(faker)* Remove mock types (#2921)
* *(i18n)* Incorrect translation string
* *(migration)* Actually pass migration oauth code from query param
* *(quick add magic)* Make sure assignees which don't exist are not removed from task title
* *(task)* Update task description when switching between related tasks
* *(task)* Don't show the list color on the task when only viewing the list (#2975)
* *(useOnline)* Only log if actually faking state (#2924)
* Close button hover for sidebar (#2981) ([9922fcb](9922fcba65c8dc2c46c4f085813c2fbc0d0a7df6))
### Dependencies
* *(deps)* Update dependency vite to v4.0.2 (#2861)
* *(deps)* Update dependency netlify-cli to v12.4.0 (#2862)
* *(deps)* Update typescript-eslint monorepo to v5.47.0 (#2864)
* *(deps)* Update dependency esbuild to v0.16.10 (#2865)
* *(deps)* Update dependency sass to v1.57.1 (#2866)
* *(deps)* Update dependency vue-tsc to v1.0.16 (#2867)
* *(deps)* Update dependency codemirror to v5.65.11
* *(deps)* Update dependency @vueuse/core to v9.8.0
* *(deps)* Update dependency vitest to v0.26.1
* *(deps)* Update dependency @vueuse/core to v9.8.1 (#2870)
* *(deps)* Update dependency @vueuse/core to v9.8.2
* *(deps)* Update sentry-javascript monorepo to v7.28.0
* *(deps)* Update dependency cypress to v12.2.0 (#2873)
* *(deps)* Update dependency vitest to v0.26.2 (#2874)
* *(deps)* Update dependency vite to v4.0.3 (#2876)
* *(deps)* Update pnpm to v7.19.0 (#2875)
* *(deps)* Update dependency rollup to v3.8.0 (#2877)
* *(deps)* Update sentry-javascript monorepo to v7.28.1 (#2878)
* *(deps)* Update dependency @vueuse/core to v9.9.0 (#2881)
* *(deps)* Update dependency rollup to v3.8.1 (#2879)
* *(deps)* Update dependency vite-svg-loader to v4 (#2882)
* *(deps)* Update dependency vue-tsc to v1.0.17 (#2883)
* *(deps)* Update dependency caniuse-lite to v1.0.30001441 (#2884)
* *(deps)* Update dependency netlify-cli to v12.5.0 (#2886)
* *(deps)* Update pnpm to v7.20.0 (#2887)
* *(deps)* Update dependency vue-tsc to v1.0.18 (#2888)
* *(deps)* Update dependency happy-dom to v8.1.1 (#2885)
* *(deps)* Update dependency @types/node to v18.11.18 (#2889)
* *(deps)* Update typescript-eslint monorepo to v5.47.1 (#2890)
* *(deps)* Update dependency esbuild to v0.16.11
* *(deps)* Update dependency esbuild to v0.16.12 (#2893)
* *(deps)* Update dependency rollup to v3.9.0 (#2894)
* *(deps)* Update dependency rollup-plugin-visualizer to v5.9.0 (#2896)
* *(deps)* Update dependency marked to v4.2.5 (#2880)
* *(deps)* Update pnpm to v7.21.0 (#2895)
* *(deps)* Update dependency eslint to v8.31.0
* *(deps)* Update dependency vue-tsc to v1.0.19
* *(deps)* Update dependency @types/codemirror to v5.60.6
* *(deps)* Update dependency rollup to v3.9.1
* *(deps)* Update dependency vitest to v0.26.3
* *(deps)* Update dependency vite-plugin-pwa to v0.14.1 (#2909)
* *(deps)* Update dependency esbuild to v0.16.13 (#2907)
* *(deps)* Update typescript-eslint monorepo to v5.48.0 (#2906)
* *(deps)* Update dependency vue-tsc to v1.0.20
* *(deps)* Update dependency cypress to v12.3.0
* *(deps)* Update dependency @vueuse/core to v9.10.0 (#2911)
* *(deps)* Update pnpm to v7.22.0 (#2910)
* *(deps)* Update dependency @vue/test-utils to v2.2.7 (#2914)
* *(deps)* Update dependency vite to v4.0.4 (#2908)
* *(deps)* Update sentry-javascript monorepo to v7.29.0 (#2915)
* *(deps)* Update dependency esbuild to v0.16.14
* *(deps)* Update dependency axios to v1
* *(deps)* Update dependency vue-tsc to v1.0.21
* *(deps)* Update dependency vue-tsc to v1.0.22
* *(deps)* Update dependency dompurify to v2.4.2
* *(deps)* Update dependency dompurify to v2.4.3 (#2931)
* *(deps)* Update dependency postcss to v8.4.21 (#2933)
* *(deps)* Update dependency esbuild to v0.16.15 (#2934)
* *(deps)* Update dependency vue-tsc to v1.0.24
* *(deps)* Update pnpm to v7.23.0 (#2940)
* *(deps)* Update dependency happy-dom to v8.1.3 (#2939)
* *(deps)* Update dependency esbuild to v0.16.16 (#2937)
* *(deps)* Update dependency caniuse-lite to v1.0.30001442 (#2938)
* *(deps)* Update dependency vitest to v0.27.0 (#2941)
* *(deps)* Update typescript-eslint monorepo to v5.48.1 (#2942)
* *(deps)* Update pnpm to v7.24.2 (#2944)
* *(deps)* Update sentry-javascript monorepo to v7.30.0 (#2945)
* *(deps)* Update pnpm to v7.24.3 (#2946)
* *(deps)* Update dependency vitest to v0.27.1 (#2947)
* *(deps)* Update dependency esbuild to v0.16.17 (#2948)
* *(deps)* Update dependency rollup to v3.10.0 (#2949)
* *(deps)* Update dependency eslint-plugin-vue to v9.9.0 (#2950)
* *(deps)* Update pnpm to v7.25.0 (#2951)
* *(deps)* Update dependency marked to v4.2.12 (#2952)
* *(deps)* Update dependency esbuild to v0.17.0 (#2953)
* *(deps)* Update dependency eslint to v8.32.0 (#2954)
* *(deps)* Update dependency vue-advanced-cropper to v2.8.8 (#2955)
* *(deps)* Update dependency pinia to v2.0.29 (#2956)
* *(deps)* Update dependency @kyvg/vue3-notification to v2.8.0 (#2957)
* *(deps)* Update dependency caniuse-lite to v1.0.30001445 (#2958)
* *(deps)* Update dependency happy-dom to v8.1.4 (#2959)
* *(deps)* Update dependency netlify-cli to v12.7.2 (#2960)
* *(deps)* Update sentry-javascript monorepo to v7.31.0
* *(deps)* Update dependency esbuild to v0.17.1 (#2963)
* *(deps)* Update typescript-eslint monorepo to v5.48.2 (#2962)
* *(deps)* Update dependency esbuild to v0.17.2 (#2965)
* *(deps)* Update dependency vitest to v0.27.2 (#2966)
* *(deps)* Update dependency @vueuse/core to v9.11.0 (#2967)
* *(deps)* Update sentry-javascript monorepo to v7.31.1 (#2973)
* *(deps)* Update dependency axios to v1.2.3 (#2974)
* *(deps)* Update dependency esbuild to v0.17.3 (#2976)
* *(deps)* Update pnpm to v7.25.1 (#2977)
* *(deps)* Update dependency @vueuse/core to v9.11.1
* *(deps)* Update dependency rollup to v3.10.1
* *(deps)* Update dependency vite-plugin-inject-preload to v1.2.0 (#2983)
* *(deps)* Update dependency vitest to v0.27.3 (#2984)
* *(deps)* Update dependency esbuild to v0.17.4 (#2985)
* *(deps)* Update dependency caniuse-lite to v1.0.30001447 (#2986)
* *(deps)* Update dependency happy-dom to v8.1.5 (#2987)
* *(deps)* Update dependency netlify-cli to v12.9.1 (#2988)
* *(deps)* Update sentry-javascript monorepo to v7.32.1 (#2991)
* *(deps)* Update dependency vitest to v0.28.1 (#2990)
* *(deps)* Update dependency @types/codemirror to v5.60.7 (#2993)
* *(deps)* Update typescript-eslint monorepo to v5.49.0 (#2994)
* *(deps)* Update dependency start-server-and-test to v1.15.3
* *(deps)* Update dependency @fortawesome/vue-fontawesome to v3.0.3 (#3003)
### Features
* *(cypress)* Remove getSettled
* *(cypress)* Use cy.session
* *(i18n)* Add Norwegian translation
* *(netlify)* Abstract createSlug helper function (#2923)
* *(postcss)* Mock plugin types (#2930)
* Enable ts for rollup-plugin-visualizer (#2897) ([09d1352](09d13520b060e47be18640865befde44f59332e3))
* Remove date-fns formatISO (#2899) ([1f25386](1f25386f54f376357722e1e589d3a8bd8288a033))
* Add-task usability improvements (#2767) ([4be53b0](4be53b098ca909194aefb464a93b6dae99f4b9ab))
* Remove formatISO from list-view-gantt.spec (#2922) ([a29131e](a29131e7d4be2c83c3e9046549924d1f7692c95e))
* Add histoire ([7be8e89](7be8e892e2480f17cb5de6a69d35287906151c0f))
* Add XButton story ([ccc85b9](ccc85b9a828488dc849758f1e89f3ba3f75967d1))
* Add card story ([35cfb2f](35cfb2f3ca42ac83a9b943fc59818c978ee95fcc))
* Add histoire (#2724) ([a4424e0](a4424e089cdfadb4ab3b753e6fdca818bbe82dc4))
* Add describe project better in package.json (#2971) ([14466bf](14466bf9b7b8a3fc455c0d601205abbaf8cba4f5))
* Add .env.local.example (#2972) ([e1b35ff](e1b35ff023679a7cb8448a06e9edeb8eccc2f727))
* Fix broken font preloading (#2980) ([4890149](489014944a1544846875910d7d5e17e3d71b7e2d))
### Miscellaneous Tasks
* *(config)* Remove unused URL_PREFIX const (#2926)
* *(package)* Use pnpm commands (#2919)
* *(tests)* Fix macos cypress and align with create vite (#2898)
* Improve migrate title (#2968) ([56fd25e](56fd25e888cae8343f64a4c14ac5a3a760bdc7be))
* Add has content="false" to gantt charts (#2969) ([903e9a9](903e9a9904c18ced59962fc03b4c36e5ac8cd688))
* Use es6 imports for deploy-preview-netlify (#2970) ([2a2c27a](2a2c27af9226f441ec80d9d4f560b55cd357126c))
### Other
* *(other)* [skip ci] Updated translations via Crowdin
* *(other)* Redirect to oidc provider if configured correctly (#2805)
## [0.20.2] - 2022-12-18
### Bug Fixes
* *(bug-report.yml)* List (#2845)
* *(quick add magic)* Don't create a new label multiple times if it is used in multiple tasks
* *(task)* Pass a list specified via quick add magic down to all subtasks created via indention
* *(task)* Move task color bubble next to task index and done badge on mobile
* *(tasks)* Remove a task from its bucket when it is in the first kanban bucket
* *(tasks)* Missing space when showing parent tasks and list title
* *(tasks)* Translation for multiple related tasks now works
* Move createdUpdated styles to component (#2685) ([4c458a1](4c458a1ad0761920868e3863982d5175664b3e6e))
* Move heading styles to component (#2686) ([293402b](293402b6fdfc699661c7f287ff1759a9ce5bea17))
* Use scss for datemathHelp (#2690) ([06775cf](06775cf4c72cf81a125b91d49c8d81e8649af661))
* Reactive const assignment (#2692) ([4c4adfd](4c4adfdf4e79eff3e101d9f0bd68bc3e5bb76495))
* Remove vuex leftover from setModuleLoading (#2716) ([3aaacf4](3aaacf4533c761864d3081edb92c9380df43f8b1))
* Icon offset and color ([74ad98d](74ad98de680f8b56e42886cd1e33874bd05772fa))
* Only load buckets if listId set (#2741) ([7db79ff](7db79ff04e4ce87d62cae7f93b67570bbc5c13be))
* Add all json files in src (#2737) ([422e731](422e731fe0d44c2e3be603b549538a05a695b95c))
* Vite.config imports (#2843) ([318e8c8](318e8c83a68bcb2f7953553c036f677a97b01c21))
### Dependencies
* *(deps)* Update dependency rollup to v3.3.0 (#2689)
* *(deps)* Update dependency @types/dompurify to v2.4.0 (#2688)
* *(deps)* Update dependency @vue/test-utils to v2.2.2 (#2696)
* *(deps)* Update dependency caniuse-lite to v1.0.30001431
* *(deps)* Update dependency happy-dom to v7.7.0
* *(deps)* Update dependency netlify-cli to v12.1.1 (#2699)
* *(deps)* Update dependency postcss-preset-env to v7.8.3 (#2701)
* *(deps)* Update dependency vitest to v0.25.2 (#2702)
* *(deps)* Update pnpm to v7.16.0 (#2703)
* *(deps)* Update typescript-eslint monorepo to v5.43.0
* *(deps)* Update dependency ufo to v1
* *(deps)* Update dependency esbuild to v0.15.14 (#2706)
* *(deps)* Update dependency @vue/test-utils to v2.2.3 (#2707)
* *(deps)* Update dependency vite to v3.2.4
* *(deps)* Update dependency typescript to v4.9.3
* *(deps)* Update dependency cypress to v11.1.0
* *(deps)* Update font awesome to v6.2.1 (#2712)
* *(deps)* Update pnpm to v7.16.1 (#2717)
* *(deps)* Update dependency pinia to v2.0.24
* *(deps)* Update sentry-javascript monorepo to v7.20.0 (#2720)
* *(deps)* Update dependency eslint to v8.28.0
* *(deps)* Update dependency esbuild to v0.15.15
* *(deps)* Update dependency netlify-cli to v12.2.4
* *(deps)* Update dependency @vue/test-utils to v2.2.4
* *(deps)* Update pnpm to v7.17.0
* *(deps)* Update dependency marked to v4.2.3
* *(deps)* Update dependency codemirror to v5.65.10
* *(deps)* Update sentry-javascript monorepo to v7.20.1
* *(deps)* Update dependency pinia to v2.0.25
* *(deps)* Update dependency rollup to v3.4.0
* *(deps)* Update typescript-eslint monorepo to v5.44.0
* *(deps)* Update vueuse to v9.6.0 (#2742)
* *(deps)* Update dependency vitest to v0.25.3 (#2743)
* *(deps)* Update dependency cypress to v11.2.0
* *(deps)* Update sentry-javascript monorepo to v7.21.0
* *(deps)* Update dependency @4tw/cypress-drag-drop to v2.2.2
* *(deps)* Update sentry-javascript monorepo to v7.21.1 (#2747)
* *(deps)* Update dependency pinia to v2.0.26
* *(deps)* Update dependency @cypress/vue to v5.0.2
* *(deps)* Update dependency highlight.js to v11.7.0 (#2752)
* *(deps)* Update dependency eslint-plugin-vue to v9.8.0 (#2753)
* *(deps)* Update dependency @infectoone/vue-ganttastic to v2.1.3
* *(deps)* Update dependency rollup to v3.5.0 (#2756)
* *(deps)* Update pnpm to v7.17.1 (#2755)
* *(deps)* Update dependency esbuild to v0.15.16
* *(deps)* Update dependency pinia to v2.0.27 (#2757)
* *(deps)* Update dependency caniuse-lite to v1.0.30001434 (#2759)
* *(deps)* Update dependency netlify-cli to v12.2.7 (#2760)
* *(deps)* Update dependency @kyvg/vue3-notification to v2.7.0 (#2761)
* *(deps)* Update typescript-eslint monorepo to v5.45.0 (#2762)
* *(deps)* Update dependency ufo to v1.0.1 (#2763)
* *(deps)* Update dependency vue-tsc to v1.0.10 (#2764)
* *(deps)* Update sentry-javascript monorepo to v7.22.0 (#2765)
* *(deps)* Update dependency @types/node to v18.11.10 (#2768)
* *(deps)* Update dependency rollup to v3.5.1 (#2769)
* *(deps)* Update sentry-javascript monorepo to v7.23.0
* *(deps)* Update dependency @vue/test-utils to v2.2.5 (#2773)
* *(deps)* Update dependency eslint to v8.29.0 (#2774)
* *(deps)* Update dependency @cypress/vue to v5.0.3 (#2775)
* *(deps)* Update dependency vue-tsc to v1.0.11 (#2777)
* *(deps)* Update dependency @cypress/vite-dev-server to v5 (#2776)
* *(deps)* Update pnpm to v7.18.0 (#2778)
* *(deps)* Update dependency esbuild to v0.15.17 (#2779)
* *(deps)* Update dependency caniuse-lite to v1.0.30001436 (#2780)
* *(deps)* Update dependency @vue/test-utils to v2.2.6 (#2784)
* *(deps)* Update dependency esbuild to v0.15.18 (#2783)
* *(deps)* Update dependency netlify-cli to v12.2.8 (#2782)
* *(deps)* Update dependency happy-dom to v7.7.2 (#2781)
* *(deps)* Update dependency vite to v3.2.5 (#2785)
* *(deps)* Update dependency rollup to v3.6.0 (#2786)
* *(deps)* Update typescript-eslint monorepo to v5.45.1 (#2787)
* *(deps)* Update dependency vitest to v0.25.4 (#2788)
* *(deps)* Update dependency @types/node to v18.11.11 (#2789)
* *(deps)* Update pnpm to v7.18.1 (#2790)
* *(deps)* Update dependency dayjs to v1.11.7 (#2791)
* *(deps)* Update dependency cypress to v12 (#2792)
* *(deps)* Update dependency vitest to v0.25.5 (#2793)
* *(deps)* Update dependency marked to v4.2.4 (#2796)
* *(deps)* Update dependency esbuild to v0.16.1 (#2795)
* *(deps)* Update dependency cypress to v12.0.1 (#2794)
* *(deps)* Update sentry-javascript monorepo to v7.24.0 (#2797)
* *(deps)* Update sentry-javascript monorepo to v7.24.1 (#2798)
* *(deps)* Update sentry-javascript monorepo to v7.24.2 (#2799)
* *(deps)* Update dependency typescript to v4.9.4 (#2800)
* *(deps)* Update dependency rollup to v3.7.0 (#2801)
* *(deps)* Update dependency esbuild to v0.16.2 (#2802)
* *(deps)* Update typescript-eslint monorepo to v5.46.0 (#2803)
* *(deps)* Update dependency vitest to v0.25.6 (#2804)
* *(deps)* Update dependency @cypress/vite-dev-server to v5.0.1 (#2806)
* *(deps)* Update dependency esbuild to v0.16.3 (#2809)
* *(deps)* Update dependency sass to v1.56.2 (#2810)
* *(deps)* Update dependency @types/marked to v4.0.8 (#2812)
* *(deps)* Update dependency vue-tsc to v1.0.12 (#2811)
* *(deps)* Update dependency @types/node to v18.11.12 (#2808)
* *(deps)* Update dependency cypress to v12.0.2 (#2807)
* *(deps)* Update dependency @vitejs/plugin-vue to v4 (#2814)
* *(deps)* Update dependency @vitejs/plugin-legacy to v3 (#2813)
* *(deps)* Update dependency pinia to v2.0.28 (#2815)
* *(deps)* Update dependency @vitejs/plugin-legacy to v3.0.1 (#2818)
* *(deps)* Update dependency @cypress/vite-dev-server to v5.0.2 (#2819)
* *(deps)* Update dependency rollup to v3.7.1 (#2820)
* *(deps)* Update dependency rollup to v3.7.2 (#2822)
* *(deps)* Update dependency esbuild to v0.16.4 (#2821)
* *(deps)* Update dependency vitest to v0.25.7 (#2824)
* *(deps)* Update dependency @types/node to v18.11.13 (#2823)
* *(deps)* Update dependency happy-dom to v8 (#2831)
* *(deps)* Update dependency postcss to v8.4.20 (#2827)
* *(deps)* Update dependency caniuse-lite to v1.0.30001439 (#2828)
* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.8.1 (#2826)
* *(deps)* Update dependency netlify-cli to v12.2.10 (#2829)
* *(deps)* Update dependency vite-plugin-pwa to v0.14.0 (#2833)
* *(deps)* Update dependency rollup to v3.7.3 (#2825)
* *(deps)* Update dependency vue-tsc to v1.0.13 (#2832)
* *(deps)* Update sentry-javascript monorepo to v7.25.0
* *(deps)* Update dependency vite to v4 (#2816)
* *(deps)* Update pnpm to v7.18.2 (#2834)
* *(deps)* Update typescript-eslint monorepo to v5.46.1 (#2837)
* *(deps)* Update dependency @4tw/cypress-drag-drop to v2.2.3 (#2836)
* *(deps)* Update dependency @types/node to v18.11.14 (#2839)
* *(deps)* Update dependency cypress to v12.1.0 (#2838)
* *(deps)* Update dependency rollup to v3.7.4 (#2840)
* *(deps)* Update dependency vitest to v0.25.8
* *(deps)* Update sentry-javascript monorepo to v7.26.0
* *(deps)* Update dependency esbuild to v0.16.5 (#2846)
* *(deps)* Update dependency @types/node to v18.11.15
* *(deps)* Update dependency esbuild to v0.16.6 (#2848)
* *(deps)* Update dependency esbuild to v0.16.7
* *(deps)* Update sentry-javascript monorepo to v7.27.0 (#2850)
* *(deps)* Update dependency @vueuse/core to v9.7.0 (#2851)
* *(deps)* Update dependency wait-on to v7 (#2852)
* *(deps)* Update dependency @types/node to v18.11.16 (#2853)
* *(deps)* Update dependency eslint to v8.30.0
* *(deps)* Update dependency rollup to v3.7.5 (#2857)
* *(deps)* Update dependency esbuild to v0.16.8 (#2854)
* *(deps)* Update dependency sass to v1.57.0 (#2856)
* *(deps)* Update dependency vue-tsc to v1.0.14 (#2860)
* *(deps)* Update dependency esbuild to v0.16.9 (#2859)
* *(deps)* Update dependency @types/node to v18.11.17 (#2858)
### Features
* *(ci)* Use docker buildx for multiarch builds* Filters script setup ([4bad685](4bad685f39388d59fdd8ff79a1766c55f75262c2))
* Move select filters to dedicated components ([bb58dba](bb58dba8e07d683c75637ec88a378e873711eb29))
* Add vite build target esnext (#2674) ([163d936](163d9366d3061c40b5db7f3aad5c2cea01948403))
* Filters script setup (#2671) ([4a550da](4a550da6a69a50126b9d4a555b6713687347c2d3))
* Reduce multiselect selector specificity (#2678) ([9f0f0b3](9f0f0b39f8eea399b7b03003afa5893d0b8016f8))
* Reduce contentAuth selector specifity (#2677) ([12a8f7e](12a8f7ebe9fc556a7b0bc6e2d74e81d424ccfcf8))
* Reduce ListWrapper selector specificity (#2679) ([599c1ba](599c1ba4b5b0861d89755addf016e8f797b49dfe))
* Reduce dropdown-item selector specificity (#2680) ([eb4c2a4](eb4c2a4b9df93ee35404cd7143cc88b3d44f9d59))
* Reduce attachments selector specificity (#2682) ([0f1f131](0f1f131f7a2a38ee57175edfd5ed1c932225af16))
* Reduce ready selector specificity (#2683) ([9d604f7](9d604f7a3bc057bbe27ac19e73ac59736154d9b7))
* Use img for logo so that it's not part of the main bundle (#2684) ([02de481](02de481297502ad4b0b2eb2fa3e06366cce6d630))
* Improve user component (#2687) ([708ef2d](708ef2d72efbdfe6261322937b0a8f76ee19b9e4))
* Reduce TaskDetailView selector specificity ([fba402f](fba402fcd056ee397ce54f97ed4fec98845c7933))
* Move transition in own component ([631a19f](631a19fa923dba2759603e6a8b224cb4d3e1a038))
* Feature/load-views-async (#2672)
* Use transition component everywhere ([8c44ed8](8c44ed83e6530f67cc923a5e6d1a26c14575884a))
* Move transition in component (#2694) ([77ff0aa](77ff0aa256fbf388210af09d88673475386b3553))
* Disable fullscreen for EasyMDE side-by-side mode (#2710) ([98b38af](98b38af43c3acc9822f167ebca295f5aecb4908d))
* Only automatically redirect to provider if the url contains ?redirectToProvider=true and it's the only one ([3891d5b](3891d5b87634c890265477680fafaa04ff06cc3e))
* Improve loadTask logic (#2715) ([8ef3092](8ef309243db4e37d306167455987572006858cad))
* Remove edit-task from list view (#2721) ([45ec162](45ec1623d525ed31a49b6be6d609802c341fad27))
* Move useAutoHeightTextarea to composable (#2723) ([33d4efe](33d4efecc45ef8da5360fb878b7d365d1901b56c))
* More horizontal space on mobile (#2722) ([b42e4cc](b42e4cca59e338278261bc3ec613eefedde6fcce))
* Change list-content style (#91) ([4b47478](4b47478440d0af1bf24c44ea614c0f62f20723f7))
* Grid for list cards ([42e9f30](42e9f306e84120ba51d9b527c7868148730bf892))
* Move avatar class to where it is used (#2725) ([da8df8b](da8df8b667fc57798c1de7d78c1a7f88b0419d38))
* Undent and order navigation css ([66be0e6](66be0e6ac4bcf48124b33267224187b56ac9320a))
* Outdent navigation logo styles ([ff9efe7](ff9efe7889256706ac86bb1face842cd2de6f935))
* Group navigation styles further ([4fc7b9c](4fc7b9c67e2088e82760005cd530ea97cf796a4c))
* Move link color location together ([d9984b2](d9984b28f7d01da0f9d8f0afd5b6f0edf35823c2))
* Use fetch instead of axios for deploy preview (#2719) ([93d95b0](93d95b0821f39719c4a28c144ebb583c2eac754e))
* Remove useRouteQuery (#2751) ([3ee0bc3](3ee0bc345d6cd65769789ec029c50e652d80e1ca))
* Use Intl.DateTimeFormat for gantt weekdays (#2766) ([3b95824](3b95824f5834d7de50210414c56b07889db895c7))
* Add @intlify/unplugin-vue-i18n (#2772) ([b44d11c](b44d11cfc04712b9f9ec9479ba3a77a26c453532))
* Use vite preview for serve:dist:dev (#2842) ([f6c6f52](f6c6f52abe71674fa5f3951cc0ba61798758bd03))
* Use variable fonts with subsetting (#2817) ([b6a89a0](b6a89a0cde3c769e38146b05c33ff4ca4e97bca2))
### Other
* *(other)* [skip ci] Updated translations via Crowdin
## [0.20.1] - 2022-11-11
### Bug Fixes
* *(auth)* Always redirect to external openid provider if only one is enabled
* *(ci)* Cache folder name
* *(gantt)* Don't try to load list NaN when opening a task from the gantt chart
* *(kanban)* Don't allow dragging a bucket if a task input is focused
* *(quick add magic)* Don't parse labels, assignees or lists as date expressions if they are called that
* *(table)* Sort tasks by index instead of id
* *(tasks)* Show any errors happening during task load* SetModuleLoading LoadingState type ([35f4bb1](35f4bb138554d300757420261d70d1a6bf6b9cc0))
* Better kanban updateBucket types ([964aba4](964aba4824418e431955881be284e35f412e873b))
* Disable props destructure error ([d6cb965](d6cb965ea7330f80f1e3c213442a049f63cba57e))
* Missing href ([5d601ca](5d601ca4b34cd7368ff6061659617fff2836cdbc))
* Multiselect modelValue prop type ([480aa88](480aa8813ec28e1228e02ba78dd3ee3037f4928a))
* Potential issue with refs in Avatar ([3c5bfcc](3c5bfcc6f3cece0f3bd6e4f862a187c17a2c4d6c))
* CoverImageAttachmentId ([e01df4d](e01df4d36996aa281ef73ee74f3ac5316a0b8a98))
* Don't show user deletion menu entry in user settings if the server disabled it ([09b76b7](09b76b7bd476b9de653e53de579f1c533d101d4d))
* Resolve issues with vue-easymde (#2629) ([eb59ca5](eb59ca5836ae8454885827bcf28a8476600bd122))
* Remove wrong loadTask params (#2635) ([f7728e5](f7728e538408d15fcbfcd9ce02cd235447dfa6f0))
* Remove duplicate store assignment (#2644) ([38cef79](38cef79f680ddf3612376a90c69198e01283a5a0))
* Flatpickr types (#2647) ([7fbb6e8](7fbb6e8f700157238f8924ce95424d79a34b7543))
* Sort task alphabetically ([612e592](612e592da799ee6a76d32c8ebc567aeadde3ee11))
* Too much recursion error when opening a task from the gantt chart ([d47791b](d47791b95793aabf1524544494621b237479c15d))
* Lint & formatting ([c2dd18e](c2dd18edaa8ac29446845a5028d1a04c1f39fc76))
* Gantt route sync ([7ec2b6c](7ec2b6c0d28a1ae1799b1ed7a781efbf4c4542d7))
* Gantt route sync (#2664) ([9450817](94508173dcfc75d606d490a536f80e10397fb69c))
### Dependencies
* *(deps)* Update dependency vite to v3.2.1
* *(deps)* Update dependency @vue/test-utils to v2.2.1 (#2591)
* *(deps)* Update pnpm to v7.14.1 (#2593)
* *(deps)* Update dependency vue-flatpickr-component to v11
* *(deps)* Update sentry-javascript monorepo to v7.17.3
* *(deps)* Update dependency eslint-plugin-vue to v9.7.0
* *(deps)* Update dependency caniuse-lite to v1.0.30001427
* *(deps)* Update dependency blurhash to v2.0.4
* *(deps)* Update dependency vitest to v0.24.4
* *(deps)* Update dependency @types/node to v18.11.8
* *(deps)* Update dependency vite to v3.2.2
* *(deps)* Update dependency @kyvg/vue3-notification to v2.5.0
* *(deps)* Update dependency @kyvg/vue3-notification to v2.5.1
* *(deps)* Update dependency @kyvg/vue3-notification to v2.6.0 (#2612)
* *(deps)* Update typescript-eslint monorepo to v5.42.0
* *(deps)* Update dependency rollup to v3.2.4 (#2614)
* *(deps)* Update dependency @kyvg/vue3-notification to v2.6.1 (#2615)
* *(deps)* Update dependency rollup to v3.2.5 (#2618)
* *(deps)* Update dependency @cypress/vite-dev-server to v3.4.0 (#2617)
* *(deps)* Update dependency marked to v4.2.0 (#2616)
* *(deps)* Update dependency @types/node to v18.11.9 (#2619)
* *(deps)* Update dependency vitest to v0.24.5 (#2621)
* *(deps)* Update dependency @cypress/vue to v4.2.2
* *(deps)* Update dependency marked to v4.2.1 (#2625)
* *(deps)* Update pnpm to v7.14.2
* *(deps)* Update dependency esbuild to v0.15.13 (#2627)
* *(deps)* Update sentry-javascript monorepo to v7.17.4 (#2628)
* *(deps)* Pin dependency @types/codemirror to 5.60.5
* *(deps)* Update dependency vite-plugin-pwa to v0.13.2 (#2632)
* *(deps)* Update dependency sass to v1.56.0 (#2633)
* *(deps)* Update dependency marked to v4.2.2 (#2636)
* *(deps)* Update dependency eslint to v8.27.0
* *(deps)* Update dependency caniuse-lite to v1.0.30001430 (#2639)
* *(deps)* Update dependency netlify-cli to v12.1.0 (#2640)
* *(deps)* Update dependency vite to v3.2.3
* *(deps)* Update dependency @vitejs/plugin-legacy to v2.3.1 (#2641)
* *(deps)* Update dependency vite-plugin-pwa to v0.13.3 (#2648)
* *(deps)* Update dependency @cypress/vite-dev-server to v4 (#2651)
* *(deps)* Update dependency vitest to v0.25.0 (#2650)
* *(deps)* Update dependency @cypress/vue to v5 (#2652)
* *(deps)* Update typescript-eslint monorepo to v5.42.1 (#2653)
* *(deps)* Update dependency @cypress/vue to v5.0.1 (#2655)
* *(deps)* Update sentry-javascript monorepo to v7.18.0
* *(deps)* Update dependency vitest to v0.25.1 (#2657)
* *(deps)* Update dependency @cypress/vite-dev-server to v4.0.1 (#2658)
* *(deps)* Update vueuse to v9.5.0 (#2660)
* *(deps)* Update dependency sass to v1.56.1 (#2661)
* *(deps)* Update dependency vue to v3.2.42
* *(deps)* Update dependency @fortawesome/vue-fontawesome to v3.0.2
* *(deps)* Update dependency vue to v3.2.43 (#2663)
* *(deps)* Update dependency vue to v3.2.44 (#2666)
* *(deps)* Update pnpm to v7.15.0 (#2667)
* *(deps)* Update dependency cypress to v11 (#2659)
* *(deps)* Update dependency dompurify to v2.4.1 (#2669)
### Features
* *(ci)* Use 'always' for pull
* *(ci)* Add kind everywhere
* *(ci)* Update cypress image
* *(ci)* Improve drone config (#2637)
* *(tests)* Add tests for gantt chart time range
* *(tests)* Add tests for gantt chart task detail open* Task store with composition api (#2610) ([839d331](839d331bf51f9a0e9742b9972dbd6a88fa38f1c3))
* Auth store with composition api (#2602) ([825ba10](825ba100f0c05e1ab98d401157c30aad8658afa6))
* Config store with composition api (#2604) ([15ef86d](15ef86d597ceb8731febf789f1b812a339273e40))
* Base store with composition api (#2601) ([b4f4fd4](b4f4fd45a4c98629de182033e808cf7b22a1fe4a))
* Attachments store with composition api (#2603) ([a50eca8](a50eca852fcb841166baa07a6cc405eeb70c6e9d))
* Namespaces store with composition api (#2607) ([0832184](08321842220798b478ffaef7e9e11c527cb5b3bd))
* Lists store with composition api (#2606) ([5ae8bac](5ae8bace820b05d3ad05f40ab51164ec2c35c068))
* Label store with composition api (#2605) ([1002579](1002579173bd4b89e157c78ac607abd7969d85bc))
* Type improvements ([599e28e](599e28e5e5d56e4ced338ec1c79fea7d4576b85a))
* Type global components and especially icon prop ([a2c1702](a2c1702eef64dd779c86940898bd49fc2c96233f))
* Rework BaseButton ([e8c6afc](e8c6afce7298267f2f77ece0a746218c2eb3f7b7))
* Rework XButton ([4cd0e90](4cd0e90feaab05a2275e92affda23dde7453013f))
* Rework dropdown-item ([02deb0b](02deb0beddbc9221bdcafd0d09cee383571dae55))
* Rework popup ([0b58973](0b58973d872d8d54c9a829a06c8535a7a7115613))
* SingleTaskInList script setup (#2463) ([44e6981](44e6981759261cdada6388384cbad96e5401b8a9))
* Add type info ([0182695](0182695cda1252a65df3f48fdc316e82cd7fadbd))
* Rename http-common to fetcher (#2620) ([096daad](096daad80a9c089e732116ce3b8aa4310a611368))
* Improved types (#2547) ([0ff0d8c](0ff0d8c5b89bd6a8b628ddbe6074f61797b6b9c1))
* MigrateService script setup (#2432) ([8b7b4d6](8b7b4d61a3b9dd01ab58b7e7dd30bf649b62fcf6))
* Sticky action buttons (#2622) ([f4bc2b9](f4bc2b94f0466a357361a69cfb3562e84d1ea439))
* Simpliy editAssignees (#2646) ([d9a8382](d9a83820495f34ddbd776f70cabdc24bbb1c3f32))
* Remove comments from prioritySelect (#2645) ([6a93701](6a93701649d35622d13dda969aae4aedf145d4d0))
* ListKanban script setup (#2643) ([d85abbd](d85abbd77a8197e977fdbfec0ee309736cce05fa))
* Kanban store with composition api ([f0492d4](f0492d49ef5cd99d95085deec066cec85f4688b3))
### Miscellaneous Tasks
* *(ci)* Sign drone config* Remove comment ([1101fcb](1101fcb3fff1fce102a7418b1e2734a71cdf84e2))
* Improve multiselect hover types ([caa29c1](caa29c152d35b28658773b838de0a8909d0e509f))
* Remove unused processModel in services (#2624) ([7f00c7d](7f00c7dabd1e55ec0e9a86ca495f702a38ddb18d))
* Inline simple helper (#2631) ([e49f960](e49f960aea2ead5baca6965649821db6584cbac2))
* Move run.sh in scripts folder (#2649) ([5057b69](5057b69382ca65659b624206b381d8f1500bae82))
### Other
* *(other)* [skip ci] Updated translations via Crowdin
## [0.20.0] - 2022-10-28
### Bug Fixes

View File

@ -1,49 +1,70 @@
# Stage 1: Build application
FROM node:18-alpine AS compile-image
# syntax=docker/dockerfile:1
# ┬─┐┬ ┐o┬ ┬─┐
# │─││ │││ │ │
# ┘─┘┘─┘┘┘─┘┘─┘
FROM --platform=$BUILDPLATFORM node:18-alpine AS builder
WORKDIR /build
ARG USE_RELEASE=false
ARG RELEASE_VERSION=main
ENV PNPM_CACHE_FOLDER .cache/pnpm/
ADD . ./
RUN \
if [ $USE_RELEASE = true ]; then \
wget https://dl.vikunja.io/frontend/vikunja-frontend-$RELEASE_VERSION.zip -O frontend-release.zip && \
unzip frontend-release.zip -d dist/ && \
exit 0; \
fi && \
# https://pnpm.io/installation#using-corepack
corepack enable && \
# we don't use corepack prepare here by intend since
# we have renovate to keep our dependencies up to date
# Build the frontend
pnpm install && \
apk add --no-cache git && \
echo '{"VERSION": "'$(git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/')'"}' > src/version.json && \
pnpm run build
COPY package.json ./
COPY pnpm-lock.yaml ./
# Stage 2: copy
FROM nginx:alpine
RUN if [ "$USE_RELEASE" != true ]; then \
# https://pnpm.io/installation#using-corepack
corepack enable && \
pnpm install; \
fi
COPY nginx.conf /etc/nginx/nginx.conf
COPY run.sh /run.sh
COPY . ./
# copy compiled files from stage 1
COPY --from=compile-image /build/dist /usr/share/nginx/html
RUN if [ "$USE_RELEASE" != true ]; then \
apk add --no-cache --virtual .build-deps git jq && \
git describe --tags --always --abbrev=10 | sed 's/-/+/; s/^v//; s/-g/-/' | \
xargs -0 -I{} jq -Mcnr --arg version {} '{VERSION:$version}' | \
tee src/version.json && \
apk del .build-deps; \
fi
# Unprivileged user
ENV PUID 1000
ENV PGID 1000
RUN if [ "$USE_RELEASE" = true ]; then \
wget "https://dl.vikunja.io/frontend/vikunja-frontend-${RELEASE_VERSION}.zip" -O frontend-release.zip && \
unzip frontend-release.zip -d dist/; \
else \
# we don't use corepack prepare here by intend since
# we have renovate to keep our dependencies up to date
# Build the frontend
pnpm run build; \
fi
# ┌┐┐┌─┐o┌┐┐┐ │
# ││││ ┬││││┌┼┘
# ┘└┘┘─┘┘┘└┘┘ └
FROM nginx:stable-alpine AS runner
WORKDIR /usr/share/nginx/html
LABEL maintainer="maintainers@vikunja.io"
RUN apk add --no-cache \
# for sh file
bash \
# installs usermod and groupmod
shadow
ENV VIKUNJA_HTTP_PORT 80
ENV VIKUNJA_HTTP2_PORT 81
ENV VIKUNJA_LOG_FORMAT main
ENV VIKUNJA_API_URL /api/v1
ENV VIKUNJA_SENTRY_ENABLED false
ENV VIKUNJA_SENTRY_DSN https://85694a2d757547cbbc90cd4b55c5a18d@o1047380.ingest.sentry.io/6024480
CMD "/run.sh"
COPY docker/injector.sh /docker-entrypoint.d/50-injector.sh
COPY docker/ipv6-disable.sh /docker-entrypoint.d/60-ipv6-disable.sh
COPY docker/nginx.conf /etc/nginx/nginx.conf
COPY docker/templates/. /etc/nginx/templates/
# copy compiled files from stage 1
COPY --from=builder /build/dist ./
# manage permissions
RUN chmod 0755 /docker-entrypoint.d/*.sh /etc/nginx/templates && \
chmod -R 0644 /etc/nginx/nginx.conf && \
chown -R nginx:nginx ./ /etc/nginx/conf.d /etc/nginx/templates && \
rm -f /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
# unprivileged user
USER nginx

View File

@ -4,7 +4,7 @@
[![Build Status](https://drone.kolaente.de/api/badges/vikunja/frontend/status.svg)](https://drone.kolaente.de/vikunja/frontend)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](LICENSE)
[![Download](https://img.shields.io/badge/download-v0.20.0-brightgreen.svg)](https://dl.vikunja.io)
[![Download](https://img.shields.io/badge/download-v0.20.3-brightgreen.svg)](https://dl.vikunja.io)
[![Translation](https://badges.crowdin.net/vikunja/localized.svg)](https://crowdin.com/project/vikunja)
This is the web frontend for Vikunja, written in Vue.js.
@ -18,6 +18,14 @@ If you find any security-related issues you don't want to disclose publicly, ple
## Docker
There is a [docker image available](https://hub.docker.com/r/vikunja/api) with support for http/2 and aggressive caching enabled.
In order to build it from sources run the command below. (Docker >= v19.03)
```shell
export DOCKER_BUILDKIT=1
docker build -t vikunja/frontend .
```
Refer to Refer [to multi-platform documentation](https://docs.docker.com/build/building/multi-platform/) in order to build for the different platform.
## Project setup
@ -43,6 +51,3 @@ pnpm run build
pnpm run lint
```
## Sponsors
[![Relm](https://vikunja.io/images/sponsors/relm.png)](https://relm.us)

View File

@ -11,8 +11,10 @@ export default defineConfig({
},
projectId: '181c7x',
e2e: {
baseUrl: 'http://localhost:4173',
specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
specPattern: 'cypress/e2e/**/*.{cy,spec}.{js,jsx,ts,tsx}',
baseUrl: 'http://127.0.0.1:4173',
experimentalRunAllSpecs: true,
// testIsolation: false,
},
component: {
devServer: {

View File

@ -36,7 +36,7 @@ to get a shell inside the cypress container.
In that shell you can then execute the tests with
```shell
pnpm run test:frontend
pnpm run test:e2e
```
### Using The Cypress Dashboard
@ -44,5 +44,5 @@ pnpm run test:frontend
To open the Cypress Dashboard and run tests from there, run
```shell
pnpm run cypress:open
pnpm run test:e2e:dev
```

View File

@ -9,7 +9,7 @@ services:
ports:
- 3456:3456
cypress:
image: cypress/browsers:node16.14.0-chrome99-ff97
image: cypress/browsers:node18.12.0-chrome107
volumes:
- ..:/project
- $HOME/.cache:/home/node/.cache/

View File

@ -1,9 +1,10 @@
import {ListFactory} from '../../factories/list'
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import '../../support/authenticateUser'
import {ListFactory} from '../../factories/list'
import {prepareLists} from './prepareLists'
describe('List History', () => {
createFakeUserAndLogin()
prepareLists()
it('should show a list history on the home page', () => {
@ -45,7 +46,7 @@ describe('List History', () => {
cy.get('body')
.should('contain', 'Last viewed')
cy.get('.list-cards-wrapper-2-rows')
cy.get('[data-cy="listCardGrid"]')
.should('not.contain', lists[0].title)
.should('contain', lists[1].title)
.should('contain', lists[2].title)

View File

@ -1,10 +1,12 @@
import {formatISO, format} from 'date-fns'
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {TaskFactory} from '../../factories/task'
import {prepareLists} from './prepareLists'
import '../../support/authenticateUser'
describe('List View Gantt', () => {
createFakeUserAndLogin()
prepareLists()
it('Hides tasks with no dates', () => {
@ -33,8 +35,8 @@ describe('List View Gantt', () => {
it('Shows tasks with dates', () => {
const now = new Date()
const tasks = TaskFactory.create(1, {
start_date: formatISO(now),
end_date: formatISO(now.setDate(now.getDate() + 4)),
start_date: now.toISOString(),
end_date: new Date(new Date(now).setDate(now.getDate() + 4)).toISOString(),
})
cy.visit('/lists/1/gantt')
@ -60,13 +62,12 @@ describe('List View Gantt', () => {
})
it('Drags a task around', () => {
cy.intercept('**/api/v1/tasks/*')
.as('taskUpdate')
cy.intercept(Cypress.env('API_URL') + '/tasks/*').as('taskUpdate')
const now = new Date()
TaskFactory.create(1, {
start_date: formatISO(now),
end_date: formatISO(now.setDate(now.getDate() + 4)),
start_date: now.toISOString(),
end_date: new Date(new Date(now).setDate(now.getDate() + 4)).toISOString(),
})
cy.visit('/lists/1/gantt')
@ -77,4 +78,49 @@ describe('List View Gantt', () => {
.trigger('mouseup', {force: true})
cy.wait('@taskUpdate')
})
it('Should change the query parameters when selecting a date range', () => {
const now = Date.UTC(2022, 10, 9)
cy.clock(now, ['Date'])
cy.visit('/lists/1/gantt')
cy.get('.list-gantt .gantt-options .field .control input.input.form-control')
.click()
cy.get('.flatpickr-calendar .flatpickr-innerContainer .dayContainer .flatpickr-day')
.first()
.click()
cy.get('.flatpickr-calendar .flatpickr-innerContainer .dayContainer .flatpickr-day')
.last()
.click()
cy.url().should('contain', 'dateFrom=2022-09-25')
cy.url().should('contain', 'dateTo=2022-11-05')
})
it('Should change the date range based on date query parameters', () => {
cy.visit('/lists/1/gantt?dateFrom=2022-09-25&dateTo=2022-11-05')
cy.get('.g-timeunits-container')
.should('contain', 'September 2022')
.should('contain', 'October 2022')
.should('contain', 'November 2022')
cy.get('.list-gantt .gantt-options .field .control input.input.form-control')
.should('have.value', '25 Sep 2022 to 5 Nov 2022')
})
it('Should open a task when double clicked on it', () => {
const now = new Date()
const tasks = TaskFactory.create(1, {
start_date: formatISO(now),
end_date: formatISO(now.setDate(now.getDate() + 4)),
})
cy.visit('/lists/1/gantt')
cy.get('.gantt-container .g-gantt-chart .g-gantt-row-bars-container .g-gantt-bar')
.dblclick()
cy.url()
.should('contain', `/tasks/${tasks[0].id}`)
})
})

View File

@ -1,14 +1,15 @@
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {BucketFactory} from '../../factories/bucket'
import {ListFactory} from '../../factories/list'
import {TaskFactory} from '../../factories/task'
import {prepareLists} from './prepareLists'
import '../../support/authenticateUser'
describe('List View Kanban', () => {
let buckets
createFakeUserAndLogin()
prepareLists()
let buckets
beforeEach(() => {
buckets = BucketFactory.create(2)
})
@ -38,7 +39,7 @@ describe('List View Kanban', () => {
})
cy.visit('/lists/1/kanban')
cy.getSettled('.kanban .bucket')
cy.get('.kanban .bucket')
.contains(buckets[0].title)
.get('.bucket-footer .button')
.contains('Add another task')
@ -70,7 +71,7 @@ describe('List View Kanban', () => {
it('Can set a bucket limit', () => {
cy.visit('/lists/1/kanban')
cy.getSettled('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
.first()
.click()
cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item')
@ -91,7 +92,7 @@ describe('List View Kanban', () => {
it('Can rename a bucket', () => {
cy.visit('/lists/1/kanban')
cy.getSettled('.kanban .bucket .bucket-header .title')
cy.get('.kanban .bucket .bucket-header .title')
.first()
.type('{selectall}New Bucket Title{enter}')
cy.get('.kanban .bucket .bucket-header .title')
@ -102,7 +103,7 @@ describe('List View Kanban', () => {
it('Can delete a bucket', () => {
cy.visit('/lists/1/kanban')
cy.getSettled('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
.first()
.click()
cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item')
@ -129,7 +130,7 @@ describe('List View Kanban', () => {
})
cy.visit('/lists/1/kanban')
cy.getSettled('.kanban .bucket .tasks .task')
cy.get('.kanban .bucket .tasks .task')
.contains(tasks[0].title)
.first()
.drag('.kanban .bucket:nth-child(2) .tasks')
@ -148,7 +149,7 @@ describe('List View Kanban', () => {
})
cy.visit('/lists/1/kanban')
cy.getSettled('.kanban .bucket .tasks .task')
cy.get('.kanban .bucket .tasks .task')
.contains(tasks[0].title)
.should('be.visible')
.click()
@ -170,7 +171,7 @@ describe('List View Kanban', () => {
const task = tasks[0]
cy.visit('/lists/1/kanban')
cy.getSettled('.kanban .bucket .tasks .task')
cy.get('.kanban .bucket .tasks .task')
.contains(task.title)
.should('be.visible')
.click()
@ -204,4 +205,37 @@ describe('List View Kanban', () => {
cy.get('.list-kanban .filter-container .base-button')
.should('exist')
})
it('Should remove a task from the board when deleting it', () => {
const lists = ListFactory.create(1)
const buckets = BucketFactory.create(2, {
list_id: lists[0].id,
})
const tasks = TaskFactory.create(5, {
list_id: 1,
bucket_id: buckets[0].id,
})
const task = tasks[0]
cy.visit('/lists/1/kanban')
cy.get('.kanban .bucket .tasks .task')
.contains(task.title)
.should('be.visible')
.click()
cy.get('.task-view .action-buttons .button')
.should('be.visible')
.contains('Delete')
.click()
cy.get('.modal-mask .modal-container .modal-content .header')
.should('contain', 'Delete this task')
cy.get('.modal-mask .modal-container .modal-content .actions .button')
.contains('Do it!')
.click()
cy.get('.global-notification')
.should('contain', 'Success')
cy.get('.kanban .bucket .tasks')
.should('not.contain', task.title)
})
})

View File

@ -1,21 +1,22 @@
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {UserListFactory} from '../../factories/users_list'
import {TaskFactory} from '../../factories/task'
import {UserFactory} from '../../factories/user'
import {ListFactory} from '../../factories/list'
import {prepareLists} from './prepareLists'
import '../../support/authenticateUser'
describe('List View List', () => {
createFakeUserAndLogin()
prepareLists()
it('Should be an empty list', () => {
cy.visit('/lists/1')
cy.url()
.should('contain', '/lists/1/list')
cy.get('.list-title h1')
cy.get('.list-title')
.should('contain', 'First List')
cy.get('.list-title .dropdown')
cy.get('.list-title-dropdown')
.should('exist')
cy.get('p')
.contains('This list is currently empty.')
@ -61,7 +62,7 @@ describe('List View List', () => {
})
cy.visit(`/lists/${lists[1].id}/`)
cy.get('.list-title .icon')
cy.get('.list-title-wrapper .icon')
.should('not.exist')
cy.get('input.input[placeholder="Add a new task..."')
.should('not.exist')
@ -78,7 +79,7 @@ describe('List View List', () => {
cy.get('.menu-list li .list-menu-link .color-bubble')
.should('have.css', 'background-color', 'rgb(0, 219, 96)')
cy.get('.tasks-container .tasks .color-bubble')
cy.get('.tasks .color-bubble')
.should('not.exist')
})
@ -90,9 +91,9 @@ describe('List View List', () => {
})
cy.visit('/lists/1/list')
cy.get('.tasks-container .tasks')
cy.get('.tasks')
.should('contain', tasks[1].title)
cy.get('.tasks-container .tasks')
cy.get('.tasks')
.should('not.contain', tasks[99].title)
cy.get('.card-content .pagination .pagination-link')
@ -101,9 +102,9 @@ describe('List View List', () => {
cy.url()
.should('contain', '?page=2')
cy.get('.tasks-container .tasks')
cy.get('.tasks')
.should('contain', tasks[99].title)
cy.get('.tasks-container .tasks')
cy.get('.tasks')
.should('not.contain', tasks[1].title)
})
})

View File

@ -1,8 +1,10 @@
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {TaskFactory} from '../../factories/task'
import '../../support/authenticateUser'
describe('List View Table', () => {
createFakeUserAndLogin()
it('Should show a table with tasks', () => {
const tasks = TaskFactory.create(1)
cy.visit('/lists/1/table')

View File

@ -1,9 +1,11 @@
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {TaskFactory} from '../../factories/task'
import {prepareLists} from './prepareLists'
import '../../support/authenticateUser'
describe('Lists', () => {
createFakeUserAndLogin()
let lists
prepareLists((newLists) => (lists = newLists))
@ -28,7 +30,7 @@ describe('Lists', () => {
.should('contain', 'Success')
cy.url()
.should('contain', '/lists/')
cy.get('.list-title h1')
cy.get('.list-title')
.should('contain', 'New List')
})
@ -49,10 +51,10 @@ describe('Lists', () => {
const newListName = 'New list name'
cy.visit('/lists/1')
cy.get('.list-title h1')
cy.get('.list-title')
.should('contain', 'First List')
cy.get('.namespace-container .menu.namespaces-lists .menu-list li:first-child .dropdown .dropdown-trigger')
cy.get('.namespace-container .menu.namespaces-lists .menu-list li:first-child .dropdown .menu-list-dropdown-trigger')
.click()
cy.get('.namespace-container .menu.namespaces-lists .menu-list li:first-child .dropdown .dropdown-content')
.contains('Edit')
@ -65,7 +67,7 @@ describe('Lists', () => {
cy.get('.global-notification')
.should('contain', 'Success')
cy.get('.list-title h1')
cy.get('.list-title')
.should('contain', newListName)
.should('not.contain', lists[0].title)
cy.get('.namespace-container .menu.namespaces-lists .menu-list li:first-child')
@ -80,7 +82,7 @@ describe('Lists', () => {
it('Should remove a list', () => {
cy.visit(`/lists/${lists[0].id}`)
cy.get('.namespace-container .menu.namespaces-lists .menu-list li:first-child .dropdown .dropdown-trigger')
cy.get('.namespace-container .menu.namespaces-lists .menu-list li:first-child .dropdown .menu-list-dropdown-trigger')
.click()
cy.get('.namespace-container .menu.namespaces-lists .menu-list li:first-child .dropdown .dropdown-content')
.contains('Delete')
@ -102,9 +104,9 @@ describe('Lists', () => {
it('Should archive a list', () => {
cy.visit(`/lists/${lists[0].id}`)
cy.get('.list-title .dropdown')
cy.get('.list-title-dropdown')
.click()
cy.get('.list-title .dropdown .dropdown-menu .dropdown-item')
cy.get('.list-title-dropdown .dropdown-menu .dropdown-item')
.contains('Archive')
.click()
cy.get('.modal-content')

View File

@ -1,14 +1,14 @@
import {UserFactory} from '../../factories/user'
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import '../../support/authenticateUser'
import {ListFactory} from '../../factories/list'
import {NamespaceFactory} from '../../factories/namespace'
describe('Namepaces', () => {
createFakeUserAndLogin()
let namespaces
beforeEach(() => {
UserFactory.create(1)
namespaces = NamespaceFactory.create(1)
ListFactory.create(1)
})

View File

@ -1,10 +1,8 @@
import {ListFactory} from '../../factories/list'
import {UserFactory} from '../../factories/user'
import {NamespaceFactory} from '../../factories/namespace'
import {TaskFactory} from '../../factories/task'
export function createLists() {
UserFactory.create(1)
NamespaceFactory.create(1)
const lists = ListFactory.create(1, {
title: 'First List'
@ -13,7 +11,7 @@ export function createLists() {
return lists
}
export function prepareLists(setLists = () => {}) {
export function prepareLists(setLists = (...args: any[]) => {}) {
beforeEach(() => {
const lists = createLists()
setLists(lists)

View File

@ -1,14 +1,16 @@
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {TaskFactory} from '../../factories/task'
import {ListFactory} from '../../factories/list'
import {NamespaceFactory} from '../../factories/namespace'
import {UserListFactory} from '../../factories/users_list'
import '../../support/authenticateUser'
describe('Editor', () => {
createFakeUserAndLogin()
beforeEach(() => {
NamespaceFactory.create(1)
const lists = ListFactory.create(1)
ListFactory.create(1)
TaskFactory.truncate()
UserListFactory.truncate()
})

View File

@ -1,6 +1,12 @@
import '../../support/authenticateUser'
import {createFakeUserAndLogin} from '../../support/authenticateUser'
describe('The Menu', () => {
createFakeUserAndLogin()
beforeEach(() => {
cy.visit('/')
})
it('Is visible by default on desktop', () => {
cy.get('.namespace-container')
.should('have.class', 'is-active')

View File

@ -1,9 +1,12 @@
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {TeamFactory} from '../../factories/team'
import {TeamMemberFactory} from '../../factories/team_member'
import {UserFactory} from '../../factories/user'
import '../../support/authenticateUser'
describe('Team', () => {
createFakeUserAndLogin()
it('Creates a new team', () => {
TeamFactory.truncate()
cy.visit('/teams')

View File

@ -1,16 +1,13 @@
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {ListFactory} from '../../factories/list'
import {seed} from '../../support/seed'
import {TaskFactory} from '../../factories/task'
import {formatISO} from 'date-fns'
import {UserFactory} from '../../factories/user'
import {NamespaceFactory} from '../../factories/namespace'
import {BucketFactory} from '../../factories/bucket'
import {updateUserSettings} from '../../support/updateUserSettings'
import '../../support/authenticateUser'
function seedTasks(numberOfTasks = 100, startDueDate = new Date()) {
UserFactory.create(1)
function seedTasks(numberOfTasks = 50, startDueDate = new Date()) {
NamespaceFactory.create(1)
const list = ListFactory.create()[0]
BucketFactory.create(1, {
@ -20,7 +17,7 @@ function seedTasks(numberOfTasks = 100, startDueDate = new Date()) {
let dueDate = startDueDate
for (let i = 0; i < numberOfTasks; i++) {
const now = new Date()
dueDate = (new Date(dueDate.valueOf())).setDate((new Date(dueDate.valueOf())).getDate() + 2)
dueDate = new Date(new Date(dueDate).setDate(dueDate.getDate() + 2))
tasks.push({
id: i + 1,
list_id: list.id,
@ -28,9 +25,9 @@ function seedTasks(numberOfTasks = 100, startDueDate = new Date()) {
created_by_id: 1,
title: 'Test Task ' + i,
index: i + 1,
due_date: formatISO(dueDate),
created: formatISO(now),
updated: formatISO(now),
due_date: dueDate.toISOString(),
created: now.toISOString(),
updated: now.toISOString(),
})
}
seed(TaskFactory.table, tasks)
@ -38,8 +35,11 @@ function seedTasks(numberOfTasks = 100, startDueDate = new Date()) {
}
describe('Home Page Task Overview', () => {
createFakeUserAndLogin()
it('Should show tasks with a near due date first on the home page overview', () => {
const {tasks} = seedTasks()
const taskCount = 50
const {tasks} = seedTasks(taskCount)
cy.visit('/')
cy.get('[data-cy="showTasks"] .card .task')
@ -49,8 +49,10 @@ describe('Home Page Task Overview', () => {
})
it('Should show overdue tasks first, then show other tasks', () => {
const oldDate = (new Date()).setDate((new Date()).getDate() - 14)
const {tasks} = seedTasks(100, oldDate)
const now = new Date()
const oldDate = new Date(new Date(now).setDate(now.getDate() - 14))
const taskCount = 50
const {tasks} = seedTasks(taskCount, oldDate)
cy.visit('/')
cy.get('[data-cy="showTasks"] .card .task')
@ -68,7 +70,7 @@ describe('Home Page Task Overview', () => {
TaskFactory.create(1, {
id: 999,
title: newTaskTitle,
due_date: formatISO(new Date()),
due_date: new Date().toISOString(),
}, false)
cy.visit(`/lists/${tasks[0].list_id}/list`)
@ -83,7 +85,7 @@ describe('Home Page Task Overview', () => {
it('Should not show a new task without a date at the bottom when there are > 50 tasks', () => {
// We're not using the api here to create the task in order to verify the flow
const {tasks} = seedTasks()
const {tasks} = seedTasks(100)
const newTaskTitle = 'New Task'
cy.visit('/')

View File

@ -1,4 +1,4 @@
import {formatISO} from 'date-fns'
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {TaskFactory} from '../../factories/task'
import {ListFactory} from '../../factories/list'
@ -11,7 +11,6 @@ import {LabelFactory} from '../../factories/labels'
import {LabelTaskFactory} from '../../factories/label_task'
import {BucketFactory} from '../../factories/bucket'
import '../../support/authenticateUser'
import {TaskAttachmentFactory} from '../../factories/task_attachments'
function addLabelToTaskAndVerify(labelTitle: string) {
@ -46,12 +45,14 @@ function uploadAttachmentAndVerify(taskId: number) {
}
describe('Task', () => {
createFakeUserAndLogin()
let namespaces
let lists
let buckets
beforeEach(() => {
UserFactory.create(1)
// UserFactory.create(1)
namespaces = NamespaceFactory.create(1)
lists = ListFactory.create(1)
buckets = BucketFactory.create(1, {
@ -145,7 +146,7 @@ describe('Task', () => {
id: 1,
index: 1,
done: true,
done_at: formatISO(new Date())
done_at: new Date().toISOString()
})
cy.visit(`/tasks/${tasks[0].id}`)
@ -421,10 +422,10 @@ describe('Task', () => {
cy.visit(`/tasks/${tasks[0].id}`)
cy.getSettled('.task-view .details.labels-list .multiselect .input-wrapper')
cy.get('.task-view .details.labels-list .multiselect .input-wrapper')
.should('be.visible')
.should('contain', labels[0].title)
cy.getSettled('.task-view .details.labels-list .multiselect .input-wrapper')
cy.get('.task-view .details.labels-list .multiselect .input-wrapper')
.children()
.first()
.get('[data-cy="taskDetail.removeLabel"]')

11
cypress/e2e/tsconfig.json Normal file
View File

@ -0,0 +1,11 @@
{
"extends": "@vue/tsconfig/tsconfig.web.json",
"include": ["./**/*", "../support/**/*", "../factories/**/*"],
"compilerOptions": {
"baseUrl": ".",
"isolatedModules": false,
"target": "ES2015",
"lib": ["ESNext", "dom"],
"types": ["cypress"]
}
}

View File

@ -11,16 +11,11 @@ const testAndAssertFailed = fixture => {
cy.get('div.message.danger').contains('Wrong username or password.')
}
const username = 'test'
context('Login', () => {
beforeEach(() => {
UserFactory.create(1, {
username: 'test',
})
cy.visit('/', {
onBeforeLoad(win) {
win.localStorage.removeItem('token')
},
})
UserFactory.create(1, {username})
})
it('Should log in with the right credentials', () => {

View File

@ -1,15 +1,17 @@
import '../../support/authenticateUser'
import {createFakeUserAndLogin} from '../../support/authenticateUser'
import {createLists} from '../list/prepareLists'
function logout() {
cy.get('.navbar .user .username')
cy.get('.navbar .username-dropdown-trigger')
.click()
cy.get('.navbar .user .dropdown-menu .dropdown-item')
cy.get('.navbar .dropdown-item')
.contains('Logout')
.click()
}
describe('Log out', () => {
createFakeUserAndLogin()
it('Logs the user out', () => {
cy.visit('/')

View File

@ -1,11 +1,7 @@
import {UserFactory} from '../../factories/user'
import '../../support/authenticateUser'
import {createFakeUserAndLogin} from '../../support/authenticateUser'
describe('User Settings', () => {
beforeEach(() => {
UserFactory.create(1)
})
createFakeUserAndLogin()
it('Changes the user avatar', () => {
cy.intercept(`${Cypress.env('API_URL')}/user/settings/avatar/upload`).as('uploadAvatar')
@ -41,7 +37,7 @@ describe('User Settings', () => {
cy.get('.global-notification')
.should('contain', 'Success')
cy.get('.navbar .user .username')
cy.get('.navbar .username-dropdown-trigger .username')
.should('contain', 'Lorem Ipsum')
})
})

View File

@ -1,6 +1,5 @@
import {faker} from '@faker-js/faker'
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class BucketFactory extends Factory {
static table = 'buckets'
@ -13,8 +12,8 @@ export class BucketFactory extends Factory {
title: faker.lorem.words(3),
list_id: 1,
created_by_id: 1,
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -1,5 +1,4 @@
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class LabelTaskFactory extends Factory {
static table = 'label_tasks'
@ -11,7 +10,7 @@ export class LabelTaskFactory extends Factory {
id: '{increment}',
task_id: 1,
label_id: 1,
created: formatISO(now),
created: now.toISOString(),
}
}
}

View File

@ -1,7 +1,6 @@
import {faker} from '@faker-js/faker'
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class LabelFactory extends Factory {
static table = 'labels'
@ -15,8 +14,8 @@ export class LabelFactory extends Factory {
description: faker.lorem.text(10),
hex_color: (Math.random()*0xFFFFFF<<0).toString(16), // random 6-digit hex number
created_by_id: 1,
created: formatISO(now),
updated: formatISO(now),
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -1,5 +1,4 @@
import {Factory} from '../support/factory'
import {formatISO} from "date-fns"
import {faker} from '@faker-js/faker'
export class LinkShareFactory extends Factory {
@ -15,8 +14,8 @@ export class LinkShareFactory extends Factory {
right: 0,
sharing_type: 0,
shared_by_id: 1,
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -1,5 +1,4 @@
import {Factory} from '../support/factory'
import {formatISO} from "date-fns"
import {faker} from '@faker-js/faker'
export class ListFactory extends Factory {
@ -13,8 +12,8 @@ export class ListFactory extends Factory {
title: faker.lorem.words(3),
owner_id: 1,
namespace_id: 1,
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -1,6 +1,5 @@
import {faker} from '@faker-js/faker'
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class NamespaceFactory extends Factory {
static table = 'namespaces'
@ -12,8 +11,8 @@ export class NamespaceFactory extends Factory {
id: '{increment}',
title: faker.lorem.words(3),
owner_id: 1,
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -1,6 +1,5 @@
import {faker} from '@faker-js/faker'
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class TaskFactory extends Factory {
static table = 'tasks'
@ -16,8 +15,8 @@ export class TaskFactory extends Factory {
created_by_id: 1,
index: '{increment}',
position: '{increment}',
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString()
}
}
}

View File

@ -1,5 +1,4 @@
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class TaskAssigneeFactory extends Factory {
static table = 'task_assignees'
@ -11,7 +10,7 @@ export class TaskAssigneeFactory extends Factory {
id: '{increment}',
task_id: 1,
user_id: 1,
created: formatISO(now),
created: now.toISOString(),
}
}
}

View File

@ -1,5 +1,4 @@
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class TaskAttachmentFactory extends Factory {
static table = 'task_attachments'
@ -11,7 +10,7 @@ export class TaskAttachmentFactory extends Factory {
id: '{increment}',
task_id: 1,
file_id: 1,
created: formatISO(now),
created: now.toISOString(),
}
}
}

View File

@ -1,7 +1,6 @@
import {faker} from '@faker-js/faker'
import {Factory} from '../support/factory'
import {formatISO} from "date-fns"
export class TaskCommentFactory extends Factory {
static table = 'task_comments'
@ -14,8 +13,8 @@ export class TaskCommentFactory extends Factory {
comment: faker.lorem.text(3),
author_id: 1,
task_id: 1,
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString()
}
}
}

View File

@ -1,6 +1,5 @@
import {faker} from '@faker-js/faker'
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class TeamFactory extends Factory {
static table = 'teams'
@ -11,8 +10,8 @@ export class TeamFactory extends Factory {
return {
name: faker.lorem.words(3),
created_by_id: 1,
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -1,5 +1,4 @@
import {Factory} from '../support/factory'
import {formatISO} from 'date-fns'
export class TeamMemberFactory extends Factory {
static table = 'team_members'
@ -9,7 +8,7 @@ export class TeamMemberFactory extends Factory {
team_id: 1,
user_id: 1,
admin: false,
created: formatISO(new Date()),
created: new Date().toISOString(),
}
}
}

View File

@ -1,7 +1,6 @@
import {faker} from '@faker-js/faker'
import {Factory} from '../support/factory'
import {formatISO} from "date-fns"
export class UserFactory extends Factory {
static table = 'users'
@ -15,8 +14,8 @@ export class UserFactory extends Factory {
password: '$2a$14$dcadBoMBL9jQoOcZK8Fju.cy0Ptx2oZECkKLnaa8ekRoTFe1w7To.', // 1234
status: 0,
issuer: 'local',
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -1,5 +1,4 @@
import {Factory} from '../support/factory'
import {formatISO} from "date-fns"
export class UserListFactory extends Factory {
static table = 'users_lists'
@ -12,8 +11,8 @@ export class UserListFactory extends Factory {
list_id: 1,
user_id: 1,
right: 0,
created: formatISO(now),
updated: formatISO(now)
created: now.toISOString(),
updated: now.toISOString(),
}
}
}

View File

@ -4,26 +4,32 @@
import {UserFactory} from '../factories/user'
let token
before(() => {
const users = UserFactory.create(1)
cy.request('POST', `${Cypress.env('API_URL')}/login`, {
username: users[0].username,
password: '1234',
})
.its('body')
.then(r => {
token = r.token
export function login(user, cacheAcrossSpecs = false) {
if (!user) {
throw new Error('Needs user')
}
// Caching session when logging in via page visit
cy.session(`user__${user.username}`, () => {
cy.request('POST', `${Cypress.env('API_URL')}/login`, {
username: user.username,
password: '1234',
}).then(({ body }) => {
window.localStorage.setItem('token', body.token)
})
})
}, {
cacheAcrossSpecs,
})
}
beforeEach(() => {
cy.log(`Using token ${token} to make authenticated requests`)
cy.visit('/', {
onBeforeLoad(win) {
win.localStorage.setItem('token', token)
},
export function createFakeUserAndLogin() {
let user
before(() => {
user = UserFactory.create(1)[0]
})
})
beforeEach(() => {
login(user, true)
})
return user
}

View File

@ -34,38 +34,4 @@
// visit(originalFn: CommandOriginalFn, url: string, options: Partial<VisitOptions>): Chainable<Element>
// }
// }
// }
/**
* Recursively gets an element, returning only after it's determined to be attached to the DOM for good.
*
* Source: https://github.com/cypress-io/cypress/issues/7306#issuecomment-850621378
*/
Cypress.Commands.add('getSettled', (selector, opts = {}) => {
const retries = opts.retries || 3
const delay = opts.delay || 100
const isAttached = (resolve, count = 0) => {
const el = Cypress.$(selector)
// is element attached to the DOM?
count = Cypress.dom.isAttached(el) ? count + 1 : 0
// hit our base case, return the element
if (count >= retries) {
return resolve(el)
}
// retry after a bit of a delay
setTimeout(() => isAttached(resolve, count), delay)
}
// wrap, so we can chain cypress commands off the result
return cy.wrap(null).then(() => {
return new Cypress.Promise((resolve) => {
return isAttached(resolve, 0)
}).then((el) => {
return cy.wrap(el)
})
})
})
// }

View File

@ -1,10 +0,0 @@
{
"extends": "@vue/tsconfig/tsconfig.web.json",
"include": ["./integration/**/*", "./support/**/*"],
"compilerOptions": {
"isolatedModules": false,
"target": "es5",
"lib": ["es5", "dom"],
"types": ["cypress"]
}
}

View File

@ -1,17 +0,0 @@
image: vikunja/frontend:unstable
manifests:
-
image: vikunja/frontend:unstable-linux-amd64
platform:
architecture: amd64
os: linux
-
image: vikunja/frontend:unstable-linux-arm64
platform:
architecture: arm64
os: linux
-
image: vikunja/frontend:unstable-linux-arm
platform:
architecture: arm
os: linux

View File

@ -1,23 +0,0 @@
image: vikunja/frontend:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
{{#if build.tags}}
tags:
{{#each build.tags}}
- {{this}}
{{/each}}
{{/if}}
manifests:
-
image: vikunja/frontend:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-amd64
platform:
architecture: amd64
os: linux
-
image: vikunja/frontend:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64
platform:
architecture: arm64
os: linux
-
image: vikunja/frontend:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm
platform:
architecture: arm
os: linux

15
docker/injector.sh Normal file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env sh
set -e
echo "info: API URL is $VIKUNJA_API_URL"
echo "info: Sentry enabled: $VIKUNJA_SENTRY_ENABLED"
# Escape the variable to prevent sed from complaining
VIKUNJA_API_URL="$(echo "$VIKUNJA_API_URL" | sed -r 's/([:;])/\\\1/g')"
VIKUNJA_SENTRY_DSN="$(echo "$VIKUNJA_SENTRY_DSN" | sed -r 's/([:;])/\\\1/g')"
sed -ri "s:^(\s*window.API_URL\s*=)\s*.+:\1 '${VIKUNJA_API_URL}':g" /usr/share/nginx/html/index.html
sed -ri "s:^(\s*window.SENTRY_ENABLED\s*=)\s*.+:\1 ${VIKUNJA_SENTRY_ENABLED}:g" /usr/share/nginx/html/index.html
sed -ri "s:^(\s*window.SENTRY_DSN\s*=)\s*.+:\1 '${VIKUNJA_SENTRY_DSN}':g" /usr/share/nginx/html/index.html
date -uIseconds | xargs echo 'info: started at'

19
docker/ipv6-disable.sh Normal file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env sh
set -e
if [ ! -f "/proc/net/if_inet6" ]; then
echo "info: IPv6 is not available! Removing IPv6 listen configuration"
find /etc/nginx/conf.d -name '*.conf' -type f | \
while IFS= read -r CONFIG; do
sed -r '/^\s*listen\s*\[::\]:.+$/d' "$CONFIG" > "$CONFIG.temp"
if ! diff -U 5 "$CONFIG" "$CONFIG.temp" > "$CONFIG.diff"; then
echo "info: Removing IPv6 lines from $CONFIG" | \
cat - "$CONFIG.diff"
echo "# IPv6 is disabled because /proc/net/if_inet6 was not found" | \
cat - "$CONFIG.temp" > "$CONFIG"
else
echo "info: Skipping $CONFIG because it does not have IPv6 listen"
fi
rm -f "$CONFIG.temp" "$CONFIG.diff"
done
fi

112
docker/nginx.conf Normal file
View File

@ -0,0 +1,112 @@
# Generated by nginxconfig.io
# https://www.digitalocean.com/community/tools/nginx?domains.0.server.domain=localhost&domains.0.server.documentRoot=%2Fusr%2Fshare%2Fnginx%2Fhtml&domains.0.server.cdnSubdomain=true&domains.0.https.https=false&domains.0.php.php=false&domains.0.routing.index=index.html&domains.0.routing.fallbackHtml=true&domains.0.routing.fallbackPhp=false&global.performance.assetsExpiration=1d&global.performance.mediaExpiration=1d&global.performance.svgExpiration=1d&global.performance.fontsExpiration=1d&global.logging.accessLog=%2Fdev%2Fstdout&global.logging.errorLog=%2Fdev%2Fstderr%20warn&global.logging.logNotFound=true&global.nginx.user=nginx&global.nginx.pid=%2Fvar%2Frun%2Fnginx.pid&global.nginx.clientMaxBodySize=50&global.docker.dockerfile=true&global.tools.modularizedStructure=false&global.tools.symlinkVhost=false
# and then edited manually ;)
pid /tmp/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
multi_accept on;
worker_connections 1024;
}
http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
types_hash_max_size 2048;
types_hash_bucket_size 64;
# rootless
client_body_temp_path /tmp/client_temp;
proxy_temp_path /tmp/proxy_temp_path;
fastcgi_temp_path /tmp/fastcgi_temp;
uwsgi_temp_path /tmp/uwsgi_temp;
scgi_temp_path /tmp/scgi_temp;
# MIME
include mime.types;
default_type application/octet-stream;
types {
application/manifest+json webmanifest;
}
# Logging
log_format json escape=json
'{'
'"bytes_sent": "$bytes_sent",'
'"http_user_agent": "$http_user_agent",'
'"nginx_version": "$nginx_version",'
'"query_string": "$query_string",'
'"realip_remote_addr": "$realip_remote_addr",'
'"remote_addr": "$remote_addr",'
'"remote_user": "$remote_user",'
'"request_length": "$request_length",'
'"request_method": "$request_method",'
'"request_time": "$request_time",'
'"server_addr": "$server_addr",'
'"server_port": "$server_port",'
'"server_protocol": "$server_protocol",'
'"status": "$status",'
'"time_local": "$time_local",'
'"uri": "$uri"'
'}';
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /dev/stdout main;
error_log /dev/stderr warn;
keepalive_timeout 65;
# compression
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
text/plain
text/css
application/json
application/x-javascript
application/javascript
text/xml
application/xml
application/xml+rss
text/javascript
application/vnd.ms-fontobject
application/x-font-ttf
font/opentype
image/svg+xml
image/x-icon
audio/wav;
map_hash_max_size 128;
map_hash_bucket_size 128;
map $sent_http_content_type $expires {
default off;
text/css max;
application/javascript max;
text/javascript max;
application/vnd.ms-fontobject max;
application/x-font-ttf max;
font/opentype max;
font/woff2 max;
image/svg+xml max;
image/x-icon max;
audio/wav max;
~images/ max;
~font/ max;
}
include /etc/nginx/conf.d/*.conf;
}

View File

@ -0,0 +1,71 @@
server {
listen ${VIKUNJA_HTTP_PORT};
listen [::]:${VIKUNJA_HTTP_PORT};
## Needed when behind HAProxy with SSL termination + HTTP/2 support
listen ${VIKUNJA_HTTP2_PORT} default_server http2 proxy_protocol;
listen [::]:${VIKUNJA_HTTP2_PORT} default_server http2 proxy_protocol;
server_name _;
expires $expires;
root /usr/share/nginx/html;
access_log /dev/stdout ${VIKUNJA_LOG_FORMAT};
# security headers
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline'; frame-ancestors 'self';" always;
add_header Permissions-Policy "interest-cohort=()" always;
# . files
location ~ /\.(?!well-known) {
deny all;
}
# assume that everything else is handled by the application router, by injecting the index.html.
location / {
autoindex off;
expires off;
add_header Cache-Control "public, max-age=0, s-maxage=0, must-revalidate" always;
try_files $uri /index.html =404;
}
# favicon.ico
location = /favicon.ico {
log_not_found off;
access_log off;
}
# robots.txt
location = /robots.txt {
log_not_found off;
access_log off;
expires -1; # no-cache
}
location = /ready {
return 200 "";
access_log off;
expires -1; # no-cache
}
# all assets contain hash in filename, cache forever
location ^~ /assets/ {
add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable";
try_files $uri =404;
}
# all workbox scripts are compiled with hash in filename, cache forever3
location ^~ /workbox- {
add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable";
try_files $uri =404;
}
# assets, media
location ~* .(txt|webmanifest|css|js|mjs|map|svg|jpg|jpeg|png|ico|ttf|woff|woff2|wav)$ {
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html { }
}

9
env.config.d.ts vendored Normal file
View File

@ -0,0 +1,9 @@
declare module 'postcss-easings' {
import postcssEasings from 'postcss-easings'
export default postcssEasings
}
declare module 'postcss-easing-gradients' {
import postcssEasingGradients from 'postcss-easing-gradients'
export default postcssEasingGradients
}

11
env.d.ts vendored
View File

@ -1,3 +1,12 @@
/// <reference types="vite/client" />
/// <reference types="vite-svg-loader" />
/// <reference types="cypress" />
/// <reference types="cypress" />
/// <reference types="@histoire/plugin-vue/components" />
interface ImportMetaEnv {
readonly VITE_IS_ONLINE: boolean
}
interface ImportMeta {
readonly env: ImportMetaEnv
}

34
histoire.config.ts Normal file
View File

@ -0,0 +1,34 @@
import {defineConfig, defaultColors} from 'histoire'
import {HstVue} from '@histoire/plugin-vue'
import {HstScreenshot} from '@histoire/plugin-screenshot'
export default defineConfig({
setupFile: './src/histoire.setup.ts',
storyIgnored: [
'**/node_modules/**',
'**/dist/**',
// see https://kolaente.dev/vikunja/frontend/pulls/2724#issuecomment-42012
'**/.direnv/**',
],
plugins: [
HstVue(),
HstScreenshot({
// Options here
}),
],
theme: {
title: 'Vikunja',
colors: {
// https://histoire.dev/guide/config.html#builtin-colors
gray: defaultColors.zinc,
primary: defaultColors.cyan,
},
// logo: {
// square: './img/square.png',
// light: './img/light.png',
// dark: './img/dark.png',
// },
// logoHref: 'https://acme.com',
// favicon: './favicon.ico',
},
})

View File

@ -9,13 +9,7 @@
<link rel="icon" href="/favicon.ico">
<link rel="apple-touch-icon" href="/images/icons/apple-touch-icon-180x180.png"/>
<link rel="preload" crossorigin="anonymous" href="/fonts/open-sans-v15-latin-700italic.woff2" as="font">
<link rel="preload" crossorigin="anonymous" href="/fonts/open-sans-v15-latin-italic.woff2" as="font">
<link rel="preload" crossorigin="anonymous" href="/fonts/quicksand-v7-latin-500.woff2" as="font">
<link rel="preload" crossorigin="anonymous" href="/fonts/quicksand-v7-latin-700.woff2" as="font">
<link rel="preload" crossorigin="anonymous" href="/fonts/open-sans-v15-latin-regular.woff2" as="font">
<link rel="preload" crossorigin="anonymous" href="/fonts/open-sans-v15-latin-700.woff2" as="font">
<link rel="preload" crossorigin="anonymous" href="/fonts/quicksand-v7-latin-regular.woff2" as="font">
<!--__vite-plugin-inject-preload__-->
</head>
<body>
<noscript>

View File

@ -1,115 +0,0 @@
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
types {
application/manifest+json webmanifest;
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
text/plain
text/css
application/json
application/x-javascript
application/javascript
text/xml
application/xml
application/xml+rss
text/javascript
application/vnd.ms-fontobject
application/x-font-ttf
font/opentype
image/svg+xml
image/x-icon
audio/wav;
map_hash_max_size 128;
map_hash_bucket_size 128;
# Expires map
map $sent_http_content_type $expires {
default off;
text/css max;
application/javascript max;
text/javascript max;
application/vnd.ms-fontobject max;
application/x-font-ttf max;
font/opentype max;
font/woff2 max;
image/svg+xml max;
image/x-icon max;
audio/wav max;
~images/ max;
~font/ max;
}
server {
listen 80;
listen 81 default_server http2 proxy_protocol; ## Needed when behind HAProxy with SSL termination + HTTP/2 support
server_name _;
expires $expires;
root /usr/share/nginx/html;
# all assets contain hash in filename, cache forever
location ^~ /assets/ {
add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable";
try_files $uri =404;
}
# all workbox scripts are compiled with hash in filename, cache forever3
location ^~ /workbox- {
add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable";
try_files $uri =404;
}
# assume that everything else is handled by the application router, by injecting the index.html.
location / {
autoindex off;
expires off;
add_header Cache-Control "public, max-age=0, s-maxage=0, must-revalidate" always;
try_files $uri /index.html =404;
}
location ~* .(txt|webmanifest|css|js|mjs|map|svg|jpg|jpeg|png|ico|ttf|woff|woff2|wav)$ {
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,112 +1,146 @@
{
"name": "vikunja-frontend",
"version": "0.10.0",
"description": "The todo app to organize your life.",
"private": true,
"version": "0.10.0",
"license": "AGPL-3.0-or-later",
"repository": {
"type": "git",
"url": "https://kolaente.dev/vikunja/frontend"
},
"bugs": {
"url": "https://kolaente.dev/vikunja/frontend/issues"
},
"homepage": "https://vikunja.io/",
"funding": "https://opencollective.com/vikunja",
"packageManager": "pnpm@7.27.1",
"keywords": [
"todo",
"productivity",
"task management",
"organisation",
"gantt",
"kanban"
],
"scripts": {
"serve": "vite",
"serve:dist-dev": "node scripts/serve-dist.js",
"serve:dist": "vite preview --port 4173",
"preview": "vite preview --port 4173",
"preview:dev": "vite preview --outDir dist-dev --mode development --port 4173",
"build": "vite build && workbox copyLibraries dist/",
"build:modern-only": "BUILD_MODERN_ONLY=true vite build && workbox copyLibraries dist/",
"build:dev": "vite build -m development --outDir dist-dev/",
"build:dev": "vite build --mode development --outDir dist-dev/",
"lint": "eslint --ignore-pattern '*.test.*' ./src --ext .vue,.js,.ts",
"cypress:open": "cypress open",
"test:unit": "vitest --run",
"test:unit-watch": "vitest watch",
"test:frontend": "cypress run",
"test:e2e": "start-server-and-test preview http://127.0.0.1:4173 'cypress run --e2e --browser chrome'",
"test:e2e-record": "start-server-and-test preview http://127.0.0.1:4173 'cypress run --e2e --browser chrome --record'",
"test:e2e-dev-dev": "start-server-and-test preview:dev http://127.0.0.1:4173 'cypress open --e2e'",
"test:e2e-dev": "start-server-and-test preview http://127.0.0.1:4173 'cypress open --e2e'",
"test:unit": "vitest --dir ./src",
"typecheck": "vue-tsc --noEmit && vue-tsc --noEmit -p tsconfig.vitest.json --composite false",
"browserslist:update": "npx browserslist@latest --update-db"
"browserslist:update": "pnpm dlx browserslist@latest --update-db",
"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": {
"@fortawesome/fontawesome-svg-core": "6.2.0",
"@fortawesome/free-regular-svg-icons": "6.2.0",
"@fortawesome/free-solid-svg-icons": "6.2.0",
"@fortawesome/vue-fontawesome": "3.0.1",
"@fortawesome/fontawesome-svg-core": "6.3.0",
"@fortawesome/free-regular-svg-icons": "6.3.0",
"@fortawesome/free-solid-svg-icons": "6.3.0",
"@fortawesome/vue-fontawesome": "3.0.3",
"@github/hotkey": "2.0.1",
"@infectoone/vue-ganttastic": "2.1.2",
"@kyvg/vue3-notification": "2.4.1",
"@sentry/tracing": "7.17.2",
"@sentry/vue": "7.17.2",
"@infectoone/vue-ganttastic": "2.1.4",
"@intlify/unplugin-vue-i18n": "0.8.2",
"@kyvg/vue3-notification": "2.9.0",
"@sentry/tracing": "7.38.0",
"@sentry/vue": "7.38.0",
"@types/is-touch-device": "1.0.0",
"@types/lodash.clonedeep": "4.5.7",
"@types/sortablejs": "1.15.0",
"@vueuse/core": "9.4.0",
"@vueuse/router": "9.4.0",
"axios": "0.27.2",
"blurhash": "2.0.3",
"@vueuse/core": "9.13.0",
"axios": "1.3.3",
"blurhash": "2.0.5",
"bulma-css-variables": "0.9.33",
"camel-case": "4.1.2",
"codemirror": "5.65.9",
"codemirror": "5.65.12",
"date-fns": "2.29.3",
"dayjs": "1.11.6",
"dompurify": "2.4.0",
"dayjs": "1.11.7",
"dompurify": "3.0.0",
"easymde": "2.18.0",
"fast-deep-equal": "3.1.3",
"flatpickr": "4.6.13",
"flexsearch": "0.7.21",
"floating-vue": "2.0.0-beta.20",
"highlight.js": "11.6.0",
"focus-within": "3.0.2",
"highlight.js": "11.7.0",
"is-touch-device": "1.0.1",
"lodash.clonedeep": "4.5.0",
"klona": "2.0.6",
"lodash.debounce": "4.0.8",
"marked": "4.1.1",
"minimist": "1.2.7",
"pinia": "2.0.23",
"marked": "4.2.12",
"pinia": "2.0.32",
"register-service-worker": "1.7.2",
"snake-case": "3.0.4",
"sortablejs": "1.15.0",
"ufo": "0.8.6",
"vue": "3.2.41",
"vue-advanced-cropper": "2.8.6",
"vue-flatpickr-component": "10.0.0",
"ufo": "1.1.0",
"vue": "3.2.47",
"vue-advanced-cropper": "2.8.8",
"vue-flatpickr-component": "11.0.2",
"vue-i18n": "9.2.2",
"vue-router": "4.1.6",
"workbox-precaching": "6.5.4",
"zhyswan-vuedraggable": "4.1.3"
},
"devDependencies": {
"@4tw/cypress-drag-drop": "2.2.1",
"@cypress/vite-dev-server": "3.3.1",
"@cypress/vue": "4.2.1",
"@4tw/cypress-drag-drop": "2.2.3",
"@cypress/vite-dev-server": "5.0.3",
"@cypress/vue": "5.0.4",
"@faker-js/faker": "7.6.0",
"@histoire/plugin-screenshot": "0.15.8",
"@histoire/plugin-vue": "0.15.8",
"@rushstack/eslint-patch": "1.2.0",
"@types/dompurify": "2.3.4",
"@types/codemirror": "5.60.7",
"@types/dompurify": "2.4.0",
"@types/flexsearch": "0.7.3",
"@types/focus-within": "1.0.1",
"@types/lodash.debounce": "4.0.7",
"@types/marked": "4.0.7",
"@types/node": "18.11.7",
"@types/marked": "4.0.8",
"@types/node": "18.14.0",
"@types/postcss-preset-env": "7.7.0",
"@typescript-eslint/eslint-plugin": "5.41.0",
"@typescript-eslint/parser": "5.41.0",
"@vitejs/plugin-legacy": "2.3.0",
"@vitejs/plugin-vue": "3.2.0",
"@typescript-eslint/eslint-plugin": "5.53.0",
"@typescript-eslint/parser": "5.53.0",
"@vitejs/plugin-legacy": "4.0.1",
"@vitejs/plugin-vue": "4.0.0",
"@vue/eslint-config-typescript": "11.0.2",
"@vue/test-utils": "2.2.0",
"@vue/test-utils": "2.3.0",
"@vue/tsconfig": "0.1.3",
"autoprefixer": "10.4.13",
"browserslist": "4.21.4",
"caniuse-lite": "1.0.30001423",
"cypress": "10.11.0",
"esbuild": "0.15.12",
"eslint": "8.26.0",
"eslint-plugin-vue": "9.6.0",
"express": "4.18.2",
"happy-dom": "7.6.6",
"netlify-cli": "12.0.11",
"postcss": "8.4.18",
"postcss-preset-env": "7.8.2",
"rollup": "3.2.3",
"rollup-plugin-visualizer": "5.8.3",
"sass": "1.55.0",
"typescript": "4.8.4",
"vite": "3.2.0",
"vite-plugin-pwa": "0.13.1",
"vite-svg-loader": "3.6.0",
"vitest": "0.24.3",
"vue-tsc": "1.0.9",
"wait-on": "6.0.1",
"browserslist": "4.21.5",
"caniuse-lite": "1.0.30001457",
"csstype": "3.1.1",
"cypress": "12.6.0",
"esbuild": "0.17.10",
"eslint": "8.34.0",
"eslint-plugin-vue": "9.9.0",
"happy-dom": "8.6.0",
"histoire": "0.15.8",
"netlify-cli": "12.13.2",
"postcss": "8.4.21",
"postcss-easing-gradients": "3.0.1",
"postcss-easings": "3.0.1",
"postcss-preset-env": "8.0.1",
"rollup": "3.17.2",
"rollup-plugin-visualizer": "5.9.0",
"sass": "1.58.3",
"start-server-and-test": "1.15.4",
"typescript": "4.9.5",
"vite": "4.1.3",
"vite-plugin-inject-preload": "1.3.0",
"vite-plugin-pwa": "0.14.4",
"vite-svg-loader": "4.0.0",
"vitest": "0.28.5",
"vue-tsc": "1.1.5",
"wait-on": "7.0.1",
"workbox-cli": "6.5.4"
},
"license": "AGPL-3.0-or-later",
"packageManager": "pnpm@7.14.0"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"labels": ["dependencies"],
"extends": [
"config:base"
"config:js-app"
],
"packageRules": [
{
@ -20,6 +20,13 @@
"@vueuse/"
]
},
{
"groupName": "histoire",
"matchPackagePrefixes": [
"@histoire/",
"histoire"
]
},
{
"matchDepTypes": ["devDependencies"],
"automerge": true,

28
run.sh
View File

@ -1,28 +0,0 @@
#!/bin/bash
# This shell script sets the api url based on an environment variable and starts nginx in foreground.
VIKUNJA_API_URL="${VIKUNJA_API_URL:-"/api/v1"}"
VIKUNJA_SENTRY_ENABLED="${VIKUNJA_SENTRY_ENABLED:-"false"}"
VIKUNJA_SENTRY_DSN="${VIKUNJA_SENTRY_DSN:-"https://85694a2d757547cbbc90cd4b55c5a18d@o1047380.ingest.sentry.io/6024480"}"
VIKUNJA_HTTP_PORT="${VIKUNJA_HTTP_PORT:-80}"
VIKUNJA_HTTPS_PORT="${VIKUNJA_HTTPS_PORT:-443}"
echo "Using $VIKUNJA_API_URL as default api url"
# Escape the variable to prevent sed from complaining
VIKUNJA_API_URL=$(echo $VIKUNJA_API_URL |sed 's/\//\\\//g')
sed -i "s/http\:\/\/localhost\:3456//g" /usr/share/nginx/html/index.html # replacing in two steps to make sure api urls from releases are properly replaced as well
sed -i "s/'\/api\/v1/'$VIKUNJA_API_URL/g" /usr/share/nginx/html/index.html
sed -i "s/\.SENTRY_ENABLED = false/\.SENTRY_ENABLED = $VIKUNJA_SENTRY_ENABLED/g" /usr/share/nginx/html/index.html
sed -i "s|\.SENTRY_DSN = '.*'|\.SENTRY_DSN = '$VIKUNJA_SENTRY_DSN'|g" /usr/share/nginx/html/index.html
sed -i "s/listen 80/listen $VIKUNJA_HTTP_PORT/g" /etc/nginx/nginx.conf
sed -i "s/listen 443/listen $VIKUNJA_HTTPS_PORT/g" /etc/nginx/nginx.conf
# Set the uid and gid of the nginx run user
usermod --non-unique --uid ${PUID} nginx
groupmod --non-unique --gid ${PGID} nginx
nginx -g "daemon off;"

View File

@ -1 +0,0 @@
bb46342a0a08105b340ba7976cff9d80ef89901120ec0639669caa70bb7d2dbc43e78b1f635a7654ab2456e8358c98a4 ./scripts/deploy-preview-netlify.js

View File

@ -1,15 +1,18 @@
const {exec} = require('child_process')
const axios = require('axios')
import { exec } from 'node:child_process'
function createSlug(string) {
return String(string)
.trim()
.normalize('NFKD')
.toLowerCase()
.replace(/[.\s/]/g, '-')
.replace(/[^A-Za-z\d-]/g, '')
}
const BOT_USER_ID = 513
const giteaToken = process.env.GITEA_TOKEN
const siteId = process.env.NETLIFY_SITE_ID
const branchSlug = String(process.env.DRONE_SOURCE_BRANCH)
.trim()
.normalize('NFKD')
.toLowerCase()
.replace(/[.\s/]/g, '-')
.replace(/[^A-Za-z\d-]/g, '')
const branchSlug = createSlug(process.env.DRONE_SOURCE_BRANCH)
const prNumber = process.env.DRONE_PULL_REQUEST
const prIssueCommentsUrl = `https://kolaente.dev/api/v1/repos/vikunja/frontend/issues/${prNumber}/comments`
@ -35,7 +38,7 @@ const promiseExec = cmd => {
stdout = await promiseExec(`./node_modules/.bin/netlify deploy --alias ${alias}`)
console.log(stdout)
const {data} = await axios.get(prIssueCommentsUrl)
const data = await fetch(prIssueCommentsUrl).then(response => response.json())
const hasComment = data.some(c => c.user.id === BOT_USER_ID)
if (hasComment) {
@ -43,8 +46,7 @@ const promiseExec = cmd => {
return
}
await axios.post(prIssueCommentsUrl, {
body: `
const message = `
Hi ${process.env.DRONE_COMMIT_AUTHOR}!
Thank you for creating a PR!
@ -57,14 +59,25 @@ You will need to manually connect this to an api running somehwere. The easiest
Have a nice day!
> Beep boop, I'm a bot.
`,
}, {
headers: {
'Content-Type': 'application/json',
'accept': 'application/json',
'Authorization': `token ${giteaToken}`,
},
})
`
console.log(`Preview comment sent successfully to PR #${prNumber}!`)
try {
const response = await fetch(prIssueCommentsUrl, {
method: 'POST',
body: JSON.stringify({
body: message,
}),
headers: {
'Content-Type': 'application/json',
'accept': 'application/json',
'Authorization': `token ${giteaToken}`,
},
})
if (!response.ok) {
throw new Error(`HTTP error, status = ${response.status}`)
}
console.log(`Preview comment sent successfully to PR #${prNumber}!`)
} catch (e) {
console.log(`Could not send preview comment to PR #${prNumber}! ${e.message}`)
}
})()

View File

@ -0,0 +1 @@
57af69409e66bc87f4f2fc5822dd8d3c2eb47c601f81af1ac4a56f3e2d80837b1a2de06f4ff57695ec379b7c15b881e3 ./scripts/deploy-preview-netlify.mjs

56
scripts/fonts-download.sh Executable file
View File

@ -0,0 +1,56 @@
#!/bin/sh
set -e
#
# This script downloads our original font files from their source repos
# and puts them in our originalMedia folder.
#
err_report() {
echo "Error on line $(caller)" >&2
}
trap err_report ERR
ORIGINAL_FONTS_DIR="./originalMedia/fonts"
# update these if there is a new version
FONT_URLS=(
"https://github.com/googlefonts/opensans/blob/27d060e1aad6886daeda67629ee28189f795f534/fonts/variable/OpenSans%5Bwdth%2Cwght%5D.ttf?raw=true"
"https://github.com/googlefonts/opensans/blob/27d060e1aad6886daeda67629ee28189f795f534/fonts/variable/OpenSans-Italic%5Bwdth%2Cwght%5D.ttf?raw=true"
"https://github.com/andrew-paglinawan/QuicksandFamily/blob/db6de44878582966f45a0debaef10d57108d93a7/fonts/Quicksand%5Bwght%5D.ttf?raw=true"
)
echo ""
echo "###################################################"
echo "# Download font files"
echo "###################################################"
echo ""
mkdir -p $ORIGINAL_FONTS_DIR
for URL in ${FONT_URLS[@]}; do
wget -L $URL \
--directory-prefix=$ORIGINAL_FONTS_DIR \
--quiet \
--timestamping \
--show-progress
done
echo ""
echo "###################################################"
echo "# Remove '?raw=true' filename suffix"
echo "###################################################"
echo ""
# Iterate over all files in directory with filetype ending in "?raw=true"
for file in $ORIGINAL_FONTS_DIR/*?raw=true; do
# Remove "?raw=true" from file name and store in variable
new_name=$(echo $file | sed 's/?raw=true//')
# Overwrite existing file with new name
mv -v $file $new_name
done
echo "Renaming files complete"

161
scripts/fonts-subset.sh Executable file
View File

@ -0,0 +1,161 @@
#!/bin/sh
set -e
#
# This script subsets our variable fonts,
# converts them to woff2 files and puts them in the
# fonts folder.
#
# We do have to update the font paths in the @font-face
# definitions manually since we use a checksum to make
#
# We use fonttools to create a partial instance of the
# variable font where we keep only our needed features.
# See more at:
# https://fonttools.readthedocs.io/en/latest/varLib/instancer.html
#
# fonttools requires python > 3.7. For up-to-date
# instructions see https://github.com/fonttools/fonttools#installation
#
# Lot's of info was gathered from:
# https://markoskon.com/creating-font-subsets/
# https://barrd.dev/article/create-a-variable-font-subset-for-smaller-file-size/
#
ORIGINAL_FONTS="./originalMedia/fonts"
TEMP_FOLDER="./.subset-fonts-temp"
FONT_FOLDER="./src/assets/fonts"
err_report() {
echo "Error on line $(caller)" >&2
}
trap err_report ERR
mkdir -p $TEMP_FOLDER
# the latin subset that google uses on GoogleFonts
# this is the same as the latin subset range that google uses on GoogleFonts
# see for examle the unicode-range definition here:
# https://fonts.googleapis.com/css2?family=Open+Sans
UNICODE_LATIN_SUBSET="U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,\
U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,\
U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD"
get_filename_without_type() {
filename=$1
dirname=$(dirname $filename)
# Extract the file type using parameter expansion
filetype=${filename##*.}
basename=$(basename $filename .$filetype)
echo $basename
}
# This function takes a font file and creates a subset of it using a specified set of unicode characters.
instance_and_subset () {
# Define default arguments for the subsetter.
DEFAULT_SUBSETTER_ARGS="--layout-features=* --unicodes=${UNICODE_LATIN_SUBSET}"
# Assign function arguments to variables with more descriptive names.
INPUT_FONT_FILE=$1
INSTANCER_ARGS=$2
OUTPUT_FONT_BASENAME=$3
OUTPUT_FOLDER=$FONT_FOLDER
# If the output font basename is not provided, use the input font file's basename as the output font basename.
if [ -z "$OUTPUT_FONT_BASENAME" ]; then
INPUT_FONT_BASENAME=$(get_filename_without_type $INPUT_FONT_FILE)
OUTPUT_FONT_BASENAME=$INPUT_FONT_BASENAME
fi
# Use the default subsetter arguments if no custom arguments are provided.
SUBSETTER_ARGS="${4:-$DEFAULT_SUBSETTER_ARGS}"
CHECKSUM=$(
# Concatenate the contents of the input font file, the instancer arguments, and the subsetter arguments
printf "%s%s" "$(cat $INPUT_FONT_FILE)" "$INSTANCER_ARGS" "$SUBSETTER_ARGS" |
# Calculate the Blake2b checksum of the concatenated string
b2sum |
# Extract the checksum from the output of b2sum (it's the first field)
awk '{print $1}'
)
# Limit the checksum to 8 characters.
CHECKSUM=$(echo "${CHECKSUM:0:8}")
# Construct the output font's filename
OUTPUT_FONT_BASENAME="${OUTPUT_FONT_BASENAME}_${CHECKSUM}"
OUTPUT_FONT_FILE="${OUTPUT_FOLDER}/${OUTPUT_FONT_BASENAME}.woff2"
# Check if the output font file already exists
if test -f $OUTPUT_FONT_FILE; then
echo "${OUTPUT_FONT_FILE} exists"
return 0
fi
FONT_INSTANCE="${TEMP_FOLDER}/${OUTPUT_FONT_BASENAME}.ttf"
if [ -n "$INSTANCER_ARGS" ]; then
# If the INSTANCER_ARGS variable is set, use fonttools to create a font instance
fonttools varLib.instancer --output $FONT_INSTANCE $INPUT_FONT_FILE $INSTANCER_ARGS
else
# Otherwise, just copy the input font file to the font instance file
cp $INPUT_FONT_FILE $FONT_INSTANCE
fi
# Use pyftsubset to create a subset of the font instance and save it to the output font file
pyftsubset $FONT_INSTANCE --output-file=$OUTPUT_FONT_FILE --flavor=woff2 $SUBSETTER_ARGS
echo "${OUTPUT_FONT_BASENAME} subsetted."
}
echo ""
echo "###################################################"
echo "# Install required libs"
echo "###################################################"
echo ""
pip install fonttools brotli
echo ""
echo "###################################################"
echo "# Create a partial instance of the variable font"
echo "# where we keep only our needed features and then"
echo "# subset fonts with latin unicode range and export"
echo "# as woff2 file"
echo "###################################################"
echo ""
mkdir -p $TEMP_FOLDER
echo "\nOpen Sans"
# we drop the wdth axis for all
instance_and_subset "${ORIGINAL_FONTS}/OpenSans[wdth,wght].ttf" "wdth=drop wght=400:700" "OpenSans[wght]"
# we restrict the wght range
instance_and_subset "${ORIGINAL_FONTS}/OpenSans[wdth,wght].ttf" "wdth=drop wght=400" "OpenSans-Regular"
instance_and_subset "${ORIGINAL_FONTS}/OpenSans[wdth,wght].ttf" "wdth=drop wght=700" "OpenSans-Bold"
echo "\nOpen Sans Italic"
# we drop the wdth axis for all
instance_and_subset "${ORIGINAL_FONTS}/OpenSans-Italic[wdth,wght].ttf" "wdth=drop wght=400:700" "OpenSans-Italic[wght]"
# we restrict the wght range
instance_and_subset "${ORIGINAL_FONTS}/OpenSans-Italic[wdth,wght].ttf" "wdth=drop wght=400" "OpenSans-RegularItalic"
instance_and_subset "${ORIGINAL_FONTS}/OpenSans-Italic[wdth,wght].ttf" "wdth=drop wght=700" "OpenSans-BoldItalic"
echo "\nQuicksand"
instance_and_subset "${ORIGINAL_FONTS}/Quicksand[wght].ttf" "wght=400:700"
# we restrict the wght range
instance_and_subset "${ORIGINAL_FONTS}/Quicksand[wght].ttf" "wght=400" "Quicksand-Regular"
instance_and_subset "${ORIGINAL_FONTS}/Quicksand[wght].ttf" "wght=600" "Quicksand-SemiBold"
instance_and_subset "${ORIGINAL_FONTS}/Quicksand[wght].ttf" "wght=700" "Quicksand-Bold"
echo "\nSubsetting files complete"
# remove temp folder
rm -r $TEMP_FOLDER

View File

@ -1,16 +0,0 @@
const path = require('path')
const express = require('express')
const app = express()
const p = path.join(__dirname, '..', 'dist-dev')
const port = 4173
app.use(express.static(p))
// Handle urls set by the frontend
app.get('*', (request, response, next) => {
response.sendFile(`${p}/index.html`)
})
app.listen(port, '127.0.0.1', () => {
console.log(`Serving files from ${p}`)
console.log(`Server started on port ${port}`)
})

View File

@ -8,39 +8,46 @@
<no-auth-wrapper v-else>
<router-view/>
</no-auth-wrapper>
<Notification/>
<keyboard-shortcuts v-if="keyboardShortcutsActive"/>
<Teleport to="body">
<UpdateNotification/>
<Notification/>
</Teleport>
</ready>
</template>
<script lang="ts" setup>
import {computed, watch, type Ref} from 'vue'
import {useRouter} from 'vue-router'
import {useRouteQuery} from '@vueuse/router'
import {computed, watch} from 'vue'
import {useRoute, useRouter} from 'vue-router'
import {useI18n} from 'vue-i18n'
import isTouchDevice from 'is-touch-device'
import {success} from '@/message'
import Notification from '@/components/misc/notification.vue'
import KeyboardShortcuts from './components/misc/keyboard-shortcuts/index.vue'
import UpdateNotification from '@/components/home/UpdateNotification.vue'
import KeyboardShortcuts from '@/components/misc/keyboard-shortcuts/index.vue'
import TheNavigation from '@/components/home/TheNavigation.vue'
import ContentAuth from './components/home/contentAuth.vue'
import ContentLinkShare from './components/home/contentLinkShare.vue'
import ContentAuth from '@/components/home/contentAuth.vue'
import ContentLinkShare from '@/components/home/contentLinkShare.vue'
import NoAuthWrapper from '@/components/misc/no-auth-wrapper.vue'
import Ready from '@/components/misc/ready.vue'
import {setLanguage} from './i18n'
import {setLanguage} from '@/i18n'
import AccountDeleteService from '@/services/accountDelete'
import {success} from '@/message'
import {useAuthStore} from '@/stores/auth'
import {useBaseStore} from '@/stores/base'
import {useColorScheme} from '@/composables/useColorScheme'
import {useBodyClass} from '@/composables/useBodyClass'
import {useAuthStore} from './stores/auth'
const baseStore = useBaseStore()
const authStore = useAuthStore()
const router = useRouter()
const route = useRoute()
useBodyClass('is-touch', isTouchDevice())
const keyboardShortcutsActive = computed(() => baseStore.keyboardShortcutsActive)
@ -51,9 +58,9 @@ const authLinkShare = computed(() => authStore.authLinkShare)
const {t} = useI18n({useScope: 'global'})
// setup account deletion verification
const accountDeletionConfirm = useRouteQuery('accountDeletionConfirm') as Ref<null | string>
const accountDeletionConfirm = computed(() => route.query?.accountDeletionConfirm as (string | undefined))
watch(accountDeletionConfirm, async (accountDeletionConfirm) => {
if (accountDeletionConfirm === null) {
if (accountDeletionConfirm === undefined) {
return
}
@ -64,9 +71,9 @@ watch(accountDeletionConfirm, async (accountDeletionConfirm) => {
}, { immediate: true })
// setup password reset redirect
const userPasswordReset = useRouteQuery('userPasswordReset') as Ref<null | string>
const userPasswordReset = computed(() => route.query?.userPasswordReset as (string | undefined))
watch(userPasswordReset, (userPasswordReset) => {
if (userPasswordReset === null) {
if (userPasswordReset === undefined) {
return
}
@ -75,9 +82,9 @@ watch(userPasswordReset, (userPasswordReset) => {
}, { immediate: true })
// setup email verification redirect
const userEmailConfirm = useRouteQuery('userEmailConfirm') as Ref<null | string>
const userEmailConfirm = computed(() => route.query?.userEmailConfirm as (string | undefined))
watch(userEmailConfirm, (userEmailConfirm) => {
if (userEmailConfirm === null) {
if (userEmailConfirm === undefined) {
return
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,58 @@
<script lang="ts" setup>
import {logEvent} from 'histoire/client'
import {reactive} from 'vue'
import {createRouter, createMemoryHistory} from 'vue-router'
import BaseButton from './BaseButton.vue'
function setupApp({ app }) {
// Router mock
app.use(createRouter({
history: createMemoryHistory(),
routes: [
{ path: '/', name: 'home', component: { render: () => null } },
],
}))
}
const state = reactive({
disabled: false,
})
</script>
<template>
<Story :setup-app="setupApp" :layout="{ type: 'grid', width: '200px' }">
<Variant title="custom">
<template #controls>
<HstCheckbox v-model="state.disabled" title="Disabled" />
</template>
<BaseButton :disabled="state.disabled">
Hello!
</BaseButton>
</Variant>
<Variant title="disabled">
<BaseButton disabled>
Hello!
</BaseButton>
</Variant>
<Variant title="router link">
<BaseButton :to="'home'">
Hello!
</BaseButton>
</Variant>
<Variant title="external link">
<BaseButton href="https://vikunja.io">
Hello!
</BaseButton>
</Variant>
<Variant title="button">
<BaseButton @click="logEvent('Click', $event)">
Hello!
</BaseButton>
</Variant>
</Story>
</template>

View File

@ -1,18 +1,53 @@
<!-- a disabled link of any kind is not a link -->
<!-- we have a router link -->
<!-- just a normal link -->
<!-- a button it shall be -->
<!-- note that we only pass the click listener here -->
<template>
<component
:is="componentNodeName"
<div
v-if="disabled === true && (to !== undefined || href !== undefined)"
class="base-button"
:class="{ 'base-button--type-button': isButton }"
v-bind="elementBindings"
:disabled="disabled || undefined"
:aria-disabled="disabled || undefined"
ref="button"
>
<slot/>
</component>
</div>
<router-link
v-else-if="to !== undefined"
:to="to"
class="base-button"
ref="button"
>
<slot/>
</router-link>
<a v-else-if="href !== undefined"
class="base-button"
:href="href"
rel="noreferrer noopener nofollow"
target="_blank"
ref="button"
>
<slot/>
</a>
<button
v-else
:type="type"
class="base-button base-button--type-button"
:disabled="disabled || undefined"
ref="button"
@click="(event: MouseEvent) => emit('click', event)"
>
<slot/>
</button>
</template>
<script lang="ts">
export default { inheritAttrs: false }
const BASE_BUTTON_TYPES_MAP = {
BUTTON: 'button',
SUBMIT: 'submit',
} as const
export type BaseButtonTypes = typeof BASE_BUTTON_TYPES_MAP[keyof typeof BASE_BUTTON_TYPES_MAP] | undefined
</script>
<script lang="ts" setup>
@ -20,77 +55,36 @@ export default { inheritAttrs: false }
// by doing so we make it easy abstract the functionality from style and enable easier and semantic
// correct button and link usage. Also see: https://css-tricks.com/a-complete-guide-to-links-and-buttons/#accessibility-considerations
// the component tries to heuristically determine what it should be checking the props (see the
// componentNodeName and elementBindings ref for this).
// the component tries to heuristically determine what it should be checking the props
// NOTE: Do NOT use buttons with @click to push routes. => Use router-links instead!
import { ref, watchEffect, computed, useAttrs, type PropType } from 'vue'
import {unrefElement} from '@vueuse/core'
import {ref, type HTMLAttributes} from 'vue'
import type {RouteLocationRaw} from 'vue-router'
const BASE_BUTTON_TYPES_MAP = Object.freeze({
button: 'button',
submit: 'submit',
})
type BaseButtonTypes = keyof typeof BASE_BUTTON_TYPES_MAP
const props = defineProps({
type: {
type: String as PropType<BaseButtonTypes>,
default: 'button',
},
disabled: {
type: Boolean,
default: false,
},
})
const componentNodeName = ref<Node['nodeName']>('button')
interface ElementBindings {
type?: string;
rel?: string;
target?: string;
export interface BaseButtonProps extends HTMLAttributes {
type?: BaseButtonTypes
disabled?: boolean
to?: RouteLocationRaw
href?: string
}
const elementBindings = ref({})
export interface BaseButtonEmits {
(e: 'click', payload: MouseEvent): void
}
const attrs = useAttrs()
watchEffect(() => {
// by default this component is a button element with the attribute of the type "button" (default prop value)
let nodeName = 'button'
let bindings: ElementBindings = {type: props.type}
const {
type = BASE_BUTTON_TYPES_MAP.BUTTON,
disabled = false,
} = defineProps<BaseButtonProps>()
// if we find a "to" prop we set it as router-link
if ('to' in attrs) {
nodeName = 'router-link'
bindings = {}
}
const emit = defineEmits<BaseButtonEmits>()
// if there is a href we assume the user wants an external link via a link element
// we also set a predefined value for the attribute rel, but make it possible to overwrite this by the user.
if ('href' in attrs) {
nodeName = 'a'
bindings = {
rel: 'noreferrer noopener nofollow',
target: '_blank',
}
}
componentNodeName.value = nodeName
elementBindings.value = {
...bindings,
...attrs,
}
})
const isButton = computed(() => componentNodeName.value === 'button')
const button = ref()
const button = ref<HTMLElement | null>(null)
function focus() {
button.value.focus()
unrefElement(button)?.focus()
}
defineExpose({

View File

@ -0,0 +1,179 @@
<template>
<transition
name="expandable-slide"
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@enter-cancelled="enterCancelled"
@before-leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave"
@leave-cancelled="leaveCancelled"
>
<div
v-if="initialHeight"
class="expandable-initial-height"
:style="{ maxHeight: `${initialHeight}px` }"
:class="{ 'expandable-initial-height--expanded': open }"
>
<slot />
</div>
<div v-else-if="open" class="expandable">
<slot />
</div>
</transition>
</template>
<script setup lang="ts">
// the logic of this component is loosly based on this article
// https://gomakethings.com/how-to-add-transition-animations-to-vanilla-javascript-show-and-hide-methods/#putting-it-all-together
import {computed, ref} from 'vue'
import {getInheritedBackgroundColor} from '@/helpers/getInheritedBackgroundColor'
const props = defineProps({
/** Wheather the Expandable is open or not */
open: {
type: Boolean,
default: false,
},
/** If there is too much content, content will be cut of here. */
initialHeight: {
type: Number,
default: undefined,
},
/** The hidden content is indicated by a gradient. This is the color that the gradient fades to.
* Makes only sense if `initialHeight` is set. */
backgroundColor: {
type: String,
},
})
const wrapper = ref<HTMLElement | null>(null)
const computedBackgroundColor = computed(() => {
if (wrapper.value === null) {
return props.backgroundColor || '#fff'
}
return props.backgroundColor || getInheritedBackgroundColor(wrapper.value)
})
/**
* Get the natural height of the element
*/
function getHeight(el: HTMLElement) {
const { display } = el.style // save display property
el.style.display = 'block' // Make it visible
const height = `${el.scrollHeight}px` // Get its height
el.style.display = display // revert to original display property
return height
}
/**
* force layout of element changes
* https://gist.github.com/paulirish/5d52fb081b3570c81e3a
*/
function forceLayout(el: HTMLElement) {
el.offsetTop
}
/* ######################################################################
# The following functions are called by the js hooks of the transitions.
# They follow the orignal hook order of the vue transition component
# see: https://vuejs.org/guide/built-ins/transition.html#javascript-hooks
###################################################################### */
function beforeEnter(el: HTMLElement) {
el.style.height = '0'
el.style.willChange = 'height'
el.style.backfaceVisibility = 'hidden'
forceLayout(el)
}
// the done callback is optional when
// used in combination with CSS
function enter(el: HTMLElement) {
const height = getHeight(el) // Get the natural height
el.style.height = height // Update the height
}
function afterEnter(el: HTMLElement) {
removeHeight(el)
}
function enterCancelled(el: HTMLElement) {
removeHeight(el)
}
function beforeLeave(el: HTMLElement) {
// Give the element a height to change from
el.style.height = `${el.scrollHeight}px`
forceLayout(el)
}
function leave(el: HTMLElement) {
// Set the height back to 0
el.style.height = '0'
el.style.willChange = ''
el.style.backfaceVisibility = ''
}
function afterLeave(el: HTMLElement) {
removeHeight(el)
}
function leaveCancelled(el: HTMLElement) {
removeHeight(el)
}
function removeHeight(el: HTMLElement) {
el.style.height = ''
}
</script>
<style lang="scss" scoped>
$transition-time: 300ms;
.expandable-slide-enter-active,
.expandable-slide-leave-active {
transition:
opacity $transition-time ease-in-quint,
height $transition-time ease-in-out-quint;
overflow: hidden;
}
.expandable-slide-enter,
.expandable-slide-leave-to {
opacity: 0;
}
.expandable-initial-height {
padding: 5px;
margin: -5px;
overflow: hidden;
position: relative;
&::after {
content: "";
display: block;
background-image: linear-gradient(
to bottom,
transparent,
ease-in-out
v-bind(computedBackgroundColor)
);
position: absolute;
height: 40px;
width: 100%;
bottom: 0;
}
}
.expandable-initial-height--expanded {
height: 100% !important;
&::after {
display: none;
}
}
</style>

View File

@ -110,13 +110,13 @@
</template>
<script lang="ts" setup>
import { formatDate } from '@/helpers/time/formatDate'
import {formatDate} from '@/helpers/time/formatDate'
import BaseButton from '@/components/base/BaseButton.vue'
const exampleDate = formatDate(new Date(), 'yyyy-MM-dd')
</script>
<style scoped>
<style scoped lang="scss">
.how-it-works-modal {
font-size: 1rem;
}

View File

@ -54,8 +54,8 @@
</p>
<modal
@close="() => showHowItWorks = false"
:enabled="showHowItWorks"
@close="() => showHowItWorks = false"
transition-name="fade"
:overflow="true"
variant="hint-modal"

View File

@ -2,100 +2,93 @@
<header
:class="{'has-background': background, 'menu-active': menuActive}"
aria-label="main navigation"
class="navbar main-theme is-fixed-top d-print-none"
class="navbar d-print-none"
>
<router-link :to="{name: 'home'}" class="logo-link">
<Logo width="164" height="48"/>
</router-link>
<MenuButton class="menu-button"/>
<div class="list-title" ref="listTitle" v-show="currentList.id">
<template v-if="currentList.id">
<h1
:style="{ 'opacity': currentList.title === '' ? '0': '1' }"
class="title">
{{ currentList.title === '' ? $t('misc.loading') : getListTitle(currentList) }}
</h1>
<BaseButton :to="{name: 'list.info', params: {listId: currentList.id}}" class="info-button">
<icon icon="circle-info"/>
</BaseButton>
<div
v-if="currentList.id"
class="list-title-wrapper"
>
<h1 class="list-title">{{ currentList.title === '' ? $t('misc.loading') : getListTitle(currentList) }}</h1>
<BaseButton :to="{name: 'list.info', params: {listId: currentList.id}}" class="list-title-button">
<icon icon="circle-info"/>
</BaseButton>
<list-settings-dropdown v-if="canWriteCurrentList && currentList.id !== -1" :list="currentList"/>
</template>
<list-settings-dropdown
v-if="canWriteCurrentList && currentList.id !== -1"
class="list-title-dropdown"
:list="currentList"
>
<template #trigger="{toggleOpen}">
<BaseButton class="list-title-button" @click="toggleOpen">
<icon icon="ellipsis-h" class="icon"/>
</BaseButton>
</template>
</list-settings-dropdown>
</div>
<div class="navbar-end">
<update/>
<BaseButton
@click="openQuickActions"
class="trigger-button pr-0"
class="trigger-button"
v-shortcut="'Control+k'"
:title="$t('keyboardShortcuts.quickSearch')"
>
<icon icon="search"/>
</BaseButton>
<notifications/>
<div class="user">
<dropdown class="is-right" ref="usernameDropdown">
<template #trigger="{toggleOpen}">
<x-button
class="username-dropdown-trigger"
@click="toggleOpen()"
variant="secondary"
:shadow="false"
>
<img :src="authStore.avatarUrl" alt="" class="avatar" width="40" height="40"/>
<span class="username">{{ authStore.userDisplayName }}</span>
<span class="icon is-small">
<icon icon="chevron-down"/>
</span>
</x-button>
</template>
<Notifications />
<dropdown>
<template #trigger="{toggleOpen, open}">
<BaseButton
class="username-dropdown-trigger"
@click="toggleOpen"
variant="secondary"
:shadow="false"
>
<img :src="authStore.avatarUrl" alt="" class="avatar" width="40" height="40"/>
<span class="username">{{ authStore.userDisplayName }}</span>
<span class="icon is-small" :style="{
transform: open ? 'rotate(180deg)' : 'rotate(0)',
}">
<icon icon="chevron-down"/>
</span>
</BaseButton>
</template>
<dropdown-item
:to="{name: 'user.settings'}"
>
{{ $t('user.settings.title') }}
</dropdown-item>
<dropdown-item
v-if="imprintUrl"
:href="imprintUrl"
>
{{ $t('navigation.imprint') }}
</dropdown-item>
<dropdown-item
v-if="privacyPolicyUrl"
:href="privacyPolicyUrl"
>
{{ $t('navigation.privacy') }}
</dropdown-item>
<dropdown-item
@click="baseStore.setKeyboardShortcutsActive(true)"
>
{{ $t('keyboardShortcuts.title') }}
</dropdown-item>
<dropdown-item
:to="{name: 'about'}"
>
{{ $t('about.title') }}
</dropdown-item>
<dropdown-item
@click="authStore.logout()"
>
{{ $t('user.auth.logout') }}
</dropdown-item>
</dropdown>
</div>
<dropdown-item :to="{name: 'user.settings'}">
{{ $t('user.settings.title') }}
</dropdown-item>
<dropdown-item v-if="imprintUrl" :href="imprintUrl">
{{ $t('navigation.imprint') }}
</dropdown-item>
<dropdown-item v-if="privacyPolicyUrl" :href="privacyPolicyUrl">
{{ $t('navigation.privacy') }}
</dropdown-item>
<dropdown-item @click="baseStore.setKeyboardShortcutsActive(true)">
{{ $t('keyboardShortcuts.title') }}
</dropdown-item>
<dropdown-item :to="{name: 'about'}">
{{ $t('about.title') }}
</dropdown-item>
<dropdown-item @click="authStore.logout()">
{{ $t('user.auth.logout') }}
</dropdown-item>
</dropdown>
</div>
</header>
</template>
<script setup lang="ts">
import {ref, computed, onMounted, nextTick} from 'vue'
import {computed} from 'vue'
import {RIGHTS as Rights} from '@/constants/rights'
import Update from '@/components/home/update.vue'
import ListSettingsDropdown from '@/components/list/list-settings-dropdown.vue'
import Dropdown from '@/components/misc/dropdown.vue'
import DropdownItem from '@/components/misc/dropdown-item.vue'
@ -122,182 +115,152 @@ const configStore = useConfigStore()
const imprintUrl = computed(() => configStore.legal.imprintUrl)
const privacyPolicyUrl = computed(() => configStore.legal.privacyPolicyUrl)
const usernameDropdown = ref()
const listTitle = ref()
onMounted(async () => {
await nextTick()
if (typeof usernameDropdown.value === 'undefined' || typeof listTitle.value === 'undefined') {
return
}
const usernameWidth = usernameDropdown.value.$el.clientWidth
listTitle.value.style.setProperty('--nav-username-width', `${usernameWidth}px`)
})
function openQuickActions() {
baseStore.setQuickActionsActive(true)
}
</script>
<style lang="scss" scoped>
$vikunja-nav-logo-full-width: 164px;
$user-dropdown-width-mobile: 5rem;
$hamburger-menu-icon-spacing: 1rem;
$hamburger-menu-icon-width: 28px;
.navbar {
--navbar-button-min-width: 40px;
--navbar-gap-width: 1rem;
--navbar-icon-size: 1.25rem;
position: fixed;
top: 0;
left: 0;
right: 0;
display: flex;
justify-content: space-between;
gap: var(--navbar-gap-width);
background: var(--site-background);
@media screen and (max-width: $tablet) {
padding-right: .5rem;
}
@media screen and (min-width: $tablet) {
padding-left: 2rem;
padding-right: 1rem;
align-items: stretch;
}
&.menu-active {
@media screen and (max-width: $tablet) {
z-index: 0;
}
}
// FIXME: notifications should provide a slot for the icon instead, so that we can style it as we want
:deep() {
.trigger-button {
color: var(--grey-400);
font-size: var(--navbar-icon-size);
}
}
}
.logo-link {
display: none;
padding: 0.5rem 0.75rem;
@media screen and (min-width: $tablet) {
align-self: stretch;
display: flex;
align-items: center;
padding-left: 2rem;
margin-right: 1.5rem;
margin-right: .5rem;
}
}
.menu-button {
align-self: stretch;
margin-right: auto;
align-self: stretch;
flex: 0 0 auto;
@media screen and (max-width: $tablet) {
margin-left: $hamburger-menu-icon-spacing;
margin-left: 1rem;
}
}
.navbar.main-theme {
background: var(--site-background);
justify-content: space-between;
.list-title-wrapper {
margin-inline: auto;
display: flex;
align-items: center;
@media screen and (max-width: $desktop) {
display: flex;
justify-content: space-between;
}
// this makes the truncated text of the list title work
// inside the flexbox parent
min-width: 0;
.title {
margin: 0;
font-size: 1.75rem;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.navbar-end {
margin-left: 0;
align-items: center;
display: flex;
}
@media screen and (max-width: $tablet) {
&.menu-active {
z-index: 0;
}
.user {
width: $user-dropdown-width-mobile;
.username-dropdown-trigger {
line-height: 1;
padding: 0 0.25rem;
height: 1rem;
.icon {
width: .5rem;
}
}
.username {
display: none;
}
}
}
}
.navbar {
// FIXME: notifications should provide a slot for the icon instead, so that we can style it as we want
:deep() {
.trigger-button {
cursor: pointer;
color: var(--grey-400);
padding: .5rem;
font-size: 1.25rem;
position: relative;
}
> * > .trigger-button {
width: $navbar-icon-width;
}
}
.user {
display: flex;
align-items: center;
span {
font-family: $vikunja-font;
}
.avatar {
border-radius: 100%;
vertical-align: middle;
height: 40px;
margin-right: .5rem;
}
.username-dropdown-trigger {
background: none;
&:focus:not(:active), &:active {
outline: none !important;
box-shadow: none !important;
}
}
@media screen and (min-width: $tablet) {
padding-inline: var(--navbar-gap-width);
}
}
.list-title {
display: flex;
align-items: center;
justify-content: center;
$edit-icon-width: 1rem;
font-size: 1rem;
// We need the following for overflowing ellipsis to work
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
@media screen and (min-width: $tablet) {
// We need a fixed width for overflowing ellipsis to work
--nav-username-width: 0;
width: calc(100vw - #{$user-dropdown-width-mobile} - #{2 * $hamburger-menu-icon-spacing} - #{$hamburger-menu-icon-width} - #{$edit-icon-width} - #{2 * $navbar-icon-width} - #{$vikunja-nav-logo-full-width} - var(--nav-username-width));
font-size: 1.75rem;
}
}
.list-title-dropdown {
align-self: stretch;
.list-title-button {
flex-grow: 1;
}
}
.list-title-button {
align-self: stretch;
min-width: var(--navbar-button-min-width);
display: flex;
place-items: center;
justify-content: center;
font-size: var(--navbar-icon-size);
color: var(--grey-400);
}
.navbar-end {
margin-left: auto;
flex: 0 0 auto;
display: flex;
align-items: stretch;
> * {
min-width: var(--navbar-button-min-width);
}
}
.username-dropdown-trigger {
padding-left: 1rem;
display: inline-flex;
align-items: center;
text-transform: uppercase;
font-size: .85rem;
font-weight: 700;
}
.username {
font-family: $vikunja-font;
@media screen and (max-width: $tablet) {
// We need a fixed width for overflowing ellipsis to work
width: calc(100vw - #{$user-dropdown-width-mobile} - #{2 * $hamburger-menu-icon-spacing} - #{$hamburger-menu-icon-width} - #{$edit-icon-width} - #{2 * $navbar-icon-width});
}
h1 {
margin: 0;
}
:deep(.dropdown-trigger) {
color: var(--grey-400);
margin-left: .5rem;
height: 1rem;
width: 1rem;
cursor: pointer;
display: none;
}
}
.info-button {
text-align: center;
height: 1.25rem;
line-height: 1.25rem;
width: 2rem;
margin-top: .25rem;
padding: 0 .5rem;
color: var(--grey-400);
margin-left: .5rem;
.avatar {
border-radius: 100%;
vertical-align: middle;
height: 40px;
margin-right: .5rem;
}
</style>

View File

@ -1,7 +1,11 @@
<template>
<div class="update-notification" v-if="updateAvailable">
<p>{{ $t('update.available') }}</p>
<x-button @click="refreshApp()" :shadow="false" class="has-no-text-wrap">
<p class="update-notification__message">{{ $t('update.available') }}</p>
<x-button
@click="refreshApp()"
:shadow="false"
:wrap="false"
>
{{ $t('update.do') }}
</x-button>
</div>
@ -16,23 +20,22 @@ const refreshing = ref(false)
document.addEventListener('swUpdated', showRefreshUI, {once: true})
if (navigator && navigator.serviceWorker) {
navigator.serviceWorker.addEventListener(
'controllerchange', () => {
if (refreshing.value) return
refreshing.value = true
window.location.reload()
},
)
}
navigator?.serviceWorker?.addEventListener(
'controllerchange', () => {
if (refreshing.value) return
refreshing.value = true
window.location.reload()
},
)
function showRefreshUI(e) {
function showRefreshUI(e: Event) {
console.log('recieved refresh event', e)
registration.value = e.detail
updateAvailable.value = true
}
function refreshApp() {
updateAvailable.value = false
if (!registration.value || !registration.value.waiting) {
return
}
@ -43,39 +46,30 @@ function refreshApp() {
<style lang="scss" scoped>
.update-notification {
position: fixed;
// FIXME: We should prevent usage of z-index or
// at least define it centrally
// the highest z-index of a modal is .hint-modal with 4500
z-index: 5000;
bottom: 1rem;
inset-inline: 1rem;
max-width: max-content;
margin-inline: auto;
display: flex;
align-items: center;
background: $warning;
justify-content: space-between;
gap: 1rem;
padding: .5rem;
background: $warning;
border-radius: $radius;
font-size: .9rem;
color: var(--grey-900);
justify-content: space-between;
position: fixed;
bottom: 1rem;
width: 450px;
left: calc(50vw - 225px);
@media screen and (max-width: $tablet) {
position: fixed;
left: 1rem;
right: 1rem;
bottom: 1rem;
width: auto;
}
p {
text-align: center;
width: 100%;
}
> * + * {
margin-left: .5rem;
}
}
.dark .update-notification {
color: var(--grey-200);
.update-notification__message {
width: 100%;
text-align: center;
}
</style>

View File

@ -1,16 +1,16 @@
<template>
<div class="content-auth">
<BaseButton
v-if="menuActive"
v-show="menuActive"
@click="baseStore.setMenuActive(false)"
class="menu-hide-button d-print-none"
>
<icon icon="times"/>
</BaseButton>
<div
class="app-container"
:class="{'has-background': background || blurHash}"
:style="{'background-image': blurHash && `url(${blurHash})`}"
class="app-container"
>
<div
:class="{'is-visible': background}"
@ -18,14 +18,14 @@
:style="{'background-image': background && `url(${background})`}"></div>
<navigation class="d-print-none"/>
<main
class="app-content"
:class="[
{ 'is-menu-enabled': menuActive },
$route.name,
]"
class="app-content"
>
<BaseButton
v-if="menuActive"
v-show="menuActive"
@click="baseStore.setMenuActive(false)"
class="mobile-overlay d-print-none"
/>
@ -39,7 +39,7 @@
</router-view>
<modal
v-if="currentModal"
:enabled="Boolean(currentModal)"
@close="closeModal()"
variant="scrolling"
class="task-detail-view-modal"
@ -86,9 +86,6 @@ function showKeyboardShortcuts() {
const route = useRoute()
// hide menu on mobile
watch(() => route.fullPath, () => window.innerWidth < 769 && baseStore.setMenuActive(false))
// FIXME: this is really error prone
// Reset the current list highlight in menu if the current route is not list related.
watch(() => route.name as string, (routeName) => {
@ -143,7 +140,6 @@ labelStore.loadAllLabels()
&:hover,
&:focus {
height: 1rem;
color: var(--grey-600);
}
}
@ -154,41 +150,36 @@ labelStore.loadAllLabels()
@media screen and (max-width: $tablet) {
padding-top: $navbar-height;
}
}
.app-content {
z-index: 10;
position: relative;
padding-top: 1rem;
.app-content {
z-index: 10;
position: relative;
padding: 1.5rem 0.5rem 1rem;
@media screen {
padding: $navbar-height + 1.5rem 1.5rem 1rem 1.5rem;
@media screen and (max-width: $tablet) {
margin-left: 0;
min-height: calc(100vh - 4rem);
}
@media screen and (min-width: $tablet) {
padding: $navbar-height + 1.5rem 1.5rem 1rem 1.5rem;
}
&.is-menu-enabled {
@media screen and (min-width: $tablet) {
margin-left: $navbar-width;
}
}
// Used to make sure the spinner is always in the middle while loading
> .loader-container {
min-height: calc(100vh - #{$navbar-height + 1.5rem + 1rem});
}
// Used to make sure the spinner is always in the middle while loading
> .loader-container {
min-height: calc(100vh - #{$navbar-height + 1.5rem + 1rem});
}
@media screen and (max-width: $tablet) {
margin-left: 0;
padding-top: 1.5rem;
min-height: calc(100vh - 4rem);
}
@media screen {
&.is-menu-enabled {
margin-left: $navbar-width;
@media screen and (max-width: $tablet) {
min-width: 100%;
margin-left: 0;
}
}
}
.card {
background: var(--white);
}
// FIXME: This should be somehow defined inside Card.vue
.card {
background: var(--white);
}
}
@ -230,11 +221,4 @@ labelStore.loadAllLabels()
position: relative;
z-index: 1;
}
.is-touch .content-auth,
.content-auth.z-unset {
z-index: unset;
}
@include modal-transition();
</style>

View File

@ -7,7 +7,7 @@
<ul class="menu-list">
<li>
<router-link :to="{ name: 'home'}" v-shortcut="'g o'">
<span class="icon">
<span class="menu-item-icon icon">
<icon icon="calendar"/>
</span>
{{ $t('navigation.overview') }}
@ -15,7 +15,7 @@
</li>
<li>
<router-link :to="{ name: 'tasks.range'}" v-shortcut="'g u'">
<span class="icon">
<span class="menu-item-icon icon">
<icon :icon="['far', 'calendar-alt']"/>
</span>
{{ $t('navigation.upcoming') }}
@ -23,7 +23,7 @@
</li>
<li>
<router-link :to="{ name: 'namespaces.index'}" v-shortcut="'g n'">
<span class="icon">
<span class="menu-item-icon icon">
<icon icon="layer-group"/>
</span>
{{ $t('namespace.title') }}
@ -31,7 +31,7 @@
</li>
<li>
<router-link :to="{ name: 'labels.index'}" v-shortcut="'g a'">
<span class="icon">
<span class="menu-item-icon icon">
<icon icon="tags"/>
</span>
{{ $t('label.title') }}
@ -39,7 +39,7 @@
</li>
<li>
<router-link :to="{ name: 'teams.index'}" v-shortcut="'g m'">
<span class="icon">
<span class="menu-item-icon icon">
<icon icon="users"/>
</span>
{{ $t('team.title') }}
@ -63,7 +63,7 @@
/>
<span class="name">{{ namespaceTitles[nk] }}</span>
<div
class="icon is-small toggle-lists-icon pl-2"
class="icon menu-item-icon is-small toggle-lists-icon pl-2"
:class="{'active': typeof listsVisible[n.id] !== 'undefined' ? listsVisible[n.id] : true}"
>
<icon icon="chevron-down"/>
@ -72,7 +72,7 @@
({{ namespaceListsCount[nk] }})
</span>
</BaseButton>
<namespace-settings-dropdown :namespace="n" v-if="n.id > 0"/>
<namespace-settings-dropdown class="menu-list-dropdown" :namespace="n" v-if="n.id > 0"/>
</div>
<!--
NOTE: a v-model / computed setter is not possible, since the updateActiveLists function
@ -111,11 +111,11 @@
class="list-menu-link"
:class="{'router-link-exact-active': currentList.id === l.id}"
>
<span class="icon handle">
<span class="icon menu-item-icon handle">
<icon icon="grip-lines"/>
</span>
<ColorBubble
v-if="l.hexColor !== ''"
v-if="l.hexColor !== ''"
:color="l.hexColor"
class="mr-1"
/>
@ -128,7 +128,13 @@
>
<icon :icon="l.isFavorite ? 'star' : ['far', 'star']"/>
</BaseButton>
<list-settings-dropdown :list="l" v-if="l.id > 0"/>
<list-settings-dropdown class="menu-list-dropdown" :list="l" v-if="l.id > 0">
<template #trigger="{toggleOpen}">
<BaseButton class="menu-list-dropdown-trigger" @click="toggleOpen">
<icon icon="ellipsis-h" class="icon"/>
</BaseButton>
</template>
</list-settings-dropdown>
<span class="list-setting-spacer" v-else></span>
</li>
</template>
@ -140,7 +146,7 @@
</template>
<script setup lang="ts">
import {ref, computed, onMounted, onBeforeMount} from 'vue'
import {ref, computed, onBeforeMount} from 'vue'
import draggable from 'zhyswan-vuedraggable'
import type {SortableEvent} from 'sortablejs'
@ -153,7 +159,6 @@ import Logo from '@/components/home/Logo.vue'
import {calculateItemPosition} from '@/helpers/calculateItemPosition'
import {getNamespaceTitle} from '@/helpers/getNamespaceTitle'
import {getListTitle} from '@/helpers/getListTitle'
import {useEventListener} from '@vueuse/core'
import type {IList} from '@/modelTypes/IList'
import type {INamespace} from '@/modelTypes/INamespace'
import ColorBubble from '@/components/misc/colorBubble.vue'
@ -194,17 +199,8 @@ const namespaceListsCount = computed(() => {
return namespaces.value.map((_, index) => activeLists.value[index]?.length ?? 0)
})
useEventListener('resize', resize)
onMounted(() => resize())
const listStore = useListStore()
function resize() {
// Hide the menu by default on mobile
baseStore.setMenuActive(window.innerWidth >= 770)
}
function toggleLists(namespaceId: INamespace['id']) {
listsVisible.value[namespaceId] = !listsVisible.value[namespaceId]
}
@ -280,6 +276,18 @@ $vikunja-nav-background: var(--site-background);
$vikunja-nav-color: var(--grey-700);
$vikunja-nav-selected-width: 0.4rem;
.logo {
display: block;
padding-left: 1rem;
margin-right: 1rem;
margin-bottom: 1rem;
@media screen and (min-width: $tablet) {
display: none;
}
}
.namespace-container {
background: $vikunja-nav-background;
color: $vikunja-nav-color;
@ -303,248 +311,228 @@ $vikunja-nav-selected-width: 0.4rem;
transform: translateX(0);
transition: transform $transition-duration ease-out;
}
}
.menu {
.menu-label {
font-size: 1rem;
font-weight: 700;
font-weight: bold;
font-family: $vikunja-font;
color: $vikunja-nav-color;
font-weight: 500;
min-height: 2.5rem;
padding-top: 0;
padding-left: $navbar-padding;
// these are general menu styles
// should be in own components
.menu {
.menu-label,
.menu-list .list-menu-link,
.menu-list a {
display: flex;
align-items: center;
justify-content: space-between;
cursor: pointer;
overflow: hidden;
}
.menu-label,
.menu-list .list-menu-link,
.menu-list a {
display: flex;
align-items: center;
justify-content: space-between;
cursor: pointer;
.list-menu-title {
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
}
.color-bubble {
height: 12px;
flex: 0 0 12px;
}
}
.favorite {
margin-left: .25rem;
transition: opacity $transition, color $transition;
opacity: 0;
&:hover,
&.is-favorite {
color: var(--warning);
}
}
.favorite.is-favorite,
.list-menu:hover .favorite {
opacity: 1;
}
.menu-label {
.color-bubble {
width: 14px;
height: 14px;
flex-basis: auto;
}
.is-archived {
min-width: 85px;
}
}
.namespace-title {
display: flex;
align-items: center;
justify-content: space-between;
color: $vikunja-nav-color;
padding: 0 .25rem;
.menu-label {
margin-bottom: 0;
flex: 1 1 auto;
.name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: auto;
}
.count {
color: var(--grey-500);
margin-right: .5rem;
}
}
:deep(.dropdown-trigger) {
padding: .5rem;
cursor: pointer;
}
.toggle-lists-icon {
svg {
transition: all $transition;
transform: rotate(90deg);
opacity: 1;
}
&.active svg {
transform: rotate(0deg);
opacity: 0;
}
}
&:hover .toggle-lists-icon svg {
opacity: 1;
}
&:not(.has-menu) .toggle-lists-icon {
padding-right: 1rem;
}
}
.menu-label,
.nsettings,
.menu-list .list-menu-link,
.menu-list a {
color: $vikunja-nav-color;
}
.menu-list {
li {
height: 44px;
display: flex;
align-items: center;
&:hover {
background: var(--white);
}
:deep(.dropdown-trigger) {
opacity: 0;
padding: .5rem;
cursor: pointer;
transition: $transition;
}
&:hover :deep(.dropdown-trigger) {
opacity: 1;
}
}
.flip-list-move {
transition: transform $transition-duration;
}
.ghost {
background: var(--grey-200);
* {
opacity: 0;
}
}
a:hover {
background: transparent;
}
.list-menu-link, li > a {
padding: 0.75rem .5rem 0.75rem ($navbar-padding * 1.5 - 1.75rem);
transition: all 0.2s ease;
border-radius: 0;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
width: 100%;
border-left: $vikunja-nav-selected-width solid transparent;
.icon {
height: 1rem;
vertical-align: middle;
padding-right: 0.5rem;
&.handle {
opacity: 0;
transition: opacity $transition;
margin-right: .25rem;
cursor: grab;
}
}
&:hover .icon.handle {
opacity: 1;
}
&.router-link-exact-active {
color: var(--primary);
border-left: $vikunja-nav-selected-width solid var(--primary);
.icon {
color: var(--primary);
}
}
&:hover {
border-left: $vikunja-nav-selected-width solid var(--primary);
}
}
}
.logo {
display: block;
padding-left: 1rem;
margin-right: 1rem;
margin-bottom: 1rem;
@media screen and (min-width: $tablet) {
display: none;
}
}
&.namespaces-lists {
padding-top: math.div($navbar-padding, 2);
}
.icon {
color: var(--grey-400) !important;
.color-bubble {
height: 12px;
flex: 0 0 12px;
}
}
.top-menu {
margin-top: math.div($navbar-padding, 2);
.menu-list {
li {
height: 44px;
display: flex;
align-items: center;
.menu-list {
li {
font-weight: 500;
font-family: $vikunja-font;
&:hover {
background: var(--white);
}
.list-menu-link, li > a {
padding-left: 2rem;
display: inline-block;
.menu-list-dropdown {
opacity: 0;
transition: $transition;
}
.icon {
padding-bottom: .25rem;
}
&:hover .menu-list-dropdown {
opacity: 1;
}
}
.menu-item-icon {
color: var(--grey-400);
}
.menu-list-dropdown-trigger {
display: flex;
padding: 0.5rem;
}
.flip-list-move {
transition: transform $transition-duration;
}
.ghost {
background: var(--grey-200);
* {
opacity: 0;
}
}
a:hover {
background: transparent;
}
.list-menu-link,
li > a {
color: $vikunja-nav-color;
padding: 0.75rem .5rem 0.75rem ($navbar-padding * 1.5 - 1.75rem);
transition: all 0.2s ease;
border-radius: 0;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
width: 100%;
border-left: $vikunja-nav-selected-width solid transparent;
&:hover {
border-left: $vikunja-nav-selected-width solid var(--primary);
}
&.router-link-exact-active {
color: var(--primary);
border-left: $vikunja-nav-selected-width solid var(--primary);
}
.icon {
height: 1rem;
vertical-align: middle;
padding-right: 0.5rem;
}
&.router-link-exact-active .icon:not(.handle) {
color: var(--primary);
}
.handle {
opacity: 0;
transition: opacity $transition;
margin-right: .25rem;
cursor: grab;
}
&:hover .handle {
opacity: 1;
}
}
}
}
.top-menu {
margin-top: math.div($navbar-padding, 2);
.menu-list {
li {
font-weight: 600;
font-family: $vikunja-font;
}
.list-menu-link,
li > a {
padding-left: 2rem;
display: inline-block;
.icon {
padding-bottom: .25rem;
}
}
}
}
.namespaces-lists {
padding-top: math.div($navbar-padding, 2);
.menu-label {
font-size: 1rem;
font-weight: 700;
font-weight: bold;
font-family: $vikunja-font;
color: $vikunja-nav-color;
font-weight: 600;
min-height: 2.5rem;
padding-top: 0;
padding-left: $navbar-padding;
overflow: hidden;
margin-bottom: 0;
flex: 1 1 auto;
.name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: auto;
}
.count {
color: var(--grey-500);
margin-right: .5rem;
// align brackets with number
font-feature-settings: "case";
}
}
.favorite {
margin-left: .25rem;
transition: opacity $transition, color $transition;
opacity: 0;
&:hover,
&.is-favorite {
color: var(--warning);
}
}
.favorite.is-favorite,
.list-menu:hover .favorite {
opacity: 1;
}
.list-menu-title {
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
}
.color-bubble {
width: 14px;
height: 14px;
flex-basis: auto;
}
.is-archived {
min-width: 85px;
}
}
.namespace-title {
display: flex;
align-items: center;
justify-content: space-between;
color: $vikunja-nav-color;
padding: 0 .25rem;
.toggle-lists-icon {
svg {
transition: all $transition;
transform: rotate(90deg);
opacity: 1;
}
&.active svg {
transform: rotate(0deg);
opacity: 0;
}
}
&:hover .toggle-lists-icon svg {
opacity: 1;
}
&:not(.has-menu) .toggle-lists-icon {
padding-right: 1rem;
}
}

View File

@ -0,0 +1,26 @@
<script lang="ts" setup>
import {logEvent} from 'histoire/client'
import XButton from './button.vue'
</script>
<template>
<Story :layout="{ type: 'grid', width: '200px' }">
<Variant title="primary">
<XButton @click="logEvent('Click', $event)" variant="primary">
Order pizza!
</XButton>
</Variant>
<Variant title="secondary">
<XButton @click="logEvent('Click', $event)" variant="secondary">
Order spaghetti!
</XButton>
</Variant>
<Variant title="tertiary">
<XButton @click="logEvent('Click', $event)" variant="tertiary">
Order tortellini!
</XButton>
</Variant>
</Story>
</template>

Some files were not shown because too many files have changed in this diff Show More