geoiq-frontend-ui-kit 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/organisms/image-editor/components/line-session-bar.d.ts +20 -0
- package/dist/components/organisms/image-editor/components/line-session-bar.d.ts.map +1 -0
- package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts +9 -0
- package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts.map +1 -0
- package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/image-editor.types.d.ts +73 -0
- package/dist/components/organisms/image-editor/image-editor.types.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/use-image-editor.d.ts.map +1 -1
- package/dist/components/ui/request-credits-view/component/request-credit-dialog.d.ts.map +1 -1
- package/dist/index.es100.js +147 -120
- package/dist/index.es100.js.map +1 -1
- package/dist/index.es101.js +16 -11
- package/dist/index.es101.js.map +1 -1
- package/dist/index.es102.js +7 -41
- package/dist/index.es102.js.map +1 -1
- package/dist/index.es103.js +21 -10
- package/dist/index.es103.js.map +1 -1
- package/dist/index.es104.js +7 -74
- package/dist/index.es104.js.map +1 -1
- package/dist/index.es105.js +177 -30
- package/dist/index.es105.js.map +1 -1
- package/dist/index.es106.js +45 -16
- package/dist/index.es106.js.map +1 -1
- package/dist/index.es107.js +42 -20
- package/dist/index.es107.js.map +1 -1
- package/dist/index.es108.js +22 -12
- package/dist/index.es108.js.map +1 -1
- package/dist/index.es109.js +122 -98
- package/dist/index.es109.js.map +1 -1
- package/dist/index.es11.js +1 -1
- package/dist/index.es110.js +33 -62
- package/dist/index.es110.js.map +1 -1
- package/dist/index.es111.js +60 -52
- package/dist/index.es111.js.map +1 -1
- package/dist/index.es112.js +10 -41
- package/dist/index.es112.js.map +1 -1
- package/dist/index.es113.js +21 -11
- package/dist/index.es113.js.map +1 -1
- package/dist/index.es114.js +42 -92
- package/dist/index.es114.js.map +1 -1
- package/dist/index.es115.js +37 -16
- package/dist/index.es115.js.map +1 -1
- package/dist/index.es116.js +12 -99
- package/dist/index.es116.js.map +1 -1
- package/dist/index.es117.js +92 -13
- package/dist/index.es117.js.map +1 -1
- package/dist/index.es118.js +13 -101
- package/dist/index.es118.js.map +1 -1
- package/dist/index.es119.js +71 -20
- package/dist/index.es119.js.map +1 -1
- package/dist/index.es12.js +1 -1
- package/dist/index.es120.js +34 -25
- package/dist/index.es120.js.map +1 -1
- package/dist/index.es121.js +20 -22
- package/dist/index.es121.js.map +1 -1
- package/dist/index.es122.js +16 -45
- package/dist/index.es122.js.map +1 -1
- package/dist/index.es123.js +11 -34
- package/dist/index.es123.js.map +1 -1
- package/dist/index.es124.js +96 -61
- package/dist/index.es124.js.map +1 -1
- package/dist/index.es125.js +57 -174
- package/dist/index.es125.js.map +1 -1
- package/dist/index.es126.js +50 -17
- package/dist/index.es126.js.map +1 -1
- package/dist/index.es127.js +2 -2
- package/dist/index.es128.js +2 -2
- package/dist/index.es129.js +1 -1
- package/dist/index.es130.js +1 -1
- package/dist/index.es131.js +2 -2
- package/dist/index.es132.js +35 -38
- package/dist/index.es132.js.map +1 -1
- package/dist/index.es133.js +41 -7
- package/dist/index.es133.js.map +1 -1
- package/dist/index.es134.js +88 -7
- package/dist/index.es134.js.map +1 -1
- package/dist/index.es135.js +14 -34
- package/dist/index.es135.js.map +1 -1
- package/dist/index.es136.js +269 -35
- package/dist/index.es136.js.map +1 -1
- package/dist/index.es137.js +7 -2
- package/dist/index.es137.js.map +1 -1
- package/dist/index.es138.js +23 -25
- package/dist/index.es138.js.map +1 -1
- package/dist/index.es139.js +169 -15
- package/dist/index.es139.js.map +1 -1
- package/dist/index.es140.js +82 -7
- package/dist/index.es140.js.map +1 -1
- package/dist/index.es141.js +73 -21
- package/dist/index.es141.js.map +1 -1
- package/dist/index.es142.js +3 -168
- package/dist/index.es142.js.map +1 -1
- package/dist/index.es143.js +56 -82
- package/dist/index.es143.js.map +1 -1
- package/dist/index.es144.js +119 -4
- package/dist/index.es144.js.map +1 -1
- package/dist/index.es145.js +405 -56
- package/dist/index.es145.js.map +1 -1
- package/dist/index.es146.js +25 -110
- package/dist/index.es146.js.map +1 -1
- package/dist/index.es147.js +60 -314
- package/dist/index.es147.js.map +1 -1
- package/dist/index.es148.js +29 -24
- package/dist/index.es148.js.map +1 -1
- package/dist/index.es149.js +21 -64
- package/dist/index.es149.js.map +1 -1
- package/dist/index.es150.js +36 -30
- package/dist/index.es150.js.map +1 -1
- package/dist/index.es151.js +211 -24
- package/dist/index.es151.js.map +1 -1
- package/dist/index.es152.js +141 -35
- package/dist/index.es152.js.map +1 -1
- package/dist/index.es153.js +141 -140
- package/dist/index.es153.js.map +1 -1
- package/dist/index.es154.js +45 -142
- package/dist/index.es154.js.map +1 -1
- package/dist/index.es155.js +353 -45
- package/dist/index.es155.js.map +1 -1
- package/dist/index.es156.js +14 -10
- package/dist/index.es156.js.map +1 -1
- package/dist/index.es157.js +10 -42
- package/dist/index.es157.js.map +1 -1
- package/dist/index.es158.js +44 -5
- package/dist/index.es158.js.map +1 -1
- package/dist/index.es159.js +5 -11
- package/dist/index.es159.js.map +1 -1
- package/dist/index.es16.js +1 -1
- package/dist/index.es160.js +10 -10
- package/dist/index.es160.js.map +1 -1
- package/dist/index.es161.js +11 -2
- package/dist/index.es161.js.map +1 -1
- package/dist/index.es162.js +2 -91
- package/dist/index.es162.js.map +1 -1
- package/dist/index.es163.js +2 -213
- package/dist/index.es163.js.map +1 -1
- package/dist/index.es164.js +23 -52
- package/dist/index.es164.js.map +1 -1
- package/dist/index.es165.js +88 -33
- package/dist/index.es165.js.map +1 -1
- package/dist/index.es166.js +52 -31
- package/dist/index.es166.js.map +1 -1
- package/dist/index.es167.js +32 -29
- package/dist/index.es167.js.map +1 -1
- package/dist/index.es168.js +26 -84
- package/dist/index.es168.js.map +1 -1
- package/dist/index.es169.js +27 -111
- package/dist/index.es169.js.map +1 -1
- package/dist/index.es170.js +97 -285
- package/dist/index.es170.js.map +1 -1
- package/dist/index.es171.js +251 -30
- package/dist/index.es171.js.map +1 -1
- package/dist/index.es172.js +63 -11
- package/dist/index.es172.js.map +1 -1
- package/dist/index.es173.js +284 -82
- package/dist/index.es173.js.map +1 -1
- package/dist/index.es174.js +29 -70
- package/dist/index.es174.js.map +1 -1
- package/dist/index.es175.js +10 -114
- package/dist/index.es175.js.map +1 -1
- package/dist/index.es176.js +23 -106
- package/dist/index.es176.js.map +1 -1
- package/dist/index.es177.js +19 -82
- package/dist/index.es177.js.map +1 -1
- package/dist/index.es178.js +63 -109
- package/dist/index.es178.js.map +1 -1
- package/dist/index.es179.js +63 -117
- package/dist/index.es179.js.map +1 -1
- package/dist/index.es180.js +112 -23
- package/dist/index.es180.js.map +1 -1
- package/dist/index.es181.js +103 -18
- package/dist/index.es181.js.map +1 -1
- package/dist/index.es182.js +86 -5
- package/dist/index.es182.js.map +1 -1
- package/dist/index.es183.js +133 -0
- package/dist/index.es183.js.map +1 -0
- package/dist/index.es184.js +133 -0
- package/dist/index.es184.js.map +1 -0
- package/dist/index.es185.js +9 -0
- package/dist/index.es185.js.map +1 -0
- package/dist/index.es19.js +1 -1
- package/dist/index.es2.js +21 -21
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es20.js +1 -1
- package/dist/index.es21.js +3 -3
- package/dist/index.es22.js +1 -1
- package/dist/index.es25.js +1 -1
- package/dist/index.es27.js +1 -1
- package/dist/index.es28.js +2 -2
- package/dist/index.es30.js +1 -1
- package/dist/index.es32.js +1 -1
- package/dist/index.es33.js +1 -1
- package/dist/index.es45.js +48 -46
- package/dist/index.es45.js.map +1 -1
- package/dist/index.es46.js +2 -2
- package/dist/index.es47.js +1 -1
- package/dist/index.es48.js +1 -1
- package/dist/index.es53.js +1 -1
- package/dist/index.es54.js +1 -1
- package/dist/index.es57.js +1 -1
- package/dist/index.es59.js +1 -1
- package/dist/index.es67.js +2 -2
- package/dist/index.es68.js +1 -1
- package/dist/index.es71.js +1 -1
- package/dist/index.es72.js +7 -7
- package/dist/index.es73.js +2 -2
- package/dist/index.es85.js +1 -1
- package/dist/index.es97.js +16 -11
- package/dist/index.es97.js.map +1 -1
- package/dist/index.es98.js +89 -262
- package/dist/index.es98.js.map +1 -1
- package/dist/index.es99.js +13 -87
- package/dist/index.es99.js.map +1 -1
- package/dist/styles.css +55 -0
- package/package.json +2 -1
package/dist/index.es151.js
CHANGED
|
@@ -1,28 +1,215 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
e.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import { pushHistory as f } from "./index.es146.js";
|
|
2
|
+
import { emitChange as r, getSel as l } from "./index.es144.js";
|
|
3
|
+
import { render as o, keepingFixed as d, clampTextSize as u, clampBoxWidth as p } from "./index.es145.js";
|
|
4
|
+
import { SHAPES as y } from "./index.es143.js";
|
|
5
|
+
import { applyModeCursor as h } from "./index.es148.js";
|
|
6
|
+
function c(e, i, n) {
|
|
7
|
+
d(e, i, { x: i.x, y: i.y }, n);
|
|
8
|
+
}
|
|
9
|
+
function T(e) {
|
|
10
|
+
if (e.type === "text")
|
|
11
|
+
return "“" + (e.text.length > 16 ? e.text.slice(0, 16) + "…" : e.text) + "”";
|
|
12
|
+
if (e.type === "stroke")
|
|
13
|
+
return e.style === "highlight" ? "Highlighter" : "Brush stroke";
|
|
14
|
+
if (e.type === "sticker") return "Sticker";
|
|
15
|
+
const i = y.find((n) => n.id === e.shape);
|
|
16
|
+
return i ? i.name : e.shape;
|
|
17
|
+
}
|
|
18
|
+
function S(e, i) {
|
|
19
|
+
f(e), e.layers = e.layers.filter((n) => n.id !== i), e.selectedId === i && (e.selectedId = null), o(e), e.statusText = "Layer deleted", r(e);
|
|
20
|
+
}
|
|
21
|
+
function C(e) {
|
|
22
|
+
e.selectedId != null && S(e, e.selectedId);
|
|
23
|
+
}
|
|
24
|
+
function g(e) {
|
|
25
|
+
const i = l(e);
|
|
26
|
+
if (!i) return;
|
|
27
|
+
f(e);
|
|
28
|
+
const n = JSON.parse(JSON.stringify(i));
|
|
29
|
+
n.id = e.nextId++, n.type === "text" || n.type === "shape" || n.type === "sticker" ? (n.x += 20, n.y += 20) : n.type === "stroke" && (n.points = n.points.map((t) => ({ x: t.x + 20, y: t.y + 20 }))), e.layers.push(n), e.selectedId = n.id, o(e), e.statusText = "Layer duplicated", r(e);
|
|
30
|
+
}
|
|
31
|
+
function F(e) {
|
|
32
|
+
const i = e.layers.findIndex((t) => t.id === e.selectedId);
|
|
33
|
+
if (i < 0) return;
|
|
34
|
+
f(e);
|
|
35
|
+
const [n] = e.layers.splice(i, 1);
|
|
36
|
+
e.layers.push(n), o(e), r(e);
|
|
37
|
+
}
|
|
38
|
+
function I(e) {
|
|
39
|
+
const i = e.layers.findIndex((t) => t.id === e.selectedId);
|
|
40
|
+
if (i < 0) return;
|
|
41
|
+
f(e);
|
|
42
|
+
const [n] = e.layers.splice(i, 1);
|
|
43
|
+
e.layers.unshift(n), o(e), r(e);
|
|
44
|
+
}
|
|
45
|
+
function z(e, i, n) {
|
|
46
|
+
e.adj[i] = n, o(e), e.notify();
|
|
47
|
+
}
|
|
48
|
+
function k(e, i) {
|
|
49
|
+
e.adj.filter = i, o(e), r(e);
|
|
50
|
+
}
|
|
51
|
+
function M(e, i) {
|
|
52
|
+
e.selectedShapeType = i, e.notify();
|
|
53
|
+
}
|
|
54
|
+
function B(e, i) {
|
|
55
|
+
e.shapeFill = i, e.notify();
|
|
56
|
+
}
|
|
57
|
+
function H(e, i) {
|
|
58
|
+
e.shapeWidth = i, e.notify();
|
|
59
|
+
}
|
|
60
|
+
function P(e, i) {
|
|
61
|
+
e.brushSize = i, e.notify();
|
|
62
|
+
}
|
|
63
|
+
function W(e, i) {
|
|
64
|
+
e.brushStyle = i, e.notify();
|
|
65
|
+
}
|
|
66
|
+
function w(e, i) {
|
|
67
|
+
e.textFont = i, e.notify();
|
|
68
|
+
}
|
|
69
|
+
function D(e, i) {
|
|
70
|
+
e.textSize = i, e.notify();
|
|
71
|
+
}
|
|
72
|
+
function O(e, i) {
|
|
73
|
+
e.textColor = i, e.notify();
|
|
74
|
+
}
|
|
75
|
+
function j(e, i) {
|
|
76
|
+
e.shapeColor = i, e.notify();
|
|
77
|
+
}
|
|
78
|
+
function N(e, i) {
|
|
79
|
+
e.drawColor = i, h(e), e.notify();
|
|
80
|
+
}
|
|
81
|
+
function V(e, i) {
|
|
82
|
+
const n = l(e);
|
|
83
|
+
n && (f(e), n.color = i, o(e), r(e));
|
|
84
|
+
}
|
|
85
|
+
function A(e, i) {
|
|
86
|
+
const n = l(e);
|
|
87
|
+
!n || n.type !== "text" || (c(e, n, () => {
|
|
88
|
+
n.text = i;
|
|
89
|
+
}), o(e), e.notify());
|
|
90
|
+
}
|
|
91
|
+
function J(e, i) {
|
|
92
|
+
const n = l(e);
|
|
93
|
+
n && (f(e), c(e, n, () => {
|
|
94
|
+
n.font = i;
|
|
95
|
+
}), o(e), r(e));
|
|
96
|
+
}
|
|
97
|
+
function R(e, i) {
|
|
98
|
+
const n = l(e);
|
|
99
|
+
n && (c(e, n, () => {
|
|
100
|
+
n.size = i, u(e, n);
|
|
101
|
+
}), o(e), e.notify());
|
|
102
|
+
}
|
|
103
|
+
function v(e, i) {
|
|
104
|
+
const n = l(e);
|
|
105
|
+
!n || n.type !== "text" || (c(e, n, () => {
|
|
106
|
+
n.boxWidth = i, p(e, n), u(e, n);
|
|
107
|
+
}), o(e), e.notify());
|
|
108
|
+
}
|
|
109
|
+
function E(e, i) {
|
|
110
|
+
const n = l(e);
|
|
111
|
+
n && (f(e), n.fill = i, o(e), r(e));
|
|
112
|
+
}
|
|
113
|
+
function $(e, i) {
|
|
114
|
+
const n = l(e);
|
|
115
|
+
n && (c(e, n, () => {
|
|
116
|
+
n.width = i;
|
|
117
|
+
}), o(e), e.notify());
|
|
118
|
+
}
|
|
119
|
+
function q(e, i) {
|
|
120
|
+
const n = l(e);
|
|
121
|
+
!n || n.type !== "shape" || (f(e), n.label = i, o(e), r(e));
|
|
122
|
+
}
|
|
123
|
+
function G(e, i) {
|
|
124
|
+
const n = l(e);
|
|
125
|
+
!n || n.type !== "shape" || (n.labelSize = i, o(e), e.notify());
|
|
126
|
+
}
|
|
127
|
+
function K(e, i) {
|
|
128
|
+
const n = l(e);
|
|
129
|
+
!n || n.type !== "shape" || (n.labelColor = i, o(e), e.notify());
|
|
130
|
+
}
|
|
131
|
+
function Q(e, i) {
|
|
132
|
+
const n = l(e);
|
|
133
|
+
!n || n.type !== "shape" || (n.labelFont = i, o(e), e.notify());
|
|
134
|
+
}
|
|
135
|
+
function U(e, i) {
|
|
136
|
+
const n = l(e);
|
|
137
|
+
!n || n.type !== "shape" || !n.points || n.points.length < 3 || (f(e), n.closed = !!i, o(e), r(e));
|
|
138
|
+
}
|
|
139
|
+
function X(e, i) {
|
|
140
|
+
const n = l(e);
|
|
141
|
+
!n || n.type !== "shape" || (n.labelSide = i === "below" ? "below" : "above", o(e), e.notify());
|
|
142
|
+
}
|
|
143
|
+
function Y(e, i) {
|
|
144
|
+
const n = l(e);
|
|
145
|
+
!n || n.type !== "shape" || (n.labelOffset = i, o(e), e.notify());
|
|
146
|
+
}
|
|
147
|
+
function Z(e, i) {
|
|
148
|
+
const n = l(e);
|
|
149
|
+
!n || n.type !== "shape" || (n.labelPos = Math.min(Math.max(i, 0), 1), o(e), e.notify());
|
|
150
|
+
}
|
|
151
|
+
function _(e, i) {
|
|
152
|
+
const n = l(e);
|
|
153
|
+
!n || n.type !== "shape" || (n.labelRotate = !!i, o(e), e.notify());
|
|
154
|
+
}
|
|
155
|
+
function a(e, i) {
|
|
156
|
+
e.multiPointMode = !!i, e.notify();
|
|
157
|
+
}
|
|
158
|
+
function ee(e, i) {
|
|
159
|
+
const n = l(e);
|
|
160
|
+
n && (f(e), n.rotation = (((n.rotation || 0) + i) % 360 + 360) % 360, o(e), e.statusText = `Layer rotated to ${Math.round(n.rotation)}°`, r(e));
|
|
161
|
+
}
|
|
162
|
+
function ne(e, i) {
|
|
163
|
+
const n = l(e);
|
|
164
|
+
n && (f(e), i ? n.flipH = !n.flipH : n.flipV = !n.flipV, o(e), e.statusText = i ? "Layer flipped H" : "Layer flipped V", r(e));
|
|
165
|
+
}
|
|
166
|
+
function ie(e, i) {
|
|
167
|
+
const n = l(e);
|
|
168
|
+
!n || n.type !== "shape" || (n.labelDx = i, o(e), e.notify());
|
|
169
|
+
}
|
|
170
|
+
function oe(e, i) {
|
|
171
|
+
const n = l(e);
|
|
172
|
+
!n || n.type !== "shape" || (n.labelDy = i, o(e), e.notify());
|
|
21
173
|
}
|
|
22
174
|
export {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
175
|
+
F as bringSelectedToFront,
|
|
176
|
+
S as deleteLayer,
|
|
177
|
+
C as deleteSelected,
|
|
178
|
+
g as duplicateSelected,
|
|
179
|
+
ne as flipSelected,
|
|
180
|
+
T as layerName,
|
|
181
|
+
ee as rotateSelected,
|
|
182
|
+
M as selectShapeType,
|
|
183
|
+
I as sendSelectedToBack,
|
|
184
|
+
z as setAdjustment,
|
|
185
|
+
P as setBrushSize,
|
|
186
|
+
W as setBrushStyle,
|
|
187
|
+
N as setDrawColor,
|
|
188
|
+
k as setFilter,
|
|
189
|
+
a as setMultiPointMode,
|
|
190
|
+
v as setSelectedBoxWidth,
|
|
191
|
+
U as setSelectedClosed,
|
|
192
|
+
V as setSelectedColor,
|
|
193
|
+
J as setSelectedFont,
|
|
194
|
+
q as setSelectedLabel,
|
|
195
|
+
K as setSelectedLabelColor,
|
|
196
|
+
ie as setSelectedLabelDx,
|
|
197
|
+
oe as setSelectedLabelDy,
|
|
198
|
+
Q as setSelectedLabelFont,
|
|
199
|
+
Y as setSelectedLabelOffset,
|
|
200
|
+
Z as setSelectedLabelPos,
|
|
201
|
+
_ as setSelectedLabelRotate,
|
|
202
|
+
X as setSelectedLabelSide,
|
|
203
|
+
G as setSelectedLabelSize,
|
|
204
|
+
E as setSelectedShapeFill,
|
|
205
|
+
A as setSelectedText,
|
|
206
|
+
R as setSelectedTextSize,
|
|
207
|
+
$ as setSelectedWidth,
|
|
208
|
+
j as setShapeColor,
|
|
209
|
+
B as setShapeFill,
|
|
210
|
+
H as setShapeWidth,
|
|
211
|
+
O as setTextColor,
|
|
212
|
+
w as setTextFont,
|
|
213
|
+
D as setTextSize
|
|
27
214
|
};
|
|
28
215
|
//# sourceMappingURL=index.es151.js.map
|
package/dist/index.es151.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es151.js","sources":["../src/components/organisms/image-editor/engine/text-editor.js"],"sourcesContent":["import {\n keepingFixed,\n layerBounds,\n render,\n renderOverlay,\n} from './rendering.js'\n\nconst EDITOR_FONT_SIZE = 16\nconst EDITOR_MIN_HEIGHT = 28\n\n// Grow the box to fit what is typed; no-op while hidden (scrollHeight is 0).\nexport function autoGrowTextEditor(state) {\n const el = state.textEditorEl\n if (!el || el.offsetParent === null) return\n el.style.height = 'auto'\n el.style.height = Math.max(EDITOR_MIN_HEIGHT, el.scrollHeight) + 'px'\n}\n\nexport function openTextEditor(state, L, selectAll) {\n state.editingLayer = L\n state.editingSelectAll = !!selectAll\n const b = layerBounds(state, L),\n r = state.overlayEl.getBoundingClientRect(),\n wr = state.overlayEl.parentElement.getBoundingClientRect()\n state.textEditorEl.value = L.text === 'Text' ? '' : L.text\n state.textEditorEl.style.left =\n r.left - wr.left + b.x * state.viewScale + 'px'\n state.textEditorEl.style.top = r.top - wr.top + b.y * state.viewScale + 'px'\n state.textEditorEl.style.width = Math.max(60, b.w * state.viewScale) + 'px'\n state.textEditorEl.style.height =\n Math.max(EDITOR_MIN_HEIGHT, b.h * state.viewScale) + 'px'\n state.textEditorEl.style.fontFamily = L.font\n state.textEditorEl.style.fontSize = EDITOR_FONT_SIZE + 'px'\n state.textEditorEl.style.color = L.color\n L._editing = true\n renderOverlay(state)\n state.notify()\n // notify() is what un-hides the textarea, so measure on the next frame.\n requestAnimationFrame(() => autoGrowTextEditor(state))\n}\n\nexport function commitTextEdit(state) {\n if (!state.editingLayer) return\n const L = state.editingLayer\n // Longer text means taller bounds; hold the top-left corner.\n keepingFixed(state, L, { x: L.x, y: L.y }, () => {\n L.text =\n state.textEditorEl.value.trim() === '' ? 'Text' : state.textEditorEl.value\n })\n L._editing = false\n state.editingLayer = null\n render(state)\n state.notify()\n}\n\n// Committing alone leaves the hidden textarea focused, keeping the keyboard up.\nexport function blurTextEditor(state) {\n if (!state.editingLayer) return\n commitTextEdit(state)\n if (state.textEditorEl) state.textEditorEl.blur()\n}\n"],"names":["EDITOR_FONT_SIZE","EDITOR_MIN_HEIGHT","autoGrowTextEditor","state","el","openTextEditor","L","selectAll","b","layerBounds","r","wr","renderOverlay","commitTextEdit","keepingFixed","render","blurTextEditor"],"mappings":";AAOA,MAAMA,IAAmB,IACnBC,IAAoB;AAGnB,SAASC,EAAmBC,GAAO;AACxC,QAAMC,IAAKD,EAAM;AACjB,EAAI,CAACC,KAAMA,EAAG,iBAAiB,SAC/BA,EAAG,MAAM,SAAS,QAClBA,EAAG,MAAM,SAAS,KAAK,IAAIH,GAAmBG,EAAG,YAAY,IAAI;AACnE;AAEO,SAASC,EAAeF,GAAOG,GAAGC,GAAW;AAClD,EAAAJ,EAAM,eAAeG,GACrBH,EAAM,mBAAmB,CAAC,CAACI;AAC3B,QAAMC,IAAIC,EAAYN,GAAOG,CAAC,GAC5BI,IAAIP,EAAM,UAAU,sBAAqB,GACzCQ,IAAKR,EAAM,UAAU,cAAc,sBAAqB;AAC1D,EAAAA,EAAM,aAAa,QAAQG,EAAE,SAAS,SAAS,KAAKA,EAAE,MACtDH,EAAM,aAAa,MAAM,OACvBO,EAAE,OAAOC,EAAG,OAAOH,EAAE,IAAIL,EAAM,YAAY,MAC7CA,EAAM,aAAa,MAAM,MAAMO,EAAE,MAAMC,EAAG,MAAMH,EAAE,IAAIL,EAAM,YAAY,MACxEA,EAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,IAAIK,EAAE,IAAIL,EAAM,SAAS,IAAI,MACvEA,EAAM,aAAa,MAAM,SACvB,KAAK,IAAIF,GAAmBO,EAAE,IAAIL,EAAM,SAAS,IAAI,MACvDA,EAAM,aAAa,MAAM,aAAaG,EAAE,MACxCH,EAAM,aAAa,MAAM,WAAWH,IAAmB,MACvDG,EAAM,aAAa,MAAM,QAAQG,EAAE,OACnCA,EAAE,WAAW,IACbM,EAAcT,CAAK,GACnBA,EAAM,OAAM,GAEZ,sBAAsB,MAAMD,EAAmBC,CAAK,CAAC;AACvD;AAEO,SAASU,EAAeV,GAAO;AACpC,MAAI,CAACA,EAAM,aAAc;AACzB,QAAMG,IAAIH,EAAM;AAEhB,EAAAW,EAAaX,GAAOG,GAAG,EAAE,GAAGA,EAAE,GAAG,GAAGA,EAAE,EAAC,GAAI,MAAM;AAC/C,IAAAA,EAAE,OACAH,EAAM,aAAa,MAAM,KAAI,MAAO,KAAK,SAASA,EAAM,aAAa;AAAA,EACzE,CAAC,GACDG,EAAE,WAAW,IACbH,EAAM,eAAe,MACrBY,EAAOZ,CAAK,GACZA,EAAM,OAAM;AACd;AAGO,SAASa,EAAeb,GAAO;AACpC,EAAKA,EAAM,iBACXU,EAAeV,CAAK,GAChBA,EAAM,gBAAcA,EAAM,aAAa,KAAI;AACjD;"}
|
|
1
|
+
{"version":3,"file":"index.es151.js","sources":["../src/components/organisms/image-editor/engine/layer-actions.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange, getSel } from './state.js'\nimport {\n render,\n clampTextSize,\n clampBoxWidth,\n keepingFixed,\n} from './rendering.js'\n\n// These all resize the bounds, which would swing a rotated layer's centre.\nfunction resizeInPlace(state, L, mutate) {\n keepingFixed(state, L, { x: L.x, y: L.y }, mutate)\n}\nimport { SHAPES } from './constants.js'\nimport { applyModeCursor } from './mode.js'\n\nexport function layerName(L) {\n if (L.type === 'text')\n return '“' + (L.text.length > 16 ? L.text.slice(0, 16) + '…' : L.text) + '”'\n if (L.type === 'stroke')\n return L.style === 'highlight' ? 'Highlighter' : 'Brush stroke'\n if (L.type === 'sticker') return 'Sticker'\n const s = SHAPES.find((s) => s.id === L.shape)\n return s ? s.name : L.shape\n}\n\nexport function deleteLayer(state, id) {\n pushHistory(state)\n state.layers = state.layers.filter((l) => l.id !== id)\n if (state.selectedId === id) state.selectedId = null\n render(state)\n state.statusText = 'Layer deleted'\n emitChange(state)\n}\n\nexport function deleteSelected(state) {\n if (state.selectedId != null) deleteLayer(state, state.selectedId)\n}\n\nexport function duplicateSelected(state) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n const copy = JSON.parse(JSON.stringify(L))\n copy.id = state.nextId++\n if (\n copy.type === 'text' ||\n copy.type === 'shape' ||\n copy.type === 'sticker'\n ) {\n copy.x += 20\n copy.y += 20\n } else if (copy.type === 'stroke') {\n copy.points = copy.points.map((p) => ({ x: p.x + 20, y: p.y + 20 }))\n }\n state.layers.push(copy)\n state.selectedId = copy.id\n render(state)\n state.statusText = 'Layer duplicated'\n emitChange(state)\n}\n\nexport function bringSelectedToFront(state) {\n const i = state.layers.findIndex((l) => l.id === state.selectedId)\n if (i < 0) return\n pushHistory(state)\n const [L] = state.layers.splice(i, 1)\n state.layers.push(L)\n render(state)\n emitChange(state)\n}\n\nexport function sendSelectedToBack(state) {\n const i = state.layers.findIndex((l) => l.id === state.selectedId)\n if (i < 0) return\n pushHistory(state)\n const [L] = state.layers.splice(i, 1)\n state.layers.unshift(L)\n render(state)\n emitChange(state)\n}\n\nexport function setAdjustment(state, key, value) {\n state.adj[key] = value\n render(state)\n state.notify()\n}\nexport function setFilter(state, id) {\n state.adj.filter = id\n render(state)\n emitChange(state)\n}\nexport function selectShapeType(state, id) {\n state.selectedShapeType = id\n state.notify()\n}\nexport function setShapeFill(state, v) {\n state.shapeFill = v\n state.notify()\n}\nexport function setShapeWidth(state, v) {\n state.shapeWidth = v\n state.notify()\n}\nexport function setBrushSize(state, v) {\n state.brushSize = v\n state.notify()\n}\nexport function setBrushStyle(state, v) {\n state.brushStyle = v\n state.notify()\n}\nexport function setTextFont(state, v) {\n state.textFont = v\n state.notify()\n}\nexport function setTextSize(state, v) {\n state.textSize = v\n state.notify()\n}\nexport function setTextColor(state, v) {\n state.textColor = v\n state.notify()\n}\nexport function setShapeColor(state, v) {\n state.shapeColor = v\n state.notify()\n}\nexport function setDrawColor(state, v) {\n state.drawColor = v\n applyModeCursor(state)\n state.notify()\n}\n\nexport function setSelectedColor(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n L.color = v\n render(state)\n emitChange(state)\n}\nexport function setSelectedText(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'text') return\n resizeInPlace(state, L, () => {\n L.text = v\n })\n render(state)\n state.notify()\n}\nexport function setSelectedFont(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n resizeInPlace(state, L, () => {\n L.font = v\n })\n render(state)\n emitChange(state)\n}\nexport function setSelectedTextSize(state, v) {\n const L = getSel(state)\n if (!L) return\n resizeInPlace(state, L, () => {\n L.size = v\n clampTextSize(state, L)\n })\n render(state)\n state.notify()\n}\nexport function setSelectedBoxWidth(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'text') return\n resizeInPlace(state, L, () => {\n L.boxWidth = v\n clampBoxWidth(state, L)\n clampTextSize(state, L)\n })\n render(state)\n state.notify()\n}\nexport function setSelectedShapeFill(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n L.fill = v\n render(state)\n emitChange(state)\n}\nexport function setSelectedWidth(state, v) {\n const L = getSel(state)\n if (!L) return\n resizeInPlace(state, L, () => {\n L.width = v\n })\n render(state)\n state.notify()\n}\n\n// Labels live on the shape layer itself rather than as a separate text layer,\n// so they move, rotate and delete with the line they annotate.\n\nexport function setSelectedLabel(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n pushHistory(state)\n L.label = v\n render(state)\n emitChange(state)\n}\n\nexport function setSelectedLabelSize(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelSize = v\n render(state)\n state.notify()\n}\n\nexport function setSelectedLabelColor(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelColor = v\n render(state)\n state.notify()\n}\n\nexport function setSelectedLabelFont(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelFont = v\n render(state)\n state.notify()\n}\n\n/** Toggles a multi-point path between open and closed. */\nexport function setSelectedClosed(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape' || !L.points || L.points.length < 3) return\n pushHistory(state)\n L.closed = !!v\n render(state)\n emitChange(state)\n}\n\nexport function setSelectedLabelSide(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelSide = v === 'below' ? 'below' : 'above'\n render(state)\n state.notify()\n}\n\nexport function setSelectedLabelOffset(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelOffset = v\n render(state)\n state.notify()\n}\n\n/** Where the label sits along the shaft: 0 = start, 1 = end. */\nexport function setSelectedLabelPos(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelPos = Math.min(Math.max(v, 0), 1)\n render(state)\n state.notify()\n}\n\nexport function setSelectedLabelRotate(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelRotate = !!v\n render(state)\n state.notify()\n}\n\n/** Explicit multi-point drawing, so chaining points isn't a hidden gesture. */\nexport function setMultiPointMode(state, v) {\n state.multiPointMode = !!v\n state.notify()\n}\n\n// The ribbon's rotate/flip act on the whole image when nothing is selected,\n// and on just the selected layer when something is -- which is what people\n// expect after clicking a layer.\n\nexport function rotateSelected(state, deg) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n L.rotation = ((((L.rotation || 0) + deg) % 360) + 360) % 360\n render(state)\n state.statusText = `Layer rotated to ${Math.round(L.rotation)}°`\n emitChange(state)\n}\n\nexport function flipSelected(state, horizontal) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n if (horizontal) L.flipH = !L.flipH\n else L.flipV = !L.flipV\n render(state)\n state.statusText = horizontal ? 'Layer flipped H' : 'Layer flipped V'\n emitChange(state)\n}\n\n/** Horizontal nudge for text centred inside a closed shape. */\nexport function setSelectedLabelDx(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelDx = v\n render(state)\n state.notify()\n}\n\n/** Vertical nudge for text centred inside a closed shape. */\nexport function setSelectedLabelDy(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'shape') return\n L.labelDy = v\n render(state)\n state.notify()\n}\n"],"names":["resizeInPlace","state","L","mutate","keepingFixed","layerName","s","SHAPES","deleteLayer","id","pushHistory","l","render","emitChange","deleteSelected","duplicateSelected","getSel","copy","p","bringSelectedToFront","sendSelectedToBack","setAdjustment","key","value","setFilter","selectShapeType","setShapeFill","v","setShapeWidth","setBrushSize","setBrushStyle","setTextFont","setTextSize","setTextColor","setShapeColor","setDrawColor","applyModeCursor","setSelectedColor","setSelectedText","setSelectedFont","setSelectedTextSize","clampTextSize","setSelectedBoxWidth","clampBoxWidth","setSelectedShapeFill","setSelectedWidth","setSelectedLabel","setSelectedLabelSize","setSelectedLabelColor","setSelectedLabelFont","setSelectedClosed","setSelectedLabelSide","setSelectedLabelOffset","setSelectedLabelPos","setSelectedLabelRotate","setMultiPointMode","rotateSelected","deg","flipSelected","horizontal","setSelectedLabelDx","setSelectedLabelDy"],"mappings":"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"}
|
package/dist/index.es152.js
CHANGED
|
@@ -1,41 +1,147 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { supportsContextFilter as v, rasterizeWithFilter as C } from "./index.es165.js";
|
|
2
|
+
import { syncCanvasSize as m, render as g, baseFilter as p, paintLayer as w } from "./index.es145.js";
|
|
3
|
+
import { emit as l, emitChange as f, getState as y, resetAdjValues as S } from "./index.es144.js";
|
|
4
|
+
import { loadStickerImage as I } from "./index.es150.js";
|
|
5
|
+
function L(e) {
|
|
6
|
+
const n = (e.type || "").toLowerCase();
|
|
7
|
+
if (n === "image/heic" || n === "image/heif") return !0;
|
|
8
|
+
const i = e instanceof File ? e.name.toLowerCase() : "";
|
|
9
|
+
return i.endsWith(".heic") || i.endsWith(".heif");
|
|
10
|
+
}
|
|
11
|
+
function d(e, n) {
|
|
12
|
+
n(URL.createObjectURL(e));
|
|
13
|
+
}
|
|
14
|
+
function h(e, n) {
|
|
15
|
+
import("heic2any").then(
|
|
16
|
+
({ default: i }) => i({ blob: e, toType: "image/jpeg", quality: 0.8 })
|
|
17
|
+
).then(
|
|
18
|
+
(i) => d(Array.isArray(i) ? i[0] : i, n)
|
|
19
|
+
).catch(() => d(e, n));
|
|
20
|
+
}
|
|
21
|
+
function B(e, n, i) {
|
|
22
|
+
if (e.isLoadingImage = !0, e.notify(), !n) {
|
|
23
|
+
i(null);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (n instanceof HTMLCanvasElement) {
|
|
27
|
+
i(n.toDataURL());
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (typeof Blob < "u" && (n instanceof Blob || n instanceof File)) {
|
|
31
|
+
if (L(n)) {
|
|
32
|
+
if (typeof createImageBitmap == "function") {
|
|
33
|
+
createImageBitmap(n).then((r) => {
|
|
34
|
+
r.close(), d(n, i);
|
|
35
|
+
}).catch(() => h(n, i));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
h(n, i);
|
|
9
39
|
return;
|
|
10
40
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
d(n, i);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
i(n);
|
|
45
|
+
}
|
|
46
|
+
function T(e, n) {
|
|
47
|
+
const i = () => {
|
|
48
|
+
typeof n == "string" && n.startsWith("blob:") && URL.revokeObjectURL(n);
|
|
49
|
+
}, r = new Image();
|
|
50
|
+
r.crossOrigin = "anonymous", r.onload = () => {
|
|
51
|
+
let o = r.naturalWidth, a = r.naturalHeight;
|
|
52
|
+
const c = 2e3;
|
|
53
|
+
if (Math.max(o, a) > c) {
|
|
54
|
+
const t = c / Math.max(o, a);
|
|
55
|
+
o = Math.round(o * t), a = Math.round(a * t);
|
|
56
|
+
}
|
|
57
|
+
e.sourceCanvas.width = o, e.sourceCanvas.height = a, e.sourceCanvas.getContext("2d").drawImage(r, 0, 0, o, a), e.originalCanvas = document.createElement("canvas"), e.originalCanvas.width = o, e.originalCanvas.height = a, e.originalCanvas.getContext("2d").drawImage(e.sourceCanvas, 0, 0), i(), e.layers = [], e.selectedId = null, e.undoStack = [], e.redoStack = [], e.zoom = 1, S(e), e.mounted && m(e), g(e), e.mode = "select", e.isLoadingImage = !1, e.statusText = "Image loaded", l(e, "load", { width: o, height: a }), f(e);
|
|
58
|
+
}, r.onerror = () => {
|
|
59
|
+
i(), e.isLoadingImage = !1, e.statusText = "Could not load that image (CORS?)", console.warn(
|
|
60
|
+
"[ImageEditor] Failed to load image (likely a CORS issue on the source URL). Reset stays disabled since there is nothing to revert to.",
|
|
61
|
+
typeof n == "string" ? n.slice(0, 80) : n
|
|
62
|
+
), e.notify();
|
|
63
|
+
}, r.src = n;
|
|
64
|
+
}
|
|
65
|
+
function F(e, n) {
|
|
66
|
+
if (!n || !n.image) return;
|
|
67
|
+
const i = new Image();
|
|
68
|
+
i.onload = () => {
|
|
69
|
+
e.sourceCanvas.width = n.width || i.naturalWidth, e.sourceCanvas.height = n.height || i.naturalHeight, e.sourceCanvas.getContext("2d").drawImage(i, 0, 0, e.sourceCanvas.width, e.sourceCanvas.height), e.originalCanvas = document.createElement("canvas"), e.originalCanvas.width = e.sourceCanvas.width, e.originalCanvas.height = e.sourceCanvas.height, e.originalCanvas.getContext("2d").drawImage(i, 0, 0, e.sourceCanvas.width, e.sourceCanvas.height), e.layers = JSON.parse(JSON.stringify(n.layers || [])), e.layers.forEach((o) => {
|
|
70
|
+
o.id >= e.nextId && (e.nextId = o.id + 1);
|
|
71
|
+
}), Object.assign(e.adj, n.adjustments || {}), e.selectedId = null, e.undoStack = [], e.redoStack = [], e.zoom = 1, e.mounted && m(e), g(e), e.mode = "select", e.statusText = "State restored", l(e, "load", { restored: !0 }), f(e);
|
|
72
|
+
const r = [
|
|
73
|
+
...new Set(
|
|
74
|
+
e.layers.filter((o) => o.type === "sticker").map((o) => o.src)
|
|
75
|
+
)
|
|
76
|
+
];
|
|
77
|
+
r.length && Promise.all(
|
|
78
|
+
r.map((o) => I(e, o).catch(() => {
|
|
79
|
+
}))
|
|
80
|
+
).then(() => g(e));
|
|
81
|
+
}, i.src = n.image;
|
|
82
|
+
}
|
|
83
|
+
async function x(e) {
|
|
84
|
+
const n = document.createElement("canvas");
|
|
85
|
+
n.width = e.sourceCanvas.width, n.height = e.sourceCanvas.height;
|
|
86
|
+
const i = n.getContext("2d"), r = p(e);
|
|
87
|
+
if (v())
|
|
88
|
+
i.filter = r, i.drawImage(e.sourceCanvas, 0, 0), i.filter = "none";
|
|
89
|
+
else
|
|
90
|
+
try {
|
|
91
|
+
const o = await C(e.sourceCanvas, r);
|
|
92
|
+
i.drawImage(o, 0, 0);
|
|
93
|
+
} catch {
|
|
94
|
+
i.drawImage(e.sourceCanvas, 0, 0);
|
|
95
|
+
}
|
|
96
|
+
return e.layers.forEach((o) => {
|
|
97
|
+
o._editing || w(e, i, o);
|
|
98
|
+
}), n;
|
|
99
|
+
}
|
|
100
|
+
function k(e, n, i, r) {
|
|
101
|
+
const o = n.toDataURL(r), a = {
|
|
102
|
+
blob: i,
|
|
103
|
+
dataURL: o,
|
|
104
|
+
canvas: n,
|
|
105
|
+
width: n.width,
|
|
106
|
+
height: n.height,
|
|
107
|
+
type: i && i.type || r || "image/png",
|
|
108
|
+
state: y(e),
|
|
109
|
+
getBlob: (c, t) => new Promise((u) => n.toBlob((s) => u(s), c || "image/png", t)),
|
|
110
|
+
download: (c) => {
|
|
111
|
+
const t = URL.createObjectURL(i), u = document.createElement("a");
|
|
112
|
+
return u.href = t, u.download = c || "picture-studio.png", u.click(), setTimeout(() => URL.revokeObjectURL(t), 1e3), a;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
return a;
|
|
116
|
+
}
|
|
117
|
+
function O(e, n, i) {
|
|
118
|
+
return x(e).then(
|
|
119
|
+
(r) => new Promise((o) => {
|
|
120
|
+
r.toBlob(
|
|
121
|
+
(a) => o(k(e, r, a, n || "image/png")),
|
|
122
|
+
n || "image/png",
|
|
123
|
+
i
|
|
124
|
+
);
|
|
125
|
+
})
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
function M(e, n) {
|
|
129
|
+
if (!e.isSaving)
|
|
130
|
+
return e.isSaving = !0, e.notify(), O(e, "image/jpeg", 0.92).then((i) => {
|
|
131
|
+
l(e, "save", i);
|
|
132
|
+
const r = typeof e.config.onSave == "function" ? e.config.onSave(i, n) : void 0;
|
|
133
|
+
return Promise.resolve(r).finally(() => {
|
|
134
|
+
e.isSaving = !1, e.notify(), e.config.keepOpenOnSave || n.close();
|
|
135
|
+
});
|
|
136
|
+
}).catch(() => {
|
|
137
|
+
e.isSaving = !1, e.notify();
|
|
138
|
+
});
|
|
36
139
|
}
|
|
37
140
|
export {
|
|
38
|
-
|
|
39
|
-
|
|
141
|
+
T as doLoadImage,
|
|
142
|
+
M as doSave,
|
|
143
|
+
F as loadState,
|
|
144
|
+
B as normalizeSource,
|
|
145
|
+
O as produce
|
|
40
146
|
};
|
|
41
147
|
//# sourceMappingURL=index.es152.js.map
|
package/dist/index.es152.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es152.js","sources":["../src/components/organisms/image-editor/engine/stickers.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange } from './state.js'\nimport { render } from './rendering.js'\n\nexport function loadStickerImage(state, src) {\n return new Promise((resolve, reject) => {\n const cached = state.stickerImageCache.get(src)\n if (cached && cached.complete && cached.naturalWidth) {\n resolve(cached)\n return\n }\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => {\n state.stickerImageCache.set(src, img)\n resolve(img)\n }\n img.onerror = reject\n img.src = src\n })\n}\n\nexport function addSticker(state, src) {\n loadStickerImage(state, src)\n .then((img) => {\n pushHistory(state)\n const w = state.sourceCanvas.width * 0.25\n const h = w * (img.naturalHeight / img.naturalWidth || 1)\n const L = {\n id: state.nextId++,\n type: 'sticker',\n src,\n x: (state.sourceCanvas.width - w) / 2,\n y: (state.sourceCanvas.height - h) / 2,\n w,\n h,\n rotation: 0,\n flipH: false,\n flipV: false,\n }\n state.layers.push(L)\n render(state)\n state.mode = 'select'\n state.selectedId = L.id\n state.statusText = 'Sticker added'\n emitChange(state)\n })\n .catch(() => {\n state.statusText = 'Could not load that sticker (CORS?)'\n state.notify()\n })\n}\n"],"names":["loadStickerImage","state","src","resolve","reject","cached","img","addSticker","pushHistory","w","h","L","render","emitChange"],"mappings":";;;AAIO,SAASA,EAAiBC,GAAOC,GAAK;AAC3C,SAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,UAAMC,IAASJ,EAAM,kBAAkB,IAAIC,CAAG;AAC9C,QAAIG,KAAUA,EAAO,YAAYA,EAAO,cAAc;AACpD,MAAAF,EAAQE,CAAM;AACd;AAAA,IACF;AACA,UAAMC,IAAM,IAAI,MAAK;AACrB,IAAAA,EAAI,cAAc,aAClBA,EAAI,SAAS,MAAM;AACjB,MAAAL,EAAM,kBAAkB,IAAIC,GAAKI,CAAG,GACpCH,EAAQG,CAAG;AAAA,IACb,GACAA,EAAI,UAAUF,GACdE,EAAI,MAAMJ;AAAA,EACZ,CAAC;AACH;AAEO,SAASK,EAAWN,GAAOC,GAAK;AACrC,EAAAF,EAAiBC,GAAOC,CAAG,EACxB,KAAK,CAACI,MAAQ;AACb,IAAAE,EAAYP,CAAK;AACjB,UAAMQ,IAAIR,EAAM,aAAa,QAAQ,MAC/BS,IAAID,KAAKH,EAAI,gBAAgBA,EAAI,gBAAgB,IACjDK,IAAI;AAAA,MACR,IAAIV,EAAM;AAAA,MACV,MAAM;AAAA,MACN,KAAAC;AAAA,MACA,IAAID,EAAM,aAAa,QAAQQ,KAAK;AAAA,MACpC,IAAIR,EAAM,aAAa,SAASS,KAAK;AAAA,MACrC,GAAAD;AAAA,MACA,GAAAC;AAAA,MACA,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,IACf;AACM,IAAAT,EAAM,OAAO,KAAKU,CAAC,GACnBC,EAAOX,CAAK,GACZA,EAAM,OAAO,UACbA,EAAM,aAAaU,EAAE,IACrBV,EAAM,aAAa,iBACnBY,EAAWZ,CAAK;AAAA,EAClB,CAAC,EACA,MAAM,MAAM;AACX,IAAAA,EAAM,aAAa,uCACnBA,EAAM,OAAM;AAAA,EACd,CAAC;AACL;"}
|
|
1
|
+
{"version":3,"file":"index.es152.js","sources":["../src/components/organisms/image-editor/engine/save-export.js"],"sourcesContent":["import { rasterizeWithFilter, supportsContextFilter } from './canvas-filter.js'\nimport { render, syncCanvasSize, baseFilter, paintLayer } from './rendering.js'\nimport { emit, emitChange, getState, resetAdjValues } from './state.js'\nimport { loadStickerImage } from './stickers.js'\n\nfunction isHeic(file) {\n const type = (file.type || '').toLowerCase()\n if (type === 'image/heic' || type === 'image/heif') return true\n const name = file instanceof File ? file.name.toLowerCase() : ''\n return name.endsWith('.heic') || name.endsWith('.heif')\n}\n\nfunction toObjectURL(blob, cb) {\n cb(URL.createObjectURL(blob))\n}\n\nfunction convertHeicThenLoad(src, cb) {\n import('heic2any')\n .then(({ default: heic2any }) =>\n heic2any({ blob: src, toType: 'image/jpeg', quality: 0.8 })\n )\n .then((converted) =>\n toObjectURL(Array.isArray(converted) ? converted[0] : converted, cb)\n )\n .catch(() => toObjectURL(src, cb))\n}\n\nexport function normalizeSource(state, src, cb) {\n state.isLoadingImage = true\n state.notify()\n if (!src) {\n cb(null)\n return\n }\n if (src instanceof HTMLCanvasElement) {\n cb(src.toDataURL())\n return\n }\n if (\n typeof Blob !== 'undefined' &&\n (src instanceof Blob || src instanceof File)\n ) {\n if (isHeic(src)) {\n if (typeof createImageBitmap === 'function') {\n createImageBitmap(src)\n .then((bmp) => {\n bmp.close()\n toObjectURL(src, cb)\n })\n .catch(() => convertHeicThenLoad(src, cb))\n return\n }\n convertHeicThenLoad(src, cb)\n return\n }\n toObjectURL(src, cb)\n return\n }\n cb(src)\n}\n\nexport function doLoadImage(state, dataURL) {\n const revoke = () => {\n if (typeof dataURL === 'string' && dataURL.startsWith('blob:')) {\n URL.revokeObjectURL(dataURL)\n }\n }\n const im = new Image()\n im.crossOrigin = 'anonymous'\n im.onload = () => {\n let w = im.naturalWidth,\n h = im.naturalHeight\n const MAX = 2000\n if (Math.max(w, h) > MAX) {\n const s = MAX / Math.max(w, h)\n w = Math.round(w * s)\n h = Math.round(h * s)\n }\n state.sourceCanvas.width = w\n state.sourceCanvas.height = h\n state.sourceCanvas.getContext('2d').drawImage(im, 0, 0, w, h)\n state.originalCanvas = document.createElement('canvas')\n state.originalCanvas.width = w\n state.originalCanvas.height = h\n state.originalCanvas.getContext('2d').drawImage(state.sourceCanvas, 0, 0)\n revoke()\n state.layers = []\n state.selectedId = null\n state.undoStack = []\n state.redoStack = []\n state.zoom = 1\n resetAdjValues(state)\n if (state.mounted) syncCanvasSize(state)\n render(state)\n state.mode = 'select'\n state.isLoadingImage = false\n state.statusText = 'Image loaded'\n emit(state, 'load', { width: w, height: h })\n emitChange(state)\n }\n im.onerror = () => {\n revoke()\n state.isLoadingImage = false\n state.statusText = 'Could not load that image (CORS?)'\n // eslint-disable-next-line no-console\n console.warn(\n '[ImageEditor] Failed to load image (likely a CORS issue on the source URL). ' +\n 'Reset stays disabled since there is nothing to revert to.',\n typeof dataURL === 'string' ? dataURL.slice(0, 80) : dataURL\n )\n state.notify()\n }\n im.src = dataURL\n}\n\nexport function loadState(state, s) {\n if (!s || !s.image) return\n const im = new Image()\n im.onload = () => {\n state.sourceCanvas.width = s.width || im.naturalWidth\n state.sourceCanvas.height = s.height || im.naturalHeight\n state.sourceCanvas\n .getContext('2d')\n .drawImage(im, 0, 0, state.sourceCanvas.width, state.sourceCanvas.height)\n state.originalCanvas = document.createElement('canvas')\n state.originalCanvas.width = state.sourceCanvas.width\n state.originalCanvas.height = state.sourceCanvas.height\n state.originalCanvas\n .getContext('2d')\n .drawImage(im, 0, 0, state.sourceCanvas.width, state.sourceCanvas.height)\n state.layers = JSON.parse(JSON.stringify(s.layers || []))\n state.layers.forEach((L) => {\n if (L.id >= state.nextId) state.nextId = L.id + 1\n })\n Object.assign(state.adj, s.adjustments || {})\n state.selectedId = null\n state.undoStack = []\n state.redoStack = []\n state.zoom = 1\n if (state.mounted) syncCanvasSize(state)\n render(state)\n state.mode = 'select'\n state.statusText = 'State restored'\n emit(state, 'load', { restored: true })\n emitChange(state)\n const stickerSrcs = [\n ...new Set(\n state.layers.filter((L) => L.type === 'sticker').map((L) => L.src)\n ),\n ]\n if (stickerSrcs.length) {\n Promise.all(\n stickerSrcs.map((src) => loadStickerImage(state, src).catch(() => {}))\n ).then(() => render(state))\n }\n }\n im.src = s.image\n}\n\nasync function flatten(state) {\n const out = document.createElement('canvas')\n out.width = state.sourceCanvas.width\n out.height = state.sourceCanvas.height\n const o = out.getContext('2d')\n const filter = baseFilter(state)\n\n if (supportsContextFilter()) {\n o.filter = filter\n o.drawImage(state.sourceCanvas, 0, 0)\n o.filter = 'none'\n } else {\n try {\n const filtered = await rasterizeWithFilter(state.sourceCanvas, filter)\n o.drawImage(filtered, 0, 0)\n } catch {\n o.drawImage(state.sourceCanvas, 0, 0)\n }\n }\n\n state.layers.forEach((L) => {\n if (!L._editing) paintLayer(state, o, L)\n })\n return out\n}\n\nfunction buildResult(state, canvasEl, blob, type) {\n const dataURL = canvasEl.toDataURL(type || 'image/png')\n const result = {\n blob: blob,\n dataURL: dataURL,\n canvas: canvasEl,\n width: canvasEl.width,\n height: canvasEl.height,\n type: (blob && blob.type) || type || 'image/png',\n state: getState(state),\n getBlob: (t, q) =>\n new Promise((res) => canvasEl.toBlob((b) => res(b), t || 'image/png', q)),\n download: (filename) => {\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename || 'picture-studio.png'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n return result\n },\n }\n return result\n}\n\nexport function produce(state, type, quality) {\n return flatten(state).then(\n (canvasEl) =>\n new Promise((resolve) => {\n canvasEl.toBlob(\n (blob) =>\n resolve(buildResult(state, canvasEl, blob, type || 'image/png')),\n type || 'image/png',\n quality\n )\n })\n )\n}\n\nexport function doSave(state, self) {\n if (state.isSaving) return\n state.isSaving = true\n state.notify()\n return produce(state, 'image/jpeg', 0.92)\n .then((result) => {\n emit(state, 'save', result)\n const ret =\n typeof state.config.onSave === 'function'\n ? state.config.onSave(result, self)\n : undefined\n return Promise.resolve(ret).finally(() => {\n state.isSaving = false\n state.notify()\n if (!state.config.keepOpenOnSave) self.close()\n })\n })\n .catch(() => {\n state.isSaving = false\n state.notify()\n })\n}\n"],"names":["isHeic","file","type","name","toObjectURL","blob","cb","convertHeicThenLoad","src","heic2any","converted","normalizeSource","state","bmp","doLoadImage","dataURL","revoke","im","w","h","MAX","s","resetAdjValues","syncCanvasSize","render","emit","emitChange","loadState","L","stickerSrcs","loadStickerImage","flatten","out","o","filter","baseFilter","supportsContextFilter","filtered","rasterizeWithFilter","paintLayer","buildResult","canvasEl","result","getState","t","q","res","b","filename","url","a","produce","quality","resolve","doSave","self","ret"],"mappings":"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"}
|