From bc52095138bf0518da9e07fde2a471ef675f8474 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Fri, 6 Mar 2026 09:50:35 +0300 Subject: [PATCH] Add double-click to rename layers, extract useInlineRename composable - New useInlineRename composable: shared editing state, commit logic, and keyboard handling for inline rename across panels - LayerTree: double-click a layer name to rename inline - PagesPanel: refactored to use useInlineRename, removing duplicate code Closes #57 --- src/components/LayerTree.vue | 24 +++++++++++++++++ src/components/PagesPanel.vue | 39 +++++++--------------------- src/composables/use-inline-rename.ts | 33 +++++++++++++++++++++++ 3 files changed, 67 insertions(+), 29 deletions(-) create mode 100644 src/composables/use-inline-rename.ts diff --git a/src/components/LayerTree.vue b/src/components/LayerTree.vue index be5802505..cf21dbbbc 100644 --- a/src/components/LayerTree.vue +++ b/src/components/LayerTree.vue @@ -3,6 +3,8 @@ import { nextTick, onUnmounted, ref, watch } from 'vue' import { useEventListener } from '@vueuse/core' import { TreeRoot, TreeItem, ContextMenuRoot, ContextMenuTrigger, ContextMenuPortal } from 'reka-ui' +import { useInlineRename } from '@/composables/use-inline-rename' + import IconCircle from '~icons/lucide/circle' import IconComponent from '~icons/lucide/diamond' import IconComponentSet from '~icons/lucide/component' @@ -19,6 +21,7 @@ import { useEditorStore } from '@/stores/editor' import NodeContextMenuContent from './NodeContextMenuContent.vue' const store = useEditorStore() +const rename = useInlineRename((id, name) => store.renameNode(id, name)) interface LayerNode { id: string @@ -277,7 +280,27 @@ function updateDropTarget(ev: PointerEvent) { :data-level="item.level" > +
+ + + +