var t = `
|
` import Icon from './icon.js' export default { components: { Icon }, props: ['tabs', 'activeTabId', 'previousTabId', 'notes'], emits: ['tab-activate', 'tab-move', 'tab-close', 'note-close'], data() { return { dragIndex: null, dragOverEnabled: true, } }, methods: { onDragStart(index) { this.$emit('tab-activate', this.tabs[index].id) this.dragIndex = index; }, onDragOver(overIndex) { if (!this.dragOverEnabled) return; if (this.dragIndex === null || this.dragIndex === overIndex) return; this.$emit('tab-move', this.tabs[this.dragIndex].id, overIndex); this.dragIndex = overIndex; this.dragOverEnabled = false; setTimeout(() => { this.dragOverEnabled = true; }, 300); }, onDrop() { this.dragIndex = null; }, onDragEnd() { this.dragIndex = null; }, isActive(tabId) { return this.activeTabId == tabId; }, handleClose(tabId, tabType) { if (tabType === 'note') { this.$emit('note-close', tabId); return; } this.$emit('tab-close', tabId); }, handleKeyPress(event) { if (event.target.tagName !== 'BODY') return if (event.ctrlKey && event.code == 'Digit6') { this.previousTabId && this.$emit('tab-activate', this.previousTabId); event.preventDefault(); return; } if (event.ctrlKey && (event.code == 'KeyH' || event.code == 'KeyL')) { const index = this.tabs.findIndex(t => t.id === this.activeTabId); if (index === -1) return; const movement = event.code === 'KeyL' ? 1 : -1; const newIndex = (index + movement + this.tabs.length) % this.tabs.length; this.$emit('tab-activate', this.tabs[newIndex].id); event.preventDefault(); return; } }, }, computed: { getTabs() { return this.tabs.map(tab => { if (tab.type === 'note') { const note = this.notes.find(n => n.Filename === tab.id); return { id: tab.id, type: tab.type, title: note.Title, titleHover: `${note.Title} (${note.Filename})`, isModified: note.isModified || false, }; } }); }, }, mounted() { document.addEventListener('keydown', this.handleKeyPress); }, beforeDestroy() { document.removeEventListener('keydown', this.handleKeyPress); }, template: t }