1
0
forked from vikunja/frontend

Compare commits

..

1 Commits

18 changed files with 208 additions and 1246 deletions

View File

@ -57,7 +57,6 @@ ENV VIKUNJA_SENTRY_ENABLED false
ENV VIKUNJA_SENTRY_DSN https://85694a2d757547cbbc90cd4b55c5a18d@o1047380.ingest.sentry.io/6024480
ENV VIKUNJA_PROJECT_INFINITE_NESTING_ENABLED false
ENV VIKUNJA_ALLOW_ICON_CHANGES true
ENV VIKUNJA_CUSTOM_LOGO_URL ""
COPY docker/injector.sh /docker-entrypoint.d/50-injector.sh
COPY docker/ipv6-disable.sh /docker-entrypoint.d/60-ipv6-disable.sh

View File

@ -1,5 +1,4 @@
import {UserFactory} from '../../factories/user'
import {ProjectFactory} from '../../factories/project'
const testAndAssertFailed = fixture => {
cy.intercept(Cypress.env('API_URL') + '/login*').as('login')
@ -14,28 +13,26 @@ const testAndAssertFailed = fixture => {
cy.get('div.message.danger').contains('Wrong username or password.')
}
const credentials = {
username: 'test',
password: '1234',
}
function login() {
cy.get('input[id=username]').type(credentials.username)
cy.get('input[id=password]').type(credentials.password)
cy.get('.button').contains('Login').click()
cy.url().should('include', '/')
}
const username = 'test'
context('Login', () => {
beforeEach(() => {
UserFactory.create(1, {username: credentials.username})
UserFactory.create(1, {username})
})
it('Should log in with the right credentials', () => {
const fixture = {
username: 'test',
password: '1234',
}
cy.visit('/login')
login()
cy.get('input[id=username]').type(fixture.username)
cy.get('input[id=password]').type(fixture.password)
cy.get('.button').contains('Login').click()
cy.url().should('include', '/')
cy.clock(1625656161057) // 13:00
cy.get('h2').should('contain', `Hi ${credentials.username}!`)
cy.get('h2').should('contain', `Hi ${fixture.username}!`)
})
it('Should fail with a bad password', () => {
@ -60,15 +57,4 @@ context('Login', () => {
cy.visit('/')
cy.url().should('include', '/login')
})
it('Should redirect to the previous route after logging in', () => {
const projects = ProjectFactory.create(1)
cy.visit(`/projects/${projects[0].id}/list`)
cy.url().should('include', '/login')
login()
cy.url().should('include', `/projects/${projects[0].id}/list`)
})
})

View File

@ -13,6 +13,5 @@ sed -ri "s:^(\s*window.SENTRY_ENABLED\s*=)\s*.+:\1 ${VIKUNJA_SENTRY_ENABLED}:g"
sed -ri "s:^(\s*window.SENTRY_DSN\s*=)\s*.+:\1 '${VIKUNJA_SENTRY_DSN}':g" /usr/share/nginx/html/index.html
sed -ri "s:^(\s*window.PROJECT_INFINITE_NESTING_ENABLED\s*=)\s*.+:\1 '${VIKUNJA_PROJECT_INFINITE_NESTING_ENABLED}':g" /usr/share/nginx/html/index.html
sed -ri "s:^(\s*window.ALLOW_ICON_CHANGES\s*=)\s*.+:\1 ${VIKUNJA_ALLOW_ICON_CHANGES}:g" /usr/share/nginx/html/index.html
sed -ri "s:^(\s*window.CUSTOM_LOGO_URL\s*=)\s*.+:\1 ${VIKUNJA_CUSTOM_LOGO_URL}:g" /usr/share/nginx/html/index.html
date -uIseconds | xargs echo 'info: started at'

View File

@ -32,8 +32,6 @@
window.PROJECT_INFINITE_NESTING_ENABLED = false
// Allow changing the logo and other icons based on various occasions throughout the year.
window.ALLOW_ICON_CHANGES = true
// Allow using a custom logo via external URL.
window.CUSTOM_LOGO_URL = ''
</script>
</body>
</html>

View File

@ -50,7 +50,7 @@
"@fortawesome/free-solid-svg-icons": "6.4.2",
"@fortawesome/vue-fontawesome": "3.0.3",
"@github/hotkey": "2.0.1",
"@infectoone/vue-ganttastic": "2.1.4",
"@infectoone/vue-ganttastic": "2.2.0",
"@intlify/unplugin-vue-i18n": "0.12.2",
"@kyvg/vue3-notification": "2.9.1",
"@sentry/tracing": "7.60.0",
@ -92,23 +92,23 @@
"@cypress/vite-dev-server": "5.0.5",
"@cypress/vue": "5.0.5",
"@faker-js/faker": "8.0.2",
"@histoire/plugin-screenshot": "0.17.0",
"@histoire/plugin-vue": "0.17.0",
"@histoire/plugin-screenshot": "0.16.5",
"@histoire/plugin-vue": "0.16.5",
"@rushstack/eslint-patch": "1.3.3",
"@tsconfig/node18": "18.2.1",
"@types/codemirror": "5.60.9",
"@tsconfig/node18": "18.2.0",
"@types/codemirror": "5.60.8",
"@types/dompurify": "3.0.2",
"@types/flexsearch": "0.7.3",
"@types/is-touch-device": "1.0.0",
"@types/lodash.debounce": "4.0.7",
"@types/marked": "5.0.1",
"@types/node": "18.17.8",
"@types/node": "18.17.6",
"@types/postcss-preset-env": "7.7.0",
"@types/sortablejs": "1.15.1",
"@typescript-eslint/eslint-plugin": "6.4.1",
"@typescript-eslint/parser": "6.4.1",
"@typescript-eslint/eslint-plugin": "6.4.0",
"@typescript-eslint/parser": "6.4.0",
"@vitejs/plugin-legacy": "4.1.1",
"@vitejs/plugin-vue": "4.3.3",
"@vitejs/plugin-vue": "4.3.2",
"@vue/eslint-config-typescript": "11.0.3",
"@vue/test-utils": "2.4.1",
"@vue/tsconfig": "0.4.0",
@ -121,14 +121,14 @@
"esbuild": "0.19.2",
"eslint": "8.47.0",
"eslint-plugin-vue": "9.17.0",
"happy-dom": "10.11.0",
"histoire": "0.17.0",
"happy-dom": "10.10.4",
"histoire": "0.16.5",
"postcss": "8.4.28",
"postcss-easing-gradients": "3.0.1",
"postcss-easings": "4.0.0",
"postcss-focus-within": "8.0.0",
"postcss-preset-env": "9.1.1",
"rollup": "3.28.1",
"rollup": "3.28.0",
"rollup-plugin-visualizer": "5.9.2",
"sass": "1.66.1",
"start-server-and-test": "2.0.0",

View File

@ -1,4 +1,4 @@
lockfileVersion: '6.0'
lockfileVersion: '6.1'
settings:
autoInstallPeers: true
@ -30,7 +30,7 @@ dependencies:
version: 2.1.4(dayjs@1.11.9)(vue@3.3.4)
'@intlify/unplugin-vue-i18n':
specifier: 0.12.2
version: 0.12.2(rollup@3.28.1)(vue-i18n@9.2.2)
version: 0.12.2(rollup@3.28.0)(vue-i18n@9.2.2)
'@kyvg/vue3-notification':
specifier: 2.9.1
version: 2.9.1(vue@3.3.4)
@ -148,20 +148,20 @@ devDependencies:
specifier: 8.0.2
version: 8.0.2
'@histoire/plugin-screenshot':
specifier: 0.17.0
version: 0.17.0(histoire@0.17.0)
specifier: 0.16.5
version: 0.16.5(histoire@0.16.5)
'@histoire/plugin-vue':
specifier: 0.17.0
version: 0.17.0(histoire@0.17.0)(vite@4.4.9)(vue@3.3.4)
specifier: 0.16.5
version: 0.16.5(histoire@0.16.5)(vite@4.4.9)(vue@3.3.4)
'@rushstack/eslint-patch':
specifier: 1.3.3
version: 1.3.3
'@tsconfig/node18':
specifier: 18.2.1
version: 18.2.1
specifier: 18.2.0
version: 18.2.0
'@types/codemirror':
specifier: 5.60.9
version: 5.60.9
specifier: 5.60.8
version: 5.60.8
'@types/dompurify':
specifier: 3.0.2
version: 3.0.2
@ -178,8 +178,8 @@ devDependencies:
specifier: 5.0.1
version: 5.0.1
'@types/node':
specifier: 18.17.8
version: 18.17.8
specifier: 18.17.6
version: 18.17.6
'@types/postcss-preset-env':
specifier: 7.7.0
version: 7.7.0
@ -187,17 +187,17 @@ devDependencies:
specifier: 1.15.1
version: 1.15.1
'@typescript-eslint/eslint-plugin':
specifier: 6.4.1
version: 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.6)
specifier: 6.4.0
version: 6.4.0(@typescript-eslint/parser@6.4.0)(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/parser':
specifier: 6.4.1
version: 6.4.1(eslint@8.47.0)(typescript@5.1.6)
specifier: 6.4.0
version: 6.4.0(eslint@8.47.0)(typescript@5.1.6)
'@vitejs/plugin-legacy':
specifier: 4.1.1
version: 4.1.1(terser@5.10.0)(vite@4.4.9)
'@vitejs/plugin-vue':
specifier: 4.3.3
version: 4.3.3(vite@4.4.9)(vue@3.3.4)
specifier: 4.3.2
version: 4.3.2(vite@4.4.9)(vue@3.3.4)
'@vue/eslint-config-typescript':
specifier: 11.0.3
version: 11.0.3(eslint-plugin-vue@9.17.0)(eslint@8.47.0)(typescript@5.1.6)
@ -235,11 +235,11 @@ devDependencies:
specifier: 9.17.0
version: 9.17.0(eslint@8.47.0)
happy-dom:
specifier: 10.11.0
version: 10.11.0
specifier: 10.10.4
version: 10.10.4
histoire:
specifier: 0.17.0
version: 0.17.0(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9)
specifier: 0.16.5
version: 0.16.5(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9)
postcss:
specifier: 8.4.28
version: 8.4.28
@ -256,11 +256,11 @@ devDependencies:
specifier: 9.1.1
version: 9.1.1(postcss@8.4.28)
rollup:
specifier: 3.28.1
version: 3.28.1
specifier: 3.28.0
version: 3.28.0
rollup-plugin-visualizer:
specifier: 5.9.2
version: 5.9.2(rollup@3.28.1)
version: 5.9.2(rollup@3.28.0)
sass:
specifier: 1.66.1
version: 1.66.1
@ -272,7 +272,7 @@ devDependencies:
version: 5.1.6
vite:
specifier: 4.4.9
version: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
version: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
vite-plugin-inject-preload:
specifier: 1.3.2
version: 1.3.2(vite@4.4.9)
@ -287,7 +287,7 @@ devDependencies:
version: 4.0.0
vitest:
specifier: 0.34.2
version: 0.34.2(happy-dom@10.11.0)(sass@1.66.1)(terser@5.10.0)
version: 0.34.2(happy-dom@10.10.4)(sass@1.66.1)(terser@5.10.0)
vue-tsc:
specifier: 1.8.8
version: 1.8.8(typescript@5.1.6)
@ -3505,6 +3505,11 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
/@eslint-community/regexpp@4.5.1:
resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
/@eslint-community/regexpp@4.6.2:
resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
@ -3601,12 +3606,12 @@ packages:
'@hapi/hoek': 9.2.1
dev: true
/@histoire/app@0.17.0(vite@4.4.9):
resolution: {integrity: sha512-rZyuIw3Ck6RqwBSkCfIAZAzKZTclzWmLcCNtSCbUHF/wcEUbFdfAhGTW56+NhzNeURq+QxNuklHhSnE+x0PiEQ==}
/@histoire/app@0.16.5(vite@4.4.9):
resolution: {integrity: sha512-m+rCZnz6lnaIbVK1R9UBZFgU91/V1RnZqVaMq6KjUuatuxUUS1M4HgsFT5Y74Utltq0U3i0RuIb5h20z6M7nHg==}
dependencies:
'@histoire/controls': 0.17.0(vite@4.4.9)
'@histoire/shared': 0.17.0(vite@4.4.9)
'@histoire/vendors': 0.17.0
'@histoire/controls': 0.16.5(vite@4.4.9)
'@histoire/shared': 0.16.5(vite@4.4.9)
'@histoire/vendors': 0.16.5
'@types/flexsearch': 0.7.3
flexsearch: 0.7.21
shiki-es: 0.2.0
@ -3614,8 +3619,8 @@ packages:
- vite
dev: true
/@histoire/controls@0.17.0(vite@4.4.9):
resolution: {integrity: sha512-zdZB4kLthWIZxe/GxUdYM18y7lXiF13g8BMomE9d/YudY1KFkfmMKSbrNlDyM9yKiTd6ycSRJIWEXlxOSuyNrw==}
/@histoire/controls@0.16.5(vite@4.4.9):
resolution: {integrity: sha512-2Yng6fPbBOz9EMPb4arZfvnK4/SDoxA0jYaqjtuby/WDFXk/Lvp3je8xs8PbPAzXralDDSqCu02cfBQy4bUQqg==}
dependencies:
'@codemirror/commands': 6.2.4
'@codemirror/lang-json': 6.0.1
@ -3624,21 +3629,21 @@ packages:
'@codemirror/state': 6.2.1
'@codemirror/theme-one-dark': 6.1.2
'@codemirror/view': 6.16.0
'@histoire/shared': 0.17.0(vite@4.4.9)
'@histoire/vendors': 0.17.0
'@histoire/shared': 0.16.5(vite@4.4.9)
'@histoire/vendors': 0.16.5
transitivePeerDependencies:
- vite
dev: true
/@histoire/plugin-screenshot@0.17.0(histoire@0.17.0):
resolution: {integrity: sha512-qEVk0/OiydlrxQjS1eex05aOdAkzN55A9S1Iu91oB/M61In7S+gnh32H+i1SgvdnVE7S3ie/EfKtpCAhjTXUig==}
/@histoire/plugin-screenshot@0.16.5(histoire@0.16.5):
resolution: {integrity: sha512-ej2ZL8LVlOJ6d5KzKVFy3nFUyevmkuX3+vlf/9FdzyLnyNak2YVgcsgSR7otR+y351YAvmZ+l9h9n2O2/zZ/lw==}
peerDependencies:
histoire: ^0.17.0
histoire: ^0.16.5
dependencies:
capture-website: 2.4.1
defu: 6.1.2
fs-extra: 10.1.0
histoire: 0.17.0(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9)
histoire: 0.16.5(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9)
pathe: 0.2.0
transitivePeerDependencies:
- bufferutil
@ -3647,18 +3652,18 @@ packages:
- utf-8-validate
dev: true
/@histoire/plugin-vue@0.17.0(histoire@0.17.0)(vite@4.4.9)(vue@3.3.4):
resolution: {integrity: sha512-sYRpgNBQF8BI3IYkHNdXfArJBqL3Gcex6e9CRopIwfFns6G9MYXGZNys1pT75d2BAM9GPBNpApH+1rmlnudpEQ==}
/@histoire/plugin-vue@0.16.5(histoire@0.16.5)(vite@4.4.9)(vue@3.3.4):
resolution: {integrity: sha512-MT11ncSwjsnTCABcmwAdrlKbgisZv2Mh4LFfqZlN3I5LyaYOcqN/2jwEERWpZ+oZYYx3SwLnB0wTWoubRpOKjA==}
peerDependencies:
histoire: ^0.17.0
histoire: ^0.16.5
vue: ^3.2.47
dependencies:
'@histoire/controls': 0.17.0(vite@4.4.9)
'@histoire/shared': 0.17.0(vite@4.4.9)
'@histoire/vendors': 0.17.0
'@histoire/controls': 0.16.5(vite@4.4.9)
'@histoire/shared': 0.16.5(vite@4.4.9)
'@histoire/vendors': 0.16.5
change-case: 4.1.2
globby: 13.2.2
histoire: 0.17.0(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9)
histoire: 0.16.5(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9)
launch-editor: 2.6.0
pathe: 0.2.0
vue: 3.3.4
@ -3666,22 +3671,22 @@ packages:
- vite
dev: true
/@histoire/shared@0.17.0(vite@4.4.9):
resolution: {integrity: sha512-itdEqD+V+WNkCqhSsgoSRuoHeXBH3/bNjY98vHz/89prKeqEVMGbBbGPUpgm1IpKEYrNcLhfDAREJHnwsKxKCg==}
/@histoire/shared@0.16.5(vite@4.4.9):
resolution: {integrity: sha512-iLz/y5SiKERZGK4Ux2xXaYi89w2+ecyYTPHi62YitzfHMp7YXYi8Bk48T2NfU1HbZIi1NzbHoY8c4F6fiUG2Ag==}
peerDependencies:
vite: ^2.9.0 || ^3.0.0 || ^4.0.0
dependencies:
'@histoire/vendors': 0.17.0
'@histoire/vendors': 0.16.5
'@types/fs-extra': 9.0.13
'@types/markdown-it': 12.2.3
chokidar: 3.5.3
pathe: 0.2.0
picocolors: 1.0.0
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
dev: true
/@histoire/vendors@0.17.0:
resolution: {integrity: sha512-HI2hkai3p5+gAoWZAGWoAdDLlu0ujfYtGhykGChTQyKAroocizRG21l/2w71cN1K+oigbAccqtxP8BkpqX74cQ==}
/@histoire/vendors@0.16.5:
resolution: {integrity: sha512-25a90vugBz3KH3VzuddxuKeAjBQ1+osXQy2QICQO0kUXAtGHNj4u8T4iG5AgQD9CQXf6dc5+pnPoFZADHlW9VQ==}
dev: true
/@humanwhocodes/config-array@0.11.10:
@ -3785,7 +3790,7 @@ packages:
engines: {node: '>= 16'}
dev: false
/@intlify/unplugin-vue-i18n@0.12.2(rollup@3.28.1)(vue-i18n@9.2.2):
/@intlify/unplugin-vue-i18n@0.12.2(rollup@3.28.0)(vue-i18n@9.2.2):
resolution: {integrity: sha512-IIgzLRSPUKZM1FBdUAZ9NwVPiLUr4ea5g/HLWe2lB7gNtPDz4FOfUNUllIT504hT+3pDoJmjaYJ6pyqT7F4Wuw==}
engines: {node: '>= 14.16'}
peerDependencies:
@ -3802,7 +3807,7 @@ packages:
dependencies:
'@intlify/bundle-utils': 7.0.2(vue-i18n@9.2.2)
'@intlify/shared': 9.3.0-beta.24
'@rollup/pluginutils': 5.0.2(rollup@3.28.1)
'@rollup/pluginutils': 5.0.2(rollup@3.28.0)
'@vue/compiler-sfc': 3.3.4
debug: 4.3.4(supports-color@8.1.1)
fast-glob: 3.2.12
@ -4019,7 +4024,7 @@ packages:
rollup: 2.79.1
dev: true
/@rollup/pluginutils@5.0.2(rollup@3.28.1):
/@rollup/pluginutils@5.0.2(rollup@3.28.0):
resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -4031,7 +4036,7 @@ packages:
'@types/estree': 1.0.0
estree-walker: 2.0.2
picomatch: 2.3.1
rollup: 3.28.1
rollup: 3.28.0
dev: false
/@rushstack/eslint-patch@1.3.3:
@ -4177,8 +4182,8 @@ packages:
engines: {node: '>=10.13.0'}
dev: true
/@tsconfig/node18@18.2.1:
resolution: {integrity: sha512-RDDZFuofwkcKpl8Vpj5wFbY+H53xOtqK7ckEL1sXsbPwvKwDdjQf3LkHbtt9sxIHn9nWIEwkmCwBRZ6z5TKU2A==}
/@tsconfig/node18@18.2.0:
resolution: {integrity: sha512-yhxwIlFVSVcMym3O31HoMnRXpoenmpIxcj4Yoes2DUpe+xCJnA7ECQP1Vw889V0jTt/2nzvpLQ/UuMYCd3JPIg==}
dev: true
/@types/chai-subset@1.3.3:
@ -4198,8 +4203,8 @@ packages:
'@types/har-format': 1.2.10
dev: true
/@types/codemirror@5.60.9:
resolution: {integrity: sha512-8RhLhlGo9bAkytFYKDzezorY2ojvGk+4xFEso/6Hc2oR1oE2P9lI+AEkbUW7cDlKcQAK5WJkJRBLTdjBE7xQPA==}
/@types/codemirror@5.60.8:
resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==}
dependencies:
'@types/tern': 0.23.4
@ -4237,7 +4242,7 @@ packages:
/@types/fs-extra@9.0.13:
resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
dependencies:
'@types/node': 18.17.8
'@types/node': 18.17.6
dev: true
/@types/har-format@1.2.10:
@ -4255,7 +4260,7 @@ packages:
/@types/keyv@3.1.3:
resolution: {integrity: sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==}
dependencies:
'@types/node': 18.17.8
'@types/node': 18.17.6
dev: true
/@types/linkify-it@3.0.2:
@ -4299,8 +4304,8 @@ packages:
resolution: {integrity: sha512-YZJjn+Aaw0xihnpdImxI22jqGbp0DCgTFKRycygjGx/Y27NnWFJa5FJ7P+MRT3u07dogEeMVh70pWpbIQollTA==}
dev: true
/@types/node@18.17.8:
resolution: {integrity: sha512-Av/7MqX/iNKwT9Tr60V85NqMnsmh8ilfJoBlIVibkXfitk9Q22D9Y5mSpm+FvG5DET7EbVfB40bOiLzKgYFgPw==}
/@types/node@18.17.6:
resolution: {integrity: sha512-fGmT/P7z7ecA6bv/ia5DlaWCH4YeZvAQMNpUhrJjtAhOhZfoxS1VLUgU2pdk63efSjQaOJWdXMuAJsws+8I6dg==}
dev: true
/@types/normalize-package-data@2.4.1:
@ -4317,13 +4322,17 @@ packages:
/@types/resolve@1.17.1:
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
dependencies:
'@types/node': 18.17.8
'@types/node': 18.17.6
dev: true
/@types/responselike@1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
'@types/node': 18.17.8
'@types/node': 18.17.6
dev: true
/@types/semver@7.3.12:
resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==}
dev: true
/@types/semver@7.5.0:
@ -4363,7 +4372,7 @@ packages:
resolution: {integrity: sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==}
requiresBuild: true
dependencies:
'@types/node': 18.17.8
'@types/node': 18.17.6
dev: true
optional: true
@ -4395,8 +4404,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==}
/@typescript-eslint/eslint-plugin@6.4.0(@typescript-eslint/parser@6.4.0)(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@ -4406,12 +4415,12 @@ packages:
typescript:
optional: true
dependencies:
'@eslint-community/regexpp': 4.6.2
'@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/scope-manager': 6.4.1
'@typescript-eslint/type-utils': 6.4.1(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/visitor-keys': 6.4.1
'@eslint-community/regexpp': 4.5.1
'@typescript-eslint/parser': 6.4.0(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/scope-manager': 6.4.0
'@typescript-eslint/type-utils': 6.4.0(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/utils': 6.4.0(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/visitor-keys': 6.4.0
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.47.0
graphemer: 1.4.0
@ -4444,8 +4453,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==}
/@typescript-eslint/parser@6.4.0(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -4454,10 +4463,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 6.4.1
'@typescript-eslint/types': 6.4.1
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.6)
'@typescript-eslint/visitor-keys': 6.4.1
'@typescript-eslint/scope-manager': 6.4.0
'@typescript-eslint/types': 6.4.0
'@typescript-eslint/typescript-estree': 6.4.0(typescript@5.1.6)
'@typescript-eslint/visitor-keys': 6.4.0
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.47.0
typescript: 5.1.6
@ -4473,12 +4482,12 @@ packages:
'@typescript-eslint/visitor-keys': 5.61.0
dev: true
/@typescript-eslint/scope-manager@6.4.1:
resolution: {integrity: sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==}
/@typescript-eslint/scope-manager@6.4.0:
resolution: {integrity: sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.4.1
'@typescript-eslint/visitor-keys': 6.4.1
'@typescript-eslint/types': 6.4.0
'@typescript-eslint/visitor-keys': 6.4.0
dev: true
/@typescript-eslint/type-utils@5.61.0(eslint@8.47.0)(typescript@5.1.6):
@ -4501,8 +4510,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/type-utils@6.4.1(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==}
/@typescript-eslint/type-utils@6.4.0(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -4511,8 +4520,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.6)
'@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.1.6)
'@typescript-eslint/typescript-estree': 6.4.0(typescript@5.1.6)
'@typescript-eslint/utils': 6.4.0(eslint@8.47.0)(typescript@5.1.6)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.47.0
ts-api-utils: 1.0.1(typescript@5.1.6)
@ -4526,8 +4535,8 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/types@6.4.1:
resolution: {integrity: sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==}
/@typescript-eslint/types@6.4.0:
resolution: {integrity: sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
@ -4552,8 +4561,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/typescript-estree@6.4.1(typescript@5.1.6):
resolution: {integrity: sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==}
/@typescript-eslint/typescript-estree@6.4.0(typescript@5.1.6):
resolution: {integrity: sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@ -4561,8 +4570,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 6.4.1
'@typescript-eslint/visitor-keys': 6.4.1
'@typescript-eslint/types': 6.4.0
'@typescript-eslint/visitor-keys': 6.4.0
debug: 4.3.4(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
@ -4581,7 +4590,7 @@ packages:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0)
'@types/json-schema': 7.0.12
'@types/semver': 7.5.0
'@types/semver': 7.3.12
'@typescript-eslint/scope-manager': 5.61.0
'@typescript-eslint/types': 5.61.0
'@typescript-eslint/typescript-estree': 5.61.0(typescript@5.1.6)
@ -4593,8 +4602,8 @@ packages:
- typescript
dev: true
/@typescript-eslint/utils@6.4.1(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==}
/@typescript-eslint/utils@6.4.0(eslint@8.47.0)(typescript@5.1.6):
resolution: {integrity: sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -4602,9 +4611,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0)
'@types/json-schema': 7.0.12
'@types/semver': 7.5.0
'@typescript-eslint/scope-manager': 6.4.1
'@typescript-eslint/types': 6.4.1
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.6)
'@typescript-eslint/scope-manager': 6.4.0
'@typescript-eslint/types': 6.4.0
'@typescript-eslint/typescript-estree': 6.4.0(typescript@5.1.6)
eslint: 8.47.0
semver: 7.5.4
transitivePeerDependencies:
@ -4620,11 +4629,11 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
/@typescript-eslint/visitor-keys@6.4.1:
resolution: {integrity: sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==}
/@typescript-eslint/visitor-keys@6.4.0:
resolution: {integrity: sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.4.1
'@typescript-eslint/types': 6.4.0
eslint-visitor-keys: 3.4.3
dev: true
@ -4643,19 +4652,19 @@ packages:
regenerator-runtime: 0.13.11
systemjs: 6.14.1
terser: 5.10.0(acorn@7.4.1)
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
transitivePeerDependencies:
- supports-color
dev: true
/@vitejs/plugin-vue@4.3.3(vite@4.4.9)(vue@3.3.4):
resolution: {integrity: sha512-ssxyhIAZqB0TrpUg6R0cBpCuMk9jTIlO1GNSKKQD6S8VjnXi6JXKfUXjSsxey9IwQiaRGsO1WnW9Rkl1L6AJVw==}
/@vitejs/plugin-vue@4.3.2(vite@4.4.9)(vue@3.3.4):
resolution: {integrity: sha512-iDDhGruwhKkwNwT5qgtGaeTxF4ULs52xpQbsC27F01kf3aQBHtrDP738pmHw4oclVAUA3m+Vk8gxhDV5KbfM+A==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^4.0.0
vue: ^3.2.25
dependencies:
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
vue: 3.3.4
dev: true
@ -5464,7 +5473,7 @@ packages:
file-url: 4.0.0
node-fetch: 3.2.0
puppeteer: 13.7.0
tough-cookie: 4.1.3
tough-cookie: 4.1.2
transitivePeerDependencies:
- bufferutil
- encoding
@ -6239,7 +6248,7 @@ packages:
/easymde@2.18.0:
resolution: {integrity: sha512-IxVVUxNWIoXLeqtBU4BLc+eS/ScYhT1Dcb6yF5Wchoj1iXAV+TIIDWx+NCaZhY7RcSHqDPKllbYq7nwGKILnoA==}
dependencies:
'@types/codemirror': 5.60.9
'@types/codemirror': 5.60.8
'@types/marked': 4.3.1
codemirror: 5.65.14
codemirror-spell-checker: 1.1.2
@ -7150,8 +7159,8 @@ packages:
strip-bom-string: 1.0.0
dev: true
/happy-dom@10.11.0:
resolution: {integrity: sha512-CmUT4LOLzvAsbYqgTJESrPyvF0gxLDkDG/KK1o/HYU7+c9o/VVIKXl3feJZnuCYbGqemw7meiQaZcL4SMgn1jQ==}
/happy-dom@10.10.4:
resolution: {integrity: sha512-aEEFGSSs4DEJbxXvSMsIvJvvdsZbJZQEgtHsU4GgwNKbSbFxtgu6vXHmn4XoXnuElIbXV0xhbJiiQTxPnTmJcw==}
dependencies:
css.escape: 1.5.1
entities: 4.5.0
@ -7220,17 +7229,17 @@ packages:
engines: {node: '>=12.0.0'}
dev: false
/histoire@0.17.0(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9):
resolution: {integrity: sha512-q5fX2yAiw1vjlC0xaEcm8uqiJzdKmItozyNa24ujFVD+YjKpBE1R6tl/zpUIfqOBgpifMgh7xQD5uU4ZFd7v/g==}
/histoire@0.16.5(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)(vite@4.4.9):
resolution: {integrity: sha512-zrysBjiQjrwpPGTnPEQ+mYRa7yyls6shcRo8q0AIg49FW95egg1Atq3iwrjK+p09OJu7vWiX+hKEboePMDRAJA==}
hasBin: true
peerDependencies:
vite: ^2.9.0 || ^3.0.0 || ^4.0.0
dependencies:
'@akryum/tinypool': 0.3.1
'@histoire/app': 0.17.0(vite@4.4.9)
'@histoire/controls': 0.17.0(vite@4.4.9)
'@histoire/shared': 0.17.0(vite@4.4.9)
'@histoire/vendors': 0.17.0
'@histoire/app': 0.16.5(vite@4.4.9)
'@histoire/controls': 0.16.5(vite@4.4.9)
'@histoire/shared': 0.16.5(vite@4.4.9)
'@histoire/vendors': 0.16.5
'@types/flexsearch': 0.7.3
'@types/markdown-it': 12.2.3
birpc: 0.1.1
@ -7256,8 +7265,8 @@ packages:
sade: 1.8.1
shiki-es: 0.2.0
sirv: 2.0.3
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite-node: 0.28.4(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
vite-node: 0.28.4(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
transitivePeerDependencies:
- '@types/node'
- bufferutil
@ -7673,7 +7682,7 @@ packages:
resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
engines: {node: '>= 10.13.0'}
dependencies:
'@types/node': 18.17.8
'@types/node': 18.17.6
merge-stream: 2.0.0
supports-color: 7.2.0
dev: true
@ -9390,7 +9399,7 @@ packages:
- acorn
dev: true
/rollup-plugin-visualizer@5.9.2(rollup@3.28.1):
/rollup-plugin-visualizer@5.9.2(rollup@3.28.0):
resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==}
engines: {node: '>=14'}
hasBin: true
@ -9402,7 +9411,7 @@ packages:
dependencies:
open: 8.4.0
picomatch: 2.3.1
rollup: 3.28.1
rollup: 3.28.0
source-map: 0.7.4
yargs: 17.6.0
dev: true
@ -9415,8 +9424,8 @@ packages:
fsevents: 2.3.2
dev: true
/rollup@3.28.1:
resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==}
/rollup@3.28.0:
resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
@ -10010,6 +10019,16 @@ packages:
engines: {node: '>=6'}
dev: true
/tough-cookie@4.1.2:
resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==}
engines: {node: '>=6'}
dependencies:
psl: 1.8.0
punycode: 2.1.1
universalify: 0.2.0
url-parse: 1.5.10
dev: true
/tough-cookie@4.1.3:
resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
engines: {node: '>=6'}
@ -10319,7 +10338,7 @@ packages:
extsprintf: 1.3.0
dev: true
/vite-node@0.28.4(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0):
/vite-node@0.28.4(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0):
resolution: {integrity: sha512-KM0Q0uSG/xHHKOJvVHc5xDBabgt0l70y7/lWTR7Q0pR5/MrYxadT+y32cJOE65FfjGmJgxpVEEY+69btJgcXOQ==}
engines: {node: '>=v14.16.0'}
hasBin: true
@ -10331,7 +10350,7 @@ packages:
picocolors: 1.0.0
source-map: 0.6.1
source-map-support: 0.5.21
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -10343,7 +10362,7 @@ packages:
- terser
dev: true
/vite-node@0.34.2(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0):
/vite-node@0.34.2(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0):
resolution: {integrity: sha512-JtW249Zm3FB+F7pQfH56uWSdlltCo1IOkZW5oHBzeQo0iX4jtC7o1t9aILMGd9kVekXBP2lfJBEQt9rBh07ebA==}
engines: {node: '>=v14.18.0'}
hasBin: true
@ -10353,7 +10372,7 @@ packages:
mlly: 1.4.0
pathe: 1.1.1
picocolors: 1.0.0
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -10372,7 +10391,7 @@ packages:
vite: ^3.0.0 || ^4.0.0
dependencies:
mime-types: 2.1.35
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
dev: true
/vite-plugin-pwa@0.16.4(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0):
@ -10386,7 +10405,7 @@ packages:
debug: 4.3.4(supports-color@8.1.1)
fast-glob: 3.2.12
pretty-bytes: 6.0.0
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
workbox-build: 7.0.0(acorn@7.4.1)
workbox-window: 7.0.0
transitivePeerDependencies:
@ -10400,7 +10419,7 @@ packages:
vite: ^2.6.0 || ^3.0.0 || ^4.0.0
dependencies:
'@sentry/cli': 2.19.1
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
transitivePeerDependencies:
- encoding
- supports-color
@ -10413,7 +10432,7 @@ packages:
svgo: 3.0.2
dev: true
/vite@4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0):
/vite@4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0):
resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@ -10441,17 +10460,17 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 18.17.8
'@types/node': 18.17.6
esbuild: 0.18.15
postcss: 8.4.28
rollup: 3.28.1
rollup: 3.28.0
sass: 1.66.1
terser: 5.10.0(acorn@7.4.1)
optionalDependencies:
fsevents: 2.3.2
dev: true
/vitest@0.34.2(happy-dom@10.11.0)(sass@1.66.1)(terser@5.10.0):
/vitest@0.34.2(happy-dom@10.10.4)(sass@1.66.1)(terser@5.10.0):
resolution: {integrity: sha512-WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBxQ==}
engines: {node: '>=v14.18.0'}
hasBin: true
@ -10484,7 +10503,7 @@ packages:
dependencies:
'@types/chai': 4.3.5
'@types/chai-subset': 1.3.3
'@types/node': 18.17.8
'@types/node': 18.17.6
'@vitest/expect': 0.34.2
'@vitest/runner': 0.34.2
'@vitest/snapshot': 0.34.2
@ -10495,7 +10514,7 @@ packages:
cac: 6.7.14
chai: 4.3.7
debug: 4.3.4(supports-color@8.1.1)
happy-dom: 10.11.0
happy-dom: 10.10.4
local-pkg: 0.4.3
magic-string: 0.30.1
pathe: 1.1.1
@ -10504,8 +10523,8 @@ packages:
strip-literal: 1.0.1
tinybench: 2.5.0
tinypool: 0.7.0
vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite-node: 0.34.2(@types/node@18.17.8)(sass@1.66.1)(terser@5.10.0)
vite: 4.4.9(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
vite-node: 0.34.2(@types/node@18.17.6)(sass@1.66.1)(terser@5.10.0)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less

View File

@ -9,21 +9,15 @@ import {MILLISECONDS_A_HOUR} from '@/constants/date'
const now = useNow({
interval: MILLISECONDS_A_HOUR,
})
const Logo = computed(() => window.ALLOW_ICON_CHANGES && now.value.getMonth() === 6 ? LogoFullPride : LogoFull)
const CustomLogo = computed(() => window.CUSTOM_LOGO_URL)
const Logo = computed(() => window.ALLOW_ICON_CHANGES && now.value.getMonth() === 5 ? LogoFullPride : LogoFull)
</script>
<template>
<div>
<Logo v-if="!CustomLogo" alt="Vikunja" class="logo" />
<img v-show="CustomLogo" :src="CustomLogo" alt="Vikunja" class="logo" />
</div>
<Logo alt="Vikunja" class="logo" />
</template>
<style lang="scss" scoped>
.logo {
color: var(--logo-text-color);
max-width: 168px;
max-height: 48px;
}
</style>

View File

@ -60,14 +60,6 @@
:can-collapse="false"
/>
</nav>
<nav class="menu" v-if="savedFilterProjects">
<ProjectsNavigation
:model-value="savedFilterProjects"
:can-edit-order="false"
:can-collapse="false"
/>
</nav>
<nav class="menu">
<ProjectsNavigation
@ -99,7 +91,6 @@ const projectStore = useProjectStore()
const projects = computed(() => projectStore.notArchivedRootProjects)
const favoriteProjects = computed(() => projectStore.favoriteProjects)
const savedFilterProjects = computed(() => projectStore.savedFilterProjects)
</script>
<style lang="scss" scoped>

View File

@ -33,7 +33,7 @@
}"
/>
<BaseButton
v-if="!project.isArchived && project.id > -1"
v-if="!project.isArchived"
class="favorite"
:class="{'is-favorite': project.isFavorite}"
@click.prevent.stop="projectStore.toggleProjectFavorite(project)"

View File

@ -157,7 +157,7 @@
<template
v-if="['filters.create', 'project.edit', 'filter.settings.edit'].includes($route.name as string)">
<div class="field">
<label class="label">{{ $t('project.projects') }}</label>
<label class="label">{{ $t('project.lists') }}</label>
<div class="control">
<SelectProject
v-model="entities.projects"

View File

@ -1,10 +1,6 @@
const LAST_VISITED_KEY = 'lastVisited'
export const saveLastVisited = (name: string | undefined, params: object, query: object) => {
if (typeof name === 'undefined') {
return
}
export const saveLastVisited = (name: string, params: object, query: object) => {
localStorage.setItem(LAST_VISITED_KEY, JSON.stringify({name, params, query}))
}
@ -13,7 +9,7 @@ export const getLastVisited = () => {
if (lastVisited === null) {
return null
}
return JSON.parse(lastVisited)
}

View File

@ -47,13 +47,8 @@ export async function setLanguage(lang: SupportedLocale): Promise<SupportedLocal
// If the language hasn't been loaded yet
if (!i18n.global.availableLocales.includes(lang)) {
try {
const messages = await import(`./lang/${lang}.json`)
i18n.global.setLocaleMessage(lang, messages.default)
} catch (e) {
console.error(`Failed to load language ${lang}:`, e)
return setLanguage(getBrowserLanguage())
}
const messages = await import(`./lang/${lang}.json`)
i18n.global.setLocaleMessage(lang, messages.default)
}
i18n.global.locale.value = lang

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,6 @@ declare global {
SENTRY_DSN: string;
PROJECT_INFINITE_NESTING_ENABLED: boolean;
ALLOW_ICON_CHANGES: boolean;
CUSTOM_LOGO_URL?: string;
}
}
@ -36,8 +35,8 @@ if (apiUrlFromStorage !== null) {
}
// Make sure the api url does not contain a / at the end
if (window.API_URL.endsWith('/')) {
window.API_URL = window.API_URL.slice(0, -1)
if (window.API_URL.slice(window.API_URL.length - 1, window.API_URL.length) === '/') {
window.API_URL = window.API_URL.slice(0, window.API_URL.length - 1)
}
// directives

View File

@ -85,6 +85,7 @@ export default class TaskModel extends AbstractModel<ITask> implements ITask {
index = 0
isFavorite = false
subscription: ISubscription = null
coverImageAttachmentId: IAttachment['id'] = null
position = 0
kanbanPosition = 0

View File

@ -448,9 +448,16 @@ export async function getAuthForRoute(to: RouteLocation, authStore) {
return
}
// Check if the route the user wants to go to is a route which needs authentication. We use this to
// redirect the user after successful login.
const isValidUserAppRoute = ![
const baseStore = useBaseStore()
// When trying this before the current user was fully loaded we might get a flash of the login screen
// in the user shell. To make shure this does not happen we check if everything is ready before trying.
if (!baseStore.ready) {
return
}
// Check if the user is already logged in and redirect them to the home page if not
if (
![
'user.login',
'user.password-reset.request',
'user.password-reset.reset',
@ -461,19 +468,8 @@ export async function getAuthForRoute(to: RouteLocation, authStore) {
localStorage.getItem('passwordResetToken') === null &&
localStorage.getItem('emailConfirmToken') === null &&
!(to.name === 'home' && (typeof to.query.userPasswordReset !== 'undefined' || typeof to.query.userEmailConfirm !== 'undefined'))
if (isValidUserAppRoute) {
) {
saveLastVisited(to.name as string, to.params, to.query)
}
const baseStore = useBaseStore()
// When trying this before the current user was fully loaded we might get a flash of the login screen
// in the user shell. To make sure this does not happen we check if everything is ready before trying.
if (!baseStore.ready) {
return
}
if (isValidUserAppRoute) {
return {name: 'user.login'}
}

View File

@ -36,11 +36,9 @@ export const useProjectStore = defineStore('project', () => {
const projectsArray = computed(() => Object.values(projects.value)
.sort((a, b) => a.position - b.position))
const notArchivedRootProjects = computed(() => projectsArray.value
.filter(p => p.parentProjectId === 0 && !p.isArchived && p.id > 0))
.filter(p => p.parentProjectId === 0 && !p.isArchived))
const favoriteProjects = computed(() => projectsArray.value
.filter(p => !p.isArchived && p.isFavorite))
const savedFilterProjects = computed(() => projectsArray.value
.filter(p => !p.isArchived && p.id < -1))
const hasProjects = computed(() => projectsArray.value.length > 0)
const getChildProjects = computed(() => {
@ -200,7 +198,6 @@ export const useProjectStore = defineStore('project', () => {
notArchivedRootProjects: readonly(notArchivedRootProjects),
favoriteProjects: readonly(favoriteProjects),
hasProjects: readonly(hasProjects),
savedFilterProjects: readonly(savedFilterProjects),
getChildProjects,
findProjectByExactname,

View File

@ -63,7 +63,7 @@
<nothing v-if="ctaVisible && tasks.length === 0 && !loading">
{{ $t('project.list.empty') }}
<ButtonLink @click="focusNewTaskInput()" v-if="project.id > 0">
<ButtonLink @click="focusNewTaskInput()">
{{ $t('project.list.newTaskCta') }}
</ButtonLink>
</nothing>