From 89d58249f0b7034ab721ee5d89048ef6cc5c3af6 Mon Sep 17 00:00:00 2001 From: kevgliss Date: Wed, 29 Nov 2023 14:15:32 -0800 Subject: [PATCH] Adds Case Page, Signal Graph, and supporting components (#3974) * [WIP] - First pass at migrating case page to Vue 3 * Making some progress * Fill out sidebar, add custom popover search, style changes * Add fancy components for Menu, Tooltip, and Button group * Add pariticpant folder with participant AvatarGroup component * Add composables for Hotkey and EventListener * Add Atomics folder for micro components and Hotkey to start * Add TipTap, update packages * Remove PopoverMenu2 * Add Signal Graph components * Add PageHeader component * Add CasePriority popover * Add API route for pulling case participants * The rest of the changes * Add HoverCard and LockButton components * Remove ParticipantChips component * Address some linter findings * Remove console logs from graph generation * Remove dead/refactored components * Add refactored popover super components * Add escalate button * Add new tiptap component * Add eslint changes * Remove unused RichEditor component * Remove unused ProjectSelectChip component * Remove unused CaseTypeSelectChip * Remove unused CasePrioritySelectChip * Remove unused CaseSeveritySelectChip * Remove unused TagChips component * CaseToggleVisibility * Remove EntitiesTab import from CaseTabs * Remove unused imports from NewRawSignalViewer * More eslint issues, unused vars, defining types, and deprecated veutify props * Remove unused FancyButtonGroup component * Remove unused mapMutations import in Case Table * shadowed menu ref in AvatarGroup * Unused CaseDetailsTabs component * unused var assignment of props in HoverCard component * Use deprecated timeline in Case details page * Refactor components and move to respective folders * More clean up and addressing eslin errors, refactors in SearchPopover * Remove more unused components CustomMenuInput, EditableTextArea * More refactor, make resolution reason popover component * Make the resource buttons work, remove tooltips that are not setup, and remove future state code * Remove unused component and fix eslinet on drawer * Minor typos, unused imports, etc * Remove unused vars and ignore placeholder funcs unused * Addressing many of the comments from kevgliss * Moving and renaming various components * Generalize LockButton * Make the RichEditor emit instead of directly saving * use default slots so we can use styles in SearchPopover for list items * in addition to last commit, rename Fancy to D * Follow similar pattern for expand but use minimal, in get_case_participants view --------- Co-authored-by: Will Sheldon <114631109+wssheldon@users.noreply.github.com> --- src/dispatch/case/flows.py | 4 +- src/dispatch/case/service.py | 24 + src/dispatch/case/views.py | 41 +- .../static/dispatch/package-lock.json | 1043 ++++++++++++++++- src/dispatch/static/dispatch/package.json | 56 +- .../static/dispatch/src/atomics/Hotkey.vue | 26 + .../src/case/CaseAttributesDrawer.vue | 248 ++++ .../src/case/CaseResolutionSearchPopover.vue | 39 + .../src/case/CaseSignalInstanceTab.vue | 116 ++ .../src/case/CaseStatusSelectGroup.vue | 211 ++++ .../static/dispatch/src/case/CaseTabs.vue | 211 ++++ .../dispatch/src/case/CaseTimelineTabV1.vue | 101 ++ .../static/dispatch/src/case/EditSheet.vue | 6 +- .../dispatch/src/case/EscalateButton.vue | 21 + .../static/dispatch/src/case/GraphTab.vue | 212 ++++ .../static/dispatch/src/case/Page.vue | 143 +++ .../static/dispatch/src/case/PageHeader.vue | 110 ++ .../static/dispatch/src/case/Table.vue | 10 +- .../static/dispatch/src/case/TimelineTab.vue | 204 ++-- src/dispatch/static/dispatch/src/case/api.js | 6 + .../priority/CasePrioritySearchPopover.vue | 55 + .../severity/CaseSeveritySearchPopover.vue | 55 + .../src/case/type/CaseTypeSearchPopover.vue | 62 + .../static/dispatch/src/components/DMenu.vue | 53 + .../dispatch/src/components/DTooltip.vue | 71 ++ .../dispatch/src/components/LockButton.vue | 85 ++ .../dispatch/src/components/RichEditor.vue | 88 ++ .../dispatch/src/components/SearchPopover.vue | 139 +++ .../src/composables/useEventListener.ts | 27 + .../dispatch/src/composables/useHotkey.ts | 71 ++ .../participant/ParticipantAvatarGroup.vue | 197 ++++ .../participant/ParticipantSearchPopover.vue | 264 +++++ .../src/project/ProjectSearchPopover.vue | 57 + .../static/dispatch/src/router/config.js | 18 +- .../src/signal/NewRawSignalViewer.vue | 78 ++ .../src/signal/SignalInstanceNode.vue | 23 + .../static/dispatch/src/styles/index.scss | 49 +- 37 files changed, 4079 insertions(+), 145 deletions(-) create mode 100644 src/dispatch/static/dispatch/src/atomics/Hotkey.vue create mode 100644 src/dispatch/static/dispatch/src/case/CaseAttributesDrawer.vue create mode 100644 src/dispatch/static/dispatch/src/case/CaseResolutionSearchPopover.vue create mode 100644 src/dispatch/static/dispatch/src/case/CaseSignalInstanceTab.vue create mode 100644 src/dispatch/static/dispatch/src/case/CaseStatusSelectGroup.vue create mode 100644 src/dispatch/static/dispatch/src/case/CaseTabs.vue create mode 100644 src/dispatch/static/dispatch/src/case/CaseTimelineTabV1.vue create mode 100644 src/dispatch/static/dispatch/src/case/EscalateButton.vue create mode 100644 src/dispatch/static/dispatch/src/case/GraphTab.vue create mode 100644 src/dispatch/static/dispatch/src/case/Page.vue create mode 100644 src/dispatch/static/dispatch/src/case/PageHeader.vue create mode 100644 src/dispatch/static/dispatch/src/case/priority/CasePrioritySearchPopover.vue create mode 100644 src/dispatch/static/dispatch/src/case/severity/CaseSeveritySearchPopover.vue create mode 100644 src/dispatch/static/dispatch/src/case/type/CaseTypeSearchPopover.vue create mode 100644 src/dispatch/static/dispatch/src/components/DMenu.vue create mode 100644 src/dispatch/static/dispatch/src/components/DTooltip.vue create mode 100644 src/dispatch/static/dispatch/src/components/LockButton.vue create mode 100644 src/dispatch/static/dispatch/src/components/RichEditor.vue create mode 100644 src/dispatch/static/dispatch/src/components/SearchPopover.vue create mode 100644 src/dispatch/static/dispatch/src/composables/useEventListener.ts create mode 100644 src/dispatch/static/dispatch/src/composables/useHotkey.ts create mode 100644 src/dispatch/static/dispatch/src/participant/ParticipantAvatarGroup.vue create mode 100644 src/dispatch/static/dispatch/src/participant/ParticipantSearchPopover.vue create mode 100644 src/dispatch/static/dispatch/src/project/ProjectSearchPopover.vue create mode 100644 src/dispatch/static/dispatch/src/signal/NewRawSignalViewer.vue create mode 100644 src/dispatch/static/dispatch/src/signal/SignalInstanceNode.vue diff --git a/src/dispatch/case/flows.py b/src/dispatch/case/flows.py index 12a8ac4f32e1..cd330b40cf01 100644 --- a/src/dispatch/case/flows.py +++ b/src/dispatch/case/flows.py @@ -36,7 +36,7 @@ log = logging.getLogger(__name__) -def get_case_participants(case: Case, db_session: SessionLocal): +def get_case_participants_flow(case: Case, db_session: SessionLocal): """Get additional case participants based on priority, type and description.""" individual_contacts = [] team_contacts = [] @@ -187,7 +187,7 @@ def case_new_create_flow( ticket_flows.create_case_ticket(case=case, db_session=db_session) # we resolve participants - individual_participants, team_participants = get_case_participants( + individual_participants, team_participants = get_case_participants_flow( case=case, db_session=db_session ) diff --git a/src/dispatch/case/service.py b/src/dispatch/case/service.py index e46c16da28f5..1789f057438a 100644 --- a/src/dispatch/case/service.py +++ b/src/dispatch/case/service.py @@ -3,6 +3,7 @@ from datetime import datetime, timedelta from pydantic.error_wrappers import ErrorWrapper, ValidationError +from sqlalchemy.orm import Session, joinedload from typing import List, Optional from dispatch.auth.models import DispatchUser @@ -12,6 +13,7 @@ from dispatch.event import service as event_service from dispatch.exceptions import NotFoundError from dispatch.incident import service as incident_service +from dispatch.participant.models import Participant from dispatch.participant import flows as participant_flows from dispatch.participant_role.models import ParticipantRoleType from dispatch.project import service as project_service @@ -367,3 +369,25 @@ def delete(*, db_session, case_id: int): """Deletes an existing case.""" db_session.query(Case).filter(Case.id == case_id).delete() db_session.commit() + + +def get_participants( + *, db_session: Session, case_id: int, minimal: bool = False +) -> list[Participant] | None: + """Returns a list of participants based on the given case id.""" + if minimal: + case = ( + db_session.query(Case) + .join(Case.participants) # Use join for minimal + .filter(Case.id == case_id) + .first() + ) + else: + case = ( + db_session.query(Case) + .options(joinedload(Case.participants)) # Use joinedload for full objects + .filter(Case.id == case_id) + .first() + ) + + return case.participants if case else None diff --git a/src/dispatch/case/views.py b/src/dispatch/case/views.py index add6f8a5037a..70f09e1a9eba 100644 --- a/src/dispatch/case/views.py +++ b/src/dispatch/case/views.py @@ -23,7 +23,7 @@ from dispatch.models import OrganizationSlug, PrimaryKey from dispatch.incident.models import IncidentCreate, IncidentRead from dispatch.incident import service as incident_service -from dispatch.participant.models import ParticipantUpdate +from dispatch.participant.models import ParticipantUpdate, ParticipantRead, ParticipantReadMinimal from dispatch.individual.models import IndividualContactRead from .flows import ( @@ -35,10 +35,10 @@ case_triage_create_flow, case_update_flow, case_create_resources_flow, - get_case_participants, + get_case_participants_flow, ) from .models import Case, CaseCreate, CasePagination, CaseRead, CaseUpdate, CaseExpandedPagination -from .service import create, delete, get, update +from .service import create, delete, get, update, get_participants log = logging.getLogger(__name__) @@ -75,6 +75,39 @@ def get_case( return current_case +@router.get( + "/{case_id}/participants/minimal", + response_model=List[ParticipantReadMinimal], + summary="Retrieves a minimal list of case participants.", + dependencies=[Depends(PermissionsDependency([CaseViewPermission]))], +) +def get_case_participants_minimal( + case_id: PrimaryKey, + db_session: DbSession, +): + """Retrieves the details of a single case.""" + return get_participants(case_id=case_id, db_session=db_session) + + +@router.get( + "/{case_id}/participants", + summary="Retrieves a list of case participants.", + dependencies=[Depends(PermissionsDependency([CaseViewPermission]))], +) +def get_case_participants( + case_id: PrimaryKey, + db_session: DbSession, + minimal: bool = Query(default=False), +): + """Retrieves the details of a single case.""" + participants = get_participants(case_id=case_id, db_session=db_session, minimal=minimal) + + if minimal: + return [ParticipantReadMinimal.from_orm(p) for p in participants] + else: + return [ParticipantRead.from_orm(p) for p in participants] + + @router.get("", summary="Retrieves a list of cases.") def get_cases( common: CommonParameters, @@ -159,7 +192,7 @@ def create_case_resources( background_tasks: BackgroundTasks, ): """Creates resources for an existing case.""" - individual_participants, team_participants = get_case_participants( + individual_participants, team_participants = get_case_participants_flow( case=current_case, db_session=db_session ) background_tasks.add_task( diff --git a/src/dispatch/static/dispatch/package-lock.json b/src/dispatch/static/dispatch/package-lock.json index 14096015a12d..9856e4d8272b 100644 --- a/src/dispatch/static/dispatch/package-lock.json +++ b/src/dispatch/static/dispatch/package-lock.json @@ -9,31 +9,41 @@ "version": "0.1.0", "dependencies": { "@formkit/themes": "^1.2.2", - "@formkit/vue": "^1.2.2", - "@json2csv/plainjs": "^6.1.1", - "@json2csv/transforms": "^6.1.1", + "@formkit/vue": "^1.3.0", + "@json2csv/plainjs": "^6.1.3", + "@json2csv/transforms": "^6.1.3", "@mdi/font": "^5.9.55", "@monaco-editor/loader": "^1.4.0", "@openid/appauth": "^1.3.1", "@sentry/vue": "^6.19.7", + "@tanstack/vue-query": "^5.8.7", + "@tiptap/pm": "^2.1.12", + "@tiptap/starter-kit": "^2.1.12", + "@tiptap/vue-3": "^2.1.12", + "@vue-flow/background": "^1.2.0", + "@vue-flow/controls": "^1.1.0", + "@vue-flow/core": "^1.26.0", + "@vue-flow/minimap": "^1.2.0", "@vueuse/core": "^10.5.0", - "@vueuse/integrations": "^10.5.0", - "apexcharts": "^3.27.1", - "axios": "^0.21.1", - "date-fns": "^2.21.1", - "date-fns-tz": "^1.1.6", + "@vueuse/integrations": "^10.6.1", + "apexcharts": "^3.44.0", + "axios": "^0.21.4", + "d3-force": "^3.0.0", + "date-fns": "^2.30.0", + "date-fns-tz": "^1.3.8", "font-awesome": "^4.7.0", "json-to-ast": "^2.1.0", "jsonpath": "^1.1.1", "lodash": "^4.17.21", - "mjml": "^4.9.3", + "mjml": "^4.14.1", "moment-timezone": "^0.5.43", "monaco-editor": "0.43.0", "register-service-worker": "^1.7.2", - "roboto-fontface": "*", + "roboto-fontface": "^0.10.0", "sortablejs": "^1.15.0", + "swrv": "^1.0.4", "vue": "^3.3.4", - "vue-router": "^4.2.4", + "vue-router": "^4.2.5", "vue3-apexcharts": "^1.4.4", "vue3-markdown-it": "^1.0.10", "vuetify": "3.4.0", @@ -41,23 +51,23 @@ "vuex-map-fields": "^1.4.1" }, "devDependencies": { - "@playwright/test": "^1.30.0", - "@vitejs/plugin-vue": "^4.3.3", + "@playwright/test": "^1.40.0", + "@vitejs/plugin-vue": "^4.5.0", "babel-runtime": "^6.26.0", "cross-env": "^7.0.3", - "eslint": "^8.26.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-local-rules": "^2.0.0", + "eslint": "^8.54.0", + "eslint-config-prettier": "^8.10.0", + "eslint-plugin-local-rules": "^2.0.1", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-vue": "^9.7.0", - "eslint-plugin-vuetify": "^2.0.5", + "eslint-plugin-vue": "^9.18.1", + "eslint-plugin-vuetify": "^2.1.0", "husky": "^8.0.3", - "jquery": "^3.6.0", + "jquery": "^3.7.1", "jwt-decode": "^3.1.2", - "prettier": "^2.7.1", - "sass": "^1.66.1", - "unplugin-vue-components": "^0.22.9", - "vite": "^4.4.9", + "prettier": "^2.8.8", + "sass": "^1.69.5", + "unplugin-vue-components": "^0.22.12", + "vite": "^4.5.0", "vite-plugin-monaco-editor": "^1.1.0", "vite-plugin-vuetify": "^1.0.2" } @@ -749,6 +759,59 @@ "node": ">=16" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@remirror/core-constants": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-2.0.2.tgz", + "integrity": "sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==" + }, + "node_modules/@remirror/core-helpers": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@remirror/core-helpers/-/core-helpers-3.0.0.tgz", + "integrity": "sha512-tusEgQJIqg4qKj6HSBUFcyRnWnziw3neh4T9wOmsPGHFC3w9kl5KSrDb9UAgE8uX6y32FnS7vJ955mWOl3n50A==", + "dependencies": { + "@remirror/core-constants": "^2.0.2", + "@remirror/types": "^1.0.1", + "@types/object.omit": "^3.0.0", + "@types/object.pick": "^1.3.2", + "@types/throttle-debounce": "^2.1.0", + "case-anything": "^2.1.13", + "dash-get": "^1.0.2", + "deepmerge": "^4.3.1", + "fast-deep-equal": "^3.1.3", + "make-error": "^1.3.6", + "object.omit": "^3.0.0", + "object.pick": "^1.3.0", + "throttle-debounce": "^3.0.1" + } + }, + "node_modules/@remirror/types": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@remirror/types/-/types-1.0.1.tgz", + "integrity": "sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==", + "dependencies": { + "type-fest": "^2.19.0" + } + }, + "node_modules/@remirror/types/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@rollup/pluginutils": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", @@ -870,6 +933,421 @@ "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.12.tgz", "integrity": "sha512-+kmRpd+EeTFd3qNt1AoKphJqbAN26ZDsbiwqjBFeoAmdCyiUO19xMXPtYi9vovAj9a7OAJnvWtiHkwwjU2Fx4Q==" }, + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.8.4", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz", + "integrity": "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==", + "dependencies": { + "remove-accents": "0.4.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kentcdodds" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.8.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.8.7.tgz", + "integrity": "sha512-58xOSkxxZK4SGQ/uzX8MDZHLGZCkxlgkPxnfhxUOL2uchnNHyay2UVcR3mQNMgaMwH1e2l+0n+zfS7+UJ/MAJw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-query": { + "version": "5.8.7", + "resolved": "https://registry.npmjs.org/@tanstack/vue-query/-/vue-query-5.8.7.tgz", + "integrity": "sha512-riuXxrwKq1eGjKidPWLnyHdi5Kp4ji4kfoSoJdJm5hX4pcdgm74BvtIn6vJ7IPg0BQvpmaBJAb1BJyduAN1JkA==", + "dependencies": { + "@tanstack/match-sorter-utils": "^8.8.4", + "@tanstack/query-core": "5.8.7", + "@vue/devtools-api": "^6.5.0", + "vue-demi": "^0.14.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.2", + "vue": "^2.6.0 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@tanstack/vue-query/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@tiptap/core": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.1.12.tgz", + "integrity": "sha512-ZGc3xrBJA9KY8kln5AYTj8y+GDrKxi7u95xIl2eccrqTY5CQeRu6HRNM1yT4mAjuSaG9jmazyjGRlQuhyxCKxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.1.12.tgz", + "integrity": "sha512-Qb3YRlCfugx9pw7VgLTb+jY37OY4aBJeZnqHzx4QThSm13edNYjasokbX0nTwL1Up4NPTcY19JUeHt6fVaVVGg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.1.12.tgz", + "integrity": "sha512-AZGxIxcGU1/y6V2YEbKsq6BAibL8yQrbRm6EdcBnby41vj1WziewEKswhLGmZx5IKM2r2ldxld03KlfSIlKQZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.1.12.tgz", + "integrity": "sha512-gAGi21EQ4wvLmT7klgariAc2Hf+cIjaNU2NWze3ut6Ku9gUo5ZLqj1t9SKHmNf4d5JG63O8GxpErqpA7lHlRtw==", + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.12.tgz", + "integrity": "sha512-vtD8vWtNlmAZX8LYqt2yU9w3mU9rPCiHmbp4hDXJs2kBnI0Ju/qAyXFx6iJ3C3XyuMnMbJdDI9ee0spAvFz7cQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.1.12.tgz", + "integrity": "sha512-CRiRq5OTC1lFgSx6IMrECqmtb93a0ZZKujEnaRhzWliPBjLIi66va05f/P1vnV6/tHaC3yfXys6dxB5A4J8jxw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.1.12.tgz", + "integrity": "sha512-RXtSYCVsnk8D+K80uNZShClfZjvv1EgO42JlXLVGWQdIgaNyuOv/6I/Jdf+ZzhnpsBnHufW+6TJjwP5vJPSPHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.1.12.tgz", + "integrity": "sha512-0QNfAkCcFlB9O8cUNSwTSIQMV9TmoEhfEaLz/GvbjwEq4skXK3bU+OQX7Ih07waCDVXIGAZ7YAZogbvrn/WbOw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.12.tgz", + "integrity": "sha512-0tT/q8nL4NBCYPxr9T0Brck+RQbWuczm9nV0bnxgt0IiQXoRHutfPWdS7GA65PTuVRBS/3LOco30fbjFhkfz/A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.1.12.tgz", + "integrity": "sha512-uo0ydCJNg6AWwLT6cMUJYVChfvw2PY9ZfvKRhh9YJlGfM02jS4RUG/bJBts6R37f+a5FsOvAVwg8EvqPlNND1A==", + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.12.tgz", + "integrity": "sha512-zFYdZCqPgpwoB7whyuwpc8EYLYjUE5QYKb8vICvc+FraBUDM51ujYhFSgJC3rhs8EjI+8GcK8ShLbSMIn49YOQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.1.12.tgz", + "integrity": "sha512-nqKcAYGEOafg9D+2cy1E4gHNGuL12LerVa0eS2SQOb+PT8vSel9OTKU1RyZldsWSQJ5rq/w4uIjmLnrSR2w6Yw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.1.12.tgz", + "integrity": "sha512-MoANP3POAP68Ko9YXarfDKLM/kXtscgp6m+xRagPAghRNujVY88nK1qBMZ3JdvTVN6b/ATJhp8UdrZX96TLV2w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.1.12.tgz", + "integrity": "sha512-6b7UFVkvPjq3LVoCTrYZAczt5sQrQUaoDWAieVClVZoFLfjga2Fwjcfgcie8IjdPt8YO2hG/sar/c07i9vM0Sg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.12.tgz", + "integrity": "sha512-RRuoK4KxrXRrZNAjJW5rpaxjiP0FJIaqpi7nFbAua2oHXgsCsG8qbW2Y0WkbIoS8AJsvLZ3fNGsQ8gpdliuq3A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.1.12.tgz", + "integrity": "sha512-/XYrW4ZEWyqDvnXVKbgTXItpJOp2ycswk+fJ3vuexyolO6NSs0UuYC6X4f+FbHYL5VuWqVBv7EavGa+tB6sl3A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.1.12.tgz", + "integrity": "sha512-Gk7hBFofAPmNQ8+uw8w5QSsZOMEGf7KQXJnx5B022YAUJTYYxO3jYVuzp34Drk9p+zNNIcXD4kc7ff5+nFOTrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.12.tgz", + "integrity": "sha512-tF6VGl+D2avCgn9U/2YLJ8qVmV6sPE/iEzVAFZuOSe6L0Pj7SQw4K6AO640QBob/d8VrqqJFHCb6l10amJOnXA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.1.12.tgz", + "integrity": "sha512-hoH/uWPX+KKnNAZagudlsrr4Xu57nusGekkJWBcrb5MCDE91BS+DN2xifuhwXiTHxnwOMVFjluc0bPzQbkArsw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.1.12.tgz", + "integrity": "sha512-HlhrzIjYUT8oCH9nYzEL2QTTn8d1ECnVhKvzAe6x41xk31PjLMHTUy8aYjeQEkWZOWZ34tiTmslV1ce6R3Dt8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.1.12.tgz", + "integrity": "sha512-rCNUd505p/PXwU9Jgxo4ZJv4A3cIBAyAqlx/dtcY6cjztCQuXJhuQILPhjGhBTOLEEL4kW2wQtqzCmb7O8i2jg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" + } + }, + "node_modules/@tiptap/pm": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.1.12.tgz", + "integrity": "sha512-Q3MXXQABG4CZBesSp82yV84uhJh/W0Gag6KPm2HRWPimSFELM09Z9/5WK9RItAYE0aLhe4Krnyiczn9AAa1tQQ==", + "dependencies": { + "prosemirror-changeset": "^2.2.0", + "prosemirror-collab": "^1.3.0", + "prosemirror-commands": "^1.3.1", + "prosemirror-dropcursor": "^1.5.0", + "prosemirror-gapcursor": "^1.3.1", + "prosemirror-history": "^1.3.0", + "prosemirror-inputrules": "^1.2.0", + "prosemirror-keymap": "^1.2.0", + "prosemirror-markdown": "^1.10.1", + "prosemirror-menu": "^1.2.1", + "prosemirror-model": "^1.18.1", + "prosemirror-schema-basic": "^1.2.0", + "prosemirror-schema-list": "^1.2.2", + "prosemirror-state": "^1.4.1", + "prosemirror-tables": "^1.3.0", + "prosemirror-trailing-node": "^2.0.2", + "prosemirror-transform": "^1.7.0", + "prosemirror-view": "^1.28.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.1.12.tgz", + "integrity": "sha512-+RoP1rWV7rSCit2+3wl2bjvSRiePRJE/7YNKbvH8Faz/+AMO23AFegHoUFynR7U0ouGgYDljGkkj35e0asbSDA==", + "dependencies": { + "@tiptap/core": "^2.1.12", + "@tiptap/extension-blockquote": "^2.1.12", + "@tiptap/extension-bold": "^2.1.12", + "@tiptap/extension-bullet-list": "^2.1.12", + "@tiptap/extension-code": "^2.1.12", + "@tiptap/extension-code-block": "^2.1.12", + "@tiptap/extension-document": "^2.1.12", + "@tiptap/extension-dropcursor": "^2.1.12", + "@tiptap/extension-gapcursor": "^2.1.12", + "@tiptap/extension-hard-break": "^2.1.12", + "@tiptap/extension-heading": "^2.1.12", + "@tiptap/extension-history": "^2.1.12", + "@tiptap/extension-horizontal-rule": "^2.1.12", + "@tiptap/extension-italic": "^2.1.12", + "@tiptap/extension-list-item": "^2.1.12", + "@tiptap/extension-ordered-list": "^2.1.12", + "@tiptap/extension-paragraph": "^2.1.12", + "@tiptap/extension-strike": "^2.1.12", + "@tiptap/extension-text": "^2.1.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/vue-3": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@tiptap/vue-3/-/vue-3-2.1.12.tgz", + "integrity": "sha512-yAcfmWw/9jtIUbhb0uGQVI9NoPYgHRasX2sAGWnm9Al+0aJktgmQ3mLCifXfXfjyEbeMF0p2L6Ul8tO7eho7aQ==", + "dependencies": { + "@tiptap/extension-bubble-menu": "^2.1.12", + "@tiptap/extension-floating-menu": "^2.1.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0", + "vue": "^3.0.0" + } + }, "node_modules/@types/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.3.1.tgz", @@ -911,11 +1389,26 @@ "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==", "peer": true }, + "node_modules/@types/object.omit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/object.omit/-/object.omit-3.0.3.tgz", + "integrity": "sha512-xrq4bQTBGYY2cw+gV4PzoG2Lv3L0pjZ1uXStRRDQoATOYW1lCsFQHhQ+OkPhIcQoqLjAq7gYif7D14Qaa6Zbew==" + }, + "node_modules/@types/object.pick": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/object.pick/-/object.pick-1.3.4.tgz", + "integrity": "sha512-5PjwB0uP2XDp3nt5u5NJAG2DORHIRClPzWT/TTZhJ2Ekwe8M5bA9tvPdi9NO/n2uvu2/ictat8kgqvLfcIE1SA==" + }, "node_modules/@types/sizzle": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.5.tgz", "integrity": "sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ==" }, + "node_modules/@types/throttle-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", + "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==" + }, "node_modules/@types/web-bluetooth": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", @@ -940,6 +1433,48 @@ "vue": "^3.2.25" } }, + "node_modules/@vue-flow/background": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vue-flow/background/-/background-1.2.0.tgz", + "integrity": "sha512-ZqmYhOM/0aRmA5dA3KSHJNYpHnhmG2e6tzjmttoibo4JBI3KNbdyOX+OTlqt7Ic0LYUC6NWzRLAwv4gjJuc6Mg==", + "peerDependencies": { + "@vue-flow/core": "^1.12.2" + } + }, + "node_modules/@vue-flow/controls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vue-flow/controls/-/controls-1.1.0.tgz", + "integrity": "sha512-zxkQbzt0lUf/Nr0PMJAESUL+uih9Fs0+p9i2VoaLceT1Z2VDNTwK/62MmhrQkg429ggQ7aIBOxUToAWpSIVDkQ==", + "peerDependencies": { + "@vue-flow/core": "^1.12.2" + } + }, + "node_modules/@vue-flow/core": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@vue-flow/core/-/core-1.26.0.tgz", + "integrity": "sha512-/sHe8Cx+KapjP1PdYsJwMgtCXN1kD2/+8We5/VAoQlfiKj3h+WgRJ5BGnluMwSpoaFOTRPhBuynF4r3N4uXJDA==", + "dependencies": { + "@vueuse/core": "^10.5.0", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/@vue-flow/minimap": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vue-flow/minimap/-/minimap-1.2.0.tgz", + "integrity": "sha512-0Nk7iWjRC9hgyVGEVELKULXZsJtYmzic4CEAM6mIhB/lDVUsQsae9NXB6gYFN0OlBXx71pZHBnqqUYvLxUE0jg==", + "dependencies": { + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + }, + "peerDependencies": { + "@vue-flow/core": "^1.12.2" + } + }, "node_modules/@vue/compiler-core": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.9.tgz", @@ -1462,6 +1997,17 @@ "upper-case": "^1.1.1" } }, + "node_modules/case-anything": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.13.tgz", + "integrity": "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1640,6 +2186,11 @@ "dev": true, "hasInstallScript": true }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -1715,6 +2266,128 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dash-get": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dash-get/-/dash-get-1.0.2.tgz", + "integrity": "sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==" + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -1760,6 +2433,14 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1959,7 +2640,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -2290,8 +2970,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -2727,6 +3406,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2771,12 +3461,31 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", @@ -3053,6 +3762,11 @@ "semver": "bin/semver.js" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -3708,6 +4422,28 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "dependencies": { + "is-extendable": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3741,6 +4477,11 @@ "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -4055,6 +4796,217 @@ "node": ">=6.0.0" } }, + "node_modules/prosemirror-changeset": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz", + "integrity": "sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "dependencies": { + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.2.tgz", + "integrity": "sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz", + "integrity": "sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", + "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.2.tgz", + "integrity": "sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.3.0.tgz", + "integrity": "sha512-z1GRP2vhh5CihYMQYsJSa1cOwXb3SYxALXOIfAkX8nZserARtl9LiL+CEl+T+OFIsXc3mJIHKhbsmRzC0HDAXA==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.11.2.tgz", + "integrity": "sha512-Eu5g4WPiCdqDTGhdSsG9N6ZjACQRYrsAkrF9KYfdMaCmjIApH75aVncsWYOJvEk2i1B3i8jZppv3J/tnuHGiUQ==", + "dependencies": { + "markdown-it": "^13.0.1", + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-markdown/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/prosemirror-markdown/node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/prosemirror-markdown/node_modules/markdown-it": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz", + "integrity": "sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.19.3.tgz", + "integrity": "sha512-tgSnwN7BS7/UM0sSARcW+IQryx2vODKX4MI7xpqY2X+iaepJdKBPc7I4aACIsDV/LTaTjt12Z56MhDr9LsyuZQ==", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.2.tgz", + "integrity": "sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==", + "dependencies": { + "prosemirror-model": "^1.19.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.3.0.tgz", + "integrity": "sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.3.4.tgz", + "integrity": "sha512-z6uLSQ1BLC3rgbGwZmpfb+xkdvD7W/UOsURDfognZFYaTtc0gsk7u/t71Yijp2eLflVpffMk6X0u0+u+MMDvIw==", + "dependencies": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "node_modules/prosemirror-trailing-node": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.7.tgz", + "integrity": "sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==", + "dependencies": { + "@remirror/core-constants": "^2.0.2", + "@remirror/core-helpers": "^3.0.0", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.19.0", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.31.2" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.8.0.tgz", + "integrity": "sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==", + "dependencies": { + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.32.4", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.32.4.tgz", + "integrity": "sha512-WoT+ZYePp0WQvp5coABAysheZg9WttW3TSEUNgsfDQXmVOJlnjkbFbXicKPvWFLiC0ZjKt1ykbyoVKqhVnCiSQ==", + "dependencies": { + "prosemirror-model": "^1.16.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -4119,6 +5071,11 @@ "node": ">= 0.10" } }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4208,6 +5165,11 @@ "fsevents": "~2.3.2" } }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4468,12 +5430,36 @@ "node": ">= 0.8.0" } }, + "node_modules/swrv": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.0.4.tgz", + "integrity": "sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==", + "peerDependencies": { + "vue": ">=3.2.26 < 4" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/throttle-debounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/tippy.js": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", + "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "dependencies": { + "@popperjs/core": "^2.9.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4862,6 +5848,11 @@ "resolved": "https://registry.npmjs.org/vuex-map-fields/-/vuex-map-fields-1.4.1.tgz", "integrity": "sha512-jvIcpvoIPqwvJCOfRkPU9Rj0EbjWuk7GlNC5LXU9mCXVGZph6bWGHZssnoUzpLMxJtXQEHoVyZkKf7YQV+/bnQ==" }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + }, "node_modules/web-resource-inliner": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", diff --git a/src/dispatch/static/dispatch/package.json b/src/dispatch/static/dispatch/package.json index b2fb9ab6a58a..b4eaf2ca61f2 100644 --- a/src/dispatch/static/dispatch/package.json +++ b/src/dispatch/static/dispatch/package.json @@ -27,31 +27,41 @@ }, "dependencies": { "@formkit/themes": "^1.2.2", - "@formkit/vue": "^1.2.2", - "@json2csv/plainjs": "^6.1.1", - "@json2csv/transforms": "^6.1.1", + "@formkit/vue": "^1.3.0", + "@json2csv/plainjs": "^6.1.3", + "@json2csv/transforms": "^6.1.3", "@mdi/font": "^5.9.55", "@monaco-editor/loader": "^1.4.0", "@openid/appauth": "^1.3.1", "@sentry/vue": "^6.19.7", + "@tanstack/vue-query": "^5.8.7", + "@tiptap/pm": "^2.1.12", + "@tiptap/starter-kit": "^2.1.12", + "@tiptap/vue-3": "^2.1.12", + "@vue-flow/background": "^1.2.0", + "@vue-flow/controls": "^1.1.0", + "@vue-flow/core": "^1.26.0", + "@vue-flow/minimap": "^1.2.0", "@vueuse/core": "^10.5.0", - "@vueuse/integrations": "^10.5.0", - "apexcharts": "^3.27.1", - "axios": "^0.21.1", - "date-fns": "^2.21.1", - "date-fns-tz": "^1.1.6", + "@vueuse/integrations": "^10.6.1", + "apexcharts": "^3.44.0", + "axios": "^0.21.4", + "d3-force": "^3.0.0", + "date-fns": "^2.30.0", + "date-fns-tz": "^1.3.8", "font-awesome": "^4.7.0", "json-to-ast": "^2.1.0", "jsonpath": "^1.1.1", "lodash": "^4.17.21", - "mjml": "^4.9.3", + "mjml": "^4.14.1", "moment-timezone": "^0.5.43", "monaco-editor": "0.43.0", "register-service-worker": "^1.7.2", - "roboto-fontface": "*", + "roboto-fontface": "^0.10.0", "sortablejs": "^1.15.0", + "swrv": "^1.0.4", "vue": "^3.3.4", - "vue-router": "^4.2.4", + "vue-router": "^4.2.5", "vue3-apexcharts": "^1.4.4", "vue3-markdown-it": "^1.0.10", "vuetify": "3.4.0", @@ -59,23 +69,23 @@ "vuex-map-fields": "^1.4.1" }, "devDependencies": { - "@playwright/test": "^1.30.0", - "@vitejs/plugin-vue": "^4.3.3", + "@playwright/test": "^1.40.0", + "@vitejs/plugin-vue": "^4.5.0", "babel-runtime": "^6.26.0", "cross-env": "^7.0.3", - "eslint": "^8.26.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-local-rules": "^2.0.0", + "eslint": "^8.54.0", + "eslint-config-prettier": "^8.10.0", + "eslint-plugin-local-rules": "^2.0.1", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-vue": "^9.7.0", - "eslint-plugin-vuetify": "^2.0.5", + "eslint-plugin-vue": "^9.18.1", + "eslint-plugin-vuetify": "^2.1.0", "husky": "^8.0.3", - "jquery": "^3.6.0", + "jquery": "^3.7.1", "jwt-decode": "^3.1.2", - "prettier": "^2.7.1", - "sass": "^1.66.1", - "unplugin-vue-components": "^0.22.9", - "vite": "^4.4.9", + "prettier": "^2.8.8", + "sass": "^1.69.5", + "unplugin-vue-components": "^0.22.12", + "vite": "^4.5.0", "vite-plugin-monaco-editor": "^1.1.0", "vite-plugin-vuetify": "^1.0.2" } diff --git a/src/dispatch/static/dispatch/src/atomics/Hotkey.vue b/src/dispatch/static/dispatch/src/atomics/Hotkey.vue new file mode 100644 index 000000000000..148ffa19cf99 --- /dev/null +++ b/src/dispatch/static/dispatch/src/atomics/Hotkey.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/dispatch/static/dispatch/src/case/CaseAttributesDrawer.vue b/src/dispatch/static/dispatch/src/case/CaseAttributesDrawer.vue new file mode 100644 index 000000000000..5f96ec50bd2e --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/CaseAttributesDrawer.vue @@ -0,0 +1,248 @@ + + + + + diff --git a/src/dispatch/static/dispatch/src/case/CaseResolutionSearchPopover.vue b/src/dispatch/static/dispatch/src/case/CaseResolutionSearchPopover.vue new file mode 100644 index 000000000000..6ce3caa6b6b0 --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/CaseResolutionSearchPopover.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/dispatch/static/dispatch/src/case/CaseSignalInstanceTab.vue b/src/dispatch/static/dispatch/src/case/CaseSignalInstanceTab.vue new file mode 100644 index 000000000000..02f30efe1526 --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/CaseSignalInstanceTab.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/dispatch/static/dispatch/src/case/CaseStatusSelectGroup.vue b/src/dispatch/static/dispatch/src/case/CaseStatusSelectGroup.vue new file mode 100644 index 000000000000..9fc8b751c144 --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/CaseStatusSelectGroup.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/src/dispatch/static/dispatch/src/case/CaseTabs.vue b/src/dispatch/static/dispatch/src/case/CaseTabs.vue new file mode 100644 index 000000000000..1ab98ff5f943 --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/CaseTabs.vue @@ -0,0 +1,211 @@ + + + + diff --git a/src/dispatch/static/dispatch/src/case/CaseTimelineTabV1.vue b/src/dispatch/static/dispatch/src/case/CaseTimelineTabV1.vue new file mode 100644 index 000000000000..b93af58b28c0 --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/CaseTimelineTabV1.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/dispatch/static/dispatch/src/case/Page.vue b/src/dispatch/static/dispatch/src/case/Page.vue new file mode 100644 index 000000000000..88d00a69a206 --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/Page.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/dispatch/static/dispatch/src/case/PageHeader.vue b/src/dispatch/static/dispatch/src/case/PageHeader.vue new file mode 100644 index 000000000000..5e7e52905ffc --- /dev/null +++ b/src/dispatch/static/dispatch/src/case/PageHeader.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/dispatch/static/dispatch/src/case/Table.vue b/src/dispatch/static/dispatch/src/case/Table.vue index 210de9a92d37..056dbcc0d776 100644 --- a/src/dispatch/static/dispatch/src/case/Table.vue +++ b/src/dispatch/static/dispatch/src/case/Table.vue @@ -89,13 +89,21 @@ + + View + - View / Edit + Edit +import { ref, computed, watchEffect } from "vue" +import Util from "@/util" +import DMenu from "@/components/DMenu.vue" +import { useRoute } from "vue-router" +import CaseApi from "@/case/api" +import { formatRelativeDate } from "@/filters" + +const route = useRoute() + +// Define Props +const props = defineProps({ + modelValue: { + type: Array, + required: false, + default: () => [], + }, +}) + +const events = ref([]) + +watchEffect(async () => { + if (props.modelValue.length > 0) { + events.value = props.modelValue + } else if (route.params.id) { + const caseId = parseInt(route.params.id, 10) + const caseData = await CaseApi.get(caseId) + events.value = caseData.data.events + } +}) + +const showDetails = ref(false) +const exportLoading = ref(false) + +const sortedEvents = computed(() => { + return events.value.slice().sort((a, b) => new Date(a.started_at) - new Date(b.started_at)) +}) + +const exportToCSV = () => { + exportLoading.value = true + let items = sortedEvents.value + // Assuming you want to name the file based on some other data, adjust as needed + Util.exportCSV(items, "timeline-export.csv") + exportLoading.value = false +} + +const sourceIconMap = { + "Dispatch Plugin - Ticket Management": { + icon: "mdi-jira", + sourceName: "Dispatch", + }, + "Slack Plugin - Conversation Management": { + icon: "mdi-slack", + sourceName: "Dispatch", + }, + "Dispatch Core App": { + icon: "mdi-file-document", + sourceName: "Dispatch", + }, + "Dispatch Plugin - Participant Resolver": { + icon: "mdi-account-check", + sourceName: "Dispatch", + }, + // Add more mappings as needed... +} + +const handleSelection = (selection: string) => { + if (selection === "Export") { + exportToCSV() + } +} + +const descriptionMap = { + "Case created": "created a case", + "Case ticket created": "created a case ticket", + "Case participants resolved": "resolved case participants", + "Case conversation created": "started a case conversation", + "Conversation added to case": "added conversation to case", + "Case participants added to conversation.": "added case participants to conversation", + // Add more mappings as needed... +} + +const menu = ref(false) + +