@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
140 lines • 5.01 kB
JavaScript
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
;