@pixerate/editor-react 0.76.0 → 0.77.0
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/PaintGradientEditorView-CCPCY5Ib.d.cts +14 -0
- package/dist/PaintGradientEditorView-CCPCY5Ib.d.ts +14 -0
- package/dist/canvas/index.cjs +662 -561
- package/dist/canvas/index.cjs.map +1 -1
- package/dist/canvas/index.d.cts +36 -5
- package/dist/canvas/index.d.ts +36 -5
- package/dist/canvas/index.js +232 -129
- package/dist/canvas/index.js.map +1 -1
- package/dist/chunk-MO354USR.js +126 -0
- package/dist/chunk-MO354USR.js.map +1 -0
- package/dist/{chunk-LWMUV5TC.js → chunk-QARGR5E5.js} +278 -253
- package/dist/chunk-QARGR5E5.js.map +1 -0
- package/dist/image-editor/index.cjs +677 -531
- package/dist/image-editor/index.cjs.map +1 -1
- package/dist/image-editor/index.d.cts +8 -2
- package/dist/image-editor/index.d.ts +8 -2
- package/dist/image-editor/index.js +4 -1
- package/dist/index.cjs +1095 -949
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/paint-editor/index.cjs +438 -289
- package/dist/paint-editor/index.cjs.map +1 -1
- package/dist/paint-editor/index.d.cts +8 -3
- package/dist/paint-editor/index.d.ts +8 -3
- package/dist/paint-editor/index.js +215 -187
- package/dist/paint-editor/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-LWMUV5TC.js.map +0 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// src/paint-editor/PaintGradientEditorView.tsx
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
var button = "px-2 py-1 rounded text-[11px] bg-slate-800 text-slate-200 hover:bg-slate-700 disabled:opacity-40";
|
|
5
|
+
var select = "rounded bg-slate-800 px-1 py-0.5 text-[11px]";
|
|
6
|
+
var number = "w-16 rounded bg-slate-800 px-1 py-0.5 text-[11px]";
|
|
7
|
+
var pct = (v) => Math.round(v * 1e3) / 10;
|
|
8
|
+
var PaintGradientEditorView = ({ value, onChange, colors, className, kit }) => {
|
|
9
|
+
const {
|
|
10
|
+
PAINT_GRADIENT_MAPPINGS,
|
|
11
|
+
PAINT_GRADIENT_MAPPING_LABELS,
|
|
12
|
+
PAINT_GRADIENT_PRESETS,
|
|
13
|
+
PAINT_GRADIENT_REPEATS,
|
|
14
|
+
PAINT_GRADIENT_REPEAT_LABELS,
|
|
15
|
+
PAINT_GRADIENT_SPACES,
|
|
16
|
+
PAINT_GRADIENT_SPACE_LABELS,
|
|
17
|
+
addPaintGradientStop,
|
|
18
|
+
paintGradientMappingFor,
|
|
19
|
+
paintSourceCss,
|
|
20
|
+
removePaintGradientStop,
|
|
21
|
+
reversePaintGradient,
|
|
22
|
+
updatePaintGradientStop
|
|
23
|
+
} = kit;
|
|
24
|
+
const [selected, setSelected] = useState(0);
|
|
25
|
+
const sel = Math.min(selected, value.stops.length - 1);
|
|
26
|
+
const stop = value.stops[sel];
|
|
27
|
+
const map = value.map;
|
|
28
|
+
const stopHex = (c) => c === "paint" ? colors.paint : c === "secondary" ? colors.secondary : c;
|
|
29
|
+
const patchStop = (patch) => {
|
|
30
|
+
const r = updatePaintGradientStop(value, sel, patch);
|
|
31
|
+
setSelected(r.index);
|
|
32
|
+
onChange(r.paint);
|
|
33
|
+
};
|
|
34
|
+
return /* @__PURE__ */ jsxs("div", { className: `flex flex-col gap-1.5 text-xs text-slate-200 ${className ?? ""}`, "data-testid": "paint-gradient-editor", "aria-label": "Gradient paint", children: [
|
|
35
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
36
|
+
/* @__PURE__ */ jsxs("select", { "aria-label": "Gradient preset", className: select, value: "", onChange: (e) => e.target.value && (setSelected(0), onChange(PAINT_GRADIENT_PRESETS[Number(e.target.value)].paint)), children: [
|
|
37
|
+
/* @__PURE__ */ jsx("option", { value: "", children: "Presets\u2026" }),
|
|
38
|
+
PAINT_GRADIENT_PRESETS.map((p, i) => /* @__PURE__ */ jsx("option", { value: i, children: p.name }, p.name))
|
|
39
|
+
] }),
|
|
40
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: button, onClick: () => onChange(reversePaintGradient(value)), children: "Reverse" })
|
|
41
|
+
] }),
|
|
42
|
+
/* @__PURE__ */ jsx(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
role: "slider",
|
|
46
|
+
tabIndex: 0,
|
|
47
|
+
"aria-label": "Gradient ramp: click to add a stop",
|
|
48
|
+
"aria-valuemin": 0,
|
|
49
|
+
"aria-valuemax": 100,
|
|
50
|
+
"aria-valuenow": pct(stop.offset),
|
|
51
|
+
"data-testid": "paint-gradient-ramp",
|
|
52
|
+
className: "relative h-6 cursor-copy rounded ring-1 ring-slate-700",
|
|
53
|
+
style: { background: paintSourceCss(value, colors) },
|
|
54
|
+
onClick: (e) => {
|
|
55
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
56
|
+
const r = addPaintGradientStop(value, rect.width ? (e.clientX - rect.left) / rect.width : 0.5, colors);
|
|
57
|
+
if (r.index >= 0) {
|
|
58
|
+
setSelected(r.index);
|
|
59
|
+
onChange(r.paint);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
/* @__PURE__ */ jsx("div", { className: "relative h-4", "aria-label": "Stops", children: value.stops.map((s, i) => /* @__PURE__ */ jsx(
|
|
65
|
+
"button",
|
|
66
|
+
{
|
|
67
|
+
type: "button",
|
|
68
|
+
"aria-label": `Stop ${i + 1} at ${pct(s.offset)}%`,
|
|
69
|
+
"aria-pressed": i === sel,
|
|
70
|
+
className: `absolute top-0 h-4 w-3 -translate-x-1/2 rounded-sm ring-1 ${i === sel ? "ring-white" : "ring-slate-600"}`,
|
|
71
|
+
style: { left: `${s.offset * 100}%`, background: stopHex(s.color) },
|
|
72
|
+
onClick: () => setSelected(i)
|
|
73
|
+
},
|
|
74
|
+
i
|
|
75
|
+
)) }),
|
|
76
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1", "data-testid": "paint-gradient-stop", children: [
|
|
77
|
+
/* @__PURE__ */ jsxs("select", { "aria-label": "Stop colour source", className: select, value: stop.color === "paint" || stop.color === "secondary" ? stop.color : "color", onChange: (e) => patchStop({ color: e.target.value === "color" ? stopHex(stop.color) : e.target.value }), children: [
|
|
78
|
+
/* @__PURE__ */ jsx("option", { value: "color", children: "Colour" }),
|
|
79
|
+
/* @__PURE__ */ jsx("option", { value: "paint", children: "Paint colour" }),
|
|
80
|
+
/* @__PURE__ */ jsx("option", { value: "secondary", children: "Second colour" })
|
|
81
|
+
] }),
|
|
82
|
+
stop.color !== "paint" && stop.color !== "secondary" && /* @__PURE__ */ jsx("input", { type: "color", "aria-label": "Stop colour", value: stop.color, onChange: (e) => patchStop({ color: e.target.value }), className: "h-6 w-8 rounded bg-transparent" }),
|
|
83
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1", children: [
|
|
84
|
+
"At",
|
|
85
|
+
/* @__PURE__ */ jsx("input", { type: "number", "aria-label": "Stop position", min: 0, max: 100, step: 1, value: pct(stop.offset), onChange: (e) => patchStop({ offset: Number(e.target.value) / 100 }), className: number }),
|
|
86
|
+
"%"
|
|
87
|
+
] }),
|
|
88
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1", children: [
|
|
89
|
+
"Opacity",
|
|
90
|
+
/* @__PURE__ */ jsx("input", { type: "number", "aria-label": "Stop opacity", min: 0, max: 100, step: 5, value: pct(stop.opacity ?? 1), onChange: (e) => patchStop({ opacity: Number(e.target.value) / 100 }), className: number }),
|
|
91
|
+
"%"
|
|
92
|
+
] }),
|
|
93
|
+
sel < value.stops.length - 1 && /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1", children: [
|
|
94
|
+
"Midpoint",
|
|
95
|
+
/* @__PURE__ */ jsx("input", { type: "number", "aria-label": "Stop midpoint", min: 5, max: 95, step: 1, value: pct(stop.midpoint ?? 0.5), onChange: (e) => patchStop({ midpoint: Number(e.target.value) / 100 }), className: number }),
|
|
96
|
+
"%"
|
|
97
|
+
] }),
|
|
98
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: button, disabled: value.stops.length <= 2, onClick: () => (setSelected(Math.max(0, sel - 1)), onChange(removePaintGradientStop(value, sel))), children: "Remove stop" })
|
|
99
|
+
] }),
|
|
100
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1", "data-testid": "paint-gradient-mapping", children: [
|
|
101
|
+
/* @__PURE__ */ jsx("select", { "aria-label": "Gradient follows", className: select, value: map.by, onChange: (e) => onChange({ ...value, map: paintGradientMappingFor(e.target.value, map) }), children: PAINT_GRADIENT_MAPPINGS.map((m) => /* @__PURE__ */ jsx("option", { value: m, children: PAINT_GRADIENT_MAPPING_LABELS[m] }, m)) }),
|
|
102
|
+
map.by === "distance" && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
103
|
+
/* @__PURE__ */ jsx("input", { type: "number", "aria-label": "Gradient length", min: 1, max: 1e5, value: map.length, onChange: (e) => onChange({ ...value, map: { ...map, length: Math.max(1, Number(e.target.value) || 1) } }), className: number }),
|
|
104
|
+
/* @__PURE__ */ jsxs("select", { "aria-label": "Gradient length unit", className: select, value: map.unit ?? "px", onChange: (e) => onChange({ ...value, map: { ...map, unit: e.target.value } }), children: [
|
|
105
|
+
/* @__PURE__ */ jsx("option", { value: "px", children: "px" }),
|
|
106
|
+
/* @__PURE__ */ jsx("option", { value: "dabs", children: "dabs" })
|
|
107
|
+
] })
|
|
108
|
+
] }),
|
|
109
|
+
map.by === "time" && /* @__PURE__ */ jsx("input", { type: "number", "aria-label": "Gradient duration", min: 1, max: 6e5, value: map.duration, onChange: (e) => onChange({ ...value, map: { ...map, duration: Math.max(1, Number(e.target.value) || 1) } }), className: number }),
|
|
110
|
+
map.by === "random" && /* @__PURE__ */ jsx("input", { type: "number", "aria-label": "Dabs per pick", min: 1, max: 500, value: map.every ?? 1, onChange: (e) => onChange({ ...value, map: { ...map, every: Math.max(1, Math.round(Number(e.target.value) || 1)) } }), className: number }),
|
|
111
|
+
(map.by === "distance" || map.by === "time") && /* @__PURE__ */ jsx("select", { "aria-label": "Gradient repeat", className: select, value: map.repeat ?? "clamp", onChange: (e) => onChange({ ...value, map: { ...map, repeat: e.target.value } }), children: PAINT_GRADIENT_REPEATS.map((r) => /* @__PURE__ */ jsx("option", { value: r, children: PAINT_GRADIENT_REPEAT_LABELS[r] }, r)) })
|
|
112
|
+
] }),
|
|
113
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
114
|
+
/* @__PURE__ */ jsx("select", { "aria-label": "Gradient mixing", className: select, value: value.space, onChange: (e) => onChange({ ...value, space: e.target.value }), children: PAINT_GRADIENT_SPACES.map((s) => /* @__PURE__ */ jsx("option", { value: s, children: PAINT_GRADIENT_SPACE_LABELS[s] }, s)) }),
|
|
115
|
+
/* @__PURE__ */ jsxs("label", { className: "flex flex-1 items-center gap-1", children: [
|
|
116
|
+
"Softness",
|
|
117
|
+
/* @__PURE__ */ jsx("input", { type: "range", "aria-label": "Gradient softness", min: 0, max: 1, step: 0.05, value: value.softness ?? 1, onChange: (e) => onChange({ ...value, softness: Number(e.target.value) }), className: "flex-1 accent-indigo-500" })
|
|
118
|
+
] })
|
|
119
|
+
] })
|
|
120
|
+
] });
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export {
|
|
124
|
+
PaintGradientEditorView
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=chunk-MO354USR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/paint-editor/PaintGradientEditorView.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport type { PaintGradientKit, PaintGradientMappingKind, PaintGradientRepeat, PaintGradientSource, PaintGradientSpace } from '@pixerate/editor/paint-editor';\n\nexport interface PaintGradientEditorProps {\n value: PaintGradientSource;\n onChange: (paint: PaintGradientSource) => void;\n /** What `paint` / `secondary` stops show as (the editor's two colours). */\n colors: { paint: string; secondary: string };\n className?: string;\n}\n\nexport interface PaintGradientEditorViewProps extends PaintGradientEditorProps {\n /** The gradient helpers (`PAINT_GRADIENT_KIT`, from the editor's own entry). */\n kit: PaintGradientKit;\n}\n\nconst button = 'px-2 py-1 rounded text-[11px] bg-slate-800 text-slate-200 hover:bg-slate-700 disabled:opacity-40';\nconst select = 'rounded bg-slate-800 px-1 py-0.5 text-[11px]';\nconst number = 'w-16 rounded bg-slate-800 px-1 py-0.5 text-[11px]';\nconst pct = (v: number) => Math.round(v * 1000) / 10;\n\n/**\n * Gradient paint editor (the vector editor's stop ramp, for paint): click the ramp to add a stop,\n * pick a stop to edit its colour (or the paint / second colour), opacity, position and midpoint;\n * the mixing space, what moves the stroke along it (distance with length and repeat, pressure,\n * tilt, speed, direction, time, across the tip, random), softness, reverse, and starting presets.\n */\nexport const PaintGradientEditorView: React.FC<PaintGradientEditorViewProps> = ({ value, onChange, colors, className, kit }) => {\n const {\n PAINT_GRADIENT_MAPPINGS,\n PAINT_GRADIENT_MAPPING_LABELS,\n PAINT_GRADIENT_PRESETS,\n PAINT_GRADIENT_REPEATS,\n PAINT_GRADIENT_REPEAT_LABELS,\n PAINT_GRADIENT_SPACES,\n PAINT_GRADIENT_SPACE_LABELS,\n addPaintGradientStop,\n paintGradientMappingFor,\n paintSourceCss,\n removePaintGradientStop,\n reversePaintGradient,\n updatePaintGradientStop,\n } = kit;\n const [selected, setSelected] = useState(0);\n const sel = Math.min(selected, value.stops.length - 1);\n const stop = value.stops[sel];\n const map = value.map;\n const stopHex = (c: string) => (c === 'paint' ? colors.paint : c === 'secondary' ? colors.secondary : c);\n const patchStop = (patch: Parameters<PaintGradientKit['updatePaintGradientStop']>[2]) => {\n const r = updatePaintGradientStop(value, sel, patch);\n setSelected(r.index);\n onChange(r.paint);\n };\n return (\n <div className={`flex flex-col gap-1.5 text-xs text-slate-200 ${className ?? ''}`} data-testid=\"paint-gradient-editor\" aria-label=\"Gradient paint\">\n <div className=\"flex items-center gap-1\">\n <select aria-label=\"Gradient preset\" className={select} value=\"\" onChange={(e) => e.target.value && (setSelected(0), onChange(PAINT_GRADIENT_PRESETS[Number(e.target.value)].paint))}>\n <option value=\"\">Presets…</option>\n {PAINT_GRADIENT_PRESETS.map((p, i) => (\n <option key={p.name} value={i}>\n {p.name}\n </option>\n ))}\n </select>\n <button type=\"button\" className={button} onClick={() => onChange(reversePaintGradient(value))}>\n Reverse\n </button>\n </div>\n <div\n role=\"slider\"\n tabIndex={0}\n aria-label=\"Gradient ramp: click to add a stop\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct(stop.offset)}\n data-testid=\"paint-gradient-ramp\"\n className=\"relative h-6 cursor-copy rounded ring-1 ring-slate-700\"\n style={{ background: paintSourceCss(value, colors) }}\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const r = addPaintGradientStop(value, rect.width ? (e.clientX - rect.left) / rect.width : 0.5, colors);\n if (r.index >= 0) {\n setSelected(r.index);\n onChange(r.paint);\n }\n }}\n />\n <div className=\"relative h-4\" aria-label=\"Stops\">\n {value.stops.map((s, i) => (\n <button\n key={i}\n type=\"button\"\n aria-label={`Stop ${i + 1} at ${pct(s.offset)}%`}\n aria-pressed={i === sel}\n className={`absolute top-0 h-4 w-3 -translate-x-1/2 rounded-sm ring-1 ${i === sel ? 'ring-white' : 'ring-slate-600'}`}\n style={{ left: `${s.offset * 100}%`, background: stopHex(s.color) }}\n onClick={() => setSelected(i)}\n />\n ))}\n </div>\n <div className=\"flex flex-wrap items-center gap-1\" data-testid=\"paint-gradient-stop\">\n <select aria-label=\"Stop colour source\" className={select} value={stop.color === 'paint' || stop.color === 'secondary' ? stop.color : 'color'} onChange={(e) => patchStop({ color: e.target.value === 'color' ? stopHex(stop.color) : e.target.value })}>\n <option value=\"color\">Colour</option>\n <option value=\"paint\">Paint colour</option>\n <option value=\"secondary\">Second colour</option>\n </select>\n {stop.color !== 'paint' && stop.color !== 'secondary' && <input type=\"color\" aria-label=\"Stop colour\" value={stop.color} onChange={(e) => patchStop({ color: e.target.value })} className=\"h-6 w-8 rounded bg-transparent\" />}\n <label className=\"flex items-center gap-1\">\n At\n <input type=\"number\" aria-label=\"Stop position\" min={0} max={100} step={1} value={pct(stop.offset)} onChange={(e) => patchStop({ offset: Number(e.target.value) / 100 })} className={number} />%\n </label>\n <label className=\"flex items-center gap-1\">\n Opacity\n <input type=\"number\" aria-label=\"Stop opacity\" min={0} max={100} step={5} value={pct(stop.opacity ?? 1)} onChange={(e) => patchStop({ opacity: Number(e.target.value) / 100 })} className={number} />%\n </label>\n {sel < value.stops.length - 1 && (\n <label className=\"flex items-center gap-1\">\n Midpoint\n <input type=\"number\" aria-label=\"Stop midpoint\" min={5} max={95} step={1} value={pct(stop.midpoint ?? 0.5)} onChange={(e) => patchStop({ midpoint: Number(e.target.value) / 100 })} className={number} />%\n </label>\n )}\n <button type=\"button\" className={button} disabled={value.stops.length <= 2} onClick={() => (setSelected(Math.max(0, sel - 1)), onChange(removePaintGradientStop(value, sel)))}>\n Remove stop\n </button>\n </div>\n <div className=\"flex flex-wrap items-center gap-1\" data-testid=\"paint-gradient-mapping\">\n <select aria-label=\"Gradient follows\" className={select} value={map.by} onChange={(e) => onChange({ ...value, map: paintGradientMappingFor(e.target.value as PaintGradientMappingKind, map) })}>\n {PAINT_GRADIENT_MAPPINGS.map((m) => (\n <option key={m} value={m}>\n {PAINT_GRADIENT_MAPPING_LABELS[m]}\n </option>\n ))}\n </select>\n {map.by === 'distance' && (\n <>\n <input type=\"number\" aria-label=\"Gradient length\" min={1} max={100000} value={map.length} onChange={(e) => onChange({ ...value, map: { ...map, length: Math.max(1, Number(e.target.value) || 1) } })} className={number} />\n <select aria-label=\"Gradient length unit\" className={select} value={map.unit ?? 'px'} onChange={(e) => onChange({ ...value, map: { ...map, unit: e.target.value as 'px' | 'dabs' } })}>\n <option value=\"px\">px</option>\n <option value=\"dabs\">dabs</option>\n </select>\n </>\n )}\n {map.by === 'time' && <input type=\"number\" aria-label=\"Gradient duration\" min={1} max={600000} value={map.duration} onChange={(e) => onChange({ ...value, map: { ...map, duration: Math.max(1, Number(e.target.value) || 1) } })} className={number} />}\n {map.by === 'random' && <input type=\"number\" aria-label=\"Dabs per pick\" min={1} max={500} value={map.every ?? 1} onChange={(e) => onChange({ ...value, map: { ...map, every: Math.max(1, Math.round(Number(e.target.value) || 1)) } })} className={number} />}\n {(map.by === 'distance' || map.by === 'time') && (\n <select aria-label=\"Gradient repeat\" className={select} value={map.repeat ?? 'clamp'} onChange={(e) => onChange({ ...value, map: { ...map, repeat: e.target.value as PaintGradientRepeat } })}>\n {PAINT_GRADIENT_REPEATS.map((r) => (\n <option key={r} value={r}>\n {PAINT_GRADIENT_REPEAT_LABELS[r]}\n </option>\n ))}\n </select>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n <select aria-label=\"Gradient mixing\" className={select} value={value.space} onChange={(e) => onChange({ ...value, space: e.target.value as PaintGradientSpace })}>\n {PAINT_GRADIENT_SPACES.map((s) => (\n <option key={s} value={s}>\n {PAINT_GRADIENT_SPACE_LABELS[s]}\n </option>\n ))}\n </select>\n <label className=\"flex flex-1 items-center gap-1\">\n Softness\n <input type=\"range\" aria-label=\"Gradient softness\" min={0} max={1} step={0.05} value={value.softness ?? 1} onChange={(e) => onChange({ ...value, softness: Number(e.target.value) })} className=\"flex-1 accent-indigo-500\" />\n </label>\n </div>\n </div>\n );\n};\n"],"mappings":"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","names":[]}
|