Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
306ae55
Remove type text from slot
benceruleanlu Jul 21, 2025
fe1b61d
Format slots LR
benceruleanlu Jul 21, 2025
b7144ea
Deduplicate slots/widgets
benceruleanlu Jul 21, 2025
a5e2b45
Remove node body padding
benceruleanlu Jul 24, 2025
3748cf4
Add slots
benceruleanlu Jul 24, 2025
d0f70bc
Make node body gap consistent
benceruleanlu Jul 24, 2025
b0c35bc
Add slots UI
benceruleanlu Jul 24, 2025
7190b78
Strict height
benceruleanlu Jul 24, 2025
e72d29c
Add larger hitbox
benceruleanlu Jul 24, 2025
ac8af8b
nit
benceruleanlu Jul 24, 2025
d02d7aa
Update constant name
benceruleanlu Jul 24, 2025
b35a621
Add feature flag sync
benceruleanlu Jul 24, 2025
d8e5a5c
Temp tsc silencer
benceruleanlu Jul 24, 2025
a29f65c
Add event forwarding
benceruleanlu Jul 24, 2025
4d8a1cf
Hide "No Widgets" text
benceruleanlu Jul 25, 2025
a94a1fc
pr-1.5 to widgets
benceruleanlu Jul 25, 2025
4ee0a39
Fix slot visibility on widgets
benceruleanlu Jul 25, 2025
f959de7
nit
benceruleanlu Jul 25, 2025
8541800
Rename to vueNodesMode
benceruleanlu Jul 25, 2025
a099d9b
Disable DOM widgets in vue nodes mode
benceruleanlu Jul 25, 2025
9ebc97a
Merge to feature flag
benceruleanlu Jul 25, 2025
f2260d3
Add node header boilerplate test
benceruleanlu Jul 25, 2025
bf89129
feat: Add escape key support to EditableText component
benceruleanlu Jul 25, 2025
94f4479
Add test fixtures
benceruleanlu Jul 26, 2025
e44c6ae
Add data-testid to vue node header
benceruleanlu Jul 26, 2025
38292bb
Add vue node header tests
benceruleanlu Jul 26, 2025
692c77d
Fix handles node collapsing test
benceruleanlu Jul 26, 2025
b3d8182
Fix MARKDOWN => TEXTAREA test
benceruleanlu Jul 28, 2025
cd84802
Comment out misleading test expectation
benceruleanlu Jul 28, 2025
432bc4e
Squashed 'src/lib/litegraph/' content from commit f0f8e9e66
benceruleanlu Jul 28, 2025
14571ba
Merge commit '432bc4eea4ac3daaff0fda20b8ce875324b90f41' as 'src/lib/l…
benceruleanlu Jul 28, 2025
b732ed7
Add TypeScript path mapping for local litegraph subtree
benceruleanlu Jul 28, 2025
12c10cc
Remove @comfyorg/litegraph npm dependency
benceruleanlu Jul 28, 2025
86e7a14
Exclude litegraph from ESLint
benceruleanlu Jul 28, 2025
38acfbe
Remove litegraph-specific config files
benceruleanlu Jul 28, 2025
dc80e48
Configure litegraph as TypeScript composite project
benceruleanlu Jul 29, 2025
ba8f186
Revert "Add TypeScript path mapping for local litegraph subtree"
benceruleanlu Jul 29, 2025
44d80e0
Fix TypeScript errors in Rectangle.ts
benceruleanlu Jul 29, 2025
d6025b5
Fix imports
benceruleanlu Jul 29, 2025
11174de
Remove unused eslint
benceruleanlu Jul 29, 2025
cb5e8de
Remove duplicated/unused packages
benceruleanlu Jul 29, 2025
1e307e8
Fix pre-commit hook to use vue-tsc --build
benceruleanlu Jul 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: Add escape key support to EditableText component
- Pressing escape now cancels editing and reverts to original value
- Added cancel event emission
- Prevents saving changes when escape is pressed
- Added comprehensive tests for escape key behavior

Co-Authored-By: Claude <[email protected]>
  • Loading branch information
