Compare commits

..

11 Commits

Author SHA1 Message Date
renovate 6fc64468e0 chore(deps): update dev-dependencies 2024-01-16 11:37:39 +00:00
renovate 01089f4f3d fix(deps): update tiptap to v2.1.16 (#3892)
continuous-integration/drone/push Build was killed Details
Reviewed-on: #3892
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2024-01-16 11:17:28 +00:00
kolaente a7461d1ddd
chore(deps): increase renovate timeout
continuous-integration/drone/push Build is passing Details
2024-01-16 12:15:04 +01:00
kolaente a451189bb6
fix(test): make date assertion not brittle
continuous-integration/drone/push Build is passing Details
2024-01-16 10:36:29 +01:00
kolaente bf9af27fc3
fix(task): update due date when marking a task done
continuous-integration/drone/push Build is failing Details
2024-01-15 23:33:02 +01:00
kolaente 5619fda0f2
fix(task): bubble date changes from the picker up
continuous-integration/drone/push Build is failing Details
Resolves https://github.com/go-vikunja/frontend/issues/142
2024-01-15 23:23:57 +01:00
kolaente 167953b26b
fix(editor): use higher-contrast colors for links and code
continuous-integration/drone/push Build is passing Details
2024-01-15 22:11:24 +01:00
kolaente 664bf0a5f4
fix(tasks): make sure tasks show up if their parent task is not available in the current view
continuous-integration/drone/push Build is passing Details
Related https://github.com/go-vikunja/frontend/issues/136
Related https://community.vikunja.io/t/subtasks-are-hidden-when-parent-tasks-are-moved/1911
2024-01-15 21:46:47 +01:00
kolaente 5e991f3024
fix: lint
continuous-integration/drone/push Build is passing Details
2024-01-15 16:21:00 +01:00
kolaente 28050d9cd5
fix(labels): make color reset work
continuous-integration/drone/push Build is failing Details
2024-01-15 14:00:08 +01:00
kolaente e94b71d577
fix(editor): list icons
continuous-integration/drone/push Build is passing Details
2024-01-15 13:39:17 +01:00
20 changed files with 409 additions and 302 deletions

View File

@ -541,6 +541,86 @@ describe('Task', () => {
.should('contain', 'Success') .should('contain', 'Success')
}) })
it('Can set a due date to a specific date for a task', () => {
const tasks = TaskFactory.create(1, {
id: 1,
done: false,
})
cy.visit(`/tasks/${tasks[0].id}`)
cy.get('.task-view .action-buttons .button')
.contains('Set Due Date')
.click()
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input .datepicker .show')
.click()
cy.get('.datepicker-popup .flatpickr-innerContainer .flatpickr-days .flatpickr-day.today')
.click()
cy.get('[data-cy="closeDatepicker"]')
.contains('Confirm')
.click()
const today = new Date()
const day = today.toLocaleString('default', {day: '2-digit'})
const month = today.toLocaleString('default', {month: 'short'})
const year = today.toLocaleString('default', {year: 'numeric'})
const date = `${day} ${month} ${year}, 12:00:00`
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input .datepicker-popup')
.should('not.exist')
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input')
.should('contain.text', date)
cy.get('.global-notification')
.should('contain', 'Success')
})
it('Can change a due date to a specific date for a task', () => {
const dueDate = new Date()
dueDate.setHours(12)
dueDate.setMinutes(0)
dueDate.setSeconds(0)
dueDate.setDate(1)
const tasks = TaskFactory.create(1, {
id: 1,
done: false,
due_date: dueDate.toISOString(),
})
cy.visit(`/tasks/${tasks[0].id}`)
cy.get('.task-view .action-buttons .button')
.contains('Set Due Date')
.click()
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input .datepicker .show')
.click()
cy.get('.datepicker-popup .flatpickr-innerContainer .flatpickr-days .flatpickr-day.today')
.click()
cy.get('[data-cy="closeDatepicker"]')
.contains('Confirm')
.click()
const today = new Date()
const day = today.toLocaleString('default', {day: '2-digit'})
const month = today.toLocaleString('default', {month: 'short'})
const year = today.toLocaleString('default', {year: 'numeric'})
const date = `${day} ${month} ${year}, 12:00:00`
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input .datepicker-popup')
.should('not.exist')
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input')
.should('contain.text', date)
cy.get('.global-notification')
.should('contain', 'Success')
})
it('Can set a reminder', () => { it('Can set a reminder', () => {
TaskReminderFactory.truncate() TaskReminderFactory.truncate()
const tasks = TaskFactory.create(1, { const tasks = TaskFactory.create(1, {
@ -645,7 +725,7 @@ describe('Task', () => {
.click() .click()
cy.get('.reminder-options-popup .card-content .reminder-period input') cy.get('.reminder-options-popup .card-content .reminder-period input')
.first() .first()
.type('10') .type('{selectall}10')
cy.get('.reminder-options-popup .card-content .reminder-period select') cy.get('.reminder-options-popup .card-content .reminder-period select')
.first() .first()
.select('days') .select('days')
@ -771,7 +851,7 @@ describe('Task', () => {
.should('exist') .should('exist')
}) })
it.only('Can check items off a checklist', () => { it('Can check items off a checklist', () => {
const tasks = TaskFactory.create(1, { const tasks = TaskFactory.create(1, {
id: 1, id: 1,
description: ` description: `
@ -858,7 +938,7 @@ describe('Task', () => {
method: 'PUT', method: 'PUT',
url: `${Cypress.env('API_URL')}/tasks/${tasks[0].id}/attachments`, url: `${Cypress.env('API_URL')}/tasks/${tasks[0].id}/attachments`,
headers: { headers: {
'Authorization': `Bearer ${window.localStorage.getItem('token')}`, 'Authorization': `Bearer ${window.localStorage.getItem('token')}`,
'Content-Type': 'multipart/form-data', 'Content-Type': 'multipart/form-data',
}, },
body: formData, body: formData,

View File

@ -55,39 +55,39 @@
"@kyvg/vue3-notification": "3.1.3", "@kyvg/vue3-notification": "3.1.3",
"@sentry/tracing": "7.93.0", "@sentry/tracing": "7.93.0",
"@sentry/vue": "7.93.0", "@sentry/vue": "7.93.0",
"@tiptap/core": "2.1.15", "@tiptap/core": "2.1.16",
"@tiptap/extension-blockquote": "2.1.15", "@tiptap/extension-blockquote": "2.1.16",
"@tiptap/extension-bold": "2.1.15", "@tiptap/extension-bold": "2.1.16",
"@tiptap/extension-bullet-list": "2.1.15", "@tiptap/extension-bullet-list": "2.1.16",
"@tiptap/extension-code": "2.1.15", "@tiptap/extension-code": "2.1.16",
"@tiptap/extension-code-block-lowlight": "2.1.15", "@tiptap/extension-code-block-lowlight": "2.1.16",
"@tiptap/extension-document": "2.1.15", "@tiptap/extension-document": "2.1.16",
"@tiptap/extension-dropcursor": "2.1.15", "@tiptap/extension-dropcursor": "2.1.16",
"@tiptap/extension-gapcursor": "2.1.15", "@tiptap/extension-gapcursor": "2.1.16",
"@tiptap/extension-hard-break": "2.1.15", "@tiptap/extension-hard-break": "2.1.16",
"@tiptap/extension-heading": "2.1.15", "@tiptap/extension-heading": "2.1.16",
"@tiptap/extension-history": "2.1.15", "@tiptap/extension-history": "2.1.16",
"@tiptap/extension-horizontal-rule": "2.1.15", "@tiptap/extension-horizontal-rule": "2.1.16",
"@tiptap/extension-image": "2.1.15", "@tiptap/extension-image": "2.1.16",
"@tiptap/extension-italic": "2.1.15", "@tiptap/extension-italic": "2.1.16",
"@tiptap/extension-link": "2.1.15", "@tiptap/extension-link": "2.1.16",
"@tiptap/extension-list-item": "2.1.15", "@tiptap/extension-list-item": "2.1.16",
"@tiptap/extension-ordered-list": "2.1.15", "@tiptap/extension-ordered-list": "2.1.16",
"@tiptap/extension-paragraph": "2.1.15", "@tiptap/extension-paragraph": "2.1.16",
"@tiptap/extension-placeholder": "2.1.15", "@tiptap/extension-placeholder": "2.1.16",
"@tiptap/extension-strike": "2.1.15", "@tiptap/extension-strike": "2.1.16",
"@tiptap/extension-table": "2.1.15", "@tiptap/extension-table": "2.1.16",
"@tiptap/extension-table-cell": "2.1.15", "@tiptap/extension-table-cell": "2.1.16",
"@tiptap/extension-table-header": "2.1.15", "@tiptap/extension-table-header": "2.1.16",
"@tiptap/extension-table-row": "2.1.15", "@tiptap/extension-table-row": "2.1.16",
"@tiptap/extension-task-item": "2.1.15", "@tiptap/extension-task-item": "2.1.16",
"@tiptap/extension-task-list": "2.1.15", "@tiptap/extension-task-list": "2.1.16",
"@tiptap/extension-text": "2.1.15", "@tiptap/extension-text": "2.1.16",
"@tiptap/extension-typography": "2.1.15", "@tiptap/extension-typography": "2.1.16",
"@tiptap/extension-underline": "2.1.15", "@tiptap/extension-underline": "2.1.16",
"@tiptap/pm": "2.1.15", "@tiptap/pm": "2.1.16",
"@tiptap/suggestion": "2.1.15", "@tiptap/suggestion": "2.1.16",
"@tiptap/vue-3": "2.1.15", "@tiptap/vue-3": "2.1.16",
"@types/is-touch-device": "1.0.2", "@types/is-touch-device": "1.0.2",
"@types/lodash.clonedeep": "4.5.9", "@types/lodash.clonedeep": "4.5.9",
"@vueuse/core": "10.7.1", "@vueuse/core": "10.7.1",

View File

@ -41,104 +41,104 @@ dependencies:
specifier: 7.93.0 specifier: 7.93.0
version: 7.93.0(vue@3.4.8) version: 7.93.0(vue@3.4.8)
'@tiptap/core': '@tiptap/core':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/extension-blockquote': '@tiptap/extension-blockquote':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-bold': '@tiptap/extension-bold':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-bullet-list': '@tiptap/extension-bullet-list':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-code': '@tiptap/extension-code':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-code-block-lowlight': '@tiptap/extension-code-block-lowlight':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/extension-code-block@2.1.12)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/extension-code-block@2.1.12)(@tiptap/pm@2.1.16)
'@tiptap/extension-document': '@tiptap/extension-document':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-dropcursor': '@tiptap/extension-dropcursor':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-gapcursor': '@tiptap/extension-gapcursor':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-hard-break': '@tiptap/extension-hard-break':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-heading': '@tiptap/extension-heading':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-history': '@tiptap/extension-history':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-horizontal-rule': '@tiptap/extension-horizontal-rule':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-image': '@tiptap/extension-image':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-italic': '@tiptap/extension-italic':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-link': '@tiptap/extension-link':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-list-item': '@tiptap/extension-list-item':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-ordered-list': '@tiptap/extension-ordered-list':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-paragraph': '@tiptap/extension-paragraph':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-placeholder': '@tiptap/extension-placeholder':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-strike': '@tiptap/extension-strike':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-table': '@tiptap/extension-table':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-table-cell': '@tiptap/extension-table-cell':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-table-header': '@tiptap/extension-table-header':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-table-row': '@tiptap/extension-table-row':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-task-item': '@tiptap/extension-task-item':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-task-list': '@tiptap/extension-task-list':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-text': '@tiptap/extension-text':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-typography': '@tiptap/extension-typography':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/extension-underline': '@tiptap/extension-underline':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)
'@tiptap/pm': '@tiptap/pm':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15 version: 2.1.16
'@tiptap/suggestion': '@tiptap/suggestion':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/vue-3': '@tiptap/vue-3':
specifier: 2.1.15 specifier: 2.1.16
version: 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15)(vue@3.4.8) version: 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)(vue@3.4.8)
'@types/is-touch-device': '@types/is-touch-device':
specifier: 1.0.2 specifier: 1.0.2
version: 1.0.2 version: 1.0.2
@ -295,8 +295,8 @@ devDependencies:
specifier: 5.2.0 specifier: 5.2.0
version: 5.2.0(terser@5.24.0)(vite@5.0.11) version: 5.2.0(terser@5.24.0)(vite@5.0.11)
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: 4.6.2 specifier: 5.0.3
version: 4.6.2(vite@5.0.11)(vue@3.4.8) version: 5.0.3(vite@5.0.11)(vue@3.4.8)
'@vue/eslint-config-typescript': '@vue/eslint-config-typescript':
specifier: 12.0.0 specifier: 12.0.0
version: 12.0.0(eslint-plugin-vue@9.19.2)(eslint@8.56.0)(typescript@5.3.3) version: 12.0.0(eslint-plugin-vue@9.19.2)(eslint@8.56.0)(typescript@5.3.3)
@ -334,8 +334,8 @@ devDependencies:
specifier: 9.19.2 specifier: 9.19.2
version: 9.19.2(eslint@8.56.0) version: 9.19.2(eslint@8.56.0)
happy-dom: happy-dom:
specifier: 12.10.3 specifier: 13.1.4
version: 12.10.3 version: 13.1.4
histoire: histoire:
specifier: 0.17.6 specifier: 0.17.6
version: 0.17.6(@types/node@20.10.8)(sass@1.69.7)(terser@5.24.0)(vite@5.0.11) version: 0.17.6(@types/node@20.10.8)(sass@1.69.7)(terser@5.24.0)(vite@5.0.11)
@ -386,7 +386,7 @@ devDependencies:
version: 5.1.0(vue@3.4.8) version: 5.1.0(vue@3.4.8)
vitest: vitest:
specifier: 1.1.3 specifier: 1.1.3
version: 1.1.3(@types/node@20.10.8)(happy-dom@12.10.3)(sass@1.69.7)(terser@5.24.0) version: 1.1.3(@types/node@20.10.8)(happy-dom@13.1.4)(sass@1.69.7)(terser@5.24.0)
vue-tsc: vue-tsc:
specifier: 1.8.27 specifier: 1.8.27
version: 1.8.27(typescript@5.3.3) version: 1.8.27(typescript@5.3.3)
@ -4369,301 +4369,301 @@ packages:
defer-to-connect: 1.1.3 defer-to-connect: 1.1.3
dev: true dev: true
/@tiptap/core@2.1.15(@tiptap/pm@2.1.15): /@tiptap/core@2.1.16(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-bsSUOQ9/OrQ3O4OFrMzjbCcShwHUS0w71DZoZTkOElnUFK2fu6IjDh8kbZyIxMW+sWuvLK/KePLdHOKOl1l/3Q==} resolution: {integrity: sha512-nKnV603UyzbcrqhCXTWxDN22Ujb4VNfmKkACms1JOMGo7BVARmMCp2nBsLW8fmgCxmf8AS0LXY63tU7ILWYc5g==}
peerDependencies: peerDependencies:
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-blockquote@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-blockquote@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-H7zKKL85ZefhXS0ye3YYCUemStcs3PQLuSznR/T/KX3ds7AMhHbfRx3nRbMYYUT2dHd0DVVrhgdQPu4HhwbZVQ==} resolution: {integrity: sha512-1OMk8cBrL0VnbnzD3XHx7U4oMDCiXRR7Spfl9JqwC9pS4RosOUBySNxpEBwhSegB0pK6sd7m44qLqj00If+cHA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-bold@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-bold@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-bGaRXldgZaf7fGwuD0nFuwhxOPLhSa9cqkq4zOUHEQ0LAdXAqAtOe7ftF2Er7bHTd9kp6bvVvcNSWKi+PTTApw==} resolution: {integrity: sha512-gz2VrBkRRsGBiOHx1qB++VUfpuRdhJp6jlgNqqHFbIkjKr2NB+u7oiH5SbjlL4eG0wlam1QA4jAkXhZgdvkA4g==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-bubble-menu@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-bubble-menu@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-nHTeIYKruau6KL7fh1pvWBrzVXH1YE7S96RPPQ6dNwZjb9F3tXNVrIpPhR3Pafhy4LGHYvWYiZekc3Ir0dM4aQ==} resolution: {integrity: sha512-MwKCmu2kU7+Xln/BvlrolU2hCXgoCoTr4NXJ+3v8A9w7tIq8leADoWacfEee2t3VNnGdXw/Xjza+DAr77JWjGg==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
tippy.js: 6.3.7 tippy.js: 6.3.7
dev: false dev: false
/@tiptap/extension-bullet-list@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-bullet-list@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-xRJK7s2Nr47VgCfCzhQ5X5uYZPIARWS9HddFyDzlUK5fJbW9ISQ0HEl2y1eEAUqG+l0l/1o6HuBu4A4EkGMUQA==} resolution: {integrity: sha512-Cheaep5JShO9TtRslrOObSVKtRQFKozou2ZWDas5sIeef/A/GWPfVTzusfBGE/ItHwZNaDXwJOoVnSUPT8ulfw==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-code-block-lowlight@2.1.15(@tiptap/core@2.1.15)(@tiptap/extension-code-block@2.1.12)(@tiptap/pm@2.1.15): /@tiptap/extension-code-block-lowlight@2.1.16(@tiptap/core@2.1.16)(@tiptap/extension-code-block@2.1.12)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-/CvqgGrLz6gFacWfLbBrh6fBYCcr/nXXSWiAql68YofntjAzKjnrpVHmn9xriyrFnsRLRuhD+yNXaZAvt9U/VA==} resolution: {integrity: sha512-tudlWkCcd+wrVot9yWQJLMd3Y6u5ma4tVDju3EEruzC/Tpf/Uoxj/HBoPIGT2L+l/O3Qq1OPeSkmeaW6qAdpPA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/extension-code-block': ^2.0.0 '@tiptap/extension-code-block': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/extension-code-block': 2.1.12(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) '@tiptap/extension-code-block': 2.1.12(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-code-block@2.1.12(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-code-block@2.1.12(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-RXtSYCVsnk8D+K80uNZShClfZjvv1EgO42JlXLVGWQdIgaNyuOv/6I/Jdf+ZzhnpsBnHufW+6TJjwP5vJPSPHA==} resolution: {integrity: sha512-RXtSYCVsnk8D+K80uNZShClfZjvv1EgO42JlXLVGWQdIgaNyuOv/6I/Jdf+ZzhnpsBnHufW+6TJjwP5vJPSPHA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-code@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-code@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-0IMHsTEuJ0AUXGLwJm60MdDSbflN2J8z/8ahFpw4qBGgJELXCSFCdGVW4QBd3A5QkAYsMZHfSOXhF1sTBIgM9Q==} resolution: {integrity: sha512-2+fVfh3qQORgMRSZ6hn+yW5/rLzlulCzMhdL07G0lWY8/eWEv3p9DCfgw9AOHrrHFim8/MVWyRkrkBM/yHX9FA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-document@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-document@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-rqlpCaVxjUmCqZhc8KYm3/21z8jhg3gphG0AO2MX78zyT0Wgw/EEDii1kFzFbTVj8VUV3JfaU1HWNVjK8hbDNQ==} resolution: {integrity: sha512-VSOrzGnpI9dJDffFn3ZjmPKYkH/YtYeDl6nqLu7TafRqyLMSEqxxxq/+Qs/7j8jbzq6osslY0sySckSulroIOg==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-dropcursor@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-dropcursor@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-VTod6dGC2M1hy0suReUJu7f1raSAyROSKE+Hp1zTaRaEjnE8mW+2PtPLQ5CRHmdLgAD2k1dGRNnxnsO6aqX2jg==} resolution: {integrity: sha512-voWEIAmxV3f9Q0gc3K89HRq8KFeOVtHJBRHYihZwxMnvq2aMIwdpCx0GbiCd4slQaBLd1ASJHz1uAigVhR2+uA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-floating-menu@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-floating-menu@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-2qrRE2HpF2vgYK72+CbT6xrhlShw4dS2xPV6kuXaYuBHR7tiyeGusCg7CXr7mZxIdTVj/+nNj3GCtST/+A7d5w==} resolution: {integrity: sha512-VBT4HBhkKr9S1VExyTb/qfQyZ5F0VJLasUoH8E4kdq3deCeifmTTIOukuXK5QbicFHVQmY2epeU6+w5c/bAcHQ==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
tippy.js: 6.3.7 tippy.js: 6.3.7
dev: false dev: false
/@tiptap/extension-gapcursor@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-gapcursor@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-92Vdnr7UHAjCNJXa1J61PVu7K68OW44o7pRPVwBujlPWZK9MgEJAOC0DNW3u4u+dqJu8fdrfnUXSrzzB/DCoLg==} resolution: {integrity: sha512-Bgjo0da0W1QOhtnT3NR7GHPmVBZykNRekNGsTA3+nxCjkqh1G32Jt58TBKP3vdLBaww3lhrii0SYVErlFgIJnA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-hard-break@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-hard-break@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-vQvP6Nzc6KE1mmKZdwNAlB12/1HeBmgUFSJPevnDLVvnaxla1tri/GtBIYONhZK3zPPY2PPj4Dt+4JWgK0rn1g==} resolution: {integrity: sha512-H3Bk8Gu5pV7xH8TrzH0WAoXrJVEKsDA6Evyl7H7aCAMAvotQL0ehuuX88bjPMCSAvBXZE39wYnJCJshGbVx0BA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-heading@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-heading@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-3ck2+Xkke8IvLXDzYP1fw/GlWr0SZ1AnaNQvywobG4+WKc2HjhgBnHG9mZiCNvL3dXrSqSs2spBraoKYrMYBfA==} resolution: {integrity: sha512-vFQuAAnIxDwKjTV+ScSwIaeG4Uhm1cZddnbLTru1EJfIz9VvpHDZKEyL4ZJvWuKMAhCzlw54TQhBCVHqalXyaA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-history@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-history@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-KhCElkZJvNdOPxtCt+CzgxE2vIk+r4mnTay9+hC/6iVRcs24JTaDUihSwiC+lW0ot5zB1OxWUCLpgRnpJ9qdkA==} resolution: {integrity: sha512-9YHPf8Xqqp5CQy1hJonkBzROj0ZHR1ZaIk9IaLlAPTpdkrUDXV9SC7qp3lozQsMg4vmU3K6H5VQo4ADpnR00OQ==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-horizontal-rule@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-horizontal-rule@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-vywkBeGMOe6Duk3aInVPF6iHjoHWTNVYK5DCrUVyegb+XKqDIuiRN5UjOZ/3fqAZ6lvuuIMF58ZsW5c+skrXNg==} resolution: {integrity: sha512-Q+Zp0lJF7212YIuZnbMmn4KC1MZoZjQIuvSd+DOgCwKSeUcTXBbljDjOiN8yrY134r+A4fFM7KHTXWYqZGZQug==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-image@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-image@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-hAtCwSBP1F+I/kvDDV/fmLMlF7Xx1FmMZOekgQwMtbgMYGpgttpYUFqMxMFYN7ldsSOXzmxGEtlfc1Jq3f741w==} resolution: {integrity: sha512-idvmJzdG/u9YDt/GOCvgQMB1p/GZbBqb2Spk8BhXHoBGHR4zFo609ExccXYKR4UWs0iTACDq80VwJvfHa8XYKw==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-italic@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-italic@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-8bNDAv3kvIb+bIsGq5az/rd5oIN3E3NSIx2x/FZ1LqMTVhBJ/mWRVZf8etV4O2oCRXiVPlUDXCEMWqDRxCzYgg==} resolution: {integrity: sha512-6mFGPBGxd2aICJ5Q3zYxuXO8slKoOP/PsSjEQn1bjs3h8Q3mPxHX290ePVp728o5F0myM9sxKSz2V6/VeuS/Yw==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-link@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-link@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-mqjZws+8VyOl++pUeB2t4E/sCKhsxutLGVZY7yGRNdl30SfJirTf9hdcJRSpVkmI+9fiQ6Xnx081kCs7oaKZLw==} resolution: {integrity: sha512-QIXYwxHi2kKU2sqDXngTpggO4ZmLm4vMxDlbWT9so1iUPAqQJW2ZRbdygFYy1txirWcoaJKocPwSJemyAeUzmw==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
linkifyjs: 4.1.1 linkifyjs: 4.1.1
dev: false dev: false
/@tiptap/extension-list-item@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-list-item@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-71/9rJ3gJPUt1lAf31FvpcYB8tvKyC93wKngl/GOfL5VSjOqrsNMne8hqsHzuEgu+uPElVHgSG3b5MLhxUU9TA==} resolution: {integrity: sha512-RLUodzFispIe1adarCEzf+OfaGZna/WR/k/HqPnbflSiJ6/I2P5MqI+ELjGGvc53eanf3+KpsHlB2Pganp8sMA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-ordered-list@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-ordered-list@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-AyhxEpc+7/TDeK4kK1kAVhmsNGEekmd3pa+Xfrajr+3w93QKJwwTdoXz9rFLj6rP8/2JWPMpxVF4DTO67olFWg==} resolution: {integrity: sha512-6QLUm90wz2lfzWGV4fX5NOOFA8zKlcDBNrTeOd0V7H4fcafLmANqU/5o4LLNJmK8y8f1YAvmHr9xgciqggGJJA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-paragraph@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-paragraph@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-QPpv+PR3LfOcRpWTDXvQ904yJ4+3AGNOCXAoW/I0qzW/rb0h1vTSUrknGGR6gzxaDwPsUqewVmxL/ZejO/EKfQ==} resolution: {integrity: sha512-JwCKSFjBLd9xAmxLe7hf1h4AucDvkGTfDb/wA1jId64g+uf0/tm6RDjnk/QD+D2YzoLGFLjQm0GAdPXTmyTPdA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-placeholder@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-placeholder@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-a6jtylXlUUl/GmPfbBf2pVHcm60RnZWVO5V2H/WTLzzzl+jUuPKeXyS3ISyaueCOSq9zEsvOQz+DQjiFsUEhdw==} resolution: {integrity: sha512-C6xgWKn6LT7yhvz0RCHjzFxpstFCHUw2eXisrHlOz36SP/1EmGIBiKqJUP7ySSSQMgl4hzHDhj6W1KyGdsyYaA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-strike@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-strike@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-rGt/A8H5H1fFaxKFI7J8vNJOzUpgThDMSewuaHngGZN0+8Dd5opmXWUjwEEVqWWVP43L3uO8i8+d8V1/WPMV+Q==} resolution: {integrity: sha512-Z1hmBK1QWMMGDV2MJ3KBDiMuzcScjyx88cP5ln5G7626Zxeqywf84KF+2WyHBzJWfwMWpAouzwHKe9ld39Vu1w==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-table-cell@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-table-cell@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-s2hO3ZW+iszjBgKJlGapNY5N4DIcVVUpHrZngNzGmv0EbbLYCyFoGQKAaJhq0z335rW5Hq+k19BE0HKI3jc1pQ==} resolution: {integrity: sha512-qHKQAfPSLaTb4A9f/++YPX4uC+F8LFxuNfgOIMzEJbPxSJ00KJp56YM1w0ctAJIZoxHWN7USRW6RYm995aLblg==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-table-header@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-table-header@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-5MmoT6ZmRzYZorXdqkiWaph02ZQBecoHd/vTpYMD1CwD7sEP+2Oij11jJq6URbvVDLEZU8LqT0wlC+Fo4O7J8A==} resolution: {integrity: sha512-RIyHNPTUhLHSNMQnqGG1rd53qxIwVbnb3AIANDV/KWpaACDgAOLJvdH/+oRiVe5C9BlAw6l9kGDr8iBAhBdnWw==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-table-row@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-table-row@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-fKqXouDfHVZrpcbCPEluHiJOqkSfNHyqS+IA1DQvM/3kWpqfh8GMs7ZQJI2RGXmgqUul0sbDpB7jT3OD3cPhmw==} resolution: {integrity: sha512-fVoNuef+YX7HyGpgljdphYdoxmbRjs/WJZDYsbXSmNaNc6I1jT9gpeBmRcVaB8oqrtIaE1GaR7u6Ricp4tpkVA==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-table@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-table@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-7mEytHrY7eLaJHyHNwC5l7IXHMTBF2HydCX/sF5Z3oNh63bCGWo/5NjvW6fjJd9B6KQ5yH5ec+gO7uPaf/555w==} resolution: {integrity: sha512-Xvi0GyHYKBL3KQ5CiayDxjMecEIdokZDTjczPzDB1VYiHwM1/PFFWqJlhmSSOzGgcyjwV8/Pn6eumqM3rCqKFw==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-task-item@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/extension-task-item@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-0jjVlhDhfkfXN78310BAk9w+9q7+Xkvi53LsCyQGxaGkypDOjTdPLY94vmaopmjwkKhBRJFGYmGzc9zENMAWhA==} resolution: {integrity: sha512-kqeoAPAh3TGhAiJMkFlVcRzI765MB4KzGL9fJEQY7oeZF8FG9mYcMlqD7SkpdmV5UOJ+uWByIca4yWwHoyBIUg==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/extension-task-list@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-task-list@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-E9YYoyRjJZRIZPDGaq7LIoz1loQ6Tz8Ri+EeObkf2GIKTohzLQz3GQk8mpuoLFWAr3P+VGEq2857aQFj2P9mNQ==} resolution: {integrity: sha512-NZzjK8SN3LZcjnwHLiCYPrNRs4nqax+b36GqB1o4GC1Vqmkt8ynW+MII09i08LhBYVJSX2yzRKPE2RDhCeAWig==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-text@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-text@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-TpYbSmJOItU0OkydnRgKFT0BpZpS4E1GC/rlpc7R3f+lL8VMuS7AnZKFQj8A7F8mEEWAWZtDIjLPvY3SztVtVg==} resolution: {integrity: sha512-XzSJmAj32uYpaL/9FX3tRSU52DwZ9w+3yEffIcSN9MSwioqLsSolXOz7TuJfW6lSTar1ml9UPlRqX4dpayUTDQ==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-typography@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-typography@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-oZ3KLj6VDHlFGhDHMGbj2u6JL3Svk3E3xMQD/ON3/WyHm0gv8L0i373cn1DgBddnLJTcYvQIDl/q1i1y3lCSng==} resolution: {integrity: sha512-1lQzgcnviYV/wm78YB4CIuVI4is0bLGxxEjrDjOexEYINbBJAEESYeUZjwVyU7VKJRWO/0rpwtFJ7D/BVibMkQ==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/extension-underline@2.1.15(@tiptap/core@2.1.15): /@tiptap/extension-underline@2.1.16(@tiptap/core@2.1.16):
resolution: {integrity: sha512-GennZVVC0QI7An7CRsnHykYPZnHAQWG8o8l+4Stg3UcGym7xH9tUv3JNxiDbjijw/jHDQVf7FJtjTNH749+4NA==} resolution: {integrity: sha512-OXGzIlKz5fA9BRdqC+HOkLFfJULfq2kOXc0ipKLoUq5sNoMGvmxnJbgv+mczKCDoJR/F3NsDCHQXLmaW7AYvcw==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
dev: false dev: false
/@tiptap/pm@2.1.15: /@tiptap/pm@2.1.16:
resolution: {integrity: sha512-iQYr1XBWqrILzNYKWeCTmF83AhYKuONukIKf09QD2kLwlR2ZRca3NM4U3KFs3oHYt5xjdFrT95U8nmCIs10VEQ==} resolution: {integrity: sha512-yibLkjtgbBSnWCXbDyKM5kgIGLfMvfbRfFzb8T0uz4PI/L54o0a4fiWSW5Fg10B5+o+NAXW2wMxoId8/Tw91lQ==}
dependencies: dependencies:
prosemirror-changeset: 2.2.1 prosemirror-changeset: 2.2.1
prosemirror-collab: 1.3.1 prosemirror-collab: 1.3.1
@ -4685,27 +4685,27 @@ packages:
prosemirror-view: 1.32.1 prosemirror-view: 1.32.1
dev: false dev: false
/@tiptap/suggestion@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15): /@tiptap/suggestion@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16):
resolution: {integrity: sha512-m2Hv4nOBKd1LTDCZFxRz8v9KSW+WmA0Z1XZTRRu4M8YkDlgTuzLuOTHwITa+zpUAHzuESgEATK+Pl2NyOqUv6g==} resolution: {integrity: sha512-3kYgpT1oTSgjLesAU3rV3lkcqVRV9K520/tA1IhXAC+UsofUEkflXftoMnaJjwgEfKM3n87uJlyPFEUBiC7xYg==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
dev: false dev: false
/@tiptap/vue-3@2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15)(vue@3.4.8): /@tiptap/vue-3@2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)(vue@3.4.8):
resolution: {integrity: sha512-EubApxGbpAVD7+fQ9h0xSd/hbyDI+fF91LGHeBHEZA2gLX8XX3cSXRlPWcEYvvB1VeTfUfxnY912uVAGRm9m9Q==} resolution: {integrity: sha512-pvfIsBAyFeZVllnl38DFX8X11XMvFcT2/vViAtkDwJpX2W/m/nmxOSlEnqmOEzC+sbFqk7bhKpBVElaROV+U0w==}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.0.0 '@tiptap/core': ^2.0.0
'@tiptap/pm': ^2.0.0 '@tiptap/pm': ^2.0.0
vue: ^3.0.0 vue: ^3.0.0
dependencies: dependencies:
'@tiptap/core': 2.1.15(@tiptap/pm@2.1.15) '@tiptap/core': 2.1.16(@tiptap/pm@2.1.16)
'@tiptap/extension-bubble-menu': 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) '@tiptap/extension-bubble-menu': 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/extension-floating-menu': 2.1.15(@tiptap/core@2.1.15)(@tiptap/pm@2.1.15) '@tiptap/extension-floating-menu': 2.1.16(@tiptap/core@2.1.16)(@tiptap/pm@2.1.16)
'@tiptap/pm': 2.1.15 '@tiptap/pm': 2.1.16
vue: 3.4.8(typescript@5.3.3) vue: 3.4.8(typescript@5.3.3)
dev: false dev: false
@ -5087,11 +5087,11 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@vitejs/plugin-vue@4.6.2(vite@5.0.11)(vue@3.4.8): /@vitejs/plugin-vue@5.0.3(vite@5.0.11)(vue@3.4.8):
resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} resolution: {integrity: sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies: peerDependencies:
vite: ^4.0.0 || ^5.0.0 vite: ^5.0.0
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: 5.0.11(@types/node@20.10.8)(sass@1.69.7)(terser@5.24.0) vite: 5.0.11(@types/node@20.10.8)(sass@1.69.7)(terser@5.24.0)
@ -7536,8 +7536,8 @@ packages:
strip-bom-string: 1.0.0 strip-bom-string: 1.0.0
dev: true dev: true
/happy-dom@12.10.3: /happy-dom@13.1.4:
resolution: {integrity: sha512-JzUXOh0wdNGY54oKng5hliuBkq/+aT1V3YpTM+lrN/GoLQTANZsMaIvmHiHe612rauHvPJnDZkZ+5GZR++1Abg==} resolution: {integrity: sha512-f8STa4iuJcpXn7YjgqBEemzinyPAdjlHMxlCNbIERdRIjJO9Z9Cj3XW5LuiEhsURFfl0AOWqj0hQitme4gq+Gg==}
dependencies: dependencies:
css.escape: 1.5.1 css.escape: 1.5.1
entities: 4.5.0 entities: 4.5.0
@ -11134,7 +11134,7 @@ packages:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true
/vitest@1.1.3(@types/node@20.10.8)(happy-dom@12.10.3)(sass@1.69.7)(terser@5.24.0): /vitest@1.1.3(@types/node@20.10.8)(happy-dom@13.1.4)(sass@1.69.7)(terser@5.24.0):
resolution: {integrity: sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ==} resolution: {integrity: sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true hasBin: true
@ -11170,7 +11170,7 @@ packages:
chai: 4.3.10 chai: 4.3.10
debug: 4.3.4(supports-color@8.1.1) debug: 4.3.4(supports-color@8.1.1)
execa: 8.0.1 execa: 8.0.1
happy-dom: 12.10.3 happy-dom: 13.1.4
local-pkg: 0.5.0 local-pkg: 0.5.0
magic-string: 0.30.5 magic-string: 0.30.5
pathe: 1.1.1 pathe: 1.1.1

View File

@ -4,6 +4,11 @@
"extends": [ "extends": [
"config:js-app" "config:js-app"
], ],
"hostRules": [
{
"timeout": 600000
}
],
"packageRules": [ "packageRules": [
{ {
"matchPackageNames": ["happy-dom"], "matchPackageNames": ["happy-dom"],

View File

@ -128,9 +128,11 @@ const flatPickrDate = computed({
return return
} }
const oldDate = formatDate(date.value, 'yyy-LL-dd H:mm') if (date.value !== null) {
if (oldDate !== newValue) { const oldDate = formatDate(date.value, 'yyy-LL-dd H:mm')
return if (oldDate === newValue) {
return
}
} }
date.value = createDateFromString(newValue) date.value = createDateFromString(newValue)
updateData() updateData()

View File

@ -110,7 +110,7 @@
v-tooltip="$t('input.editor.bulletList')" v-tooltip="$t('input.editor.bulletList')"
> >
<span class="icon"> <span class="icon">
<icon :icon="['fa', 'fa-list-ol']"/> <icon :icon="['fa', 'fa-list-ul']"/>
</span> </span>
</BaseButton> </BaseButton>
<BaseButton <BaseButton
@ -120,7 +120,7 @@
v-tooltip="$t('input.editor.orderedList')" v-tooltip="$t('input.editor.orderedList')"
> >
<span class="icon"> <span class="icon">
<icon :icon="['fa', 'fa-list-ul']"/> <icon :icon="['fa', 'fa-list-ol']"/>
</span> </span>
</BaseButton> </BaseButton>
<BaseButton <BaseButton

View File

@ -671,36 +671,17 @@ watch(
line-height: 1.1; line-height: 1.1;
} }
a {
color: #68cef8;
}
code { code {
background-color: rgba(#616161, 0.1); background-color: var(--grey-200);
color: #616161; color: var(--grey-700);
} }
pre { pre {
background: #0d0d0d; background: var(--grey-200);
color: #fff; color: var(--grey-700);
font-family: 'JetBrainsMono', monospace; font-family: 'JetBrainsMono', monospace;
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
border-radius: 0.5rem; border-radius: $radius;
code {
color: inherit;
padding: 0;
background: none;
font-size: 0.8rem;
}
}
pre {
background: #0d0d0d;
color: #fff;
font-family: 'JetBrainsMono', monospace;
padding: 0.75rem 1rem;
border-radius: 0.5rem;
code { code {
color: inherit; color: inherit;
@ -711,7 +692,7 @@ watch(
.hljs-comment, .hljs-comment,
.hljs-quote { .hljs-quote {
color: #616161; color: var(--grey-500);
} }
.hljs-variable, .hljs-variable,
@ -724,7 +705,7 @@ watch(
.hljs-name, .hljs-name,
.hljs-selector-id, .hljs-selector-id,
.hljs-selector-class { .hljs-selector-class {
color: #f98181; color: var(--code-variable);
} }
.hljs-number, .hljs-number,
@ -734,23 +715,23 @@ watch(
.hljs-literal, .hljs-literal,
.hljs-type, .hljs-type,
.hljs-params { .hljs-params {
color: #fbbc88; color: var(--code-literal);
} }
.hljs-string, .hljs-string,
.hljs-symbol, .hljs-symbol,
.hljs-bullet { .hljs-bullet {
color: #b9f18d; color: var(--code-symbol);
} }
.hljs-title, .hljs-title,
.hljs-section { .hljs-section {
color: #faf594; color: var(--code-section);
} }
.hljs-keyword, .hljs-keyword,
.hljs-selector-tag { .hljs-selector-tag {
color: #70cff8; color: var(--code-keyword);
} }
.hljs-emphasis { .hljs-emphasis {

View File

@ -1,5 +1,5 @@
<template> <template>
<slot name="trigger" :isOpen="open" :toggle="toggle"></slot> <slot name="trigger" :isOpen="open" :toggle="toggle" :close="close"></slot>
<div <div
class="popup" class="popup"
:class="{ :class="{
@ -8,7 +8,7 @@
}" }"
ref="popup" ref="popup"
> >
<slot name="content" :isOpen="open" :toggle="toggle"/> <slot name="content" :isOpen="open" :toggle="toggle" :close="close"/>
</div> </div>
</template> </template>

View File

@ -51,6 +51,7 @@ import Multiselect from '@/components/input/multiselect.vue'
import type {ILabel} from '@/modelTypes/ILabel' import type {ILabel} from '@/modelTypes/ILabel'
import {useLabelStore} from '@/stores/labels' import {useLabelStore} from '@/stores/labels'
import {useTaskStore} from '@/stores/tasks' import {useTaskStore} from '@/stores/tasks'
import {getRandomColorHex} from '@/helpers/color/randomColor'
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {
@ -132,7 +133,10 @@ async function createAndAddLabel(title: string) {
return return
} }
const newLabel = await labelStore.createLabel(new LabelModel({title})) const newLabel = await labelStore.createLabel(new LabelModel({
title,
hexColor: getRandomColorHex(),
}))
addLabel(newLabel, false) addLabel(newLabel, false)
labels.value.push(newLabel) labels.value.push(newLabel)
success({message: t('task.label.addCreateSuccess')}) success({message: t('task.label.addCreateSuccess')})

View File

@ -9,7 +9,7 @@
{{ reminderText }} {{ reminderText }}
</SimpleButton> </SimpleButton>
</template> </template>
<template #content="{isOpen, toggle}"> <template #content="{isOpen, close}">
<Card class="reminder-options-popup" :class="{'is-open': isOpen}" :padding="false"> <Card class="reminder-options-popup" :class="{'is-open': isOpen}" :padding="false">
<div class="options" v-if="activeForm === null"> <div class="options" v-if="activeForm === null">
<SimpleButton <SimpleButton
@ -17,7 +17,7 @@
:key="k" :key="k"
class="option-button" class="option-button"
:class="{'currently-active': p.relativePeriod === modelValue?.relativePeriod && modelValue?.relativeTo === p.relativeTo}" :class="{'currently-active': p.relativePeriod === modelValue?.relativePeriod && modelValue?.relativeTo === p.relativeTo}"
@click="setReminderFromPreset(p, toggle)" @click="setReminderFromPreset(p, close)"
> >
{{ formatReminder(p) }} {{ formatReminder(p) }}
</SimpleButton> </SimpleButton>
@ -40,20 +40,20 @@
<ReminderPeriod <ReminderPeriod
v-if="activeForm === 'relative'" v-if="activeForm === 'relative'"
v-model="reminder" v-model="reminder"
@update:modelValue="updateDataAndMaybeClose(toggle)" @update:modelValue="updateDataAndMaybeClose(close)"
/> />
<DatepickerInline <DatepickerInline
v-if="activeForm === 'absolute'" v-if="activeForm === 'absolute'"
v-model="reminderDate" v-model="reminderDate"
@update:modelValue="setReminderDate(toggle)" @update:modelValue="setReminderDate(close)"
/> />
<x-button <x-button
v-if="showFormSwitch !== null" v-if="showFormSwitch !== null"
class="reminder__close-button" class="reminder__close-button"
:shadow="false" :shadow="false"
@click="toggle" @click="updateDataAndMaybeClose(close)"
> >
{{ $t('misc.confirm') }} {{ $t('misc.confirm') }}
</x-button> </x-button>
@ -148,25 +148,26 @@ function updateData() {
} }
} }
function setReminderDate(toggle) { function setReminderDate(close) {
reminder.value.reminder = reminderDate.value === null reminder.value.reminder = reminderDate.value === null
? null ? null
: new Date(reminderDate.value) : new Date(reminderDate.value)
reminder.value.relativeTo = null reminder.value.relativeTo = null
reminder.value.relativePeriod = 0 reminder.value.relativePeriod = 0
updateDataAndMaybeClose(toggle) updateDataAndMaybeClose(close)
} }
function setReminderFromPreset(preset, toggle) {
function setReminderFromPreset(preset, close) {
reminder.value = preset reminder.value = preset
updateData() updateData()
toggle() close()
} }
function updateDataAndMaybeClose(toggle) { function updateDataAndMaybeClose(close) {
updateData() updateData()
if (clearAfterUpdate) { if (clearAfterUpdate) {
toggle() close()
} }
} }

View File

@ -55,6 +55,7 @@ import TaskReminderModel from '@/models/taskReminder'
import type {ITaskReminder} from '@/modelTypes/ITaskReminder' import type {ITaskReminder} from '@/modelTypes/ITaskReminder'
import {REMINDER_PERIOD_RELATIVE_TO_TYPES, type IReminderPeriodRelativeTo} from '@/types/IReminderPeriodRelativeTo' import {REMINDER_PERIOD_RELATIVE_TO_TYPES, type IReminderPeriodRelativeTo} from '@/types/IReminderPeriodRelativeTo'
import {useDebounceFn} from '@vueuse/core'
const { const {
modelValue, modelValue,
@ -105,7 +106,7 @@ function updateData() {
reminder.value.relativeTo = period.value.relativeTo reminder.value.relativeTo = period.value.relativeTo
reminder.value.reminder = null reminder.value.reminder = null
emit('update:modelValue', reminder.value) useDebounceFn(() => emit('update:modelValue', reminder.value), 1000)
} }
</script> </script>

View File

@ -288,6 +288,7 @@ async function markAsDone(checked: boolean) {
title: t('task.undo'), title: t('task.undo'),
callback: () => undoDone(checked), callback: () => undoDone(checked),
}]) }])
updateDueDate()
} }
if (checked) { if (checked) {

View File

@ -4,8 +4,8 @@
* @param color * @param color
* @returns {string} * @returns {string}
*/ */
export function colorFromHex(color: string) { export function colorFromHex(color: string): string {
if (color.substring(0, 1) === '#') { if (color !== '' && color.substring(0, 1) === '#') {
color = color.substring(1, 7) color = color.substring(1, 7)
} }

View File

@ -5,7 +5,6 @@ import type {ILabel} from '@/modelTypes/ILabel'
import type {IUser} from '@/modelTypes/IUser' import type {IUser} from '@/modelTypes/IUser'
import {colorIsDark} from '@/helpers/color/colorIsDark' import {colorIsDark} from '@/helpers/color/colorIsDark'
import {getRandomColorHex} from '@/helpers/color/randomColor'
export default class LabelModel extends AbstractModel<ILabel> implements ILabel { export default class LabelModel extends AbstractModel<ILabel> implements ILabel {
id = 0 id = 0
@ -24,12 +23,8 @@ export default class LabelModel extends AbstractModel<ILabel> implements ILabel
constructor(data: Partial<ILabel> = {}) { constructor(data: Partial<ILabel> = {}) {
super() super()
this.assignData(data) this.assignData(data)
if (this.hexColor === '') {
this.hexColor = getRandomColorHex()
}
if (this.hexColor.substring(0, 1) !== '#') { if (this.hexColor !== '' && this.hexColor.substring(0, 1) !== '#') {
this.hexColor = '#' + this.hexColor this.hexColor = '#' + this.hexColor
} }
this.textColor = colorIsDark(this.hexColor) ? '#4a4a4a' : '#fff' this.textColor = colorIsDark(this.hexColor) ? '#4a4a4a' : '#fff'

View File

@ -67,7 +67,7 @@ export const useLabelStore = defineStore('label', () => {
} }
function setLabel(label: ILabel) { function setLabel(label: ILabel) {
labels.value[label.id] = label labels.value[label.id] = {...label}
update(label) update(label)
} }

View File

@ -29,6 +29,7 @@ import {useBaseStore} from '@/stores/base'
import ProjectUserService from '@/services/projectUsers' import ProjectUserService from '@/services/projectUsers'
import {useAuthStore} from '@/stores/auth' import {useAuthStore} from '@/stores/auth'
import TaskCollectionService from '@/services/taskCollection' import TaskCollectionService from '@/services/taskCollection'
import {getRandomColorHex} from '@/helpers/color/randomColor'
interface MatchedAssignee extends IUser { interface MatchedAssignee extends IUser {
match: string, match: string,
@ -337,7 +338,10 @@ export const useTaskStore = defineStore('task', () => {
let label = validateLabel(Object.values(labelStore.labels), labelTitle) let label = validateLabel(Object.values(labelStore.labels), labelTitle)
if (typeof label === 'undefined') { if (typeof label === 'undefined') {
// label not found, create it // label not found, create it
const labelModel = new LabelModel({title: labelTitle}) const labelModel = new LabelModel({
title: labelTitle,
hexColor: getRandomColorHex(),
})
label = await labelStore.createLabel(labelModel) label = await labelStore.createLabel(labelModel)
} }
return label return label

View File

@ -256,6 +256,13 @@
--card-border-color: var(--grey-200); --card-border-color: var(--grey-200);
--logo-text-color: hsl(180, 1%, 15%); --logo-text-color: hsl(180, 1%, 15%);
// Code colors
--code-variable: #da2222;
--code-literal: #fd8a09;
--code-symbol: #0ead69;
--code-section: #3a86ff;
--code-keyword: #8338ec;
&.dark { &.dark {
@media screen { @media screen {
// Light mode colours reversed for dark mode // Light mode colours reversed for dark mode
@ -311,6 +318,13 @@
--scheme-invert: var(--grey-900); --scheme-invert: var(--grey-900);
--scheme-invert-bis: var(--grey-900); --scheme-invert-bis: var(--grey-900);
--scheme-invert-ter: var(--grey-800); --scheme-invert-ter: var(--grey-800);
// Code colors
--code-variable: #f98181;
--code-literal: #fbbc88;
--code-symbol: #b9f18d;
--code-section: #faf594;
--code-keyword: #70cff8;
} }
} }
} }

View File

@ -150,8 +150,8 @@ function deleteLabel(label: ILabel) {
} }
function editLabelSubmit() { function editLabelSubmit() {
return labelStore.updateLabel(labelEditLabel.value) return labelStore.updateLabel(labelEditLabel.value)
} }
function editLabel(label: ILabel) { function editLabel(label: ILabel) {
if (label.createdBy.id !== userInfo.value.id) { if (label.createdBy.id !== userInfo.value.id) {

View File

@ -35,7 +35,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {computed, ref} from 'vue' import {computed, onBeforeMount, ref} from 'vue'
import {useI18n} from 'vue-i18n' import {useI18n} from 'vue-i18n'
import {useRouter} from 'vue-router' import {useRouter} from 'vue-router'
@ -46,6 +46,7 @@ import LabelModel from '@/models/label'
import {useLabelStore} from '@/stores/labels' import {useLabelStore} from '@/stores/labels'
import {useTitle} from '@/composables/useTitle' import {useTitle} from '@/composables/useTitle'
import {success} from '@/message' import {success} from '@/message'
import {getRandomColorHex} from '@/helpers/color/randomColor'
const router = useRouter() const router = useRouter()
@ -55,6 +56,8 @@ useTitle(() => t('label.create.title'))
const labelStore = useLabelStore() const labelStore = useLabelStore()
const label = ref(new LabelModel()) const label = ref(new LabelModel())
onBeforeMount(() => label.value.hexColor = getRandomColorHex())
const showError = ref(false) const showError = ref(false)
const loading = computed(() => labelStore.isLoading) const loading = computed(() => labelStore.isLoading)

View File

@ -179,7 +179,23 @@ watch(
if (projectId < 0) { if (projectId < 0) {
return return
} }
tasks.value = tasks.value.filter(t => typeof t.relatedTasks?.parenttask === 'undefined') const tasksById = {}
tasks.value.forEach(t => tasksById[t.id] = true)
tasks.value = tasks.value.filter(t => {
if (typeof t.relatedTasks?.parenttask === 'undefined') {
return true
}
// If the task is a subtask, make sure the parent task is available in the current view as well
for (const pt of t.relatedTasks.parenttask) {
if(typeof tasksById[pt.id] === 'undefined') {
return true
}
}
return false
})
}, },
) )