canvas-editor-engine 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/Readme.md +118 -0
- package/dist/components/canvas.component.d.ts +21 -0
- package/dist/components/canvas.component.js +75 -0
- package/dist/components/excretions.component.d.ts +24 -0
- package/dist/components/excretions.component.js +192 -0
- package/dist/components/pipette.component.d.ts +23 -0
- package/dist/components/pipette.component.js +138 -0
- package/dist/components/slot.component.d.ts +10 -0
- package/dist/components/slot.component.js +20 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +29 -0
- package/dist/filters/collection/vague.d.ts +12 -0
- package/dist/filters/collection/vague.js +107 -0
- package/dist/filters/index.d.ts +2 -0
- package/dist/filters/index.js +5 -0
- package/dist/images/image.png +0 -0
- package/dist/images/sample.png +0 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +49 -0
- package/dist/services/component.service.d.ts +5 -0
- package/dist/services/component.service.js +37 -0
- package/dist/services/draw.service.d.ts +13 -0
- package/dist/services/draw.service.js +71 -0
- package/dist/services/tool.service.d.ts +10 -0
- package/dist/services/tool.service.js +58 -0
- package/dist/types/canvas.d.ts +10 -0
- package/dist/types/canvas.js +3 -0
- package/dist/types/cursor.d.ts +9 -0
- package/dist/types/cursor.js +3 -0
- package/dist/types/excreation.d.ts +24 -0
- package/dist/types/excreation.js +5 -0
- package/dist/types/excretion.d.ts +26 -0
- package/dist/types/excretion.js +5 -0
- package/dist/types/general.d.ts +14 -0
- package/dist/types/general.js +4 -0
- package/dist/types/image.d.ts +36 -0
- package/dist/types/image.js +7 -0
- package/dist/types/pipette.d.ts +1 -0
- package/dist/types/pipette.js +2 -0
- package/dist/utils/convert.d.ts +12 -0
- package/dist/utils/convert.js +27 -0
- package/dist/utils/filter.d.ts +16 -0
- package/dist/utils/filter.js +61 -0
- package/dist/web-component.d.ts +10 -0
- package/dist/web-component.js +60 -0
- package/package.json +30 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.Filter = void 0;
|
4
|
+
const config_1 = require("../config");
|
5
|
+
const convert_1 = require("./convert");
|
6
|
+
const lodash_1 = require("lodash");
|
7
|
+
class Filter {
|
8
|
+
constructor(ctx) {
|
9
|
+
this.ctx = ctx;
|
10
|
+
}
|
11
|
+
setImageSize(size) {
|
12
|
+
this.imageSize = size;
|
13
|
+
}
|
14
|
+
copy(options) {
|
15
|
+
const width = (options === null || options === void 0 ? void 0 : options.width) ? options.width : config_1.default.CANVAS_SIZE.width;
|
16
|
+
const height = (options === null || options === void 0 ? void 0 : options.height) ? options.height : config_1.default.CANVAS_SIZE.height;
|
17
|
+
const imgData = this.ctx.getImageData(options.x, options.y, width, height);
|
18
|
+
return imgData;
|
19
|
+
}
|
20
|
+
update(imgData, options) {
|
21
|
+
this.ctx.putImageData(imgData, options.x, options.y);
|
22
|
+
}
|
23
|
+
getBuffCollection(imageData) {
|
24
|
+
const rowRGBABuff = this.getRowRGBABuff(imageData);
|
25
|
+
const hexBuff = rowRGBABuff.map(convert_1.Convert.byteRGBToHEX);
|
26
|
+
const buff = this.getBuff(hexBuff);
|
27
|
+
return { rowRGBABuff, hexBuff, buff };
|
28
|
+
}
|
29
|
+
getBuff(hexBuff) {
|
30
|
+
const distanceRow = (0, lodash_1.range)(0, this.imageSize.h).map((i) => this.imageSize.w * i);
|
31
|
+
const buff = [];
|
32
|
+
let indexOfDistance = 0;
|
33
|
+
hexBuff.forEach((pxColor, pxIndex) => {
|
34
|
+
var _a;
|
35
|
+
if (pxIndex >= distanceRow[indexOfDistance + 1]) {
|
36
|
+
indexOfDistance++;
|
37
|
+
}
|
38
|
+
(_a = buff[indexOfDistance]) !== null && _a !== void 0 ? _a : (buff[indexOfDistance] = []);
|
39
|
+
buff[indexOfDistance].push(pxColor);
|
40
|
+
});
|
41
|
+
return buff;
|
42
|
+
}
|
43
|
+
getRowRGBABuff(imageData) {
|
44
|
+
const rowRGBABuff = []; // [ [0, 0, 0, 0], [0, 0, 0, 0], ... ]
|
45
|
+
let colorIndx = 0;
|
46
|
+
let colorRGBAIndx = 0;
|
47
|
+
imageData.data.forEach((pxColor) => {
|
48
|
+
var _a;
|
49
|
+
if (colorIndx >= 4) {
|
50
|
+
colorIndx = 0;
|
51
|
+
colorRGBAIndx++;
|
52
|
+
}
|
53
|
+
colorIndx++;
|
54
|
+
// @ts-ignore
|
55
|
+
(_a = rowRGBABuff[colorRGBAIndx]) !== null && _a !== void 0 ? _a : (rowRGBABuff[colorRGBAIndx] = []);
|
56
|
+
rowRGBABuff[colorRGBAIndx].push(pxColor);
|
57
|
+
});
|
58
|
+
return rowRGBABuff;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
exports.Filter = Filter;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { TComponent } from "./types/general";
|
2
|
+
export declare class WebComponentWrapper {
|
3
|
+
element: HTMLDivElement;
|
4
|
+
constructor();
|
5
|
+
add(component: TComponent, style?: HTMLStyleElement): HTMLDivElement;
|
6
|
+
private _stylish;
|
7
|
+
}
|
8
|
+
export default class WebComponent extends HTMLElement {
|
9
|
+
constructor();
|
10
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.WebComponentWrapper = void 0;
|
4
|
+
const canvas_component_1 = require("./components/canvas.component");
|
5
|
+
const excretions_component_1 = require("./components/excretions.component");
|
6
|
+
const pipette_component_1 = require("./components/pipette.component");
|
7
|
+
const slot_component_1 = require("./components/slot.component");
|
8
|
+
class WebComponentWrapper {
|
9
|
+
constructor() {
|
10
|
+
const webComponentWrapper = document.createElement('div');
|
11
|
+
webComponentWrapper.className = 'editor-wrap';
|
12
|
+
webComponentWrapper.style.position = 'relative';
|
13
|
+
webComponentWrapper.style.display = 'flex';
|
14
|
+
this.element = webComponentWrapper;
|
15
|
+
this._stylish();
|
16
|
+
}
|
17
|
+
add(component, style) {
|
18
|
+
const componentElement = this.element.appendChild(component);
|
19
|
+
if (!!style) {
|
20
|
+
this.element.appendChild(style);
|
21
|
+
}
|
22
|
+
return componentElement;
|
23
|
+
}
|
24
|
+
_stylish() {
|
25
|
+
const style = document.createElement('style');
|
26
|
+
style.innerHTML = `
|
27
|
+
* {
|
28
|
+
user-select: none;
|
29
|
+
}
|
30
|
+
`;
|
31
|
+
this.element.appendChild(style);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
exports.WebComponentWrapper = WebComponentWrapper;
|
35
|
+
class WebComponent extends HTMLElement {
|
36
|
+
constructor() {
|
37
|
+
super();
|
38
|
+
const shadowRoot = this.attachShadow({ mode: "open" });
|
39
|
+
const webComponentWrapper = new WebComponentWrapper();
|
40
|
+
const { canvasTemplate, canvasStyle } = canvas_component_1.default.getComponent();
|
41
|
+
const canvasElement = webComponentWrapper.add(canvasTemplate, canvasStyle);
|
42
|
+
const { pipetteTemplate, pipetteStyle } = pipette_component_1.default.getComponent();
|
43
|
+
webComponentWrapper.add(pipetteTemplate, pipetteStyle);
|
44
|
+
const { slotTemplate, slotStyle } = slot_component_1.default.getComponent('tools');
|
45
|
+
webComponentWrapper.add(slotTemplate, slotStyle);
|
46
|
+
const { excretionsTemplate, excretionsStyle } = excretions_component_1.default.getComponent();
|
47
|
+
webComponentWrapper.add(excretionsTemplate, excretionsStyle);
|
48
|
+
shadowRoot.appendChild(webComponentWrapper.element);
|
49
|
+
canvas_component_1.default.simulateSubscriptions();
|
50
|
+
this.addEventListener('initial', () => {
|
51
|
+
this.dispatchEvent(new CustomEvent('get-editor-element', {
|
52
|
+
detail: {
|
53
|
+
editorElement: canvasElement,
|
54
|
+
canvasSelector: canvas_component_1.default.getCanvasSelector(),
|
55
|
+
}
|
56
|
+
}));
|
57
|
+
});
|
58
|
+
}
|
59
|
+
}
|
60
|
+
exports.default = WebComponent;
|
package/package.json
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
{
|
2
|
+
"name": "canvas-editor-engine",
|
3
|
+
"version": "1.0.1",
|
4
|
+
"description": "CanvasEditorEngine library, use: [typescript] [canvas]",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"types": "dist/index.d.ts",
|
7
|
+
"files": [
|
8
|
+
"/dist"
|
9
|
+
],
|
10
|
+
"scripts": {
|
11
|
+
"test": "node test/test.js",
|
12
|
+
"build": "tsc",
|
13
|
+
"realise": "npm version patch && npm publish"
|
14
|
+
},
|
15
|
+
"keywords": [
|
16
|
+
"typescript",
|
17
|
+
"canvas",
|
18
|
+
"library"
|
19
|
+
],
|
20
|
+
"author": "SavaFeeD",
|
21
|
+
"license": "ISC",
|
22
|
+
"devDependencies": {
|
23
|
+
"@types/lodash": "^4.17.10",
|
24
|
+
"@types/node": "^22.7.4",
|
25
|
+
"typescript": "^5.6.2"
|
26
|
+
},
|
27
|
+
"dependencies": {
|
28
|
+
"lodash": "^4.17.21"
|
29
|
+
}
|
30
|
+
}
|