@gradio/image 0.14.0 → 0.15.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 CHANGED
@@ -1,5 +1,43 @@
1
1
  # @gradio/image
2
2
 
3
+ ## 0.15.1
4
+
5
+ ### Fixes
6
+
7
+ - [#9163](https://github.com/gradio-app/gradio/pull/9163) [`2b6cbf2`](https://github.com/gradio-app/gradio/commit/2b6cbf25908e42cf027324e54ef2cc0baad11a91) - fix exports and generate types. Thanks @pngwn!
8
+
9
+ ### Dependency updates
10
+
11
+ - @gradio/utils@0.6.1
12
+ - @gradio/statustracker@0.7.6
13
+ - @gradio/atoms@0.8.1
14
+ - @gradio/icons@0.7.2
15
+ - @gradio/wasm@0.13.1
16
+ - @gradio/client@1.5.2
17
+ - @gradio/upload@0.12.4
18
+
19
+ ## 0.15.0
20
+
21
+ ### Features
22
+
23
+ - [#9031](https://github.com/gradio-app/gradio/pull/9031) [`04b7d32`](https://github.com/gradio-app/gradio/commit/04b7d327ec1227a693fc2dfea51b1e2729851bde) - Allow drag and replace image in `gr.Image` and Multimodal textbox. Thanks @hannahblair!
24
+ - [#8930](https://github.com/gradio-app/gradio/pull/8930) [`41d5ab9`](https://github.com/gradio-app/gradio/commit/41d5ab987ba9728753be4509490c79041655809b) - Add `placeholder` param to Image and ImageEditor to replace upload image text. Thanks @hannahblair!
25
+ - [#9118](https://github.com/gradio-app/gradio/pull/9118) [`e1c404d`](https://github.com/gradio-app/gradio/commit/e1c404da1143fb52b659d03e028bdba1badf443d) - setup npm-previews of all packages. Thanks @pngwn!
26
+
27
+ ### Fixes
28
+
29
+ - [#9116](https://github.com/gradio-app/gradio/pull/9116) [`ba6322e`](https://github.com/gradio-app/gradio/commit/ba6322ec2bb975f15389fe0700816bf671c6819d) - Fix image height content fit. Thanks @hannahblair!
30
+
31
+ ### Dependency updates
32
+
33
+ - @gradio/utils@0.6.0
34
+ - @gradio/upload@0.12.3
35
+ - @gradio/atoms@0.8.0
36
+ - @gradio/client@1.5.1
37
+ - @gradio/statustracker@0.7.5
38
+ - @gradio/wasm@0.13.0
39
+ - @gradio/icons@0.7.1
40
+
3
41
  ## 0.14.0
4
42
 
5
43
  ### Features
@@ -3,6 +3,8 @@
3
3
  import StaticImage from "./Index.svelte";
4
4
  import { userEvent, within } from "@storybook/test";
5
5
  import { allModes } from "../storybook/modes";
6
+ import image_file_100x100 from "../storybook/test_files/image_100x100.webp";
7
+ import image_file_100x1000 from "../storybook/test_files/image_100x100.webp";
6
8
 
7
9
  export const meta = {
8
10
  title: "Components/Image",
@@ -16,6 +18,8 @@
16
18
  }
17
19
  }
18
20
  };
21
+
22
+ let md = `# a heading! /n a new line! `;
19
23
  </script>
20
24
 
21
25
  <Template let:args>
@@ -28,20 +32,7 @@
28
32
  </Template>
29
33
 
30
34
  <Story
31
- name="static with label and download button"
32
- args={{
33
- value: {
34
- path: "https://gradio-builds.s3.amazonaws.com/demo-files/ghepardo-primo-piano.jpg",
35
- url: "https://gradio-builds.s3.amazonaws.com/demo-files/ghepardo-primo-piano.jpg",
36
- orig_name: "cheetah.jpg"
37
- },
38
- show_label: true,
39
- show_download_button: true
40
- }}
41
- />
42
-
43
- <Story
44
- name="static with label and download button"
35
+ name="static with label, info and download button"
45
36
  args={{
46
37
  value: {
47
38
  path: "https://gradio-builds.s3.amazonaws.com/demo-files/ghepardo-primo-piano.jpg",
@@ -49,6 +40,7 @@
49
40
  orig_name: "cheetah.jpg"
50
41
  },
51
42
  show_label: true,
43
+ placeholder: "This is a cheetah",
52
44
  show_download_button: true
53
45
  }}
54
46
  play={async ({ canvasElement }) => {
@@ -74,6 +66,41 @@
74
66
  }}
75
67
  />
76
68
 
69
+ <Story
70
+ name="static with a vertically long image"
71
+ args={{
72
+ value: {
73
+ path: image_file_100x1000,
74
+ url: image_file_100x1000,
75
+ orig_name: "image.webp"
76
+ }
77
+ }}
78
+ />
79
+
80
+ <Story
81
+ name="static with a vertically long image and a fixed height"
82
+ args={{
83
+ value: {
84
+ path: image_file_100x1000,
85
+ url: image_file_100x1000,
86
+ orig_name: "image.webp"
87
+ },
88
+ height: "500px"
89
+ }}
90
+ />
91
+
92
+ <Story
93
+ name="static with a small image and a fixed height"
94
+ args={{
95
+ value: {
96
+ path: image_file_100x100,
97
+ url: image_file_100x100,
98
+ orig_name: "image.webp"
99
+ },
100
+ height: "500px"
101
+ }}
102
+ />
103
+
77
104
  <Story
78
105
  name="interactive with upload, clipboard, and webcam"
79
106
  args={{
@@ -85,7 +112,8 @@
85
112
  },
86
113
  show_label: false,
87
114
  show_download_button: false,
88
- interactive: true
115
+ interactive: true,
116
+ placeholder: md
89
117
  }}
90
118
  play={async ({ canvasElement }) => {
91
119
  const canvas = within(canvasElement);
package/Image.test.ts CHANGED
@@ -7,9 +7,8 @@ import {
7
7
  beforeAll,
8
8
  beforeEach
9
9
  } from "vitest";
10
- import { spy } from "tinyspy";
11
- import { cleanup, render } from "@gradio/tootils";
12
- import { setupi18n } from "../app/src/i18n";
10
+ import { cleanup, render } from "@self/tootils";
11
+ import { setupi18n } from "../core/src/i18n";
13
12
 
14
13
  import Image from "./Index.svelte";
15
14
  import type { LoadingStatus } from "@gradio/statustracker";
package/Index.svelte CHANGED
@@ -51,6 +51,7 @@
51
51
  export let streaming: boolean;
52
52
  export let pending: boolean;
53
53
  export let mirror_webcam: boolean;
54
+ export let placeholder: string | undefined = undefined;
54
55
  export let show_fullscreen_button: boolean;
55
56
 
56
57
  export let gradio: Gradio<{
@@ -82,6 +83,30 @@
82
83
 
83
84
  let dragging: boolean;
84
85
  let active_source: sources = null;
86
+ let upload_component: ImageUploader;
87
+ const handle_drag_event = (event: Event): void => {
88
+ const drag_event = event as DragEvent;
89
+ drag_event.preventDefault();
90
+ drag_event.stopPropagation();
91
+ if (drag_event.type === "dragenter" || drag_event.type === "dragover") {
92
+ dragging = true;
93
+ } else if (drag_event.type === "dragleave") {
94
+ dragging = false;
95
+ }
96
+ };
97
+
98
+ const handle_drop = (event: Event): void => {
99
+ if (interactive) {
100
+ const drop_event = event as DragEvent;
101
+ drop_event.preventDefault();
102
+ drop_event.stopPropagation();
103
+ dragging = false;
104
+
105
+ if (upload_component) {
106
+ upload_component.loadFilesFromDrop(drop_event);
107
+ }
108
+ }
109
+ };
85
110
  </script>
86
111
 
87
112
  {#if !interactive}
@@ -132,6 +157,10 @@
132
157
  {container}
133
158
  {scale}
134
159
  {min_width}
160
+ on:dragenter={handle_drag_event}
161
+ on:dragleave={handle_drag_event}
162
+ on:dragover={handle_drag_event}
163
+ on:drop={handle_drop}
135
164
  >
136
165
  <StatusTracker
137
166
  autoscroll={gradio.autoscroll}
@@ -141,8 +170,10 @@
141
170
  />
142
171
 
143
172
  <ImageUploader
173
+ bind:this={upload_component}
144
174
  bind:active_source
145
175
  bind:value
176
+ bind:dragging
146
177
  selectable={_selectable}
147
178
  {root}
148
179
  {sources}
@@ -171,7 +202,7 @@
171
202
  stream_handler={gradio.client.stream}
172
203
  >
173
204
  {#if active_source === "upload" || !active_source}
174
- <UploadText i18n={gradio.i18n} type="image" />
205
+ <UploadText i18n={gradio.i18n} type="image" {placeholder} />
175
206
  {:else if active_source === "clipboard"}
176
207
  <UploadText i18n={gradio.i18n} type="clipboard" mode="short" />
177
208
  {:else}
@@ -0,0 +1,46 @@
1
+ <script>import Image from "./shared/Image.svelte";
2
+ export let value;
3
+ export let type;
4
+ export let selected = false;
5
+ </script>
6
+
7
+ <div
8
+ class="container"
9
+ class:table={type === "table"}
10
+ class:gallery={type === "gallery"}
11
+ class:selected
12
+ class:border={value}
13
+ >
14
+ {#if value}
15
+ <Image src={value.url} alt="" />
16
+ {/if}
17
+ </div>
18
+
19
+ <style>
20
+ .container :global(img) {
21
+ width: 100%;
22
+ height: 100%;
23
+ }
24
+
25
+ .container.selected {
26
+ border-color: var(--border-color-accent);
27
+ }
28
+ .border.table {
29
+ border: 2px solid var(--border-color-primary);
30
+ }
31
+
32
+ .container.table {
33
+ margin: 0 auto;
34
+ border-radius: var(--radius-lg);
35
+ overflow: hidden;
36
+ width: var(--size-20);
37
+ height: var(--size-20);
38
+ object-fit: cover;
39
+ }
40
+
41
+ .container.gallery {
42
+ width: var(--size-20);
43
+ max-width: var(--size-20);
44
+ object-fit: cover;
45
+ }
46
+ </style>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { FileData } from "@gradio/client";
3
+ declare const __propDef: {
4
+ props: {
5
+ value: null | FileData;
6
+ type: "gallery" | "table";
7
+ selected?: boolean | undefined;
8
+ };
9
+ events: {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {};
13
+ };
14
+ export type ExampleProps = typeof __propDef.props;
15
+ export type ExampleEvents = typeof __propDef.events;
16
+ export type ExampleSlots = typeof __propDef.slots;
17
+ export default class Example extends SvelteComponent<ExampleProps, ExampleEvents, ExampleSlots> {
18
+ }
19
+ export {};
@@ -0,0 +1,185 @@
1
+ <svelte:options accessors={true} />
2
+
3
+ <script context="module">export { default as Webcam } from "./shared/Webcam.svelte";
4
+ export { default as BaseImageUploader } from "./shared/ImageUploader.svelte";
5
+ export { default as BaseStaticImage } from "./shared/ImagePreview.svelte";
6
+ export { default as BaseExample } from "./Example.svelte";
7
+ export { default as BaseImage } from "./shared/Image.svelte";
8
+ </script>
9
+
10
+ <script>import StaticImage from "./shared/ImagePreview.svelte";
11
+ import ImageUploader from "./shared/ImageUploader.svelte";
12
+ import { afterUpdate } from "svelte";
13
+ import { Block, Empty, UploadText } from "@gradio/atoms";
14
+ import { Image } from "@gradio/icons";
15
+ import { StatusTracker } from "@gradio/statustracker";
16
+ export let value_is_output = false;
17
+ export let elem_id = "";
18
+ export let elem_classes = [];
19
+ export let visible = true;
20
+ export let value = null;
21
+ let old_value = null;
22
+ export let label;
23
+ export let show_label;
24
+ export let show_download_button;
25
+ export let root;
26
+ export let height;
27
+ export let width;
28
+ export let _selectable = false;
29
+ export let container = true;
30
+ export let scale = null;
31
+ export let min_width = void 0;
32
+ export let loading_status;
33
+ export let show_share_button = false;
34
+ export let sources = [
35
+ "upload",
36
+ "clipboard",
37
+ "webcam"
38
+ ];
39
+ export let interactive;
40
+ export let streaming;
41
+ export let pending;
42
+ export let mirror_webcam;
43
+ export let placeholder = void 0;
44
+ export let show_fullscreen_button;
45
+ export let gradio;
46
+ $: {
47
+ if (JSON.stringify(value) !== JSON.stringify(old_value)) {
48
+ old_value = value;
49
+ gradio.dispatch("change");
50
+ if (!value_is_output) {
51
+ gradio.dispatch("input");
52
+ }
53
+ }
54
+ }
55
+ afterUpdate(() => {
56
+ value_is_output = false;
57
+ });
58
+ let dragging;
59
+ let active_source = null;
60
+ let upload_component;
61
+ const handle_drag_event = (event) => {
62
+ const drag_event = event;
63
+ drag_event.preventDefault();
64
+ drag_event.stopPropagation();
65
+ if (drag_event.type === "dragenter" || drag_event.type === "dragover") {
66
+ dragging = true;
67
+ } else if (drag_event.type === "dragleave") {
68
+ dragging = false;
69
+ }
70
+ };
71
+ const handle_drop = (event) => {
72
+ if (interactive) {
73
+ const drop_event = event;
74
+ drop_event.preventDefault();
75
+ drop_event.stopPropagation();
76
+ dragging = false;
77
+ if (upload_component) {
78
+ upload_component.loadFilesFromDrop(drop_event);
79
+ }
80
+ }
81
+ };
82
+ </script>
83
+
84
+ {#if !interactive}
85
+ <Block
86
+ {visible}
87
+ variant={"solid"}
88
+ border_mode={dragging ? "focus" : "base"}
89
+ padding={false}
90
+ {elem_id}
91
+ {elem_classes}
92
+ height={height || undefined}
93
+ {width}
94
+ allow_overflow={false}
95
+ {container}
96
+ {scale}
97
+ {min_width}
98
+ >
99
+ <StatusTracker
100
+ autoscroll={gradio.autoscroll}
101
+ i18n={gradio.i18n}
102
+ {...loading_status}
103
+ />
104
+ <StaticImage
105
+ on:select={({ detail }) => gradio.dispatch("select", detail)}
106
+ on:share={({ detail }) => gradio.dispatch("share", detail)}
107
+ on:error={({ detail }) => gradio.dispatch("error", detail)}
108
+ {value}
109
+ {label}
110
+ {show_label}
111
+ {show_download_button}
112
+ selectable={_selectable}
113
+ {show_share_button}
114
+ i18n={gradio.i18n}
115
+ {show_fullscreen_button}
116
+ />
117
+ </Block>
118
+ {:else}
119
+ <Block
120
+ {visible}
121
+ variant={value === null ? "dashed" : "solid"}
122
+ border_mode={dragging ? "focus" : "base"}
123
+ padding={false}
124
+ {elem_id}
125
+ {elem_classes}
126
+ height={height || undefined}
127
+ {width}
128
+ allow_overflow={false}
129
+ {container}
130
+ {scale}
131
+ {min_width}
132
+ on:dragenter={handle_drag_event}
133
+ on:dragleave={handle_drag_event}
134
+ on:dragover={handle_drag_event}
135
+ on:drop={handle_drop}
136
+ >
137
+ <StatusTracker
138
+ autoscroll={gradio.autoscroll}
139
+ i18n={gradio.i18n}
140
+ {...loading_status}
141
+ on:clear_status={() => gradio.dispatch("clear_status", loading_status)}
142
+ />
143
+
144
+ <ImageUploader
145
+ bind:this={upload_component}
146
+ bind:active_source
147
+ bind:value
148
+ bind:dragging
149
+ selectable={_selectable}
150
+ {root}
151
+ {sources}
152
+ on:edit={() => gradio.dispatch("edit")}
153
+ on:clear={() => {
154
+ gradio.dispatch("clear");
155
+ }}
156
+ on:stream={() => gradio.dispatch("stream")}
157
+ on:drag={({ detail }) => (dragging = detail)}
158
+ on:upload={() => gradio.dispatch("upload")}
159
+ on:select={({ detail }) => gradio.dispatch("select", detail)}
160
+ on:share={({ detail }) => gradio.dispatch("share", detail)}
161
+ on:error={({ detail }) => {
162
+ loading_status = loading_status || {};
163
+ loading_status.status = "error";
164
+ gradio.dispatch("error", detail);
165
+ }}
166
+ {label}
167
+ {show_label}
168
+ {pending}
169
+ {streaming}
170
+ {mirror_webcam}
171
+ max_file_size={gradio.max_file_size}
172
+ i18n={gradio.i18n}
173
+ upload={gradio.client.upload}
174
+ stream_handler={gradio.client.stream}
175
+ >
176
+ {#if active_source === "upload" || !active_source}
177
+ <UploadText i18n={gradio.i18n} type="image" {placeholder} />
178
+ {:else if active_source === "clipboard"}
179
+ <UploadText i18n={gradio.i18n} type="clipboard" mode="short" />
180
+ {:else}
181
+ <Empty unpadded_box={true} size="large"><Image /></Empty>
182
+ {/if}
183
+ </ImageUploader>
184
+ </Block>
185
+ {/if}
@@ -0,0 +1,158 @@
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 } from "@gradio/utils";
8
+ import type { FileData } from "@gradio/client";
9
+ import type { LoadingStatus } from "@gradio/statustracker";
10
+ declare const __propDef: {
11
+ props: {
12
+ value_is_output?: boolean | undefined;
13
+ elem_id?: string | undefined;
14
+ elem_classes?: string[] | undefined;
15
+ visible?: boolean | undefined;
16
+ value?: (null | FileData) | undefined;
17
+ label: string;
18
+ show_label: boolean;
19
+ show_download_button: boolean;
20
+ root: string;
21
+ height: number | undefined;
22
+ width: number | undefined;
23
+ _selectable?: boolean | undefined;
24
+ container?: boolean | undefined;
25
+ scale?: (number | null) | undefined;
26
+ min_width?: number | undefined;
27
+ loading_status: LoadingStatus;
28
+ show_share_button?: boolean | undefined;
29
+ sources?: ("clipboard" | "webcam" | "upload")[] | undefined;
30
+ interactive: boolean;
31
+ streaming: boolean;
32
+ pending: boolean;
33
+ mirror_webcam: boolean;
34
+ placeholder?: string | undefined;
35
+ show_fullscreen_button: boolean;
36
+ gradio: Gradio<{
37
+ input: never;
38
+ change: never;
39
+ error: string;
40
+ edit: never;
41
+ stream: never;
42
+ drag: never;
43
+ upload: never;
44
+ clear: never;
45
+ select: SelectData;
46
+ share: ShareData;
47
+ clear_status: LoadingStatus;
48
+ }>;
49
+ };
50
+ events: {
51
+ [evt: string]: CustomEvent<any>;
52
+ };
53
+ slots: {};
54
+ };
55
+ export type IndexProps = typeof __propDef.props;
56
+ export type IndexEvents = typeof __propDef.events;
57
+ export type IndexSlots = typeof __propDef.slots;
58
+ export default class Index extends SvelteComponent<IndexProps, IndexEvents, IndexSlots> {
59
+ get value_is_output(): boolean | undefined;
60
+ /**accessor*/
61
+ set value_is_output(_: boolean | undefined);
62
+ get elem_id(): string | undefined;
63
+ /**accessor*/
64
+ set elem_id(_: string | undefined);
65
+ get elem_classes(): string[] | undefined;
66
+ /**accessor*/
67
+ set elem_classes(_: string[] | undefined);
68
+ get visible(): boolean | undefined;
69
+ /**accessor*/
70
+ set visible(_: boolean | undefined);
71
+ get value(): FileData | null | undefined;
72
+ /**accessor*/
73
+ set value(_: FileData | null | undefined);
74
+ get label(): string;
75
+ /**accessor*/
76
+ set label(_: string);
77
+ get show_label(): boolean;
78
+ /**accessor*/
79
+ set show_label(_: boolean);
80
+ get show_download_button(): boolean;
81
+ /**accessor*/
82
+ set show_download_button(_: boolean);
83
+ get root(): string;
84
+ /**accessor*/
85
+ set root(_: string);
86
+ get height(): number | undefined;
87
+ /**accessor*/
88
+ set height(_: number | undefined);
89
+ get width(): number | undefined;
90
+ /**accessor*/
91
+ set width(_: number | undefined);
92
+ get _selectable(): boolean | undefined;
93
+ /**accessor*/
94
+ set _selectable(_: boolean | undefined);
95
+ get container(): boolean | undefined;
96
+ /**accessor*/
97
+ set container(_: boolean | undefined);
98
+ get scale(): number | null | undefined;
99
+ /**accessor*/
100
+ set scale(_: number | null | undefined);
101
+ get min_width(): number | undefined;
102
+ /**accessor*/
103
+ set min_width(_: number | undefined);
104
+ get loading_status(): LoadingStatus;
105
+ /**accessor*/
106
+ set loading_status(_: LoadingStatus);
107
+ get show_share_button(): boolean | undefined;
108
+ /**accessor*/
109
+ set show_share_button(_: boolean | undefined);
110
+ get sources(): ("upload" | "clipboard" | "webcam")[] | undefined;
111
+ /**accessor*/
112
+ set sources(_: ("upload" | "clipboard" | "webcam")[] | undefined);
113
+ get interactive(): boolean;
114
+ /**accessor*/
115
+ set interactive(_: boolean);
116
+ get streaming(): boolean;
117
+ /**accessor*/
118
+ set streaming(_: boolean);
119
+ get pending(): boolean;
120
+ /**accessor*/
121
+ set pending(_: boolean);
122
+ get mirror_webcam(): boolean;
123
+ /**accessor*/
124
+ set mirror_webcam(_: boolean);
125
+ get placeholder(): string | undefined;
126
+ /**accessor*/
127
+ set placeholder(_: string | undefined);
128
+ get show_fullscreen_button(): boolean;
129
+ /**accessor*/
130
+ set show_fullscreen_button(_: boolean);
131
+ get gradio(): Gradio<{
132
+ input: never;
133
+ change: never;
134
+ error: string;
135
+ edit: never;
136
+ stream: never;
137
+ drag: never;
138
+ upload: never;
139
+ clear: never;
140
+ select: SelectData;
141
+ share: ShareData;
142
+ clear_status: LoadingStatus;
143
+ }>;
144
+ /**accessor*/
145
+ set gradio(_: Gradio<{
146
+ input: never;
147
+ change: never;
148
+ error: string;
149
+ edit: never;
150
+ stream: never;
151
+ drag: never;
152
+ upload: never;
153
+ clear: never;
154
+ select: SelectData;
155
+ share: ShareData;
156
+ clear_status: LoadingStatus;
157
+ }>);
158
+ }
@@ -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 {};