import { copyAndPast } from '../diagram/group-select-applay.js';
import { classAdd, classDel, clickForAll, listen, classSingleAdd, evtTargetAttr } from '../infrastructure/util.js';
import { PathSmbl } from './path-smbl.js';
export class PathSettings extends HTMLElement {
/**
* @param {CanvasElement} canvas
* @param {PathElement} pathElement
*/
constructor(canvas, pathElement) {
super();
/** @private */
this._pathElement = pathElement;
/** @private */
this._canvas = canvas;
}
connectedCallback() {
const pathStyles = this._pathElement[PathSmbl].data.styles;
const actStyle = style => this._pathElement[PathSmbl].data.styles?.includes(style) ? 'class="actv"' : '';
const shadow = this.attachShadow({ mode: 'closed' });
shadow.innerHTML = `
`;
// colors, del
listen(shadow.getElementById('edit'), 'cmd', /** @param {CustomEvent<{cmd:string, arg:string}>} evt */ evt => {
switch (evt.detail.cmd) {
case 'style': classSingleAdd(this._pathElement, this._pathElement[PathSmbl].data, 'cl-', evt.detail.arg); break;
case 'del': this._pathElement[PathSmbl].del(); break;
case 'copy': copyAndPast(this._canvas, [this._pathElement]); break;
}
});
// arrows, dotted
clickForAll(shadow, '[data-cmd]', evt => {
const argStyle = evtTargetAttr(evt, 'data-cmd-arg');
const currentArr = pathStyles.indexOf(argStyle);
if (currentArr > -1) {
classDel(this._pathElement, argStyle);
pathStyles.splice(currentArr, 1);
classDel(evt.currentTarget, 'actv');
} else {
classAdd(this._pathElement, argStyle);
pathStyles.push(argStyle);
classAdd(evt.currentTarget, 'actv');
}
});
}
}
customElements.define('ap-path-settings', PathSettings);
/** @typedef { import('./path-smbl').PathElement } PathElement */
/** @typedef { import('../infrastructure/canvas-smbl.js').CanvasElement } CanvasElement */