diff --git a/src/canvas/index.ts b/src/canvas/index.ts index 6f7278b11..025fb1ea3 100644 --- a/src/canvas/index.ts +++ b/src/canvas/index.ts @@ -712,4 +712,21 @@ export default class CanvasModule extends Module { //@ts-ignore ['model', 'droppable'].forEach(i => (this[i] = {})); } + + setSpot(spot: any = {}) { + // CanvasSpot + // 'canvas:spot:add' | 'canvas:spot:update' + // 'canvas:spot' + } + + getSpots(spot: any = {}) { + // CanvasSpot[] + } + + removeSpot(spot: any = {}) { + // CanvasSpot[] + // 'canvas:spot:remove' + // 'canvas:spot' + // remove all spots: canvas.getSpots().forEach(spot => canvas.removeSpot(spot)) + } } diff --git a/src/canvas/model/CanvasSpot.ts b/src/canvas/model/CanvasSpot.ts new file mode 100644 index 000000000..6b6757993 --- /dev/null +++ b/src/canvas/model/CanvasSpot.ts @@ -0,0 +1,33 @@ +import CanvasModule from '..'; +import { ModuleModel } from '../../abstract'; +import { BoxRect, LiteralUnion } from '../../common'; +import Component from '../../dom_components/model/Component'; +import Frame from './Frame'; + +export type CanvasSpotBuiltInType = 'select' | 'hover' | 'padding' | 'margin' | 'resize'; + +export type CanvasSpotType = LiteralUnion; + +/** @private */ +export interface CanvasSpotProps { + id: string; + type: T; + boxRect: BoxRect; + component?: Component; + frame?: Frame; +} + +export default class CanvasSpot extends ModuleModel { + defaults() { + return { + id: '', + type: '', + boxRect: { + x: 0, + y: 0, + width: 0, + height: 0, + }, + }; + } +} diff --git a/src/editor/model/Editor.ts b/src/editor/model/Editor.ts index 237b37acf..f643653b9 100644 --- a/src/editor/model/Editor.ts +++ b/src/editor/model/Editor.ts @@ -558,7 +558,7 @@ export default class EditorModel extends Model { */ addSelected(el: Component | Component[], opts: any = {}) { const model = getModel(el, $); - const models = isArray(model) ? model : [model]; + const models: Component[] = isArray(model) ? model : [model]; models.forEach(model => { const { selected } = this; @@ -576,7 +576,12 @@ export default class EditorModel extends Model { toDeselect.forEach(cmp => this.removeSelected(cmp, opts)); selected.addComponent(model, opts); - model && this.trigger('component:select', model, opts); + this.trigger('component:select', model, opts); + this.Canvas.setSpot({ + id: 'select', + type: 'select', + component: model, + }); }); }