@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.
@@ -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
- declare const __propDef: {
8
- props: {
9
- show_label?: boolean;
10
- label: string;
11
- value?: (GalleryImage | GalleryVideo)[] | null;
12
- columns?: number | number[] | undefined;
13
- rows?: number | number[] | undefined;
14
- height?: number | "auto";
15
- preview: boolean;
16
- allow_preview?: boolean;
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
- events: {
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
- export {};
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.0",
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.2",
11
- "@gradio/atoms": "^0.18.1",
12
- "@gradio/client": "^2.0.0-dev.0",
13
- "@gradio/icons": "^0.14.0",
14
- "@gradio/image": "^0.23.2-dev.0",
15
- "@gradio/upload": "^0.17.2-dev.0",
16
- "@gradio/statustracker": "^0.11.1",
17
- "@gradio/utils": "^0.10.2",
18
- "@gradio/video": "^0.17.0-dev.0",
19
- "@gradio/file": "^0.13.1-dev.0"
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.14.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": "^4.0.0"
45
+ "svelte": "^5.43.4"
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",
@@ -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
- <button
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
- data-testid="detailed-image"
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
- alt={selected_media.caption || ""}
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
- title={media.caption || null}
437
- data-testid={"thumbnail " + (i + 1)}
438
- alt=""
439
- loading="lazy"
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
- </button>
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 {i18n} on:clear={() => (value = [])}>
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
+ }