diff --git a/components.d.ts b/components.d.ts index f7bba81..0bd4cd6 100644 --- a/components.d.ts +++ b/components.d.ts @@ -22,6 +22,7 @@ declare module '@vue/runtime-core' { NoteToolbar: typeof import('./src/components/Note/NoteToolbar.vue')['default'] SearchBar: typeof import('./src/components/Search/SearchBar.vue')['default'] SearchResult: typeof import('./src/components/Search/SearchResult.vue')['default'] + Settings: typeof import('./src/components/TopBar/Settings.vue')['default'] SideBar: typeof import('./src/components/SideBar.vue')['default'] SideBarMenu: typeof import('./src/components/SideBar/SideBarMenu.vue')['default'] SideBarMenuItem: typeof import('./src/components/SideBar/SideBarMenuItem.vue')['default'] diff --git a/package-lock.json b/package-lock.json index 6a9b151..03e2d94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,8 @@ "marked": "^4.3.0", "shortid": "^2.2.16", "turndown": "^7.1.2", - "vue": "^3.3.4" + "vue": "^3.3.4", + "vue-virtual-scroller": "^2.0.0-beta.8" }, "devDependencies": { "@rushstack/eslint-patch": "^1.2.0", @@ -8556,6 +8557,11 @@ "node": ">= 8" } }, + "node_modules/mitt": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz", + "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==" + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -12078,6 +12084,22 @@ "node": ">=4.0" } }, + "node_modules/vue-observe-visibility": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz", + "integrity": "sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/vue-template-compiler": { "version": "2.7.14", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", @@ -12105,6 +12127,19 @@ "typescript": "*" } }, + "node_modules/vue-virtual-scroller": { + "version": "2.0.0-beta.8", + "resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.8.tgz", + "integrity": "sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==", + "dependencies": { + "mitt": "^2.1.0", + "vue-observe-visibility": "^2.0.0-alpha.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -18921,6 +18956,11 @@ "yallist": "^4.0.0" } }, + "mitt": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz", + "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==" + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -21495,6 +21535,18 @@ } } }, + "vue-observe-visibility": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz", + "integrity": "sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==", + "requires": {} + }, + "vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "requires": {} + }, "vue-template-compiler": { "version": "2.7.14", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", @@ -21516,6 +21568,16 @@ "semver": "^7.3.8" } }, + "vue-virtual-scroller": { + "version": "2.0.0-beta.8", + "resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.8.tgz", + "integrity": "sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==", + "requires": { + "mitt": "^2.1.0", + "vue-observe-visibility": "^2.0.0-alpha.1", + "vue-resize": "^2.0.0-alpha.1" + } + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index a01f5a1..ca847fd 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "marked": "^4.3.0", "shortid": "^2.2.16", "turndown": "^7.1.2", - "vue": "^3.3.4" + "vue": "^3.3.4", + "vue-virtual-scroller": "^2.0.0-beta.8" }, "devDependencies": { "@rushstack/eslint-patch": "^1.2.0", diff --git a/src/components/Note/Autocomplete.vue b/src/components/Note/Autocomplete.vue index 2c55838..c6f78c2 100644 --- a/src/components/Note/Autocomplete.vue +++ b/src/components/Note/Autocomplete.vue @@ -10,9 +10,9 @@ const emit = defineEmits<{ }>() const results = computed(() => { - return ( - props.autocompleteText ? findNotesByByTitle(props.autocompleteText) : notes.value - ).filter((note) => note.id !== activeNote.value?.id).slice(10) + return (props.autocompleteText ? findNotesByByTitle(props.autocompleteText) : notes.value) + .filter((note) => note.id !== activeNote.value?.id) + .slice(0, 10) }) const activeResult = ref() @@ -32,15 +32,13 @@ const handleKeypress = (event: { [key: string]: number }) => { const keyCode = event.keyCode const keyCodes = { cycle: [38, 40], - confirm: [13], + confirm: [13] } if (keyCodes.cycle.includes(keyCode)) { const direction = keyCode === 38 ? -1 : 1 changeActiveResult(direction) } else if (keyCodes.confirm.includes(keyCode)) { - const contextedLink = activeResult.value - ? activeResult.value.title - : props.autocompleteText + const contextedLink = activeResult.value ? activeResult.value.title : props.autocompleteText emit('createLink', contextedLink) } } diff --git a/src/components/Note/NoteEditor.vue b/src/components/Note/NoteEditor.vue index 5e3ae81..2d8327e 100644 --- a/src/components/Note/NoteEditor.vue +++ b/src/components/Note/NoteEditor.vue @@ -176,7 +176,7 @@ const createLink = (link: string) => { :autocomplete-text="autocompleteText" :style="autocompleteStyle" @create-link="createLink" - class="absolute w-[250px]" + class="absolute w-[300px]" :class="autocompleteReverse && 'flex-col-reverse'" /> diff --git a/src/components/Search/SearchBar.vue b/src/components/Search/SearchBar.vue index 7185978..6f96efb 100644 --- a/src/components/Search/SearchBar.vue +++ b/src/components/Search/SearchBar.vue @@ -1,5 +1,6 @@ - + diff --git a/src/components/TopBar/Settings.vue b/src/components/TopBar/Settings.vue new file mode 100644 index 0000000..1b2b4af --- /dev/null +++ b/src/components/TopBar/Settings.vue @@ -0,0 +1,68 @@ + +