UNPKG

@infinite-canvas-tutorial/webcomponents

Version:
144 lines (141 loc) 4.85 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { html, css, LitElement } from 'lit'; import { customElement } from 'lit/decorators.js'; import { consume } from '@lit/context'; import { VectorScreenshotRequest, RasterScreenshotRequest, } from '@infinite-canvas-tutorial/ecs'; import { apiContext, appStateContext } from '../context'; import { Event } from '../event'; let TopNavbar = class TopNavbar extends LitElement { connectedCallback() { super.connectedCallback(); // TODO: bind keyboard shortcuts } handleExport(event) { const format = event.target.value; let detail; if (format === 'png' || format === 'jpeg') { detail = new RasterScreenshotRequest(); detail.type = `image/${format}`; } else { detail = new VectorScreenshotRequest(); } this.dispatchEvent(new CustomEvent(Event.SCREENSHOT_REQUESTED, { detail, bubbles: true, composed: true, })); } handleEdit(event) { const value = event.target.value; if (value === 'undo') { this.handleUndo(); } else if (value === 'redo') { this.handleRedo(); } } handleUndo() { this.api.undo(); } handleRedo() { this.api.redo(); } render() { return html ` <sp-action-menu size="m" label="Main menu" quiet> <sp-tooltip slot="tooltip" self-managed placement="bottom"> Main menu </sp-tooltip> <sp-icon-show-menu slot="icon" size="l"></sp-icon-show-menu> <sp-menu-item> Edit <sp-menu slot="submenu" @change=${this.handleEdit}> <sp-menu-item value="undo"> Undo <kbd slot="value">⌘Z</kbd> </sp-menu-item> <sp-menu-item value="redo"> Redo <kbd slot="value">⇧⌘Z</kbd> </sp-menu-item> <sp-menu-divider></sp-menu-divider> <sp-menu-item value="cut"> Cut <kbd slot="value">⌘X</kbd> </sp-menu-item> <sp-menu-item value="copy"> Copy <kbd slot="value">⌘C</kbd> </sp-menu-item> <sp-menu-item value="paste"> Paste <kbd slot="value">⌘V</kbd> </sp-menu-item> </sp-menu> </sp-menu-item> <sp-menu-item> Export as... <sp-menu slot="submenu" @change=${this.handleExport}> <sp-menu-item value="svg">SVG</sp-menu-item> <sp-menu-item value="png">PNG</sp-menu-item> <sp-menu-item value="jpeg">JPEG</sp-menu-item> </sp-menu> </sp-menu-item> </sp-action-menu> <div class="actions"> <sp-action-button quiet @click=${this.handleUndo}> <sp-icon-undo slot="icon"></sp-icon-undo> <sp-tooltip self-managed placement="bottom"> Undo </sp-tooltip> </sp-action-button> <sp-action-button quiet @click=${this.handleRedo}> <sp-icon-redo slot="icon"></sp-icon-redo> <sp-tooltip self-managed placement="bottom"> Redo </sp-tooltip> </sp-action-button> <ic-spectrum-zoom-toolbar /> </div> `; } }; TopNavbar.styles = css ` :host { display: flex; justify-content: space-between; padding: var(--spectrum-global-dimension-size-100); background: var(--spectrum-gray-100); } sp-menu-item { width: 200px; } kbd { font-family: var(--spectrum-alias-body-text-font-family); letter-spacing: 0.1em; white-space: nowrap; border: none; padding: none; padding: 0; line-height: normal; } .actions { display: flex; align-items: center; gap: var(--spectrum-global-dimension-size-100); } `; __decorate([ consume({ context: appStateContext, subscribe: true }) ], TopNavbar.prototype, "appState", void 0); __decorate([ consume({ context: apiContext, subscribe: true }) ], TopNavbar.prototype, "api", void 0); TopNavbar = __decorate([ customElement('ic-spectrum-top-navbar') ], TopNavbar); export { TopNavbar }; //# sourceMappingURL=top-navbar.js.map