UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

140 lines 5.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const schema_1 = require("@sprucelabs/schema"); const terminal_kit_1 = __importDefault(require("terminal-kit")); const termKit_utility_1 = __importDefault(require("./termKit.utility")); const TkBaseWidget_1 = __importDefault(require("./TkBaseWidget")); const TkLayoutCellWidget_1 = __importDefault(require("./TkLayoutCellWidget")); const termKit = terminal_kit_1.default; class TkLayoutWidget extends TkBaseWidget_1.default { type = 'layout'; layout; constructor(options) { super(options); const mappedOptions = termKit_utility_1.default.mapWidgetOptionsToTermKitOptions(options); const { parent, ...layout } = mappedOptions; if (!parent) { throw new schema_1.SchemaError({ code: 'MISSING_PARAMETERS', parameters: ['parent'], }); } this.layout = new termKit.Layout({ parent, layout, }); this.layout.__widget = this; this.layout.off('parentResize', this.layout.onParentResize); this.calculateSizeLockDeltas(); } getChildren() { return this.layout.zChildren.map((child) => { return new TkLayoutCellWidget_1.default({ term: this.term, termKitElement: child, parent: this, }); }); } getTermKitElement() { return this.layout; } getFrame() { return { left: this.layout.computed.xmin, top: this.layout.computed.ymin, width: this.layout.computed.width, height: this.layout.computed.height, }; } async destroy() { this.layout.destroy(); } setFrame(frame) { const calculated = termKit_utility_1.default.buildFrame(frame, this.parent); const def = this.layout.layoutDef; delete def.height; delete def.heightPercent; this.layout.layoutDef.height = calculated.height; this.handleResize(); } handleResize() { this.layout.computeBoundingBoxes(); this.layout.draw(); this.sizeLockedChildren(); } getRows() { const rows = this.layout.layoutDef.rows; const layoutRows = this.termKitRowsToLayoutRows(rows); return layoutRows; } termKitRowsToLayoutRows(rows) { return rows.map((row) => ({ ...termKit_utility_1.default.mapTermKitOptionsToWidgetOptions(row), columns: this.termKitColumnsToLayoutColumns(row.columns), })); } termKitColumnsToLayoutColumns(columns) { return columns.map((col) => termKit_utility_1.default.mapTermKitOptionsToWidgetOptions(col)); } addRow(row) { this.layout.layoutDef.rows.push({ ...termKit_utility_1.default.mapWidgetOptionsToTermKitOptions(row), columns: this.widgetColumnsToTermKitColumns(row.columns), }); } removeRow(rowIdx) { this.layout.layoutDef.rows.splice(rowIdx, 1); } removeColumn(rowIdx, columnIdx) { const row = this.layout.layoutDef.rows[rowIdx]; if (row) { row.columns.splice(columnIdx, 1); } else { throw new Error(`Can't add remove column because row at index ${rowIdx} does not exist.`); } } addColumn(rowIdx, column) { if (this.layout.layoutDef.rows[rowIdx]) { this.layout.layoutDef.rows[rowIdx].columns.push({ ...termKit_utility_1.default.mapWidgetOptionsToTermKitOptions(column), }); } else { throw new Error(`Can't add column because row at index ${rowIdx} does not exist.`); } } setColumnWidth(options) { const { rowIdx, columnIdx, width } = options; const col = this.layout.layoutDef.rows[rowIdx]?.columns[columnIdx]; if (col) { this.layout.layoutDef.rows[rowIdx].columns[columnIdx] = { ...col, ...termKit_utility_1.default.mapWidgetOptionsToTermKitOptions({ width }), }; } else { throw new Error(`Can't add set column width because column ${columnIdx} at row ${rowIdx} does not exist.`); } } widgetColumnsToTermKitColumns(columns) { return columns.map((column) => ({ ...termKit_utility_1.default.mapWidgetOptionsToTermKitOptions(column), })); } setRowHeight(rowIdx, height) { this.layout.layoutDef.rows[rowIdx] = { ...this.layout.layoutDef.rows[rowIdx], ...termKit_utility_1.default.mapWidgetOptionsToTermKitOptions({ height }), }; } updateLayout() { this.handleResize(); } } exports.default = TkLayoutWidget; //# sourceMappingURL=TkLayoutWidget.js.map