@gradio/gallery 0.15.35-dev.1 → 0.15.35
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 +48 -0
- package/Gallery.test.ts +5 -2
- package/Index.svelte +78 -93
- package/dist/Example.svelte +6 -3
- package/dist/Example.svelte.d.ts +20 -18
- package/dist/Index.svelte +122 -105
- package/dist/Index.svelte.d.ts +3 -60
- package/dist/shared/Gallery.svelte +338 -241
- package/dist/shared/Gallery.svelte.d.ts +57 -53
- package/dist/types.d.ts +30 -1
- package/package.json +13 -13
- package/shared/Gallery.svelte +27 -13
- package/types.ts +30 -1
|
@@ -1,60 +1,64 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
1
|
import type { SelectData } from "@gradio/utils";
|
|
3
2
|
import type { GalleryImage, GalleryVideo } from "../types";
|
|
4
3
|
import { FileData } from "@gradio/client";
|
|
5
4
|
import type { Client } from "@gradio/client";
|
|
6
5
|
import type { I18nFormatter } from "@gradio/utils";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
object_fit?: "contain" | "cover" | "fill" | "none" | "scale-down";
|
|
18
|
-
show_share_button?: boolean;
|
|
19
|
-
show_download_button?: boolean;
|
|
20
|
-
i18n: I18nFormatter;
|
|
21
|
-
selected_index?: number | null;
|
|
22
|
-
interactive: boolean;
|
|
23
|
-
_fetch: typeof fetch;
|
|
24
|
-
mode?: "normal" | "minimal";
|
|
25
|
-
show_fullscreen_button?: boolean;
|
|
26
|
-
display_icon_button_wrapper_top_corner?: boolean;
|
|
27
|
-
fullscreen?: boolean;
|
|
28
|
-
root?: string;
|
|
29
|
-
file_types?: string[] | null;
|
|
30
|
-
max_file_size?: number | null;
|
|
31
|
-
upload?: Client["upload"] | undefined;
|
|
32
|
-
stream_handler?: Client["stream"] | undefined;
|
|
33
|
-
fit_columns?: boolean;
|
|
6
|
+
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> {
|
|
7
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
8
|
+
$$bindings?: Bindings;
|
|
9
|
+
} & Exports;
|
|
10
|
+
(internal: unknown, props: Props & {
|
|
11
|
+
$$events?: Events;
|
|
12
|
+
$$slots?: Slots;
|
|
13
|
+
}): Exports & {
|
|
14
|
+
$set?: any;
|
|
15
|
+
$on?: any;
|
|
34
16
|
};
|
|
35
|
-
|
|
36
|
-
fullscreen: CustomEvent<any>;
|
|
37
|
-
share: CustomEvent<import("@gradio/utils").ShareData>;
|
|
38
|
-
error: CustomEvent<any>;
|
|
39
|
-
change: CustomEvent<undefined>;
|
|
40
|
-
select: CustomEvent<SelectData>;
|
|
41
|
-
preview_open: CustomEvent<undefined>;
|
|
42
|
-
preview_close: CustomEvent<undefined>;
|
|
43
|
-
delete: CustomEvent<{
|
|
44
|
-
file: FileData;
|
|
45
|
-
index: number;
|
|
46
|
-
}>;
|
|
47
|
-
upload: CustomEvent<any>;
|
|
48
|
-
} & {
|
|
49
|
-
[evt: string]: CustomEvent<any>;
|
|
50
|
-
};
|
|
51
|
-
slots: {};
|
|
52
|
-
exports?: {} | undefined;
|
|
53
|
-
bindings?: string | undefined;
|
|
54
|
-
};
|
|
55
|
-
export type GalleryProps = typeof __propDef.props;
|
|
56
|
-
export type GalleryEvents = typeof __propDef.events;
|
|
57
|
-
export type GallerySlots = typeof __propDef.slots;
|
|
58
|
-
export default class Gallery extends SvelteComponent<GalleryProps, GalleryEvents, GallerySlots> {
|
|
17
|
+
z_$$bindings?: Bindings;
|
|
59
18
|
}
|
|
60
|
-
|
|
19
|
+
declare const Gallery: $$__sveltets_2_IsomorphicComponent<{
|
|
20
|
+
show_label?: boolean;
|
|
21
|
+
label: string;
|
|
22
|
+
value?: (GalleryImage | GalleryVideo)[] | null;
|
|
23
|
+
columns?: number | number[] | undefined;
|
|
24
|
+
rows?: number | number[] | undefined;
|
|
25
|
+
height?: number | "auto";
|
|
26
|
+
preview: boolean;
|
|
27
|
+
allow_preview?: boolean;
|
|
28
|
+
object_fit?: "contain" | "cover" | "fill" | "none" | "scale-down";
|
|
29
|
+
show_share_button?: boolean;
|
|
30
|
+
show_download_button?: boolean;
|
|
31
|
+
i18n: I18nFormatter;
|
|
32
|
+
selected_index?: number | null;
|
|
33
|
+
interactive: boolean;
|
|
34
|
+
_fetch: typeof fetch;
|
|
35
|
+
mode?: "normal" | "minimal";
|
|
36
|
+
show_fullscreen_button?: boolean;
|
|
37
|
+
display_icon_button_wrapper_top_corner?: boolean;
|
|
38
|
+
fullscreen?: boolean;
|
|
39
|
+
root?: string;
|
|
40
|
+
file_types?: string[] | null;
|
|
41
|
+
max_file_size?: number | null;
|
|
42
|
+
upload?: Client["upload"] | undefined;
|
|
43
|
+
stream_handler?: Client["stream"] | undefined;
|
|
44
|
+
fit_columns?: boolean;
|
|
45
|
+
upload_promise?: Promise<any> | null;
|
|
46
|
+
}, {
|
|
47
|
+
fullscreen: CustomEvent<any>;
|
|
48
|
+
share: CustomEvent<import("@gradio/utils").ShareData>;
|
|
49
|
+
error: CustomEvent<any>;
|
|
50
|
+
change: CustomEvent<undefined>;
|
|
51
|
+
select: CustomEvent<SelectData>;
|
|
52
|
+
preview_open: CustomEvent<undefined>;
|
|
53
|
+
preview_close: CustomEvent<undefined>;
|
|
54
|
+
delete: CustomEvent<{
|
|
55
|
+
file: FileData;
|
|
56
|
+
index: number;
|
|
57
|
+
}>;
|
|
58
|
+
upload: CustomEvent<FileData | FileData[]>;
|
|
59
|
+
clear: CustomEvent<undefined>;
|
|
60
|
+
} & {
|
|
61
|
+
[evt: string]: CustomEvent<any>;
|
|
62
|
+
}, {}, {}, string>;
|
|
63
|
+
type Gallery = InstanceType<typeof Gallery>;
|
|
64
|
+
export default Gallery;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FileData } from "@gradio/client";
|
|
1
|
+
import type { FileData, SelectData } from "@gradio/client";
|
|
2
2
|
export interface GalleryImage {
|
|
3
3
|
image: FileData;
|
|
4
4
|
caption: string | null;
|
|
@@ -7,3 +7,32 @@ export interface GalleryVideo {
|
|
|
7
7
|
video: FileData;
|
|
8
8
|
caption: string | null;
|
|
9
9
|
}
|
|
10
|
+
export type GalleryData = GalleryImage | GalleryVideo;
|
|
11
|
+
export interface GalleryProps {
|
|
12
|
+
value: GalleryData[] | null;
|
|
13
|
+
file_types: string[] | null;
|
|
14
|
+
columns: number | number[] | undefined;
|
|
15
|
+
rows: number | number[] | undefined;
|
|
16
|
+
height: number | "auto";
|
|
17
|
+
preview: boolean;
|
|
18
|
+
allow_preview: boolean;
|
|
19
|
+
selected_index: number | null;
|
|
20
|
+
object_fit: "contain" | "cover" | "fill" | "none" | "scale-down";
|
|
21
|
+
buttons: string[];
|
|
22
|
+
type: "numpy" | "pil" | "filepath";
|
|
23
|
+
fit_columns: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface GalleryEvents {
|
|
26
|
+
change: GalleryData[] | null;
|
|
27
|
+
upload: GalleryData[] | null;
|
|
28
|
+
select: SelectData;
|
|
29
|
+
delete: {
|
|
30
|
+
file: FileData;
|
|
31
|
+
index: number;
|
|
32
|
+
};
|
|
33
|
+
preview_open: never;
|
|
34
|
+
preview_close: never;
|
|
35
|
+
clear_status: any;
|
|
36
|
+
share: any;
|
|
37
|
+
error: any;
|
|
38
|
+
}
|
package/package.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/gallery",
|
|
3
|
-
"version": "0.15.35
|
|
3
|
+
"version": "0.15.35",
|
|
4
4
|
"description": "Gradio UI packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "",
|
|
7
7
|
"license": "ISC",
|
|
8
8
|
"private": false,
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"dequal": "^2.0.
|
|
11
|
-
"@gradio/
|
|
12
|
-
"@gradio/
|
|
13
|
-
"@gradio/
|
|
14
|
-
"@gradio/
|
|
15
|
-
"@gradio/statustracker": "^0.
|
|
16
|
-
"@gradio/
|
|
17
|
-
"@gradio/
|
|
18
|
-
"@gradio/
|
|
19
|
-
"@gradio/video": "^0.17.0
|
|
10
|
+
"dequal": "^2.0.3",
|
|
11
|
+
"@gradio/atoms": "^0.19.0",
|
|
12
|
+
"@gradio/client": "^2.0.0",
|
|
13
|
+
"@gradio/file": "^0.13.1",
|
|
14
|
+
"@gradio/icons": "^0.15.0",
|
|
15
|
+
"@gradio/statustracker": "^0.12.0",
|
|
16
|
+
"@gradio/image": "^0.24.0",
|
|
17
|
+
"@gradio/upload": "^0.17.2",
|
|
18
|
+
"@gradio/utils": "^0.10.3",
|
|
19
|
+
"@gradio/video": "^0.17.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@gradio/preview": "^0.
|
|
22
|
+
"@gradio/preview": "^0.15.0"
|
|
23
23
|
},
|
|
24
24
|
"main": "./Index.svelte",
|
|
25
25
|
"main_changeset": true,
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"svelte": "^
|
|
45
|
+
"svelte": "^5.43.4"
|
|
46
46
|
},
|
|
47
47
|
"repository": {
|
|
48
48
|
"type": "git",
|
package/shared/Gallery.svelte
CHANGED
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
export let upload: Client["upload"] | undefined = undefined;
|
|
57
57
|
export let stream_handler: Client["stream"] | undefined = undefined;
|
|
58
58
|
export let fit_columns = true;
|
|
59
|
+
export let upload_promise: Promise<any> | null = null;
|
|
59
60
|
|
|
60
61
|
let is_full_screen = false;
|
|
61
62
|
let image_container: HTMLElement;
|
|
@@ -69,6 +70,7 @@
|
|
|
69
70
|
delete: { file: FileData; index: number };
|
|
70
71
|
upload: FileData | FileData[];
|
|
71
72
|
error: string;
|
|
73
|
+
clear: undefined;
|
|
72
74
|
}>();
|
|
73
75
|
|
|
74
76
|
// tracks whether the value of the gallery was reset
|
|
@@ -280,7 +282,7 @@
|
|
|
280
282
|
window.removeEventListener("resize", check_thumbnails_overflow);
|
|
281
283
|
});
|
|
282
284
|
|
|
283
|
-
$: resolved_value, check_thumbnails_overflow();
|
|
285
|
+
$: (resolved_value, check_thumbnails_overflow());
|
|
284
286
|
$: if (container_element) {
|
|
285
287
|
check_thumbnails_overflow();
|
|
286
288
|
}
|
|
@@ -321,7 +323,7 @@
|
|
|
321
323
|
{:else}
|
|
322
324
|
<div class="gallery-container" bind:this={image_container}>
|
|
323
325
|
{#if selected_media && allow_preview}
|
|
324
|
-
<
|
|
326
|
+
<span
|
|
325
327
|
on:keydown={on_keydown}
|
|
326
328
|
class="preview"
|
|
327
329
|
class:minimal={mode === "minimal"}
|
|
@@ -387,12 +389,14 @@
|
|
|
387
389
|
>
|
|
388
390
|
{#if "image" in selected_media}
|
|
389
391
|
<Image
|
|
390
|
-
|
|
392
|
+
restProps={{
|
|
393
|
+
alt: selected_media.caption || "",
|
|
394
|
+
title: selected_media.caption || null,
|
|
395
|
+
class: selected_media.caption && "with-caption",
|
|
396
|
+
loading: "lazy"
|
|
397
|
+
}}
|
|
391
398
|
src={selected_media.image.url}
|
|
392
|
-
|
|
393
|
-
title={selected_media.caption || null}
|
|
394
|
-
class={selected_media.caption && "with-caption"}
|
|
395
|
-
loading="lazy"
|
|
399
|
+
data_testid="detailed-image"
|
|
396
400
|
/>
|
|
397
401
|
{:else}
|
|
398
402
|
<Video
|
|
@@ -434,10 +438,13 @@
|
|
|
434
438
|
{#if "image" in media}
|
|
435
439
|
<Image
|
|
436
440
|
src={media.image.url}
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
+
restProps={{
|
|
442
|
+
title: media.caption || null,
|
|
443
|
+
alt: "",
|
|
444
|
+
class: "with-caption",
|
|
445
|
+
loading: "lazy"
|
|
446
|
+
}}
|
|
447
|
+
data_testid={`thumbnail ${i + 1}`}
|
|
441
448
|
/>
|
|
442
449
|
{:else}
|
|
443
450
|
<Play />
|
|
@@ -454,7 +461,7 @@
|
|
|
454
461
|
</button>
|
|
455
462
|
{/each}
|
|
456
463
|
</div>
|
|
457
|
-
</
|
|
464
|
+
</span>
|
|
458
465
|
{/if}
|
|
459
466
|
|
|
460
467
|
<div
|
|
@@ -465,10 +472,17 @@
|
|
|
465
472
|
style:height={height !== "auto" ? height + "px" : null}
|
|
466
473
|
>
|
|
467
474
|
{#if interactive && selected_index === null}
|
|
468
|
-
<ModifyUpload
|
|
475
|
+
<ModifyUpload
|
|
476
|
+
{i18n}
|
|
477
|
+
on:clear={() => {
|
|
478
|
+
value = [];
|
|
479
|
+
dispatch("clear");
|
|
480
|
+
}}
|
|
481
|
+
>
|
|
469
482
|
{#if upload && stream_handler}
|
|
470
483
|
<IconButton Icon={UploadIcon} label={i18n("common.upload")}>
|
|
471
484
|
<UploadComponent
|
|
485
|
+
bind:upload_promise
|
|
472
486
|
icon_upload={true}
|
|
473
487
|
on:load={(e) => dispatch("upload", e.detail)}
|
|
474
488
|
filetype={file_types}
|
package/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FileData } from "@gradio/client";
|
|
1
|
+
import type { FileData, SelectData } from "@gradio/client";
|
|
2
2
|
|
|
3
3
|
export interface GalleryImage {
|
|
4
4
|
image: FileData;
|
|
@@ -9,3 +9,32 @@ export interface GalleryVideo {
|
|
|
9
9
|
video: FileData;
|
|
10
10
|
caption: string | null;
|
|
11
11
|
}
|
|
12
|
+
|
|
13
|
+
export type GalleryData = GalleryImage | GalleryVideo;
|
|
14
|
+
|
|
15
|
+
export interface GalleryProps {
|
|
16
|
+
value: GalleryData[] | null;
|
|
17
|
+
file_types: string[] | null;
|
|
18
|
+
columns: number | number[] | undefined;
|
|
19
|
+
rows: number | number[] | undefined;
|
|
20
|
+
height: number | "auto";
|
|
21
|
+
preview: boolean;
|
|
22
|
+
allow_preview: boolean;
|
|
23
|
+
selected_index: number | null;
|
|
24
|
+
object_fit: "contain" | "cover" | "fill" | "none" | "scale-down";
|
|
25
|
+
buttons: string[];
|
|
26
|
+
type: "numpy" | "pil" | "filepath";
|
|
27
|
+
fit_columns: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface GalleryEvents {
|
|
31
|
+
change: GalleryData[] | null;
|
|
32
|
+
upload: GalleryData[] | null;
|
|
33
|
+
select: SelectData;
|
|
34
|
+
delete: { file: FileData; index: number };
|
|
35
|
+
preview_open: never;
|
|
36
|
+
preview_close: never;
|
|
37
|
+
clear_status: any;
|
|
38
|
+
share: any;
|
|
39
|
+
error: any;
|
|
40
|
+
}
|