@gradio/image 0.14.0 → 0.16.0-beta.1
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 +56 -0
- package/Image.stories.svelte +43 -15
- package/Image.test.ts +2 -3
- package/Index.svelte +54 -4
- package/dist/Example.svelte +46 -0
- package/dist/Example.svelte.d.ts +19 -0
- package/dist/Index.svelte +200 -0
- package/dist/Index.svelte.d.ts +176 -0
- package/dist/shared/ClearImage.svelte +28 -0
- package/dist/shared/ClearImage.svelte.d.ts +18 -0
- package/dist/shared/Image.svelte +26 -0
- package/dist/shared/Image.svelte.d.ts +247 -0
- package/dist/shared/ImagePreview.svelte +155 -0
- package/dist/shared/ImagePreview.svelte.d.ts +32 -0
- package/dist/shared/ImageUploader.svelte +198 -0
- package/dist/shared/ImageUploader.svelte.d.ts +47 -0
- package/dist/shared/Webcam.svelte +431 -0
- package/dist/shared/Webcam.svelte.d.ts +40 -0
- package/dist/shared/WebcamPermissions.svelte +42 -0
- package/dist/shared/WebcamPermissions.svelte.d.ts +18 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/stream_utils.d.ts +5 -0
- package/dist/shared/stream_utils.js +31 -0
- package/dist/shared/utils.d.ts +1 -0
- package/dist/shared/utils.js +28 -0
- package/package.json +38 -14
- package/shared/ImagePreview.svelte +17 -6
- package/shared/ImageUploader.svelte +49 -20
- package/shared/Webcam.svelte +80 -15
@@ -0,0 +1,176 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
export { default as Webcam } from "./shared/Webcam.svelte";
|
3
|
+
export { default as BaseImageUploader } from "./shared/ImageUploader.svelte";
|
4
|
+
export { default as BaseStaticImage } from "./shared/ImagePreview.svelte";
|
5
|
+
export { default as BaseExample } from "./Example.svelte";
|
6
|
+
export { default as BaseImage } from "./shared/Image.svelte";
|
7
|
+
import type { Gradio, SelectData, ValueData } from "@gradio/utils";
|
8
|
+
import type { FileData } from "@gradio/client";
|
9
|
+
import type { LoadingStatus } from "@gradio/statustracker";
|
10
|
+
declare const __propDef: {
|
11
|
+
props: {
|
12
|
+
modify_stream_state?: ((state: "open" | "closed" | "waiting") => void) | undefined;
|
13
|
+
get_stream_state?: (() => void) | undefined;
|
14
|
+
set_time_limit: (arg0: number) => void;
|
15
|
+
value_is_output?: boolean | undefined;
|
16
|
+
elem_id?: string | undefined;
|
17
|
+
elem_classes?: string[] | undefined;
|
18
|
+
visible?: boolean | undefined;
|
19
|
+
value?: (null | FileData) | undefined;
|
20
|
+
label: string;
|
21
|
+
show_label: boolean;
|
22
|
+
show_download_button: boolean;
|
23
|
+
root: string;
|
24
|
+
height: number | undefined;
|
25
|
+
width: number | undefined;
|
26
|
+
stream_every: number;
|
27
|
+
_selectable?: boolean | undefined;
|
28
|
+
container?: boolean | undefined;
|
29
|
+
scale?: (number | null) | undefined;
|
30
|
+
min_width?: number | undefined;
|
31
|
+
loading_status: LoadingStatus;
|
32
|
+
show_share_button?: boolean | undefined;
|
33
|
+
sources?: ("clipboard" | "webcam" | "upload")[] | undefined;
|
34
|
+
interactive: boolean;
|
35
|
+
streaming: boolean;
|
36
|
+
pending: boolean;
|
37
|
+
mirror_webcam: boolean;
|
38
|
+
placeholder?: string | undefined;
|
39
|
+
show_fullscreen_button: boolean;
|
40
|
+
gradio: Gradio<{
|
41
|
+
input: never;
|
42
|
+
change: never;
|
43
|
+
error: string;
|
44
|
+
edit: never;
|
45
|
+
stream: ValueData;
|
46
|
+
drag: never;
|
47
|
+
upload: never;
|
48
|
+
clear: never;
|
49
|
+
select: SelectData;
|
50
|
+
share: ShareData;
|
51
|
+
clear_status: LoadingStatus;
|
52
|
+
close_stream: string;
|
53
|
+
}>;
|
54
|
+
};
|
55
|
+
events: {
|
56
|
+
[evt: string]: CustomEvent<any>;
|
57
|
+
};
|
58
|
+
slots: {};
|
59
|
+
};
|
60
|
+
export type IndexProps = typeof __propDef.props;
|
61
|
+
export type IndexEvents = typeof __propDef.events;
|
62
|
+
export type IndexSlots = typeof __propDef.slots;
|
63
|
+
export default class Index extends SvelteComponent<IndexProps, IndexEvents, IndexSlots> {
|
64
|
+
get modify_stream_state(): (state: "open" | "closed" | "waiting") => void;
|
65
|
+
get get_stream_state(): () => void;
|
66
|
+
get undefined(): any;
|
67
|
+
/**accessor*/
|
68
|
+
set undefined(_: any);
|
69
|
+
get set_time_limit(): (arg0: number) => void;
|
70
|
+
/**accessor*/
|
71
|
+
set set_time_limit(_: (arg0: number) => void);
|
72
|
+
get value_is_output(): boolean | undefined;
|
73
|
+
/**accessor*/
|
74
|
+
set value_is_output(_: boolean | undefined);
|
75
|
+
get elem_id(): string | undefined;
|
76
|
+
/**accessor*/
|
77
|
+
set elem_id(_: string | undefined);
|
78
|
+
get elem_classes(): string[] | undefined;
|
79
|
+
/**accessor*/
|
80
|
+
set elem_classes(_: string[] | undefined);
|
81
|
+
get visible(): boolean | undefined;
|
82
|
+
/**accessor*/
|
83
|
+
set visible(_: boolean | undefined);
|
84
|
+
get value(): FileData | null | undefined;
|
85
|
+
/**accessor*/
|
86
|
+
set value(_: FileData | null | undefined);
|
87
|
+
get label(): string;
|
88
|
+
/**accessor*/
|
89
|
+
set label(_: string);
|
90
|
+
get show_label(): boolean;
|
91
|
+
/**accessor*/
|
92
|
+
set show_label(_: boolean);
|
93
|
+
get show_download_button(): boolean;
|
94
|
+
/**accessor*/
|
95
|
+
set show_download_button(_: boolean);
|
96
|
+
get root(): string;
|
97
|
+
/**accessor*/
|
98
|
+
set root(_: string);
|
99
|
+
get height(): number | undefined;
|
100
|
+
/**accessor*/
|
101
|
+
set height(_: number | undefined);
|
102
|
+
get width(): number | undefined;
|
103
|
+
/**accessor*/
|
104
|
+
set width(_: number | undefined);
|
105
|
+
get stream_every(): number;
|
106
|
+
/**accessor*/
|
107
|
+
set stream_every(_: number);
|
108
|
+
get _selectable(): boolean | undefined;
|
109
|
+
/**accessor*/
|
110
|
+
set _selectable(_: boolean | undefined);
|
111
|
+
get container(): boolean | undefined;
|
112
|
+
/**accessor*/
|
113
|
+
set container(_: boolean | undefined);
|
114
|
+
get scale(): number | null | undefined;
|
115
|
+
/**accessor*/
|
116
|
+
set scale(_: number | null | undefined);
|
117
|
+
get min_width(): number | undefined;
|
118
|
+
/**accessor*/
|
119
|
+
set min_width(_: number | undefined);
|
120
|
+
get loading_status(): LoadingStatus;
|
121
|
+
/**accessor*/
|
122
|
+
set loading_status(_: LoadingStatus);
|
123
|
+
get show_share_button(): boolean | undefined;
|
124
|
+
/**accessor*/
|
125
|
+
set show_share_button(_: boolean | undefined);
|
126
|
+
get sources(): ("upload" | "clipboard" | "webcam")[] | undefined;
|
127
|
+
/**accessor*/
|
128
|
+
set sources(_: ("upload" | "clipboard" | "webcam")[] | undefined);
|
129
|
+
get interactive(): boolean;
|
130
|
+
/**accessor*/
|
131
|
+
set interactive(_: boolean);
|
132
|
+
get streaming(): boolean;
|
133
|
+
/**accessor*/
|
134
|
+
set streaming(_: boolean);
|
135
|
+
get pending(): boolean;
|
136
|
+
/**accessor*/
|
137
|
+
set pending(_: boolean);
|
138
|
+
get mirror_webcam(): boolean;
|
139
|
+
/**accessor*/
|
140
|
+
set mirror_webcam(_: boolean);
|
141
|
+
get placeholder(): string | undefined;
|
142
|
+
/**accessor*/
|
143
|
+
set placeholder(_: string | undefined);
|
144
|
+
get show_fullscreen_button(): boolean;
|
145
|
+
/**accessor*/
|
146
|
+
set show_fullscreen_button(_: boolean);
|
147
|
+
get gradio(): Gradio<{
|
148
|
+
input: never;
|
149
|
+
change: never;
|
150
|
+
error: string;
|
151
|
+
edit: never;
|
152
|
+
stream: ValueData;
|
153
|
+
drag: never;
|
154
|
+
upload: never;
|
155
|
+
clear: never;
|
156
|
+
select: SelectData;
|
157
|
+
share: ShareData;
|
158
|
+
clear_status: LoadingStatus;
|
159
|
+
close_stream: string;
|
160
|
+
}>;
|
161
|
+
/**accessor*/
|
162
|
+
set gradio(_: Gradio<{
|
163
|
+
input: never;
|
164
|
+
change: never;
|
165
|
+
error: string;
|
166
|
+
edit: never;
|
167
|
+
stream: ValueData;
|
168
|
+
drag: never;
|
169
|
+
upload: never;
|
170
|
+
clear: never;
|
171
|
+
select: SelectData;
|
172
|
+
share: ShareData;
|
173
|
+
clear_status: LoadingStatus;
|
174
|
+
close_stream: string;
|
175
|
+
}>);
|
176
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<script>import { createEventDispatcher } from "svelte";
|
2
|
+
import { IconButton } from "@gradio/atoms";
|
3
|
+
import { Clear } from "@gradio/icons";
|
4
|
+
const dispatch = createEventDispatcher();
|
5
|
+
</script>
|
6
|
+
|
7
|
+
<div>
|
8
|
+
<IconButton
|
9
|
+
Icon={Clear}
|
10
|
+
label="Remove Image"
|
11
|
+
on:click={(event) => {
|
12
|
+
dispatch("remove_image");
|
13
|
+
event.stopPropagation();
|
14
|
+
}}
|
15
|
+
/>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<style>
|
19
|
+
div {
|
20
|
+
display: flex;
|
21
|
+
position: absolute;
|
22
|
+
top: var(--size-2);
|
23
|
+
right: var(--size-2);
|
24
|
+
justify-content: flex-end;
|
25
|
+
gap: var(--spacing-sm);
|
26
|
+
z-index: var(--layer-5);
|
27
|
+
}
|
28
|
+
</style>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
declare const __propDef: {
|
3
|
+
props: {
|
4
|
+
[x: string]: never;
|
5
|
+
};
|
6
|
+
events: {
|
7
|
+
remove_image: CustomEvent<any>;
|
8
|
+
} & {
|
9
|
+
[evt: string]: CustomEvent<any>;
|
10
|
+
};
|
11
|
+
slots: {};
|
12
|
+
};
|
13
|
+
export type ClearImageProps = typeof __propDef.props;
|
14
|
+
export type ClearImageEvents = typeof __propDef.events;
|
15
|
+
export type ClearImageSlots = typeof __propDef.slots;
|
16
|
+
export default class ClearImage extends SvelteComponent<ClearImageProps, ClearImageEvents, ClearImageSlots> {
|
17
|
+
}
|
18
|
+
export {};
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<script>import { createEventDispatcher } from "svelte";
|
2
|
+
const dispatch = createEventDispatcher();
|
3
|
+
import { resolve_wasm_src } from "@gradio/wasm/svelte";
|
4
|
+
export let src = void 0;
|
5
|
+
let resolved_src;
|
6
|
+
let latest_src;
|
7
|
+
$: {
|
8
|
+
resolved_src = src;
|
9
|
+
latest_src = src;
|
10
|
+
const resolving_src = src;
|
11
|
+
resolve_wasm_src(resolving_src).then((s) => {
|
12
|
+
if (latest_src === resolving_src) {
|
13
|
+
resolved_src = s;
|
14
|
+
}
|
15
|
+
});
|
16
|
+
}
|
17
|
+
</script>
|
18
|
+
|
19
|
+
<!-- svelte-ignore a11y-missing-attribute -->
|
20
|
+
<img src={resolved_src} {...$$restProps} on:load={() => dispatch("load")} />
|
21
|
+
|
22
|
+
<style>
|
23
|
+
img {
|
24
|
+
object-fit: cover;
|
25
|
+
}
|
26
|
+
</style>
|
@@ -0,0 +1,247 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
declare const __propDef: {
|
3
|
+
props: {
|
4
|
+
[x: `data-${string}`]: any;
|
5
|
+
alt?: string | undefined | null;
|
6
|
+
crossorigin?: "anonymous" | "use-credentials" | "" | undefined | null;
|
7
|
+
decoding?: "async" | "auto" | "sync" | undefined | null;
|
8
|
+
fetchpriority?: "auto" | "high" | "low" | undefined | null;
|
9
|
+
height?: number | string | undefined | null;
|
10
|
+
ismap?: boolean | undefined | null;
|
11
|
+
loading?: "eager" | "lazy" | undefined | null;
|
12
|
+
referrerpolicy?: ReferrerPolicy | undefined | null;
|
13
|
+
sizes?: string | undefined | null;
|
14
|
+
src?: string | undefined | null;
|
15
|
+
srcset?: string | undefined | null;
|
16
|
+
usemap?: string | undefined | null;
|
17
|
+
width?: number | string | undefined | null;
|
18
|
+
readonly 'bind:naturalWidth'?: number | undefined | null;
|
19
|
+
readonly 'bind:naturalHeight'?: number | undefined | null;
|
20
|
+
accesskey?: string | undefined | null;
|
21
|
+
autofocus?: boolean | undefined | null;
|
22
|
+
class?: string | undefined | null;
|
23
|
+
contenteditable?: import("svelte/elements").Booleanish | "inherit" | "plaintext-only" | undefined | null;
|
24
|
+
contextmenu?: string | undefined | null;
|
25
|
+
dir?: string | undefined | null;
|
26
|
+
draggable?: import("svelte/elements").Booleanish | undefined | null;
|
27
|
+
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | null;
|
28
|
+
hidden?: boolean | undefined | null;
|
29
|
+
id?: string | undefined | null;
|
30
|
+
lang?: string | undefined | null;
|
31
|
+
part?: string | undefined | null;
|
32
|
+
placeholder?: string | undefined | null;
|
33
|
+
slot?: string | undefined | null;
|
34
|
+
spellcheck?: import("svelte/elements").Booleanish | undefined | null;
|
35
|
+
style?: string | undefined | null;
|
36
|
+
tabindex?: number | undefined | null;
|
37
|
+
title?: string | undefined | null;
|
38
|
+
translate?: "yes" | "no" | "" | undefined | null;
|
39
|
+
inert?: boolean | undefined | null;
|
40
|
+
popover?: "auto" | "manual" | "" | undefined | null;
|
41
|
+
radiogroup?: string | undefined | null;
|
42
|
+
role?: import("svelte/elements").AriaRole | undefined | null;
|
43
|
+
about?: string | undefined | null;
|
44
|
+
datatype?: string | undefined | null;
|
45
|
+
inlist?: any;
|
46
|
+
prefix?: string | undefined | null;
|
47
|
+
property?: string | undefined | null;
|
48
|
+
resource?: string | undefined | null;
|
49
|
+
typeof?: string | undefined | null;
|
50
|
+
vocab?: string | undefined | null;
|
51
|
+
autocapitalize?: string | undefined | null;
|
52
|
+
autocorrect?: string | undefined | null;
|
53
|
+
autosave?: string | undefined | null;
|
54
|
+
color?: string | undefined | null;
|
55
|
+
itemprop?: string | undefined | null;
|
56
|
+
itemscope?: boolean | undefined | null;
|
57
|
+
itemtype?: string | undefined | null;
|
58
|
+
itemid?: string | undefined | null;
|
59
|
+
itemref?: string | undefined | null;
|
60
|
+
results?: number | undefined | null;
|
61
|
+
security?: string | undefined | null;
|
62
|
+
unselectable?: "on" | "off" | undefined | null;
|
63
|
+
inputmode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | null;
|
64
|
+
is?: string | undefined | null;
|
65
|
+
'bind:innerHTML'?: string | undefined | null;
|
66
|
+
'bind:textContent'?: string | undefined | null;
|
67
|
+
'bind:innerText'?: string | undefined | null;
|
68
|
+
readonly 'bind:contentRect'?: DOMRectReadOnly | undefined | null;
|
69
|
+
readonly 'bind:contentBoxSize'?: ResizeObserverSize[] | undefined | null;
|
70
|
+
readonly 'bind:borderBoxSize'?: ResizeObserverSize[] | undefined | null;
|
71
|
+
readonly 'bind:devicePixelContentBoxSize'?: ResizeObserverSize[] | undefined | null;
|
72
|
+
'data-sveltekit-keepfocus'?: true | "" | "off" | undefined | null;
|
73
|
+
'data-sveltekit-noscroll'?: true | "" | "off" | undefined | null;
|
74
|
+
'data-sveltekit-preload-code'?: true | "" | "eager" | "viewport" | "hover" | "tap" | "off" | undefined | null;
|
75
|
+
'data-sveltekit-preload-data'?: true | "" | "hover" | "tap" | "off" | undefined | null;
|
76
|
+
'data-sveltekit-reload'?: true | "" | "off" | undefined | null;
|
77
|
+
'data-sveltekit-replacestate'?: true | "" | "off" | undefined | null;
|
78
|
+
'aria-activedescendant'?: string | undefined | null;
|
79
|
+
'aria-atomic'?: import("svelte/elements").Booleanish | undefined | null;
|
80
|
+
'aria-autocomplete'?: "none" | "inline" | "list" | "both" | undefined | null;
|
81
|
+
'aria-busy'?: import("svelte/elements").Booleanish | undefined | null;
|
82
|
+
'aria-checked'?: boolean | "false" | "mixed" | "true" | undefined | null;
|
83
|
+
'aria-colcount'?: number | undefined | null;
|
84
|
+
'aria-colindex'?: number | undefined | null;
|
85
|
+
'aria-colspan'?: number | undefined | null;
|
86
|
+
'aria-controls'?: string | undefined | null;
|
87
|
+
'aria-current'?: import("svelte/elements").Booleanish | "page" | "step" | "location" | "date" | "time" | undefined | null;
|
88
|
+
'aria-describedby'?: string | undefined | null;
|
89
|
+
'aria-details'?: string | undefined | null;
|
90
|
+
'aria-disabled'?: import("svelte/elements").Booleanish | undefined | null;
|
91
|
+
'aria-dropeffect'?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | null;
|
92
|
+
'aria-errormessage'?: string | undefined | null;
|
93
|
+
'aria-expanded'?: import("svelte/elements").Booleanish | undefined | null;
|
94
|
+
'aria-flowto'?: string | undefined | null;
|
95
|
+
'aria-grabbed'?: import("svelte/elements").Booleanish | undefined | null;
|
96
|
+
'aria-haspopup'?: import("svelte/elements").Booleanish | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | null;
|
97
|
+
'aria-hidden'?: import("svelte/elements").Booleanish | undefined | null;
|
98
|
+
'aria-invalid'?: import("svelte/elements").Booleanish | "grammar" | "spelling" | undefined | null;
|
99
|
+
'aria-keyshortcuts'?: string | undefined | null;
|
100
|
+
'aria-label'?: string | undefined | null;
|
101
|
+
'aria-labelledby'?: string | undefined | null;
|
102
|
+
'aria-level'?: number | undefined | null;
|
103
|
+
'aria-live'?: "off" | "assertive" | "polite" | undefined | null;
|
104
|
+
'aria-modal'?: import("svelte/elements").Booleanish | undefined | null;
|
105
|
+
'aria-multiline'?: import("svelte/elements").Booleanish | undefined | null;
|
106
|
+
'aria-multiselectable'?: import("svelte/elements").Booleanish | undefined | null;
|
107
|
+
'aria-orientation'?: "horizontal" | "vertical" | undefined | null;
|
108
|
+
'aria-owns'?: string | undefined | null;
|
109
|
+
'aria-placeholder'?: string | undefined | null;
|
110
|
+
'aria-posinset'?: number | undefined | null;
|
111
|
+
'aria-pressed'?: boolean | "false" | "mixed" | "true" | undefined | null;
|
112
|
+
'aria-readonly'?: import("svelte/elements").Booleanish | undefined | null;
|
113
|
+
'aria-relevant'?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | null;
|
114
|
+
'aria-required'?: import("svelte/elements").Booleanish | undefined | null;
|
115
|
+
'aria-roledescription'?: string | undefined | null;
|
116
|
+
'aria-rowcount'?: number | undefined | null;
|
117
|
+
'aria-rowindex'?: number | undefined | null;
|
118
|
+
'aria-rowspan'?: number | undefined | null;
|
119
|
+
'aria-selected'?: import("svelte/elements").Booleanish | undefined | null;
|
120
|
+
'aria-setsize'?: number | undefined | null;
|
121
|
+
'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined | null;
|
122
|
+
'aria-valuemax'?: number | undefined | null;
|
123
|
+
'aria-valuemin'?: number | undefined | null;
|
124
|
+
'aria-valuenow'?: number | undefined | null;
|
125
|
+
'aria-valuetext'?: string | undefined | null;
|
126
|
+
'on:copy'?: import("svelte/elements").ClipboardEventHandler<HTMLImageElement> | null | undefined;
|
127
|
+
'on:cut'?: import("svelte/elements").ClipboardEventHandler<HTMLImageElement> | null | undefined;
|
128
|
+
'on:paste'?: import("svelte/elements").ClipboardEventHandler<HTMLImageElement> | null | undefined;
|
129
|
+
'on:compositionend'?: import("svelte/elements").CompositionEventHandler<HTMLImageElement> | null | undefined;
|
130
|
+
'on:compositionstart'?: import("svelte/elements").CompositionEventHandler<HTMLImageElement> | null | undefined;
|
131
|
+
'on:compositionupdate'?: import("svelte/elements").CompositionEventHandler<HTMLImageElement> | null | undefined;
|
132
|
+
'on:focus'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
133
|
+
'on:focusin'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
134
|
+
'on:focusout'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
135
|
+
'on:blur'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
136
|
+
'on:change'?: import("svelte/elements").FormEventHandler<HTMLImageElement> | null | undefined;
|
137
|
+
'on:beforeinput'?: import("svelte/elements").EventHandler<InputEvent, HTMLImageElement> | null | undefined;
|
138
|
+
'on:input'?: import("svelte/elements").FormEventHandler<HTMLImageElement> | null | undefined;
|
139
|
+
'on:reset'?: import("svelte/elements").FormEventHandler<HTMLImageElement> | null | undefined;
|
140
|
+
'on:submit'?: import("svelte/elements").EventHandler<SubmitEvent, HTMLImageElement> | null | undefined;
|
141
|
+
'on:invalid'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
142
|
+
'on:formdata'?: import("svelte/elements").EventHandler<FormDataEvent, HTMLImageElement> | null | undefined;
|
143
|
+
'on:load'?: import("svelte/elements").EventHandler | undefined | null;
|
144
|
+
'on:error'?: import("svelte/elements").EventHandler | undefined | null;
|
145
|
+
'on:beforetoggle'?: import("svelte/elements").ToggleEventHandler<HTMLImageElement> | null | undefined;
|
146
|
+
'on:toggle'?: import("svelte/elements").ToggleEventHandler<HTMLImageElement> | null | undefined;
|
147
|
+
'on:keydown'?: import("svelte/elements").KeyboardEventHandler<HTMLImageElement> | null | undefined;
|
148
|
+
'on:keypress'?: import("svelte/elements").KeyboardEventHandler<HTMLImageElement> | null | undefined;
|
149
|
+
'on:keyup'?: import("svelte/elements").KeyboardEventHandler<HTMLImageElement> | null | undefined;
|
150
|
+
'on:abort'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
151
|
+
'on:canplay'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
152
|
+
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
153
|
+
'on:cuechange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
154
|
+
'on:durationchange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
155
|
+
'on:emptied'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
156
|
+
'on:encrypted'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
157
|
+
'on:ended'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
158
|
+
'on:loadeddata'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
159
|
+
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
160
|
+
'on:loadstart'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
161
|
+
'on:pause'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
162
|
+
'on:play'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
163
|
+
'on:playing'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
164
|
+
'on:progress'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
165
|
+
'on:ratechange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
166
|
+
'on:seeked'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
167
|
+
'on:seeking'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
168
|
+
'on:stalled'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
169
|
+
'on:suspend'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
170
|
+
'on:timeupdate'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
171
|
+
'on:volumechange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
172
|
+
'on:waiting'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
173
|
+
'on:auxclick'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
174
|
+
'on:click'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
175
|
+
'on:contextmenu'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
176
|
+
'on:dblclick'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
177
|
+
'on:drag'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
178
|
+
'on:dragend'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
179
|
+
'on:dragenter'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
180
|
+
'on:dragexit'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
181
|
+
'on:dragleave'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
182
|
+
'on:dragover'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
183
|
+
'on:dragstart'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
184
|
+
'on:drop'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
185
|
+
'on:mousedown'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
186
|
+
'on:mouseenter'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
187
|
+
'on:mouseleave'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
188
|
+
'on:mousemove'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
189
|
+
'on:mouseout'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
190
|
+
'on:mouseover'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
191
|
+
'on:mouseup'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
192
|
+
'on:select'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
193
|
+
'on:selectionchange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
194
|
+
'on:selectstart'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
195
|
+
'on:touchcancel'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
196
|
+
'on:touchend'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
197
|
+
'on:touchmove'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
198
|
+
'on:touchstart'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
199
|
+
'on:gotpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
200
|
+
'on:pointercancel'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
201
|
+
'on:pointerdown'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
202
|
+
'on:pointerenter'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
203
|
+
'on:pointerleave'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
204
|
+
'on:pointermove'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
205
|
+
'on:pointerout'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
206
|
+
'on:pointerover'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
207
|
+
'on:pointerup'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
208
|
+
'on:lostpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
209
|
+
'on:gamepadconnected'?: import("svelte/elements").GamepadEventHandler<HTMLImageElement> | null | undefined;
|
210
|
+
'on:gamepaddisconnected'?: import("svelte/elements").GamepadEventHandler<HTMLImageElement> | null | undefined;
|
211
|
+
'on:scroll'?: import("svelte/elements").UIEventHandler<HTMLImageElement> | null | undefined;
|
212
|
+
'on:scrollend'?: import("svelte/elements").UIEventHandler<HTMLImageElement> | null | undefined;
|
213
|
+
'on:resize'?: import("svelte/elements").UIEventHandler<HTMLImageElement> | null | undefined;
|
214
|
+
'on:wheel'?: import("svelte/elements").WheelEventHandler<HTMLImageElement> | null | undefined;
|
215
|
+
'on:animationstart'?: import("svelte/elements").AnimationEventHandler<HTMLImageElement> | null | undefined;
|
216
|
+
'on:animationend'?: import("svelte/elements").AnimationEventHandler<HTMLImageElement> | null | undefined;
|
217
|
+
'on:animationiteration'?: import("svelte/elements").AnimationEventHandler<HTMLImageElement> | null | undefined;
|
218
|
+
'on:transitionstart'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
219
|
+
'on:transitionrun'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
220
|
+
'on:transitionend'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
221
|
+
'on:transitioncancel'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
222
|
+
'on:outrostart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
223
|
+
'on:outroend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
224
|
+
'on:introstart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
225
|
+
'on:introend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
226
|
+
'on:message'?: import("svelte/elements").MessageEventHandler<HTMLImageElement> | null | undefined;
|
227
|
+
'on:messageerror'?: import("svelte/elements").MessageEventHandler<HTMLImageElement> | null | undefined;
|
228
|
+
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
229
|
+
'on:cancel'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
230
|
+
'on:close'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
231
|
+
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
232
|
+
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
233
|
+
"data-testid"?: string | undefined;
|
234
|
+
};
|
235
|
+
events: {
|
236
|
+
load?: CustomEvent<void | undefined> | undefined;
|
237
|
+
} & {
|
238
|
+
[evt: string]: CustomEvent<any>;
|
239
|
+
};
|
240
|
+
slots: {};
|
241
|
+
};
|
242
|
+
export type ImageProps = typeof __propDef.props;
|
243
|
+
export type ImageEvents = typeof __propDef.events;
|
244
|
+
export type ImageSlots = typeof __propDef.slots;
|
245
|
+
export default class Image extends SvelteComponent<ImageProps, ImageEvents, ImageSlots> {
|
246
|
+
}
|
247
|
+
export {};
|
@@ -0,0 +1,155 @@
|
|
1
|
+
<script>import { createEventDispatcher, onMount } from "svelte";
|
2
|
+
import { uploadToHuggingFace } from "@gradio/utils";
|
3
|
+
import { BlockLabel, Empty, IconButton, ShareButton } from "@gradio/atoms";
|
4
|
+
import { Download } from "@gradio/icons";
|
5
|
+
import { get_coordinates_of_clicked_image } from "./utils";
|
6
|
+
import Image from "./Image.svelte";
|
7
|
+
import { DownloadLink } from "@gradio/wasm/svelte";
|
8
|
+
import { Maximize, Minimize } from "@gradio/icons";
|
9
|
+
import { Image as ImageIcon } from "@gradio/icons";
|
10
|
+
import {} from "@gradio/client";
|
11
|
+
export let value;
|
12
|
+
export let label = void 0;
|
13
|
+
export let show_label;
|
14
|
+
export let show_download_button = true;
|
15
|
+
export let selectable = false;
|
16
|
+
export let show_share_button = false;
|
17
|
+
export let i18n;
|
18
|
+
export let show_fullscreen_button = true;
|
19
|
+
const dispatch = createEventDispatcher();
|
20
|
+
const handle_click = (evt) => {
|
21
|
+
let coordinates = get_coordinates_of_clicked_image(evt);
|
22
|
+
if (coordinates) {
|
23
|
+
dispatch("select", { index: coordinates, value: null });
|
24
|
+
}
|
25
|
+
};
|
26
|
+
let is_full_screen = false;
|
27
|
+
let image_container;
|
28
|
+
onMount(() => {
|
29
|
+
document.addEventListener("fullscreenchange", () => {
|
30
|
+
is_full_screen = !!document.fullscreenElement;
|
31
|
+
});
|
32
|
+
});
|
33
|
+
const toggle_full_screen = async () => {
|
34
|
+
if (!is_full_screen) {
|
35
|
+
await image_container.requestFullscreen();
|
36
|
+
} else {
|
37
|
+
await document.exitFullscreen();
|
38
|
+
is_full_screen = !is_full_screen;
|
39
|
+
}
|
40
|
+
};
|
41
|
+
</script>
|
42
|
+
|
43
|
+
<BlockLabel
|
44
|
+
{show_label}
|
45
|
+
Icon={ImageIcon}
|
46
|
+
label={!show_label ? "" : label || i18n("image.image")}
|
47
|
+
/>
|
48
|
+
{#if value === null || !value.url}
|
49
|
+
<Empty unpadded_box={true} size="large"><ImageIcon /></Empty>
|
50
|
+
{:else}
|
51
|
+
<div class="image-container" bind:this={image_container}>
|
52
|
+
<div class="icon-buttons">
|
53
|
+
{#if !is_full_screen && show_fullscreen_button}
|
54
|
+
<IconButton
|
55
|
+
Icon={Maximize}
|
56
|
+
label={is_full_screen ? "Exit full screen" : "View in full screen"}
|
57
|
+
on:click={toggle_full_screen}
|
58
|
+
/>
|
59
|
+
{/if}
|
60
|
+
|
61
|
+
{#if is_full_screen && show_fullscreen_button}
|
62
|
+
<IconButton
|
63
|
+
Icon={Minimize}
|
64
|
+
label={is_full_screen ? "Exit full screen" : "View in full screen"}
|
65
|
+
on:click={toggle_full_screen}
|
66
|
+
/>
|
67
|
+
{/if}
|
68
|
+
|
69
|
+
{#if show_download_button}
|
70
|
+
<DownloadLink href={value.url} download={value.orig_name || "image"}>
|
71
|
+
<IconButton Icon={Download} label={i18n("common.download")} />
|
72
|
+
</DownloadLink>
|
73
|
+
{/if}
|
74
|
+
{#if show_share_button}
|
75
|
+
<ShareButton
|
76
|
+
{i18n}
|
77
|
+
on:share
|
78
|
+
on:error
|
79
|
+
formatter={async (value) => {
|
80
|
+
if (!value) return "";
|
81
|
+
let url = await uploadToHuggingFace(value, "url");
|
82
|
+
return `<img src="${url}" />`;
|
83
|
+
}}
|
84
|
+
{value}
|
85
|
+
/>
|
86
|
+
{/if}
|
87
|
+
</div>
|
88
|
+
<button on:click={handle_click}>
|
89
|
+
<div class:selectable class="image-frame">
|
90
|
+
<Image src={value.url} alt="" loading="lazy" on:load />
|
91
|
+
</div>
|
92
|
+
</button>
|
93
|
+
</div>
|
94
|
+
{/if}
|
95
|
+
|
96
|
+
<style>
|
97
|
+
.image-container {
|
98
|
+
height: 100%;
|
99
|
+
position: relative;
|
100
|
+
}
|
101
|
+
|
102
|
+
.image-container button {
|
103
|
+
width: var(--size-full);
|
104
|
+
height: var(--size-full);
|
105
|
+
border-radius: var(--radius-lg);
|
106
|
+
|
107
|
+
display: flex;
|
108
|
+
align-items: center;
|
109
|
+
justify-content: center;
|
110
|
+
}
|
111
|
+
|
112
|
+
.image-frame {
|
113
|
+
width: auto;
|
114
|
+
height: 100%;
|
115
|
+
display: flex;
|
116
|
+
align-items: center;
|
117
|
+
justify-content: center;
|
118
|
+
}
|
119
|
+
.image-frame :global(img) {
|
120
|
+
width: var(--size-full);
|
121
|
+
height: var(--size-full);
|
122
|
+
object-fit: scale-down;
|
123
|
+
}
|
124
|
+
|
125
|
+
.selectable {
|
126
|
+
cursor: crosshair;
|
127
|
+
}
|
128
|
+
|
129
|
+
.icon-buttons {
|
130
|
+
display: flex;
|
131
|
+
position: absolute;
|
132
|
+
top: 6px;
|
133
|
+
right: 6px;
|
134
|
+
gap: var(--size-1);
|
135
|
+
z-index: 1;
|
136
|
+
}
|
137
|
+
|
138
|
+
:global(.fullscreen-controls svg) {
|
139
|
+
position: relative;
|
140
|
+
top: 0px;
|
141
|
+
}
|
142
|
+
|
143
|
+
:global(.image-container:fullscreen) {
|
144
|
+
background-color: black;
|
145
|
+
display: flex;
|
146
|
+
justify-content: center;
|
147
|
+
align-items: center;
|
148
|
+
}
|
149
|
+
|
150
|
+
:global(.image-container:fullscreen img) {
|
151
|
+
max-width: 90vw;
|
152
|
+
max-height: 90vh;
|
153
|
+
object-fit: scale-down;
|
154
|
+
}
|
155
|
+
</style>
|