diff --git a/frontend/.drone.yml b/frontend/.drone.yml new file mode 100644 index 000000000..c634efb90 --- /dev/null +++ b/frontend/.drone.yml @@ -0,0 +1,537 @@ +--- +kind: pipeline +type: docker +name: build + +trigger: + branch: + include: + - main + event: + include: + - push + - pull_request + +services: + - name: api + image: vikunja/api:unstable + pull: always + environment: + VIKUNJA_SERVICE_TESTINGTOKEN: averyLongSecretToSe33dtheDB + VIKUNJA_LOG_LEVEL: DEBUG + +steps: +# Disabled until we figure out why it is so slow +# - name: restore-cache +# image: meltwater/drone-cache:dev +# pull: always +# environment: +# AWS_ACCESS_KEY_ID: +# from_secret: cache_aws_access_key_id +# AWS_SECRET_ACCESS_KEY: +# from_secret: cache_aws_secret_access_key +# settings: +# debug: true +# restore: true +# bucket: kolaente.dev-drone-dependency-cache +# endpoint: https://s3.fr-par.scw.cloud +# region: fr-par +# path_style: true +# cache_key: '{{ .Repo.Name }}_{{ checksum "pnpm-lock.yaml" }}_{{ arch }}_{{ os }}' +# mount: +# - .cache + + - name: dependencies + image: node:20.11.0-alpine + pull: always + environment: + PNPM_CACHE_FOLDER: .cache/pnpm + CYPRESS_CACHE_FOLDER: .cache/cypress + PUPPETEER_SKIP_DOWNLOAD: true + commands: + - corepack enable && pnpm config set store-dir .cache/pnpm + - pnpm install --fetch-timeout 100000 +# depends_on: +# - restore-cache + + - name: lint + image: node:20.11.0-alpine + pull: always + environment: + PNPM_CACHE_FOLDER: .cache/pnpm + commands: + - corepack enable && pnpm config set store-dir .cache/pnpm + - pnpm run lint + depends_on: + - dependencies + + - name: build-prod + image: node:20.11.0-alpine + pull: always + environment: + PNPM_CACHE_FOLDER: .cache/pnpm + commands: + - corepack enable && pnpm config set store-dir .cache/pnpm + - pnpm run build + depends_on: + - dependencies + + - name: test-unit + image: node:20.11.0-alpine + pull: always + commands: + - corepack enable && pnpm config set store-dir .cache/pnpm + - pnpm run test:unit + depends_on: + - dependencies + + - name: typecheck + failure: ignore + image: node:20.11.0-alpine + pull: always + environment: + PNPM_CACHE_FOLDER: .cache/pnpm + commands: + - corepack enable && pnpm config set store-dir .cache/pnpm + - pnpm run typecheck + depends_on: + - dependencies + + - name: test-frontend + image: cypress/browsers:node18.12.0-chrome107 + pull: always + environment: + CYPRESS_API_URL: http://api:3456/api/v1 + CYPRESS_TEST_SECRET: averyLongSecretToSe33dtheDB + PNPM_CACHE_FOLDER: .cache/pnpm + CYPRESS_CACHE_FOLDER: .cache/cypress + CYPRESS_DEFAULT_COMMAND_TIMEOUT: 60000 + CYPRESS_RECORD_KEY: + from_secret: cypress_project_key + commands: + - sed -i 's/localhost/api/g' dist/index.html + - corepack enable && pnpm config set store-dir .cache/pnpm + - pnpm cypress install + - pnpm run test:e2e-record + depends_on: + - build-prod + +# - name: rebuild-cache +# image: meltwater/drone-cache:dev +# pull: always +# environment: +# AWS_ACCESS_KEY_ID: +# from_secret: cache_aws_access_key_id +# AWS_SECRET_ACCESS_KEY: +# from_secret: cache_aws_secret_access_key +# settings: +# rebuild: true +# bucket: kolaente.dev-drone-dependency-cache +# endpoint: https://s3.fr-par.scw.cloud +# region: fr-par +# path_style: true +# cache_key: '{{ .Repo.Name }}_{{ checksum "pnpm-lock.yaml" }}_{{ arch }}_{{ os }}' +# mount: +# - .cache +# depends_on: +# - dependencies + + - name: deploy-preview + image: williamjackson/netlify-cli + pull: always + user: root # The rest runs as root and thus the permissions wouldn't work + environment: + NETLIFY_AUTH_TOKEN: + from_secret: netlify_auth_token + NETLIFY_SITE_ID: + from_secret: netlify_site_id + GITEA_TOKEN: + from_secret: gitea_token + commands: + - cp -r dist dist-preview + # 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 + # 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: + event: + include: + - pull_request + +--- +kind: pipeline +type: docker +name: release-latest + +depends_on: + - build + +trigger: + branch: + - main + event: + - push + +steps: + - name: fetch-tags + image: docker:git + commands: + - git fetch --tags + +# - name: restore-cache +# image: meltwater/drone-cache:dev +# pull: always +# environment: +# AWS_ACCESS_KEY_ID: +# from_secret: cache_aws_access_key_id +# AWS_SECRET_ACCESS_KEY: +# from_secret: cache_aws_secret_access_key +# settings: +# restore: true +# bucket: kolaente.dev-drone-dependency-cache +# endpoint: https://s3.fr-par.scw.cloud +# region: fr-par +# path_style: true +# cache_key: '{{ .Repo.Name }}_{{ checksum "pnpm-lock.yaml" }}_{{ arch }}_{{ os }}' +# mount: +# - .cache + + - name: build + image: node:20.11.0-alpine + pull: always + environment: + PNPM_CACHE_FOLDER: .cache/pnpm + SENTRY_AUTH_TOKEN: + from_secret: sentry_auth_token + SENTRY_ORG: vikunja + SENTRY_PROJECT: frontend-oss + PUPPETEER_SKIP_DOWNLOAD: true + commands: + - apk add git + - 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" + - pnpm run build + - sed -i 's/http\:\\/\\/localhost\\:3456\\/api\\/v1/\\/api\\/v1/g' dist/index.html # Override the default api url used for developing +# depends_on: +# - restore-cache + + - name: static + image: kolaente/zip + pull: always + commands: + - cp src/version.json dist + - cd dist + - zip -r ../vikunja-frontend-unstable.zip * + - cd .. + depends_on: [ build ] + + - name: release + image: plugins/s3 + pull: always + settings: + bucket: vikunja-releases + access_key: + from_secret: aws_access_key_id + secret_key: + from_secret: aws_secret_access_key + endpoint: https://s3.fr-par.scw.cloud + region: fr-par + path_style: true + source: vikunja-frontend-unstable.zip + target: /frontend/ + depends_on: [ static ] + +--- +kind: pipeline +type: docker +name: release-version + +depends_on: + - build + +trigger: + event: + - tag + +steps: + - name: fetch-tags + image: docker:git + commands: + - git fetch --tags + +# - name: restore-cache +# image: meltwater/drone-cache:dev +# pull: always +# environment: +# AWS_ACCESS_KEY_ID: +# from_secret: cache_aws_access_key_id +# AWS_SECRET_ACCESS_KEY: +# from_secret: cache_aws_secret_access_key +# settings: +# restore: true +# bucket: kolaente.dev-drone-dependency-cache +# endpoint: https://s3.fr-par.scw.cloud +# region: fr-par +# path_style: true +# cache_key: '{{ .Repo.Name }}_{{ checksum "pnpm-lock.yaml" }}_{{ arch }}_{{ os }}' +# mount: +# - .cache + + - name: build + image: node:20.11.0-alpine + pull: always + environment: + PNPM_CACHE_FOLDER: .cache/pnpm + SENTRY_AUTH_TOKEN: + from_secret: sentry_auth_token + SENTRY_ORG: vikunja + SENTRY_PROJECT: frontend-oss + commands: + - apk add git + - 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" + - pnpm run build + - sed -i 's/http\:\\/\\/localhost\\:3456\\/api\\/v1/\\/api\\/v1/g' dist/index.html # Override the default api url used for developing +# depends_on: +# - restore-cache + + - name: static + image: kolaente/zip + pull: always + commands: + - cp src/version.json dist + - cd dist + - zip -r ../vikunja-frontend-${DRONE_TAG##v}.zip * + - cd .. + depends_on: [ build ] + + - name: release + image: plugins/s3 + pull: always + settings: + bucket: vikunja-releases + access_key: + from_secret: aws_access_key_id + secret_key: + from_secret: aws_secret_access_key + endpoint: https://s3.fr-par.scw.cloud + region: fr-par + path_style: true + source: vikunja-frontend-${DRONE_TAG##v}.zip + target: /frontend/ + depends_on: [ static ] + +--- +kind: pipeline +type: docker +name: trigger-desktop-update + +trigger: + branch: + - main + event: + - push + +depends_on: + - release-latest + +steps: + - name: trigger + image: plugins/downstream + settings: + server: https://drone.kolaente.de + token: + from_secret: drone_token + repositories: + - vikunja/desktop@main + +--- +kind: pipeline +type: docker +name: docker-release + +depends_on: + - build + +trigger: + ref: + - refs/heads/main + - "refs/tags/**" + event: + exclude: + - cron + +steps: + - name: fetch-tags + image: docker:git + commands: + - git fetch --tags + + - name: docker-unstable + image: thegeeklab/drone-docker-buildx + privileged: true + pull: always + settings: + username: + from_secret: docker_username + password: + from_secret: docker_password + repo: vikunja/frontend + tags: unstable + build_args: + - USE_RELEASE=false + platforms: + - linux/386 + - linux/amd64 + - linux/arm/v6 + - linux/arm/v7 + - linux/arm64/v8 + depends_on: [ fetch-tags ] + when: + ref: + - refs/heads/main + + - 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: docker-release + image: thegeeklab/drone-docker-buildx + privileged: true + pull: always + settings: + username: + from_secret: docker_username + password: + from_secret: docker_password + repo: vikunja/frontend + build_args: + - USE_RELEASE=false + platforms: + - linux/386 + - linux/amd64 + - linux/arm/v6 + - linux/arm/v7 + - linux/arm64/v8 + depends_on: [ generate-tags ] + when: + ref: + - "refs/tags/**" + +--- +kind: pipeline +type: docker +name: notify + +trigger: + ref: + - refs/heads/main + - "refs/tags/**" + event: + exclude: + - cron + +depends_on: + - build + - release-version + - release-latest + - trigger-desktop-update + - docker-release + +steps: + - name: notify + image: plugins/matrix + settings: + homeserver: https://matrix.org + roomid: WqBDCxzghKcNflkErL:matrix.org + username: + from_secret: matrix_username + password: + from_secret: matrix_password + when: + status: + - success + - failure +--- +kind: pipeline +type: docker +name: update-translations + +trigger: + branch: + include: + - main + event: + include: + - cron + cron: + - update_translations + +steps: + - name: download + pull: always + image: ghcr.io/kolaente/kolaente/drone-crowdin-v2:latest + settings: + crowdin_key: + from_secret: crowdin_key + project_id: 462614 + target: download + download_to: src/i18n/lang/ + download_export_approved_only: true + + - name: move-files + pull: always + image: bash + depends_on: + - download + commands: + - mv src/i18n/lang/*/*.json src/i18n/lang + + - name: push + pull: always + image: appleboy/drone-git-push + depends_on: + - move-files + settings: + author_email: "frederik@vikunja.io" + author_name: Frederick [Bot] + branch: main + commit: true + commit_message: "chore(i18n): update translations via Crowdin" + remote: "ssh://git@kolaente.dev:9022/vikunja/frontend.git" + ssh_key: + from_secret: git_push_ssh_key + + - name: upload + pull: always + image: ghcr.io/kolaente/kolaente/drone-crowdin-v2:latest + depends_on: + - clone + settings: + crowdin_key: + from_secret: crowdin_key + project_id: 462614 + target: upload + upload_files: + src/i18n/lang/en.json: en.json +--- +kind: signature +hmac: a044c7c4db3c2a11299d4d118397e9d25be36db241723a1bbd0a2f9cc90ffdac + +... diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 000000000..2c1d3b49f --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,29 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false + +[*.vue] +indent_style = tab + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = space +indent_size = 2 + +[*.{scss,css}] +indent_style = space +indent_size = 2 + +[.nvmrc] +insert_final_newline = false \ No newline at end of file diff --git a/frontend/.env.local.example b/frontend/.env.local.example new file mode 100644 index 000000000..6fd3aaff2 --- /dev/null +++ b/frontend/.env.local.example @@ -0,0 +1,12 @@ +# (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 +# SENTRY_AUTH_TOKEN=YOUR_TOKEN +# SENTRY_ORG=vikunja +# SENTRY_PROJECT=frontend-oss +# VIKUNJA_FRONTEND_BASE=/custom-subpath \ No newline at end of file diff --git a/frontend/.envrc b/frontend/.envrc new file mode 100644 index 000000000..3550a30f2 --- /dev/null +++ b/frontend/.envrc @@ -0,0 +1 @@ +use flake diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 000000000..f8c9d46f6 --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,60 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + 'root': true, + 'env': { + 'browser': true, + 'es2022': true, + 'node': true, + }, + 'extends': [ + 'eslint:recommended', + 'plugin:vue/vue3-recommended', + '@vue/eslint-config-typescript/recommended', + ], + 'rules': { + 'quotes': ['error', 'single'], + 'comma-dangle': ['error', 'always-multiline'], + 'semi': ['error', 'never'], + + 'vue/v-on-event-hyphenation': ['warn', 'never', { 'autofix': true }], + 'vue/multi-word-component-names': 'off', + + // uncategorized rules: + 'vue/component-api-style': ['error', ['script-setup']], + 'vue/component-name-in-template-casing': ['warn', 'PascalCase'], + 'vue/custom-event-name-casing': ['error', 'camelCase'], + 'vue/define-macros-order': 'error', + 'vue/match-component-file-name': ['error', { + 'extensions': ['.js', '.jsx', '.ts', '.tsx', '.vue'], + 'shouldMatchCase': true, + }], + 'vue/no-boolean-default': ['warn', 'default-false'], + 'vue/match-component-import-name': 'error', + 'vue/prefer-separate-static-class': 'warn', + + 'vue/padding-line-between-blocks': 'error', + 'vue/next-tick-style': ['error', 'promise'], + 'vue/block-lang': [ + 'error', + { 'script': { 'lang': 'ts' } }, + ], + 'vue/no-required-prop-with-default': ['error', { 'autofix': true }], + 'vue/no-duplicate-attr-inheritance': 'error', + 'vue/no-empty-component-block': 'error', + 'vue/html-indent': ['error', 'tab'], + + // vue3 + 'vue/no-ref-object-destructure': 'error', + }, + 'parser': 'vue-eslint-parser', + 'parserOptions': { + 'parser': '@typescript-eslint/parser', + 'ecmaVersion': 'latest', + }, + 'ignorePatterns': [ + '*.test.*', + 'cypress/*', + ], +} \ No newline at end of file diff --git a/frontend/.gitea/issue_template.md b/frontend/.gitea/issue_template.md new file mode 100644 index 000000000..ee62edf05 --- /dev/null +++ b/frontend/.gitea/issue_template.md @@ -0,0 +1,44 @@ + + +**Version information:** + +Frontend Version: +API Version: +Browser and OS Version: + +**Steps to reproduce:** + + + +1. +2. +... + +**Expected behavior:** + + + + + +**Actual behavior:** + + + + + +**Checklist:** + +* [ ] I have provided all required information +* [ ] I am using the latest release or the latest unstable build +* [ ] I was able to reproduce the bug on [try](https://try.vikunja.io) diff --git a/frontend/.github/FUNDING.yml b/frontend/.github/FUNDING.yml new file mode 100644 index 000000000..e9715a058 --- /dev/null +++ b/frontend/.github/FUNDING.yml @@ -0,0 +1,3 @@ +github: kolaente +open_collective: vikunja +custom: ["https://vikunja.cloud", "https://www.buymeacoffee.com/kolaente"] diff --git a/frontend/.github/ISSUE_TEMPLATE/bug-report.yml b/frontend/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 000000000..3e44205c2 --- /dev/null +++ b/frontend/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,59 @@ +name: Bug Report +description: Found something you weren't expecting? Report it here! +labels: + - kind/bug +body: + - type: markdown + attributes: + value: | + NOTE: If your issue is a security concern, please send an email to security@vikunja.io instead of opening a public issue. + - type: markdown + attributes: + value: | + Please fill out this issue template to report a bug. + + 1. If you want to propose a new feature, please open a discussion thread in the forum: https://community.vikunja.io + 2. Please ask questions or configuration/deploy problems on our [Matrix Room](https://matrix.to/#/#vikunja:matrix.org) or forum (https://community.vikunja.io). + 3. Make sure you are using the latest release and + take a moment to check that your issue hasn't been reported before. + 4. Please give all relevant information below for bug reports, because + incomplete details will be handled as an invalid report and closed. + - type: textarea + id: description + attributes: + label: Description + description: | + Please provide a description of your issue here, with a URL if you were able to reproduce the issue (see below). + - type: input + id: frontend-version + attributes: + label: Vikunja Frontend Version + description: Vikunja frontend version (or commit reference) of your instance + validations: + required: true + - type: input + id: api-version + attributes: + label: Vikunja API Version + description: Vikunja API version (or commit reference) of your instance + validations: + required: true + - type: input + id: browser-version + attributes: + label: Browser and version + description: If your issue is related to a frontend problem, please provide the browser and version you used to reproduce it. + - type: dropdown + id: can-reproduce + attributes: + label: Can you reproduce the bug on the Vikunja demo site? + options: + - "Yes" + - "No" + validations: + required: true + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: If this issue involves the Web Interface, please provide one or more screenshots diff --git a/frontend/.github/ISSUE_TEMPLATE/config.yml b/frontend/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..4a2256d72 --- /dev/null +++ b/frontend/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,17 @@ +blank_issues_enabled: false +contact_links: + - name: API issues + url: https://code.vikunja.io/api/issues + about: This is the frontend repo. Please open api-related bug reports and discussions in the api 0repo. Not sure if your issue is frontend or api? Ask in Matrix or the forum first. + - name: Forum + url: https://community.vikunja.io/ + about: Feature Requests, Questions, configuration or deployment problems should be discussed in the forum. + - name: Security-related issues + url: https://vikunja.io/contact/#security + about: For security concerns, please send a mail to security@vikunja.io instead of opening a public issue. + - name: Chat on Matrix + url: https://matrix.to/#/#vikunja:matrix.org + about: Please ask any quick questions here. + - name: Translations + url: https://crowdin.com/project/vikunja + about: Any problems or requests for new languages about translations should be handled in crowdin. diff --git a/frontend/.github/workflows/lockdown.yml b/frontend/.github/workflows/lockdown.yml new file mode 100644 index 000000000..2f5baa96d --- /dev/null +++ b/frontend/.github/workflows/lockdown.yml @@ -0,0 +1,23 @@ +name: 'Repo Lockdown' + +on: + pull_request_target: + types: opened + +permissions: + issues: write + pull-requests: write + +jobs: + action: + runs-on: ubuntu-latest + steps: + - uses: dessant/repo-lockdown@v4 + with: + pr-comment: 'Hi! Thank you for your contribution. + + This repo is only a mirror and unfortunately we can''t accept PRs made here. Please re-submit your changes to [our Gitea instance](https://kolaente.dev/vikunja/frontend/pulls). + + Also check out the [contribution guidelines](https://vikunja.io/docs/development/#pull-requests). + + Thank you for your understanding.' \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 000000000..ace110b86 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,41 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +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 +.vscode +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* +!rollup.sw.js + + +# Local Netlify folder +.netlify + +# histoire +.histoire \ No newline at end of file diff --git a/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 000000000..0d151128c --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1,14 @@ +fetch-timeout=100000 + +# pnpm settings +# The following settings prepare for the new default value of pnpm 8 +# they can be removed directly after having moved to pnpm 8 +auto-install-peers=true +dedupe-peer-dependents=true +resolve-peers-from-workspace-root=true +save-workspace-protocol=rolling +resolution-mode=lowest-direct +publishConfig.linkDirectory=true + +# remove some time after having moved to pnpm 8 +use-lockfile-v6=true diff --git a/frontend/.nvmrc b/frontend/.nvmrc new file mode 100644 index 000000000..18c284172 --- /dev/null +++ b/frontend/.nvmrc @@ -0,0 +1 @@ +20.11.0 \ No newline at end of file diff --git a/frontend/.vscode.example/extensions.json b/frontend/.vscode.example/extensions.json new file mode 100644 index 000000000..aa9ea3e14 --- /dev/null +++ b/frontend/.vscode.example/extensions.json @@ -0,0 +1,14 @@ +{ + "recommendations": [ + "codezombiech.gitignore", + "dbaeumer.vscode-eslint", + "editorconfig.editorconfig", + "vue.volar", + "vue.vscode-typescript-vue-plugin", + "lokalise.i18n-ally", + "mgmcdermott.vscode-language-babel", + "mikestead.dotenv", + "Syler.sass-indented", + "zixuanchen.vitest-explorer" + ] +} \ No newline at end of file diff --git a/frontend/.vscode.example/settings.json b/frontend/.vscode.example/settings.json new file mode 100644 index 000000000..44f4fd4f2 --- /dev/null +++ b/frontend/.vscode.example/settings.json @@ -0,0 +1,34 @@ +{ + "eslint.packageManager": "pnpm", + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll": true + }, + "eslint.format.enable": true, + "[javascript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[typescript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + + // https://eslint.vuejs.org/user-guide/#editor-integrations + "eslint.validate": [ + "javascript", + "javascriptreact", + "vue" + ], + + "volar.completion.preferredTagNameCase": "pascal", + + // disable vetur in case it is installed + "vetur.validation.template": false, + + // i18n ally + "i18n-ally.localesPaths": [ + "src/i18n/lang" + ], + "i18n-ally.sortKeys": true, + "i18n-ally.keepFulfilled": true, + "i18n-ally.keystyle": "nested" +} \ No newline at end of file diff --git a/frontend/CHANGELOG.md b/frontend/CHANGELOG.md new file mode 100644 index 000000000..8de895376 --- /dev/null +++ b/frontend/CHANGELOG.md @@ -0,0 +1,6023 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres +to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +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.22.1] - 2024-01-28 + +### Bug Fixes + +* *(auth)* Correctly construct redirect url from current window href +* *(ci)* Use working crowdin image +* *(ci)* Use working image for crowdin update step +* *(ci)* Use working crowdin image +* *(color picker)* When picking a color, the color picker should not be black afterwards +* *(editor)* List icons +* *(editor)* Use higher-contrast colors for links and code +* *(editor)* Don't bubble up changes when no changes were made +* *(editor)* Focus the editor when clicking on the whole edit container +* *(editor)* Render images without crashing +* *(editor)* Use a stable image id to prevent constant re-rendering +* *(editor)* Use manual input prompt instead of window.prompt +* *(filter)* Validate filter title field after loading a filter for edit +* *(kanban)* Ensure text and icon color only depends on the card background, not on the color scheme +* *(kanban)* Make sure the checklist summary uses the correct text color +* *(kanban)* Make sure spacing between assignees and other task details works out evenly +* *(labels)* Make color reset work +* *(labels)* Text and background combination in dark mode +* *(notifications)* Unread indicator spacing +* *(notifications)* Always left-align notification text +* *(notifications)* Read indicator size +* *(openid)* Use the full path when building the redirect url, not only the host +* *(openid)* Use the calculated redirect url when authenticating with openid providers +* *(project)* Always use the appropriate color for task estimate during deletion dialoge +* *(quick add magic)* Ensure month is removed from task text +* *(table view)* Make sure popup does not overlap +* *(task)* Don't immediately re-trigger date change when nothing changed +* *(task)* Bubble date changes from the picker up +* *(task)* Update due date when marking a task done +* *(task)* Don't show edit button when the user does not have permission to edit the task +* *(task)* Don't show assignee edit buttons and input when the user does not have the permission to edit +* *(tasks)* Make sure tasks show up if their parent task is not available in the current view +* *(tasks)* Don't load tasks multiple times when viewing list or gantt view +* *(test)* Make date assertion not brittle +* Lint ([5e991f3](5e991f3024f7856420614171ec66468eb2e2df63)) + + +### Dependencies + +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v2 (#3862) +* *(deps)* Update pnpm to v8.14.0 +* *(deps)* Update dependency vue to v3.4.7 (#3873) +* *(deps)* Update dependency axios to v1.6.5 (#3871) +* *(deps)* Update dependency date-fns to v3 (#3857) +* *(deps)* Update dev-dependencies (#3861) +* *(deps)* Update dependency @kyvg/vue3-notification to v3.1.3 (#3864) +* *(deps)* Update dependency node to v20.11.0 +* *(deps)* Update dependency vue-i18n to v9.9.0 (#3880) +* *(deps)* Update dependency dompurify to v3.0.8 (#3881) +* *(deps)* Update dependency floating-vue to v2.0.0 (#3883) +* *(deps)* Update tiptap to v2.1.15 (#3884) +* *(deps)* Update vueuse to v10.7.1 (#3872) +* *(deps)* Update pnpm to v8.14.1 (#3885) +* *(deps)* Update sentry-javascript monorepo to v7.93.0 (#3859) +* *(deps)* Update dependency floating-vue to v5 (#3887) +* *(deps)* Update dependency vue to v3.4.8 (#3886) +* *(deps)* Update node.js to v20.11 (#3888) +* *(deps)* Increase renovate timeout +* *(deps)* Update tiptap to v2.1.16 (#3892) +* *(deps)* Pin node.js (#3895) +* *(deps)* Update dev-dependencies +* *(deps)* Update dependency sortablejs to v1.15.2 +* *(deps)* Update vueuse to v10.7.2 +* *(deps)* Update dependency floating-vue to v5.1.0 +* *(deps)* Update dependency vue to v3.4.14 +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies (major) (#3890) +* *(deps)* Update dependency floating-vue to v5.1.1 +* *(deps)* Update dependency floating-vue to v5.2.0 +* *(deps)* Update dev-dependencies +* *(deps)* Update dependency vue to v3.4.15 +* *(deps)* Update dependency happy-dom to v13.2.0 +* *(deps)* Update sentry-javascript monorepo to v7.94.1 +* *(deps)* Update dependency vite to v5.0.12 +* *(deps)* Update dependency date-fns to v3.3.0 +* *(deps)* Update dev-dependencies +* *(deps)* Update pnpm to v8.14.2 +* *(deps)* Update dependency date-fns to v3.3.1 +* *(deps)* Update dev-dependencies to v6.19.1 +* *(deps)* Update pnpm to v8.14.3 +* *(deps)* Update sentry-javascript monorepo to v7.95.0 +* *(deps)* Update dev-dependencies +* *(deps)* Update dependency axios to v1.6.6 +* *(deps)* Update dev-dependencies +* *(deps)* Update sentry-javascript monorepo to v7.97.0 +* *(deps)* Update sentry-javascript monorepo to v7.98.0 +* *(deps)* Update dependency axios to v1.6.7 +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies + +### Features + +* *(reminders)* Show reminders in notifications bar +* Datepicker locale support (#3878) ([92f7d9d](92f7d9ded5d56b95ba7d647eba01372f6ef682ad)) + + +### Miscellaneous Tasks + +* *(i18n)* Update translations via Crowdin +* *(i18n)* Update translations via Crowdin +* *(i18n)* Update translations via Crowdin +* *(perf)* Import some modules dynamically (#3179) +* Only show webhooks overview table when there are webhooks ([326bfb5](326bfb557ab359fa154b163f5dd957928f46d3ec)) +* Only show webhooks overview table when there are webhooks ([631b02d](631b02d2eedc4a403b7c55f1c56ceaeca5379bf5)) + +## [0.22.0] - 2023-12-19 + +### Bug Fixes + +* *(api tokens)* Expiry of tokens in a number of days +* *(api tokens)* Lint +* *(api tokens)* Make deletion of old tokens work +* *(api tokens)* Show a token after it was created +* *(attachments)* Layout and coloring in dark mode +* *(auth)* Correctly redirect the user to the last visited page after login +* *(auth)* Silently discard invalid auth tokens and log the user out +* *(background)* Unsplash author credit in dark mode +* *(build)* Don't download Puppeteer when building for prod +* *(ci)* Pin used node version to 20.5 to avoid build issues +* *(ci)* Use correct secret key to push +* *(docker)* Set correct default value for custom logo url +* *(editor)* Actions styling +* *(editor)* Actually populate loaded data into the editor +* *(editor)* Add icons for clearing marks and nodes +* *(editor)* Add missing dependencies for commands +* *(editor)* Add missing dependency +* *(editor)* Add workaround for checklist tiptap bug +* *(editor)* Alignment and focus states +* *(editor)* Allow checking a checkbox even when the editor is set to read only +* *(editor)* Always set mode to preview after save +* *(editor)* Always show placeholder when empty +* *(editor)* Change description when switching between tasks +* *(editor)* Check for almost empty editor value +* *(editor)* Check for empty content +* *(editor)* Checklist button icon +* *(editor)* Commands list in dark mode +* *(editor)* Correctly resolve images in descriptions +* *(editor)* Don't check parent checkbox when child label was clicked +* *(editor)* Don't crash when the component isn't completely mounted +* *(editor)* Don't create empty "blob" files when pasting images +* *(editor)* Don't prevent typing editor focus shortcut when other instance of an editor is focused already +* *(editor)* Don't use global shortcut when anything is focused +* *(editor)* Duplicate name +* *(editor)* Duplicate name for extension +* *(editor)* Focus state +* *(editor)* Image button icon +* *(editor)* Image paste handling +* *(editor)* Keep editor open when emptying content from the outside +* *(editor)* Keep editor open when emptying content from the outside (#3852) +* *(editor)* Lint +* *(editor)* Lint +* *(editor)* List styling +* *(editor)* Make checklist indicator work again +* *(editor)* Make initial editor mode (preview/edit) work +* *(editor)* Make tests work with changed structure +* *(editor)* Permission check for table editing +* *(editor)* Placeholder showing or not showing +* *(editor)* Reset on empty +* *(editor)* Show editor if there is no content initially +* *(editor)* Use edit enable +* *(editor)* Use modelValue directly to update values in the editor +* *(filter)* Don't immediately re-trigger prepareFilter +* *(filter)* Don't prevent entering date math strings +* *(filter)* Don't show other filters in project selection in saved filter +* *(filter)* Make other filters are not available for project selection +* *(filters)* Don't allow marking a filter as favorite +* *(filters)* Incorrect translation string +* *(filters)* Infinite loop when creating filters with dates (#3061) +* *(gantt)* Open task with double click from the gantt chart +* *(gantt)* Update the gantt view when switching between projects +* *(i18n)* Add upload files config +* *(i18n)* Fall back to browser language if the configured user language is invalid +* *(i18n)* Hungarian translation +* *(kanban)* Check if doneBucketId is set +* *(kanban)* Make sure kanban cards always have text color matching their background +* *(kanban)* Opening a task from the kanban board and then reloading the page should not crash everything when then navigating back +* *(list view)* Align nested subtasks with the parent text +* *(menu)* Separate favorite and saved filter projects from other projects +* *(navigation)* Don't hide color bubble in navigation on touch devices +* *(navigation)* Show filter settings dropdown +* *(project)* Correctly show project color next to project title in list view +* *(projects)* Don't suggest to create a new task in an empty filter +* *(quick actions)* Always open quick actions with hotkey, even if other inputs are focused +* *(quick actions)* Always search for projects +* *(quick actions)* Don't show projects when searching for labels or tasks +* *(quick actions)* Invalid class prop +* *(quick actions)* Project filter +* *(quick actions)* Project search +* *(quick actions)* Search for tasks within a project when specifying a project with quick add magic +* *(quick add magic)* Annually and variants spelling +* *(quick add magic)* Headline +* *(quick add magic)* Ignore common task indention when adding multiple tasks at once +* *(quick add magic)* Repeating intervals in words +* *(settings)* Allow removing the default project via settings +* *(settings)* Move overdue remindeer time below +* *(sw)* Remove debug option via env as it would not be replaced correctly in prod builds +* *(task)* Correct spacing to task and project title +* *(task)* Correctly build task identifier +* *(task)* Don't reload the kanban board when opening a task +* *(task)* Don't reload the kanban board when opening a task +* *(task)* Duplicate attribute +* *(task)* Make sure the modal close button is not overlapped with the title field (#3256) +* *(task)* Priority label sizing and positioning in different environments +* *(task)* Priority label spacing +* *(task)* Remove wrong repeat types +* *(task)* Show related tasks form with shortcut even when there are already other related tasks +* *(task)* Use editor as preview first, then check for edit +* *(task)* Use empty description helper everywhere +* *(tasks)* Don't use the filter for upcoming when one is set for the home page +* *(tasks)* Favorited sub tasks are not shown in favorites pseudo list +* *(tasks)* Ignore empty lines when adding multiple tasks at once +* *(tasks)* Make sure tasks are fully clickable +* *(tasks)* Play pop sound directly and not from store +* *(tasks)* Prevent endless references +* *(tasks)* Reset page number when applying filters +* *(tasks)* Update api route +* *(tasks)* Update sub task relations in list view after they were created +* *(tasks)* Use mousedown event instead of click to close the task popup +* *(test)* Use correct file input +* *(user)* Allow openid users to request their deletion +* *(webhooks)* Styling* Correctly resolve kanban board in the background when moving a task ([8902c15](8902c15f7e9590da075e860f3d35939169ee246a)) +* Don't render route modal when no properties are defined ([b1fe3fe](b1fe3fe29b3f7c8e3f1fa279b74f674bc63db232)) +* Don't try to load buckets for project id 0 ([15ecafd](15ecafdf04391139da27f38dac9ed915d6220a9a)) +* Lint ([218d724](218d72494a088b612e720ca2e9b566c0d3446579)) +* Lint ([337c3e5](337c3e5e3e06a9e4928bebffda2e2f223fef398b)) +* Lint ([7f2d921](7f2d92138e302188d6000632b4bc9bf053194dee)) +* Lint ([99e2161](99e2161c09b1e2b08f3a907bd2e3ad2c71da87d3)) +* Lint ([c01957a](c01957aae24696812c80b18c77137b5030fc757a)) +* Tests ([f6d1db3](f6d1db35957c4c2fda7a58539a0a39db1b683ccb)) + + +### Dependencies + +* *(deps)* Remove unused dependencies +* *(deps)* Update dependencies +* *(deps)* Update dependencies +* *(deps)* Update dependency @fortawesome/vue-fontawesome to v3.0.5 (#3815) +* *(deps)* Update dependency @github/hotkey to v2.1.0 (#3766) +* *(deps)* Update dependency @github/hotkey to v2.1.1 (#3770) +* *(deps)* Update dependency @github/hotkey to v2.2.0 (#3809) +* *(deps)* Update dependency @github/hotkey to v2.3.0 (#3810) +* *(deps)* Update dependency @github/hotkey to v2.3.1 (#3845) +* *(deps)* Update dependency @github/hotkey to v3 +* *(deps)* Update dependency @infectoone/vue-ganttastic to v2.2.0 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.12.2 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v1 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v1.5.0 (#3812) +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v1.6.0 +* *(deps)* Update dependency @kyvg/vue3-notification to v3 +* *(deps)* Update dependency @kyvg/vue3-notification to v3.1.2 +* *(deps)* Update dependency @types/is-touch-device to v1.0.1 (#3786) +* *(deps)* Update dependency @types/is-touch-device to v1.0.2 (#3816) +* *(deps)* Update dependency @types/lodash.clonedeep to v4.5.8 (#3787) +* *(deps)* Update dependency @types/lodash.clonedeep to v4.5.9 (#3817) +* *(deps)* Update dependency @types/node to v18.17.0 +* *(deps)* Update dependency @types/node to v20 (#3796) +* *(deps)* Update dependency @types/sortablejs to v1.15.4 (#3788) +* *(deps)* Update dependency @types/sortablejs to v1.15.5 (#3818) +* *(deps)* Update dependency @vueuse/core to v10.3.0 +* *(deps)* Update dependency @vueuse/core to v10.4.0 (#3723) +* *(deps)* Update dependency axios to v1.5.1 +* *(deps)* Update dependency axios to v1.6.0 (#3801) +* *(deps)* Update dependency axios to v1.6.2 (#3820) +* *(deps)* Update dependency caniuse-lite to v1.0.30001514 +* *(deps)* Update dependency codemirror to v5.65.14 +* *(deps)* Update dependency dayjs to v1.11.10 (#3753) +* *(deps)* Update dependency dompurify to v3.0.5 +* *(deps)* Update dependency dompurify to v3.0.6 (#3754) +* *(deps)* Update dependency eslint to v8.52.0 (#3785) +* *(deps)* Update dependency highlight.js to v11.9.0 (#3763) +* *(deps)* Update dependency lowlight to v2.9.0 (#3789) +* *(deps)* Update dependency marked to v5.1.1 +* *(deps)* Update dependency marked to v9 +* *(deps)* Update dependency marked to v9.1.0 (#3760) +* *(deps)* Update dependency marked to v9.1.1 (#3768) +* *(deps)* Update dependency marked to v9.1.2 (#3774) +* *(deps)* Update dependency node (#3797) +* *(deps)* Update dependency node (#3834) +* *(deps)* Update dependency node to v18.18.0 +* *(deps)* Update dependency node to v18.18.1 +* *(deps)* Update dependency node to v18.18.2 +* *(deps)* Update dependency pinia to v2.1.6 +* *(deps)* Update dependency pinia to v2.1.7 (#3771) +* *(deps)* Update dependency sass to v1.69.2 (#3767) +* *(deps)* Update dependency sortablejs to v1.15.1 (#3841) +* *(deps)* Update dependency ufo to v1.2.0 +* *(deps)* Update dependency ufo to v1.3.1 +* *(deps)* Update dependency ufo to v1.3.2 (#3824) +* *(deps)* Update dependency vite to v4.4.2 +* *(deps)* Update dependency vite to v4.4.3 +* *(deps)* Update dependency vue to v3.3.10 (#3843) +* *(deps)* Update dependency vue to v3.3.13 +* *(deps)* Update dependency vue to v3.3.5 (#3782) +* *(deps)* Update dependency vue to v3.3.6 (#3784) +* *(deps)* Update dependency vue to v3.3.7 (#3799) +* *(deps)* Update dependency vue to v3.3.8 (#3814) +* *(deps)* Update dependency vue to v3.3.9 (#3837) +* *(deps)* Update dependency vue-i18n to v9.5.0 +* *(deps)* Update dependency vue-i18n to v9.6.0 (#3800) +* *(deps)* Update dependency vue-i18n to v9.6.1 (#3803) +* *(deps)* Update dependency vue-i18n to v9.6.5 (#3807) +* *(deps)* Update dependency vue-i18n to v9.7.0 (#3825) +* *(deps)* Update dependency vue-i18n to v9.8.0 (#3833) +* *(deps)* Update dependency vue-router to v4.2.5 (#3755) +* *(deps)* Update dessant/repo-lockdown action to v4 +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies (#3721) +* *(deps)* Update dev-dependencies (#3726) +* *(deps)* Update dev-dependencies (#3740) +* *(deps)* Update dev-dependencies (#3746) +* *(deps)* Update dev-dependencies (#3747) +* *(deps)* Update dev-dependencies (#3757) +* *(deps)* Update dev-dependencies (#3761) +* *(deps)* Update dev-dependencies (#3769) +* *(deps)* Update dev-dependencies (#3776) +* *(deps)* Update dev-dependencies (#3780) +* *(deps)* Update dev-dependencies (#3793) +* *(deps)* Update dev-dependencies (#3802) +* *(deps)* Update dev-dependencies (#3806) +* *(deps)* Update dev-dependencies (#3811) +* *(deps)* Update dev-dependencies (#3813) +* *(deps)* Update dev-dependencies (#3821) +* *(deps)* Update dev-dependencies (#3826) +* *(deps)* Update dev-dependencies (#3828) +* *(deps)* Update dev-dependencies (#3829) +* *(deps)* Update dev-dependencies (#3835) +* *(deps)* Update dev-dependencies (#3842) +* *(deps)* Update dev-dependencies (#3846) +* *(deps)* Update dev-dependencies (#3856) +* *(deps)* Update dev-dependencies (major) (#3741) +* *(deps)* Update dev-dependencies (major) (#3827) +* *(deps)* Update dev-dependencies to v6 +* *(deps)* Update flake +* *(deps)* Update font awesome to v6.4.2 +* *(deps)* Update font awesome to v6.5.1 (#3839) +* *(deps)* Update lockfile +* *(deps)* Update lockfile +* *(deps)* Update lockfile +* *(deps)* Update lockfile +* *(deps)* Update lockfile +* *(deps)* Update lockfile +* *(deps)* Update node.js to v18.17.0 +* *(deps)* Update node.js to v18.17.1 +* *(deps)* Update node.js to v20.7 (#3736) +* *(deps)* Update node.js to v20.8 (#3756) +* *(deps)* Update pnpm to v8.10.2 +* *(deps)* Update pnpm to v8.10.5 +* *(deps)* Update pnpm to v8.11.0 +* *(deps)* Update pnpm to v8.12.1 +* *(deps)* Update pnpm to v8.6.12 +* *(deps)* Update pnpm to v8.6.7 +* *(deps)* Update pnpm to v8.6.8 +* *(deps)* Update pnpm to v8.6.9 +* *(deps)* Update pnpm to v8.7.0 +* *(deps)* Update pnpm to v8.8.0 +* *(deps)* Update pnpm to v8.9.0 +* *(deps)* Update pnpm to v8.9.2 +* *(deps)* Update sentry-javascript monorepo to v7.58.0 +* *(deps)* Update sentry-javascript monorepo to v7.58.1 +* *(deps)* Update sentry-javascript monorepo to v7.59.1 +* *(deps)* Update sentry-javascript monorepo to v7.59.2 +* *(deps)* Update sentry-javascript monorepo to v7.59.3 +* *(deps)* Update sentry-javascript monorepo to v7.60.0 +* *(deps)* Update sentry-javascript monorepo to v7.73.0 +* *(deps)* Update sentry-javascript monorepo to v7.74.0 (#3772) +* *(deps)* Update sentry-javascript monorepo to v7.74.1 (#3778) +* *(deps)* Update sentry-javascript monorepo to v7.75.1 (#3798) +* *(deps)* Update sentry-javascript monorepo to v7.77.0 (#3805) +* *(deps)* Update sentry-javascript monorepo to v7.80.1 (#3819) +* *(deps)* Update sentry-javascript monorepo to v7.85.0 (#3831) +* *(deps)* Update sentry-javascript monorepo to v7.88.0 +* *(deps)* Update sub-dependencies +* *(deps)* Update tiptap to v2.1.12 (#3790) +* *(deps)* Update tiptap to v2.1.13 (#3840) +* *(deps)* Update vueuse to v10.5.0 (#3762) +* *(deps)* Update vueuse to v10.6.1 (#3822) +* *(deps)* Update vueuse to v10.7.0 (#3844) + +### Features + +* *(api tokens)* Add basic api token overview +* *(api tokens)* Add deleting api tokens +* *(api tokens)* Add token creation form +* *(api tokens)* Allow custom selection of expiry dates +* *(api tokens)* Allow selecting all permissions +* *(api tokens)* Format permissions and groups human-readable +* *(api tokens)* Show warning if token has expired +* *(api tokens)* Validate title field when creating a new token +* *(assignees)* Improve avatar list consistency +* *(editor)* Add all slash commands +* *(editor)* Add bubble menu +* *(editor)* Add code highlighting +* *(editor)* Add command list example +* *(editor)* Add comment when pressing ctrl enter +* *(editor)* Add placeholder +* *(editor)* Add proper description for all buttons +* *(editor)* Add tests to check rendering of task description +* *(editor)* Add tooltips for everything +* *(editor)* Add uploading an image on save +* *(editor)* Allow passing placeholder down +* *(editor)* Edit mode +* *(editor)* Edit shortcut to set focus into the editor +* *(editor)* Enable table +* *(editor)* Image upload +* *(editor)* Improve overall styling +* *(editor)* Make image upload work via slash command +* *(editor)* Make task list work +* *(editor)* Mark a checkbox item as done when clicking on its text +* *(editor)* Move all editor related components into one folder +* *(editor)* Only load attachment images when rendering is done +* *(editor)* Open links when clicking on them +* *(editor)* Properly bubble changes when they are made +* *(editor)* Resolve and load attachment images from content +* *(editor)* Save when pressing ctrl enter +* *(gantt)* Implement dynamic sizing on small date ranges (#3750) +* *(i18n)* Add Slovene language for selection in the ui +* *(i18n)* Add arabic to list of selectable languages +* *(i18n)* Add hungarian translation for selection +* *(i18n)* Run translation update directly +* *(i18n)* Update crowdin sync to use v2 api +* *(i18n)* Update translations only once a day +* *(kanban)* Add icon for bucket collapse +* *(kanban)* Add setting for default bucket +* *(kanban)* Save done bucket with project instead of bucket +* *(labels)* Assign random color when creating labels +* *(list view)* Show subtasks nested +* *(migration)* Proper wording for async migration +* *(notifications)* Add option to mark all as read +* *(quick actions)* Show done tasks last +* *(quick actions)* Show labels as labels and tasks with all of their details +* *(quick actions)* Show task identifier +* *(quick actions)* Show tasks for a label when selecting it +* *(quick add magic)* Allow using the project identifier via quick add magic +* *(task)* Add more tests +* *(task)* Group related task action buttons +* *(task)* Immediately set focus on the task search input when opening the related tasks menu +* *(task)* Move task priority to the front when showing tasks inline +* *(task)* Save currently opened task with control/meta + s +* *(tasks)* Make the whole task in list view clickable +* *(tasks)* Update due date text every minute +* *(webhooks)* Add form validation* Allow custom logo via environment variable (#3685) ([cade3df](cade3df3e9a7eca8e0aa9d1553dd5597f0f5a8a2)) +* *(webhooks)* Add webhook management form +* Add demo mode warning message ([ed8fb71](ed8fb71ff0b05860f320e2a1fe6c3cb29ed2889a)) +* Add setting for default bucket ([04ba101](04ba1011cc3042f657ddb40ee727caf455db8b64)) +* Api tokens ([28f2551](28f2551d87b99c59055a4909195e435dbd9794b6)) +* Improve error message for invalid API url ([725fd1a](725fd1ad467fb988810cb23f12d372af236bd21d)) +* Move from easymde to tiptap editor (#2222) ([26fc9b4](26fc9b4e4f8b96616385f4ca0a77a0ff7ee5eee5)) +* Quick actions improvments ([47d5890](47d589002ccef5047a25ea3ad8ebe582c3b0bbc6)) +* Webhooks (#3783) ([5d991e5](5d991e539bb3a249447847c13c92ee35d356b902)) + +### Miscellaneous Tasks + +* *(ci)* Sign drone config +* *(editor)* Add break icon +* *(editor)* Add horizontal line icon +* *(editor)* Cleanup +* *(editor)* Cleanup unused options +* *(editor)* Format +* *(editor)* Make sure all tiptap dependencies are updated as one +* *(editor)* Move checklist to the other lists +* *(editor)* Remove converting markdown +* *(editor)* Remove marked usages +* *(editor)* Remove old editor component +* *(editor)* Remove unused components +* *(editor)* Use typed props definition +* *(filter)* Remove debug log +* *(quick actions)* Format* Provide better error messages when refreshing user info fails ([d535879](d5358793de7fc53795329382222e5f3bafc7fba1)) +* Add pr lockdown ([07b1e9a](07b1e9a6b76eb7d92640e00a1dec4294efd2947b)) +* Cleanup ([a4a2b95](a4a2b95dc7eaad5fe313884eec0d22d7ae5f85c1)) +* Debug ([3cb1e7d](3cb1e7dede659acd19410e0611346e0f582f2ff3)) +* Format ([c3f85fc](c3f85fcb1988603a58104552b35101b13e93b06e)) +* Improve checking for API url '/' suffix (#121) ([311b1d7](311b1d7594cfd03be4d998f4aead041a8ca63f8c)) +* Include version json string in release zip ([c4adcf4](c4adcf4655550214ae795d941eb51878f34cedeb)) +* Update flake ([64c90c7](64c90c7fe8a77ded21778a798f18862fe966bd1a)) +* Update lockfile ([9f82ec4](9f82ec4162151ba32f329cb8e335eff6b21cebd4)) + +### Other + +* *(other)* [skip ci] Updated translations via Crowdin + +## [0.21.0] - 2023-07-07 + +### Bug Fixes + +* *(Expandable)* Spelling +* *(building)* Let the compiler ignore props interface +* *(ci)* Always pull latest unstable api image for testing +* *(ci)* Directly build docker images and not use releases to avoid caching issues +* *(ci)* Disable puppeteer chrome download +* *(docker)* Copy patches prior to installing dependencies so that the installation actually works +* *(docker)* Don't set nginx worker rlimit +* *(filters)* Load projects after creating a filter +* *(filters)* Load projects after deleting a filter +* *(filters)* Load projects after updating a filter +* *(gantt)* Only update today value when changing to the gantt chart view +* *(i18n)* OrderedList translationid +* *(i18n)* Typo +* *(kanban)* Decrease task count per bucket when deleting a task +* *(kanban)* Don't export buckets as readonly because that makes it impossible to update them, even from within the store +* *(link share)* Default share view should be list, not project +* *(link share)* Redirect to list view after authenticating +* *(navigation)* Favorites project +* *(navigation)* Hide archived subprojects +* *(navigation)* Hide left ul border +* *(navigation)* Highlight saved filters in project view and prevent them from being dragged around +* *(navigation)* Hover state of other menu items +* *(navigation)* Make marking a project as favorite work +* *(navigation)* Make sure the Favorites project shows up when marking or unmarking a task as favorite +* *(navigation)* Make sure updating a project's state works for sub projects as well. +* *(navigation)* Make the styles work again +* *(navigation)* Menu item overflow +* *(navigation)* Nav item width for items without sub projects +* *(navigation)* Show text ellipsis for very long project titles +* *(navigation)* Sidebar top spacing +* *(navigation)* Watcher +* *(project)* Correctly load background when switching from or to a project view +* *(project)* Don't try to read title of undefined project +* *(project)* Duplicate a project without new parent +* *(project)* Make sure the correct tasks are loaded when switching between projects +* *(project)* Set maxRight on projects after opening a task +* *(projects)* Make sure the project hierarchy is properly updated when moving projects between parents +* *(projects)* Update project duplicate api definitions +* *(quick add magic)* Cleanup all assignee properties +* *(quick add magic)* Date parsing with a date at the beginning +* *(quick add magic)* Don't replace the prefix in every occurrence when it is present in the matched part +* *(quick add magic)* Use the project user service to find assignees for quick add magic +* *(reminders)* Align remove icon with the rest +* *(reminders)* Assignment to const when changing a reminder +* *(reminders)* Custom relative highlight now only when a custom relative reminder was actually selected +* *(reminders)* Don't assigne the task +* *(reminders)* Don't assume 30 days are always a month +* *(reminders)* Don't sync negative relative reminder amounts in ui +* *(reminders)* Duplicate reminder for each change +* *(reminders)* Flatpickr styling improvements +* *(reminders)* Properly parse relative reminders which don't have an amount +* *(reminders)* Set date over relative reminder +* *(reminders)* Style flatpickr so that it blends in more +* *(repeat)* Prevent disappearing repeat mode settings when modes other than default repeat mode were selected +* *(sentry)* Don't fail the build when sentry upload fails +* *(sentry)* Use correct environment from vite env mode +* *(settings)* Don't try to sort timezones if there are none +* *(task detail view)* Make project display show the task's project +* *(task)* Break long task titles after 4 lines only +* *(task)* Call getting task identifier directly instead of using model function +* *(task)* Make an attachment cover image +* *(task)* Repeat mode now saves correctly +* *(tests)* Make sure the task is created with a bucket +* *(tests)* New project input field +* *(tests)* Project archived filter checkbox selector +* *(tests)* Wait for request instead of fixed time +* *(user)* Fix flickering of default settings +* *(user)* Lint* Fix comment +* *(user)* Set the language when saving +* Add await ([9d9fb95](9d9fb959d8f1c4a12110f1a988115116085b6aaf)) +* Add default for level ([9402344](9402344b7ea70359c592412b6c341897e45c6069)) +* Add interval to uses of useNow so that it uses less resources ([b77c7c2](b77c7c2f45495a0fe6d132b5f569e807074c6d12)) +* Add more padding to the textarea ([dfa6cd7](dfa6cd777bc5d03cf88d62db9008aa0b366aa806)) +* Add spacing between checkbox and title of related task ([62825d2](62825d2e6409e08ab3229bf693ed068198e18085)) +* Allow icon changes configuration via env (#3567) ([57218d1](57218d14548bf1d4cd59f6976e84cf178023305d)) +* Avoid crashing browser processes during tests ([7b05ed9](7b05ed9d3d24e07a6535f2462d215c47b6650be1)) +* Bottom margin of project header ([1a94496](1a9449680114212eeb93be2aba3f10c416f67e78)) +* Bubble changes from the editor immediately and move the delay to callers ([f4a7943](f4a79436809d13e1d2c5337f79358c15310d08d2)) +* Checkbox label size based on icon ([fd699ad](fd699ad777c47764b35345b7ec18a854957ff5d1)) +* Clarify user search setting ([ae025e3](ae025e30c659d43cce1e3f8361bd1c4c7cb860da)) +* Cleanup unused translation strings ([aaa9d55](aaa9d553d080a83a9fd1bcdece366fb5832831f1)) +* Collapsing child projects ([2250918](225091864f9088a07120cd3d36918f3060d57d30)) +* Correctly sync filters on upcoming tasks page ([faa6298](faa62985dff877afc54c3510be8d27d493717780)) +* Disable autocomplete in assignee search ([64f9f4f](64f9f4fd88a513cbc401aacbeab87695bb9f55bf)) +* Don't allow creating a new label from filter view ([4c969f0](4c969f0a427e98b491c49646aaf19e19cf9ec924)) +* Don't require variant prop on loading component as it already has a default one set ([01ac84c](01ac84ce1eda1de79fd752792115a71cb5c15698)) +* Don't set the current project when setting a project ([31b7c1f](31b7c1f217532bf388ba95a03f469508bee46f6a)) +* Don't show > for top-level projects ([03f4d0b](03f4d0b8bcba90b19302d6c6d2fbb92460b59957)) +* Don't show child projects when the project is only a favorite ([0a17df8](0a17df87e950b8043578dbb7e9f12d5937802169)) +* Don't try to convert a null date ([4ba02eb](4ba02ebbb6be4b96a42688b3ec8f29fe923aee0b)) +* Don't try to map data from empty responses ([a118580](a11858070496614c492da321fe461b72c31afe5a)) +* Don't try to map non-array data ([813d2b5](813d2b56a06cbd28a1bf0d01b64685a1b49188d0)) +* Don't try to set a user language if none is saved ([68fd469](68fd4698ac443345dc7dbbf8cfebf76ec467b6ec)) +* Don't try to set config from non-json responses ([7c1934a](7c1934aad0e5fcd0f785896d57efc34c6df935cd)) +* Ensure all matched quick add magic parts are correctly removed from the task ([7b6a13d](7b6a13dd52dfa06e6093ae30adad1b86b66610e1)) +* Ensure same protocol for configured api url (#3303) ([6c999ad](6c999ad14844b4f9ec74dc225895db6a12e4a781)) +* Follow the happy path ([34182b8](34182b8bbb7a7e8eeb0ce698dc6da79785d05fc9)) +* Force usage of @types for flexsearch instead of integrated types ([f60cebf](f60cebf42cb73d9fd2d9fea8de5bbeb96a724d47)) +* Has-pseudo-class polyfill ([4703f9c](4703f9c4d5e3902d0fc389d447aa9a7da2e2dd4a)) +* Ignore ts deprecations for now ([96e2c81](96e2c81b7ef2b7a0ff515dd01d9aeb28429cc0d5)) +* Improve projectView storing and add migration ([842f204](842f204123afc3b9b4633b68de58cffb3af4f912)) +* Improve the "pop" sound a bit ([3643ffe](3643ffe0d0357c89cb3517fafbb0c438188ac88d)) +* Improve tooltip icon contrast ([a6cdf6c](a6cdf6c4bdceb1168f20e9d049c2e66f40c98aa1)) +* Improve tooltip text ([2174608](21746088012f4fe0f750ed5e5cac916d506fb17b)) +* Increase default auto-save timeout to 5 seconds ([f7ba3bd](f7ba3bd08fa9181180f99f4e5ebd5ec916fbcf19)) +* Indention ([e25273d](e25273df4899867ee146159d3d18125d387f8524)) +* Lint ([292c904](292c90425ef96b99671702a0b28d87d660fa53dc)) +* Lint ([4ff0c81](4ff0c81e373696b0505c2c080d558a20071562f3)) +* Lint ([5d59392](5d593925666a09cbfda2f62577deb670033f93fb)) +* Lint ([9ec29ca](9ec29cad300fe1c25cb355fb86e165ca920df511)) +* Lint ([c294f9d](c294f9d28d3e793f8151265d5a16ed2fc53aea92)) +* Lint ([c74612f](c74612f24adeb4aceafe9fc9b3264b1dfe84d128)) +* Lint ([cd2b7fe](cd2b7fe185632253290838e405b8a2666b15ce24)) +* Lint ([ed8de7e](ed8de7e3eb78f6723d5f675cca18c014b252ed64)) +* List view: don't sort tasks after marking one "done" (#3285) ([6870db4](6870db4a72568f183134a6dd2d4af687dd7c839d)) +* Load the correct language ([6593380](6593380013ff6043b846126ac67e6f96442a1c5b)) +* Make check if projects are available work again ([5e65814](5e65814b8c5b37f3962856f2809f7cc85756da1e)) +* Make computed side-effect free ([26bec05](26bec0517417afc52db93f0fdc4c48d47ed5c131)) +* Make sure redirects to a saved view work as intended ([a64c0c1](a64c0c19e5a7da36ae4993fce443e4f37e3a4572)) +* Make sure the unread notifications indicator is correctly positioned ([8b90b45](8b90b45739418f447b885fc9b37438e325f61b32)) +* Make tests work again ([5685890](56858904938126dbfa8ade2e88e3ec6c4fff3a6f)) +* Make type singular ([bc416f2](bc416f282f13d2b81782aba4b0d68b71f26c83e8)) +* Make update available button use the correct text color all the time ([ae2b0f9](ae2b0f97c4bb50d4ff493af2af132f9740d16d49)) +* Missing await ([391992e](391992effbb424a107ff060e7175884740a28c62)) +* Missing variant prop for loading component ([2e9ade1](2e9ade11c3a3b6cb531d053f82a598a5ab851a93)) +* Move parent project child id mutation to store ([26e3d42](26e3d42ed527afd6bf695ba3ad291e1c2b545bba)) +* Move parent project handling out of useProject ([ba452ab](ba452ab88339b9ace987f1a18584a7950e00a776)) +* Move the collapsable placeholder to the button ([1344026](1344026494fe47ac5604bff07b537a2765e840f6)) +* Move types to dev dependencies ([739fe0c](739fe0caa13dc946e1801f290d8ab5f18cdc5faf)) +* Only bind child projects data down ([3eca9f6](3eca9f6180e64f892e94d27eaa192cea780563a0)) +* Only update daytime salutation when switching to home view ([c577626](c5776264c069000efbb62c64dfc2143d5fc4e0df)) +* Passing readonly projects data to navigation ([d85be26](d85be26761240164b6bdcbe0601b46585b74fafa)) +* Properly determine if there are projects ([a2cc9dd](a2cc9ddc8821a4b9b1ee1dd6109d1b3958a06ba6)) +* Rebase readd CustomTransition ([b93639e](b93639e14ecab06496086c3d2cc14f51d8f9f672)) +* Recreate project instead of editing before ([175e31c](175e31ca629660d8d683b35b8e7c8052a62cd17d)) +* Redundant ) ([6c2dc48](6c2dc483a20213f1f238e6224b9ecfb87faa2461)) +* Remove getProjectById and replace all usages of it ([78158bc](78158bcba52d152a2ebf465242e25a55e6764470)) +* Remove leftover suspense ([9d73ac6](9d73ac661fbf9315995c8a1f633708021591d2db)) +* Remove leftovers of childIds ([bbaddb9](bbaddb9406910106b7d476a6550acff025e72655)) +* Remove namespace routes ([10311b7](10311b79df36db44a8e96a446234c3c6d6aa6ec7)) +* Remove namespace store reference ([ad2690b](ad2690b21cfc9ccc658737a726cc6b110089b635)) +* Remove unnecessary fallback ([d414b65](d414b65e7d591f567067ce8085b9934207dc938a)) +* Rename getParentProjects method to make it clear what it does ([39f699a](39f699a61ae91eb93c364137f76b595e7cad7561)) +* Rename list to project for parsing subtasks via indention ([fc8711d](fc8711d6d841d11847cd8567999373145ce3398d)) +* Rename resolveRef ([f14e721](f14e721caf9434ac119f32c5e7f107bfbdd6746c)) +* Return redirect ([7c964c2](7c964c29d487b5bcd2c125f81731e3b37374641a)) +* Return updated project instead of the old one ([4ab5478](4ab547810c77e747e701ea865c13157d51aba461)) +* Review findings ([5fb45af](5fb45afb12479eb135323299409bd91d8be24e39)) +* Review findings ([85ffed4](85ffed4d9a26fc054fee51608bb83ccf2e3032f9)) +* Review findings ([fb14eca](fb14eca6340ac4c761b8f61027662328bf55ade4)) +* Route to create new project ([a5e710b](a5e710bfe594e06262b9ef46fa6b56ad637b8156)) +* Set and use correct type for destructured props ([dbe1ad9](dbe1ad9353e165fd1e314cc72c7a4dece1c47d38)) +* Set vue-ignore ([b6cd424](b6cd424aa30be3bd715c0b7555032fc80149ae7b)) +* Show favorite on hover ([0be83db](0be83db40fa96478bfdb4a69e8a995d6debb6f52)) +* Simplify sort ([85e882c](85e882cc5940067414004dabd01916f559fbd0ff)) +* Sort in store ([46e8258](46e825820c465ebb9f8087e3afe6d74fad8d5159)) +* SortBy type import ([d73b71a](d73b71a097755cdb075955a824c26bbaba222aaf)) +* Spacing ([9162002](9162002e55d9ebfd0a6c8dbe28aab0c15f95b7e2)) +* Style: "favorite" button being shown on projects without hovering ([ee4974a](ee4974a4948012b03adcedd956c0d907c57431c9)) +* Switching to view type now ([060a573](060a573fe9006441131fd98c4618c5d294cf39b7)) +* Tests ([69e94e5](69e94e58c451a5115c713696798f8fcbf8f787b3)) +* Translation string ([f13db92](f13db9268a8862204522a8d68ad7b51edb9d91e1)) +* Tsconfig as per https://github.com/vuejs/tsconfig#configuration-for-node-environments ([05b7063](05b70632c55ce34ee6471cc372334fc6e14c99a0)) +* Tsconfig as per https://github.com/vuejs/tsconfig#configuration-for-node-environments ([ca9fe6f](ca9fe6ff215351c3f4c8de65a333f5cfd5876488)) +* Undefined parent project when none was selected ([6cc11e6](6cc11e64ab392f8e8e69070000a748c04746e550)) +* Undo further nesting of interactive items ([0acf447](0acf44778d0ab2a317bcfb3e89aa0292e2d5c2ed)) +* Update logo change only every hour ([7126576](71265769cefb91be9a51fceff0a04095a9dd7e72)) +* Use correct shortcut to open projects overview ([326b6ed](326b6eda6fce6554ea6e215c681466374657902a)) +* Use menu tag everywhere ([0dd6f82](0dd6f82a0e198056724821c2bb56c6b9807ea451)) +* Use onActivated ([a33fb72](a33fb72ef86112c6f29017bb951ff4e1ee611ed6)) +* Use props destructuring everywhere ([3aa502e](3aa502e07d89314e885c252e1e3d4668fa64059b)) +* Use strict comparison ([91e9eef](91e9eef5829d2a5ae27099fbd54029ed0ca46818)) +* Use the color bubble as handle if the project has a color ([4857080](48570808e55e51751734ddaf4532ad651920d622)) +* Use time constant ([a13c16c](a13c16ca03698a24860f8453cdb231c420d0077b)) +* Wording ([985f998](985f998a821229d03c7d40d1a81f7fbe5121d585)) + + +### Dependencies + +* *(deps)* Install dependencies after rebase +* *(deps)* Pin dependency @tsconfig/node18 to 2.0.0 +* *(deps)* Update all dev dependencies at once per day +* *(deps)* Update caniuse-and-related +* *(deps)* Update caniuse-and-related +* *(deps)* Update dependency @4tw/cypress-drag-drop to v2.2.4 +* *(deps)* Update dependency @cypress/vite-dev-server to v5.0.5 +* *(deps)* Update dependency @cypress/vue to v5.0.5 +* *(deps)* Update dependency @faker-js/faker to v8 +* *(deps)* Update dependency @faker-js/faker to v8.0.1 +* *(deps)* Update dependency @faker-js/faker to v8.0.2 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.10.0 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.11.0 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.12.0 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.12.1 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.9.2 +* *(deps)* Update dependency @intlify/unplugin-vue-i18n to v0.9.3 +* *(deps)* Update dependency @kyvg/vue3-notification to v2.9.1 +* *(deps)* Update dependency @rushstack/eslint-patch to v1.3.0 +* *(deps)* Update dependency @rushstack/eslint-patch to v1.3.1 +* *(deps)* Update dependency @rushstack/eslint-patch to v1.3.2 +* *(deps)* Update dependency @tsconfig/node18 to v18 +* *(deps)* Update dependency @tsconfig/node18 to v2.0.1 +* *(deps)* Update dependency @types/codemirror to v5.60.8 +* *(deps)* Update dependency @types/dompurify to v3 +* *(deps)* Update dependency @types/dompurify to v3.0.1 +* *(deps)* Update dependency @types/dompurify to v3.0.2 +* *(deps)* Update dependency @types/marked to v4.3.0 +* *(deps)* Update dependency @types/marked to v4.3.1 +* *(deps)* Update dependency @types/marked to v5 +* *(deps)* Update dependency @types/node to v18.15.1 +* *(deps)* Update dependency @types/node to v18.15.10 +* *(deps)* Update dependency @types/node to v18.15.11 +* *(deps)* Update dependency @types/node to v18.15.12 +* *(deps)* Update dependency @types/node to v18.15.13 +* *(deps)* Update dependency @types/node to v18.15.2 +* *(deps)* Update dependency @types/node to v18.15.3 +* *(deps)* Update dependency @types/node to v18.15.5 +* *(deps)* Update dependency @types/node to v18.15.6 +* *(deps)* Update dependency @types/node to v18.15.7 +* *(deps)* Update dependency @types/node to v18.15.8 +* *(deps)* Update dependency @types/node to v18.15.9 +* *(deps)* Update dependency @types/node to v18.16.0 +* *(deps)* Update dependency @types/node to v18.16.1 +* *(deps)* Update dependency @types/node to v18.16.10 +* *(deps)* Update dependency @types/node to v18.16.11 +* *(deps)* Update dependency @types/node to v18.16.14 +* *(deps)* Update dependency @types/node to v18.16.16 +* *(deps)* Update dependency @types/node to v18.16.17 +* *(deps)* Update dependency @types/node to v18.16.18 +* *(deps)* Update dependency @types/node to v18.16.19 +* *(deps)* Update dependency @types/node to v18.16.2 +* *(deps)* Update dependency @types/node to v18.16.3 +* *(deps)* Update dependency @types/node to v18.16.4 +* *(deps)* Update dependency @types/node to v18.16.5 +* *(deps)* Update dependency @types/node to v18.16.6 +* *(deps)* Update dependency @types/node to v18.16.7 +* *(deps)* Update dependency @types/node to v18.16.8 +* *(deps)* Update dependency @types/node to v18.16.9 +* *(deps)* Update dependency @types/sortablejs to v1.15.1 +* *(deps)* Update dependency @vitejs/plugin-legacy to v4.0.2 +* *(deps)* Update dependency @vitejs/plugin-legacy to v4.0.3 +* *(deps)* Update dependency @vitejs/plugin-legacy to v4.0.4 +* *(deps)* Update dependency @vitejs/plugin-legacy to v4.0.5 +* *(deps)* Update dependency @vitejs/plugin-vue to v4.1.0 +* *(deps)* Update dependency @vitejs/plugin-vue to v4.2.0 +* *(deps)* Update dependency @vitejs/plugin-vue to v4.2.1 +* *(deps)* Update dependency @vitejs/plugin-vue to v4.2.2 +* *(deps)* Update dependency @vitejs/plugin-vue to v4.2.3 +* *(deps)* Update dependency @vue/eslint-config-typescript to v11.0.3 +* *(deps)* Update dependency @vue/test-utils to v2.3.2 +* *(deps)* Update dependency @vue/test-utils to v2.4.0 +* *(deps)* Update dependency @vue/tsconfig to v0.3.2 +* *(deps)* Update dependency @vue/tsconfig to v0.4.0 +* *(deps)* Update dependency @vueuse/core to v10 +* *(deps)* Update dependency @vueuse/core to v10.0.2 +* *(deps)* Update dependency @vueuse/core to v10.1.0 +* *(deps)* Update dependency @vueuse/core to v10.1.2 +* *(deps)* Update dependency @vueuse/core to v10.2.0 +* *(deps)* Update dependency @vueuse/core to v10.2.1 +* *(deps)* Update dependency axios to v1.3.5 +* *(deps)* Update dependency axios to v1.3.6 +* *(deps)* Update dependency axios to v1.4.0 +* *(deps)* Update dependency caniuse-lite to v1.0.30001465 +* *(deps)* Update dependency caniuse-lite to v1.0.30001468 +* *(deps)* Update dependency caniuse-lite to v1.0.30001470 +* *(deps)* Update dependency caniuse-lite to v1.0.30001473 +* *(deps)* Update dependency caniuse-lite to v1.0.30001477 +* *(deps)* Update dependency caniuse-lite to v1.0.30001479 +* *(deps)* Update dependency caniuse-lite to v1.0.30001481 +* *(deps)* Update dependency caniuse-lite to v1.0.30001486 +* *(deps)* Update dependency caniuse-lite to v1.0.30001487 +* *(deps)* Update dependency caniuse-lite to v1.0.30001489 +* *(deps)* Update dependency caniuse-lite to v1.0.30001500 +* *(deps)* Update dependency caniuse-lite to v1.0.30001508 +* *(deps)* Update dependency caniuse-lite to v1.0.30001511 +* *(deps)* Update dependency codemirror to v5.65.13 +* *(deps)* Update dependency css-has-pseudo to v6 +* *(deps)* Update dependency csstype to v3.1.2 +* *(deps)* Update dependency cypress to v12.10.0 +* *(deps)* Update dependency cypress to v12.11.0 +* *(deps)* Update dependency cypress to v12.12.0 +* *(deps)* Update dependency cypress to v12.13.0 +* *(deps)* Update dependency cypress to v12.14.0 +* *(deps)* Update dependency cypress to v12.15.0 +* *(deps)* Update dependency cypress to v12.16.0 +* *(deps)* Update dependency cypress to v12.8.0 +* *(deps)* Update dependency cypress to v12.8.1 +* *(deps)* Update dependency cypress to v12.9.0 +* *(deps)* Update dependency date-fns to v2.30.0 +* *(deps)* Update dependency dayjs to v1.11.8 +* *(deps)* Update dependency dayjs to v1.11.9 +* *(deps)* Update dependency dompurify to v3.0.2 +* *(deps)* Update dependency dompurify to v3.0.3 +* *(deps)* Update dependency dompurify to v3.0.4 +* *(deps)* Update dependency esbuild to v0.17.12 +* *(deps)* Update dependency esbuild to v0.17.13 +* *(deps)* Update dependency esbuild to v0.17.14 +* *(deps)* Update dependency esbuild to v0.17.15 +* *(deps)* Update dependency esbuild to v0.17.16 +* *(deps)* Update dependency esbuild to v0.17.17 +* *(deps)* Update dependency esbuild to v0.17.18 +* *(deps)* Update dependency esbuild to v0.17.19 +* *(deps)* Update dependency esbuild to v0.18.0 +* *(deps)* Update dependency esbuild to v0.18.1 +* *(deps)* Update dependency esbuild to v0.18.10 +* *(deps)* Update dependency esbuild to v0.18.11 +* *(deps)* Update dependency esbuild to v0.18.2 +* *(deps)* Update dependency esbuild to v0.18.3 +* *(deps)* Update dependency esbuild to v0.18.4 +* *(deps)* Update dependency esbuild to v0.18.5 +* *(deps)* Update dependency esbuild to v0.18.6 +* *(deps)* Update dependency esbuild to v0.18.9 +* *(deps)* Update dependency eslint to v8.37.0 +* *(deps)* Update dependency eslint to v8.38.0 +* *(deps)* Update dependency eslint to v8.39.0 +* *(deps)* Update dependency eslint to v8.40.0 +* *(deps)* Update dependency eslint to v8.41.0 +* *(deps)* Update dependency eslint to v8.42.0 +* *(deps)* Update dependency eslint to v8.43.0 +* *(deps)* Update dependency eslint to v8.44.0 +* *(deps)* Update dependency eslint-plugin-vue to v9.10.0 +* *(deps)* Update dependency eslint-plugin-vue to v9.11.0 +* *(deps)* Update dependency eslint-plugin-vue to v9.11.1 +* *(deps)* Update dependency eslint-plugin-vue to v9.12.0 +* *(deps)* Update dependency eslint-plugin-vue to v9.13.0 +* *(deps)* Update dependency flexsearch to v0.7.31 +* *(deps)* Update dependency floating-vue to v2.0.0-beta.21 +* *(deps)* Update dependency floating-vue to v2.0.0-beta.22 +* *(deps)* Update dependency floating-vue to v2.0.0-beta.24 +* *(deps)* Update dependency happy-dom to v9 +* *(deps)* Update dependency happy-dom to v9.1.9 +* *(deps)* Update dependency happy-dom to v9.10.1 +* *(deps)* Update dependency happy-dom to v9.10.9 +* *(deps)* Update dependency happy-dom to v9.18.3 +* *(deps)* Update dependency happy-dom to v9.20.1 +* *(deps)* Update dependency happy-dom to v9.20.3 +* *(deps)* Update dependency happy-dom to v9.7.1 +* *(deps)* Update dependency happy-dom to v9.9.2 +* *(deps)* Update dependency highlight.js to v11.8.0 +* *(deps)* Update dependency histoire to v0.16.2 +* *(deps)* Update dependency marked to v4.3.0 +* *(deps)* Update dependency marked to v5 +* *(deps)* Update dependency marked to v5.0.1 +* *(deps)* Update dependency marked to v5.0.2 +* *(deps)* Update dependency marked to v5.0.3 +* *(deps)* Update dependency marked to v5.0.4 +* *(deps)* Update dependency marked to v5.0.5 +* *(deps)* Update dependency marked to v5.1.0 +* *(deps)* Update dependency netlify-cli to v13.1.2 +* *(deps)* Update dependency netlify-cli to v13.1.6 +* *(deps)* Update dependency netlify-cli to v13.2.1 +* *(deps)* Update dependency netlify-cli to v13.2.2 +* *(deps)* Update dependency netlify-cli to v14 +* *(deps)* Update dependency netlify-cli to v14.3.1 +* *(deps)* Update dependency pinia to v2.0.34 +* *(deps)* Update dependency pinia to v2.0.35 +* *(deps)* Update dependency pinia to v2.0.36 +* *(deps)* Update dependency pinia to v2.1.4 +* *(deps)* Update dependency postcss to v8.4.22 +* *(deps)* Update dependency postcss to v8.4.23 +* *(deps)* Update dependency postcss to v8.4.24 +* *(deps)* Update dependency postcss-preset-env to v8.1.0 +* *(deps)* Update dependency postcss-preset-env to v8.2.0 +* *(deps)* Update dependency postcss-preset-env to v8.3.0 +* *(deps)* Update dependency postcss-preset-env to v8.3.1 +* *(deps)* Update dependency postcss-preset-env to v8.3.2 +* *(deps)* Update dependency postcss-preset-env to v8.4.1 +* *(deps)* Update dependency postcss-preset-env to v8.4.2 +* *(deps)* Update dependency postcss-preset-env to v8.5.0 +* *(deps)* Update dependency postcss-preset-env to v8.5.1 +* *(deps)* Update dependency rollup to v3.20.0 +* *(deps)* Update dependency rollup to v3.20.1 +* *(deps)* Update dependency rollup to v3.20.2 +* *(deps)* Update dependency rollup to v3.20.3 +* *(deps)* Update dependency rollup to v3.20.4 +* *(deps)* Update dependency rollup to v3.20.5 +* *(deps)* Update dependency rollup to v3.20.6 +* *(deps)* Update dependency rollup to v3.20.7 +* *(deps)* Update dependency rollup to v3.21.0 +* *(deps)* Update dependency rollup to v3.21.1 +* *(deps)* Update dependency rollup to v3.21.2 +* *(deps)* Update dependency rollup to v3.21.3 +* *(deps)* Update dependency rollup to v3.21.4 +* *(deps)* Update dependency rollup to v3.21.5 +* *(deps)* Update dependency rollup to v3.21.6 +* *(deps)* Update dependency rollup to v3.21.7 +* *(deps)* Update dependency rollup to v3.21.8 +* *(deps)* Update dependency rollup to v3.22.0 +* *(deps)* Update dependency rollup to v3.23.0 +* *(deps)* Update dependency rollup to v3.23.1 +* *(deps)* Update dependency rollup to v3.24.0 +* *(deps)* Update dependency rollup to v3.24.1 +* *(deps)* Update dependency rollup to v3.25.0 +* *(deps)* Update dependency rollup to v3.25.1 +* *(deps)* Update dependency rollup to v3.25.2 +* *(deps)* Update dependency rollup to v3.25.3 +* *(deps)* Update dependency rollup to v3.26.0 +* *(deps)* Update dependency rollup-plugin-visualizer to v5.9.2 +* *(deps)* Update dependency sass to v1.59.3 +* *(deps)* Update dependency sass to v1.60.0 +* *(deps)* Update dependency sass to v1.61.0 +* *(deps)* Update dependency sass to v1.62.0 +* *(deps)* Update dependency sass to v1.62.1 +* *(deps)* Update dependency sass to v1.63.0 +* *(deps)* Update dependency sass to v1.63.2 +* *(deps)* Update dependency sass to v1.63.3 +* *(deps)* Update dependency sass to v1.63.4 +* *(deps)* Update dependency sass to v1.63.5 +* *(deps)* Update dependency sass to v1.63.6 +* *(deps)* Update dependency typescript to v5 +* *(deps)* Update dependency typescript to v5.0.3 +* *(deps)* Update dependency typescript to v5.0.4 +* *(deps)* Update dependency typescript to v5.1.3 +* *(deps)* Update dependency typescript to v5.1.5 +* *(deps)* Update dependency typescript to v5.1.6 +* *(deps)* Update dependency ufo to v1.1.2 +* *(deps)* Update dependency vite to v4.2.0 +* *(deps)* Update dependency vite to v4.2.1 +* *(deps)* Update dependency vite to v4.2.2 +* *(deps)* Update dependency vite to v4.3.0 +* *(deps)* Update dependency vite to v4.3.1 +* *(deps)* Update dependency vite to v4.3.2 +* *(deps)* Update dependency vite to v4.3.3 +* *(deps)* Update dependency vite to v4.3.4 +* *(deps)* Update dependency vite to v4.3.5 +* *(deps)* Update dependency vite to v4.3.6 +* *(deps)* Update dependency vite to v4.3.7 +* *(deps)* Update dependency vite to v4.3.8 +* *(deps)* Update dependency vite to v4.3.9 +* *(deps)* Update dependency vite-plugin-pwa to v0.14.5 +* *(deps)* Update dependency vite-plugin-pwa to v0.14.6 +* *(deps)* Update dependency vite-plugin-pwa to v0.14.7 +* *(deps)* Update dependency vite-plugin-pwa to v0.15.0 +* *(deps)* Update dependency vite-plugin-pwa to v0.15.1 +* *(deps)* Update dependency vite-plugin-pwa to v0.15.2 +* *(deps)* Update dependency vite-plugin-pwa to v0.16.1 +* *(deps)* Update dependency vite-plugin-pwa to v0.16.3 +* *(deps)* Update dependency vite-plugin-pwa to v0.16.4 +* *(deps)* Update dependency vite-plugin-sentry to v1.3.0 +* *(deps)* Update dependency vitest to v0.29.3 +* *(deps)* Update dependency vitest to v0.29.4 +* *(deps)* Update dependency vitest to v0.29.5 +* *(deps)* Update dependency vitest to v0.29.7 +* *(deps)* Update dependency vitest to v0.29.8 +* *(deps)* Update dependency vitest to v0.30.0 +* *(deps)* Update dependency vitest to v0.30.1 +* *(deps)* Update dependency vitest to v0.31.0 +* *(deps)* Update dependency vitest to v0.31.1 +* *(deps)* Update dependency vitest to v0.31.2 +* *(deps)* Update dependency vitest to v0.31.4 +* *(deps)* Update dependency vitest to v0.32.0 +* *(deps)* Update dependency vitest to v0.32.1 +* *(deps)* Update dependency vitest to v0.32.2 +* *(deps)* Update dependency vitest to v0.32.3 +* *(deps)* Update dependency vue to v3.3.4 +* *(deps)* Update dependency vue to v3.3.4 +* *(deps)* Update dependency vue-flatpickr-component to v11.0.3 +* *(deps)* Update dependency vue-router to v4.2.0 +* *(deps)* Update dependency vue-router to v4.2.1 +* *(deps)* Update dependency vue-router to v4.2.2 +* *(deps)* Update dependency vue-router to v4.2.3 +* *(deps)* Update dependency vue-router to v4.2.4 +* *(deps)* Update dependency vue-tsc to v1.4.0 +* *(deps)* Update dependency vue-tsc to v1.4.1 +* *(deps)* Update dependency vue-tsc to v1.4.2 +* *(deps)* Update dependency vue-tsc to v1.4.3 +* *(deps)* Update dependency vue-tsc to v1.4.4 +* *(deps)* Update dependency vue-tsc to v1.6.0 +* *(deps)* Update dependency vue-tsc to v1.6.1 +* *(deps)* Update dependency vue-tsc to v1.6.2 +* *(deps)* Update dependency vue-tsc to v1.6.3 +* *(deps)* Update dependency vue-tsc to v1.6.4 +* *(deps)* Update dependency vue-tsc to v1.6.5 +* *(deps)* Update dependency vue-tsc to v1.8.0 +* *(deps)* Update dependency vue-tsc to v1.8.1 +* *(deps)* Update dependency vue-tsc to v1.8.2 +* *(deps)* Update dependency vue-tsc to v1.8.3 +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update dev-dependencies +* *(deps)* Update flake +* *(deps)* Update font awesome to v6.4.0 +* *(deps)* Update histoire to v0.15.9 +* *(deps)* Update histoire to v0.16.0 +* *(deps)* Update histoire to v0.16.1 +* *(deps)* Update lockfile +* *(deps)* Update node.js to v18.16.0 +* *(deps)* Update node.js to v18.16.1 +* *(deps)* Update node.js to v20 (#3411) +* *(deps)* Update pnpm to v7.29.3 +* *(deps)* Update pnpm to v7.30.0 +* *(deps)* Update pnpm to v7.30.1 +* *(deps)* Update pnpm to v7.30.2 +* *(deps)* Update pnpm to v7.30.3 +* *(deps)* Update pnpm to v7.30.5 +* *(deps)* Update pnpm to v7.31.0 +* *(deps)* Update pnpm to v7.32.0 +* *(deps)* Update pnpm to v8 +* *(deps)* Update pnpm to v8.3.0 +* *(deps)* Update pnpm to v8.3.1 +* *(deps)* Update pnpm to v8.4.0 +* *(deps)* Update pnpm to v8.5.0 +* *(deps)* Update pnpm to v8.5.1 +* *(deps)* Update pnpm to v8.6.0 +* *(deps)* Update pnpm to v8.6.1 +* *(deps)* Update pnpm to v8.6.2 +* *(deps)* Update pnpm to v8.6.3 +* *(deps)* Update pnpm to v8.6.4 +* *(deps)* Update pnpm to v8.6.5 +* *(deps)* Update pnpm to v8.6.6 +* *(deps)* Update sentry-javascript monorepo to v7.43.0 +* *(deps)* Update sentry-javascript monorepo to v7.44.0 +* *(deps)* Update sentry-javascript monorepo to v7.44.1 +* *(deps)* Update sentry-javascript monorepo to v7.44.2 +* *(deps)* Update sentry-javascript monorepo to v7.45.0 +* *(deps)* Update sentry-javascript monorepo to v7.46.0 +* *(deps)* Update sentry-javascript monorepo to v7.47.0 +* *(deps)* Update sentry-javascript monorepo to v7.48.0 +* *(deps)* Update sentry-javascript monorepo to v7.49.0 +* *(deps)* Update sentry-javascript monorepo to v7.50.0 +* *(deps)* Update sentry-javascript monorepo to v7.51.0 +* *(deps)* Update sentry-javascript monorepo to v7.51.2 +* *(deps)* Update sentry-javascript monorepo to v7.52.0 +* *(deps)* Update sentry-javascript monorepo to v7.52.1 +* *(deps)* Update sentry-javascript monorepo to v7.53.0 +* *(deps)* Update sentry-javascript monorepo to v7.53.1 +* *(deps)* Update sentry-javascript monorepo to v7.54.0 +* *(deps)* Update sentry-javascript monorepo to v7.55.0 +* *(deps)* Update sentry-javascript monorepo to v7.55.2 +* *(deps)* Update sentry-javascript monorepo to v7.56.0 +* *(deps)* Update sentry-javascript monorepo to v7.57.0 +* *(deps)* Update typescript-eslint monorepo to v5.55.0 +* *(deps)* Update typescript-eslint monorepo to v5.56.0 +* *(deps)* Update typescript-eslint monorepo to v5.57.0 +* *(deps)* Update typescript-eslint monorepo to v5.57.1 +* *(deps)* Update typescript-eslint monorepo to v5.58.0 +* *(deps)* Update typescript-eslint monorepo to v5.59.0 +* *(deps)* Update typescript-eslint monorepo to v5.59.1 +* *(deps)* Update typescript-eslint monorepo to v5.59.11 +* *(deps)* Update typescript-eslint monorepo to v5.59.2 +* *(deps)* Update typescript-eslint monorepo to v5.59.5 +* *(deps)* Update typescript-eslint monorepo to v5.59.6 +* *(deps)* Update typescript-eslint monorepo to v5.59.7 +* *(deps)* Update typescript-eslint monorepo to v5.59.8 +* *(deps)* Update typescript-eslint monorepo to v5.59.9 +* *(deps)* Update typescript-eslint monorepo to v5.60.0 +* *(deps)* Update typescript-eslint monorepo to v5.60.1 +* *(deps)* Update workbox monorepo to v6.6.0 (#3548) +* *(deps)* Update workbox monorepo to v6.6.1 (#3553) +* *(deps)* Update workbox monorepo to v7 (major) (#3556) + +### Features + +* *(assignees)* Show user avatar in search results +* *(datepicker)* Separate datepicker popup and datepicker logic in different components +* *(i18n)* Enable Danish translation +* *(i18n)* Enable Japanese translation +* *(i18n)* Enable Spanish translation +* *(i18n)* Use chinese name for chinese translation +* *(kanban)* Use total task count from the api instead of manually calculating it per bucket +* *(link share)* Add e2e tests for link share hash +* *(navigation)* Add hiding child projects +* *(navigation)* Allow dragging a project out from its parent project +* *(navigation)* Correctly show child projects +* *(navigation)* Make dragging a project to a parent work +* *(navigation)* Make dragging a project under another project work +* *(navigation)* Show favorite projects on top +* *(projects)* Allow setting a saved filter for tasks shown on the overview page +* *(projects)* Move hasProjects check to store +* *(quick add magic)* Allow fuzzy matching of assignees when the api results are unambigous +* *(reminders)* Add confirm button +* *(reminders)* Add e2e tests for task reminders +* *(reminders)* Add more spacing +* *(reminders)* Add on the due / start / end date as a reminder preset +* *(reminders)* Add preset two hours before due / start / end date +* *(reminders)* Add proper time picker for relative dates +* *(reminders)* Highlight which preset or custom date is selected +* *(reminders)* Make adding new reminders less confusing +* *(reminders)* Make relative presets actually work +* *(reminders)* Move reminder settings to a popup +* *(reminders)* Only show relative reminders when there's a date to relate them to +* *(reminders)* Show resolved reminder time in a tooltip and properly bubble updated task down to the reminder component +* *(reminders)* Translate all reminder form strings +* *(sentry)* Only load sentry when it's enabled +* *(tests)* Add project tests derived from old namespace tests +* *(user)* Migrate color scheme settings to persistance in db +* *(user)* Migrate pop sound setting to store in api +* *(user)* Persist frontend settings in the api (#3594)* Rename files with list to project ([b9d3b5c](b9d3b5c75635577321acc1791219aed40c6c14a4)) +* *(user)* Save quick add magic mode in api +* *(user)* Set default settings when loading persisted +* *(user)* Use user language from store after logging in +* Abstract BaseCheckbox ([8fc254d](8fc254d2db5738e5d370c9f346c8d0d1e31bb9d0)) +* Add hotkeys for priority, delete and favorite on the `TaskDetailView` (#3400) ([e00c9bb](e00c9bb1afc8491039b5ffb50d4d8d9b38e6e086)) +* Add message to add to home screen on mobile ([3c9083b](3c9083b90dd3e5f97109ba2a23d2f2f8cc7d6c7c)) +* Add redirect for old list routes ([af523cf](af523cfcd71528c7e8d0b50874f4766f40f958d2)) +* Add setting for infinite nesting ([cb218ec](cb218ec0c31a41ba41a713a3757f71ad550dd71c)) +* Add transition to input icons ([abb5128](abb51284269d84de14d0a156c386c63dc596b9ab)) +* Add vite-plugin sentry (#1991) ([5ca31d0](5ca31d00eeff28f4728a4d07b96d761a6f174207)) +* Add vite-plugin sentry ([73947f0](73947f0ba4031cb0f9aff78f8a7e3316a36d59b4)) +* Allow creating a new project directly as a child project from another one ([b341184](b34118485cc056146682cd4592c90e4662b307eb)) +* Allow disabling icon changes ([efb3407](efb3407b8769a23f4352161d6db6267ce4b30eee)) +* Allow hiding the quick add magic help tooltip with a button ([7fb85da](7fb85dacecdae597180553036243ab845d50ede5)) +* Allow selecting a parent project when creating a project ([ce887c3](ce887c38f3a9e84c832bfbf62efa455df37a1a4f)) +* Allow selecting a parent project when duplicating a project ([799c0be](799c0be8306cfc5150611153c59701e96d56893a)) +* Allow selecting a parent project when editing a project ([ee8f80c](ee8f80cc70109a496959da167d14ffda4e2a6175)) +* Allow to edit existing relative reminders ([5d38b83](5d38b8327fc323c571fced33442bdb923d6d3baa)) +* Better vscode vitest integration ([314cbf4](314cbf471f8e9cff2a3fca6bbd969807401b5cda)) +* Change the link share hash name ([2066056](20660564c16283c77029bc3c3125c6c3febde47e)) +* Check link share auth from store instead ([c2ffe3a](c2ffe3a9dcfd1e067b8d92e1d69183c2a8acfa8f)) +* Don't handle child projects and instead only save the ids ([760efa8](760efa854dcc83e74f96782339b79b8d27b853b2)) +* Don't use child_projects property from api ([ebd9c47](ebd9c4702ed1c6920d47e5e42294e6d4fa3c73c0)) +* Edit relative reminders (#3248) ([3f8e457](3f8e457d5250df0b3af34d8f3bb0c053b15a97be)) +* Edit relative reminders ([14e2698](14e26988331ca72afae01b8264969458cdb4a509)) +* Hide quick add magic help behind a tooltip (#3353) ([a988565](a988565227f57dfc728319d433532f71e61d6424)) +* Highlight hint icon when hovering the input ([422d7fc](422d7fc693caf886a49d03ff48b56ae6ce825356)) +* Improve datemathHelp.vue ([795b26e](795b26e1dde781e152ab03fc31fd95f9f106a452)) +* Improve handling of an invalid api url ([24ad2f8](24ad2f892db0fce3458624c9dad8735130253fa0)) +* Improve user assignments via quick add magic (#3348) ([d9f608e](d9f608e8b4be4da380a535edcce1782c6d21926d)) +* Improve variable naming for ProjectCardGrid ([a4be973](a4be973e29e81db4e244427fc46a11b4c8c95f4c)) +* Load all projects earlier than in the navigation and use the loading state of the store ([1d93661](1d936618faecb0ddcb10f7c900096a3705614dbd)) +* Mark undone if task moved from isDoneBucket (#3291) ([30adad5](30adad5ae6568b5ef1125f206989d447fb999eee)) +* Move namespaces list to projects list ([e1bdabc](e1bdabc8d670f7342f4f0777a30a961e3fd4601d)) +* Move navigation item to component ([3db4e01](3db4e011d4b625cee940c58ee32d065b8c43f1bb)) +* Move quick add magic to a popup behind an icon ([6989558](69895589636ee6369c9778f529bf1df953acb7b1)) +* New image for the unauthenticated views ([bef25c4](bef25c49d535ff3940a0112a715f5b351e816468)) +* Optimize print view for project views ([8e2c76a](8e2c76a33eec573afab0b754d0707f84e2cca962)) +* Persist link share auth rule in url hash (#3336) ([da3eaf0](da3eaf0d357c24775ba8a4cf8f089e5042f73c00)) +* Persist link share auth rule in url hash ([f68bb26](f68bb2625e5f619f365fdd421aeda2b8af879aab)) +* Prepare for pnpm 8 (#3331) ([7d3b97d](7d3b97d422896e17ab9231c66e49da6c07967d7e)) +* Rebuild main navigation so that it works recursively with projects ([06e8cdb](06e8cdb9d2907c846ca7c555b31571b5c1798433)) +* Remove all namespace leftovers ([1bd17d6](1bd17d6e50034c159150095f1c51a966293a6726)) +* Remove namespaces, make projects infinitely nestable (#3323) ([ac1d374](ac1d374191fca764a70d9851d9828a78ae27c075)) +* Rename link share hash prefix ([b9f0635](b9f0635d9fcc764c7ee188c95ce59ac358f735cf)) +* Rename list to project everywhere ([befa6f2](befa6f27bb607a57eb8ed49d0152b85cdab4cb95)) +* Replace color dot with handle icon on hover ([a3e2cbe](a3e2cbeb27ad8b0d052df62c9f24f8dd3808ddda)) +* Set the current language to the one saved by the user on login ([acb212a](acb212ab241e1ed873c943e9c5fa3bcfb2c83a91)) +* Show all parent projects in project search ([6a8c656](6a8c656dbb0a4729035468aedc60fd06e80c17ed)) +* Show all parent projects in task detail view ([63ba298](63ba2982c92d495de6c7e3526c3693dcfe0e3fba)) +* Show avatar and full name in team overview ([b80f070](b80f07043104868d134761b34582b234d12274e1)) +* Show initial list of users when opening the assignees view ([59c942a](59c942af735a40f68cfd01caadb22694113da8ae)) +* Start adding relative reminder picker with more options ([9df6950](9df6950d1a4a361c075020319ce3037e19e0912d)) +* Translate inbox project title ([f2ca2d8](f2ca2d850de5b4b3b3d90e3a5c41adebca2dc1a5)) +* Type i18n improvements ([dea1789](dea1789a00981fb496f0c1f4c19a6f0749e4de70)) +* Use new Reminders API instead of reminder_dates ([f747d5b](f747d5b2fcadb7459c389372dca4507b75cdd4fa)) +* Wrap projects navigation in a so that we can use top level await ([2579c33](2579c33ee1d07234c3ad42d75f2c7a1f7bfdb149)) + + +### Miscellaneous Tasks + +* *(ci)* Remove netlify dependency (#3459) +* *(ci)* Sign drone config +* *(editor)* Disable deprecated marked options +* *(i18n)* Clarify translation string +* *(parseSubtasksViaIndention)* Fix comment (#3259) +* *(reminders)* Remove reminderDates property +* *(sentry)* Alwys use the same version +* *(sentry)* Ignore missing commits +* *(sentry)* Only load sentry when enabled +* *(sentry)* Remove debug options +* *(sentry)* Remove sourcemaps after upload via plugin +* *(sentry)* Use correct chunks option +* *(task)* Move toggleFavorite to store +* *(task)* Use ref for task instead of reactive +* *(tests)* Enable experimental memory managment for cypress tests +* *(user)* Cleanup* Update JSDoc example ([bfbfd6a](bfbfd6a4212d493912406c1c505b6c0a24f0f014)) +* Add comment on overriding ([21ad830](21ad8301f28ba838c577acb72cb66ea00e176876)) +* Add types for emit ([c567874](c56787443f6f9f6be0f8d8501dd4e6e7a768648a)) +* Better function naming in password components ([a416d26](a416d26f7cfd163cadb0b6ded107b217ecad5d7c)) +* Catch error when trying to play pop sound ([929d4f4](929d4f402342de309dd8e453252d22fcb9f362a6)) +* Chore; extract code to reminder-period.vue ([0d6c0c8](0d6c0c8399c9fc73843bdbeb84ff19467edcaa90)) +* Clarify users when can still be found even if they disabled it ([302ba2b](302ba2bec7f592f6b0b1fba84a5a1a9fd5f994de)) +* Cleanup namespace leftovers ([2e33615](2e336150e086354b1623569aa98ab9c5be48c59a)) +* Don't recalculate everything ([9c3259c](9c3259c660e8436f41b5494c9567319090c03bd6)) +* Don't set the current project to null if it's undefined already ([e4d97e0](e4d97e05205e2c36143319ccf07ccac03f5de408)) +* Don't show selection for parent project when no projects are available ([c30dcff](c30dcff45157e5b89b7bb6c2442271c15da33fc4)) +* Don't wrap a computed in another computed ([afaf184](afaf1846ece65b8b2bbee971fafb31a535a4381b)) +* Export favorite projects from store ([131022d](131022da427616765f8109ca8ac8f6bad1bdcbbb)) +* Export not archived root projects ([b5d9afd](b5d9afd0f72aaf28b89f4877ce3ad2eabe6c3d7b)) +* Export projects as array directly from projects store ([e4379f0](e4379f0a229b7b8572fddb029658713a0bbfca1d)) +* Follow the happy path ([a33e2f6](a33e2f6c00f35f36aabb6b4d6e823396d29cdf3d)) +* Format ([4ad9773](4ad9773022b5873fff09b7afade02c026ac5332f)) +* Format ([638d187](638d187a24020d698327b0a0d04a5897672d3b79)) +* Formatting ([b92d780](b92d780cda3ab7222c4a6ab7323d1dd3f679b514)) +* Group return parameter ([5298706](52987060b11ac0418b6a88f1beabaee59165117d)) +* Import const instead of redeclaring it ([61baf02](61baf02e26b292e3f02816a483eb7d92fb49d8ab)) +* Improve prop type definition ([638f6be](638f6bea24980658d0f5fb3432d7b64c2ae06f75)) +* Make fuzzy matching a paramater ([aeb73a3](aeb73a374f84f6b01d4be4cc784336a214a4cdfa)) +* Move ProjectsNavigationWrapper back to navigation.vue ([65522a5](65522a57f1ceddfabeba235e17f8f81ee6bae47b)) +* Move all options to component props ([db1c6d6](db1c6d6a41591c8ee5df2d2ee400aaaeda0d02bb)) +* Move const ([0ce150a](0ce150af237985dda0cf44f24179ebae332e7585)) +* Move duplicate project logic to composable ([b69a056](b69a05689be6e2c833c838cde052702600d245c7)) +* Move loader class ([ac78e85](ac78e85e1726b6d7047db72ccbbaf29ac11d1696)) +* Move loading styles to variant into the component ([76814a2](76814a2d3f68876934c5791bb4901fca5f95c00f)) +* Move more logic to ProjectsNavigationItem.vue ([b567146](b567146d69f1c6a1eba6e37061bde7f627ff8654)) +* Move positioning css ([7110c9a](7110c9a5ceb58e6e9675c0f91ddb34c9ab8f2cbc)) +* Move styles to components ([25c3b7b](25c3b7bcbfb4ddc2163092ed7c1d5e4758967f1b)) +* Move v-if ([12ebefd](12ebefd86a61ca5c82b104b4155a4989c8622713)) +* Only apply padding where needed ([ddcd6a1](ddcd6a17dc659611910c2d4ed84fcff575e0ca3a)) +* Re-add top menu spacing ([086f50d](086f50d4feed90aac0c458d3f53cbe59ae7402c8)) +* Redirect to new project after creating from store ([6b824a4](6b824a49abe8854045c7670fcd6da50539c9fce5)) +* Reduce nesting ([06a1ff6](06a1ff6f4bea4cc7447d528423de54f14583dca4)) +* Refactor get parents project and move to projects store ([c32a198](c32a198a34edd3db7d6967010ce9dde401d1c864)) +* Remove nesting ([a4c8fcc](a4c8fccb115f019840025659c7a8a4bac31eee04)) +* Remove old comment ([4134fcb](4134fcbd752ab4cc7691907264b04cf64e11d012)) +* Remove old todo ([4e21b46](4e21b463df9af5aec9a5b45c8331f5a9f9e8aeb9)) +* Remove triggered notifications as it's not supported anywhere ([8a75790](8a75790453427287dc5a57ff3b59cd2b9cabd3f4)) +* Remove type annotation for computed ([a3e289c](a3e289c06c992b24dcff21b1c4f8871676101d98)) +* Remove unnecessary map ([336db56](336db56316dec7aeacf2174f5945764dc350769c)) +* Remove unused class ([d4e4525](d4e452545afe94ed2e860cd14982462e080a4d49)) +* Remove unused code ([652db56](652db56d42b39c05385ff7484fa43b0baa769759)) +* Remove user margin from the component ([57c64bb](57c64bbf71342b4e9e2e9e3808412b5e0cf01006)) +* Remove user margin from the component ([a1dd1d6](a1dd1d6664479e125e2f8ae87a9d2a57bf94fc9e)) +* Remove wrapper div ([2c9693a](2c9693a83eeca832d49d519c5676ae30569628ca)) +* Rename alias ([a803bc6](a803bc637e44893aa6921b70215a3206acdc5a91)) +* Rename archived message key ([4dee3a9](4dee3a90e9a76cdd190eb28b3327bef1bcc34787)) +* Rename flag ([6e09543](6e095436e9bfb6856c6aa469fc4cad93f239bad4)) +* Rename getRedirectRoute ([59b05e9](59b05e9836946ed8b9dbb3926fc694641d8508a1)) +* Rename prop ([2bb7ff1](2bb7ff1803d5a35bdd61a94e7a4d6fd03d5d1492)) +* Replace section with a div ([9b10693](9b1069317283fc20c834eac981e0b2a500e32dba)) +* Set project id from the outside ([6c9cbaa](6c9cbaadc821ab92e85b1f8e3fcb3fa85ea99670)) +* Update nix flake ([f40035d](f40035dc7943e8199c553acfec838f21ea212c3e)) +* Use instead of