1
0
Fork 0
mirror of synced 2024-10-03 19:43:32 +13:00

Add keybindings to component context menu. Add duplicate keybinding. Simplify pasting

This commit is contained in:
Andrew Kingston 2022-07-29 12:10:53 +01:00
parent df759ac20a
commit 5737e23dd6
4 changed files with 55 additions and 22 deletions

View file

@ -8,6 +8,7 @@
export let icon = undefined export let icon = undefined
export let disabled = undefined export let disabled = undefined
export let noClose = false export let noClose = false
export let keyBind = undefined
const onClick = () => { const onClick = () => {
if (actionMenu && !noClose) { if (actionMenu && !noClose) {
@ -36,10 +37,22 @@
</svg> </svg>
{/if} {/if}
<span class="spectrum-Menu-itemLabel"><slot /></span> <span class="spectrum-Menu-itemLabel"><slot /></span>
{#if keyBind}
<div class="keyBind">
{keyBind}
</div>
{/if}
</li> </li>
<style> <style>
.spectrum-Menu-itemIcon { .spectrum-Menu-itemIcon {
align-self: center; align-self: center;
} }
.keyBind {
margin-left: var(--spacing-xl);
color: var(--spectrum-global-color-gray-600);
text-transform: uppercase;
font-size: 12px;
font-weight: 600;
}
</style> </style>

View file

@ -64,44 +64,54 @@
<div slot="control" class="icon"> <div slot="control" class="icon">
<Icon size="S" hoverable name="MoreSmallList" /> <Icon size="S" hoverable name="MoreSmallList" />
</div> </div>
<MenuItem icon="Delete" on:click={confirmDeleteDialog.show}> <MenuItem icon="Delete" keyBind="Del" on:click={confirmDeleteDialog.show}>
Delete Delete
</MenuItem> </MenuItem>
<MenuItem noClose icon="ChevronUp" on:click={moveUpComponent}> <MenuItem
noClose
icon="ChevronUp"
keyBind="Ctrl+↑"
on:click={moveUpComponent}
>
Move up Move up
</MenuItem> </MenuItem>
<MenuItem noClose icon="ChevronDown" on:click={moveDownComponent}> <MenuItem
noClose
icon="ChevronDown"
keyBind="Ctrl+↓"
on:click={moveDownComponent}
>
Move down Move down
</MenuItem> </MenuItem>
<MenuItem noClose icon="Duplicate" on:click={duplicateComponent}> <MenuItem
noClose
icon="Duplicate"
keyBind="Ctrl+D"
on:click={duplicateComponent}
>
Duplicate Duplicate
</MenuItem> </MenuItem>
<MenuItem icon="Cut" on:click={() => storeComponentForCopy(true)}> <MenuItem
icon="Cut"
keyBind="Ctrl+X"
on:click={() => storeComponentForCopy(true)}
>
Cut Cut
</MenuItem> </MenuItem>
<MenuItem icon="Copy" on:click={() => storeComponentForCopy(false)}> <MenuItem
icon="Copy"
keyBind="Ctrl+C"
on:click={() => storeComponentForCopy(false)}
>
Copy Copy
</MenuItem> </MenuItem>
<MenuItem
icon="LayersBringToFront"
on:click={() => pasteComponent("above")}
disabled={noPaste}
>
Paste above
</MenuItem>
<MenuItem <MenuItem
icon="LayersSendToBack" icon="LayersSendToBack"
on:click={() => pasteComponent("below")} keyBind="Ctrl+V"
on:click={() => pasteComponent("inside")}
disabled={noPaste} disabled={noPaste}
> >
Paste below Paste
</MenuItem>
<MenuItem
icon="ShowOneLayer"
on:click={() => pasteComponent("inside")}
disabled={noPaste || noChildrenAllowed}
>
Paste inside
</MenuItem> </MenuItem>
</ActionMenu> </ActionMenu>
<ConfirmDialog <ConfirmDialog

View file

@ -105,6 +105,10 @@
} else if (e.key === "v") { } else if (e.key === "v") {
e.preventDefault() e.preventDefault()
await store.actions.components.paste(component, "inside") await store.actions.components.paste(component, "inside")
} else if (e.key === "d") {
e.preventDefault()
await store.actions.components.copy(component)
await store.actions.components.paste(component, "below")
} else if (e.key === "Enter") { } else if (e.key === "Enter") {
e.preventDefault() e.preventDefault()
$goto("./new") $goto("./new")

View file

@ -24,6 +24,12 @@
if (["input", "textarea"].indexOf(activeTag) !== -1) { if (["input", "textarea"].indexOf(activeTag) !== -1) {
return return
} }
// Need to manually block certain keys from propagating to the browser
if (e.ctrlKey && e.key === "d") {
e.preventDefault()
}
builderStore.actions.keyDown(e.key, e.ctrlKey) builderStore.actions.keyDown(e.key, e.ctrlKey)
} }
</script> </script>