benceruleanlu and claude committed Jul 25, 2025
commit bf891296b576440af49dac2a66187d209d3803d6
69 changes: 69 additions & 0 deletions src/components/common/EditableText.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,73 @@ describe('EditableText', () => {
// @ts-expect-error fixme ts strict error
expect(wrapper.emitted('edit')[0]).toEqual(['Test Text'])
})

it('cancels editing on escape key', async () => {
const wrapper = mountComponent({
modelValue: 'Original Text',
isEditing: true
})

// Change the input value
await wrapper.findComponent(InputText).setValue('Modified Text')

// Press escape
await wrapper.findComponent(InputText).trigger('keyup.escape')

// Should emit cancel event
expect(wrapper.emitted('cancel')).toBeTruthy()

// Should NOT emit edit event
expect(wrapper.emitted('edit')).toBeFalsy()

// Input value should be reset to original
expect(wrapper.findComponent(InputText).props()['modelValue']).toBe(
'Original Text'
)
})

it('does not save changes when escape is pressed and blur occurs', async () => {
const wrapper = mountComponent({
modelValue: 'Original Text',
isEditing: true
})

// Change the input value
await wrapper.findComponent(InputText).setValue('Modified Text')

// Press escape (which triggers blur internally)
await wrapper.findComponent(InputText).trigger('keyup.escape')

// Manually trigger blur to simulate the blur that happens after escape
await wrapper.findComponent(InputText).trigger('blur')

// Should emit cancel but not edit
expect(wrapper.emitted('cancel')).toBeTruthy()
expect(wrapper.emitted('edit')).toBeFalsy()
})

it('saves changes on enter but not on escape', async () => {
// Test Enter key saves changes
const enterWrapper = mountComponent({
modelValue: 'Original Text',
isEditing: true
})
await enterWrapper.findComponent(InputText).setValue('Saved Text')
await enterWrapper.findComponent(InputText).trigger('keyup.enter')
// Trigger blur that happens after enter
await enterWrapper.findComponent(InputText).trigger('blur')
expect(enterWrapper.emitted('edit')).toBeTruthy()
// @ts-expect-error fixme ts strict error
expect(enterWrapper.emitted('edit')[0]).toEqual(['Saved Text'])

// Test Escape key cancels changes with a fresh wrapper
const escapeWrapper = mountComponent({
modelValue: 'Original Text',
isEditing: true
})
await escapeWrapper.findComponent(InputText).setValue('Cancelled Text')
await escapeWrapper.findComponent(InputText).trigger('keyup.escape')
expect(escapeWrapper.emitted('cancel')).toBeTruthy()
expect(escapeWrapper.emitted('edit')).toBeFalsy()
})
})
30 changes: 26 additions & 4 deletions src/components/common/EditableText.vue
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@
fluid
:pt="{
root: {
onBlur: finishEditing
onBlur: finishEditing,
...inputAttrs
}
}"
@keyup.enter="blurInputElement"
@keyup.escape="cancelEditing"
@click.stop
/>
</div>
Expand All @@ -27,21 +29,41 @@
import InputText from 'primevue/inputtext'
import { nextTick, ref, watch } from 'vue'

const { modelValue, isEditing = false } = defineProps<{
const {
modelValue,
isEditing = false,
inputAttrs = {}
} = defineProps<{
modelValue: string
isEditing?: boolean
inputAttrs?: Record<string, any>
}>()

const emit = defineEmits(['update:modelValue', 'edit'])
const emit = defineEmits(['update:modelValue', 'edit', 'cancel'])
const inputValue = ref<string>(modelValue)
const inputRef = ref<InstanceType<typeof InputText> | undefined>()
const isCanceling = ref(false)

const blurInputElement = () => {
// @ts-expect-error - $el is an internal property of the InputText component
inputRef.value?.$el.blur()
}
const finishEditing = () => {
emit('edit', inputValue.value)
// Don't save if we're canceling
if (!isCanceling.value) {
emit('edit', inputValue.value)
}
isCanceling.value = false
}
const cancelEditing = () => {
// Set canceling flag to prevent blur from saving
isCanceling.value = true
// Reset to original value
inputValue.value = modelValue
// Emit cancel event
emit('cancel')
// Blur the input to exit edit mode
blurInputElement()
}
watch(
() => isEditing,
Expand Down