@infinite-canvas-tutorial/webcomponents
Version:
WebComponents UI implementation
147 lines (144 loc) • 5.04 kB
JavaScript
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;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TopNavbar = void 0;
const lit_1 = require("lit");
const decorators_js_1 = require("lit/decorators.js");
const context_1 = require("@lit/context");
const ecs_1 = require("@infinite-canvas-tutorial/ecs");
const context_2 = require("../context");
const event_1 = require("../event");
let TopNavbar = class TopNavbar extends lit_1.LitElement {
connectedCallback() {
super.connectedCallback();
// TODO: bind keyboard shortcuts
}
handleExport(event) {
const format = event.target.value;
let detail;
if (format === 'png' || format === 'jpeg') {
detail = new ecs_1.RasterScreenshotRequest();
detail.type =
`image/${format}`;
}
else {
detail = new ecs_1.VectorScreenshotRequest();
}
this.dispatchEvent(new CustomEvent(event_1.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 (0, lit_1.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>
`;
}
};
exports.TopNavbar = TopNavbar;
TopNavbar.styles = (0, lit_1.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([
(0, context_1.consume)({ context: context_2.appStateContext, subscribe: true })
], TopNavbar.prototype, "appState", void 0);
__decorate([
(0, context_1.consume)({ context: context_2.apiContext, subscribe: true })
], TopNavbar.prototype, "api", void 0);
exports.TopNavbar = TopNavbar = __decorate([
(0, decorators_js_1.customElement)('ic-spectrum-top-navbar')
], TopNavbar);
//# sourceMappingURL=top-navbar.js.map
;