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.es171.js
CHANGED
|
@@ -1,38 +1,259 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { Spline as v, Bookmark as f, Trash2 as S } from "lucide-react";
|
|
2
|
+
import e, { useState as E } from "react";
|
|
3
|
+
import { Button as m } from "./index.es9.js";
|
|
4
|
+
import { Input as g } from "./index.es11.js";
|
|
5
|
+
import { Textarea as h } from "./index.es16.js";
|
|
6
|
+
import { Slider as n } from "./index.es30.js";
|
|
7
|
+
import { Switch as N } from "./index.es15.js";
|
|
8
|
+
import { SingleSelect as r } from "./index.es29.js";
|
|
9
|
+
import { FONTS as u } from "./index.es143.js";
|
|
10
|
+
import { ColorPicker as y } from "./index.es177.js";
|
|
11
|
+
import { useImageEditorPortalContainer as C } from "./index.es137.js";
|
|
12
|
+
const k = [
|
|
13
|
+
{ label: "Outline only", value: "stroke" },
|
|
14
|
+
{ label: "Solid fill", value: "fill" }
|
|
15
|
+
], o = ["rect", "ellipse", "circle"], L = ["line", "dashedLine"], w = [
|
|
16
|
+
"line",
|
|
17
|
+
"dashedLine",
|
|
18
|
+
"arrow",
|
|
19
|
+
"dashedArrow",
|
|
20
|
+
"doubleArrow",
|
|
21
|
+
"dashedDoubleArrow"
|
|
22
|
+
];
|
|
23
|
+
function _({ selected: t, engine: l }) {
|
|
24
|
+
const s = C(), [d, c] = E(!1), [x, i] = E(""), p = () => t.type === "text" ? (t.text ?? "").trim().slice(0, 40) : t.label ? t.label.trim().slice(0, 40) : t.shape ?? t.type ?? "", b = () => {
|
|
25
|
+
l.saveSelectedLayer(x.trim() || void 0), c(!1), i("");
|
|
9
26
|
};
|
|
10
|
-
return /* @__PURE__ */
|
|
11
|
-
|
|
27
|
+
return /* @__PURE__ */ e.createElement("div", null, t.type === "text" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Text"), /* @__PURE__ */ e.createElement(
|
|
28
|
+
h,
|
|
12
29
|
{
|
|
13
|
-
className: "
|
|
30
|
+
className: "min-h-[52px]",
|
|
31
|
+
value: t.text ?? "",
|
|
32
|
+
onChange: (a) => l.setSelectedText(a.target.value)
|
|
33
|
+
}
|
|
34
|
+
), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Font"), /* @__PURE__ */ e.createElement(
|
|
35
|
+
r,
|
|
36
|
+
{
|
|
37
|
+
items: u,
|
|
38
|
+
value: t.font ?? "",
|
|
39
|
+
onValueChange: l.setSelectedFont,
|
|
40
|
+
container: s
|
|
41
|
+
}
|
|
42
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Size"), /* @__PURE__ */ e.createElement("span", null, t.size, "px")), /* @__PURE__ */ e.createElement(
|
|
43
|
+
n,
|
|
44
|
+
{
|
|
45
|
+
min: 10,
|
|
46
|
+
max: 240,
|
|
47
|
+
step: 1,
|
|
48
|
+
value: [t.size ?? 24],
|
|
49
|
+
onValueChange: ([a]) => l.setSelectedTextSize(a)
|
|
50
|
+
}
|
|
51
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Box size"), /* @__PURE__ */ e.createElement("span", null, t.boxWidth, "px")), /* @__PURE__ */ e.createElement(
|
|
52
|
+
n,
|
|
53
|
+
{
|
|
54
|
+
min: 20,
|
|
55
|
+
max: 2e3,
|
|
56
|
+
step: 1,
|
|
57
|
+
value: [t.boxWidth ?? 200],
|
|
58
|
+
onValueChange: ([a]) => l.setSelectedBoxWidth(a)
|
|
59
|
+
}
|
|
60
|
+
)), t.type === "shape" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Fill style"), /* @__PURE__ */ e.createElement(
|
|
61
|
+
r,
|
|
62
|
+
{
|
|
63
|
+
items: k,
|
|
64
|
+
value: t.fill ?? "stroke",
|
|
65
|
+
onValueChange: (a) => l.setSelectedShapeFill(a),
|
|
66
|
+
container: s
|
|
67
|
+
}
|
|
68
|
+
), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Thickness"), /* @__PURE__ */ e.createElement(
|
|
69
|
+
n,
|
|
70
|
+
{
|
|
71
|
+
min: 1,
|
|
72
|
+
max: 40,
|
|
73
|
+
step: 1,
|
|
74
|
+
value: [t.width ?? 6],
|
|
75
|
+
onValueChange: ([a]) => l.setSelectedWidth(a)
|
|
76
|
+
}
|
|
77
|
+
), L.includes(t.shape ?? "") && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", { className: "my-3 h-px bg-neutral-1" }), /* @__PURE__ */ e.createElement(
|
|
78
|
+
m,
|
|
79
|
+
{
|
|
80
|
+
variant: "secondary",
|
|
81
|
+
size: "sm",
|
|
82
|
+
onClick: l.continueSelectedLine,
|
|
83
|
+
prefixIcon: /* @__PURE__ */ e.createElement(v, { className: "h-4 w-4" })
|
|
84
|
+
},
|
|
85
|
+
"Continue this line"
|
|
86
|
+
), /* @__PURE__ */ e.createElement("p", { className: "mt-1.5 text-[11px] leading-snug text-light-4" }, "Reopens the line so you can click more corners onto the end.")), (w.includes(t.shape ?? "") || o.includes(t.shape ?? "")) && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", { className: "my-3 h-px bg-neutral-1" }), /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, o.includes(t.shape ?? "") || t.closed ? "Text inside shape" : "Label above line"), /* @__PURE__ */ e.createElement(
|
|
87
|
+
h,
|
|
88
|
+
{
|
|
89
|
+
className: "min-h-[44px]",
|
|
90
|
+
placeholder: "Add a caption…",
|
|
91
|
+
value: t.label ?? "",
|
|
92
|
+
onChange: (a) => l.setSelectedLabel(a.target.value)
|
|
93
|
+
}
|
|
94
|
+
), !!t.label && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Label font"), /* @__PURE__ */ e.createElement(
|
|
95
|
+
r,
|
|
96
|
+
{
|
|
97
|
+
items: u,
|
|
98
|
+
value: t.labelFont ?? u[1].value,
|
|
99
|
+
onValueChange: l.setSelectedLabelFont,
|
|
100
|
+
container: s
|
|
101
|
+
}
|
|
102
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Label size"), /* @__PURE__ */ e.createElement("span", null, t.labelSize ?? 42, "px")), /* @__PURE__ */ e.createElement(
|
|
103
|
+
n,
|
|
104
|
+
{
|
|
105
|
+
min: 10,
|
|
106
|
+
max: 200,
|
|
107
|
+
step: 1,
|
|
108
|
+
value: [t.labelSize ?? 42],
|
|
109
|
+
onValueChange: ([a]) => l.setSelectedLabelSize(a)
|
|
110
|
+
}
|
|
111
|
+
), !o.includes(t.shape ?? "") && !t.closed && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Label side"), /* @__PURE__ */ e.createElement(
|
|
112
|
+
r,
|
|
113
|
+
{
|
|
114
|
+
items: [
|
|
115
|
+
{ label: "Above the line", value: "above" },
|
|
116
|
+
{ label: "Below the line", value: "below" }
|
|
117
|
+
],
|
|
118
|
+
value: t.labelSide ?? "above",
|
|
119
|
+
onValueChange: (a) => l.setSelectedLabelSide(a),
|
|
120
|
+
container: s
|
|
121
|
+
}
|
|
122
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Distance from line"), /* @__PURE__ */ e.createElement("span", null, t.labelOffset ?? 10, "px")), /* @__PURE__ */ e.createElement(
|
|
123
|
+
n,
|
|
124
|
+
{
|
|
125
|
+
min: 0,
|
|
126
|
+
max: 200,
|
|
127
|
+
step: 1,
|
|
128
|
+
value: [t.labelOffset ?? 10],
|
|
129
|
+
onValueChange: ([a]) => l.setSelectedLabelOffset(a)
|
|
130
|
+
}
|
|
131
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Position along line"), /* @__PURE__ */ e.createElement("span", null, Math.round((t.labelPos ?? 0.5) * 100), "%")), /* @__PURE__ */ e.createElement(
|
|
132
|
+
n,
|
|
133
|
+
{
|
|
134
|
+
min: 0,
|
|
135
|
+
max: 100,
|
|
136
|
+
step: 1,
|
|
137
|
+
value: [Math.round((t.labelPos ?? 0.5) * 100)],
|
|
138
|
+
onValueChange: ([a]) => l.setSelectedLabelPos(a / 100)
|
|
139
|
+
}
|
|
140
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mt-3 flex items-center justify-between gap-3" }, /* @__PURE__ */ e.createElement("span", { className: "text-xs text-light-4" }, "Follow line angle"), /* @__PURE__ */ e.createElement(
|
|
141
|
+
N,
|
|
142
|
+
{
|
|
143
|
+
checked: t.labelRotate !== !1,
|
|
144
|
+
onCheckedChange: l.setSelectedLabelRotate
|
|
145
|
+
}
|
|
146
|
+
))), (o.includes(t.shape ?? "") || t.closed) && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Horizontal position"), /* @__PURE__ */ e.createElement("span", null, t.labelDx ?? 0, "px")), /* @__PURE__ */ e.createElement(
|
|
147
|
+
n,
|
|
148
|
+
{
|
|
149
|
+
min: -300,
|
|
150
|
+
max: 300,
|
|
151
|
+
step: 1,
|
|
152
|
+
value: [t.labelDx ?? 0],
|
|
153
|
+
onValueChange: ([a]) => l.setSelectedLabelDx(a)
|
|
154
|
+
}
|
|
155
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Vertical position"), /* @__PURE__ */ e.createElement("span", null, t.labelDy ?? 0, "px")), /* @__PURE__ */ e.createElement(
|
|
156
|
+
n,
|
|
157
|
+
{
|
|
158
|
+
min: -300,
|
|
159
|
+
max: 300,
|
|
160
|
+
step: 1,
|
|
161
|
+
value: [t.labelDy ?? 0],
|
|
162
|
+
onValueChange: ([a]) => l.setSelectedLabelDy(a)
|
|
163
|
+
}
|
|
164
|
+
))), (t.pointCount ?? 0) >= 3 && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Path"), /* @__PURE__ */ e.createElement(
|
|
165
|
+
r,
|
|
166
|
+
{
|
|
167
|
+
items: [
|
|
168
|
+
{ label: "Open line", value: "open" },
|
|
169
|
+
{ label: "Closed shape", value: "closed" }
|
|
170
|
+
],
|
|
171
|
+
value: t.closed ? "closed" : "open",
|
|
172
|
+
onValueChange: (a) => l.setSelectedClosed(a === "closed"),
|
|
173
|
+
container: s
|
|
174
|
+
}
|
|
175
|
+
)))), t.type === "stroke" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Brush size"), /* @__PURE__ */ e.createElement(
|
|
176
|
+
n,
|
|
177
|
+
{
|
|
178
|
+
min: 1,
|
|
179
|
+
max: 60,
|
|
180
|
+
step: 1,
|
|
181
|
+
value: [t.width ?? 8],
|
|
182
|
+
onValueChange: ([a]) => l.setSelectedWidth(a)
|
|
183
|
+
}
|
|
184
|
+
)), t.type !== "sticker" && /* @__PURE__ */ e.createElement(
|
|
185
|
+
y,
|
|
186
|
+
{
|
|
187
|
+
value: t.color ?? "#d24b2f",
|
|
188
|
+
onChange: l.setSelectedColor
|
|
189
|
+
}
|
|
190
|
+
), /* @__PURE__ */ e.createElement("div", { className: "my-3.5 h-px bg-neutral-1" }), /* @__PURE__ */ e.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ e.createElement(
|
|
191
|
+
m,
|
|
192
|
+
{
|
|
193
|
+
variant: "secondary",
|
|
194
|
+
size: "sm",
|
|
195
|
+
onClick: l.bringSelectedToFront
|
|
196
|
+
},
|
|
197
|
+
"Bring to front"
|
|
198
|
+
), /* @__PURE__ */ e.createElement(
|
|
199
|
+
m,
|
|
200
|
+
{
|
|
201
|
+
variant: "secondary",
|
|
202
|
+
size: "sm",
|
|
203
|
+
onClick: l.sendSelectedToBack
|
|
204
|
+
},
|
|
205
|
+
"Send to back"
|
|
206
|
+
), /* @__PURE__ */ e.createElement(
|
|
207
|
+
m,
|
|
208
|
+
{
|
|
209
|
+
variant: "secondary",
|
|
210
|
+
size: "sm",
|
|
211
|
+
onClick: l.duplicateSelected
|
|
212
|
+
},
|
|
213
|
+
"Duplicate"
|
|
214
|
+
), d ? /* @__PURE__ */ e.createElement("div", { className: "rounded-lg border border-neutral-2 bg-rest-s1 p-2" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Layer name"), /* @__PURE__ */ e.createElement(
|
|
215
|
+
g,
|
|
216
|
+
{
|
|
217
|
+
autoFocus: !0,
|
|
218
|
+
value: x,
|
|
219
|
+
placeholder: p() || "Layer name",
|
|
220
|
+
onChange: (a) => i(a.target.value),
|
|
221
|
+
onKeyDown: (a) => {
|
|
222
|
+
a.key === "Enter" && b(), a.key === "Escape" && c(!1);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
), /* @__PURE__ */ e.createElement("div", { className: "mt-2 flex gap-2" }, /* @__PURE__ */ e.createElement(m, { size: "sm", onClick: b, title: "Save" }), /* @__PURE__ */ e.createElement(
|
|
226
|
+
m,
|
|
227
|
+
{
|
|
228
|
+
variant: "secondary",
|
|
229
|
+
size: "sm",
|
|
230
|
+
onClick: () => c(!1),
|
|
231
|
+
title: "Cancel"
|
|
232
|
+
}
|
|
233
|
+
))) : /* @__PURE__ */ e.createElement(
|
|
234
|
+
m,
|
|
235
|
+
{
|
|
236
|
+
variant: "secondary",
|
|
237
|
+
size: "sm",
|
|
14
238
|
onClick: () => {
|
|
15
|
-
|
|
16
|
-
},
|
|
17
|
-
role: "button",
|
|
18
|
-
onKeyDown: (t) => {
|
|
19
|
-
t.key === "Enter" && o();
|
|
239
|
+
i(p()), c(!0);
|
|
20
240
|
},
|
|
21
|
-
|
|
241
|
+
prefixIcon: /* @__PURE__ */ e.createElement(f, { className: "h-4 w-4" })
|
|
22
242
|
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
243
|
+
"Save for reuse"
|
|
244
|
+
), /* @__PURE__ */ e.createElement(
|
|
245
|
+
m,
|
|
246
|
+
{
|
|
247
|
+
variant: "secondary",
|
|
248
|
+
size: "sm",
|
|
249
|
+
onClick: l.deleteSelected,
|
|
250
|
+
prefixIcon: /* @__PURE__ */ e.createElement(S, { className: "h-4 w-4" }),
|
|
251
|
+
className: "text-danger-1"
|
|
252
|
+
},
|
|
253
|
+
"Delete layer"
|
|
254
|
+
)));
|
|
255
|
+
}
|
|
35
256
|
export {
|
|
36
|
-
|
|
257
|
+
_ as PanelSelected
|
|
37
258
|
};
|
|
38
259
|
//# sourceMappingURL=index.es171.js.map
|
package/dist/index.es171.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es171.js","sources":["../src/components/organisms/navbar/components/notification-panel/components/notification-card/notification-card.tsx"],"sourcesContent":["import { FC } from 'react'\nimport { NotificationCardProps } from './notification-card.types'\nimport * as React from 'react'\nimport { Clock4 } from 'lucide-react'\nimport { convertEpochTime } from './notification.utils'\nimport { Avatar } from '@/components/atoms/avatar'\nimport { Typography } from '@/components/atoms/typography'\n\nconst NotificationCard: FC<NotificationCardProps> = (notification) => {\n const getInitials = (name: string): string => {\n if (!name) {\n return ''\n }\n return name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .toUpperCase()\n }\n\n const onCardClick = () => {\n if (typeof window !== 'undefined' && notification?.action?.redirect_url)\n window.location.href = notification?.action?.redirect_url\n }\n\n return (\n <div\n className=\"flex flex-row items-start justify-start gap-2 p-3 border-b border-neutral-1 bg-light-1 hover:cursor-pointer\"\n onClick={() => {\n onCardClick()\n }}\n role=\"button\"\n onKeyDown={(event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n onCardClick()\n }\n }}\n tabIndex={0}\n >\n <Avatar\n fallback={getInitials(notification.user.first_name)}\n imageSrc={notification.user.profile_url}\n alt={getInitials(notification.user.first_name)}\n size=\"md\"\n />\n <div className=\"flex flex-col gap-1\">\n <Typography variant=\"body3\" className=\"text-light-2 hover:underline\">\n {notification.title}\n </Typography>\n <Typography variant=\"body4\" className=\"text-light-3\">\n {notification.description}\n </Typography>\n\n <div className=\"flex flex-row gap-[6px]\">\n <Clock4 size={16} className=\"stroke-light-2\" />\n <Typography variant=\"body6\" className=\"text-light-3\">\n {convertEpochTime(Number(notification.timestamp))}\n </Typography>\n </div>\n </div>\n </div>\n )\n}\n\nexport default NotificationCard\n"],"names":["NotificationCard","notification","getInitials","name","word","onCardClick","React","event","Avatar","Typography","Clock4","convertEpochTime"],"mappings":";;;;;AAQA,MAAMA,IAA8C,CAACC,MAAiB;AACpE,QAAMC,IAAc,CAACC,MACdA,IAGEA,EACJ,MAAM,GAAG,EACT,IAAI,CAACC,MAASA,EAAK,CAAC,CAAC,EACrB,KAAK,EAAE,EACP,YAAA,IANM,IASLC,IAAc,MAAM;AACxB,IAAI,OAAO,SAAW,OAAeJ,GAAc,QAAQ,iBACzD,OAAO,SAAS,OAAOA,GAAc,QAAQ;AAAA,EACjD;AAEA,SACE,gBAAAK,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,MAAM;AACb,QAAAD,EAAA;AAAA,MACF;AAAA,MACA,MAAK;AAAA,MACL,WAAW,CAACE,MAA+B;AACzC,QAAIA,EAAM,QAAQ,WAChBF,EAAA;AAAA,MAEJ;AAAA,MACA,UAAU;AAAA,IAAA;AAAA,IAEV,gBAAAC,EAAA;AAAA,MAACE;AAAAA,MAAA;AAAA,QACC,UAAUN,EAAYD,EAAa,KAAK,UAAU;AAAA,QAClD,UAAUA,EAAa,KAAK;AAAA,QAC5B,KAAKC,EAAYD,EAAa,KAAK,UAAU;AAAA,QAC7C,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAEP,gBAAAK,EAAA,cAAC,SAAI,WAAU,sBAAA,mCACZG,GAAA,EAAW,SAAQ,SAAQ,WAAU,kCACnCR,EAAa,KAChB,mCACCQ,GAAA,EAAW,SAAQ,SAAQ,WAAU,kBACnCR,EAAa,WAChB,GAEA,gBAAAK,EAAA,cAAC,SAAI,WAAU,0BAAA,mCACZI,GAAA,EAAO,MAAM,IAAI,WAAU,iBAAA,CAAiB,GAC7C,gBAAAJ,EAAA,cAACG,GAAA,EAAW,SAAQ,SAAQ,WAAU,kBACnCE,EAAiB,OAAOV,EAAa,SAAS,CAAC,CAClD,CACF,CACF;AAAA,EAAA;AAGN;"}
|
|
1
|
+
{"version":3,"file":"index.es171.js","sources":["../src/components/organisms/image-editor/components/panel-selected.tsx"],"sourcesContent":["import { Bookmark, Spline, Trash2 } from 'lucide-react'\nimport React, { useState } from 'react'\n\nimport { Button } from '@/components/atoms/button'\nimport { Input } from '@/components/atoms/input'\nimport { Textarea } from '@/components/atoms/textarea'\nimport { Slider } from '@/components/molecules/slider'\nimport { Switch } from '@/components/atoms/switch'\nimport { SingleSelect } from '@/components/molecules/single-select'\n\nimport {\n ImageEditorEngine,\n ImageEditorSelectedLayer,\n} from '../image-editor.types'\nimport { FONTS } from '../picture-studio-engine'\nimport { ColorPicker } from './color-picker'\nimport { useImageEditorPortalContainer } from './portal-context'\n\ninterface PanelSelectedProps {\n selected: ImageEditorSelectedLayer\n engine: ImageEditorEngine\n}\n\nconst FILL_ITEMS = [\n { label: 'Outline only', value: 'stroke' },\n { label: 'Solid fill', value: 'fill' },\n]\n\nconst CLOSED_SHAPES = ['rect', 'ellipse', 'circle']\n\nconst MULTI_POINT_SHAPES = ['line', 'dashedLine']\n\nconst DIRECTIONAL_SHAPES = [\n 'line',\n 'dashedLine',\n 'arrow',\n 'dashedArrow',\n 'doubleArrow',\n 'dashedDoubleArrow',\n]\n\nexport function PanelSelected({ selected, engine }: PanelSelectedProps) {\n const container = useImageEditorPortalContainer()\n const [naming, setNaming] = useState(false)\n const [layerName, setLayerName] = useState('')\n\n const suggestedName = () => {\n if (selected.type === 'text')\n return (selected.text ?? '').trim().slice(0, 40)\n if (selected.label) return selected.label.trim().slice(0, 40)\n return selected.shape ?? selected.type ?? ''\n }\n\n const commitSave = () => {\n engine.saveSelectedLayer(layerName.trim() || undefined)\n setNaming(false)\n setLayerName('')\n }\n return (\n <div>\n {selected.type === 'text' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Text</span>\n <Textarea\n className=\"min-h-[52px]\"\n value={selected.text ?? ''}\n onChange={(e) => engine.setSelectedText(e.target.value)}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">Font</span>\n <SingleSelect\n items={FONTS}\n value={selected.font ?? ''}\n onValueChange={engine.setSelectedFont}\n container={container}\n />\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Size</span>\n <span>{selected.size}px</span>\n </div>\n <Slider\n min={10}\n max={240}\n step={1}\n value={[selected.size ?? 24]}\n onValueChange={([v]) => engine.setSelectedTextSize(v)}\n />\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Box size</span>\n <span>{selected.boxWidth}px</span>\n </div>\n <Slider\n min={20}\n max={2000}\n step={1}\n value={[selected.boxWidth ?? 200]}\n onValueChange={([v]) => engine.setSelectedBoxWidth(v)}\n />\n </div>\n )}\n\n {selected.type === 'shape' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Fill style</span>\n <SingleSelect\n items={FILL_ITEMS}\n value={selected.fill ?? 'stroke'}\n onValueChange={(v) =>\n engine.setSelectedShapeFill(v as 'stroke' | 'fill')\n }\n container={container}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Thickness\n </span>\n <Slider\n min={1}\n max={40}\n step={1}\n value={[selected.width ?? 6]}\n onValueChange={([v]) => engine.setSelectedWidth(v)}\n />\n\n {MULTI_POINT_SHAPES.includes(selected.shape ?? '') && (\n <>\n <div className=\"my-3 h-px bg-neutral-1\" />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.continueSelectedLine}\n prefixIcon={<Spline className=\"h-4 w-4\" />}\n >\n Continue this line\n </Button>\n <p className=\"mt-1.5 text-[11px] leading-snug text-light-4\">\n Reopens the line so you can click more corners onto the end.\n </p>\n </>\n )}\n\n {(DIRECTIONAL_SHAPES.includes(selected.shape ?? '') ||\n CLOSED_SHAPES.includes(selected.shape ?? '')) && (\n <>\n <div className=\"my-3 h-px bg-neutral-1\" />\n <span className=\"mb-1 block text-xs text-light-4\">\n {CLOSED_SHAPES.includes(selected.shape ?? '') || selected.closed\n ? 'Text inside shape'\n : 'Label above line'}\n </span>\n <Textarea\n className=\"min-h-[44px]\"\n placeholder=\"Add a caption…\"\n value={selected.label ?? ''}\n onChange={(e) => engine.setSelectedLabel(e.target.value)}\n />\n {!!selected.label && (\n <>\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Label font\n </span>\n <SingleSelect\n items={FONTS}\n value={selected.labelFont ?? FONTS[1].value}\n onValueChange={engine.setSelectedLabelFont}\n container={container}\n />\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Label size</span>\n <span>{selected.labelSize ?? 42}px</span>\n </div>\n <Slider\n min={10}\n max={200}\n step={1}\n value={[selected.labelSize ?? 42]}\n onValueChange={([v]) => engine.setSelectedLabelSize(v)}\n />\n\n {!CLOSED_SHAPES.includes(selected.shape ?? '') &&\n !selected.closed && (\n <>\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Label side\n </span>\n <SingleSelect\n items={[\n { label: 'Above the line', value: 'above' },\n { label: 'Below the line', value: 'below' },\n ]}\n value={selected.labelSide ?? 'above'}\n onValueChange={(v) =>\n engine.setSelectedLabelSide(v as 'above' | 'below')\n }\n container={container}\n />\n\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Distance from line</span>\n <span>{selected.labelOffset ?? 10}px</span>\n </div>\n <Slider\n min={0}\n max={200}\n step={1}\n value={[selected.labelOffset ?? 10]}\n onValueChange={([v]) =>\n engine.setSelectedLabelOffset(v)\n }\n />\n\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Position along line</span>\n <span>\n {Math.round((selected.labelPos ?? 0.5) * 100)}%\n </span>\n </div>\n <Slider\n min={0}\n max={100}\n step={1}\n value={[Math.round((selected.labelPos ?? 0.5) * 100)]}\n onValueChange={([v]) =>\n engine.setSelectedLabelPos(v / 100)\n }\n />\n\n <div className=\"mt-3 flex items-center justify-between gap-3\">\n <span className=\"text-xs text-light-4\">\n Follow line angle\n </span>\n <Switch\n checked={selected.labelRotate !== false}\n onCheckedChange={engine.setSelectedLabelRotate}\n />\n </div>\n </>\n )}\n\n {(CLOSED_SHAPES.includes(selected.shape ?? '') ||\n selected.closed) && (\n <>\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Horizontal position</span>\n <span>{selected.labelDx ?? 0}px</span>\n </div>\n <Slider\n min={-300}\n max={300}\n step={1}\n value={[selected.labelDx ?? 0]}\n onValueChange={([v]) => engine.setSelectedLabelDx(v)}\n />\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Vertical position</span>\n <span>{selected.labelDy ?? 0}px</span>\n </div>\n <Slider\n min={-300}\n max={300}\n step={1}\n value={[selected.labelDy ?? 0]}\n onValueChange={([v]) => engine.setSelectedLabelDy(v)}\n />\n </>\n )}\n </>\n )}\n {(selected.pointCount ?? 0) >= 3 && (\n <>\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Path\n </span>\n <SingleSelect\n items={[\n { label: 'Open line', value: 'open' },\n { label: 'Closed shape', value: 'closed' },\n ]}\n value={selected.closed ? 'closed' : 'open'}\n onValueChange={(v) =>\n engine.setSelectedClosed(v === 'closed')\n }\n container={container}\n />\n </>\n )}\n </>\n )}\n </div>\n )}\n\n {selected.type === 'stroke' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Brush size</span>\n <Slider\n min={1}\n max={60}\n step={1}\n value={[selected.width ?? 8]}\n onValueChange={([v]) => engine.setSelectedWidth(v)}\n />\n </div>\n )}\n\n {selected.type !== 'sticker' && (\n <ColorPicker\n value={selected.color ?? '#d24b2f'}\n onChange={engine.setSelectedColor}\n />\n )}\n\n <div className=\"my-3.5 h-px bg-neutral-1\" />\n\n <div className=\"flex flex-col gap-2\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.bringSelectedToFront}\n >\n Bring to front\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.sendSelectedToBack}\n >\n Send to back\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.duplicateSelected}\n >\n Duplicate\n </Button>\n {naming ? (\n <div className=\"rounded-lg border border-neutral-2 bg-rest-s1 p-2\">\n <span className=\"mb-1 block text-xs text-light-4\">Layer name</span>\n <Input\n autoFocus\n value={layerName}\n placeholder={suggestedName() || 'Layer name'}\n onChange={(e) => setLayerName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commitSave()\n if (e.key === 'Escape') setNaming(false)\n }}\n />\n <div className=\"mt-2 flex gap-2\">\n <Button size=\"sm\" onClick={commitSave} title=\"Save\" />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => setNaming(false)}\n title=\"Cancel\"\n />\n </div>\n </div>\n ) : (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setLayerName(suggestedName())\n setNaming(true)\n }}\n prefixIcon={<Bookmark className=\"h-4 w-4\" />}\n >\n Save for reuse\n </Button>\n )}\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.deleteSelected}\n prefixIcon={<Trash2 className=\"h-4 w-4\" />}\n className=\"text-danger-1\"\n >\n Delete layer\n </Button>\n </div>\n </div>\n )\n}\n"],"names":["FILL_ITEMS","CLOSED_SHAPES","MULTI_POINT_SHAPES","DIRECTIONAL_SHAPES","PanelSelected","selected","engine","container","useImageEditorPortalContainer","naming","setNaming","useState","layerName","setLayerName","suggestedName","commitSave","React","Textarea","e","SingleSelect","FONTS","Slider","v","Button","Spline","Switch","ColorPicker","Input","Bookmark","Trash2"],"mappings":"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"}
|
package/dist/index.es172.js
CHANGED
|
@@ -1,14 +1,66 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { Bookmark as f, SearchIcon as v, Loader2 as E, Plus as b, Trash2 as N } from "lucide-react";
|
|
2
|
+
import e, { useState as o, useEffect as S } from "react";
|
|
3
|
+
import { Input as k } from "./index.es11.js";
|
|
4
|
+
const L = {
|
|
5
|
+
text: "Text",
|
|
6
|
+
shape: "Shape",
|
|
7
|
+
stroke: "Drawing",
|
|
8
|
+
sticker: "Sticker"
|
|
9
|
+
}, w = 350;
|
|
10
|
+
function R({ ui: r, engine: a }) {
|
|
11
|
+
const [l, u] = o(""), [m, n] = o(null), [p, c] = o(!1), i = r.savedLayers ?? [], x = r.canSearchSavedLayers || i.length > 0;
|
|
12
|
+
if (S(() => {
|
|
13
|
+
const t = l.trim();
|
|
14
|
+
if (!t) {
|
|
15
|
+
n(null), c(!1);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
c(!0);
|
|
19
|
+
let s = !1;
|
|
20
|
+
const y = setTimeout(() => {
|
|
21
|
+
a.searchSavedLayers(t).then((g) => !s && n(g)).catch(() => !s && n([])).finally(() => !s && c(!1));
|
|
22
|
+
}, w);
|
|
23
|
+
return () => {
|
|
24
|
+
s = !0, clearTimeout(y);
|
|
25
|
+
};
|
|
26
|
+
}, [l, a]), !x) return null;
|
|
27
|
+
const h = m ?? i, d = m !== null;
|
|
28
|
+
return /* @__PURE__ */ e.createElement("div", { className: "mt-4 border-t border-neutral-1 pt-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-2 flex items-center gap-1.5 text-xs font-medium text-light-2" }, /* @__PURE__ */ e.createElement(f, { className: "h-3.5 w-3.5" }), "Saved layers"), /* @__PURE__ */ e.createElement("div", { className: "relative mb-2" }, /* @__PURE__ */ e.createElement(
|
|
29
|
+
k,
|
|
30
|
+
{
|
|
31
|
+
value: l,
|
|
32
|
+
onChange: (t) => u(t.target.value),
|
|
33
|
+
placeholder: "Search saved layers",
|
|
34
|
+
className: "pl-2 bg-light-1",
|
|
35
|
+
prefix: /* @__PURE__ */ e.createElement(v, { className: "h-5 w-5 text-light-4" }),
|
|
36
|
+
"aria-label": "Search saved layers"
|
|
37
|
+
}
|
|
38
|
+
), p && /* @__PURE__ */ e.createElement(E, { className: "absolute right-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 animate-spin text-light-4" })), h.length === 0 ? /* @__PURE__ */ e.createElement("p", { className: "px-0.5 py-2 text-xs text-light-4" }, d ? "No layers match that." : "Nothing saved yet.") : /* @__PURE__ */ e.createElement("ul", { className: "flex flex-col gap-1" }, h.map((t) => /* @__PURE__ */ e.createElement("li", { key: t.id, className: "flex items-center gap-1" }, /* @__PURE__ */ e.createElement(
|
|
39
|
+
"button",
|
|
40
|
+
{
|
|
41
|
+
type: "button",
|
|
42
|
+
onClick: () => d ? a.insertSavedLayerEntry(
|
|
43
|
+
t
|
|
44
|
+
) : a.insertSavedLayer(t.id),
|
|
45
|
+
disabled: !r.hasImage,
|
|
46
|
+
title: `Add "${t.name}"`,
|
|
47
|
+
className: "flex min-h-9 flex-1 items-center gap-2 overflow-hidden rounded-lg border border-neutral-2 bg-rest-s1 px-2.5 text-left text-xs hover:bg-hover-s1 disabled:pointer-events-none disabled:opacity-50"
|
|
48
|
+
},
|
|
49
|
+
/* @__PURE__ */ e.createElement(b, { className: "h-4 w-4 shrink-0 text-light-4" }),
|
|
50
|
+
/* @__PURE__ */ e.createElement("span", { className: "truncate text-light-2" }, t.name),
|
|
51
|
+
/* @__PURE__ */ e.createElement("span", { className: "ml-auto shrink-0 text-[10px] uppercase tracking-wide text-light-4" }, L[("type" in t ? t.type : t.layer?.type) ?? ""] ?? "")
|
|
52
|
+
), /* @__PURE__ */ e.createElement(
|
|
53
|
+
"button",
|
|
54
|
+
{
|
|
55
|
+
type: "button",
|
|
56
|
+
onClick: () => a.deleteSavedLayer(t.id),
|
|
57
|
+
"aria-label": `Delete saved layer ${t.name}`,
|
|
58
|
+
className: "flex min-h-9 w-9 shrink-0 items-center justify-center rounded-lg text-light-4 hover:bg-hover-s1 hover:text-danger-1"
|
|
59
|
+
},
|
|
60
|
+
/* @__PURE__ */ e.createElement(N, { className: "h-3.5 w-3.5" })
|
|
61
|
+
)))));
|
|
62
|
+
}
|
|
11
63
|
export {
|
|
12
|
-
|
|
64
|
+
R as SavedLayersList
|
|
13
65
|
};
|
|
14
66
|
//# sourceMappingURL=index.es172.js.map
|
package/dist/index.es172.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es172.js","sources":["../src/components/organisms/
|
|
1
|
+
{"version":3,"file":"index.es172.js","sources":["../src/components/organisms/image-editor/components/saved-layers-list.tsx"],"sourcesContent":["import { Bookmark, Loader2, Plus, SearchIcon, Trash2 } from 'lucide-react'\nimport React, { useEffect, useState } from 'react'\n\nimport { Input } from '@/components/atoms/input'\n\nimport {\n ImageEditorEngine,\n ImageEditorSavedLayer,\n ImageEditorUiState,\n} from '../image-editor.types'\n\ninterface SavedLayersListProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n}\n\nconst TYPE_LABEL: Record<string, string> = {\n text: 'Text',\n shape: 'Shape',\n stroke: 'Drawing',\n sticker: 'Sticker',\n}\n\nconst SEARCH_DEBOUNCE_MS = 350\n\nexport function SavedLayersList({ ui, engine }: SavedLayersListProps) {\n const [query, setQuery] = useState('')\n const [results, setResults] = useState<ImageEditorSavedLayer[] | null>(null)\n const [searching, setSearching] = useState(false)\n\n const saved = ui.savedLayers ?? []\n const searchable = ui.canSearchSavedLayers || saved.length > 0\n\n useEffect(() => {\n const q = query.trim()\n if (!q) {\n setResults(null)\n setSearching(false)\n return\n }\n setSearching(true)\n let cancelled = false\n const t = setTimeout(() => {\n engine\n .searchSavedLayers(q)\n // A slow response for an old query must not overwrite a newer one.\n .then((r) => !cancelled && setResults(r))\n .catch(() => !cancelled && setResults([]))\n .finally(() => !cancelled && setSearching(false))\n }, SEARCH_DEBOUNCE_MS)\n return () => {\n cancelled = true\n clearTimeout(t)\n }\n }, [query, engine])\n\n if (!searchable) return null\n\n const rows = results ?? saved\n const isSearchResults = results !== null\n\n return (\n <div className=\"mt-4 border-t border-neutral-1 pt-3.5\">\n <span className=\"mb-2 flex items-center gap-1.5 text-xs font-medium text-light-2\">\n <Bookmark className=\"h-3.5 w-3.5\" />\n Saved layers\n </span>\n\n <div className=\"relative mb-2\">\n <Input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Search saved layers\"\n className=\"pl-2 bg-light-1\"\n prefix={<SearchIcon className='h-5 w-5 text-light-4'/>}\n aria-label=\"Search saved layers\"\n />\n {searching && (\n <Loader2 className=\"absolute right-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 animate-spin text-light-4\" />\n )}\n </div>\n\n {rows.length === 0 ? (\n <p className=\"px-0.5 py-2 text-xs text-light-4\">\n {isSearchResults ? 'No layers match that.' : 'Nothing saved yet.'}\n </p>\n ) : (\n <ul className=\"flex flex-col gap-1\">\n {rows.map((item) => (\n <li key={item.id} className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() =>\n isSearchResults\n ? engine.insertSavedLayerEntry(\n item as ImageEditorSavedLayer\n )\n : engine.insertSavedLayer(item.id)\n }\n disabled={!ui.hasImage}\n title={`Add \"${item.name}\"`}\n className=\"flex min-h-9 flex-1 items-center gap-2 overflow-hidden rounded-lg border border-neutral-2 bg-rest-s1 px-2.5 text-left text-xs hover:bg-hover-s1 disabled:pointer-events-none disabled:opacity-50\"\n >\n <Plus className=\"h-4 w-4 shrink-0 text-light-4\" />\n <span className=\"truncate text-light-2\">{item.name}</span>\n <span className=\"ml-auto shrink-0 text-[10px] uppercase tracking-wide text-light-4\">\n {TYPE_LABEL[\n ('type' in item\n ? (item.type as string)\n : ((item as ImageEditorSavedLayer).layer\n ?.type as string)) ?? ''\n ] ?? ''}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => engine.deleteSavedLayer(item.id)}\n aria-label={`Delete saved layer ${item.name}`}\n className=\"flex min-h-9 w-9 shrink-0 items-center justify-center rounded-lg text-light-4 hover:bg-hover-s1 hover:text-danger-1\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n"],"names":["TYPE_LABEL","SEARCH_DEBOUNCE_MS","SavedLayersList","ui","engine","query","setQuery","useState","results","setResults","searching","setSearching","saved","searchable","useEffect","q","cancelled","t","r","rows","isSearchResults","React","Bookmark","Input","e","SearchIcon","Loader2","item","Plus","Trash2"],"mappings":";;;AAgBA,MAAMA,IAAqC;AAAA,EACzC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AACX,GAEMC,IAAqB;AAEpB,SAASC,EAAgB,EAAE,IAAAC,GAAI,QAAAC,KAAgC;AACpE,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAS,EAAE,GAC/B,CAACC,GAASC,CAAU,IAAIF,EAAyC,IAAI,GACrE,CAACG,GAAWC,CAAY,IAAIJ,EAAS,EAAK,GAE1CK,IAAQT,EAAG,eAAe,CAAA,GAC1BU,IAAaV,EAAG,wBAAwBS,EAAM,SAAS;AAyB7D,MAvBAE,EAAU,MAAM;AACd,UAAMC,IAAIV,EAAM,KAAA;AAChB,QAAI,CAACU,GAAG;AACN,MAAAN,EAAW,IAAI,GACfE,EAAa,EAAK;AAClB;AAAA,IACF;AACA,IAAAA,EAAa,EAAI;AACjB,QAAIK,IAAY;AAChB,UAAMC,IAAI,WAAW,MAAM;AACzB,MAAAb,EACG,kBAAkBW,CAAC,EAEnB,KAAK,CAACG,MAAM,CAACF,KAAaP,EAAWS,CAAC,CAAC,EACvC,MAAM,MAAM,CAACF,KAAaP,EAAW,CAAA,CAAE,CAAC,EACxC,QAAQ,MAAM,CAACO,KAAaL,EAAa,EAAK,CAAC;AAAA,IACpD,GAAGV,CAAkB;AACrB,WAAO,MAAM;AACX,MAAAe,IAAY,IACZ,aAAaC,CAAC;AAAA,IAChB;AAAA,EACF,GAAG,CAACZ,GAAOD,CAAM,CAAC,GAEd,CAACS,EAAY,QAAO;AAExB,QAAMM,IAAOX,KAAWI,GAClBQ,IAAkBZ,MAAY;AAEpC,yCACG,OAAA,EAAI,WAAU,2CACba,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,kEAAA,GACdA,gBAAAA,EAAA,cAACC,GAAA,EAAS,WAAU,eAAc,GAAE,cAEtC,GAEAD,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,gBAAA,GACbA,gBAAAA,EAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAOlB;AAAA,MACP,UAAU,CAACmB,MAAMlB,EAASkB,EAAE,OAAO,KAAK;AAAA,MACxC,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,QAAQH,gBAAAA,EAAA,cAACI,GAAA,EAAW,WAAU,wBAAsB;AAAA,MACpD,cAAW;AAAA,IAAA;AAAA,EAAA,GAEZf,KACCW,gBAAAA,EAAA,cAACK,GAAA,EAAQ,WAAU,qFAAoF,CAE3G,GAECP,EAAK,WAAW,IACfE,gBAAAA,EAAA,cAAC,KAAA,EAAE,WAAU,mCAAA,GACVD,IAAkB,0BAA0B,oBAC/C,IAEAC,gBAAAA,EAAA,cAAC,MAAA,EAAG,WAAU,yBACXF,EAAK,IAAI,CAACQ,sCACR,MAAA,EAAG,KAAKA,EAAK,IAAI,WAAU,6BAC1BN,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,MACPD,IACIhB,EAAO;AAAA,QACLuB;AAAA,MAAA,IAEFvB,EAAO,iBAAiBuB,EAAK,EAAE;AAAA,MAErC,UAAU,CAACxB,EAAG;AAAA,MACd,OAAO,QAAQwB,EAAK,IAAI;AAAA,MACxB,WAAU;AAAA,IAAA;AAAA,IAEVN,gBAAAA,EAAA,cAACO,GAAA,EAAK,WAAU,gCAAA,CAAgC;AAAA,IAChDP,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,wBAAA,GAAyBM,EAAK,IAAK;AAAA,IACnDN,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,oEAAA,GACbrB,GACE,UAAU2B,IACNA,EAAK,OACJA,EAA+B,OAC7B,SAAoB,EAC9B,KAAK,EACP;AAAA,EAAA,GAEFN,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,MAAMjB,EAAO,iBAAiBuB,EAAK,EAAE;AAAA,MAC9C,cAAY,sBAAsBA,EAAK,IAAI;AAAA,MAC3C,WAAU;AAAA,IAAA;AAAA,IAEVN,gBAAAA,EAAA,cAACQ,GAAA,EAAO,WAAU,cAAA,CAAc;AAAA,EAAA,CAEpC,CACD,CACH,CAEJ;AAEJ;"}
|