From 24b8915983de35bd80f0c027f7fe21a3c2c1ccdc Mon Sep 17 00:00:00 2001 From: Dominik Pschenitschni Date: Thu, 4 Aug 2022 22:05:41 +0200 Subject: [PATCH] wip: tiptap editor --- package.json | 27 ++ src/components/base/CodeBlock.vue | 46 +++ src/components/base/EditorToolbar.vue | 495 ++++++++++++++++++++++++++ src/components/base/TipTap.vue | 430 ++++++++++++++++++++++ src/components/input/AsyncEditor.ts | 5 +- src/components/misc/Icon.ts | 35 +- 6 files changed, 1036 insertions(+), 2 deletions(-) create mode 100644 src/components/base/CodeBlock.vue create mode 100644 src/components/base/EditorToolbar.vue create mode 100644 src/components/base/TipTap.vue diff --git a/package.json b/package.json index e48f74baa..d76e91d47 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,32 @@ "@fortawesome/free-solid-svg-icons": "6.4.2", "@fortawesome/vue-fontawesome": "3.0.3", "@github/hotkey": "2.1.1", + "@infectoone/vue-ganttastic": "2.1.2", + "@kyvg/vue3-notification": "2.6.1", + "@sentry/tracing": "7.19.0", + "@sentry/vue": "7.19.0", + "@tiptap/extension-character-count": "2.0.0-beta.202", + "@tiptap/extension-code-block-lowlight": "2.0.0-beta.202", + "@tiptap/extension-document": "2.0.0-beta.202", + "@tiptap/extension-highlight": "2.0.0-beta.202", + "@tiptap/extension-image": "2.0.0-beta.202", + "@tiptap/extension-link": "2.0.0-beta.202", + "@tiptap/extension-table": "2.0.0-beta.202", + "@tiptap/extension-table-cell": "2.0.0-beta.202", + "@tiptap/extension-table-header": "2.0.0-beta.202", + "@tiptap/extension-table-row": "2.0.0-beta.202", + "@tiptap/extension-task-item": "2.0.0-beta.202", + "@tiptap/extension-task-list": "2.0.0-beta.202", + "@tiptap/extension-typography": "2.0.0-beta.202", + "@tiptap/starter-kit": "2.0.0-beta.202", + "@tiptap/vue-3": "2.0.0-beta.202", + "@types/is-touch-device": "1.0.0", + "@types/lodash.clonedeep": "4.5.7", + "@types/sortablejs": "1.15.0", + "@vueuse/core": "9.5.0", + "@vueuse/router": "9.5.0", + "axios": "0.27.2", + "blurhash": "2.0.4", "@infectoone/vue-ganttastic": "2.2.0", "@intlify/unplugin-vue-i18n": "1.4.0", "@kyvg/vue3-notification": "3.0.2", @@ -74,6 +100,7 @@ "is-touch-device": "1.0.1", "klona": "2.0.6", "lodash.debounce": "4.0.8", + "lowlight": "2.7.0", "marked": "9.1.2", "pinia": "2.1.7", "register-service-worker": "1.7.2", diff --git a/src/components/base/CodeBlock.vue b/src/components/base/CodeBlock.vue new file mode 100644 index 000000000..59fc6a4d6 --- /dev/null +++ b/src/components/base/CodeBlock.vue @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/src/components/base/EditorToolbar.vue b/src/components/base/EditorToolbar.vue new file mode 100644 index 000000000..0fcef1004 --- /dev/null +++ b/src/components/base/EditorToolbar.vue @@ -0,0 +1,495 @@ + + + + + diff --git a/src/components/base/TipTap.vue b/src/components/base/TipTap.vue new file mode 100644 index 000000000..16fb42431 --- /dev/null +++ b/src/components/base/TipTap.vue @@ -0,0 +1,430 @@ + + + + + + + diff --git a/src/components/input/AsyncEditor.ts b/src/components/input/AsyncEditor.ts index f80015229..47ca08bdb 100644 --- a/src/components/input/AsyncEditor.ts +++ b/src/components/input/AsyncEditor.ts @@ -1,3 +1,6 @@ import {createAsyncComponent} from '@/helpers/createAsyncComponent' -export default createAsyncComponent(() => import('@/components/input/editor.vue')) \ No newline at end of file +// const Editor = createAsyncComponent(() => import('@/components/input/editor.vue')) +const TipTap = createAsyncComponent(() => import('@/components/base/TipTap.vue')) + +export default TipTap diff --git a/src/components/misc/Icon.ts b/src/components/misc/Icon.ts index b3ea6bdc3..b989b6943 100644 --- a/src/components/misc/Icon.ts +++ b/src/components/misc/Icon.ts @@ -6,6 +6,10 @@ import { faArchive, faArrowLeft, faArrowUpFromBracket, + faBold, + faItalic, + faStrikethrough, + faCode, faBars, faBell, faBolt, @@ -29,6 +33,7 @@ import { faFilter, faForward, faGripLines, + faHeader, faHistory, faImage, faKeyboard, @@ -59,14 +64,26 @@ import { faTimes, faTrashAlt, faUser, - faUsers, faX, + faUsers, + faQuoteRight, + faListUl, + faLink, + faUndo, + faRedo, + faUnlink, + faParagraph, + faTable, + faX, } from '@fortawesome/free-solid-svg-icons' import { faBellSlash, faCalendarAlt, + faCheckSquare, faClock, faComments, + faFileImage, faSave, + faSquareCheck, faStar, faSun, faTimesCircle, @@ -76,6 +93,21 @@ import {FontAwesomeIcon} from '@fortawesome/vue-fontawesome' import type {FontAwesomeIcon as FontAwesomeIconFixedTypes} from '@/types/vue-fontawesome' +library.add(faBold) +library.add(faUndo) +library.add(faRedo) +library.add(faItalic) +library.add(faLink) +library.add(faUnlink) +library.add(faParagraph) +library.add(faSquareCheck) +library.add(faTable) +library.add(faFileImage) +library.add(faCheckSquare) +library.add(faStrikethrough) +library.add(faCode) +library.add(faQuoteRight) +library.add(faListUl) library.add(faAlignLeft) library.add(faAngleRight) library.add(faArchive) @@ -107,6 +139,7 @@ library.add(faFillDrip) library.add(faFilter) library.add(faForward) library.add(faGripLines) +library.add(faHeader) library.add(faHistory) library.add(faImage) library.add(faKeyboard)