Browse Source

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

master
Andrew Kingston 4 years ago
parent
commit
5737e23dd6
  1. 13
      packages/bbui/src/Menu/Item.svelte
  2. 52
      packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/_components/navigation/ComponentDropdownMenu.svelte
  3. 4
      packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/_components/navigation/ComponentListPanel.svelte
  4. 6
      packages/client/src/components/preview/KeyboardManager.svelte

13
packages/bbui/src/Menu/Item.svelte

@ -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>

52
packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/_components/navigation/ComponentDropdownMenu.svelte

@ -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)}>
Cut
</MenuItem>
<MenuItem icon="Copy" on:click={() => storeComponentForCopy(false)}>
Copy
</MenuItem>
<MenuItem <MenuItem
icon="LayersBringToFront" icon="Cut"
on:click={() => pasteComponent("above")} keyBind="Ctrl+X"
disabled={noPaste} on:click={() => storeComponentForCopy(true)}
> >
Paste above Cut
</MenuItem> </MenuItem>
<MenuItem <MenuItem
icon="LayersSendToBack" icon="Copy"
on:click={() => pasteComponent("below")} keyBind="Ctrl+C"
disabled={noPaste} on:click={() => storeComponentForCopy(false)}
> >
Paste below Copy
</MenuItem> </MenuItem>
<MenuItem <MenuItem
icon="ShowOneLayer" icon="LayersSendToBack"
keyBind="Ctrl+V"
on:click={() => pasteComponent("inside")} on:click={() => pasteComponent("inside")}
disabled={noPaste || noChildrenAllowed} disabled={noPaste}
> >
Paste inside Paste
</MenuItem> </MenuItem>
</ActionMenu> </ActionMenu>
<ConfirmDialog <ConfirmDialog

4
packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/_components/navigation/ComponentListPanel.svelte

@ -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")

6
packages/client/src/components/preview/KeyboardManager.svelte

@ -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…
Cancel
Save