diff --git a/.drone.yml b/.drone.yml
index 4090e6a8..a7522020 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -116,36 +116,16 @@ steps:
YARN_CACHE_FOLDER: .cache/yarn/
CYPRESS_CACHE_FOLDER: .cache/cypress/
CYPRESS_DEFAULT_COMMAND_TIMEOUT: 60000
+ CYPRESS_RECORD_KEY:
+ from_secret: cypress_project_key
commands:
- sed -i 's/localhost/api/g' dist/index.html
- yarn serve:dist & npx wait-on http://localhost:5000
- - yarn test:frontend --browser chrome
+ - yarn test:frontend --browser chrome --record
depends_on:
- dependencies
- build-prod
- - name: upload-test-results
- image: plugins/s3
- pull: true
- settings:
- bucket: drone-test-results
- access_key:
- from_secret: test_results_aws_access_key_id
- secret_key:
- from_secret: test_results_aws_secret_access_key
- endpoint: https://s3.fr-par.scw.cloud
- region: fr-par
- path_style: true
- source: cypress/screenshots/**/**/*
- strip_prefix: cypress/screenshots/
- target: /${DRONE_REPO}/${DRONE_PULL_REQUEST}_${DRONE_BRANCH}/${DRONE_BUILD_NUMBER}/
- depends_on:
- - test-frontend
- when:
- status:
- - failure
- - success
-
- name: deploy-preview
image: node:16
pull: true
@@ -665,6 +645,6 @@ steps:
from_secret: crowdin_key
---
kind: signature
-hmac: 188ee90100c5fc5922a445e531e7a47453121edddb2a64a182eb23ed2bf602de
+hmac: 997e1badebe484ac29557c4af356e63db4d3d57f3d32e92d482f117f8cec64da
...
diff --git a/cypress.json b/cypress.json
index 27f12495..28fd022c 100644
--- a/cypress.json
+++ b/cypress.json
@@ -7,5 +7,6 @@
"video": false,
"retries": {
"runMode": 2
- }
+ },
+ "projectId": "181c7x"
}
diff --git a/cypress/integration/list/list-history.spec.js b/cypress/integration/list/list-history.spec.js
new file mode 100644
index 00000000..b7633cbd
--- /dev/null
+++ b/cypress/integration/list/list-history.spec.js
@@ -0,0 +1,56 @@
+import {ListFactory} from '../../factories/list'
+
+import '../../support/authenticateUser'
+import {prepareLists} from './prepareLists'
+
+describe('List History', () => {
+ prepareLists()
+
+ it('should show a list history on the home page', () => {
+ cy.intercept(Cypress.env('API_URL') + '/namespaces*').as('loadNamespaces')
+ cy.intercept(Cypress.env('API_URL') + '/lists/*').as('loadList')
+
+ const lists = ListFactory.create(6)
+
+ cy.visit('/')
+ cy.wait('@loadNamespaces')
+ cy.get('body')
+ .should('not.contain', 'Last viewed')
+
+ cy.visit(`/lists/${lists[0].id}`)
+ cy.wait('@loadNamespaces')
+ cy.wait('@loadList')
+ cy.visit(`/lists/${lists[1].id}`)
+ cy.wait('@loadNamespaces')
+ cy.wait('@loadList')
+ cy.visit(`/lists/${lists[2].id}`)
+ cy.wait('@loadNamespaces')
+ cy.wait('@loadList')
+ cy.visit(`/lists/${lists[3].id}`)
+ cy.wait('@loadNamespaces')
+ cy.wait('@loadList')
+ cy.visit(`/lists/${lists[4].id}`)
+ cy.wait('@loadNamespaces')
+ cy.wait('@loadList')
+ cy.visit(`/lists/${lists[5].id}`)
+ cy.wait('@loadNamespaces')
+ cy.wait('@loadList')
+
+ // cy.visit('/')
+ // cy.wait('@loadNamespaces')
+ // Not using cy.visit here to work around the redirect issue fixed in #1337
+ cy.get('nav.menu.top-menu a')
+ .contains('Overview')
+ .click()
+
+ cy.get('body')
+ .should('contain', 'Last viewed')
+ cy.get('.list-cards-wrapper-2-rows')
+ .should('not.contain', lists[0].title)
+ .should('contain', lists[1].title)
+ .should('contain', lists[2].title)
+ .should('contain', lists[3].title)
+ .should('contain', lists[4].title)
+ .should('contain', lists[5].title)
+ })
+})
\ No newline at end of file
diff --git a/cypress/integration/list/list-view-gantt.spec.js b/cypress/integration/list/list-view-gantt.spec.js
new file mode 100644
index 00000000..69805a30
--- /dev/null
+++ b/cypress/integration/list/list-view-gantt.spec.js
@@ -0,0 +1,76 @@
+import {formatISO, format} from 'date-fns'
+import {TaskFactory} from '../../factories/task'
+import {prepareLists} from './prepareLists'
+
+import '../../support/authenticateUser'
+
+describe('List View Gantt', () => {
+ prepareLists()
+
+ it('Hides tasks with no dates', () => {
+ const tasks = TaskFactory.create(1)
+ cy.visit('/lists/1/gantt')
+
+ cy.get('.gantt-chart .tasks')
+ .should('not.contain', tasks[0].title)
+ })
+
+ it('Shows tasks from the current and next month', () => {
+ const now = new Date()
+ const nextMonth = now
+ nextMonth.setDate(1)
+ nextMonth.setMonth(now.getMonth() + 1)
+
+ cy.visit('/lists/1/gantt')
+
+ cy.get('.gantt-chart .months')
+ .should('contain', format(now, 'MMMM'))
+ .should('contain', format(nextMonth, 'MMMM'))
+ })
+
+ it('Shows tasks with dates', () => {
+ const now = new Date()
+ const tasks = TaskFactory.create(1, {
+ start_date: formatISO(now),
+ end_date: formatISO(now.setDate(now.getDate() + 4))
+ })
+ cy.visit('/lists/1/gantt')
+
+ cy.get('.gantt-chart .tasks')
+ .should('not.be.empty')
+ cy.get('.gantt-chart .tasks')
+ .should('contain', tasks[0].title)
+ })
+
+ it('Shows tasks with no dates after enabling them', () => {
+ TaskFactory.create(1, {
+ start_date: null,
+ end_date: null,
+ })
+ cy.visit('/lists/1/gantt')
+
+ cy.get('.gantt-options .fancycheckbox')
+ .contains('Show tasks which don\'t have dates set')
+ .click()
+
+ cy.get('.gantt-chart .tasks')
+ .should('not.be.empty')
+ cy.get('.gantt-chart .tasks .task.nodate')
+ .should('exist')
+ })
+
+ it('Drags a task around', () => {
+ const now = new Date()
+ TaskFactory.create(1, {
+ start_date: formatISO(now),
+ end_date: formatISO(now.setDate(now.getDate() + 4))
+ })
+ cy.visit('/lists/1/gantt')
+
+ cy.get('.gantt-chart .tasks .task')
+ .first()
+ .trigger('mousedown', {which: 1})
+ .trigger('mousemove', {clientX: 500, clientY: 0})
+ .trigger('mouseup', {force: true})
+ })
+})
\ No newline at end of file
diff --git a/cypress/integration/list/list-view-kanban.spec.js b/cypress/integration/list/list-view-kanban.spec.js
new file mode 100644
index 00000000..52d67282
--- /dev/null
+++ b/cypress/integration/list/list-view-kanban.spec.js
@@ -0,0 +1,196 @@
+import {BucketFactory} from '../../factories/bucket'
+import {ListFactory} from '../../factories/list'
+import {TaskFactory} from '../../factories/task'
+import {prepareLists} from './prepareLists'
+
+import '../../support/authenticateUser'
+
+describe('List View Kanban', () => {
+ let buckets
+ prepareLists()
+
+ beforeEach(() => {
+ buckets = BucketFactory.create(2)
+ })
+
+ it('Shows all buckets with their tasks', () => {
+ const data = TaskFactory.create(10, {
+ list_id: 1,
+ bucket_id: 1,
+ })
+ cy.visit('/lists/1/kanban')
+
+ cy.get('.kanban .bucket .title')
+ .contains(buckets[0].title)
+ .should('exist')
+ cy.get('.kanban .bucket .title')
+ .contains(buckets[1].title)
+ .should('exist')
+ cy.get('.kanban .bucket')
+ .first()
+ .should('contain', data[0].title)
+ })
+
+ it('Can add a new task to a bucket', () => {
+ TaskFactory.create(2, {
+ list_id: 1,
+ bucket_id: 1,
+ })
+ cy.visit('/lists/1/kanban')
+
+ cy.getSettled('.kanban .bucket')
+ .contains(buckets[0].title)
+ .get('.bucket-footer .button')
+ .contains('Add another task')
+ .click()
+ cy.get('.kanban .bucket')
+ .contains(buckets[0].title)
+ .get('.bucket-footer .field .control input.input')
+ .type('New Task{enter}')
+
+ cy.get('.kanban .bucket')
+ .first()
+ .should('contain', 'New Task')
+ })
+
+ it('Can create a new bucket', () => {
+ cy.visit('/lists/1/kanban')
+
+ cy.get('.kanban .bucket.new-bucket .button')
+ .click()
+ cy.get('.kanban .bucket.new-bucket input.input')
+ .type('New Bucket{enter}')
+
+ cy.wait(1000) // Wait for the request to finish
+ cy.get('.kanban .bucket .title')
+ .contains('New Bucket')
+ .should('exist')
+ })
+
+ it('Can set a bucket limit', () => {
+ cy.visit('/lists/1/kanban')
+
+ cy.getSettled('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
+ .first()
+ .click()
+ cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item')
+ .contains('Limit: Not Set')
+ .click()
+ cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item .field input.input')
+ .first()
+ .type(3)
+ cy.get('[data-cy="setBucketLimit"]')
+ .first()
+ .click()
+
+ cy.get('.kanban .bucket .bucket-header span.limit')
+ .contains('0/3')
+ .should('exist')
+ })
+
+ it('Can rename a bucket', () => {
+ cy.visit('/lists/1/kanban')
+
+ cy.getSettled('.kanban .bucket .bucket-header .title')
+ .first()
+ .type('{selectall}New Bucket Title{enter}')
+ cy.get('.kanban .bucket .bucket-header .title')
+ .first()
+ .should('contain', 'New Bucket Title')
+ })
+
+ it('Can delete a bucket', () => {
+ cy.visit('/lists/1/kanban')
+
+ cy.getSettled('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
+ .first()
+ .click()
+ cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item')
+ .contains('Delete')
+ .click()
+ cy.get('.modal-mask .modal-container .modal-content .header')
+ .should('contain', 'Delete the bucket')
+ cy.get('.modal-mask .modal-container .modal-content .actions .button')
+ .contains('Do it!')
+ .click()
+
+ cy.get('.kanban .bucket .title')
+ .contains(buckets[0].title)
+ .should('not.exist')
+ cy.get('.kanban .bucket .title')
+ .contains(buckets[1].title)
+ .should('exist')
+ })
+
+ it('Can drag tasks around', () => {
+ const tasks = TaskFactory.create(2, {
+ list_id: 1,
+ bucket_id: 1,
+ })
+ cy.visit('/lists/1/kanban')
+
+ cy.getSettled('.kanban .bucket .tasks .task')
+ .contains(tasks[0].title)
+ .first()
+ .drag('.kanban .bucket:nth-child(2) .tasks .dropper')
+
+ cy.get('.kanban .bucket:nth-child(2) .tasks')
+ .should('contain', tasks[0].title)
+ cy.get('.kanban .bucket:nth-child(1) .tasks')
+ .should('not.contain', tasks[0].title)
+ })
+
+ it('Should navigate to the task when the task card is clicked', () => {
+ const tasks = TaskFactory.create(5, {
+ id: '{increment}',
+ list_id: 1,
+ bucket_id: 1,
+ })
+ cy.visit('/lists/1/kanban')
+
+ cy.getSettled('.kanban .bucket .tasks .task')
+ .contains(tasks[0].title)
+ .should('be.visible')
+ .click()
+
+ cy.url()
+ .should('contain', `/tasks/${tasks[0].id}`, { timeout: 1000 })
+ })
+
+ it('Should remove a task from the kanban board when moving it to another list', () => {
+ const lists = ListFactory.create(2)
+ BucketFactory.create(2, {
+ list_id: '{increment}',
+ })
+ const tasks = TaskFactory.create(5, {
+ id: '{increment}',
+ list_id: 1,
+ bucket_id: 1,
+ })
+ const task = tasks[0]
+ cy.visit('/lists/1/kanban')
+
+ cy.getSettled('.kanban .bucket .tasks .task')
+ .contains(task.title)
+ .should('be.visible')
+ .click()
+
+ cy.get('.task-view .action-buttons .button', { timeout: 3000 })
+ .contains('Move task')
+ .click()
+ cy.get('.task-view .content.details .field .multiselect.control .input-wrapper input')
+ .type(`${lists[1].title}{enter}`)
+ // The requests happen with a 200ms timeout. Because of that, the results are not yet there when cypress
+ // presses enter and we can't simulate pressing on enter to select the item.
+ cy.get('.task-view .content.details .field .multiselect.control .search-results')
+ .children()
+ .first()
+ .click()
+
+ cy.get('.global-notification', { timeout: 1000 })
+ .should('contain', 'Success')
+ cy.go('back')
+ cy.get('.kanban .bucket')
+ .should('not.contain', task.title)
+ })
+})
\ No newline at end of file
diff --git a/cypress/integration/list/list-view-list.spec.js b/cypress/integration/list/list-view-list.spec.js
new file mode 100644
index 00000000..e1a4a0f6
--- /dev/null
+++ b/cypress/integration/list/list-view-list.spec.js
@@ -0,0 +1,97 @@
+import {UserListFactory} from '../../factories/users_list'
+import {TaskFactory} from '../../factories/task'
+import {UserFactory} from '../../factories/user'
+import {ListFactory} from '../../factories/list'
+import {prepareLists} from './prepareLists'
+
+import '../../support/authenticateUser'
+
+describe('List View List', () => {
+ prepareLists()
+
+ it('Should be an empty list', () => {
+ cy.visit('/lists/1')
+ cy.url()
+ .should('contain', '/lists/1/list')
+ cy.get('.list-title h1')
+ .should('contain', 'First List')
+ cy.get('.list-title .dropdown')
+ .should('exist')
+ cy.get('p')
+ .contains('This list is currently empty.')
+ .should('exist')
+ })
+
+ it('Should navigate to the task when the title is clicked', () => {
+ const tasks = TaskFactory.create(5, {
+ id: '{increment}',
+ list_id: 1,
+ })
+ cy.visit('/lists/1/list')
+
+ cy.get('.tasks .task .tasktext')
+ .contains(tasks[0].title)
+ .first()
+ .click()
+
+ cy.url()
+ .should('contain', `/tasks/${tasks[0].id}`)
+ })
+
+ it('Should not see any elements for a list which is shared read only', () => {
+ UserFactory.create(2)
+ UserListFactory.create(1, {
+ list_id: 2,
+ user_id: 1,
+ right: 0,
+ })
+ const lists = ListFactory.create(2, {
+ owner_id: '{increment}',
+ namespace_id: '{increment}',
+ })
+ cy.visit(`/lists/${lists[1].id}/`)
+
+ cy.get('.list-title a.icon')
+ .should('not.exist')
+ cy.get('input.input[placeholder="Add a new task..."')
+ .should('not.exist')
+ })
+
+ it('Should only show the color of a list in the navigation and not in the list view', () => {
+ const lists = ListFactory.create(1, {
+ hex_color: '00db60',
+ })
+ TaskFactory.create(10, {
+ list_id: lists[0].id,
+ })
+ cy.visit(`/lists/${lists[0].id}/`)
+
+ cy.get('.menu-list li .list-menu-link .color-bubble')
+ .should('have.css', 'background-color', 'rgb(0, 219, 96)')
+ cy.get('.tasks-container .tasks .color-bubble')
+ .should('not.exist')
+ })
+
+ it('Should paginate for > 50 tasks', () => {
+ const tasks = TaskFactory.create(100, {
+ id: '{increment}',
+ title: i => `task${i}`,
+ list_id: 1,
+ })
+ cy.visit('/lists/1/list')
+
+ cy.get('.tasks-container .tasks')
+ .should('contain', tasks[99].title)
+
+ cy.get('.card-content .pagination .pagination-link')
+ .contains('2')
+ .click()
+
+ cy.url()
+ .should('contain', '?page=2')
+ cy.get('.tasks-container .tasks')
+ .should('contain', tasks[1].title)
+ cy.get('.tasks-container .tasks')
+ .should('not.contain', tasks[99].title)
+ })
+})
\ No newline at end of file
diff --git a/cypress/integration/list/list-view-table.spec.js b/cypress/integration/list/list-view-table.spec.js
new file mode 100644
index 00000000..e0336efc
--- /dev/null
+++ b/cypress/integration/list/list-view-table.spec.js
@@ -0,0 +1,52 @@
+import {TaskFactory} from '../../factories/task'
+
+import '../../support/authenticateUser'
+
+describe('List View Table', () => {
+ it('Should show a table with tasks', () => {
+ const tasks = TaskFactory.create(1)
+ cy.visit('/lists/1/table')
+
+ cy.get('.list-table table.table')
+ .should('exist')
+ cy.get('.list-table table.table')
+ .should('contain', tasks[0].title)
+ })
+
+ it('Should have working column switches', () => {
+ TaskFactory.create(1)
+ cy.visit('/lists/1/table')
+
+ cy.get('.list-table .filter-container .items .button')
+ .contains('Columns')
+ .click()
+ cy.get('.list-table .filter-container .card.columns-filter .card-content .fancycheckbox .check')
+ .contains('Priority')
+ .click()
+ cy.get('.list-table .filter-container .card.columns-filter .card-content .fancycheckbox .check')
+ .contains('Done')
+ .click()
+
+ cy.get('.list-table table.table th')
+ .contains('Priority')
+ .should('exist')
+ cy.get('.list-table table.table th')
+ .contains('Done')
+ .should('not.exist')
+ })
+
+ it('Should navigate to the task when the title is clicked', () => {
+ const tasks = TaskFactory.create(5, {
+ id: '{increment}',
+ list_id: 1,
+ })
+ cy.visit('/lists/1/table')
+
+ cy.get('.list-table table.table')
+ .contains(tasks[0].title)
+ .click()
+
+ cy.url()
+ .should('contain', `/tasks/${tasks[0].id}`)
+ })
+})
\ No newline at end of file
diff --git a/cypress/integration/list/list.spec.js b/cypress/integration/list/list.spec.js
index 8b8630fd..ce7f6f55 100644
--- a/cypress/integration/list/list.spec.js
+++ b/cypress/integration/list/list.spec.js
@@ -1,25 +1,11 @@
-import {formatISO, format} from 'date-fns'
-
import {TaskFactory} from '../../factories/task'
-import {ListFactory} from '../../factories/list'
-import {UserListFactory} from '../../factories/users_list'
-import {UserFactory} from '../../factories/user'
-import {NamespaceFactory} from '../../factories/namespace'
-import {BucketFactory} from '../../factories/bucket'
+import {prepareLists} from './prepareLists'
import '../../support/authenticateUser'
describe('Lists', () => {
let lists
-
- beforeEach(() => {
- UserFactory.create(1)
- NamespaceFactory.create(1)
- lists = ListFactory.create(1, {
- title: 'First List'
- })
- TaskFactory.truncate()
- })
+ prepareLists((newLists) => (lists = newLists))
it('Should create a new list', () => {
cy.visit('/')
@@ -29,7 +15,7 @@ describe('Lists', () => {
.contains('New list')
.click()
cy.url()
- .should('contain', '/namespaces/1/list')
+ .should('contain', '/lists/new/1')
cy.get('.card-header-title')
.contains('New list')
cy.get('input.input')
@@ -56,7 +42,7 @@ describe('Lists', () => {
})
it('Should rename the list in all places', () => {
- const tasks = TaskFactory.create(5, {
+ TaskFactory.create(5, {
id: '{increment}',
list_id: 1,
})
@@ -112,429 +98,4 @@ describe('Lists', () => {
cy.location('pathname')
.should('equal', '/')
})
-
- describe('List View', () => {
- it('Should be an empty list', () => {
- cy.visit('/lists/1')
- cy.url()
- .should('contain', '/lists/1/list')
- cy.get('.list-title h1')
- .should('contain', 'First List')
- cy.get('.list-title .dropdown')
- .should('exist')
- cy.get('p')
- .contains('This list is currently empty.')
- .should('exist')
- })
-
- it('Should navigate to the task when the title is clicked', () => {
- const tasks = TaskFactory.create(5, {
- id: '{increment}',
- list_id: 1,
- })
- cy.visit('/lists/1/list')
-
- cy.get('.tasks .task .tasktext')
- .contains(tasks[0].title)
- .first()
- .click()
-
- cy.url()
- .should('contain', `/tasks/${tasks[0].id}`)
- })
-
- it('Should not see any elements for a list which is shared read only', () => {
- UserFactory.create(2)
- UserListFactory.create(1, {
- list_id: 2,
- user_id: 1,
- right: 0,
- })
- const lists = ListFactory.create(2, {
- owner_id: '{increment}',
- namespace_id: '{increment}',
- })
- cy.visit(`/lists/${lists[1].id}/`)
-
- cy.get('.list-title a.icon')
- .should('not.exist')
- cy.get('input.input[placeholder="Add a new task..."')
- .should('not.exist')
- })
-
- it('Should only show the color of a list in the navigation and not in the list view', () => {
- const lists = ListFactory.create(1, {
- hex_color: '00db60',
- })
- TaskFactory.create(10, {
- list_id: lists[0].id,
- })
- cy.visit(`/lists/${lists[0].id}/`)
-
- cy.get('.menu-list li .list-menu-link .color-bubble')
- .should('have.css', 'background-color', 'rgb(0, 219, 96)')
- cy.get('.tasks-container .tasks .color-bubble')
- .should('not.exist')
- })
-
- it('Should paginate for > 50 tasks', () => {
- const tasks = TaskFactory.create(100, {
- id: '{increment}',
- title: i => `task${i}`,
- list_id: 1,
- })
- cy.visit('/lists/1/list')
-
- cy.get('.tasks-container .tasks')
- .should('contain', tasks[99].title)
-
- cy.get('.card-content .pagination .pagination-link')
- .contains('2')
- .click()
-
- cy.url()
- .should('contain', '?page=2')
- cy.get('.tasks-container .tasks')
- .should('contain', tasks[1].title)
- cy.get('.tasks-container .tasks')
- .should('not.contain', tasks[99].title)
- })
- })
-
- describe('Table View', () => {
- it('Should show a table with tasks', () => {
- const tasks = TaskFactory.create(1)
- cy.visit('/lists/1/table')
-
- cy.get('.table-view table.table')
- .should('exist')
- cy.get('.table-view table.table')
- .should('contain', tasks[0].title)
- })
-
- it('Should have working column switches', () => {
- TaskFactory.create(1)
- cy.visit('/lists/1/table')
-
- cy.get('.table-view .filter-container .items .button')
- .contains('Columns')
- .click()
- cy.get('.table-view .filter-container .card.columns-filter .card-content .fancycheckbox .check')
- .contains('Priority')
- .click()
- cy.get('.table-view .filter-container .card.columns-filter .card-content .fancycheckbox .check')
- .contains('Done')
- .click()
-
- cy.get('.table-view table.table th')
- .contains('Priority')
- .should('exist')
- cy.get('.table-view table.table th')
- .contains('Done')
- .should('not.exist')
- })
-
- it('Should navigate to the task when the title is clicked', () => {
- const tasks = TaskFactory.create(5, {
- id: '{increment}',
- list_id: 1,
- })
- cy.visit('/lists/1/table')
-
- cy.get('.table-view table.table')
- .contains(tasks[0].title)
- .click()
-
- cy.url()
- .should('contain', `/tasks/${tasks[0].id}`)
- })
- })
-
- describe('Gantt View', () => {
- it('Hides tasks with no dates', () => {
- const tasks = TaskFactory.create(1)
- cy.visit('/lists/1/gantt')
-
- cy.get('.gantt-chart-container .gantt-chart .tasks')
- .should('not.contain', tasks[0].title)
- })
-
- it('Shows tasks from the current and next month', () => {
- const now = new Date()
- const nextMonth = now
- nextMonth.setDate(1)
- nextMonth.setMonth(now.getMonth() + 1)
-
- cy.visit('/lists/1/gantt')
-
- cy.get('.gantt-chart-container .gantt-chart .months')
- .should('contain', format(now, 'MMMM'))
- .should('contain', format(nextMonth, 'MMMM'))
- })
-
- it('Shows tasks with dates', () => {
- const now = new Date()
- const tasks = TaskFactory.create(1, {
- start_date: formatISO(now),
- end_date: formatISO(now.setDate(now.getDate() + 4))
- })
- cy.visit('/lists/1/gantt')
-
- cy.get('.gantt-chart-container .gantt-chart .tasks')
- .should('not.be.empty')
- cy.get('.gantt-chart-container .gantt-chart .tasks')
- .should('contain', tasks[0].title)
- })
-
- it('Shows tasks with no dates after enabling them', () => {
- TaskFactory.create(1, {
- start_date: null,
- end_date: null,
- })
- cy.visit('/lists/1/gantt')
-
- cy.get('.gantt-chart-container .gantt-options .fancycheckbox')
- .contains('Show tasks which don\'t have dates set')
- .click()
-
- cy.get('.gantt-chart-container .gantt-chart .tasks')
- .should('not.be.empty')
- cy.get('.gantt-chart-container .gantt-chart .tasks .task.nodate')
- .should('exist')
- })
-
- it('Drags a task around', () => {
- const now = new Date()
- TaskFactory.create(1, {
- start_date: formatISO(now),
- end_date: formatISO(now.setDate(now.getDate() + 4))
- })
- cy.visit('/lists/1/gantt')
-
- cy.get('.gantt-chart-container .gantt-chart .tasks .task')
- .first()
- .trigger('mousedown', {which: 1})
- .trigger('mousemove', {clientX: 500, clientY: 0})
- .trigger('mouseup', {force: true})
- })
- })
-
- describe('Kanban', () => {
- let buckets
-
- beforeEach(() => {
- buckets = BucketFactory.create(2)
- })
-
- it('Shows all buckets with their tasks', () => {
- const data = TaskFactory.create(10, {
- list_id: 1,
- bucket_id: 1,
- })
- cy.visit('/lists/1/kanban')
-
- cy.get('.kanban .bucket .title')
- .contains(buckets[0].title)
- .should('exist')
- cy.get('.kanban .bucket .title')
- .contains(buckets[1].title)
- .should('exist')
- cy.get('.kanban .bucket')
- .first()
- .should('contain', data[0].title)
- })
-
- it('Can add a new task to a bucket', () => {
- const data = TaskFactory.create(2, {
- list_id: 1,
- bucket_id: 1,
- })
- cy.visit('/lists/1/kanban')
-
- cy.get('.kanban .bucket')
- .contains(buckets[0].title)
- .get('.bucket-footer .button')
- .contains('Add another task')
- .click()
- cy.get('.kanban .bucket')
- .contains(buckets[0].title)
- .get('.bucket-footer .field .control input.input')
- .type('New Task{enter}')
-
- cy.get('.kanban .bucket')
- .first()
- .should('contain', 'New Task')
- })
-
- it('Can create a new bucket', () => {
- cy.visit('/lists/1/kanban')
-
- cy.get('.kanban .bucket.new-bucket .button')
- .click()
- cy.get('.kanban .bucket.new-bucket input.input')
- .type('New Bucket{enter}')
-
- cy.wait(1000) // Wait for the request to finish
- cy.get('.kanban .bucket .title')
- .contains('New Bucket')
- .should('exist')
- })
-
- it('Can set a bucket limit', () => {
- cy.visit('/lists/1/kanban')
-
- cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
- .first()
- .click()
- cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item')
- .contains('Limit: Not Set')
- .click()
- cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item .field input.input')
- .first()
- .type(3)
- cy.get('[data-cy="setBucketLimit"]')
- .first()
- .click()
-
- cy.get('.kanban .bucket .bucket-header span.limit')
- .contains('0/3')
- .should('exist')
- })
-
- it('Can rename a bucket', () => {
- cy.visit('/lists/1/kanban')
-
- cy.get('.kanban .bucket .bucket-header .title')
- .first()
- .type('{selectall}New Bucket Title{enter}')
- cy.get('.kanban .bucket .bucket-header .title')
- .first()
- .should('contain', 'New Bucket Title')
- })
-
- it('Can delete a bucket', () => {
- cy.visit('/lists/1/kanban')
-
- cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-trigger')
- .first()
- .click()
- cy.get('.kanban .bucket .bucket-header .dropdown.options .dropdown-menu .dropdown-item')
- .contains('Delete')
- .click()
- cy.get('.modal-mask .modal-container .modal-content .header')
- .should('contain', 'Delete the bucket')
- cy.get('.modal-mask .modal-container .modal-content .actions .button')
- .contains('Do it!')
- .click()
-
- cy.get('.kanban .bucket .title')
- .contains(buckets[0].title)
- .should('not.exist')
- cy.get('.kanban .bucket .title')
- .contains(buckets[1].title)
- .should('exist')
- })
-
- it('Can drag tasks around', () => {
- const tasks = TaskFactory.create(2, {
- list_id: 1,
- bucket_id: 1,
- })
- cy.visit('/lists/1/kanban')
-
- cy.get('.kanban .bucket .tasks .task')
- .contains(tasks[0].title)
- .first()
- .drag('.kanban .bucket:nth-child(2) .tasks .dropper')
-
- cy.get('.kanban .bucket:nth-child(2) .tasks')
- .should('contain', tasks[0].title)
- cy.get('.kanban .bucket:nth-child(1) .tasks')
- .should('not.contain', tasks[0].title)
- })
-
- it('Should navigate to the task when the task card is clicked', () => {
- const tasks = TaskFactory.create(5, {
- id: '{increment}',
- list_id: 1,
- bucket_id: 1,
- })
- cy.visit('/lists/1/kanban')
-
- cy.getSettled('.kanban .bucket .tasks .task')
- .contains(tasks[0].title)
- .should('be.visible')
- .click()
-
- cy.url()
- .should('contain', `/tasks/${tasks[0].id}`)
- })
-
- it('Should remove a task from the kanban board when moving it to another list', () => {
- const lists = ListFactory.create(2)
- BucketFactory.create(2, {
- list_id: '{increment}',
- })
- const tasks = TaskFactory.create(5, {
- id: '{increment}',
- list_id: 1,
- bucket_id: 1,
- })
- const task = tasks[0]
- cy.visit('/lists/1/kanban')
-
- cy.getSettled('.kanban .bucket .tasks .task')
- .contains(task.title)
- .should('be.visible')
- .click()
-
- cy.get('.task-view .action-buttons .button')
- .contains('Move task')
- .click()
- cy.get('.task-view .content.details .field .multiselect.control .input-wrapper input')
- .type(`${lists[1].title}{enter}`)
- // The requests happen with a 200ms timeout. Because of that, the results are not yet there when cypress
- // presses enter and we can't simulate pressing on enter to select the item.
- cy.get('.task-view .content.details .field .multiselect.control .search-results')
- .children()
- .first()
- .click()
-
- cy.get('.global-notification', { timeout: 1000 })
- .should('contain', 'Success')
- cy.go('back')
- cy.get('.kanban .bucket')
- .should('not.contain', task.title)
- })
- })
-
- describe('List history', () => {
- it('should show a list history on the home page', () => {
- const lists = ListFactory.create(6)
-
- cy.visit('/')
- cy.get('h3')
- .contains('Last viewed')
- .should('not.exist')
-
- cy.visit(`/lists/${lists[0].id}`)
- cy.visit(`/lists/${lists[1].id}`)
- cy.visit(`/lists/${lists[2].id}`)
- cy.visit(`/lists/${lists[3].id}`)
- cy.visit(`/lists/${lists[4].id}`)
- cy.visit(`/lists/${lists[5].id}`)
-
- cy.visit('/')
- cy.get('h3')
- .contains('Last viewed')
- .should('exist')
- cy.get('.list-cards-wrapper-2-rows')
- .should('not.contain', lists[0].title)
- .should('contain', lists[1].title)
- .should('contain', lists[2].title)
- .should('contain', lists[3].title)
- .should('contain', lists[4].title)
- .should('contain', lists[5].title)
- })
- })
})
diff --git a/cypress/integration/list/prepareLists.js b/cypress/integration/list/prepareLists.js
new file mode 100644
index 00000000..afef6ba4
--- /dev/null
+++ b/cypress/integration/list/prepareLists.js
@@ -0,0 +1,16 @@
+import {ListFactory} from '../../factories/list'
+import {UserFactory} from '../../factories/user'
+import {NamespaceFactory} from '../../factories/namespace'
+import {TaskFactory} from '../../factories/task'
+
+export function prepareLists(setLists = () => {}) {
+ beforeEach(() => {
+ UserFactory.create(1)
+ NamespaceFactory.create(1)
+ const lists = ListFactory.create(1, {
+ title: 'First List'
+ })
+ setLists(lists)
+ TaskFactory.truncate()
+ })
+}
\ No newline at end of file
diff --git a/cypress/integration/task/task.spec.js b/cypress/integration/task/task.spec.js
index 1b85e992..62343c91 100644
--- a/cypress/integration/task/task.spec.js
+++ b/cypress/integration/task/task.spec.js
@@ -116,6 +116,7 @@ describe('Task', () => {
.should('be.visible')
.should('contain', 'Done')
cy.get('.task-view .action-buttons p.created')
+ .scrollIntoView()
.should('be.visible')
.should('contain', 'Done')
})
@@ -372,13 +373,13 @@ describe('Task', () => {
cy.visit(`/tasks/${tasks[0].id}`)
- cy.get('.task-view .details.labels-list .multiselect .input-wrapper')
+ cy.getSettled('.task-view .details.labels-list .multiselect .input-wrapper')
.should('be.visible')
.should('contain', labels[0].title)
- cy.get('.task-view .details.labels-list .multiselect .input-wrapper')
+ cy.getSettled('.task-view .details.labels-list .multiselect .input-wrapper')
.children()
.first()
- .get('a.delete')
+ .get('[data-cy="taskDetail.removeLabel"]')
.click()
cy.get('.global-notification')
diff --git a/cypress/integration/user/settings.spec.js b/cypress/integration/user/settings.spec.js
index c6a645d5..21bd9c1d 100644
--- a/cypress/integration/user/settings.spec.js
+++ b/cypress/integration/user/settings.spec.js
@@ -8,12 +8,14 @@ describe('User Settings', () => {
})
it('Changes the user avatar', () => {
+ cy.intercept(`${Cypress.env('API_URL')}/user/settings/avatar/upload`).as('uploadAvatar')
+
cy.visit('/user/settings/avatar')
cy.get('input[name=avatarProvider][value=upload]')
.click()
- cy.get('input[type=file]', { timeout: 1000 })
- .attachFile('image.jpg')
+ cy.get('input[type=file]', {timeout: 1000})
+ .selectFile('cypress/fixtures/image.jpg', {force: true}) // The input is not visible, but on purpose
cy.get('.vue-handler-wrapper.vue-handler-wrapper--south .vue-simple-handler.vue-simple-handler--south')
.trigger('mousedown', {which: 1})
.trigger('mousemove', {clientY: 100})
@@ -22,7 +24,7 @@ describe('User Settings', () => {
.contains('Upload Avatar')
.click()
- cy.wait(3000) // Wait for the request to finish
+ cy.wait('@uploadAvatar')
cy.get('.global-notification')
.should('contain', 'Success')
})
diff --git a/cypress/support/index.js b/cypress/support/index.js
index 0c885c65..7b0c56d1 100644
--- a/cypress/support/index.js
+++ b/cypress/support/index.js
@@ -1,6 +1,5 @@
import './commands'
-import 'cypress-file-upload'
import '@4tw/cypress-drag-drop'
// see https://github.com/cypress-io/cypress/issues/702#issuecomment-587127275
diff --git a/package.json b/package.json
index cd4c40b1..9adfbbbe 100644
--- a/package.json
+++ b/package.json
@@ -18,20 +18,20 @@
"browserslist:update": "npx browserslist@latest --update-db"
},
"dependencies": {
- "@github/hotkey": "1.6.1",
+ "@github/hotkey": "2.0.0",
"@kyvg/vue3-notification": "2.3.4",
- "@sentry/tracing": "6.16.1",
- "@sentry/vue": "6.16.1",
+ "@sentry/tracing": "6.17.4",
+ "@sentry/vue": "6.17.4",
"@types/is-touch-device": "1.0.0",
"@vue/compat": "3.2.29",
- "@vueuse/core": "7.5.4",
- "@vueuse/router": "7.5.4",
+ "@vueuse/core": "7.5.5",
+ "@vueuse/router": "7.5.5",
"bulma-css-variables": "0.9.33",
"camel-case": "4.1.2",
"codemirror": "5.65.1",
"copy-to-clipboard": "3.3.1",
"date-fns": "2.28.0",
- "dompurify": "2.3.4",
+ "dompurify": "2.3.5",
"easymde": "2.16.1",
"flatpickr": "4.6.9",
"flexsearch": "0.7.21",
@@ -39,16 +39,16 @@
"is-touch-device": "1.0.1",
"lodash.clonedeep": "4.5.0",
"lodash.debounce": "4.0.8",
- "marked": "4.0.10",
+ "marked": "4.0.12",
"register-service-worker": "1.7.2",
"snake-case": "3.0.4",
- "ufo": "0.7.9",
+ "ufo": "0.7.10",
"v-tooltip": "4.0.0-beta.17",
"vue": "3.2.29",
"vue-advanced-cropper": "2.8.0",
"vue-drag-resize": "2.0.3",
"vue-flatpickr-component": "9.0.5",
- "vue-i18n": "9.2.0-beta.28",
+ "vue-i18n": "9.2.0-beta.30",
"vue-router": "4.0.12",
"vuedraggable": "4.1.0",
"vuex": "4.0.2",
@@ -56,40 +56,39 @@
},
"devDependencies": {
"@4tw/cypress-drag-drop": "2.1.0",
- "@faker-js/faker": "6.0.0-alpha.3",
+ "@faker-js/faker": "6.0.0-alpha.5",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-regular-svg-icons": "5.15.4",
"@fortawesome/free-solid-svg-icons": "5.15.4",
"@fortawesome/vue-fontawesome": "3.0.0-5",
"@types/flexsearch": "0.7.2",
- "@typescript-eslint/eslint-plugin": "5.10.0",
- "@typescript-eslint/parser": "5.10.0",
+ "@typescript-eslint/eslint-plugin": "5.10.2",
+ "@typescript-eslint/parser": "5.10.2",
"@vitejs/plugin-legacy": "1.6.4",
"@vitejs/plugin-vue": "2.1.0",
"@vue/eslint-config-typescript": "10.0.0",
"autoprefixer": "10.4.2",
"axios": "0.25.0",
"browserslist": "4.19.1",
- "caniuse-lite": "1.0.30001301",
- "cypress": "9.3.1",
- "cypress-file-upload": "5.0.8",
- "esbuild": "0.14.13",
- "eslint": "8.7.0",
- "eslint-plugin-vue": "8.3.0",
+ "caniuse-lite": "1.0.30001307",
+ "cypress": "9.4.1",
+ "esbuild": "0.14.18",
+ "eslint": "8.8.0",
+ "eslint-plugin-vue": "8.4.1",
"express": "4.17.2",
- "netlify-cli": "8.8.2",
- "happy-dom": "2.28.0",
- "postcss": "8.4.5",
- "postcss-preset-env": "7.2.3",
- "rollup": "2.66.0",
+ "happy-dom": "2.31.1",
+ "netlify-cli": "8.15.0",
+ "postcss": "8.4.6",
+ "postcss-preset-env": "7.3.1",
+ "rollup": "2.67.0",
"rollup-plugin-visualizer": "5.5.4",
- "sass": "1.49.0",
+ "sass": "1.49.7",
"slugify": "1.6.5",
"typescript": "4.5.5",
"vite": "2.7.13",
"vite-plugin-pwa": "0.11.13",
"vite-svg-loader": "3.1.2",
- "vitest": "0.2.0",
+ "vitest": "0.2.7",
"vue-tsc": "0.31.1",
"wait-on": "6.0.0",
"workbox-cli": "6.4.2"
@@ -130,7 +129,7 @@
"parser": "vue-eslint-parser",
"parserOptions": {
"parser": "@typescript-eslint/parser",
- "ecmaVersion": 2021
+ "ecmaVersion": 2022
},
"ignorePatterns": [
"*.test.*",
diff --git a/src/components/home/contentAuth.vue b/src/components/home/contentAuth.vue
index 06ab48e2..25fd01e7 100644
--- a/src/components/home/contentAuth.vue
+++ b/src/components/home/contentAuth.vue
@@ -1,8 +1,12 @@
-
+
-
+
-
-
-
+
+
-
+
+
+
+
+
+
+
diff --git a/src/components/list/partials/filter-popup.vue b/src/components/list/partials/filter-popup.vue
index efbfcbe3..d4caf9b4 100644
--- a/src/components/list/partials/filter-popup.vue
+++ b/src/components/list/partials/filter-popup.vue
@@ -29,9 +29,10 @@
diff --git a/src/components/misc/keyboard-shortcuts/shortcuts.js b/src/components/misc/keyboard-shortcuts/shortcuts.ts
similarity index 78%
rename from src/components/misc/keyboard-shortcuts/shortcuts.js
rename to src/components/misc/keyboard-shortcuts/shortcuts.ts
index bcc5014b..f68b7c35 100644
--- a/src/components/misc/keyboard-shortcuts/shortcuts.js
+++ b/src/components/misc/keyboard-shortcuts/shortcuts.ts
@@ -1,11 +1,24 @@
+import {RouteLocation} from 'vue-router'
+
import {isAppleDevice} from '@/helpers/isAppleDevice'
const ctrl = isAppleDevice() ? '⌘' : 'ctrl'
-export const KEYBOARD_SHORTCUTS = [
+interface Shortcut {
+ title: string
+ keys: string[]
+ combination?: 'then'
+}
+
+interface ShortcutGroup {
+ title: string
+ available?: (route: RouteLocation) => boolean
+ shortcuts: Shortcut[]
+}
+
+export const KEYBOARD_SHORTCUTS : ShortcutGroup[] = [
{
title: 'keyboardShortcuts.general',
- available: () => null,
shortcuts: [
{
title: 'keyboardShortcuts.toggleMenu',
@@ -29,7 +42,7 @@ export const KEYBOARD_SHORTCUTS = [
},
{
title: 'keyboardShortcuts.list.title',
- available: (route) => route.name.startsWith('list.'),
+ available: (route) => (route.name as string)?.startsWith('list.'),
shortcuts: [
{
title: 'keyboardShortcuts.list.switchToListView',
@@ -55,13 +68,7 @@ export const KEYBOARD_SHORTCUTS = [
},
{
title: 'keyboardShortcuts.task.title',
- available: (route) => [
- 'task.detail',
- 'task.list.detail',
- 'task.gantt.detail',
- 'task.kanban.detail',
- 'task.detail',
- ].includes(route.name),
+ available: (route) => route.name === 'task.detail',
shortcuts: [
{
title: 'keyboardShortcuts.task.assign',
diff --git a/src/components/misc/ready.vue b/src/components/misc/ready.vue
index 07ee0ffa..8fd3f4fd 100644
--- a/src/components/misc/ready.vue
+++ b/src/components/misc/ready.vue
@@ -52,9 +52,15 @@ import NoAuthWrapper from '@/components/misc/no-auth-wrapper.vue'
import {ERROR_NO_API_URL} from '@/helpers/checkAndSetApiUrl'
import {useOnline} from '@/composables/useOnline'
+import {useRouter, useRoute} from 'vue-router'
+import {getAuthForRoute} from '@/router'
+
+const router = useRouter()
+const route = useRoute()
+
const store = useStore()
-const ready = computed(() => store.state.vikunjaReady)
+const ready = ref(false)
const online = useOnline()
const error = ref('')
@@ -63,7 +69,12 @@ const showLoading = computed(() => !ready.value && error.value === '')
async function load() {
try {
await store.dispatch('loadApp')
- } catch(e: any) {
+ const redirectTo = getAuthForRoute(route)
+ if (typeof redirectTo !== 'undefined') {
+ await router.push(redirectTo)
+ }
+ ready.value = true
+ } catch (e: any) {
error.value = e
}
}
diff --git a/src/components/misc/subscription.vue b/src/components/misc/subscription.vue
index d99dba71..dbda373e 100644
--- a/src/components/misc/subscription.vue
+++ b/src/components/misc/subscription.vue
@@ -1,55 +1,47 @@
{{ buttonText }}
-
-
+
{{ buttonText }}
-
+
+
+
\ No newline at end of file
diff --git a/src/components/tasks/edit-task.vue b/src/components/tasks/edit-task.vue
index e4ada125..718304c6 100644
--- a/src/components/tasks/edit-task.vue
+++ b/src/components/tasks/edit-task.vue
@@ -67,7 +67,7 @@
{{ $t('task.openDetail') }}
@@ -97,6 +97,15 @@ export default {
taskEditTask: TaskModel,
}
},
+ computed: {
+ taskDetailRoute() {
+ return {
+ name: 'task.detail',
+ params: { id: this.taskEditTask.id },
+ state: { backdropView: this.$router.currentRoute.value.fullPath },
+ }
+ },
+ },
components: {
ColorPicker,
Reminders,
diff --git a/src/components/tasks/mixins/taskList.js b/src/components/tasks/mixins/taskList.js
deleted file mode 100644
index a9b2e587..00000000
--- a/src/components/tasks/mixins/taskList.js
+++ /dev/null
@@ -1,101 +0,0 @@
-import TaskCollectionService from '@/services/taskCollection'
-
-// FIXME: merge with DEFAULT_PARAMS in filters.vue
-export const getDefaultParams = () => ({
- sort_by: ['position', 'id'],
- order_by: ['asc', 'desc'],
- filter_by: ['done'],
- filter_value: ['false'],
- filter_comparator: ['equals'],
- filter_concat: 'and',
-})
-
-/**
- * This mixin provides a base set of methods and properties to get tasks on a list.
- */
-export default {
- data() {
- return {
- taskCollectionService: new TaskCollectionService(),
- tasks: [],
-
- currentPage: 0,
-
- loadedList: null,
-
- searchTerm: '',
-
- showTaskFilter: false,
- params: {...getDefaultParams()},
- }
- },
- watch: {
- // Only listen for query path changes
- '$route.query': {
- handler: 'loadTasksForPage',
- immediate: true,
- },
- '$route.path': 'loadTasksOnSavedFilter',
- },
- methods: {
- async loadTasks(
- page,
- search = '',
- params = null,
- forceLoading = false,
- ) {
- // Because this function is triggered every time on topNavigation, we're putting a condition here to only load it when we actually want to show tasks
- // FIXME: This is a bit hacky -> Cleanup.
- if (
- this.$route.name !== 'list.list' &&
- this.$route.name !== 'list.table' &&
- !forceLoading
- ) {
- return
- }
-
- if (params === null) {
- params = this.params
- }
-
- if (search !== '') {
- params.s = search
- }
-
- const list = {listId: parseInt(this.$route.params.listId)}
-
- const currentList = {
- id: list.listId,
- params,
- search,
- page,
- }
- if (JSON.stringify(currentList) === JSON.stringify(this.loadedList) && !forceLoading) {
- return
- }
-
- this.tasks = []
- this.tasks = await this.taskCollectionService.getAll(list, params, page)
- this.currentPage = page
- this.loadedList = JSON.parse(JSON.stringify(currentList))
- },
-
- loadTasksForPage(e) {
- // The page parameter can be undefined, in the case where the user loads a new list from the side bar menu
- let page = Number(e.page)
- if (typeof e.page === 'undefined') {
- page = 1
- }
- let search = e.search
- if (typeof e.search === 'undefined') {
- search = ''
- }
- this.initTasks(page, search)
- },
- loadTasksOnSavedFilter() {
- if (typeof this.$route.params.listId !== 'undefined' && parseInt(this.$route.params.listId) < 0) {
- this.loadTasks(1, '', null, true)
- }
- },
- },
-}
\ No newline at end of file
diff --git a/src/components/tasks/partials/attachments.vue b/src/components/tasks/partials/attachments.vue
index 16bc9328..7d507e5e 100644
--- a/src/components/tasks/partials/attachments.vue
+++ b/src/components/tasks/partials/attachments.vue
@@ -400,4 +400,6 @@ export default {
transform: translate3d(0, -4px, 0);
}
}
+
+@include modal-transition();
\ No newline at end of file
diff --git a/src/components/tasks/partials/comments.vue b/src/components/tasks/partials/comments.vue
index d5db45c3..23105771 100644
--- a/src/components/tasks/partials/comments.vue
+++ b/src/components/tasks/partials/comments.vue
@@ -162,7 +162,7 @@ import {mapState} from 'vuex'
export default {
name: 'comments',
components: {
- editor: AsyncEditor,
+ Editor: AsyncEditor,
},
props: {
taskId: {
@@ -339,4 +339,6 @@ export default {
.media-content {
width: calc(100% - 48px - 2rem);
}
+
+@include modal-transition();
\ No newline at end of file
diff --git a/src/components/tasks/partials/description.vue b/src/components/tasks/partials/description.vue
index 28fd5a88..07d136fd 100644
--- a/src/components/tasks/partials/description.vue
+++ b/src/components/tasks/partials/description.vue
@@ -38,7 +38,7 @@ import {mapState} from 'vuex'
export default {
name: 'description',
components: {
- editor: AsyncEditor,
+ Editor: AsyncEditor,
},
data() {
return {
diff --git a/src/components/tasks/partials/editLabels.vue b/src/components/tasks/partials/editLabels.vue
index 4047192d..f2d01934 100644
--- a/src/components/tasks/partials/editLabels.vue
+++ b/src/components/tasks/partials/editLabels.vue
@@ -19,7 +19,7 @@
:style="{'background': props.item.hexColor, 'color': props.item.textColor}"
class="tag">
{{ props.item.title }}
-
+
@@ -114,23 +114,17 @@ export default {
},
async removeLabel(label) {
- const removeFromState = () => {
- for (const l in this.labels) {
- if (this.labels[l].id === label.id) {
- this.labels.splice(l, 1)
- }
+ if (!this.taskId === 0) {
+ await this.$store.dispatch('tasks/removeLabel', {label: label, taskId: this.taskId})
+ }
+
+ for (const l in this.labels) {
+ if (this.labels[l].id === label.id) {
+ this.labels.splice(l, 1)
}
- this.$emit('update:modelValue', this.labels)
- this.$emit('change', this.labels)
}
-
- if (this.taskId === 0) {
- removeFromState()
- return
- }
-
- await this.$store.dispatch('tasks/removeLabel', {label: label, taskId: this.taskId})
- removeFromState()
+ this.$emit('update:modelValue', this.labels)
+ this.$emit('change', this.labels)
this.$message.success({message: this.$t('task.label.removeSuccess')})
},
diff --git a/src/components/tasks/partials/kanban-card.vue b/src/components/tasks/partials/kanban-card.vue
index e901ac84..d0d4501d 100644
--- a/src/components/tasks/partials/kanban-card.vue
+++ b/src/components/tasks/partials/kanban-card.vue
@@ -7,8 +7,8 @@
'has-light-text': !colorIsDark(task.hexColor) && task.hexColor !== `#${task.defaultColor}` && task.hexColor !== task.defaultColor,
}"
:style="{'background-color': task.hexColor !== '#' && task.hexColor !== `#${task.defaultColor}` ? task.hexColor : false}"
+ @click.exact="openTaskDetail()"
@click.ctrl="() => toggleTaskDone(task)"
- @click.exact="() => $router.push({ name: 'task.kanban.detail', params: { id: task.id } })"
@click.meta="() => toggleTaskDone(task)"
>
@@ -115,6 +115,13 @@ export default {
this.loadingInternal = false
}
},
+ openTaskDetail() {
+ this.$router.push({
+ name: 'task.detail',
+ params: { id: this.task.id },
+ state: { backdropView: this.$router.currentRoute.value.fullPath },
+ })
+ },
},
}
diff --git a/src/components/tasks/partials/relatedTasks.vue b/src/components/tasks/partials/relatedTasks.vue
index 0b2be060..80c04e04 100644
--- a/src/components/tasks/partials/relatedTasks.vue
+++ b/src/components/tasks/partials/relatedTasks.vue
@@ -274,10 +274,11 @@ export default {
return tasks
.map(task => {
// by doing this here once we can save a lot of duplicate calls in the template
+ const listAndNamespace = this.$store.getters['namespaces/getListAndNamespaceById'](task.listId, true)
const {
list,
namespace,
- } = this.$store.getters['namespaces/getListAndNamespaceById'](task.listId, true)
+ } = listAndNamespace === null ? {list: null, namespace: null} : listAndNamespace
return {
...task,
@@ -364,4 +365,6 @@ export default {
:deep(.multiselect .search-results button) {
padding: 0.5rem;
}
+
+@include modal-transition();
\ No newline at end of file
diff --git a/src/components/tasks/partials/singleTaskInList.vue b/src/components/tasks/partials/singleTaskInList.vue
index 7eb07fb6..85293dec 100644
--- a/src/components/tasks/partials/singleTaskInList.vue
+++ b/src/components/tasks/partials/singleTaskInList.vue
@@ -8,7 +8,7 @@
>
@@ -129,10 +129,6 @@ export default {
type: Boolean,
default: false,
},
- taskDetailRoute: {
- type: String,
- default: 'task.list.detail',
- },
showList: {
type: Boolean,
default: false,
@@ -170,6 +166,14 @@ export default {
title: '',
} : this.$store.state.currentList
},
+ taskDetailRoute() {
+ return {
+ name: 'task.detail',
+ params: { id: this.task.id },
+ // TODO: re-enable opening task detail in modal
+ // state: { backdropView: this.$router.currentRoute.value.fullPath },
+ }
+ },
},
methods: {
async markAsDone(checked) {
diff --git a/src/components/tasks/partials/sort.vue b/src/components/tasks/partials/sort.vue
index c3581ba5..4eeb5e9f 100644
--- a/src/components/tasks/partials/sort.vue
+++ b/src/components/tasks/partials/sort.vue
@@ -1,20 +1,21 @@
-
+
-
+
-
+
-
diff --git a/src/composables/taskList.js b/src/composables/taskList.js
new file mode 100644
index 00000000..e80c5cbe
--- /dev/null
+++ b/src/composables/taskList.js
@@ -0,0 +1,111 @@
+import { ref, shallowReactive, watch, computed } from 'vue'
+import {useRoute} from 'vue-router'
+
+import TaskCollectionService from '@/services/taskCollection'
+
+// FIXME: merge with DEFAULT_PARAMS in filters.vue
+export const getDefaultParams = () => ({
+ sort_by: ['position', 'id'],
+ order_by: ['asc', 'desc'],
+ filter_by: ['done'],
+ filter_value: ['false'],
+ filter_comparator: ['equals'],
+ filter_concat: 'and',
+})
+
+const SORT_BY_DEFAULT = {
+ id: 'desc',
+}
+
+/**
+ * This mixin provides a base set of methods and properties to get tasks on a list.
+ */
+export function useTaskList(listId) {
+ const params = ref({...getDefaultParams()})
+
+ const search = ref('')
+ const page = ref(1)
+
+ const sortBy = ref({ ...SORT_BY_DEFAULT })
+
+
+ // This makes sure an id sort order is always sorted last.
+ // When tasks would be sorted first by id and then by whatever else was specified, the id sort takes
+ // precedence over everything else, making any other sort columns pretty useless.
+ function formatSortOrder(params) {
+ let hasIdFilter = false
+ const sortKeys = Object.keys(sortBy.value)
+ for (const s of sortKeys) {
+ if (s === 'id') {
+ sortKeys.splice(s, 1)
+ hasIdFilter = true
+ break
+ }
+ }
+ if (hasIdFilter) {
+ sortKeys.push('id')
+ }
+ params.sort_by = sortKeys
+ params.order_by = sortKeys.map(s => sortBy.value[s])
+
+ return params
+ }
+
+ const getAllTasksParams = computed(() => {
+ let loadParams = {...params.value}
+
+ if (search.value !== '') {
+ loadParams.s = search.value
+ }
+
+ loadParams = formatSortOrder(loadParams)
+
+ return [
+ {listId: listId.value},
+ loadParams,
+ page.value || 1,
+ ]
+ })
+
+ const taskCollectionService = shallowReactive(new TaskCollectionService())
+ const loading = computed(() => taskCollectionService.loading)
+ const totalPages = computed(() => taskCollectionService.totalPages)
+
+ const tasks = ref([])
+ async function loadTasks() {
+ tasks.value = await taskCollectionService.getAll(...getAllTasksParams.value)
+ return tasks.value
+ }
+
+ const route = useRoute()
+ watch(() => route.query, (query) => {
+ const { page: pageQueryValue, search: searchQuery } = query
+ if (searchQuery !== undefined) {
+ search.value = searchQuery
+ }
+ if (pageQueryValue !== undefined) {
+ page.value = parseInt(pageQueryValue)
+ }
+
+ }, { immediate: true })
+
+
+ // Only listen for query path changes
+ watch(() => JSON.stringify(getAllTasksParams.value), (newParams, oldParams) => {
+ if (oldParams === newParams) {
+ return
+ }
+
+ loadTasks()
+ }, { immediate: true })
+
+ return {
+ tasks,
+ loading,
+ totalPages,
+ currentPage: page,
+ loadTasks,
+ searchTerm: search,
+ params,
+ }
+}
\ No newline at end of file
diff --git a/src/composables/useTitle.ts b/src/composables/useTitle.ts
index e3544829..84aaa177 100644
--- a/src/composables/useTitle.ts
+++ b/src/composables/useTitle.ts
@@ -1,9 +1,9 @@
import { computed, watchEffect } from 'vue'
import { setTitle } from '@/helpers/setTitle'
-import { ComputedGetter, ComputedRef } from '@vue/reactivity'
+import { ComputedGetter } from '@vue/reactivity'
-export function useTitle(titleGetter: ComputedGetter) : ComputedRef {
+export function useTitle(titleGetter: ComputedGetter) {
const titleRef = computed(titleGetter)
watchEffect(() => setTitle(titleRef.value))
diff --git a/src/helpers/auth.ts b/src/helpers/auth.ts
index b073a8ca..81cd5580 100644
--- a/src/helpers/auth.ts
+++ b/src/helpers/auth.ts
@@ -53,6 +53,7 @@ export async function refreshToken(persist: boolean): Promise {
return response
} catch(e) {
+ // @ts-ignore
throw new Error('Error renewing token: ', { cause: e })
}
}
diff --git a/src/helpers/saveListView.js b/src/helpers/saveListView.js
index b7f735e1..96be6342 100644
--- a/src/helpers/saveListView.js
+++ b/src/helpers/saveListView.js
@@ -1,3 +1,5 @@
+// Save the current list view to local storage
+// We use local storage and not vuex here to make it persistent across reloads.
export const saveListView = (listId, routeName) => {
if (routeName.includes('settings.')) {
return
diff --git a/src/helpers/setTitle.js b/src/helpers/setTitle.ts
similarity index 65%
rename from src/helpers/setTitle.js
rename to src/helpers/setTitle.ts
index a2f31a45..d7e6b5dd 100644
--- a/src/helpers/setTitle.js
+++ b/src/helpers/setTitle.ts
@@ -1,4 +1,4 @@
-export function setTitle(title) {
+export function setTitle(title : undefined | string) {
document.title = (typeof title === 'undefined' || title === '')
? 'Vikunja'
: `${title} | Vikunja`
diff --git a/src/helpers/time/parseDate.ts b/src/helpers/time/parseDate.ts
index 34e6ef0f..3b663469 100644
--- a/src/helpers/time/parseDate.ts
+++ b/src/helpers/time/parseDate.ts
@@ -288,7 +288,7 @@ const getDateFromWeekday = (text: string): dateFoundResult => {
}
const getDayFromText = (text: string) => {
- const matcher = /(([1-2][0-9])|(3[01])|(0?[1-9]))(st|nd|rd|th|\.)/ig
+ const matcher = /($| )(([1-2][0-9])|(3[01])|(0?[1-9]))(st|nd|rd|th|\.)($| )/ig
const results = matcher.exec(text)
if (results === null) {
return {
@@ -302,17 +302,17 @@ const getDayFromText = (text: string) => {
const day = parseInt(results[0])
date.setDate(day)
- // If the parsed day is the 31st but the next month only has 30 days, setting the day to 31 will "overflow" the
- // date to the next month, but the first.
+ // If the parsed day is the 31st (or 29+ and the next month is february) but the next month only has 30 days,
+ // setting the day to 31 will "overflow" the date to the next month, but the first.
// This would look like a very weired bug. Now, to prevent that, we check if the day is the same as parsed after
// setting it for the first time and set it again if it isn't - that would mean the month overflowed.
- if (day === 31 && date.getDate() !== day) {
- date.setDate(day)
- }
-
- if (date < now) {
+ while (date < now) {
date.setMonth(date.getMonth() + 1)
}
+
+ if (date.getDate() !== day) {
+ date.setDate(day)
+ }
return {
foundText: results[0],
diff --git a/src/models/task.js b/src/models/task.js
index c0334237..63839689 100644
--- a/src/models/task.js
+++ b/src/models/task.js
@@ -10,9 +10,6 @@ import {parseDateOrNull} from '@/helpers/parseDateOrNull'
const SUPPORTS_TRIGGERED_NOTIFICATION = 'Notification' in window && 'showTrigger' in Notification.prototype
export default class TaskModel extends AbstractModel {
-
- defaultColor = '198CFF'
-
constructor(data) {
super(data)
diff --git a/src/modules/parseTaskText.test.js b/src/modules/parseTaskText.test.js
index 19f3ba17..30e5743c 100644
--- a/src/modules/parseTaskText.test.js
+++ b/src/modules/parseTaskText.test.js
@@ -1,4 +1,4 @@
-import {describe, it, expect} from 'vitest'
+import {beforeEach, afterEach, describe, it, expect, vi} from 'vitest'
import {parseTaskText} from './parseTaskText'
import {getDateFromText, getDateFromTextIn} from '../helpers/time/parseDate'
@@ -6,6 +6,14 @@ import {calculateDayInterval} from '../helpers/time/calculateDayInterval'
import priorities from '../models/constants/priorities.json'
describe('Parse Task Text', () => {
+ beforeEach(() => {
+ vi.useFakeTimers()
+ })
+
+ afterEach(() => {
+ vi.useRealTimers()
+ })
+
it('should return text with no intents as is', () => {
expect(parseTaskText('Lorem Ipsum').text).toBe('Lorem Ipsum')
})
@@ -32,7 +40,7 @@ describe('Parse Task Text', () => {
expect(result.assignees).toHaveLength(1)
expect(result.assignees[0]).toBe('user')
})
-
+
it('should ignore email addresses', () => {
const text = 'Lorem Ipsum email@example.com'
const result = parseTaskText(text)
@@ -211,17 +219,36 @@ describe('Parse Task Text', () => {
expect(`${result.date.getHours()}:${result.date.getMinutes()}`).toBe('14:0')
})
it('should recognize dates of the month in the past but next month', () => {
- const date = new Date()
- date.setDate(date.getDate() - 1)
- const result = parseTaskText(`Lorem Ipsum ${date.getDate()}nd`)
+ const time = new Date(2022, 0, 15)
+ vi.setSystemTime(time)
+
+ const result = parseTaskText(`Lorem Ipsum ${time.getDate() - 1}th`)
expect(result.text).toBe('Lorem Ipsum')
- expect(result.date.getDate()).toBe(date.getDate())
+ expect(result.date.getDate()).toBe(time.getDate() - 1)
+ expect(result.date.getMonth()).toBe(time.getMonth() + 1)
+ })
+ it('should recognize dates of the month in the past but next month when february is the next month', () => {
+ const jan = new Date(2022, 0, 30)
+ vi.setSystemTime(jan)
- const nextMonthWithDate = result.date.getDate() === 31
- ? (date.getMonth() + 2) % 12
- : (date.getMonth() + 1) % 12
- expect(result.date.getMonth()).toBe(nextMonthWithDate)
+ const result = parseTaskText(`Lorem Ipsum ${jan.getDate() - 1}th`)
+
+ const expectedDate = new Date(2022, 2, jan.getDate() - 1)
+ expect(result.text).toBe('Lorem Ipsum')
+ expect(result.date.getDate()).toBe(expectedDate.getDate())
+ expect(result.date.getMonth()).toBe(expectedDate.getMonth())
+ })
+ it('should recognize dates of the month in the past but next month when the next month has less days than this one', () => {
+ const mar = new Date(2022, 2, 32)
+ vi.setSystemTime(mar)
+
+ const result = parseTaskText(`Lorem Ipsum 31st`)
+
+ const expectedDate = new Date(2022, 4, 31)
+ expect(result.text).toBe('Lorem Ipsum')
+ expect(result.date.getDate()).toBe(expectedDate.getDate())
+ expect(result.date.getMonth()).toBe(expectedDate.getMonth())
})
it('should recognize dates of the month in the future', () => {
const nextDay = new Date(+new Date() + 60 * 60 * 24 * 1000)
@@ -242,6 +269,12 @@ describe('Parse Task Text', () => {
expect(result.text).toBe('Lorem Ipsum github')
expect(result.date).toBeNull()
})
+ it('should not recognize date number with no spacing around them', () => {
+ const result = parseTaskText('Lorem Ispum v1.1.1')
+
+ expect(result.text).toBe('Lorem Ispum v1.1.1')
+ expect(result.date).toBeNull()
+ })
describe('Parse weekdays', () => {
diff --git a/src/router/index.ts b/src/router/index.ts
index 521d6a10..6e4ccce2 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -2,6 +2,8 @@ import { createRouter, createWebHistory, RouteLocation } from 'vue-router'
import {saveLastVisited} from '@/helpers/saveLastVisited'
import {store} from '@/store'
+import {saveListView, getListView} from '@/helpers/saveListView'
+
import HomeComponent from '../views/Home.vue'
import NotFoundComponent from '../views/404.vue'
import About from '../views/About.vue'
@@ -13,9 +15,8 @@ import DataExportDownload from '../views/user/DataExportDownload.vue'
// Tasks
import ShowTasksInRangeComponent from '../views/tasks/ShowTasksInRange.vue'
import LinkShareAuthComponent from '../views/sharing/LinkSharingAuth.vue'
-import TaskDetailViewModal from '../views/tasks/TaskDetailViewModal.vue'
-import TaskDetailView from '../views/tasks/TaskDetailView.vue'
import ListNamespaces from '../views/namespaces/ListNamespaces.vue'
+import TaskDetailView from '../views/tasks/TaskDetailView.vue'
// Team Handling
import ListTeamsComponent from '../views/teams/ListTeams.vue'
// Label Handling
@@ -25,11 +26,11 @@ import NewLabelComponent from '../views/labels/NewLabel.vue'
import MigrationComponent from '../views/migrator/Migrate.vue'
import MigrateServiceComponent from '../views/migrator/MigrateService.vue'
// List Views
-import ShowListComponent from '../views/list/ShowList.vue'
-import Kanban from '../views/list/views/Kanban.vue'
-import List from '../views/list/views/List.vue'
-import Gantt from '../views/list/views/Gantt.vue'
-import Table from '../views/list/views/Table.vue'
+import ListList from '../views/list/ListList.vue'
+import ListGantt from '../views/list/ListGantt.vue'
+import ListTable from '../views/list/ListTable.vue'
+import ListKanban from '../views/list/ListKanban.vue'
+
// List Settings
import ListSettingEdit from '../views/list/settings/edit.vue'
import ListSettingBackground from '../views/list/settings/background.vue'
@@ -80,7 +81,7 @@ const router = createRouter({
// Scroll to anchor should still work
if (to.hash) {
- return {el: document.getElementById(to.hash.slice(1))}
+ return {el: to.hash}
}
// Otherwise just scroll to the top
@@ -201,320 +202,170 @@ const router = createRouter({
{
path: '/namespaces/new',
name: 'namespace.create',
- components: {
- popup: NewNamespaceComponent,
- },
- },
- {
- path: '/namespaces/:id/list',
- name: 'list.create',
- components: {
- popup: NewListComponent,
+ component: NewNamespaceComponent,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/namespaces/:id/settings/edit',
name: 'namespace.settings.edit',
- components: {
- popup: NamespaceSettingEdit,
+ component: NamespaceSettingEdit,
+ meta: {
+ showAsModal: true,
},
},
{
- path: '/namespaces/:id/settings/share',
+ path: '/namespaces/:namespaceId/settings/share',
name: 'namespace.settings.share',
- components: {
- popup: NamespaceSettingShare,
+ component: NamespaceSettingShare,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/namespaces/:id/settings/archive',
name: 'namespace.settings.archive',
- components: {
- popup: NamespaceSettingArchive,
+ component: NamespaceSettingArchive,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/namespaces/:id/settings/delete',
name: 'namespace.settings.delete',
- components: {
- popup: NamespaceSettingDelete,
+ component: NamespaceSettingDelete,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/tasks/:id',
name: 'task.detail',
component: TaskDetailView,
+ props: route => ({ taskId: parseInt(route.params.id as string) }),
},
{
path: '/tasks/by/upcoming',
name: 'tasks.range',
component: ShowTasksInRangeComponent,
},
+ {
+ path: '/lists/new/:namespaceId/',
+ name: 'list.create',
+ component: NewListComponent,
+ meta: {
+ showAsModal: true,
+ },
+ },
{
path: '/lists/:listId/settings/edit',
name: 'list.settings.edit',
- components: {
- popup: ListSettingEdit,
+ component: ListSettingEdit,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId/settings/background',
name: 'list.settings.background',
- components: {
- popup: ListSettingBackground,
+ component: ListSettingBackground,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId/settings/duplicate',
name: 'list.settings.duplicate',
- components: {
- popup: ListSettingDuplicate,
+ component: ListSettingDuplicate,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId/settings/share',
name: 'list.settings.share',
- components: {
- popup: ListSettingShare,
+ component: ListSettingShare,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId/settings/delete',
name: 'list.settings.delete',
- components: {
- popup: ListSettingDelete,
+ component: ListSettingDelete,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId/settings/archive',
name: 'list.settings.archive',
- components: {
- popup: ListSettingArchive,
+ component: ListSettingArchive,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId/settings/edit',
name: 'filter.settings.edit',
- components: {
- popup: FilterEdit,
+ component: FilterEdit,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId/settings/delete',
name: 'filter.settings.delete',
- components: {
- popup: FilterDelete,
+ component: FilterDelete,
+ meta: {
+ showAsModal: true,
},
},
{
path: '/lists/:listId',
name: 'list.index',
- component: ShowListComponent,
- children: [
- {
- path: '/lists/:listId/list',
- name: 'list.list',
- component: List,
- children: [
- {
- path: '/tasks/:id',
- name: 'task.list.detail',
- component: TaskDetailViewModal,
- },
- {
- path: '/lists/:listId/settings/edit',
- name: 'list.list.settings.edit',
- component: ListSettingEdit,
- },
- {
- path: '/lists/:listId/settings/background',
- name: 'list.list.settings.background',
- component: ListSettingBackground,
- },
- {
- path: '/lists/:listId/settings/duplicate',
- name: 'list.list.settings.duplicate',
- component: ListSettingDuplicate,
- },
- {
- path: '/lists/:listId/settings/share',
- name: 'list.list.settings.share',
- component: ListSettingShare,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'list.list.settings.delete',
- component: ListSettingDelete,
- },
- {
- path: '/lists/:listId/settings/archive',
- name: 'list.list.settings.archive',
- component: ListSettingArchive,
- },
- {
- path: '/lists/:listId/settings/edit',
- name: 'filter.list.settings.edit',
- component: FilterEdit,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'filter.list.settings.delete',
- component: FilterDelete,
- },
- ],
- },
- {
- path: '/lists/:listId/gantt',
- name: 'list.gantt',
- component: Gantt,
- children: [
- {
- path: '/tasks/:id',
- name: 'task.gantt.detail',
- component: TaskDetailViewModal,
- },
- {
- path: '/lists/:listId/settings/edit',
- name: 'list.gantt.settings.edit',
- component: ListSettingEdit,
- },
- {
- path: '/lists/:listId/settings/background',
- name: 'list.gantt.settings.background',
- component: ListSettingBackground,
- },
- {
- path: '/lists/:listId/settings/duplicate',
- name: 'list.gantt.settings.duplicate',
- component: ListSettingDuplicate,
- },
- {
- path: '/lists/:listId/settings/share',
- name: 'list.gantt.settings.share',
- component: ListSettingShare,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'list.gantt.settings.delete',
- component: ListSettingDelete,
- },
- {
- path: '/lists/:listId/settings/archive',
- name: 'list.gantt.settings.archive',
- component: ListSettingArchive,
- },
- {
- path: '/lists/:listId/settings/edit',
- name: 'filter.gantt.settings.edit',
- component: FilterEdit,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'filter.gantt.settings.delete',
- component: FilterDelete,
- },
- ],
- },
- {
- path: '/lists/:listId/table',
- name: 'list.table',
- component: Table,
- children: [
- {
- path: '/lists/:listId/settings/edit',
- name: 'list.table.settings.edit',
- component: ListSettingEdit,
- },
- {
- path: '/lists/:listId/settings/background',
- name: 'list.table.settings.background',
- component: ListSettingBackground,
- },
- {
- path: '/lists/:listId/settings/duplicate',
- name: 'list.table.settings.duplicate',
- component: ListSettingDuplicate,
- },
- {
- path: '/lists/:listId/settings/share',
- name: 'list.table.settings.share',
- component: ListSettingShare,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'list.table.settings.delete',
- component: ListSettingDelete,
- },
- {
- path: '/lists/:listId/settings/archive',
- name: 'list.table.settings.archive',
- component: ListSettingArchive,
- },
- {
- path: '/lists/:listId/settings/edit',
- name: 'filter.table.settings.edit',
- component: FilterEdit,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'filter.table.settings.delete',
- component: FilterDelete,
- },
- ],
- },
- {
- path: '/lists/:listId/kanban',
- name: 'list.kanban',
- component: Kanban,
- children: [
- {
- path: '/tasks/:id',
- name: 'task.kanban.detail',
- component: TaskDetailViewModal,
- },
- {
- path: '/lists/:listId/settings/edit',
- name: 'list.kanban.settings.edit',
- component: ListSettingEdit,
- },
- {
- path: '/lists/:listId/settings/background',
- name: 'list.kanban.settings.background',
- component: ListSettingBackground,
- },
- {
- path: '/lists/:listId/settings/duplicate',
- name: 'list.kanban.settings.duplicate',
- component: ListSettingDuplicate,
- },
- {
- path: '/lists/:listId/settings/share',
- name: 'list.kanban.settings.share',
- component: ListSettingShare,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'list.kanban.settings.delete',
- component: ListSettingDelete,
- },
- {
- path: '/lists/:listId/settings/archive',
- name: 'list.kanban.settings.archive',
- component: ListSettingArchive,
- },
- {
- path: '/lists/:listId/settings/edit',
- name: 'filter.kanban.settings.edit',
- component: FilterEdit,
- },
- {
- path: '/lists/:listId/settings/delete',
- name: 'filter.kanban.settings.delete',
- component: FilterDelete,
- },
- ],
- },
- ],
+ redirect(to) {
+ // Redirect the user to list view by default
+
+ const savedListView = getListView(to.params.listId)
+ console.debug('Replaced list view with', savedListView)
+
+ return {
+ name: router.hasRoute(savedListView)
+ ? savedListView
+ : 'list.list',
+ params: {listId: to.params.listId},
+ }
+ },
+ },
+ {
+ path: '/lists/:listId/list',
+ name: 'list.list',
+ component: ListList,
+ beforeEnter: (to) => saveListView(to.params.listId, to.name),
+ props: route => ({ listId: parseInt(route.params.listId as string) }),
+ },
+ {
+ path: '/lists/:listId/gantt',
+ name: 'list.gantt',
+ component: ListGantt,
+ beforeEnter: (to) => saveListView(to.params.listId, to.name),
+ props: route => ({ listId: parseInt(route.params.listId as string) }),
+ },
+ {
+ path: '/lists/:listId/table',
+ name: 'list.table',
+ component: ListTable,
+ beforeEnter: (to) => saveListView(to.params.listId, to.name),
+ props: route => ({ listId: parseInt(route.params.listId as string) }),
+ },
+ {
+ path: '/lists/:listId/kanban',
+ name: 'list.kanban',
+ component: ListKanban,
+ beforeEnter: (to) => saveListView(to.params.listId, to.name),
+ props: route => ({ listId: parseInt(route.params.listId as string) }),
},
{
path: '/teams',
@@ -524,8 +375,9 @@ const router = createRouter({
{
path: '/teams/new',
name: 'teams.create',
- components: {
- popup: NewTeamComponent,
+ component: NewTeamComponent,
+ meta: {
+ showAsModal: true,
},
},
{
@@ -541,8 +393,9 @@ const router = createRouter({
{
path: '/labels/new',
name: 'labels.create',
- components: {
- popup: NewLabelComponent,
+ component: NewLabelComponent,
+ meta: {
+ showAsModal: true,
},
},
{
@@ -558,8 +411,9 @@ const router = createRouter({
{
path: '/filters/new',
name: 'filters.create',
- components: {
- popup: FilterNew,
+ component: FilterNew,
+ meta: {
+ showAsModal: true,
},
},
{
@@ -575,11 +429,7 @@ const router = createRouter({
],
})
-router.beforeEach((to) => {
- return checkAuth(to)
-})
-
-function checkAuth(route: RouteLocation) {
+export function getAuthForRoute(route: RouteLocation) {
const authUser = store.getters['auth/authUser']
const authLinkShare = store.getters['auth/authLinkShare']
diff --git a/src/store/index.js b/src/store/index.js
index 37c74ae8..0833e3f6 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -18,6 +18,8 @@ import lists from './modules/lists'
import attachments from './modules/attachments'
import labels from './modules/labels'
+import ListModel from '@/models/list'
+
import ListService from '../services/list'
import {checkAndSetApiUrl} from '@/helpers/checkAndSetApiUrl'
@@ -37,13 +39,15 @@ export const store = createStore({
loading: false,
loadingModule: null,
// This is used to highlight the current list in menu for all list related views
- currentList: {id: 0},
+ currentList: new ListModel({
+ id: 0,
+ isArchived: false,
+ }),
background: '',
hasTasks: false,
menuActive: true,
keyboardShortcutsActive: false,
quickActionsActive: false,
- vikunjaReady: false,
},
mutations: {
[LOADING](state, loading) {
@@ -79,9 +83,6 @@ export const store = createStore({
[BACKGROUND](state, background) {
state.background = background
},
- vikunjaReady(state, ready) {
- state.vikunjaReady = ready
- },
},
actions: {
async [CURRENT_LIST]({state, commit}, currentList) {
@@ -136,10 +137,9 @@ export const store = createStore({
commit(CURRENT_LIST, currentList)
},
- async loadApp({commit, dispatch}) {
+ async loadApp({dispatch}) {
await checkAndSetApiUrl(window.API_URL)
await dispatch('auth/checkAuth')
- commit('vikunjaReady', true)
},
},
})
diff --git a/src/store/modules/auth.js b/src/store/modules/auth.js
index c5dd1032..e71bbe73 100644
--- a/src/store/modules/auth.js
+++ b/src/store/modules/auth.js
@@ -1,12 +1,12 @@
import {HTTPFactory} from '@/http-common'
-import {getCurrentLanguage, saveLanguage} from '@/i18n'
+import {i18n, getCurrentLanguage, saveLanguage} from '@/i18n'
import {LOADING} from '../mutation-types'
import UserModel from '@/models/user'
import UserSettingsService from '@/services/userSettings'
import {getToken, refreshToken, removeToken, saveToken} from '@/helpers/auth'
import {setLoading} from '@/store/helper'
-import {i18n} from '@/i18n'
import {success} from '@/message'
+import {redirectToProvider} from '@/helpers/redirectToProvider'
const AUTH_TYPES = {
'UNKNOWN': 0,
@@ -201,7 +201,19 @@ export default {
ctx.commit('authenticated', authenticated)
if (!authenticated) {
ctx.commit('info', null)
- ctx.dispatch('config/redirectToProviderIfNothingElseIsEnabled', null, {root: true})
+ ctx.dispatch('redirectToProviderIfNothingElseIsEnabled')
+ }
+ },
+
+ redirectToProviderIfNothingElseIsEnabled({rootState}) {
+ const {auth} = rootState.config
+ if (
+ auth.local.enabled === false &&
+ auth.openidConnect.enabled &&
+ auth.openidConnect.providers?.length === 1 &&
+ window.location.pathname.startsWith('/login') // Kinda hacky, but prevents an endless loop.
+ ) {
+ redirectToProvider(auth.openidConnect.providers[0], auth.openidConnect.redirectUrl)
}
},
diff --git a/src/store/modules/config.js b/src/store/modules/config.js
index 82c2b20c..dfe1e01f 100644
--- a/src/store/modules/config.js
+++ b/src/store/modules/config.js
@@ -1,7 +1,6 @@
import {CONFIG} from '../mutation-types'
import {HTTPFactory} from '@/http-common'
import {objectToCamelCase} from '@/helpers/case'
-import {redirectToProvider} from '../../helpers/redirectToProvider'
import {parseURL} from 'ufo'
export default {
@@ -75,16 +74,5 @@ export default {
ctx.commit(CONFIG, info)
return info
},
-
- redirectToProviderIfNothingElseIsEnabled(ctx) {
- if (ctx.state.auth.local.enabled === false &&
- ctx.state.auth.openidConnect.enabled &&
- ctx.state.auth.openidConnect.providers &&
- ctx.state.auth.openidConnect.providers.length === 1 &&
- window.location.pathname.startsWith('/login') // Kinda hacky, but prevents an endless loop.
- ) {
- redirectToProvider(ctx.state.auth.openidConnect.providers[0])
- }
- },
},
}
\ No newline at end of file
diff --git a/src/store/modules/namespaces.js b/src/store/modules/namespaces.js
index ae47a95f..4512fb89 100644
--- a/src/store/modules/namespaces.js
+++ b/src/store/modules/namespaces.js
@@ -23,8 +23,6 @@ export default {
return
}
- // FIXME: direct manipulation of the prop
- // might not be a problem since this is happening in the mutation
if (!namespace.lists || namespace.lists.length === 0) {
namespace.lists = state.namespaces[namespaceIndex].lists
}
@@ -136,8 +134,8 @@ export default {
},
loadNamespacesIfFavoritesDontExist(ctx) {
- // The first namespace should be the one holding all favorites
- if (ctx.state.namespaces[0].id !== -2) {
+ // The first or second namespace should be the one holding all favorites
+ if (ctx.state.namespaces[0].id !== -2 && ctx.state.namespaces[1]?.id !== -2) {
return ctx.dispatch('loadNamespaces')
}
},
diff --git a/src/styles/common-imports.scss b/src/styles/common-imports.scss
index 5ca35fc4..a9e163e3 100644
--- a/src/styles/common-imports.scss
+++ b/src/styles/common-imports.scss
@@ -16,6 +16,8 @@
// since $tablet is defined by bulma we can just define it after importing the utilities
$mobile: math.div($tablet, 2);
+@import "mixins";
+
$family-sans-serif: 'Open Sans', Helvetica, Arial, sans-serif;
$vikunja-font: 'Quicksand', sans-serif;
diff --git a/src/styles/mixins.scss b/src/styles/mixins.scss
new file mode 100644
index 00000000..687355e7
--- /dev/null
+++ b/src/styles/mixins.scss
@@ -0,0 +1,12 @@
+/* Transitions */
+@mixin modal-transition() {
+ .modal-enter,
+ .modal-leave-active {
+ opacity: 0;
+ }
+
+ .modal-enter .modal-container,
+ .modal-leave-active .modal-container {
+ transform: scale(0.9);
+ }
+}
\ No newline at end of file
diff --git a/src/styles/theme/background.scss b/src/styles/theme/background.scss
index b03b04f4..d478aac4 100644
--- a/src/styles/theme/background.scss
+++ b/src/styles/theme/background.scss
@@ -14,7 +14,7 @@
.box,
.card,
.switch-view,
- .table-view .button,
+ .list-table .button,
.filter-container .button,
.search .button {
box-shadow: none;
diff --git a/src/types/shims-vue.d.ts b/src/types/shims-vue.d.ts
index 4f0571df..c04ff091 100644
--- a/src/types/shims-vue.d.ts
+++ b/src/types/shims-vue.d.ts
@@ -1,8 +1,11 @@
declare module 'vue' {
import { CompatVue } from '@vue/runtime-dom'
const Vue: CompatVue
- export default Vue
- export * from '@vue/runtime-dom'
+ export default Vue
+ export * from '@vue/runtime-dom'
+
+ const { configureCompat } = Vue
+ export { configureCompat }
}
// https://next.vuex.vuejs.org/guide/migrating-to-4-0-from-3-x.html#typescript-support
diff --git a/src/types/vue-flatpickr-component.d.ts b/src/types/vue-flatpickr-component.d.ts
new file mode 100644
index 00000000..2ac9cc87
--- /dev/null
+++ b/src/types/vue-flatpickr-component.d.ts
@@ -0,0 +1 @@
+declare module 'vue-flatpickr-component';
\ No newline at end of file
diff --git a/src/views/Home.vue b/src/views/Home.vue
index f3d2b3ec..14c160d4 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -23,7 +23,7 @@
{{ $t('home.list.newText') }}
diff --git a/src/views/list/views/Gantt.vue b/src/views/list/ListGantt.vue
similarity index 66%
rename from src/views/list/views/Gantt.vue
rename to src/views/list/ListGantt.vue
index b3628238..82b765dd 100644
--- a/src/views/list/views/Gantt.vue
+++ b/src/views/list/ListGantt.vue
@@ -1,6 +1,6 @@
-
-
+
+
{{ $t('list.gantt.showTasksWithoutDates') }}
@@ -44,65 +44,64 @@
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
-
\ No newline at end of file
diff --git a/src/views/list/views/List.vue b/src/views/list/ListList.vue
similarity index 79%
rename from src/views/list/views/List.vue
rename to src/views/list/ListList.vue
index d61a39e8..bb9e9478 100644
--- a/src/views/list/views/List.vue
+++ b/src/views/list/ListList.vue
@@ -1,8 +1,6 @@
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/src/views/list/ListWrapper.vue b/src/views/list/ListWrapper.vue
new file mode 100644
index 00000000..d816b90e
--- /dev/null
+++ b/src/views/list/ListWrapper.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+ {{ $t('list.list.title') }}
+
+
+ {{ $t('list.gantt.title') }}
+
+
+ {{ $t('list.table.title') }}
+
+
+ {{ $t('list.kanban.title') }}
+
+
+
+
+
+
+ {{ $t('list.archived') }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/list/NewList.vue b/src/views/list/NewList.vue
index fb48e42b..0317a88e 100644
--- a/src/views/list/NewList.vue
+++ b/src/views/list/NewList.vue
@@ -61,7 +61,7 @@ export default {
}
this.showError = false
- this.list.namespaceId = parseInt(this.$route.params.id)
+ this.list.namespaceId = parseInt(this.$route.params.namespaceId)
const list = await this.$store.dispatch('lists/createList', this.list)
this.$message.success({message: this.$t('list.create.createdSuccess') })
this.$router.push({
diff --git a/src/views/list/ShowList.vue b/src/views/list/ShowList.vue
deleted file mode 100644
index d0c1d20f..00000000
--- a/src/views/list/ShowList.vue
+++ /dev/null
@@ -1,211 +0,0 @@
-
-
-
-
-
- {{ $t('list.list.title') }}
-
-
- {{ $t('list.gantt.title') }}
-
-
- {{ $t('list.table.title') }}
-
-
- {{ $t('list.kanban.title') }}
-
-
-
-
-
- {{ $t('list.archived') }}
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/list/settings/share.vue b/src/views/list/settings/share.vue
index 4a9967f8..ca11b4e5 100644
--- a/src/views/list/settings/share.vue
+++ b/src/views/list/settings/share.vue
@@ -3,24 +3,38 @@
:title="$t('list.share.header')"
primary-label=""
>
-
-
+
+
+
+
-
+
-
+
+
diff --git a/src/views/list/views/Table.vue b/src/views/list/views/Table.vue
deleted file mode 100644
index b15b0a1b..00000000
--- a/src/views/list/views/Table.vue
+++ /dev/null
@@ -1,331 +0,0 @@
-
-
-
-
-
-
-
- {{ $t('list.table.columns') }}
-
-
-
-
- #
-
- {{ $t('task.attributes.done') }}
-
-
- {{ $t('task.attributes.title') }}
-
-
- {{ $t('task.attributes.priority') }}
-
-
- {{ $t('task.attributes.labels') }}
-
-
- {{ $t('task.attributes.assignees') }}
-
-
- {{ $t('task.attributes.dueDate') }}
-
-
- {{ $t('task.attributes.startDate') }}
-
-
- {{ $t('task.attributes.endDate') }}
-
-
- {{ $t('task.attributes.percentDone') }}
-
-
- {{ $t('task.attributes.created') }}
-
-
- {{ $t('task.attributes.updated') }}
-
-
- {{ $t('task.attributes.createdBy') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #
-
-
-
- {{ $t('task.attributes.done') }}
-
-
-
- {{ $t('task.attributes.title') }}
-
-
-
- {{ $t('task.attributes.priority') }}
-
-
-
- {{ $t('task.attributes.labels') }}
-
-
- {{ $t('task.attributes.assignees') }}
-
-
- {{ $t('task.attributes.dueDate') }}
-
-
-
- {{ $t('task.attributes.startDate') }}
-
-
-
- {{ $t('task.attributes.endDate') }}
-
-
-
- {{ $t('task.attributes.percentDone') }}
-
-
-
- {{ $t('task.attributes.created') }}
-
-
-
- {{ $t('task.attributes.updated') }}
-
-
-
- {{ $t('task.attributes.createdBy') }}
-
-
-
-
-
-
-
-
- #{{ t.index }}
-
-
- {{ t.identifier }}
-
-
-
-
-
-
-
- {{ t.title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t.percentDone * 100 }}%
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/namespaces/ListNamespaces.vue b/src/views/namespaces/ListNamespaces.vue
index 949702c6..0a63b050 100644
--- a/src/views/namespaces/ListNamespaces.vue
+++ b/src/views/namespaces/ListNamespaces.vue
@@ -24,7 +24,7 @@
{{ $t('namespace.noLists') }}
-
+
{{ $t('namespace.createList') }}
diff --git a/src/views/namespaces/settings/archive.vue b/src/views/namespaces/settings/archive.vue
index 9eb1305b..e08457e9 100644
--- a/src/views/namespaces/settings/archive.vue
+++ b/src/views/namespaces/settings/archive.vue
@@ -4,9 +4,11 @@
@submit="archiveNamespace()"
>
{{ title }}
-
+
- {{ list.isArchived ? $t('namespace.archive.unarchiveText') : $t('namespace.archive.archiveText') }}
+
+ {{ namespace.isArchived ? $t('namespace.archive.unarchiveText') : $t('namespace.archive.archiveText')}}
+
@@ -27,17 +29,18 @@ export default {
created() {
this.namespace = this.$store.getters['namespaces/getNamespaceById'](this.$route.params.id)
this.title = this.namespace.isArchived ?
- this.$t('namespace.archive.titleUnarchive', { namespace: this.namespace.title }) :
- this.$t('namespace.archive.titleArchive', { namespace: this.namespace.title })
+ this.$t('namespace.archive.titleUnarchive', {namespace: this.namespace.title}) :
+ this.$t('namespace.archive.titleArchive', {namespace: this.namespace.title})
this.setTitle(this.title)
},
methods: {
async archiveNamespace() {
- this.namespace.isArchived = !this.namespace.isArchived
-
try {
- const namespace = await this.namespaceService.update(this.namespace)
+ const namespace = await this.namespaceService.update({
+ ...this.namespace,
+ isArchived: !this.namespace.isArchived,
+ })
this.$store.commit('namespaces/setNamespaceById', namespace)
this.$message.success({message: this.$t('namespace.archive.success')})
} finally {
diff --git a/src/views/namespaces/settings/share.vue b/src/views/namespaces/settings/share.vue
index 8f70cbd5..f3e4a20c 100644
--- a/src/views/namespaces/settings/share.vue
+++ b/src/views/namespaces/settings/share.vue
@@ -3,69 +3,67 @@
:title="title"
primary-label=""
>
-
-
+
+
+
+
-
+
+
\ No newline at end of file
diff --git a/src/views/tasks/ShowTasks.vue b/src/views/tasks/ShowTasks.vue
index d4f06ba3..9b139984 100644
--- a/src/views/tasks/ShowTasks.vue
+++ b/src/views/tasks/ShowTasks.vue
@@ -231,23 +231,25 @@ export default {
},
setDatesToNextWeek() {
- this.cStartDate = new Date()
- this.cEndDate = new Date((new Date()).getTime() + 7 * 24 * 60 * 60 * 1000)
+ const now = new Date()
+ this.cStartDate = now
+ this.cEndDate = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000)
this.showOverdue = false
this.setDate()
},
setDatesToNextMonth() {
- this.cStartDate = new Date()
- this.cEndDate = new Date((new Date()).setMonth((new Date()).getMonth() + 1))
+ const now = new Date()
+ this.cStartDate = now
+ this.cEndDate = new Date((new Date()).setMonth(now.getMonth() + 1))
this.showOverdue = false
this.setDate()
},
showTodaysTasks() {
- const d = new Date()
- this.cStartDate = new Date()
- this.cEndDate = new Date(d.setDate(d.getDate() + 1))
+ const now = new Date()
+ this.cStartDate = now
+ this.cEndDate = new Date((new Date()).setDate(now.getDate() + 1))
this.showOverdue = true
this.setDate()
},
diff --git a/src/views/tasks/TaskDetailView.vue b/src/views/tasks/TaskDetailView.vue
index 40de50de..ed1c0eb2 100644
--- a/src/views/tasks/TaskDetailView.vue
+++ b/src/views/tasks/TaskDetailView.vue
@@ -263,6 +263,7 @@
{{ task.done ? $t('task.detail.undone') : $t('task.detail.done') }}
\ No newline at end of file
diff --git a/src/views/tasks/TaskDetailViewModal.vue b/src/views/tasks/TaskDetailViewModal.vue
deleted file mode 100644
index 9b493246..00000000
--- a/src/views/tasks/TaskDetailViewModal.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/teams/EditTeam.vue b/src/views/teams/EditTeam.vue
index 059530e8..31c690f9 100644
--- a/src/views/teams/EditTeam.vue
+++ b/src/views/teams/EditTeam.vue
@@ -308,4 +308,6 @@ export default {
padding: 0;
}
}
+
+@include modal-transition();
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 9889d94f..aabf6825 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1721,6 +1721,34 @@
dependencies:
"@cspotcode/source-map-consumer" "0.8.0"
+"@csstools/postcss-font-format-keywords@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz#7e7df948a83a0dfb7eb150a96e2390ac642356a1"
+ integrity sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-hwb-function@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.0.tgz#d6785c1c5ba8152d1d392c66f3a6a446c6034f6d"
+ integrity sha512-VSTd7hGjmde4rTj1rR30sokY3ONJph1reCBTUXqeW1fKwETPy1x4t/XIeaaqbMbC5Xg4SM/lyXZ2S8NELT2TaA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-is-pseudo-class@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.0.tgz#219a1c1d84de7d9e9b7e662a57fdc194eac38ea7"
+ integrity sha512-WnfZlyuh/CW4oS530HBbrKq0G8BKl/bsNr5NMFoubBFzJfvFRGJhplCgIJYWUidLuL3WJ/zhMtDIyNFTqhx63Q==
+ dependencies:
+ postcss-selector-parser "^6.0.9"
+
+"@csstools/postcss-normalize-display-values@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz#ce698f688c28517447aedf15a9037987e3d2dc97"
+ integrity sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
"@cypress/request@^2.88.10":
version "2.88.10"
resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce"
@@ -1796,10 +1824,10 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
-"@faker-js/faker@6.0.0-alpha.3":
- version "6.0.0-alpha.3"
- resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-6.0.0-alpha.3.tgz#c6f85a44d7996c131ec16ce41d6be0f344b6ad15"
- integrity sha512-8B+7Jlwb9ogcoluzxB6AaSRZn2gnoewTA/WygAYhWNxkrFKjQL0TDXK6AW6uJlASMKl7qG/qbEVtpjLByuL0ZQ==
+"@faker-js/faker@6.0.0-alpha.5":
+ version "6.0.0-alpha.5"
+ resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-6.0.0-alpha.5.tgz#2c1ab022b3aed76d563b1510ba2b797ce141d25e"
+ integrity sha512-8Is/xFxNgricqmhQR/AJ4Vi0cKzSR7FcpE0ImG9dWciuSxUkyCiK+B5/hTQP8jrVbtgTjpFC1AaTCnALJOBDmw==
"@fortawesome/fontawesome-common-types@^0.2.36":
version "0.2.36"
@@ -1832,10 +1860,10 @@
resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.0-5.tgz#6251e6917198362fa56510eb256cfb6aa6d30a32"
integrity sha512-aNmBT4bOecrFsZTog1l6AJDQHPP3ocXV+WQ3Ogy8WZCqstB/ahfhH4CPu5i4N9Hw0MBKXqE+LX+NbUxcj8cVTw==
-"@github/hotkey@1.6.1":
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/@github/hotkey/-/hotkey-1.6.1.tgz#dd9ae23e3912cf456c156e7b935a12e9d0464e43"
- integrity sha512-vwxqOREwldnk5wD460LPB5wUVpiVECPupi+9fKx5TFXUiRLLz4sw8QbF1FqQsV+puwsjUBhzXPa4Crj/7MGPhw==
+"@github/hotkey@2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@github/hotkey/-/hotkey-2.0.0.tgz#5bc8c53afe2dd6757261b0f94f4ff68339db5a46"
+ integrity sha512-KRw695msYYRIeFWvADV2PJa58+88NvYmHl+RJZLAlCtvbzjlkYwDf6yLC0xSLGcoYB5bKHQzudqYgPgpYnVbLw==
"@hapi/hoek@^9.0.0":
version "9.2.0"
@@ -1863,43 +1891,43 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
-"@intlify/core-base@9.2.0-beta.28":
- version "9.2.0-beta.28"
- resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.2.0-beta.28.tgz#e8b1e4adfa7a262c6ed169ad7b15dbe2a173cb27"
- integrity sha512-p7iXwVQFyBmEo65KoqRCbT6Ig3OI6rnaS/zeMCKtp6Bjsbg35VGAaiN05Eyrq78BCh2Ir1S6nl+Cz3y00D0yoQ==
+"@intlify/core-base@9.2.0-beta.30":
+ version "9.2.0-beta.30"
+ resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.2.0-beta.30.tgz#82f86e3199661c18fbbd9b07ba58243909148384"
+ integrity sha512-tnOuI8gs4S7vv4WjG8oFL7vbZ4PM7Is/Ld3lRHQlBO7UjpnCVcQ94AgP/4F0cUPFn9JSPMQRN0aOOahW1BXvSA==
dependencies:
- "@intlify/devtools-if" "9.2.0-beta.28"
- "@intlify/message-compiler" "9.2.0-beta.28"
- "@intlify/shared" "9.2.0-beta.28"
- "@intlify/vue-devtools" "9.2.0-beta.28"
+ "@intlify/devtools-if" "9.2.0-beta.30"
+ "@intlify/message-compiler" "9.2.0-beta.30"
+ "@intlify/shared" "9.2.0-beta.30"
+ "@intlify/vue-devtools" "9.2.0-beta.30"
-"@intlify/devtools-if@9.2.0-beta.28":
- version "9.2.0-beta.28"
- resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.2.0-beta.28.tgz#daca7b4348a59109778558e7f5769e5f6b422d4e"
- integrity sha512-3RL38hDBRipipoYRl4Ggu98M4/XqDKm0jW8kcOWpuocB/aZBBEGzoQfeaq09Xa9SA46podjntBlYDAOGQyXqqg==
+"@intlify/devtools-if@9.2.0-beta.30":
+ version "9.2.0-beta.30"
+ resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.2.0-beta.30.tgz#98b52ef802abe6ad29fd3d8486b9c8454469cf4f"
+ integrity sha512-3OxGFi6ooya9DFqX/JsxFjrj9nGYcDoo4CRGYSDqnC+xv4bnsyB5ekmaYBiVZtagCdZdSUMxbTFphl1WbtgNLQ==
dependencies:
- "@intlify/shared" "9.2.0-beta.28"
+ "@intlify/shared" "9.2.0-beta.30"
-"@intlify/message-compiler@9.2.0-beta.28":
- version "9.2.0-beta.28"
- resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.2.0-beta.28.tgz#caae08ead8c6c02e2d0de39e1e8bdbbb99683c83"
- integrity sha512-NBH9fZyitN2cijGt8bmU1W7ZPdhKbgW01L1RxJKFJW0cRaCmknJq63Aif1Q6xcxKt9ZhPbvIKHgPGzg1nWMfeA==
+"@intlify/message-compiler@9.2.0-beta.30":
+ version "9.2.0-beta.30"
+ resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.2.0-beta.30.tgz#51955ebb388bc8774465e6e017a63bba1aeaed04"
+ integrity sha512-2kj/0nLIFrgiO86f9VifcUUcV8LdzXt4YYPIujx/LkTEQOuSFUo/bNiMaG1hyfiU/8mfq6tsaWKjoOZjeao1eQ==
dependencies:
- "@intlify/shared" "9.2.0-beta.28"
+ "@intlify/shared" "9.2.0-beta.30"
source-map "0.6.1"
-"@intlify/shared@9.2.0-beta.28":
- version "9.2.0-beta.28"
- resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.2.0-beta.28.tgz#50bd3f769bcab6f80e00027761b3397e268f9d02"
- integrity sha512-JBMcoj1D4kSAma7Vb0+d8z6lPLIn7hIdZJPxbU8bgeMMniwKLoIS/jGlEfrZihsB5+otckPeQp203z8skwVS0w==
+"@intlify/shared@9.2.0-beta.30":
+ version "9.2.0-beta.30"
+ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.2.0-beta.30.tgz#623a2fcffdb063d5aa940f7236ab28a083c004c8"
+ integrity sha512-E1WHRTIlUEse3d/6t1pAagSXRxmeVeNIhx5kT80dfpYxw8lOnCWV9wLve2bq9Fkv+3TD2I5j+CdN7jvSl3LdsA==
-"@intlify/vue-devtools@9.2.0-beta.28":
- version "9.2.0-beta.28"
- resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.2.0-beta.28.tgz#60113c137a380433961934045b9cf046c8773341"
- integrity sha512-kf9Gt64sjP1fJQHUlB3m/RFDeJBcrvRImcEl6g0BV13K/xyA9u9RGM89YpR16F5KKTXdhpkvroLWh2uo4pc6jg==
+"@intlify/vue-devtools@9.2.0-beta.30":
+ version "9.2.0-beta.30"
+ resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.2.0-beta.30.tgz#6ef377067f59e170ae33c7018c9b4a6758da87b7"
+ integrity sha512-hcqDfwP/oXVmVCaJ0RA+uv1WSCcd42/Y13S0bySmWZv2KamLcxiD7wYxp/MaECG/D4KZcSLkq/wDHTG7lhYf5Q==
dependencies:
- "@intlify/core-base" "9.2.0-beta.28"
- "@intlify/shared" "9.2.0-beta.28"
+ "@intlify/core-base" "9.2.0-beta.30"
+ "@intlify/shared" "9.2.0-beta.30"
"@jest/types@^25.5.0":
version "25.5.0"
@@ -1950,21 +1978,22 @@
call-me-maybe "^1.0.1"
glob-to-regexp "^0.3.0"
-"@netlify/build@^26.1.3":
- version "26.1.3"
- resolved "https://registry.yarnpkg.com/@netlify/build/-/build-26.1.3.tgz#136a85c93e83b3f3b41e2c6787cdbb6b787fa2e2"
- integrity sha512-DmuMkdIT5whw90vN4NV9RtBK+yh6sM2/mXalIQyT0XSGKhr77SjY3ZHgzE8JE0BHAklMN+xphQLTjvESk+L4Ng==
+"@netlify/build@^26.2.0":
+ version "26.2.0"
+ resolved "https://registry.yarnpkg.com/@netlify/build/-/build-26.2.0.tgz#14e934444cfd8fda3220ed42019464c89be643ba"
+ integrity sha512-2yNzdO0nCRIZ5TLB7WUlis2NTSonVjairWnd1s/Tt9SBF3L3Z+IU/xSiXgAwYZ/xe+tkziUltwrx9l8rxm2VGw==
dependencies:
"@bugsnag/js" "^7.0.0"
"@netlify/cache-utils" "^4.0.0"
"@netlify/config" "^17.0.0"
"@netlify/functions-utils" "^4.0.0"
"@netlify/git-utils" "^4.0.0"
- "@netlify/plugin-edge-handlers" "^3.0.3"
- "@netlify/plugins-list" "^6.2.1"
+ "@netlify/plugin-edge-handlers" "^3.0.4"
+ "@netlify/plugins-list" "^6.3.0"
"@netlify/run-utils" "^4.0.0"
- "@netlify/zip-it-and-ship-it" "^5.4.0"
+ "@netlify/zip-it-and-ship-it" "^5.5.0"
"@sindresorhus/slugify" "^1.1.0"
+ "@types/node" "^16.0.0"
ansi-escapes "^4.3.2"
chalk "^4.1.2"
clean-stack "^3.0.1"
@@ -2003,9 +2032,10 @@
supports-color "^8.0.0"
tmp-promise "^3.0.2"
ts-node "^10.4.0"
+ typescript "^4.5.4"
update-notifier "^5.0.0"
uuid "^8.0.0"
- yargs "^15.3.1"
+ yargs "^17.3.1"
"@netlify/cache-utils@^4.0.0":
version "4.0.0"
@@ -2054,15 +2084,15 @@
validate-npm-package-name "^3.0.0"
yargs "^15.3.0"
-"@netlify/config@^17.0.3":
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/@netlify/config/-/config-17.0.3.tgz#49d6c8076aead0a938f906fb8e538b5bfdfacf48"
- integrity sha512-u1x//PEqKvsExPQtRMG4x786mKcAV6ykwqiN102szLlr5Dojb7X5y+6vb9wi4JJ/KNiVURP7Wna/sMxGvFi/Tw==
+"@netlify/config@^17.0.6":
+ version "17.0.6"
+ resolved "https://registry.yarnpkg.com/@netlify/config/-/config-17.0.6.tgz#31131cbd9d54e1c6c4f8fc028b85d9e2b4aa915e"
+ integrity sha512-fX9C/FCsIq+8KfiHEo+PtAV7ZL8GxCzLYjAPQosdTg+CledhPtKnEvM1i20YAaJnpeV1UJ4l3tIMQ11zfTdH7g==
dependencies:
chalk "^4.1.2"
cron-parser "^4.1.0"
deepmerge "^4.2.2"
- dot-prop "^5.3.0"
+ dot-prop "^6.0.0"
execa "^5.1.1"
fast-safe-stringify "^2.0.7"
figures "^3.2.0"
@@ -2071,11 +2101,10 @@
indent-string "^4.0.0"
is-plain-obj "^3.0.0"
js-yaml "^4.0.0"
- make-dir "^3.1.0"
map-obj "^4.0.0"
- netlify "^10.1.1"
- netlify-headers-parser "^6.0.0"
- netlify-redirect-parser "^13.0.0"
+ netlify "^10.1.2"
+ netlify-headers-parser "^6.0.1"
+ netlify-redirect-parser "^13.0.1"
omit.js "^2.0.2"
p-locate "^5.0.0"
path-exists "^4.0.0"
@@ -2083,17 +2112,17 @@
toml "^3.0.0"
tomlify-j0.4 "^3.0.0"
validate-npm-package-name "^3.0.0"
- yargs "^15.3.0"
+ yargs "^17.3.1"
"@netlify/esbuild@^0.13.6":
version "0.13.6"
resolved "https://registry.yarnpkg.com/@netlify/esbuild/-/esbuild-0.13.6.tgz#ef0fda98604e708528ef0a57e853c50a6fc987f2"
integrity sha512-tiKmDcHM2riSVN79c0mJY/67EBDafXQAMitHuLiCDAMdtz3kfv+NqdVG5krgf5lWR8Uf8AeZrUW5Q9RP25REvw==
-"@netlify/framework-info@^8.0.1":
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/@netlify/framework-info/-/framework-info-8.0.1.tgz#2f10baf4017ad39f2c90dc90a3724aa3e797d2a3"
- integrity sha512-fEvnNMPTFrjHui43UVsljopAmkB4TdY3ewtL1oKhBeiIW+QjN9EexrmkosFJznjLPb/SzS9i3hkd24ae1lVPEg==
+"@netlify/framework-info@^9.0.0":
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/@netlify/framework-info/-/framework-info-9.0.0.tgz#7a89c88288afb3c5d7125d46e974092635348bb2"
+ integrity sha512-I4TzDRKmFaagcLCwmFeSr5tPsfT/fxBBaPpDv192fb468R4WbI0TVfTAqlTGJEmc6cHllXpgbVNCRvpeJAP7Fw==
dependencies:
ajv "^8.0.0"
filter-obj "^2.0.1"
@@ -2212,10 +2241,10 @@
resolved "https://registry.yarnpkg.com/@netlify/open-api/-/open-api-2.8.0.tgz#e59537ae9aa8342c2aa64952d42e5e089c8422f4"
integrity sha512-lfNB/QYDgaP07pwm/nWEaWPvRAAGyhxvJqNzvxMijc7A4uwquMjlbYve8yYyd0LJXPwgBpGobwiQj5RA76xzUQ==
-"@netlify/plugin-edge-handlers@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@netlify/plugin-edge-handlers/-/plugin-edge-handlers-3.0.3.tgz#5244be82bbbd2a0b1216e4753f1866379498863c"
- integrity sha512-Yj862RtTGXDgKEKJzfL9FNlonpxTGSVDEeRyt/Kpp7gKoW5z1Vr6h1T1Ymq7GKuFqFeGT6IKaxG6aJt24/rbTw==
+"@netlify/plugin-edge-handlers@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@netlify/plugin-edge-handlers/-/plugin-edge-handlers-3.0.4.tgz#0150f7a110d743ab41c463e1fe11c38b67e45b8c"
+ integrity sha512-w6PkvBSsmVblPBj1QVwUDJALuYeD8SyD5YMrTF5c9XrR7tjAWqtJQcw8bsuYqdDr8sEwRjUNyydPd/Zt5kEBLA==
dependencies:
"@babel/core" "^7.11.4"
"@babel/preset-env" "^7.11.5"
@@ -2233,10 +2262,10 @@
rollup-plugin-node-polyfills "^0.2.1"
rollup-plugin-terser "^7.0.2"
-"@netlify/plugins-list@^6.2.1":
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/@netlify/plugins-list/-/plugins-list-6.2.1.tgz#ae0c7decf9d202f2964020a297b4adbc8eb7ffb1"
- integrity sha512-/sXe4hjTFgKnRDFDiqU1qLvRCc+JtOqTLFf3aMNA6Xp7bSKGtTYJFOwTpPIUUOyLaDqbBdU3IOjemc6EtyC8qg==
+"@netlify/plugins-list@^6.3.0", "@netlify/plugins-list@^6.3.1":
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/@netlify/plugins-list/-/plugins-list-6.3.1.tgz#d63465a4eea6c5eb0398363e7d839a39afaefebf"
+ integrity sha512-6yAYBSELlg3oROgrFt1OCa5QwhINfkoBM2rv2Bpo7T5guwsCsEw7vI/O6nMLNDs6wGUyN43cjv2HTxaJBM/i4A==
"@netlify/routing-local-proxy-darwin-arm64@^0.34.1":
version "0.34.1"
@@ -2275,10 +2304,10 @@
dependencies:
execa "^5.1.1"
-"@netlify/zip-it-and-ship-it@5.4.0", "@netlify/zip-it-and-ship-it@^5.4.0":
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-5.4.0.tgz#c083895a7e5873747e51a4287ac1da3f2423ac48"
- integrity sha512-JVUr7S6GTHnPpwtD+g/+qzhKvhXwXoHGeisaHt1YYARRRd+XdvwFYo8yY2JzT7hM26uz99tpKwzDSfcL+WR1rQ==
+"@netlify/zip-it-and-ship-it@^5.3.0":
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-5.3.0.tgz#d19b8ffd86247025269aae86a88b5fea1ac5f451"
+ integrity sha512-ZaHjN0wTtsmJr2NIquHr16T6A3wquKB7PFLodcjlinS57DatSr4exb3V02QrxuDbTD36VS2kiYfiZ8ueTXH/3Q==
dependencies:
"@babel/parser" "^7.15.7"
"@netlify/esbuild" "^0.13.6"
@@ -2314,10 +2343,10 @@
unixify "^1.0.0"
yargs "^16.0.0"
-"@netlify/zip-it-and-ship-it@^5.3.0":
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-5.3.0.tgz#d19b8ffd86247025269aae86a88b5fea1ac5f451"
- integrity sha512-ZaHjN0wTtsmJr2NIquHr16T6A3wquKB7PFLodcjlinS57DatSr4exb3V02QrxuDbTD36VS2kiYfiZ8ueTXH/3Q==
+"@netlify/zip-it-and-ship-it@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-5.5.0.tgz#ec3c5321954966662d50ee095588af533326ef13"
+ integrity sha512-V7hVGr8xwdiPF7kmH+TSvekorjFI/OTYe34dlEvEmPhEuDG3LejRjy2XzQ0hW5TpFXvd4V+JRPH4jMh85Xt6qg==
dependencies:
"@babel/parser" "^7.15.7"
"@netlify/esbuild" "^0.13.6"
@@ -2336,7 +2365,6 @@
is-builtin-module "^3.1.0"
junk "^3.1.0"
locate-path "^6.0.0"
- make-dir "^3.1.0"
merge-options "^3.0.4"
minimatch "^3.0.4"
p-map "^4.0.0"
@@ -2558,79 +2586,79 @@
dependencies:
any-observable "^0.3.0"
-"@sentry/browser@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.16.1.tgz#4270ab0fbd1de425e339b3e7a364feb09f470a87"
- integrity sha512-F2I5RL7RTLQF9CccMrqt73GRdK3FdqaChED3RulGQX5lH6U3exHGFxwyZxSrY4x6FedfBFYlfXWWCJXpLnFkow==
+"@sentry/browser@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.4.tgz#c2711a12e89dab4abecd9a04716c07c86712fa5a"
+ integrity sha512-ezLZ/FP2ZJPPemzGKMiu8RCHvuRYfDYXbkQb9KhUbpylJokL4GSRZHy8EYkcHugnvAiov7p8cdj7QgOZQPDAgw==
dependencies:
- "@sentry/core" "6.16.1"
- "@sentry/types" "6.16.1"
- "@sentry/utils" "6.16.1"
+ "@sentry/core" "6.17.4"
+ "@sentry/types" "6.17.4"
+ "@sentry/utils" "6.17.4"
tslib "^1.9.3"
-"@sentry/core@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.16.1.tgz#d9f7a75f641acaddf21b6aafa7a32e142f68f17c"
- integrity sha512-UFI0264CPUc5cR1zJH+S2UPOANpm6dLJOnsvnIGTjsrwzR0h8Hdl6rC2R/GPq+WNbnipo9hkiIwDlqbqvIU5vw==
+"@sentry/core@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.4.tgz#ac23c2a9896b27fe4c532c2013c58c01f39adcdb"
+ integrity sha512-7QFgw+I9YK/X1Gie0c7phwT5pHMow66UCXHzDzHR2aK/0X3Lhn8OWlcGjIt5zmiBK/LHwNfQBNMskbktbYHgdA==
dependencies:
- "@sentry/hub" "6.16.1"
- "@sentry/minimal" "6.16.1"
- "@sentry/types" "6.16.1"
- "@sentry/utils" "6.16.1"
+ "@sentry/hub" "6.17.4"
+ "@sentry/minimal" "6.17.4"
+ "@sentry/types" "6.17.4"
+ "@sentry/utils" "6.17.4"
tslib "^1.9.3"
-"@sentry/hub@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.16.1.tgz#526e19db51f4412da8634734044c605b936a7b80"
- integrity sha512-4PGtg6AfpqMkreTpL7ymDeQ/U1uXv03bKUuFdtsSTn/FRf9TLS4JB0KuTZCxfp1IRgAA+iFg6B784dDkT8R9eg==
+"@sentry/hub@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.4.tgz#af4f5f745340d676be023dc3038690b557111f4d"
+ integrity sha512-6+EvPcrPCwUmayeieIpm1ZrRNWriqMHWZFyw+MzunFLgG8IH8G45cJU1zNnTY9Jwwg4sFIS9xrHy3AOkctnIGw==
dependencies:
- "@sentry/types" "6.16.1"
- "@sentry/utils" "6.16.1"
+ "@sentry/types" "6.17.4"
+ "@sentry/utils" "6.17.4"
tslib "^1.9.3"
-"@sentry/minimal@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.16.1.tgz#6a9506a92623d2ff1fc17d60989688323326772e"
- integrity sha512-dq+mI1EQIvUM+zJtGCVgH3/B3Sbx4hKlGf2Usovm9KoqWYA+QpfVBholYDe/H2RXgO7LFEefDLvOdHDkqeJoyA==
+"@sentry/minimal@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.4.tgz#6a35dbdb22a1c532d1eb7b4c0d9223618cb67ccd"
+ integrity sha512-p1A8UTtRt7bhV4ygu7yDNCannFr9E9dmqgeZWC7HrrTfygcnhNRFvTXTj92wEb0bFKuZr67wPSKnoXlkqkGxsw==
dependencies:
- "@sentry/hub" "6.16.1"
- "@sentry/types" "6.16.1"
+ "@sentry/hub" "6.17.4"
+ "@sentry/types" "6.17.4"
tslib "^1.9.3"
-"@sentry/tracing@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.16.1.tgz#32fba3e07748e9a955055afd559a65996acb7d71"
- integrity sha512-MPSbqXX59P+OEeST+U2V/8Hu/8QjpTUxTNeNyTHWIbbchdcMMjDbXTS3etCgajZR6Ro+DHElOz5cdSxH6IBGlA==
+"@sentry/tracing@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.4.tgz#17c2ab50d9e4cdf727b9b25e7f91ae3a9ea19437"
+ integrity sha512-UV6wWH/fqndts0k0cptsNtzD0h8KXqHInJSCGqlWDlygFRO16jwMKv0wfXgqsgc3cBGDlsl8C4l6COSwz9ROdg==
dependencies:
- "@sentry/hub" "6.16.1"
- "@sentry/minimal" "6.16.1"
- "@sentry/types" "6.16.1"
- "@sentry/utils" "6.16.1"
+ "@sentry/hub" "6.17.4"
+ "@sentry/minimal" "6.17.4"
+ "@sentry/types" "6.17.4"
+ "@sentry/utils" "6.17.4"
tslib "^1.9.3"
-"@sentry/types@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.16.1.tgz#4917607115b30315757c2cf84f80bac5100b8ac0"
- integrity sha512-Wh354g30UsJ5kYJbercektGX4ZMc9MHU++1NjeN2bTMnbofEcpUDWIiKeulZEY65IC1iU+1zRQQgtYO+/hgCUQ==
+"@sentry/types@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.4.tgz#36b78d7c4a6de19b2bbc631bb34893bcad30c0ba"
+ integrity sha512-RUyiXCKf61k2GIMP7FQX0naoSew4zLxe+UrtbjwVcWU4AFPZfH7tLNtTpVE85zAKbxsaiq3OD2FPtTZarHcwxQ==
-"@sentry/utils@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.16.1.tgz#1b9e14c2831b6e8b816f7021b9876133bf2be008"
- integrity sha512-7ngq/i4R8JZitJo9Sl8PDnjSbDehOxgr1vsoMmerIsyRZ651C/8B+jVkMhaAPgSdyJ0AlE3O7DKKTP1FXFw9qw==
+"@sentry/utils@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.4.tgz#4f109629d2e7f16c5595b4367445ef47bfe96b61"
+ integrity sha512-+ENzZbrlVL1JJ+FoK2EOS27nbA/yToeaJPFlyVOnbthUxVyN3TTi9Uzn9F05fIE/2BTkOEk89wPtgcHafgrD6A==
dependencies:
- "@sentry/types" "6.16.1"
+ "@sentry/types" "6.17.4"
tslib "^1.9.3"
-"@sentry/vue@6.16.1":
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-6.16.1.tgz#0baca237519e290fb770148e434a0efcebc5745b"
- integrity sha512-0WV6Qbkyq2YeYStZtULTS+YVimcSsoxYTFZVvs7fJUFQjWjO2bg2aT2ZoGXqYXT5WFmPLvJzWD1q22UtrxDMHQ==
+"@sentry/vue@6.17.4":
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-6.17.4.tgz#f77ad22fcc6b9d2efa5967d133dccc24d49163a8"
+ integrity sha512-b4TXpJqtkjOREIFQjISeEjslIl1f5VJqaOaNNkx1To7E27Es8LUVJ8HQ67677lV3ETgPKiTGguefmXp6AfiWtw==
dependencies:
- "@sentry/browser" "6.16.1"
- "@sentry/core" "6.16.1"
- "@sentry/minimal" "6.16.1"
- "@sentry/types" "6.16.1"
- "@sentry/utils" "6.16.1"
+ "@sentry/browser" "6.17.4"
+ "@sentry/core" "6.17.4"
+ "@sentry/minimal" "6.17.4"
+ "@sentry/types" "6.17.4"
+ "@sentry/utils" "6.17.4"
tslib "^1.9.3"
"@sideway/address@^4.1.0":
@@ -2913,6 +2941,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.6.tgz#cc61c8361c89e70c468cda464d1fa3dd7e5ebd62"
integrity sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==
+"@types/node@^16.0.0":
+ version "16.11.21"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.21.tgz#474d7589a30afcf5291f59bd49cca9ad171ffde4"
+ integrity sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==
+
"@types/node@^8.0.0":
version "8.10.66"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3"
@@ -2988,14 +3021,14 @@
dependencies:
"@types/node" "*"
-"@typescript-eslint/eslint-plugin@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz#e90afea96dff8620892ad216b0e4ccdf8ee32d3a"
- integrity sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ==
+"@typescript-eslint/eslint-plugin@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz#f8c1d59fc37bd6d9d11c97267fdfe722c4777152"
+ integrity sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==
dependencies:
- "@typescript-eslint/scope-manager" "5.10.0"
- "@typescript-eslint/type-utils" "5.10.0"
- "@typescript-eslint/utils" "5.10.0"
+ "@typescript-eslint/scope-manager" "5.10.2"
+ "@typescript-eslint/type-utils" "5.10.2"
+ "@typescript-eslint/utils" "5.10.2"
debug "^4.3.2"
functional-red-black-tree "^1.0.1"
ignore "^5.1.8"
@@ -3029,14 +3062,14 @@
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
-"@typescript-eslint/parser@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.0.tgz#8f59e036f5f1cffc178cacbd5ccdd02aeb96c91c"
- integrity sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw==
+"@typescript-eslint/parser@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.2.tgz#b6076d27cc5499ce3f2c625f5ccde946ecb7db9a"
+ integrity sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==
dependencies:
- "@typescript-eslint/scope-manager" "5.10.0"
- "@typescript-eslint/types" "5.10.0"
- "@typescript-eslint/typescript-estree" "5.10.0"
+ "@typescript-eslint/scope-manager" "5.10.2"
+ "@typescript-eslint/types" "5.10.2"
+ "@typescript-eslint/typescript-estree" "5.10.2"
debug "^4.3.2"
"@typescript-eslint/parser@^5.0.0":
@@ -3049,13 +3082,13 @@
"@typescript-eslint/typescript-estree" "5.8.0"
debug "^4.3.2"
-"@typescript-eslint/scope-manager@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz#bb5d872e8b9e36203908595507fbc4d3105329cb"
- integrity sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg==
+"@typescript-eslint/scope-manager@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz#92c0bc935ec00f3d8638cdffb3d0e70c9b879639"
+ integrity sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==
dependencies:
- "@typescript-eslint/types" "5.10.0"
- "@typescript-eslint/visitor-keys" "5.10.0"
+ "@typescript-eslint/types" "5.10.2"
+ "@typescript-eslint/visitor-keys" "5.10.2"
"@typescript-eslint/scope-manager@5.8.0":
version "5.8.0"
@@ -3065,12 +3098,12 @@
"@typescript-eslint/types" "5.8.0"
"@typescript-eslint/visitor-keys" "5.8.0"
-"@typescript-eslint/type-utils@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz#8524b9479c19c478347a7df216827e749e4a51e5"
- integrity sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ==
+"@typescript-eslint/type-utils@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz#ad5acdf98a7d2ab030bea81f17da457519101ceb"
+ integrity sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==
dependencies:
- "@typescript-eslint/utils" "5.10.0"
+ "@typescript-eslint/utils" "5.10.2"
debug "^4.3.2"
tsutils "^3.21.0"
@@ -3079,23 +3112,23 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72"
integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==
-"@typescript-eslint/types@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.0.tgz#beb3cb345076f5b088afe996d57bcd1dfddaa75c"
- integrity sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==
+"@typescript-eslint/types@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.2.tgz#604d15d795c4601fffba6ecb4587ff9fdec68ce8"
+ integrity sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==
"@typescript-eslint/types@5.8.0":
version "5.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.8.0.tgz#e7fa74ec35d9dbe3560d039d3d8734986c3971e0"
integrity sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==
-"@typescript-eslint/typescript-estree@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz#4be24a3dea0f930bb1397c46187d0efdd955a224"
- integrity sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==
+"@typescript-eslint/typescript-estree@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz#810906056cd3ddcb35aa333fdbbef3713b0fe4a7"
+ integrity sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==
dependencies:
- "@typescript-eslint/types" "5.10.0"
- "@typescript-eslint/visitor-keys" "5.10.0"
+ "@typescript-eslint/types" "5.10.2"
+ "@typescript-eslint/visitor-keys" "5.10.2"
debug "^4.3.2"
globby "^11.0.4"
is-glob "^4.0.3"
@@ -3128,15 +3161,15 @@
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/utils@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.0.tgz#c3d152a85da77c400e37281355561c72fb1b5a65"
- integrity sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg==
+"@typescript-eslint/utils@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.2.tgz#1fcd37547c32c648ab11aea7173ec30060ee87a8"
+ integrity sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==
dependencies:
"@types/json-schema" "^7.0.9"
- "@typescript-eslint/scope-manager" "5.10.0"
- "@typescript-eslint/types" "5.10.0"
- "@typescript-eslint/typescript-estree" "5.10.0"
+ "@typescript-eslint/scope-manager" "5.10.2"
+ "@typescript-eslint/types" "5.10.2"
+ "@typescript-eslint/typescript-estree" "5.10.2"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
@@ -3148,12 +3181,12 @@
"@typescript-eslint/types" "4.33.0"
eslint-visitor-keys "^2.0.0"
-"@typescript-eslint/visitor-keys@5.10.0":
- version "5.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz#770215497ad67cd15a572b52089991d5dfe06281"
- integrity sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==
+"@typescript-eslint/visitor-keys@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz#fdbf272d8e61c045d865bd6c8b41bea73d222f3d"
+ integrity sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==
dependencies:
- "@typescript-eslint/types" "5.10.0"
+ "@typescript-eslint/types" "5.10.2"
eslint-visitor-keys "^3.0.0"
"@typescript-eslint/visitor-keys@5.8.0":
@@ -3477,26 +3510,26 @@
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.29.tgz#07dac7051117236431d2f737d16932aa38bbb925"
integrity sha512-BjNpU8OK6Z0LVzGUppEk0CMYm/hKDnZfYdjSmPOs0N+TR1cLKJAkDwW8ASZUvaaSLEi6d3hVM7jnWnX+6yWnHw==
-"@vueuse/core@7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-7.5.4.tgz#c515c6795f1b8ab9a50e62e2f1aa75aac5f1ca14"
- integrity sha512-PKmyHN2lZuttGgKmsoMMqiSojSYYKraszilP0gpQIGcLt2YoLABaG3VFjdPs2tY6DM+HG3o70HuzOMEQCY8fqQ==
+"@vueuse/core@7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-7.5.5.tgz#c2f2a8783de0884acfb0be25e71ec3c6d1f9c42e"
+ integrity sha512-RBDqmIoGfak4h3xdXa/Av+ibkb8NY044wEy6+PG2FAWNaID8/FkqmSFjbxogrbmpSX1yZ1PBHrM8DUp/FrIpbg==
dependencies:
- "@vueuse/shared" "7.5.4"
+ "@vueuse/shared" "7.5.5"
vue-demi "*"
-"@vueuse/router@7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@vueuse/router/-/router-7.5.4.tgz#f21fd82c48256d024b634cc533febca4455b1a5c"
- integrity sha512-08+jZ694cYfddbliKaZugPD0KaVmgmaeIb/UUgRjnEm9Dnzi8ursBhtth6o8YxSGcIF1LWOsfOzaDDubjEY+uQ==
+"@vueuse/router@7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@vueuse/router/-/router-7.5.5.tgz#d2d55f2e7756f3035ce655655d0c3bb76b7cfe96"
+ integrity sha512-I7sPJeMH4gMEreJ8WkOfEakijTZgehVRqG9bqGBQVQM43QQTyY9X/x1G/3wpTTqU3s6lBbEJDVOa+HBpwwLahA==
dependencies:
- "@vueuse/shared" "7.5.4"
+ "@vueuse/shared" "7.5.5"
vue-demi "*"
-"@vueuse/shared@7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-7.5.4.tgz#4285e5c47fe5f2d608f115bf2aa26154f474e881"
- integrity sha512-750RnGUEgg1+K4jGVkv7M5UOStAa/IjAInV6BugyBOvRYL2l1lcIDUi4V/qIKTlhd2oUAByCEnlqIpFD2a3tfw==
+"@vueuse/shared@7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-7.5.5.tgz#0e5c16b848b4a19e5b9ee9199a997e1f6dd39679"
+ integrity sha512-mzzTsotHQRPnPAChy8iCv6ek/90CKYhAFyMRgNsMxpT0afZJkbMO/X0OaOu/1NuGbgb8UVjlsWKmCUgKTOF5hA==
dependencies:
vue-demi "*"
@@ -3721,6 +3754,11 @@ ansi-styles@^6.0.0, ansi-styles@^6.1.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3"
integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==
+ansi2html@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/ansi2html/-/ansi2html-0.0.1.tgz#bb8800461b440af00b91bf3d7366a5e0b8473ba8"
+ integrity sha1-u4gARhtECvALkb89c2al4LhHO6g=
+
any-observable@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
@@ -4464,10 +4502,10 @@ camelcase@^6.0.0, camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
-caniuse-lite@1.0.30001301:
- version "1.0.30001301"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz#ebc9086026534cab0dab99425d9c3b4425e5f450"
- integrity sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==
+caniuse-lite@1.0.30001307:
+ version "1.0.30001307"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz#27a67f13ebc4aa9c977e6b8256a11d5eafb30f27"
+ integrity sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==
caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001271, caniuse-lite@^1.0.30001274, caniuse-lite@^1.0.30001286:
version "1.0.30001286"
@@ -4479,25 +4517,21 @@ caniuse-lite@^1.0.30001297:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001297.tgz#ea7776ccc4992956582cae5b8fea127fbebde430"
integrity sha512-6bbIbowYG8vFs/Lk4hU9jFt7NknGDleVAciK916tp6ft1j+D//ZwwL6LbF1wXMQ32DMSjeuUV8suhh6dlmFjcA==
-caniuse-lite@^1.0.30001299:
- version "1.0.30001299"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz#d753bf6444ed401eb503cbbe17aa3e1451b5a68c"
- integrity sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==
-
caseless@^0.12.0, caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-chai@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49"
- integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==
+chai@^4.3.6:
+ version "4.3.6"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c"
+ integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==
dependencies:
assertion-error "^1.1.0"
check-error "^1.0.2"
deep-eql "^3.0.1"
get-func-name "^2.0.0"
+ loupe "^2.3.1"
pathval "^1.1.1"
type-detect "^4.0.5"
@@ -5124,6 +5158,13 @@ cron-parser@^4.1.0:
dependencies:
luxon "^1.26.0"
+cron-parser@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.2.1.tgz#b43205d05ccd5c93b097dae64f3bd811f5993af3"
+ integrity sha512-5sJBwDYyCp+0vU5b7POl8zLWfgV5fOHxlc45FWoWdHecGC7MQHCjx0CHivCMRnGFovghKhhyYM+Zm9DcY5qcHg==
+ dependencies:
+ luxon "^1.28.0"
+
cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -5152,10 +5193,10 @@ css-has-pseudo@^3.0.3:
dependencies:
postcss-selector-parser "^6.0.8"
-css-prefers-color-scheme@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.2.tgz#d5c03a980caab92d8beeee176a8795d331e0c727"
- integrity sha512-gv0KQBEM+q/XdoKyznovq3KW7ocO7k+FhPP+hQR1MenJdu0uPGS6IZa9PzlbqBeS6XcZJNAoqoFxlAUW461CrA==
+css-prefers-color-scheme@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349"
+ integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==
css-select@^4.1.3:
version "4.1.3"
@@ -5181,10 +5222,10 @@ css-what@^5.0.0:
resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe"
integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==
-cssdb@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-5.0.0.tgz#96db23e70dda3d03a32346de611f0e79fee68b7f"
- integrity sha512-Q7982SynYCtcLUBCPgUPFy2TZmDiFyimpdln8K2v4w2c07W4rXL7q5F1ksVAqOAQfxKyyUGCKSsioezKT5bU1Q==
+cssdb@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-6.1.0.tgz#75d63b1257e33af72ffdfec65f0f342189e4ab37"
+ integrity sha512-tZEDdN57Wlb5DRbOpJI9hSoP0t6DjtzSRswFoWo0hmJxfAXTBuDAcp2Oybj6BgQ+sErs9hXnWS1kzYKDKHanmg==
cssesc@^3.0.0:
version "3.0.0"
@@ -5208,15 +5249,10 @@ cyclist@^1.0.1:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-cypress-file-upload@5.0.8:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz#d8824cbeaab798e44be8009769f9a6c9daa1b4a1"
- integrity sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==
-
-cypress@9.3.1:
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.3.1.tgz#8116f52d49d6daf90a91e88f3eafd940234d2958"
- integrity sha512-BODdPesxX6bkVUnH8BVsV8I/jn57zQtO1FEOUTiuG2us3kslW7g0tcuwiny7CKCmJUZz8S/D587ppC+s58a+5Q==
+cypress@9.4.1:
+ version "9.4.1"
+ resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.4.1.tgz#1a4ba706435829c24b7edf350c2b059e05da9084"
+ integrity sha512-+JgMG9uT+QFx97JU9kOHE3jO3+0UdkQ9H1oCBiC7A74qme7Jkdy2sYDBCPjjGczutnWnGUTMRlwiNMP/Uq6LrQ==
dependencies:
"@cypress/request" "^2.88.10"
"@cypress/xvfb" "^1.2.4"
@@ -5255,10 +5291,10 @@ cypress@9.3.1:
pretty-bytes "^5.6.0"
proxy-from-env "1.0.0"
request-progress "^3.0.0"
+ semver "^7.3.2"
supports-color "^8.1.1"
tmp "~0.2.1"
untildify "^4.0.0"
- url "^0.11.0"
yauzl "^2.10.0"
dashdash@^1.12.0:
@@ -5682,10 +5718,10 @@ domhandler@^4.3.0:
dependencies:
domelementtype "^2.2.0"
-dompurify@2.3.4:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.4.tgz#1cf5cf0105ccb4debdf6db162525bd41e6ddacc6"
- integrity sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ==
+dompurify@2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.5.tgz#c83ed5a3ae5ce23e52efe654ea052ffb358dd7e3"
+ integrity sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==
domutils@^2.6.0, domutils@^2.8.0:
version "2.8.0"
@@ -5942,199 +5978,199 @@ esbuild-android-arm64@0.13.15:
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44"
integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==
-esbuild-android-arm64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.13.tgz#a5c8cb275dc6dcaf2390abb639791ffc4aa6ead1"
- integrity sha512-rhtwl+KJ3BzzXkK09N3/YbEF1i5WhriysJEStoeWNBzchx9hlmzyWmDGQQhu56HF78ua3JrVPyLOsdLGvtMvxQ==
+esbuild-android-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.18.tgz#027a1cd57e57c6219341e116c4ac41a9952d69d1"
+ integrity sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==
esbuild-darwin-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72"
integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==
-esbuild-darwin-64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.13.tgz#51ad2fbf8c9d73c1d40e5f9ab6122ffa95f5b494"
- integrity sha512-Fl47xIt5RMu50WIgMU93kwmUUJb+BPuL8R895n/aBNQqavS+KUMpLPoqKGABBV4myfx/fnAD/97X8Gt1C1YW6w==
+esbuild-darwin-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.18.tgz#a219c50aa98b5bc08d7ce3677f5bae4b8aa5101b"
+ integrity sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==
esbuild-darwin-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a"
integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==
-esbuild-darwin-arm64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.13.tgz#7ff177193cffbba518a59dfa4666a2fbb3345330"
- integrity sha512-UttqKRFXsWvuivcyAbFmo54vdkC9Me1ZYQNuoz/uBYDbkb2MgqKYG2+xoVKPBhLvhT0CKM5QGKD81flMH5BE6A==
+esbuild-darwin-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.18.tgz#eb2d17d33c5991c183c99843698182bb702eb592"
+ integrity sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==
esbuild-freebsd-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85"
integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==
-esbuild-freebsd-64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.13.tgz#648357ff0ca399ce65f7e7ebfff701cf105c70f3"
- integrity sha512-dlIhPFSp29Yq2TPh7Cm3/4M0uKjlfvOylHVNCRvRNiOvDbBol6/NZ3kLisczms+Yra0rxVapBPN1oMbSMuts9g==
+esbuild-freebsd-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.18.tgz#de06b6ce361bdf51fb66e59b220f67c4124cc728"
+ integrity sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==
esbuild-freebsd-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52"
integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==
-esbuild-freebsd-arm64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.13.tgz#7cb0016dd64fd116624c56dcfe58b27fac8ceaee"
- integrity sha512-bNOHLu7Oq6RwaAMnwPbJ40DVGPl9GlAOnfH/dFZ792f8hFEbopkbtVzo1SU1jjfY3TGLWOgqHNWxPxx1N7Au+g==
+esbuild-freebsd-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.18.tgz#59bb55cd6ac1b2b3c43536c067d8356f4ae7e310"
+ integrity sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==
esbuild-linux-32@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69"
integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==
-esbuild-linux-32@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.13.tgz#50b197f6831e824660ab80d011b656505a0aae32"
- integrity sha512-WzXyBx6zx16adGi7wPBvH2lRCBzYMcqnBRrJ8ciLIqYyruGvprZocX1nFWfiexjLcFxIElWnMNPX6LG7ULqyXA==
+esbuild-linux-32@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.18.tgz#ff68f7ec7c8b8c7dddab4d6e65f1a1d0ff3ab0b9"
+ integrity sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==
esbuild-linux-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3"
integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==
-esbuild-linux-64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.13.tgz#d2ee4d780e3cadd129ab8988c7c75ca4bd636f3a"
- integrity sha512-P6OFAfcoUvE7g9h/0UKm3qagvTovwqpCF1wbFLWe/BcCY8BS1bR/+SxUjCeKX2BcpIsg4/43ezHDE/ntg/iOpw==
+esbuild-linux-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.18.tgz#d4083d9833580090452a095cd2216100d86f3c7a"
+ integrity sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==
esbuild-linux-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1"
integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==
-esbuild-linux-arm64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.13.tgz#9151963c55cd42968c97f2fd354cd6ff9b3cb476"
- integrity sha512-k/uIvmkm4mc7vyMvJVwILgGxi2F+FuvLdmESIIWoHrnxEfEekC5AWpI/R6GQ2OMfp8snebSQLs8KL05QPnt1zA==
+esbuild-linux-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.18.tgz#8ce21e188ab9fcdb512f4ada9a637014c1294bec"
+ integrity sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==
esbuild-linux-arm@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe"
integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==
-esbuild-linux-arm@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.13.tgz#80e94cd8920607dc0addb97bac7ff5988d0fc28f"
- integrity sha512-4jmm0UySCg3Wi6FEBS7jpiPb1IyckI5um5kzYRwulHxPzkiokd6cgpcsTakR4/Y84UEicS8LnFAghHhXHZhbFg==
+esbuild-linux-arm@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.18.tgz#a5e1d684c451f379b1dfef7b5a2dcad84cce3f79"
+ integrity sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==
esbuild-linux-mips64le@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7"
integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==
-esbuild-linux-mips64le@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.13.tgz#8e7eeef567b0895f2ecc4d66b1f1e5a542f1ce5b"
- integrity sha512-vwYtgjQ1TRlUGL88km9wH9TjXsdZyZ/Xht1ASptg5XGRlqGquVjLGH11PfLLunoMdkQ0YTXR68b4l5gRfjVbyg==
+esbuild-linux-mips64le@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.18.tgz#c3890f178745a9c65bad64322be2b3611c240041"
+ integrity sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==
esbuild-linux-ppc64le@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2"
integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==
-esbuild-linux-ppc64le@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.13.tgz#ffbe9915a1d8080f9810a9c5938f453003c6de98"
- integrity sha512-0KqDSIkZaYugtcdpFCd3eQ38Fg6TzhxmOpkhDIKNTwD/W2RoXeiS+Z4y5yQ3oysb/ySDOxWkwNqTdXS4sz2LdQ==
+esbuild-linux-ppc64le@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.18.tgz#a355f515ca84839f5301f8ef745a2b329105e232"
+ integrity sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==
-esbuild-linux-s390x@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.13.tgz#e27274d12f198580892432115fc0de432431d33d"
- integrity sha512-bG20i7d0CN97fwPN9LaLe64E2IrI0fPZWEcoiff9hzzsvo/fQCx0YjMbPC2T3gqQ48QZRltdU9hQilTjHk3geQ==
+esbuild-linux-s390x@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.18.tgz#81721c22387912778c67495d0a34527f7a2cde66"
+ integrity sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==
esbuild-netbsd-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038"
integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==
-esbuild-netbsd-64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.13.tgz#78199fa57d5794e6ac6c33993dd0588fba22b353"
- integrity sha512-jz96PQb0ltqyqLggPpcRbWxzLvWHvrZBHZQyjcOzKRDqg1fR/R1y10b1Cuv84xoIbdAf+ceNUJkMN21FfR9G2g==
+esbuild-netbsd-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.18.tgz#eaee109d527a58b582f8fa933d9cadf8840758c2"
+ integrity sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==
esbuild-openbsd-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7"
integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==
-esbuild-openbsd-64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.13.tgz#5394336b602e1db15583bbef7d827a2b9648e373"
- integrity sha512-bp6zSo3kDCXKPM5MmVUg6DEpt+yXDx37iDGzNTn3Kf9xh6d0cdITxUC4Bx6S3Di79GVYubWs+wNjSRVFIJpryw==
+esbuild-openbsd-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.18.tgz#96a42615f5548529b7bb32d024bb9c6fb542778c"
+ integrity sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==
esbuild-sunos-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4"
integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==
-esbuild-sunos-64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.13.tgz#4afcddcece51f943149fa07274bd58f64e0913a8"
- integrity sha512-08Fne1T9QHYxUnu55sV9V4i/yECADOaI1zMGET2YUa8SRkib10i80hc89U7U/G02DxpN/KUJMWEGq2wKTn0QFQ==
+esbuild-sunos-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.18.tgz#869723d73a5f35ba2a4a6c043694d952bd4f831b"
+ integrity sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==
esbuild-windows-32@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7"
integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==
-esbuild-windows-32@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.13.tgz#cb06267f270bbf7ea6631cc78b8f6e3647975c44"
- integrity sha512-MW3BMIi9+fzTyDdljH0ftfT/qlD3t+aVzle1O+zZ2MgHRMQD20JwWgyqoJXhe6uDVyunrAUbcjH3qTIEZN3isg==
+esbuild-windows-32@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.18.tgz#197c8833ed0f6a82055ab63861777749d0ce95c0"
+ integrity sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==
esbuild-windows-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294"
integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==
-esbuild-windows-64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.13.tgz#3bbfba58e0185121280bd47ccd073b6c1849fd27"
- integrity sha512-d7+0N+EOgBKdi/nMxlQ8QA5xHBlpcLtSrYnHsA+Xp4yZk28dYfRw1+embsHf5uN5/1iPvrJwPrcpgDH1xyy4JA==
+esbuild-windows-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.18.tgz#569832a99d87fc931a081fe7761c100578275be0"
+ integrity sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==
esbuild-windows-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3"
integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==
-esbuild-windows-arm64@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.13.tgz#9203d40d915d809c50bc91af5a8373e5f5abfc4c"
- integrity sha512-oX5hmgXk9yNKbb5AxThzRQm/E9kiHyDll7JJeyeT1fuGENTifv33f0INCpjBQ+Ty5ChKc84++ZQTEBwLCA12Kw==
+esbuild-windows-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.18.tgz#c1991848fca7b051d1d036d0723406da9696105d"
+ integrity sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==
-esbuild@0.14.13:
- version "0.14.13"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.13.tgz#ce3fc7c45a6b8a40caad43daa39cdb9c1e84930a"
- integrity sha512-FIxvAdj3i2oHA6ex+E67bG7zlSTO+slt8kU2ogHDgGtrQLy2HNChv3PYjiFTYkt8hZbEAniZCXVeHn+FrHt7dA==
+esbuild@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.18.tgz#9c5f58c506ec9e0ec335d20bcb3f9dbd086d0648"
+ integrity sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==
optionalDependencies:
- esbuild-android-arm64 "0.14.13"
- esbuild-darwin-64 "0.14.13"
- esbuild-darwin-arm64 "0.14.13"
- esbuild-freebsd-64 "0.14.13"
- esbuild-freebsd-arm64 "0.14.13"
- esbuild-linux-32 "0.14.13"
- esbuild-linux-64 "0.14.13"
- esbuild-linux-arm "0.14.13"
- esbuild-linux-arm64 "0.14.13"
- esbuild-linux-mips64le "0.14.13"
- esbuild-linux-ppc64le "0.14.13"
- esbuild-linux-s390x "0.14.13"
- esbuild-netbsd-64 "0.14.13"
- esbuild-openbsd-64 "0.14.13"
- esbuild-sunos-64 "0.14.13"
- esbuild-windows-32 "0.14.13"
- esbuild-windows-64 "0.14.13"
- esbuild-windows-arm64 "0.14.13"
+ esbuild-android-arm64 "0.14.18"
+ esbuild-darwin-64 "0.14.18"
+ esbuild-darwin-arm64 "0.14.18"
+ esbuild-freebsd-64 "0.14.18"
+ esbuild-freebsd-arm64 "0.14.18"
+ esbuild-linux-32 "0.14.18"
+ esbuild-linux-64 "0.14.18"
+ esbuild-linux-arm "0.14.18"
+ esbuild-linux-arm64 "0.14.18"
+ esbuild-linux-mips64le "0.14.18"
+ esbuild-linux-ppc64le "0.14.18"
+ esbuild-linux-s390x "0.14.18"
+ esbuild-netbsd-64 "0.14.18"
+ esbuild-openbsd-64 "0.14.18"
+ esbuild-sunos-64 "0.14.18"
+ esbuild-windows-32 "0.14.18"
+ esbuild-windows-64 "0.14.18"
+ esbuild-windows-arm64 "0.14.18"
esbuild@^0.13.12:
version "0.13.15"
@@ -6201,10 +6237,10 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
-eslint-plugin-vue@8.3.0:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.3.0.tgz#2ae4f915ed3541a58c4a4c1145c1e60b86aa7e85"
- integrity sha512-IIuLHw4vQxGlHcoP2dG6t/2OVdQf2qoyAzEGAxreU1afZOHGA7y3TWq8I+r3ZA6Wjs6xpeUWGHlT31QGr9Rb5g==
+eslint-plugin-vue@8.4.1:
+ version "8.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.4.1.tgz#0a25493bbfee6baa21614e637e3fd390617c0bb4"
+ integrity sha512-nmWOhNmDx9TZ+yP9ZhezTkZUupSHsYA2TocRm+efPSXMOyFrVczVlaIuQcLBjCtI8CbkBiUQ3VcyQsjlIhDrhA==
dependencies:
eslint-utils "^3.0.0"
natural-compare "^1.4.0"
@@ -6262,10 +6298,10 @@ eslint-visitor-keys@^3.2.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1"
integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==
-eslint@8.7.0:
- version "8.7.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.7.0.tgz#22e036842ee5b7cf87b03fe237731675b4d3633c"
- integrity sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==
+eslint@8.8.0:
+ version "8.8.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.8.0.tgz#9762b49abad0cb4952539ffdb0a046392e571a2d"
+ integrity sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==
dependencies:
"@eslint/eslintrc" "^1.0.5"
"@humanwhocodes/config-array" "^0.9.2"
@@ -7368,10 +7404,20 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
-happy-dom@2.28.0:
- version "2.28.0"
- resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-2.28.0.tgz#dd07b34424ff370cac38373e48674a41d762ebf1"
- integrity sha512-J65003xw/uTXNczNzfTt3EJRODzWbFXVj+zqq0LNlE8tR6n26VYk4Apm0mlqUYO3THGVdKcVqSQ2P8Ss6DHSpQ==
+graphql@16.0.0:
+ version "16.0.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.0.0.tgz#5724f2767aefa543418e83671372117c39408c8f"
+ integrity sha512-n9NxoRfwnpYBZB/WJ7L166gyrShuZ8qYgVaX8oxVyELcJfAwkvwPt6WlYIl90WRlzqDjaNWvLmNOSnKs5llZWQ==
+
+graphql@^16.1.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.2.0.tgz#de3150e80f1fc009590b92a9d16ab1b46e12b656"
+ integrity sha512-MuQd7XXrdOcmfwuLwC2jNvx0n3rxIuNYOxUtiee5XOmfrWo613ar2U8pE7aHAKh8VwfpifubpD9IP+EdEAEOsA==
+
+happy-dom@2.31.1:
+ version "2.31.1"
+ resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-2.31.1.tgz#7bc30b61048839d1237e3adac413edb51da642f0"
+ integrity sha512-hbTLxMqyluLT06nRN4TDGLjjKni73tZlvLdF6qGfdv5U4EnrSYSwcZK3ESmv0LEEa5St7NY7e62rhISotH8O3Q==
dependencies:
he "^1.1.1"
node-fetch "^2.6.1"
@@ -8562,7 +8608,7 @@ kuler@^2.0.0:
resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
-lambda-local@^2.0.0:
+lambda-local@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/lambda-local/-/lambda-local-2.0.0.tgz#91714d612e6fa7c614e1373578f8a670315c4f33"
integrity sha512-5Z7ZEhqVYJSm3djoq7QLDkEk7Ao+jNYbARo3nk3wtjKpgCnEbzOuraxDPDWg7OlZ4JKcsRDP+wNLeORMdbF2ow==
@@ -8836,6 +8882,13 @@ logform@^2.2.0:
safe-stable-stringify "^1.1.0"
triple-beam "^1.3.0"
+loupe@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.1.tgz#a2e1192c9f452e4e85089766da10ac8288383947"
+ integrity sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==
+ dependencies:
+ get-func-name "^2.0.0"
+
lower-case@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
@@ -8865,7 +8918,7 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-luxon@^1.26.0:
+luxon@^1.26.0, luxon@^1.28.0:
version "1.28.0"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf"
integrity sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==
@@ -8936,7 +8989,12 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
-marked@4.0.10, marked@^4.0.10:
+marked@4.0.12:
+ version "4.0.12"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.12.tgz#2262a4e6fd1afd2f13557726238b69a48b982f7d"
+ integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==
+
+marked@^4.0.10:
version "4.0.10"
resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.10.tgz#423e295385cc0c3a70fa495e0df68b007b879423"
integrity sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==
@@ -9264,6 +9322,11 @@ nanoid@^3.1.32:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.32.tgz#8f96069e6239cc0a9ae8c0d3b41a3b4933a88c0a"
integrity sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==
+nanoid@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
+ integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
+
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -9305,23 +9368,24 @@ nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0:
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61"
integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==
-netlify-cli@8.8.2:
- version "8.8.2"
- resolved "https://registry.yarnpkg.com/netlify-cli/-/netlify-cli-8.8.2.tgz#b4e16541a0430b9e6a07b2bbccde9a2aa8ffe7b0"
- integrity sha512-Jw+VrDtp4/vSws87TnXbxIArWAaAPkLdh+OMbXirYSZKC3f21NcBya3VMC+Kag6ju7S87X/6eoDQe0v+ca/rgQ==
+netlify-cli@8.15.0:
+ version "8.15.0"
+ resolved "https://registry.yarnpkg.com/netlify-cli/-/netlify-cli-8.15.0.tgz#66ff7be0942904389de2334a08d2874c9b7dd283"
+ integrity sha512-J9taelJ24tZYIXlfkAU7/cALGSX2JudDFp+26/WPhrdzia/elcKk8EIJlcdB803T+Am64lKxkCgwTIP/lDZQMw==
dependencies:
- "@netlify/build" "^26.1.3"
- "@netlify/config" "^17.0.3"
- "@netlify/framework-info" "^8.0.1"
+ "@netlify/build" "^26.2.0"
+ "@netlify/config" "^17.0.6"
+ "@netlify/framework-info" "^9.0.0"
"@netlify/local-functions-proxy" "^1.1.1"
- "@netlify/plugin-edge-handlers" "^3.0.3"
- "@netlify/plugins-list" "^6.2.1"
+ "@netlify/plugin-edge-handlers" "^3.0.4"
+ "@netlify/plugins-list" "^6.3.1"
"@netlify/routing-local-proxy" "^0.34.1"
- "@netlify/zip-it-and-ship-it" "5.4.0"
+ "@netlify/zip-it-and-ship-it" "^5.5.0"
"@octokit/rest" "^18.0.0"
"@sindresorhus/slugify" "^1.1.0"
ansi-escapes "^5.0.0"
ansi-styles "^5.0.0"
+ ansi2html "^0.0.1"
ascii-table "0.0.9"
backoff "^2.5.0"
better-opn "^3.0.0"
@@ -9336,6 +9400,7 @@ netlify-cli@8.8.2:
content-type "^1.0.4"
cookie "^0.4.0"
copy-template-dir "^1.4.0"
+ cron-parser "^4.2.1"
debug "^4.1.1"
decache "^4.6.0"
del "^6.0.0"
@@ -9355,6 +9420,7 @@ netlify-cli@8.8.2:
gh-release-fetch "^3.0.0"
git-repo-info "^2.1.0"
gitconfiglocal "^2.1.0"
+ graphql "^16.1.0"
hasbin "^1.2.3"
hasha "^5.2.2"
http-proxy "^1.18.0"
@@ -9367,7 +9433,7 @@ netlify-cli@8.8.2:
is-wsl "^2.2.0"
isexe "^2.0.0"
jwt-decode "^3.0.0"
- lambda-local "^2.0.0"
+ lambda-local "2.0.0"
listr "^0.14.3"
locate-path "^6.0.0"
lodash "^4.17.20"
@@ -9376,9 +9442,10 @@ netlify-cli@8.8.2:
memoize-one "^6.0.0"
minimist "^1.2.5"
multiparty "^4.2.1"
- netlify "^10.1.1"
- netlify-headers-parser "^6.0.0"
- netlify-redirect-parser "^13.0.0"
+ netlify "^10.1.2"
+ netlify-headers-parser "^6.0.1"
+ netlify-onegraph-internal "0.0.16"
+ netlify-redirect-parser "^13.0.1"
netlify-redirector "^0.2.1"
node-fetch "^2.6.0"
node-version-alias "^1.0.1"
@@ -9425,6 +9492,26 @@ netlify-headers-parser@^6.0.0:
path-exists "^4.0.0"
toml "^3.0.0"
+netlify-headers-parser@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/netlify-headers-parser/-/netlify-headers-parser-6.0.1.tgz#b6f8becb0aacc767c42ffa3308df502ed6361a9e"
+ integrity sha512-4S1WBAe7M5QwB4OZ1rq4bw2hEwhP1G4nCk2OCD7zkTQgVoWUGzgjmn2vuTaDPuoj0s26sfTLD4Es+cPHN9m/+A==
+ dependencies:
+ escape-string-regexp "^4.0.0"
+ is-plain-obj "^3.0.0"
+ map-obj "^4.2.1"
+ path-exists "^4.0.0"
+ toml "^3.0.0"
+
+netlify-onegraph-internal@0.0.16:
+ version "0.0.16"
+ resolved "https://registry.yarnpkg.com/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.16.tgz#9e98b40b8cbfd312c8829a093e147d29f35dfde1"
+ integrity sha512-reQ/C7ztbYCDMXqFLSw0rBwOi866sqdBjagUs6Ug6LXDkCIGHBTjMX0iwNhEn7+/WzV4f1lJj66NhdjF5Q4/aQ==
+ dependencies:
+ graphql "16.0.0"
+ node-fetch "^2.6.0"
+ uuid "^8.3.2"
+
netlify-redirect-parser@^13.0.0:
version "13.0.0"
resolved "https://registry.yarnpkg.com/netlify-redirect-parser/-/netlify-redirect-parser-13.0.0.tgz#a7d66dc515a47efd1e7b57b441808c6f0fb9148b"
@@ -9435,6 +9522,16 @@ netlify-redirect-parser@^13.0.0:
path-exists "^4.0.0"
toml "^3.0.0"
+netlify-redirect-parser@^13.0.1:
+ version "13.0.1"
+ resolved "https://registry.yarnpkg.com/netlify-redirect-parser/-/netlify-redirect-parser-13.0.1.tgz#6442c23e0792989fdcd580af8569ff37b887e049"
+ integrity sha512-TnEafRUQajzpe9s/k5eHjpcIOPydumS2DCxaf+ltnNBSk4KGkphy5srvQdm16YADeTtcnsQ4NQjnjm7VAu+oHg==
+ dependencies:
+ filter-obj "^2.0.2"
+ is-plain-obj "^3.0.0"
+ path-exists "^4.0.0"
+ toml "^3.0.0"
+
netlify-redirector@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/netlify-redirector/-/netlify-redirector-0.2.1.tgz#efdb761ea2c52edb3ecb5f237db0e10861f2ff0e"
@@ -9453,10 +9550,10 @@ netlify@^10.0.0:
p-wait-for "^3.2.0"
qs "^6.9.6"
-netlify@^10.1.1:
- version "10.1.1"
- resolved "https://registry.yarnpkg.com/netlify/-/netlify-10.1.1.tgz#dbd8b978cc4615d3b7ffd4db26ccf469febd3c34"
- integrity sha512-aXW+R0rhTpLWK9aa51QETcPI+U2WuMUWA7wPr0thBCsMy/q4tsuAUC3f9OXYXcR3AzRkLOTwqmAfzWb+zKmqGg==
+netlify@^10.1.2:
+ version "10.1.2"
+ resolved "https://registry.yarnpkg.com/netlify/-/netlify-10.1.2.tgz#11ab524f5b0344d3d304d99811eb0b0676a19427"
+ integrity sha512-xm9WUbnHCLmoPjMiZ3AuH3sHIsCQ7Y/u+QobbU2RzL9deR3OQaK0E7nJDFhUraybtO8n/mjOWnDwxb0GKtBwFQ==
dependencies:
"@netlify/open-api" "^2.8.0"
lodash.camelcase "^4.3.0"
@@ -10171,6 +10268,13 @@ postcss-attribute-case-insensitive@^5.0.0:
dependencies:
postcss-selector-parser "^6.0.2"
+postcss-clamp@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-3.0.0.tgz#09cb1ad64243b46c9159ded5e8d3e8349150a09e"
+ integrity sha512-QENQMIF/Grw0qX0RzSPJjw+mAiGPIwG2AnsQDIoR/WJ5Q19zLB0NrZX8cH7CzzdDWEerTPGCdep7ItFaAdtItg==
+ dependencies:
+ postcss-value-parser "^4.1.0"
+
postcss-color-functional-notation@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.1.tgz#a25e9e1855e14d04319222a689f120b3240d39e0"
@@ -10197,10 +10301,10 @@ postcss-custom-media@^8.0.0:
resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz#1be6aff8be7dc9bf1fe014bde3b71b92bb4552f1"
integrity sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==
-postcss-custom-properties@^12.1.2:
- version "12.1.2"
- resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.2.tgz#066ecdb03779178ad60b8153755e79a2e70d17a9"
- integrity sha512-Zvd+k66PHBYYPiXtdjNVx2l54Y9kQC7K1eUHzBND97RW/ayNxfaPOW+9NL3r0nsVbX1asPLdkDj585Wg0NBJCA==
+postcss-custom-properties@^12.1.4:
+ version "12.1.4"
+ resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.4.tgz#e3d8a8000f28094453b836dff5132385f2862285"
+ integrity sha512-i6AytuTCoDLJkWN/MtAIGriJz3j7UX6bV7Z5t+KgFz+dwZS15/mlTJY1S0kRizlk6ba0V8u8hN50Fz5Nm7tdZw==
dependencies:
postcss-value-parser "^4.2.0"
@@ -10256,10 +10360,10 @@ postcss-gap-properties@^3.0.2:
resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.2.tgz#562fbf43a6a721565b3ca0e01008690991d2f726"
integrity sha512-EaMy/pbxtQnKDsnbEjdqlkCkROTQZzolcLKgIE+3b7EuJfJydH55cZeHfm+MtIezXRqhR80VKgaztO/vHq94Fw==
-postcss-image-set-function@^4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.4.tgz#ce91579ab2c1386d412ff5cd5e733c474b1f75ee"
- integrity sha512-BlEo9gSTj66lXjRNByvkMK9dEdEGFXRfGjKRi9fo8s0/P3oEk74cAoonl/utiM50E2OPVb/XSu+lWvdW4KtE/Q==
+postcss-image-set-function@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.5.tgz#8cb3a971507e2c00d5532658af62529c89f0ecc6"
+ integrity sha512-D4jXzlypkJ6BiSoUGazrRlR+GF3SED+BeiRDzOmuinDKdAn/Wuu8KtEGa5Z4pg4kxyeSMBywMgNt2+Yi/TZPPw==
dependencies:
postcss-value-parser "^4.2.0"
@@ -10292,6 +10396,11 @@ postcss-nesting@^10.1.2:
dependencies:
postcss-selector-parser "^6.0.8"
+postcss-opacity-percentage@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145"
+ integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==
+
postcss-overflow-shorthand@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.2.tgz#b4e9c89728cd1e4918173dfb95936b75f78d4148"
@@ -10309,24 +10418,28 @@ postcss-place@^7.0.3:
dependencies:
postcss-value-parser "^4.2.0"
-postcss-preset-env@7.2.3:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz#01b9b6eea0ff16c27a3d514f10105d56363428a6"
- integrity sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==
+postcss-preset-env@7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.3.1.tgz#f17c609cfab3432620b92888464f92b4dba5eca0"
+ integrity sha512-x7fNsJxfkY60P4FUNwhJUOfXBFfnObd2EcUYY97sXZ0XRLgmAE65es9EFIYHq1rAk7X3LMfbG+L9wYgkrNsq5Q==
dependencies:
+ "@csstools/postcss-font-format-keywords" "^1.0.0"
+ "@csstools/postcss-hwb-function" "^1.0.0"
+ "@csstools/postcss-is-pseudo-class" "^2.0.0"
+ "@csstools/postcss-normalize-display-values" "^1.0.0"
autoprefixer "^10.4.2"
browserslist "^4.19.1"
- caniuse-lite "^1.0.30001299"
css-blank-pseudo "^3.0.2"
css-has-pseudo "^3.0.3"
- css-prefers-color-scheme "^6.0.2"
- cssdb "^5.0.0"
+ css-prefers-color-scheme "^6.0.3"
+ cssdb "^6.1.0"
postcss-attribute-case-insensitive "^5.0.0"
+ postcss-clamp "^3.0.0"
postcss-color-functional-notation "^4.2.1"
postcss-color-hex-alpha "^8.0.2"
postcss-color-rebeccapurple "^7.0.2"
postcss-custom-media "^8.0.0"
- postcss-custom-properties "^12.1.2"
+ postcss-custom-properties "^12.1.4"
postcss-custom-selectors "^6.0.0"
postcss-dir-pseudo-class "^6.0.3"
postcss-double-position-gradients "^3.0.4"
@@ -10335,25 +10448,26 @@ postcss-preset-env@7.2.3:
postcss-focus-within "^5.0.3"
postcss-font-variant "^5.0.0"
postcss-gap-properties "^3.0.2"
- postcss-image-set-function "^4.0.4"
+ postcss-image-set-function "^4.0.5"
postcss-initial "^4.0.1"
postcss-lab-function "^4.0.3"
postcss-logical "^5.0.3"
postcss-media-minmax "^5.0.0"
postcss-nesting "^10.1.2"
+ postcss-opacity-percentage "^1.1.2"
postcss-overflow-shorthand "^3.0.2"
postcss-page-break "^3.0.4"
postcss-place "^7.0.3"
- postcss-pseudo-class-any-link "^7.0.2"
+ postcss-pseudo-class-any-link "^7.1.0"
postcss-replace-overflow-wrap "^4.0.0"
postcss-selector-not "^5.0.0"
-postcss-pseudo-class-any-link@^7.0.2:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.0.2.tgz#6284c2f970715c78fe992d2fac1130e9991585c9"
- integrity sha512-CG35J1COUH7OOBgpw5O+0koOLUd5N4vUGKUqSAuIe4GiuLHWU96Pqp+UPC8QITTd12zYAFx76pV7qWT/0Aj/TA==
+postcss-pseudo-class-any-link@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.0.tgz#88eb02b9529c5458ffebc68df3760534b6c9fbbf"
+ integrity sha512-l7sAkLmm3bYq8wt8/0r/dn6o9mVCPq7MOiNrb/Xi2zBlw/+w1V2jKFo/3IijKHfJ92SwDqkVLPwQfGO3xxUdAw==
dependencies:
- postcss-selector-parser "^6.0.8"
+ postcss-selector-parser "^6.0.9"
postcss-replace-overflow-wrap@^4.0.0:
version "4.0.0"
@@ -10383,7 +10497,15 @@ postcss-selector-parser@^6.0.8:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
-postcss-value-parser@^4.2.0:
+postcss-selector-parser@^6.0.9:
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f"
+ integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
@@ -10397,14 +10519,14 @@ postcss-values-parser@^2.0.1:
indexes-of "^1.0.1"
uniq "^1.0.1"
-postcss@8.4.5, postcss@^8.4.5:
- version "8.4.5"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
- integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
+postcss@8.4.6:
+ version "8.4.6"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1"
+ integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==
dependencies:
- nanoid "^3.1.30"
+ nanoid "^3.2.0"
picocolors "^1.0.0"
- source-map-js "^1.0.1"
+ source-map-js "^1.0.2"
postcss@^8.1.10:
version "8.3.7"
@@ -10424,6 +10546,15 @@ postcss@^8.1.7:
picocolors "^1.0.0"
source-map-js "^0.6.2"
+postcss@^8.4.5:
+ version "8.4.5"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
+ integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
+ dependencies:
+ nanoid "^3.1.30"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.1"
+
precinct@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/precinct/-/precinct-8.2.0.tgz#fb24ab42e51b84f2706b2bb81bb4814cdaf560c7"
@@ -10674,11 +10805,6 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
- integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
@@ -10729,11 +10855,6 @@ query-string@^5.0.1:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
- integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -11167,10 +11288,10 @@ rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2:
dependencies:
estree-walker "^0.6.1"
-rollup@2.66.0:
- version "2.66.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.66.0.tgz#ee529ea15a20485d579039637fec3050bad03bbb"
- integrity sha512-L6mKOkdyP8HK5kKJXaiWG7KZDumPJjuo1P+cfyHOJPNNTK3Moe7zCH5+fy7v8pVmHXtlxorzaBjvkBMB23s98g==
+rollup@2.67.0:
+ version "2.67.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.67.0.tgz#496de7e641dbe39f681c5a82419cb5013917d406"
+ integrity sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==
optionalDependencies:
fsevents "~2.3.2"
@@ -11260,10 +11381,10 @@ safe-stable-stringify@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sass@1.49.0:
- version "1.49.0"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.0.tgz#65ec1b1d9a6bc1bae8d2c9d4b392c13f5d32c078"
- integrity sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==
+sass@1.49.7:
+ version "1.49.7"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.7.tgz#22a86a50552b9b11f71404dfad1b9ff44c6b0c49"
+ integrity sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@@ -11558,6 +11679,11 @@ source-map-js@^0.6.2:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
source-map-resolve@^0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@@ -12197,10 +12323,10 @@ tinypool@^0.1.1:
resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.1.1.tgz#99eaf29d030feeca2da6c1d6b33f90fc18093bc7"
integrity sha512-sW2fQZ2BRb/GX5v55NkHiTrbMLx0eX0xNpP+VGhOe2f7Oo04+LeClDyM19zCE/WCy7jJ8kzIJ0Ojrxj3UhN9Sg==
-tinyspy@^0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-0.2.8.tgz#b821b3d43a7d5ae47bc575a5d8627e84fdf4e809"
- integrity sha512-4VXqQzzh9gC5uOLk77cLr9R3wqJq07xJlgM9IUdCNJCet139r+046ETKbU1x7mGs7B0k7eopyH5U6yflbBXNyA==
+tinyspy@^0.2.10:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-0.2.10.tgz#7f684504bda345620f7a6a8462c618ef3d055517"
+ integrity sha512-Qij6rGWCDjWIejxCXXVi6bNgvrYBp3PbqC4cBP/0fD6WHDOHCw09Zd13CsxrDqSR5PFq01WeqDws8t5lz5sH0A==
tmp-promise@^3.0.2:
version "3.0.3"
@@ -12473,7 +12599,7 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@4.5.5:
+typescript@4.5.5, typescript@^4.5.4:
version "4.5.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
@@ -12493,10 +12619,10 @@ typo-js@*:
resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.2.0.tgz#dbe58de3a6dcbbe260b78bf290ee761b008a28e8"
integrity sha512-dELuLBVa2jvWdU/CHTKi2L/POYaRupv942k+vRsFXsM17acXesQGAiGCio82RW7fvcr7bkuD/Zj8XpUh6aPC2A==
-ufo@0.7.9:
- version "0.7.9"
- resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.9.tgz#0268e3734b413c9ed6f3510201f42372821b875c"
- integrity sha512-6t9LrLk3FhqTS+GW3IqlITtfRB5JAVr5MMNjpBECfK827W+Vh5Ilw/LhTcHWrt6b3hkeBvcbjx4Ti7QVFzmcww==
+ufo@0.7.10:
+ version "0.7.10"
+ resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.10.tgz#278942c326e3da344b6b97637ed7f322e817261e"
+ integrity sha512-YTnDRlE1cIofRqOFN8ioAbz9qenDvkgVMSn0cnxvIDjM9sfEOMKB0ybMr+otSlCXMfQ/X35haYRoI7Nua82RrA==
uid-safe@2.1.5:
version "2.1.5"
@@ -12681,14 +12807,6 @@ url-to-options@^1.0.1:
resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=
-url@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
use@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
@@ -12783,17 +12901,17 @@ vite@2.7.13, vite@>=2.7.13:
optionalDependencies:
fsevents "~2.3.2"
-vitest@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.2.0.tgz#0270689a85f2aa3483fe44939f9602bd859deead"
- integrity sha512-+8c0UN/KKQe/ye0CCCqYuPbOEZl12Fhb5hVkCiL2DdBA4jOEgHDd35AZqdHVBXaAoTedS3MD5G/LhkOxCWB8pw==
+vitest@0.2.7:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.2.7.tgz#a4c1bb927a08c4e0e2d1daa340b4f3c0fec8feca"
+ integrity sha512-rKbmtADi6jsxYrwBrw4+sdYPLm3eiTmx7ojoZXQshScxnGWbHP18hWNa2NUEOYgowatkIiWPDVIyFB1kPnhokw==
dependencies:
"@types/chai" "^4.3.0"
"@types/chai-subset" "^1.3.3"
- chai "^4.3.4"
+ chai "^4.3.6"
local-pkg "^0.4.1"
tinypool "^0.1.1"
- tinyspy "^0.2.8"
+ tinyspy "^0.2.10"
vite ">=2.7.13"
void-elements@^3.1.0:
@@ -12986,14 +13104,14 @@ vue-flatpickr-component@9.0.5:
dependencies:
flatpickr "^4.6.9"
-vue-i18n@9.2.0-beta.28:
- version "9.2.0-beta.28"
- resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.2.0-beta.28.tgz#fcfa1d2deafb0914817fb338ed8e5deb54ba4e44"
- integrity sha512-Jn7DHA3JgOYaB6ahqmuW0wQ2zZx0ivastVDUul8325geyT0Q4PblJvXvfWHi2L0eb+YjWMZvf30MQYJ1FWDlfQ==
+vue-i18n@9.2.0-beta.30:
+ version "9.2.0-beta.30"
+ resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.2.0-beta.30.tgz#e58effd4e1dcd328c3c40ad945aaf914146237c6"
+ integrity sha512-5DqrgG9ffgC7j3RRAfViC0WUcdz0C3Ix1qq1AyQItpF7UkSB6iSJGEjBG6KdspbRQq/8t1YzDx4JRXbL05l6ow==
dependencies:
- "@intlify/core-base" "9.2.0-beta.28"
- "@intlify/shared" "9.2.0-beta.28"
- "@intlify/vue-devtools" "9.2.0-beta.28"
+ "@intlify/core-base" "9.2.0-beta.30"
+ "@intlify/shared" "9.2.0-beta.30"
+ "@intlify/vue-devtools" "9.2.0-beta.30"
"@vue/devtools-api" "^6.0.0-beta.13"
vue-resize@^2.0.0-alpha.1:
@@ -13475,7 +13593,7 @@ yargs-parser@^21.0.0:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55"
integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==
-yargs@^15.3.0, yargs@^15.3.1:
+yargs@^15.3.0:
version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==