Add keybindings to component context menu. Add duplicate keybinding. Simplify pasting
This commit is contained in:
parent
5c216b7465
commit
a9a4b6ee44
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue