@gradio/imageeditor 0.18.12 → 0.19.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/CHANGELOG.md +21 -0
- package/ImageEditor.stories.svelte +0 -74
- package/Index.svelte +12 -12
- package/InteractiveImageEditor.svelte +9 -5
- package/dist/Index.svelte +12 -12
- package/dist/InteractiveImageEditor.svelte +9 -5
- package/dist/InteractiveImageEditor.svelte.d.ts +5 -5
- package/dist/shared/IconButton.svelte +2 -2
- package/dist/shared/IconButton.svelte.d.ts +2 -2
- package/dist/shared/ImageEditor.svelte +17 -13
- package/dist/shared/Toolbar.svelte +1 -1
- package/dist/shared/Toolbar.svelte.d.ts +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +7 -7
- package/shared/IconButton.svelte +2 -2
- package/shared/ImageEditor.svelte +17 -13
- package/shared/Toolbar.svelte +1 -1
- package/types.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @gradio/imageeditor
|
|
2
2
|
|
|
3
|
+
## 0.19.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- [#13526](https://github.com/gradio-app/gradio/pull/13526) [`53cb4ca`](https://github.com/gradio-app/gradio/commit/53cb4cae1ec3521e9170d12867253516413ba37a) - Run `pnpm lint` and `pnpm ts:check` on CI. Thanks @abidlabs!
|
|
8
|
+
|
|
9
|
+
### Dependency updates
|
|
10
|
+
|
|
11
|
+
- @gradio/atoms@0.25.0
|
|
12
|
+
- @gradio/statustracker@0.15.0
|
|
13
|
+
- @gradio/utils@0.13.0
|
|
14
|
+
- @gradio/client@2.3.0
|
|
15
|
+
- @gradio/upload@0.18.0
|
|
16
|
+
- @gradio/image@0.27.0
|
|
17
|
+
|
|
18
|
+
## 0.18.12
|
|
19
|
+
|
|
20
|
+
### Dependency updates
|
|
21
|
+
|
|
22
|
+
- @gradio/client@2.2.2
|
|
23
|
+
|
|
3
24
|
## 0.18.12
|
|
4
25
|
|
|
5
26
|
### Fixes
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script module>
|
|
2
2
|
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
-
import { userEvent, within } from "storybook/test";
|
|
4
3
|
import ImageEditor from "./Index.svelte";
|
|
5
4
|
import { allModes } from "../storybook/modes";
|
|
6
5
|
import { wrapProps } from "../storybook/wrapProps";
|
|
@@ -59,79 +58,6 @@
|
|
|
59
58
|
{/snippet}
|
|
60
59
|
</Story>
|
|
61
60
|
|
|
62
|
-
<Story
|
|
63
|
-
name="Image Editor Undo/Redo Interactions"
|
|
64
|
-
args={{
|
|
65
|
-
value: {
|
|
66
|
-
background: {
|
|
67
|
-
path: cheetah,
|
|
68
|
-
url: cheetah,
|
|
69
|
-
orig_name: "cheetah.jpg"
|
|
70
|
-
},
|
|
71
|
-
layers: [],
|
|
72
|
-
composite: null
|
|
73
|
-
},
|
|
74
|
-
type: "pil",
|
|
75
|
-
placeholder: "Upload an image of a cat",
|
|
76
|
-
sources: ["upload", "webcam"],
|
|
77
|
-
canvas_size: [800, 800],
|
|
78
|
-
interactive: true,
|
|
79
|
-
transforms: ["crop"],
|
|
80
|
-
layers: { allow_additional_layers: true, layers: [] },
|
|
81
|
-
brush: {
|
|
82
|
-
default_size: "auto",
|
|
83
|
-
colors: ["#ff0000", "#00ff00", "#0000ff"],
|
|
84
|
-
default_color: "#ff0000",
|
|
85
|
-
color_mode: "defaults"
|
|
86
|
-
},
|
|
87
|
-
eraser: {
|
|
88
|
-
default_size: "auto"
|
|
89
|
-
},
|
|
90
|
-
webcam_options: {
|
|
91
|
-
mirror: true,
|
|
92
|
-
constraints: null
|
|
93
|
-
}
|
|
94
|
-
}}
|
|
95
|
-
parameters={{ chromatic: { disableSnapshot: true } }}
|
|
96
|
-
play={async ({ canvasElement }) => {
|
|
97
|
-
const canvas = within(canvasElement);
|
|
98
|
-
|
|
99
|
-
const drawButton = canvas.getAllByLabelText("Brush")[0];
|
|
100
|
-
await userEvent.click(drawButton);
|
|
101
|
-
|
|
102
|
-
const drawCanvas = document.getElementsByTagName("canvas")[0];
|
|
103
|
-
if (!drawCanvas) {
|
|
104
|
-
throw new Error("Could not find canvas");
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
await new Promise((r) => setTimeout(r, 1000));
|
|
108
|
-
|
|
109
|
-
await userEvent.pointer({
|
|
110
|
-
keys: "[MouseLeft][MouseRight]",
|
|
111
|
-
target: drawCanvas,
|
|
112
|
-
coords: { clientX: 300, clientY: 100 }
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
await userEvent.pointer({
|
|
116
|
-
keys: "[MouseLeft][MouseRight]",
|
|
117
|
-
target: drawCanvas,
|
|
118
|
-
coords: { clientX: 400, clientY: 200 }
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
await userEvent.click(canvas.getByLabelText("Undo"));
|
|
122
|
-
await userEvent.click(canvas.getByLabelText("Redo"));
|
|
123
|
-
}}
|
|
124
|
-
>
|
|
125
|
-
{#snippet template(args)}
|
|
126
|
-
<div
|
|
127
|
-
class="image-container"
|
|
128
|
-
style="width: 500px; position: relative;border-radius: var(--radius-lg);overflow: hidden;"
|
|
129
|
-
>
|
|
130
|
-
<ImageEditor {...wrapProps(args)} />
|
|
131
|
-
</div>
|
|
132
|
-
{/snippet}
|
|
133
|
-
</Story>
|
|
134
|
-
|
|
135
61
|
<Story
|
|
136
62
|
name="Static Image Display"
|
|
137
63
|
args={{
|
package/Index.svelte
CHANGED
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
value={gradio.props.value?.composite || null}
|
|
117
117
|
label={gradio.shared.label}
|
|
118
118
|
show_label={gradio.shared.show_label}
|
|
119
|
-
buttons={gradio.props.buttons}
|
|
119
|
+
buttons={gradio.props.buttons ?? []}
|
|
120
120
|
selectable={gradio.props._selectable}
|
|
121
121
|
i18n={gradio.i18n}
|
|
122
122
|
/>
|
|
@@ -146,16 +146,16 @@
|
|
|
146
146
|
/>
|
|
147
147
|
|
|
148
148
|
<InteractiveImageEditor
|
|
149
|
-
border_region={gradio.props.border_region}
|
|
149
|
+
border_region={gradio.props.border_region ?? 0}
|
|
150
150
|
bind:is_dragging
|
|
151
|
-
canvas_size={gradio.props.canvas_size}
|
|
151
|
+
canvas_size={gradio.props.canvas_size ?? [800, 800]}
|
|
152
152
|
bind:image_id
|
|
153
153
|
layers={normalised_layers}
|
|
154
154
|
composite={normalised_composite}
|
|
155
155
|
background={normalised_background}
|
|
156
156
|
bind:this={editor_instance}
|
|
157
157
|
root={gradio.shared.root}
|
|
158
|
-
sources={gradio.props.sources}
|
|
158
|
+
sources={gradio.props.sources ?? ["upload", "webcam", "clipboard"]}
|
|
159
159
|
label={gradio.shared.label}
|
|
160
160
|
show_label={gradio.shared.show_label}
|
|
161
161
|
fixed_canvas={gradio.props.fixed_canvas}
|
|
@@ -191,13 +191,13 @@
|
|
|
191
191
|
}
|
|
192
192
|
}}
|
|
193
193
|
on:error
|
|
194
|
-
brush={gradio.props.brush}
|
|
195
|
-
eraser={gradio.props.eraser}
|
|
196
|
-
changeable={gradio.shared.attached_events
|
|
197
|
-
realtime={gradio.shared.attached_events
|
|
198
|
-
gradio.shared.attached_events
|
|
194
|
+
brush={gradio.props.brush ?? false}
|
|
195
|
+
eraser={gradio.props.eraser ?? false}
|
|
196
|
+
changeable={gradio.shared.attached_events?.includes("apply") ?? false}
|
|
197
|
+
realtime={gradio.shared.attached_events?.includes("change") ||
|
|
198
|
+
gradio.shared.attached_events?.includes("input")}
|
|
199
199
|
i18n={gradio.i18n}
|
|
200
|
-
transforms={gradio.props.transforms}
|
|
200
|
+
transforms={gradio.props.transforms ?? []}
|
|
201
201
|
accept_blobs={gradio.shared.server.accept_blobs}
|
|
202
202
|
layer_options={gradio.props.layers}
|
|
203
203
|
upload={(...args) => gradio.shared.client.upload(...args)}
|
|
@@ -205,8 +205,8 @@
|
|
|
205
205
|
webcam_options={gradio.props.webcam_options}
|
|
206
206
|
show_download_button={gradio.props.buttons === null
|
|
207
207
|
? true
|
|
208
|
-
: gradio.props.buttons.includes("download")}
|
|
209
|
-
theme_mode={gradio.shared.theme_mode}
|
|
208
|
+
: (gradio.props.buttons ?? []).includes("download")}
|
|
209
|
+
theme_mode={gradio.shared.theme_mode === "dark" ? "dark" : "light"}
|
|
210
210
|
on:download_error={(e) => gradio.dispatch("error", e.detail)}
|
|
211
211
|
></InteractiveImageEditor>
|
|
212
212
|
</Block>
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
type WebcamOptions
|
|
32
32
|
} from "./shared/types";
|
|
33
33
|
|
|
34
|
-
export let brush: IBrush;
|
|
35
|
-
export let eraser: Eraser;
|
|
34
|
+
export let brush: IBrush | false;
|
|
35
|
+
export let eraser: Eraser | false;
|
|
36
36
|
export let sources: Source[];
|
|
37
37
|
export let i18n: I18nFormatter;
|
|
38
38
|
export let root: string;
|
|
@@ -45,19 +45,23 @@
|
|
|
45
45
|
export let composite: FileData | null;
|
|
46
46
|
export let background: FileData | null;
|
|
47
47
|
|
|
48
|
-
export let layer_options: LayerOptions
|
|
48
|
+
export let layer_options: LayerOptions = {
|
|
49
|
+
allow_additional_layers: true,
|
|
50
|
+
layers: [],
|
|
51
|
+
disabled: false
|
|
52
|
+
};
|
|
49
53
|
export let transforms: Transform[];
|
|
50
54
|
export let accept_blobs: (a: any) => void;
|
|
51
55
|
|
|
52
56
|
export let canvas_size: [number, number];
|
|
53
57
|
export let fixed_canvas = false;
|
|
54
|
-
export let realtime
|
|
58
|
+
export let realtime = false;
|
|
55
59
|
export let upload: Client["upload"];
|
|
56
60
|
export let is_dragging: boolean;
|
|
57
61
|
export let placeholder: string | undefined = undefined;
|
|
58
62
|
export let border_region: number;
|
|
59
63
|
export let full_history: CommandNode | null = null;
|
|
60
|
-
export let webcam_options: WebcamOptions;
|
|
64
|
+
export let webcam_options: WebcamOptions = { mirror: true, constraints: {} };
|
|
61
65
|
export let show_download_button = false;
|
|
62
66
|
|
|
63
67
|
const dispatch = createEventDispatcher<{
|
package/dist/Index.svelte
CHANGED
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
value={gradio.props.value?.composite || null}
|
|
117
117
|
label={gradio.shared.label}
|
|
118
118
|
show_label={gradio.shared.show_label}
|
|
119
|
-
buttons={gradio.props.buttons}
|
|
119
|
+
buttons={gradio.props.buttons ?? []}
|
|
120
120
|
selectable={gradio.props._selectable}
|
|
121
121
|
i18n={gradio.i18n}
|
|
122
122
|
/>
|
|
@@ -146,16 +146,16 @@
|
|
|
146
146
|
/>
|
|
147
147
|
|
|
148
148
|
<InteractiveImageEditor
|
|
149
|
-
border_region={gradio.props.border_region}
|
|
149
|
+
border_region={gradio.props.border_region ?? 0}
|
|
150
150
|
bind:is_dragging
|
|
151
|
-
canvas_size={gradio.props.canvas_size}
|
|
151
|
+
canvas_size={gradio.props.canvas_size ?? [800, 800]}
|
|
152
152
|
bind:image_id
|
|
153
153
|
layers={normalised_layers}
|
|
154
154
|
composite={normalised_composite}
|
|
155
155
|
background={normalised_background}
|
|
156
156
|
bind:this={editor_instance}
|
|
157
157
|
root={gradio.shared.root}
|
|
158
|
-
sources={gradio.props.sources}
|
|
158
|
+
sources={gradio.props.sources ?? ["upload", "webcam", "clipboard"]}
|
|
159
159
|
label={gradio.shared.label}
|
|
160
160
|
show_label={gradio.shared.show_label}
|
|
161
161
|
fixed_canvas={gradio.props.fixed_canvas}
|
|
@@ -191,13 +191,13 @@
|
|
|
191
191
|
}
|
|
192
192
|
}}
|
|
193
193
|
on:error
|
|
194
|
-
brush={gradio.props.brush}
|
|
195
|
-
eraser={gradio.props.eraser}
|
|
196
|
-
changeable={gradio.shared.attached_events
|
|
197
|
-
realtime={gradio.shared.attached_events
|
|
198
|
-
gradio.shared.attached_events
|
|
194
|
+
brush={gradio.props.brush ?? false}
|
|
195
|
+
eraser={gradio.props.eraser ?? false}
|
|
196
|
+
changeable={gradio.shared.attached_events?.includes("apply") ?? false}
|
|
197
|
+
realtime={gradio.shared.attached_events?.includes("change") ||
|
|
198
|
+
gradio.shared.attached_events?.includes("input")}
|
|
199
199
|
i18n={gradio.i18n}
|
|
200
|
-
transforms={gradio.props.transforms}
|
|
200
|
+
transforms={gradio.props.transforms ?? []}
|
|
201
201
|
accept_blobs={gradio.shared.server.accept_blobs}
|
|
202
202
|
layer_options={gradio.props.layers}
|
|
203
203
|
upload={(...args) => gradio.shared.client.upload(...args)}
|
|
@@ -205,8 +205,8 @@
|
|
|
205
205
|
webcam_options={gradio.props.webcam_options}
|
|
206
206
|
show_download_button={gradio.props.buttons === null
|
|
207
207
|
? true
|
|
208
|
-
: gradio.props.buttons.includes("download")}
|
|
209
|
-
theme_mode={gradio.shared.theme_mode}
|
|
208
|
+
: (gradio.props.buttons ?? []).includes("download")}
|
|
209
|
+
theme_mode={gradio.shared.theme_mode === "dark" ? "dark" : "light"}
|
|
210
210
|
on:download_error={(e) => gradio.dispatch("error", e.detail)}
|
|
211
211
|
></InteractiveImageEditor>
|
|
212
212
|
</Block>
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
type WebcamOptions
|
|
32
32
|
} from "./shared/types";
|
|
33
33
|
|
|
34
|
-
export let brush: IBrush;
|
|
35
|
-
export let eraser: Eraser;
|
|
34
|
+
export let brush: IBrush | false;
|
|
35
|
+
export let eraser: Eraser | false;
|
|
36
36
|
export let sources: Source[];
|
|
37
37
|
export let i18n: I18nFormatter;
|
|
38
38
|
export let root: string;
|
|
@@ -45,19 +45,23 @@
|
|
|
45
45
|
export let composite: FileData | null;
|
|
46
46
|
export let background: FileData | null;
|
|
47
47
|
|
|
48
|
-
export let layer_options: LayerOptions
|
|
48
|
+
export let layer_options: LayerOptions = {
|
|
49
|
+
allow_additional_layers: true,
|
|
50
|
+
layers: [],
|
|
51
|
+
disabled: false
|
|
52
|
+
};
|
|
49
53
|
export let transforms: Transform[];
|
|
50
54
|
export let accept_blobs: (a: any) => void;
|
|
51
55
|
|
|
52
56
|
export let canvas_size: [number, number];
|
|
53
57
|
export let fixed_canvas = false;
|
|
54
|
-
export let realtime
|
|
58
|
+
export let realtime = false;
|
|
55
59
|
export let upload: Client["upload"];
|
|
56
60
|
export let is_dragging: boolean;
|
|
57
61
|
export let placeholder: string | undefined = undefined;
|
|
58
62
|
export let border_region: number;
|
|
59
63
|
export let full_history: CommandNode | null = null;
|
|
60
|
-
export let webcam_options: WebcamOptions;
|
|
64
|
+
export let webcam_options: WebcamOptions = { mirror: true, constraints: {} };
|
|
61
65
|
export let show_download_button = false;
|
|
62
66
|
|
|
63
67
|
const dispatch = createEventDispatcher<{
|
|
@@ -27,8 +27,8 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
27
27
|
z_$$bindings?: Bindings;
|
|
28
28
|
}
|
|
29
29
|
declare const InteractiveImageEditor: $$__sveltets_2_IsomorphicComponent<{
|
|
30
|
-
brush: IBrush;
|
|
31
|
-
eraser: Eraser;
|
|
30
|
+
brush: IBrush | false;
|
|
31
|
+
eraser: Eraser | false;
|
|
32
32
|
sources: Source[];
|
|
33
33
|
i18n: I18nFormatter;
|
|
34
34
|
root: string;
|
|
@@ -39,18 +39,18 @@ declare const InteractiveImageEditor: $$__sveltets_2_IsomorphicComponent<{
|
|
|
39
39
|
layers: FileData[];
|
|
40
40
|
composite: FileData | null;
|
|
41
41
|
background: FileData | null;
|
|
42
|
-
layer_options
|
|
42
|
+
layer_options?: LayerOptions;
|
|
43
43
|
transforms: Transform[];
|
|
44
44
|
accept_blobs: (a: any) => void;
|
|
45
45
|
canvas_size: [number, number];
|
|
46
46
|
fixed_canvas?: boolean;
|
|
47
|
-
realtime
|
|
47
|
+
realtime?: boolean;
|
|
48
48
|
upload: Client["upload"];
|
|
49
49
|
is_dragging: boolean;
|
|
50
50
|
placeholder?: string | undefined;
|
|
51
51
|
border_region: number;
|
|
52
52
|
full_history?: CommandNode | null;
|
|
53
|
-
webcam_options
|
|
53
|
+
webcam_options?: WebcamOptions;
|
|
54
54
|
show_download_button?: boolean;
|
|
55
55
|
get_data?: () => Promise<ImageBlobs>;
|
|
56
56
|
image_id?: null | string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { type
|
|
2
|
+
import { type Component } from "svelte";
|
|
3
3
|
import type { ColorInput } from "tinycolor2";
|
|
4
|
-
export let Icon:
|
|
4
|
+
export let Icon: Component<any>;
|
|
5
5
|
export let label = "";
|
|
6
6
|
export let show_label = false;
|
|
7
7
|
export let pending = false;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Component } from "svelte";
|
|
2
2
|
import type { ColorInput } from "tinycolor2";
|
|
3
3
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
4
4
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -14,7 +14,7 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
14
14
|
z_$$bindings?: Bindings;
|
|
15
15
|
}
|
|
16
16
|
declare const IconButton: $$__sveltets_2_IsomorphicComponent<{
|
|
17
|
-
Icon:
|
|
17
|
+
Icon: Component<any>;
|
|
18
18
|
label?: string;
|
|
19
19
|
show_label?: boolean;
|
|
20
20
|
pending?: boolean;
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
export let canvas_size: [number, number];
|
|
48
48
|
export let is_dragging = false;
|
|
49
49
|
export let background_image = false;
|
|
50
|
-
export let brush_options: Brush;
|
|
51
|
-
export let eraser_options: Eraser;
|
|
50
|
+
export let brush_options: Brush | false;
|
|
51
|
+
export let eraser_options: Eraser | false;
|
|
52
52
|
export let fixed_canvas = false;
|
|
53
53
|
export let root: string;
|
|
54
54
|
export let i18n: I18nFormatter;
|
|
@@ -517,10 +517,12 @@
|
|
|
517
517
|
}
|
|
518
518
|
|
|
519
519
|
function update_brush_options(): void {
|
|
520
|
+
if (!brush_options) return;
|
|
521
|
+
const options = brush_options;
|
|
520
522
|
const default_color =
|
|
521
|
-
|
|
522
|
-
?
|
|
523
|
-
:
|
|
523
|
+
options.default_color === "auto"
|
|
524
|
+
? options.colors[0]
|
|
525
|
+
: options.default_color;
|
|
524
526
|
|
|
525
527
|
// color is already a tuple [color, opacity]
|
|
526
528
|
if (Array.isArray(default_color)) {
|
|
@@ -539,14 +541,14 @@
|
|
|
539
541
|
}
|
|
540
542
|
|
|
541
543
|
selected_size =
|
|
542
|
-
typeof
|
|
543
|
-
? brush_options.default_size
|
|
544
|
-
: 25;
|
|
544
|
+
typeof options.default_size === "number" ? options.default_size : 25;
|
|
545
545
|
}
|
|
546
546
|
|
|
547
547
|
function update_eraser_options(): void {
|
|
548
|
+
if (!eraser_options) return;
|
|
549
|
+
const options = eraser_options;
|
|
548
550
|
selected_eraser_size =
|
|
549
|
-
|
|
551
|
+
options.default_size === "auto" ? 25 : options.default_size;
|
|
550
552
|
}
|
|
551
553
|
|
|
552
554
|
let brush_size_visible = false;
|
|
@@ -557,12 +559,14 @@
|
|
|
557
559
|
(() => {
|
|
558
560
|
let color_value;
|
|
559
561
|
if (selected_color === "auto") {
|
|
562
|
+
if (!brush_options) return "black";
|
|
563
|
+
const options = brush_options;
|
|
560
564
|
const default_color =
|
|
561
|
-
|
|
565
|
+
options.colors.find((color) =>
|
|
562
566
|
Array.isArray(color)
|
|
563
|
-
? color[0] ===
|
|
564
|
-
: color ===
|
|
565
|
-
) ||
|
|
567
|
+
? color[0] === options.default_color
|
|
568
|
+
: color === options.default_color
|
|
569
|
+
) || options.colors[0];
|
|
566
570
|
|
|
567
571
|
color_value = Array.isArray(default_color)
|
|
568
572
|
? default_color[0]
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
brush_options && typeof brush_options.default_size === "number"
|
|
44
44
|
? brush_options.default_size
|
|
45
45
|
: 25;
|
|
46
|
-
export let eraser_options: EraserType;
|
|
46
|
+
export let eraser_options: EraserType | false;
|
|
47
47
|
export let selected_eraser_size =
|
|
48
48
|
eraser_options && typeof eraser_options.default_size === "number"
|
|
49
49
|
? eraser_options.default_size
|
|
@@ -21,7 +21,7 @@ declare const Toolbar: $$__sveltets_2_IsomorphicComponent<{
|
|
|
21
21
|
background?: boolean;
|
|
22
22
|
brush_options: BrushType | false;
|
|
23
23
|
selected_size?: number;
|
|
24
|
-
eraser_options: EraserType;
|
|
24
|
+
eraser_options: EraserType | false;
|
|
25
25
|
selected_eraser_size?: number;
|
|
26
26
|
selected_color?: any;
|
|
27
27
|
selected_opacity?: any;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SelectData, ShareData } from "@gradio/utils";
|
|
2
|
-
import type { LoadingStatus } from "@gradio/statustracker";
|
|
2
|
+
import type { ILoadingStatus as LoadingStatus } from "@gradio/statustracker";
|
|
3
3
|
import type { CommandNode } from "./shared/core/commands";
|
|
4
4
|
import type { LayerOptions, Source, Transform, WebcamOptions } from "./shared/types";
|
|
5
5
|
import type { Brush, Eraser } from "./shared/brush/types";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/imageeditor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Gradio UI packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "",
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"pixi-filters": "^6.1.4",
|
|
12
12
|
"pixi.js": "^8.14.0",
|
|
13
13
|
"tinycolor2": "^1.6.0",
|
|
14
|
-
"@gradio/atoms": "^0.
|
|
15
|
-
"@gradio/client": "^2.2.1",
|
|
14
|
+
"@gradio/atoms": "^0.25.0",
|
|
16
15
|
"@gradio/icons": "^0.15.1",
|
|
17
|
-
"@gradio/image": "^0.
|
|
18
|
-
"@gradio/statustracker": "^0.
|
|
19
|
-
"@gradio/
|
|
20
|
-
"@gradio/
|
|
16
|
+
"@gradio/image": "^0.27.0",
|
|
17
|
+
"@gradio/statustracker": "^0.15.0",
|
|
18
|
+
"@gradio/upload": "^0.18.0",
|
|
19
|
+
"@gradio/utils": "^0.13.0",
|
|
20
|
+
"@gradio/client": "^2.3.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@gradio/preview": "^0.16.2"
|
package/shared/IconButton.svelte
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { type
|
|
2
|
+
import { type Component } from "svelte";
|
|
3
3
|
import type { ColorInput } from "tinycolor2";
|
|
4
|
-
export let Icon:
|
|
4
|
+
export let Icon: Component<any>;
|
|
5
5
|
export let label = "";
|
|
6
6
|
export let show_label = false;
|
|
7
7
|
export let pending = false;
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
export let canvas_size: [number, number];
|
|
48
48
|
export let is_dragging = false;
|
|
49
49
|
export let background_image = false;
|
|
50
|
-
export let brush_options: Brush;
|
|
51
|
-
export let eraser_options: Eraser;
|
|
50
|
+
export let brush_options: Brush | false;
|
|
51
|
+
export let eraser_options: Eraser | false;
|
|
52
52
|
export let fixed_canvas = false;
|
|
53
53
|
export let root: string;
|
|
54
54
|
export let i18n: I18nFormatter;
|
|
@@ -517,10 +517,12 @@
|
|
|
517
517
|
}
|
|
518
518
|
|
|
519
519
|
function update_brush_options(): void {
|
|
520
|
+
if (!brush_options) return;
|
|
521
|
+
const options = brush_options;
|
|
520
522
|
const default_color =
|
|
521
|
-
|
|
522
|
-
?
|
|
523
|
-
:
|
|
523
|
+
options.default_color === "auto"
|
|
524
|
+
? options.colors[0]
|
|
525
|
+
: options.default_color;
|
|
524
526
|
|
|
525
527
|
// color is already a tuple [color, opacity]
|
|
526
528
|
if (Array.isArray(default_color)) {
|
|
@@ -539,14 +541,14 @@
|
|
|
539
541
|
}
|
|
540
542
|
|
|
541
543
|
selected_size =
|
|
542
|
-
typeof
|
|
543
|
-
? brush_options.default_size
|
|
544
|
-
: 25;
|
|
544
|
+
typeof options.default_size === "number" ? options.default_size : 25;
|
|
545
545
|
}
|
|
546
546
|
|
|
547
547
|
function update_eraser_options(): void {
|
|
548
|
+
if (!eraser_options) return;
|
|
549
|
+
const options = eraser_options;
|
|
548
550
|
selected_eraser_size =
|
|
549
|
-
|
|
551
|
+
options.default_size === "auto" ? 25 : options.default_size;
|
|
550
552
|
}
|
|
551
553
|
|
|
552
554
|
let brush_size_visible = false;
|
|
@@ -557,12 +559,14 @@
|
|
|
557
559
|
(() => {
|
|
558
560
|
let color_value;
|
|
559
561
|
if (selected_color === "auto") {
|
|
562
|
+
if (!brush_options) return "black";
|
|
563
|
+
const options = brush_options;
|
|
560
564
|
const default_color =
|
|
561
|
-
|
|
565
|
+
options.colors.find((color) =>
|
|
562
566
|
Array.isArray(color)
|
|
563
|
-
? color[0] ===
|
|
564
|
-
: color ===
|
|
565
|
-
) ||
|
|
567
|
+
? color[0] === options.default_color
|
|
568
|
+
: color === options.default_color
|
|
569
|
+
) || options.colors[0];
|
|
566
570
|
|
|
567
571
|
color_value = Array.isArray(default_color)
|
|
568
572
|
? default_color[0]
|
package/shared/Toolbar.svelte
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
brush_options && typeof brush_options.default_size === "number"
|
|
44
44
|
? brush_options.default_size
|
|
45
45
|
: 25;
|
|
46
|
-
export let eraser_options: EraserType;
|
|
46
|
+
export let eraser_options: EraserType | false;
|
|
47
47
|
export let selected_eraser_size =
|
|
48
48
|
eraser_options && typeof eraser_options.default_size === "number"
|
|
49
49
|
? eraser_options.default_size
|
package/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SelectData, ShareData } from "@gradio/utils";
|
|
2
|
-
import type { LoadingStatus } from "@gradio/statustracker";
|
|
2
|
+
import type { ILoadingStatus as LoadingStatus } from "@gradio/statustracker";
|
|
3
3
|
import type { CommandNode } from "./shared/core/commands";
|
|
4
4
|
import type {
|
|
5
5
|
LayerOptions,
|