@gradio/gallery 0.15.35-dev.0 → 0.15.35-dev.3
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 +35 -0
- package/Gallery.stories.svelte +25 -0
- package/Index.svelte +78 -91
- package/dist/Example.svelte +6 -3
- package/dist/Example.svelte.d.ts +20 -18
- package/dist/Index.svelte +122 -103
- package/dist/Index.svelte.d.ts +3 -59
- package/dist/shared/Gallery.svelte +338 -240
- package/dist/shared/Gallery.svelte.d.ts +57 -52
- package/dist/types.d.ts +30 -1
- package/package.json +13 -13
- package/shared/Gallery.svelte +29 -14
- package/types.ts +30 -1
|
@@ -1,59 +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;
|
|
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;
|
|
33
16
|
};
|
|
34
|
-
|
|
35
|
-
fullscreen: CustomEvent<any>;
|
|
36
|
-
share: CustomEvent<import("@gradio/utils").ShareData>;
|
|
37
|
-
error: CustomEvent<any>;
|
|
38
|
-
change: CustomEvent<undefined>;
|
|
39
|
-
select: CustomEvent<SelectData>;
|
|
40
|
-
preview_open: CustomEvent<undefined>;
|
|
41
|
-
preview_close: CustomEvent<undefined>;
|
|
42
|
-
delete: CustomEvent<{
|
|
43
|
-
file: FileData;
|
|
44
|
-
index: number;
|
|
45
|
-
}>;
|
|
46
|
-
upload: CustomEvent<any>;
|
|
47
|
-
} & {
|
|
48
|
-
[evt: string]: CustomEvent<any>;
|
|
49
|
-
};
|
|
50
|
-
slots: {};
|
|
51
|
-
exports?: {} | undefined;
|
|
52
|
-
bindings?: string | undefined;
|
|
53
|
-
};
|
|
54
|
-
export type GalleryProps = typeof __propDef.props;
|
|
55
|
-
export type GalleryEvents = typeof __propDef.events;
|
|
56
|
-
export type GallerySlots = typeof __propDef.slots;
|
|
57
|
-
export default class Gallery extends SvelteComponent<GalleryProps, GalleryEvents, GallerySlots> {
|
|
17
|
+
z_$$bindings?: Bindings;
|
|
58
18
|
}
|
|
59
|
-
|
|
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-dev.
|
|
3
|
+
"version": "0.15.35-dev.3",
|
|
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/atoms": "^0.
|
|
12
|
-
"@gradio/client": "^2.0.0-dev.
|
|
13
|
-
"@gradio/icons": "^0.
|
|
14
|
-
"@gradio/image": "^0.
|
|
15
|
-
"@gradio/
|
|
16
|
-
"@gradio/
|
|
17
|
-
"@gradio/utils": "^0.10.
|
|
18
|
-
"@gradio/
|
|
19
|
-
"@gradio/
|
|
10
|
+
"dequal": "^2.0.3",
|
|
11
|
+
"@gradio/atoms": "^0.19.0-dev.1",
|
|
12
|
+
"@gradio/client": "^2.0.0-dev.2",
|
|
13
|
+
"@gradio/icons": "^0.15.0-dev.0",
|
|
14
|
+
"@gradio/image": "^0.24.0-dev.2",
|
|
15
|
+
"@gradio/statustracker": "^0.12.0-dev.1",
|
|
16
|
+
"@gradio/upload": "^0.17.2-dev.2",
|
|
17
|
+
"@gradio/utils": "^0.10.3-dev.0",
|
|
18
|
+
"@gradio/file": "^0.13.1-dev.2",
|
|
19
|
+
"@gradio/video": "^0.17.0-dev.2"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@gradio/preview": "^0.
|
|
22
|
+
"@gradio/preview": "^0.15.0-dev.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
|
@@ -55,6 +55,8 @@
|
|
|
55
55
|
export let max_file_size: number | null = null;
|
|
56
56
|
export let upload: Client["upload"] | undefined = undefined;
|
|
57
57
|
export let stream_handler: Client["stream"] | undefined = undefined;
|
|
58
|
+
export let fit_columns = true;
|
|
59
|
+
export let upload_promise: Promise<any> | null = null;
|
|
58
60
|
|
|
59
61
|
let is_full_screen = false;
|
|
60
62
|
let image_container: HTMLElement;
|
|
@@ -68,6 +70,7 @@
|
|
|
68
70
|
delete: { file: FileData; index: number };
|
|
69
71
|
upload: FileData | FileData[];
|
|
70
72
|
error: string;
|
|
73
|
+
clear: undefined;
|
|
71
74
|
}>();
|
|
72
75
|
|
|
73
76
|
// tracks whether the value of the gallery was reset
|
|
@@ -95,7 +98,7 @@
|
|
|
95
98
|
let effective_columns: number | number[] | undefined = columns;
|
|
96
99
|
|
|
97
100
|
$: {
|
|
98
|
-
if (resolved_value && columns) {
|
|
101
|
+
if (resolved_value && columns && fit_columns) {
|
|
99
102
|
const item_count = resolved_value.length;
|
|
100
103
|
if (Array.isArray(columns)) {
|
|
101
104
|
effective_columns = columns.map((col) => Math.min(col, item_count));
|
|
@@ -279,7 +282,7 @@
|
|
|
279
282
|
window.removeEventListener("resize", check_thumbnails_overflow);
|
|
280
283
|
});
|
|
281
284
|
|
|
282
|
-
$: resolved_value, check_thumbnails_overflow();
|
|
285
|
+
$: (resolved_value, check_thumbnails_overflow());
|
|
283
286
|
$: if (container_element) {
|
|
284
287
|
check_thumbnails_overflow();
|
|
285
288
|
}
|
|
@@ -320,7 +323,7 @@
|
|
|
320
323
|
{:else}
|
|
321
324
|
<div class="gallery-container" bind:this={image_container}>
|
|
322
325
|
{#if selected_media && allow_preview}
|
|
323
|
-
<
|
|
326
|
+
<span
|
|
324
327
|
on:keydown={on_keydown}
|
|
325
328
|
class="preview"
|
|
326
329
|
class:minimal={mode === "minimal"}
|
|
@@ -386,12 +389,14 @@
|
|
|
386
389
|
>
|
|
387
390
|
{#if "image" in selected_media}
|
|
388
391
|
<Image
|
|
389
|
-
|
|
392
|
+
restProps={{
|
|
393
|
+
alt: selected_media.caption || "",
|
|
394
|
+
title: selected_media.caption || null,
|
|
395
|
+
class: selected_media.caption && "with-caption",
|
|
396
|
+
loading: "lazy"
|
|
397
|
+
}}
|
|
390
398
|
src={selected_media.image.url}
|
|
391
|
-
|
|
392
|
-
title={selected_media.caption || null}
|
|
393
|
-
class={selected_media.caption && "with-caption"}
|
|
394
|
-
loading="lazy"
|
|
399
|
+
data_testid="detailed-image"
|
|
395
400
|
/>
|
|
396
401
|
{:else}
|
|
397
402
|
<Video
|
|
@@ -433,10 +438,13 @@
|
|
|
433
438
|
{#if "image" in media}
|
|
434
439
|
<Image
|
|
435
440
|
src={media.image.url}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
441
|
+
restProps={{
|
|
442
|
+
title: media.caption || null,
|
|
443
|
+
alt: "",
|
|
444
|
+
class: "with-caption",
|
|
445
|
+
loading: "lazy"
|
|
446
|
+
}}
|
|
447
|
+
data_testid={`thumbnail ${i + 1}`}
|
|
440
448
|
/>
|
|
441
449
|
{:else}
|
|
442
450
|
<Play />
|
|
@@ -453,7 +461,7 @@
|
|
|
453
461
|
</button>
|
|
454
462
|
{/each}
|
|
455
463
|
</div>
|
|
456
|
-
</
|
|
464
|
+
</span>
|
|
457
465
|
{/if}
|
|
458
466
|
|
|
459
467
|
<div
|
|
@@ -464,10 +472,17 @@
|
|
|
464
472
|
style:height={height !== "auto" ? height + "px" : null}
|
|
465
473
|
>
|
|
466
474
|
{#if interactive && selected_index === null}
|
|
467
|
-
<ModifyUpload
|
|
475
|
+
<ModifyUpload
|
|
476
|
+
{i18n}
|
|
477
|
+
on:clear={() => {
|
|
478
|
+
value = [];
|
|
479
|
+
dispatch("clear");
|
|
480
|
+
}}
|
|
481
|
+
>
|
|
468
482
|
{#if upload && stream_handler}
|
|
469
483
|
<IconButton Icon={UploadIcon} label={i18n("common.upload")}>
|
|
470
484
|
<UploadComponent
|
|
485
|
+
bind:upload_promise
|
|
471
486
|
icon_upload={true}
|
|
472
487
|
on:load={(e) => dispatch("upload", e.detail)}
|
|
473
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
|
+
}
|