@gradio/multimodaltextbox 0.7.8 → 0.8.0

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,23 @@
1
1
  # @gradio/multimodaltextbox
2
2
 
3
+ ## 0.8.0
4
+
5
+ ### Features
6
+
7
+ - [#10135](https://github.com/gradio-app/gradio/pull/10135) [`3e93740`](https://github.com/gradio-app/gradio/commit/3e93740f057712278a7c2194a1702f48915683e1) - Improve pasted text behaviour in `Multimodaltextbox`. Thanks @hannahblair!
8
+
9
+ ### Fixes
10
+
11
+ - [#10168](https://github.com/gradio-app/gradio/pull/10168) [`7d70596`](https://github.com/gradio-app/gradio/commit/7d70596d0b3343dc4b357758f85420a0afdb65a2) - Multimodal autofocus fix. Thanks @dawoodkhan82!
12
+
13
+ ### Dependency updates
14
+
15
+ - @gradio/video@0.12.1
16
+ - @gradio/statustracker@0.9.7
17
+ - @gradio/upload@0.14.3
18
+ - @gradio/atoms@0.12.0
19
+ - @gradio/image@0.19.0
20
+
3
21
  ## 0.7.8
4
22
 
5
23
  ### Dependency updates
package/Index.svelte CHANGED
@@ -52,6 +52,7 @@
52
52
  export let interactive: boolean;
53
53
  export let root: string;
54
54
  export let file_count: "single" | "multiple" | "directory";
55
+ export let max_plain_text_length: number;
55
56
 
56
57
  let dragging: boolean;
57
58
  </script>
@@ -109,5 +110,6 @@
109
110
  disabled={!interactive}
110
111
  upload={(...args) => gradio.client.upload(...args)}
111
112
  stream_handler={(...args) => gradio.client.stream(...args)}
113
+ {max_plain_text_length}
112
114
  />
113
115
  </Block>
package/dist/Index.svelte CHANGED
@@ -36,6 +36,7 @@ export let autoscroll = true;
36
36
  export let interactive;
37
37
  export let root;
38
38
  export let file_count;
39
+ export let max_plain_text_length;
39
40
  let dragging;
40
41
  </script>
41
42
 
@@ -92,5 +93,6 @@ let dragging;
92
93
  disabled={!interactive}
93
94
  upload={(...args) => gradio.client.upload(...args)}
94
95
  stream_handler={(...args) => gradio.client.stream(...args)}
96
+ {max_plain_text_length}
95
97
  />
96
98
  </Block>
@@ -48,6 +48,7 @@ declare const __propDef: {
48
48
  interactive: boolean;
49
49
  root: string;
50
50
  file_count: "single" | "multiple" | "directory";
51
+ max_plain_text_length: number;
51
52
  };
52
53
  events: {
53
54
  [evt: string]: CustomEvent<any>;
@@ -168,4 +169,7 @@ export default class Index extends SvelteComponent<IndexProps, IndexEvents, Inde
168
169
  get file_count(): "single" | "multiple" | "directory";
169
170
  /**accessor*/
170
171
  set file_count(_: "single" | "multiple" | "directory");
172
+ get max_plain_text_length(): number;
173
+ /**accessor*/
174
+ set max_plain_text_length(_: number);
171
175
  }
@@ -1,4 +1,5 @@
1
1
  <script>import {
2
+ onMount,
2
3
  beforeUpdate,
3
4
  afterUpdate,
4
5
  createEventDispatcher,
@@ -42,6 +43,7 @@ export let max_file_size = null;
42
43
  export let upload;
43
44
  export let stream_handler;
44
45
  export let file_count = "multiple";
46
+ export let max_plain_text_length = 1e3;
45
47
  let upload_component;
46
48
  let hidden_upload;
47
49
  let el;
@@ -79,10 +81,12 @@ async function handle_change() {
79
81
  dispatch("input");
80
82
  }
81
83
  }
82
- afterUpdate(() => {
84
+ onMount(() => {
83
85
  if (autofocus && el !== null) {
84
86
  el.focus();
85
87
  }
88
+ });
89
+ afterUpdate(() => {
86
90
  if (can_scroll && autoscroll) {
87
91
  scroll();
88
92
  }
@@ -155,10 +159,22 @@ function handle_stop() {
155
159
  function handle_submit() {
156
160
  dispatch("submit");
157
161
  }
158
- function handle_paste(event) {
162
+ async function handle_paste(event) {
159
163
  if (!event.clipboardData)
160
164
  return;
161
165
  const items = event.clipboardData.items;
166
+ const text = event.clipboardData.getData("text");
167
+ if (text && text.length > max_plain_text_length) {
168
+ event.preventDefault();
169
+ const file = new window.File([text], "pasted_text.txt", {
170
+ type: "text/plain",
171
+ lastModified: Date.now()
172
+ });
173
+ if (upload_component) {
174
+ upload_component.load_files([file]);
175
+ }
176
+ return;
177
+ }
162
178
  for (let index in items) {
163
179
  const item = items[index];
164
180
  if (item.kind === "file" && item.type.includes("image")) {
@@ -28,6 +28,7 @@ declare const __propDef: {
28
28
  upload: Client["upload"];
29
29
  stream_handler: Client["stream"];
30
30
  file_count?: ("single" | "multiple" | "directory") | undefined;
31
+ max_plain_text_length?: number | undefined;
31
32
  dragging?: boolean | undefined;
32
33
  };
33
34
  events: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gradio/multimodaltextbox",
3
- "version": "0.7.8",
3
+ "version": "0.8.0",
4
4
  "description": "Gradio UI packages",
5
5
  "type": "module",
6
6
  "author": "",
@@ -22,13 +22,13 @@
22
22
  "./package.json": "./package.json"
23
23
  },
24
24
  "dependencies": {
25
- "@gradio/atoms": "^0.11.2",
26
- "@gradio/icons": "^0.8.1",
27
- "@gradio/statustracker": "^0.9.6",
25
+ "@gradio/atoms": "^0.12.0",
26
+ "@gradio/statustracker": "^0.9.7",
28
27
  "@gradio/utils": "^0.9.0",
29
- "@gradio/upload": "^0.14.2",
30
- "@gradio/image": "^0.18.0",
31
- "@gradio/video": "^0.12.0",
28
+ "@gradio/upload": "^0.14.3",
29
+ "@gradio/video": "^0.12.1",
30
+ "@gradio/image": "^0.19.0",
31
+ "@gradio/icons": "^0.8.1",
32
32
  "@gradio/client": "^1.8.0"
33
33
  },
34
34
  "devDependencies": {
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import {
3
+ onMount,
3
4
  beforeUpdate,
4
5
  afterUpdate,
5
6
  createEventDispatcher,
@@ -47,6 +48,7 @@
47
48
  export let upload: Client["upload"];
48
49
  export let stream_handler: Client["stream"];
49
50
  export let file_count: "single" | "multiple" | "directory" = "multiple";
51
+ export let max_plain_text_length = 1000;
50
52
 
51
53
  let upload_component: Upload;
52
54
  let hidden_upload: HTMLInputElement;
@@ -101,10 +103,13 @@
101
103
  }
102
104
  }
103
105
 
104
- afterUpdate(() => {
106
+ onMount(() => {
105
107
  if (autofocus && el !== null) {
106
108
  el.focus();
107
109
  }
110
+ });
111
+
112
+ afterUpdate(() => {
108
113
  if (can_scroll && autoscroll) {
109
114
  scroll();
110
115
  }
@@ -194,9 +199,23 @@
194
199
  dispatch("submit");
195
200
  }
196
201
 
197
- function handle_paste(event: ClipboardEvent): void {
202
+ async function handle_paste(event: ClipboardEvent): Promise<void> {
198
203
  if (!event.clipboardData) return;
199
204
  const items = event.clipboardData.items;
205
+ const text = event.clipboardData.getData("text");
206
+
207
+ if (text && text.length > max_plain_text_length) {
208
+ event.preventDefault();
209
+ const file = new window.File([text], "pasted_text.txt", {
210
+ type: "text/plain",
211
+ lastModified: Date.now()
212
+ });
213
+ if (upload_component) {
214
+ upload_component.load_files([file]);
215
+ }
216
+ return;
217
+ }
218
+
200
219
  for (let index in items) {
201
220
  const item = items[index];
202
221
  if (item.kind === "file" && item.type.includes("image")) {