abidlabs HF staff commited on
Commit
24e9244
1 Parent(s): 521c75b

Upload folder using huggingface_hub

Browse files
Dockerfile ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.9
3
+
4
+ WORKDIR /code
5
+
6
+ COPY . .
7
+
8
+ RUN pip install --no-cache-dir -r requirements.txt
9
+
10
+ ENV PYTHONUNBUFFERED=1 GRADIO_ALLOW_FLAGGING=never GRADIO_NUM_PORTS=1 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 SYSTEM=spaces
11
+
12
+ CMD ["python", "app.py"]
README.md CHANGED
@@ -1,10 +1,10 @@
 
1
  ---
2
- title: Gradio Richtextbox
3
- emoji: 🌍
4
- colorFrom: red
5
- colorTo: pink
6
  sdk: docker
7
  pinned: false
 
8
  ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+
2
  ---
3
+ tags: [gradio-custom-component]
4
+ title: gradio_richtextbox V0.0.1
5
+ colorFrom: yellow
6
+ colorTo: indigo
7
  sdk: docker
8
  pinned: false
9
+ license: apache-2.0
10
  ---
 
 
__init__.py ADDED
File without changes
__pycache__/app.cpython-311.pyc ADDED
Binary file (687 Bytes). View file
 
app.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from gradio_richtextbox import RichTextbox
4
+
5
+
6
+ example = RichTextbox().example_inputs()
7
+
8
+ demo = gr.Interface(
9
+ lambda x:x,
10
+ RichTextbox(), # interactive version
11
+ RichTextbox(), # static version
12
+ examples=[[example]], # uncomment this line to view the "example version" of your component
13
+ )
14
+
15
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ https://gradio-builds.s3.amazonaws.com/4.0/attempt-05/gradio-4.0.0-py3-none-any.whl
2
+ https://gradio-builds.s3.amazonaws.com/4.0/attempt-05/gradio_client-0.7.0b0-py3-none-any.whl
3
+ gradio_richtextbox-0.0.1-py3-none-any.whl
src/.gitignore ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ .eggs/
2
+ dist/
3
+ *.pyc
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+ __tmp/*
8
+ *.pyi
9
+ node_modules
src/backend/gradio_richtextbox/__init__.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+
2
+ from .richtextbox import RichTextbox
3
+
4
+ __all__ = ['RichTextbox']
src/backend/gradio_richtextbox/richtextbox.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Callable
4
+
5
+ from gradio.components.base import FormComponent
6
+ from gradio.events import Events
7
+
8
+
9
+ class RichTextbox(FormComponent):
10
+ """
11
+ Creates a very simple textbox for user to enter string input or display string output.
12
+ Preprocessing: passes textbox value as a {str} into the function.
13
+ Postprocessing: expects a {str} returned from function and sets textbox value to it.
14
+ Examples-format: a {str} representing the textbox input.
15
+ """
16
+
17
+ EVENTS = [
18
+ Events.change,
19
+ Events.input,
20
+ Events.submit,
21
+ ]
22
+
23
+ def __init__(
24
+ self,
25
+ value: str | Callable | None = "",
26
+ *,
27
+ placeholder: str | None = None,
28
+ label: str | None = None,
29
+ every: float | None = None,
30
+ show_label: bool | None = None,
31
+ scale: int | None = None,
32
+ min_width: int = 160,
33
+ interactive: bool | None = None,
34
+ visible: bool = True,
35
+ rtl: bool = False,
36
+ elem_id: str | None = None,
37
+ elem_classes: list[str] | str | None = None,
38
+ **kwargs,
39
+ ):
40
+ """
41
+ Parameters:
42
+ value: default text to provide in textbox. If callable, the function will be called whenever the app loads to set the initial value of the component.
43
+ placeholder: placeholder hint to provide behind textbox.
44
+ label: component name in interface.
45
+ every: If `value` is a callable, run the function 'every' number of seconds while the client connection is open. Has no effect otherwise. Queue must be enabled. The event can be accessed (e.g. to cancel it) via this component's .load_event attribute.
46
+ show_label: if True, will display label.
47
+ scale: relative width compared to adjacent Components in a Row. For example, if Component A has scale=2, and Component B has scale=1, A will be twice as wide as B. Should be an integer.
48
+ min_width: minimum pixel width, will wrap if not sufficient screen space to satisfy this value. If a certain scale value results in this Component being narrower than min_width, the min_width parameter will be respected first.
49
+ interactive: if True, will be rendered as an editable textbox; if False, editing will be disabled. If not provided, this is inferred based on whether the component is used as an input or output.
50
+ visible: If False, component will be hidden.
51
+ rtl: If True and `type` is "text", sets the direction of the text to right-to-left (cursor appears on the left of the text). Default is False, which renders cursor on the right.
52
+ elem_id: An optional string that is assigned as the id of this component in the HTML DOM. Can be used for targeting CSS styles.
53
+ elem_classes: An optional list of strings that are assigned as the classes of this component in the HTML DOM. Can be used for targeting CSS styles.
54
+ """
55
+ self.placeholder = placeholder
56
+ self.rtl = rtl
57
+ super().__init__(
58
+ label=label,
59
+ every=every,
60
+ show_label=show_label,
61
+ scale=scale,
62
+ min_width=min_width,
63
+ interactive=interactive,
64
+ visible=visible,
65
+ elem_id=elem_id,
66
+ elem_classes=elem_classes,
67
+ value=value,
68
+ **kwargs,
69
+ )
70
+
71
+ def preprocess(self, x: str | None) -> str | None:
72
+ """
73
+ Preprocesses input (converts it to a string) before passing it to the function.
74
+ Parameters:
75
+ x: text
76
+ Returns:
77
+ text
78
+ """
79
+ return None if x is None else str(x)
80
+
81
+ def postprocess(self, y: str | None) -> str | None:
82
+ """
83
+ Postproccess the function output y by converting it to a str before passing it to the frontend.
84
+ Parameters:
85
+ y: function output to postprocess.
86
+ Returns:
87
+ text
88
+ """
89
+ return None if y is None else str(y)
90
+
91
+ def api_info(self) -> dict[str, Any]:
92
+ return {"type": "string"}
93
+
94
+ def example_inputs(self) -> Any:
95
+ return "[b]Hello!![/b]"
src/backend/gradio_richtextbox/richtextbox.pyi ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Callable
4
+
5
+ from gradio.components.base import FormComponent
6
+ from gradio.events import Events
7
+
8
+ from gradio.events import Dependency
9
+
10
+ class RichTextbox(FormComponent):
11
+ """
12
+ Creates a very simple textbox for user to enter string input or display string output.
13
+ Preprocessing: passes textbox value as a {str} into the function.
14
+ Postprocessing: expects a {str} returned from function and sets textbox value to it.
15
+ Examples-format: a {str} representing the textbox input.
16
+ """
17
+
18
+ EVENTS = [
19
+ Events.change,
20
+ Events.input,
21
+ Events.submit,
22
+ ]
23
+
24
+ def __init__(
25
+ self,
26
+ value: str | Callable | None = "",
27
+ *,
28
+ placeholder: str | None = None,
29
+ label: str | None = None,
30
+ every: float | None = None,
31
+ show_label: bool | None = None,
32
+ scale: int | None = None,
33
+ min_width: int = 160,
34
+ interactive: bool | None = None,
35
+ visible: bool = True,
36
+ rtl: bool = False,
37
+ elem_id: str | None = None,
38
+ elem_classes: list[str] | str | None = None,
39
+ **kwargs,
40
+ ):
41
+ """
42
+ Parameters:
43
+ value: default text to provide in textbox. If callable, the function will be called whenever the app loads to set the initial value of the component.
44
+ placeholder: placeholder hint to provide behind textbox.
45
+ label: component name in interface.
46
+ every: If `value` is a callable, run the function 'every' number of seconds while the client connection is open. Has no effect otherwise. Queue must be enabled. The event can be accessed (e.g. to cancel it) via this component's .load_event attribute.
47
+ show_label: if True, will display label.
48
+ scale: relative width compared to adjacent Components in a Row. For example, if Component A has scale=2, and Component B has scale=1, A will be twice as wide as B. Should be an integer.
49
+ min_width: minimum pixel width, will wrap if not sufficient screen space to satisfy this value. If a certain scale value results in this Component being narrower than min_width, the min_width parameter will be respected first.
50
+ interactive: if True, will be rendered as an editable textbox; if False, editing will be disabled. If not provided, this is inferred based on whether the component is used as an input or output.
51
+ visible: If False, component will be hidden.
52
+ rtl: If True and `type` is "text", sets the direction of the text to right-to-left (cursor appears on the left of the text). Default is False, which renders cursor on the right.
53
+ elem_id: An optional string that is assigned as the id of this component in the HTML DOM. Can be used for targeting CSS styles.
54
+ elem_classes: An optional list of strings that are assigned as the classes of this component in the HTML DOM. Can be used for targeting CSS styles.
55
+ """
56
+ self.placeholder = placeholder
57
+ self.rtl = rtl
58
+ super().__init__(
59
+ label=label,
60
+ every=every,
61
+ show_label=show_label,
62
+ scale=scale,
63
+ min_width=min_width,
64
+ interactive=interactive,
65
+ visible=visible,
66
+ elem_id=elem_id,
67
+ elem_classes=elem_classes,
68
+ value=value,
69
+ **kwargs,
70
+ )
71
+
72
+ def preprocess(self, x: str | None) -> str | None:
73
+ """
74
+ Preprocesses input (converts it to a string) before passing it to the function.
75
+ Parameters:
76
+ x: text
77
+ Returns:
78
+ text
79
+ """
80
+ return None if x is None else str(x)
81
+
82
+ def postprocess(self, y: str | None) -> str | None:
83
+ """
84
+ Postproccess the function output y by converting it to a str before passing it to the frontend.
85
+ Parameters:
86
+ y: function output to postprocess.
87
+ Returns:
88
+ text
89
+ """
90
+ return None if y is None else str(y)
91
+
92
+ def api_info(self) -> dict[str, Any]:
93
+ return {"type": "string"}
94
+
95
+ def example_inputs(self) -> Any:
96
+ return "[b]Hello!![/b]"
97
+
98
+
99
+ def change(self,
100
+ fn: Callable | None,
101
+ inputs: Component | Sequence[Component] | set[Component] | None = None,
102
+ outputs: Component | Sequence[Component] | None = None,
103
+ api_name: str | None | Literal[False] = None,
104
+ status_tracker: None = None,
105
+ scroll_to_output: bool = False,
106
+ show_progress: Literal["full", "minimal", "hidden"] = "full",
107
+ queue: bool | None = None,
108
+ batch: bool = False,
109
+ max_batch_size: int = 4,
110
+ preprocess: bool = True,
111
+ postprocess: bool = True,
112
+ cancels: dict[str, Any] | list[dict[str, Any]] | None = None,
113
+ every: float | None = None,
114
+ trigger_mode: Literal["once", "multiple", "always_last"] | None = None,
115
+ _js: str | None = None,) -> Dependency:
116
+ """
117
+ Parameters:
118
+ fn: the function to call when this event is triggered. Often a machine learning model's prediction function. Each parameter of the function corresponds to one input component, and the function should return a single value or a tuple of values, with each element in the tuple corresponding to one output component.
119
+ inputs: List of gradio.components to use as inputs. If the function takes no inputs, this should be an empty list.
120
+ outputs: List of gradio.components to use as outputs. If the function returns no outputs, this should be an empty list.
121
+ api_name: Defines how the endpoint appears in the API docs. Can be a string, None, or False. If False, the endpoint will not be exposed in the api docs. If set to None, the endpoint will be exposed in the api docs as an unnamed endpoint, although this behavior will be changed in Gradio 4.0. If set to a string, the endpoint will be exposed in the api docs with the given name.
122
+ scroll_to_output: If True, will scroll to output component on completion
123
+ show_progress: If True, will show progress animation while pending
124
+ queue: If True, will place the request on the queue, if the queue has been enabled. If False, will not put this event on the queue, even if the queue has been enabled. If None, will use the queue setting of the gradio app.
125
+ batch: If True, then the function should process a batch of inputs, meaning that it should accept a list of input values for each parameter. The lists should be of equal length (and be up to length `max_batch_size`). The function is then *required* to return a tuple of lists (even if there is only 1 output component), with each list in the tuple corresponding to one output component.
126
+ max_batch_size: Maximum number of inputs to batch together if this is called from the queue (only relevant if batch=True)
127
+ preprocess: If False, will not run preprocessing of component data before running 'fn' (e.g. leaving it as a base64 string if this method is called with the `Image` component).
128
+ postprocess: If False, will not run postprocessing of component data before returning 'fn' output to the browser.
129
+ cancels: A list of other events to cancel when this listener is triggered. For example, setting cancels=[click_event] will cancel the click_event, where click_event is the return value of another components .click method. Functions that have not yet run (or generators that are iterating) will be cancelled, but functions that are currently running will be allowed to finish.
130
+ every: Run this event 'every' number of seconds while the client connection is open. Interpreted in seconds. Queue must be enabled.
131
+ trigger_mode: If "once" (default for all events except `.change()`) would not allow any submissions while an event is pending. If set to "multiple", unlimited submissions are allowed while pending, and "always_last" (default for `.change()` event) would allow a second submission after the pending event is complete.
132
+ """
133
+ ...
134
+
135
+ def input(self,
136
+ fn: Callable | None,
137
+ inputs: Component | Sequence[Component] | set[Component] | None = None,
138
+ outputs: Component | Sequence[Component] | None = None,
139
+ api_name: str | None | Literal[False] = None,
140
+ status_tracker: None = None,
141
+ scroll_to_output: bool = False,
142
+ show_progress: Literal["full", "minimal", "hidden"] = "full",
143
+ queue: bool | None = None,
144
+ batch: bool = False,
145
+ max_batch_size: int = 4,
146
+ preprocess: bool = True,
147
+ postprocess: bool = True,
148
+ cancels: dict[str, Any] | list[dict[str, Any]] | None = None,
149
+ every: float | None = None,
150
+ trigger_mode: Literal["once", "multiple", "always_last"] | None = None,
151
+ _js: str | None = None,) -> Dependency:
152
+ """
153
+ Parameters:
154
+ fn: the function to call when this event is triggered. Often a machine learning model's prediction function. Each parameter of the function corresponds to one input component, and the function should return a single value or a tuple of values, with each element in the tuple corresponding to one output component.
155
+ inputs: List of gradio.components to use as inputs. If the function takes no inputs, this should be an empty list.
156
+ outputs: List of gradio.components to use as outputs. If the function returns no outputs, this should be an empty list.
157
+ api_name: Defines how the endpoint appears in the API docs. Can be a string, None, or False. If False, the endpoint will not be exposed in the api docs. If set to None, the endpoint will be exposed in the api docs as an unnamed endpoint, although this behavior will be changed in Gradio 4.0. If set to a string, the endpoint will be exposed in the api docs with the given name.
158
+ scroll_to_output: If True, will scroll to output component on completion
159
+ show_progress: If True, will show progress animation while pending
160
+ queue: If True, will place the request on the queue, if the queue has been enabled. If False, will not put this event on the queue, even if the queue has been enabled. If None, will use the queue setting of the gradio app.
161
+ batch: If True, then the function should process a batch of inputs, meaning that it should accept a list of input values for each parameter. The lists should be of equal length (and be up to length `max_batch_size`). The function is then *required* to return a tuple of lists (even if there is only 1 output component), with each list in the tuple corresponding to one output component.
162
+ max_batch_size: Maximum number of inputs to batch together if this is called from the queue (only relevant if batch=True)
163
+ preprocess: If False, will not run preprocessing of component data before running 'fn' (e.g. leaving it as a base64 string if this method is called with the `Image` component).
164
+ postprocess: If False, will not run postprocessing of component data before returning 'fn' output to the browser.
165
+ cancels: A list of other events to cancel when this listener is triggered. For example, setting cancels=[click_event] will cancel the click_event, where click_event is the return value of another components .click method. Functions that have not yet run (or generators that are iterating) will be cancelled, but functions that are currently running will be allowed to finish.
166
+ every: Run this event 'every' number of seconds while the client connection is open. Interpreted in seconds. Queue must be enabled.
167
+ trigger_mode: If "once" (default for all events except `.change()`) would not allow any submissions while an event is pending. If set to "multiple", unlimited submissions are allowed while pending, and "always_last" (default for `.change()` event) would allow a second submission after the pending event is complete.
168
+ """
169
+ ...
170
+
171
+ def submit(self,
172
+ fn: Callable | None,
173
+ inputs: Component | Sequence[Component] | set[Component] | None = None,
174
+ outputs: Component | Sequence[Component] | None = None,
175
+ api_name: str | None | Literal[False] = None,
176
+ status_tracker: None = None,
177
+ scroll_to_output: bool = False,
178
+ show_progress: Literal["full", "minimal", "hidden"] = "full",
179
+ queue: bool | None = None,
180
+ batch: bool = False,
181
+ max_batch_size: int = 4,
182
+ preprocess: bool = True,
183
+ postprocess: bool = True,
184
+ cancels: dict[str, Any] | list[dict[str, Any]] | None = None,
185
+ every: float | None = None,
186
+ trigger_mode: Literal["once", "multiple", "always_last"] | None = None,
187
+ _js: str | None = None,) -> Dependency:
188
+ """
189
+ Parameters:
190
+ fn: the function to call when this event is triggered. Often a machine learning model's prediction function. Each parameter of the function corresponds to one input component, and the function should return a single value or a tuple of values, with each element in the tuple corresponding to one output component.
191
+ inputs: List of gradio.components to use as inputs. If the function takes no inputs, this should be an empty list.
192
+ outputs: List of gradio.components to use as outputs. If the function returns no outputs, this should be an empty list.
193
+ api_name: Defines how the endpoint appears in the API docs. Can be a string, None, or False. If False, the endpoint will not be exposed in the api docs. If set to None, the endpoint will be exposed in the api docs as an unnamed endpoint, although this behavior will be changed in Gradio 4.0. If set to a string, the endpoint will be exposed in the api docs with the given name.
194
+ scroll_to_output: If True, will scroll to output component on completion
195
+ show_progress: If True, will show progress animation while pending
196
+ queue: If True, will place the request on the queue, if the queue has been enabled. If False, will not put this event on the queue, even if the queue has been enabled. If None, will use the queue setting of the gradio app.
197
+ batch: If True, then the function should process a batch of inputs, meaning that it should accept a list of input values for each parameter. The lists should be of equal length (and be up to length `max_batch_size`). The function is then *required* to return a tuple of lists (even if there is only 1 output component), with each list in the tuple corresponding to one output component.
198
+ max_batch_size: Maximum number of inputs to batch together if this is called from the queue (only relevant if batch=True)
199
+ preprocess: If False, will not run preprocessing of component data before running 'fn' (e.g. leaving it as a base64 string if this method is called with the `Image` component).
200
+ postprocess: If False, will not run postprocessing of component data before returning 'fn' output to the browser.
201
+ cancels: A list of other events to cancel when this listener is triggered. For example, setting cancels=[click_event] will cancel the click_event, where click_event is the return value of another components .click method. Functions that have not yet run (or generators that are iterating) will be cancelled, but functions that are currently running will be allowed to finish.
202
+ every: Run this event 'every' number of seconds while the client connection is open. Interpreted in seconds. Queue must be enabled.
203
+ trigger_mode: If "once" (default for all events except `.change()`) would not allow any submissions while an event is pending. If set to "multiple", unlimited submissions are allowed while pending, and "always_last" (default for `.change()` event) would allow a second submission after the pending event is complete.
204
+ """
205
+ ...
src/backend/gradio_richtextbox/templates/component/index.js ADDED
The diff for this file is too large to render. See raw diff
 
src/backend/gradio_richtextbox/templates/component/style.css ADDED
@@ -0,0 +1 @@
 
 
1
+ .block.svelte-1t38q2d{position:relative;margin:0;box-shadow:var(--block-shadow);border-width:var(--block-border-width);border-color:var(--block-border-color);border-radius:var(--block-radius);background:var(--block-background-fill);width:100%;line-height:var(--line-sm)}.block.border_focus.svelte-1t38q2d{border-color:var(--color-accent)}.padded.svelte-1t38q2d{padding:var(--block-padding)}.hidden.svelte-1t38q2d{display:none}.hide-container.svelte-1t38q2d{margin:0;box-shadow:none;--block-border-width:0;background:transparent;padding:0;overflow:visible}div.svelte-1hnfib2{margin-bottom:var(--spacing-lg);color:var(--block-info-text-color);font-weight:var(--block-info-text-weight);font-size:var(--block-info-text-size);line-height:var(--line-sm)}span.has-info.svelte-22c38v{margin-bottom:var(--spacing-xs)}span.svelte-22c38v:not(.has-info){margin-bottom:var(--spacing-lg)}span.svelte-22c38v{display:inline-block;position:relative;z-index:var(--layer-4);border:solid var(--block-title-border-width) var(--block-title-border-color);border-radius:var(--block-title-radius);background:var(--block-title-background-fill);padding:var(--block-title-padding);color:var(--block-title-text-color);font-weight:var(--block-title-text-weight);font-size:var(--block-title-text-size);line-height:var(--line-sm)}.hide.svelte-22c38v{margin:0;height:0}label.svelte-9gxdi0{display:inline-flex;align-items:center;z-index:var(--layer-2);box-shadow:var(--block-label-shadow);border:var(--block-label-border-width) solid var(--border-color-primary);border-top:none;border-left:none;border-radius:var(--block-label-radius);background:var(--block-label-background-fill);padding:var(--block-label-padding);pointer-events:none;color:var(--block-label-text-color);font-weight:var(--block-label-text-weight);font-size:var(--block-label-text-size);line-height:var(--line-sm)}.gr-group label.svelte-9gxdi0{border-top-left-radius:0}label.float.svelte-9gxdi0{position:absolute;top:var(--block-label-margin);left:var(--block-label-margin)}label.svelte-9gxdi0:not(.float){position:static;margin-top:var(--block-label-margin);margin-left:var(--block-label-margin)}.hide.svelte-9gxdi0{height:0}span.svelte-9gxdi0{opacity:.8;margin-right:var(--size-2);width:calc(var(--block-label-text-size) - 1px);height:calc(var(--block-label-text-size) - 1px)}.hide-label.svelte-9gxdi0{box-shadow:none;border-width:0;background:transparent;overflow:visible}button.svelte-lkmj4t{display:flex;justify-content:center;align-items:center;gap:1px;z-index:var(--layer-1);box-shadow:var(--shadow-drop);border:1px solid var(--button-secondary-border-color);border-radius:var(--radius-sm);background:var(--background-fill-primary);padding:2px;color:var(--block-label-text-color)}button.svelte-lkmj4t:hover{cursor:pointer;border:2px solid var(--button-secondary-border-color-hover);padding:1px;color:var(--block-label-text-color)}span.svelte-lkmj4t{padding:0 1px;font-size:10px}div.svelte-lkmj4t{padding:2px;width:14px;height:14px}.pending.svelte-lkmj4t{animation:svelte-lkmj4t-flash .5s infinite}@keyframes svelte-lkmj4t-flash{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.empty.svelte-3w3rth{display:flex;justify-content:center;align-items:center;margin-top:calc(0px - var(--size-6));height:var(--size-full)}.icon.svelte-3w3rth{opacity:.5;height:var(--size-5);color:var(--body-text-color)}.small.svelte-3w3rth{min-height:calc(var(--size-32) - 20px)}.large.svelte-3w3rth{min-height:calc(var(--size-64) - 20px)}.unpadded_box.svelte-3w3rth{margin-top:0}.small_parent.svelte-3w3rth{min-height:100%!important}.dropdown-arrow.svelte-1in5nh4{fill:var(--body-text-color);margin-right:var(--size-2);width:var(--size-5)}.wrap.svelte-8ytugg{display:flex;flex-direction:column;justify-content:center;min-height:var(--size-60);color:var(--block-label-text-color);line-height:var(--line-md)}.or.svelte-8ytugg{color:var(--body-text-color-subdued)}@media (--screen-md){.wrap.svelte-8ytugg{font-size:var(--text-lg)}}svg.svelte-43sxxs.svelte-43sxxs{width:var(--size-20);height:var(--size-20)}svg.svelte-43sxxs path.svelte-43sxxs{fill:var(--loader-color)}div.svelte-43sxxs.svelte-43sxxs{z-index:var(--layer-2)}.margin.svelte-43sxxs.svelte-43sxxs{margin:var(--size-4)}.wrap.svelte-14miwb5.svelte-14miwb5{display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:var(--layer-5);transition:opacity .1s ease-in-out;border-radius:var(--block-radius);background:var(--block-background-fill);padding:0 var(--size-6);max-height:var(--size-screen-h);overflow:hidden;pointer-events:none}.wrap.center.svelte-14miwb5.svelte-14miwb5{top:0;right:0;left:0}.wrap.default.svelte-14miwb5.svelte-14miwb5{top:0;right:0;bottom:0;left:0}.hide.svelte-14miwb5.svelte-14miwb5{opacity:0;pointer-events:none}.generating.svelte-14miwb5.svelte-14miwb5{animation:svelte-14miwb5-pulse 2s cubic-bezier(.4,0,.6,1) infinite;border:2px solid var(--color-accent);background:transparent}.translucent.svelte-14miwb5.svelte-14miwb5{background:none}@keyframes svelte-14miwb5-pulse{0%,to{opacity:1}50%{opacity:.5}}.loading.svelte-14miwb5.svelte-14miwb5{z-index:var(--layer-2);color:var(--body-text-color)}.eta-bar.svelte-14miwb5.svelte-14miwb5{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left;opacity:.8;z-index:var(--layer-1);transition:10ms;background:var(--background-fill-secondary)}.progress-bar-wrap.svelte-14miwb5.svelte-14miwb5{border:1px solid var(--border-color-primary);background:var(--background-fill-primary);width:55.5%;height:var(--size-4)}.progress-bar.svelte-14miwb5.svelte-14miwb5{transform-origin:left;background-color:var(--loader-color);width:var(--size-full);height:var(--size-full)}.progress-level.svelte-14miwb5.svelte-14miwb5{display:flex;flex-direction:column;align-items:center;gap:1;z-index:var(--layer-2);width:var(--size-full)}.progress-level-inner.svelte-14miwb5.svelte-14miwb5{margin:var(--size-2) auto;color:var(--body-text-color);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text.svelte-14miwb5.svelte-14miwb5{position:absolute;top:0;right:0;z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text-center.svelte-14miwb5.svelte-14miwb5{display:flex;position:absolute;top:0;right:0;justify-content:center;align-items:center;transform:translateY(var(--size-6));z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono);text-align:center}.error.svelte-14miwb5.svelte-14miwb5{box-shadow:var(--shadow-drop);border:solid 1px var(--error-border-color);border-radius:var(--radius-full);background:var(--error-background-fill);padding-right:var(--size-4);padding-left:var(--size-4);color:var(--error-text-color);font-weight:var(--weight-semibold);font-size:var(--text-lg);line-height:var(--line-lg);font-family:var(--font)}.minimal.svelte-14miwb5 .progress-text.svelte-14miwb5{background:var(--block-background-fill)}.border.svelte-14miwb5.svelte-14miwb5{border:1px solid var(--border-color-primary)}.toast-body.svelte-solcu7{display:flex;position:relative;right:0;left:0;align-items:center;margin:var(--size-6) var(--size-4);margin:auto;border-radius:var(--container-radius);overflow:hidden;pointer-events:auto}.toast-body.error.svelte-solcu7{border:1px solid var(--color-red-700);background:var(--color-red-50)}.dark .toast-body.error.svelte-solcu7{border:1px solid var(--color-red-500);background-color:var(--color-grey-950)}.toast-body.warning.svelte-solcu7{border:1px solid var(--color-yellow-700);background:var(--color-yellow-50)}.dark .toast-body.warning.svelte-solcu7{border:1px solid var(--color-yellow-500);background-color:var(--color-grey-950)}.toast-body.info.svelte-solcu7{border:1px solid var(--color-grey-700);background:var(--color-grey-50)}.dark .toast-body.info.svelte-solcu7{border:1px solid var(--color-grey-500);background-color:var(--color-grey-950)}.toast-title.svelte-solcu7{display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-lg);line-height:var(--line-sm);text-transform:capitalize}.toast-title.error.svelte-solcu7{color:var(--color-red-700)}.dark .toast-title.error.svelte-solcu7{color:var(--color-red-50)}.toast-title.warning.svelte-solcu7{color:var(--color-yellow-700)}.dark .toast-title.warning.svelte-solcu7{color:var(--color-yellow-50)}.toast-title.info.svelte-solcu7{color:var(--color-grey-700)}.dark .toast-title.info.svelte-solcu7{color:var(--color-grey-50)}.toast-close.svelte-solcu7{margin:0 var(--size-3);border-radius:var(--size-3);padding:0px var(--size-1-5);font-size:var(--size-5);line-height:var(--size-5)}.toast-close.error.svelte-solcu7{color:var(--color-red-700)}.dark .toast-close.error.svelte-solcu7{color:var(--color-red-500)}.toast-close.warning.svelte-solcu7{color:var(--color-yellow-700)}.dark .toast-close.warning.svelte-solcu7{color:var(--color-yellow-500)}.toast-close.info.svelte-solcu7{color:var(--color-grey-700)}.dark .toast-close.info.svelte-solcu7{color:var(--color-grey-500)}.toast-text.svelte-solcu7{font-size:var(--text-lg)}.toast-text.error.svelte-solcu7{color:var(--color-red-700)}.dark .toast-text.error.svelte-solcu7{color:var(--color-red-50)}.toast-text.warning.svelte-solcu7{color:var(--color-yellow-700)}.dark .toast-text.warning.svelte-solcu7{color:var(--color-yellow-50)}.toast-text.info.svelte-solcu7{color:var(--color-grey-700)}.dark .toast-text.info.svelte-solcu7{color:var(--color-grey-50)}.toast-details.svelte-solcu7{margin:var(--size-3) var(--size-3) var(--size-3) 0;width:100%}.toast-icon.svelte-solcu7{display:flex;position:absolute;position:relative;flex-shrink:0;justify-content:center;align-items:center;margin:var(--size-2);border-radius:var(--radius-full);padding:var(--size-1);padding-left:calc(var(--size-1) - 1px);width:35px;height:35px}.toast-icon.error.svelte-solcu7{color:var(--color-red-700)}.dark .toast-icon.error.svelte-solcu7{color:var(--color-red-500)}.toast-icon.warning.svelte-solcu7{color:var(--color-yellow-700)}.dark .toast-icon.warning.svelte-solcu7{color:var(--color-yellow-500)}.toast-icon.info.svelte-solcu7{color:var(--color-grey-700)}.dark .toast-icon.info.svelte-solcu7{color:var(--color-grey-500)}@keyframes svelte-solcu7-countdown{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.timer.svelte-solcu7{position:absolute;bottom:0;left:0;transform-origin:0 0;animation:svelte-solcu7-countdown 10s linear forwards;width:100%;height:var(--size-1)}.timer.error.svelte-solcu7{background:var(--color-red-700)}.dark .timer.error.svelte-solcu7{background:var(--color-red-500)}.timer.warning.svelte-solcu7{background:var(--color-yellow-700)}.dark .timer.warning.svelte-solcu7{background:var(--color-yellow-500)}.timer.info.svelte-solcu7{background:var(--color-grey-700)}.dark .timer.info.svelte-solcu7{background:var(--color-grey-500)}.toast-wrap.svelte-gatr8h{display:flex;position:fixed;top:var(--size-4);right:var(--size-4);flex-direction:column;align-items:end;gap:var(--size-2);z-index:var(--layer-top);width:calc(100% - var(--size-8))}@media (--screen-sm){.toast-wrap.svelte-gatr8h{width:calc(var(--size-96) + var(--size-10))}}label.svelte-elvujf.svelte-elvujf{display:block;width:100%}.container.svelte-elvujf>div.text-container.svelte-elvujf{border:var(--input-border-width) solid var(--input-border-color);border-radius:var(--input-radius)}div.text-container.svelte-elvujf.svelte-elvujf{display:block;position:relative;outline:none!important;box-shadow:var(--input-shadow);background:var(--input-background-fill);padding:var(--input-padding);width:100%;color:var(--body-text-color);font-weight:var(--input-text-weight);font-size:var(--input-text-size);line-height:var(--line-sm);border:none}div.text-container.svelte-elvujf.svelte-elvujf:disabled{-webkit-text-fill-color:var(--body-text-color);-webkit-opacity:1;opacity:1}div.text-container.svelte-elvujf.svelte-elvujf:focus{box-shadow:var(--input-shadow-focus);border-color:var(--input-border-color-focus)}
src/backend/gradio_richtextbox/templates/example/index.js ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const {
2
+ SvelteComponent: y,
3
+ add_iframe_resize_listener: b,
4
+ add_render_callback: v,
5
+ append: m,
6
+ attr: h,
7
+ binding_callbacks: p,
8
+ detach: w,
9
+ element: z,
10
+ init: k,
11
+ insert: E,
12
+ noop: f,
13
+ safe_not_equal: S,
14
+ set_data: q,
15
+ text: C,
16
+ toggle_class: _
17
+ } = window.__gradio__svelte__internal, { onMount: M } = window.__gradio__svelte__internal;
18
+ function P(t) {
19
+ let e, s, r;
20
+ return {
21
+ c() {
22
+ e = z("div"), s = C(
23
+ /*value*/
24
+ t[0]
25
+ ), h(e, "class", "svelte-84cxb8"), v(() => (
26
+ /*div_elementresize_handler*/
27
+ t[5].call(e)
28
+ )), _(
29
+ e,
30
+ "table",
31
+ /*type*/
32
+ t[1] === "table"
33
+ ), _(
34
+ e,
35
+ "gallery",
36
+ /*type*/
37
+ t[1] === "gallery"
38
+ ), _(
39
+ e,
40
+ "selected",
41
+ /*selected*/
42
+ t[2]
43
+ );
44
+ },
45
+ m(l, i) {
46
+ E(l, e, i), m(e, s), r = b(
47
+ e,
48
+ /*div_elementresize_handler*/
49
+ t[5].bind(e)
50
+ ), t[6](e);
51
+ },
52
+ p(l, [i]) {
53
+ i & /*value*/
54
+ 1 && q(
55
+ s,
56
+ /*value*/
57
+ l[0]
58
+ ), i & /*type*/
59
+ 2 && _(
60
+ e,
61
+ "table",
62
+ /*type*/
63
+ l[1] === "table"
64
+ ), i & /*type*/
65
+ 2 && _(
66
+ e,
67
+ "gallery",
68
+ /*type*/
69
+ l[1] === "gallery"
70
+ ), i & /*selected*/
71
+ 4 && _(
72
+ e,
73
+ "selected",
74
+ /*selected*/
75
+ l[2]
76
+ );
77
+ },
78
+ i: f,
79
+ o: f,
80
+ d(l) {
81
+ l && w(e), r(), t[6](null);
82
+ }
83
+ };
84
+ }
85
+ function W(t, e, s) {
86
+ let { value: r } = e, { type: l } = e, { selected: i = !1 } = e, c, a;
87
+ function u(n, d) {
88
+ !n || !d || (a.style.setProperty("--local-text-width", `${d < 150 ? d : 200}px`), s(4, a.style.whiteSpace = "unset", a));
89
+ }
90
+ M(() => {
91
+ u(a, c);
92
+ });
93
+ function o() {
94
+ c = this.clientWidth, s(3, c);
95
+ }
96
+ function g(n) {
97
+ p[n ? "unshift" : "push"](() => {
98
+ a = n, s(4, a);
99
+ });
100
+ }
101
+ return t.$$set = (n) => {
102
+ "value" in n && s(0, r = n.value), "type" in n && s(1, l = n.type), "selected" in n && s(2, i = n.selected);
103
+ }, [r, l, i, c, a, o, g];
104
+ }
105
+ class j extends y {
106
+ constructor(e) {
107
+ super(), k(this, e, W, P, S, { value: 0, type: 1, selected: 2 });
108
+ }
109
+ }
110
+ export {
111
+ j as default
112
+ };
src/backend/gradio_richtextbox/templates/example/style.css ADDED
@@ -0,0 +1 @@
 
 
1
+ .gallery.svelte-84cxb8{padding:var(--size-1) var(--size-2)}div.svelte-84cxb8{overflow:hidden;min-width:var(--local-text-width);white-space:nowrap}
src/demo/__init__.py ADDED
File without changes
src/demo/app.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from gradio_richtextbox import RichTextbox
4
+
5
+
6
+ example = RichTextbox().example_inputs()
7
+
8
+ demo = gr.Interface(
9
+ lambda x:x,
10
+ RichTextbox(), # interactive version
11
+ RichTextbox(), # static version
12
+ examples=[[example]], # uncomment this line to view the "example version" of your component
13
+ )
14
+
15
+ demo.launch()
src/flagged/log.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ x,output,flag,username,timestamp
2
+ ,,,,2023-10-23 22:36:40.861531
src/frontend/Example.svelte ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { onMount } from "svelte";
3
+
4
+ export let value: string;
5
+ export let type: "gallery" | "table";
6
+ export let selected = false;
7
+
8
+ let size: number;
9
+ let el: HTMLDivElement;
10
+
11
+ function set_styles(element: HTMLElement, el_width: number): void {
12
+ if (!element || !el_width) return;
13
+ el.style.setProperty(
14
+ "--local-text-width",
15
+ `${el_width < 150 ? el_width : 200}px`
16
+ );
17
+ el.style.whiteSpace = "unset";
18
+ }
19
+
20
+ onMount(() => {
21
+ set_styles(el, size);
22
+ });
23
+ </script>
24
+
25
+ <div
26
+ bind:clientWidth={size}
27
+ bind:this={el}
28
+ class:table={type === "table"}
29
+ class:gallery={type === "gallery"}
30
+ class:selected
31
+ >
32
+ {value}
33
+ </div>
34
+
35
+ <style>
36
+ .gallery {
37
+ padding: var(--size-1) var(--size-2);
38
+ }
39
+
40
+ div {
41
+ overflow: hidden;
42
+ min-width: var(--local-text-width);
43
+
44
+ white-space: nowrap;
45
+ }
46
+ </style>
src/frontend/Index.svelte ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svelte:options accessors={true} />
2
+
3
+ <script lang="ts">
4
+ import type { Gradio } from "@gradio/utils";
5
+ import { BlockTitle } from "@gradio/atoms";
6
+ import { Block } from "@gradio/atoms";
7
+ import { StatusTracker } from "@gradio/statustracker";
8
+ import type { LoadingStatus } from "@gradio/statustracker";
9
+ import { tick } from "svelte";
10
+ import {bbcodeParser} from "./utils";
11
+
12
+ export let gradio: Gradio<{
13
+ change: never;
14
+ submit: never;
15
+ input: never;
16
+ }>;
17
+ export let label = "Textbox";
18
+ export let elem_id = "";
19
+ export let elem_classes: string[] = [];
20
+ export let visible = true;
21
+ export let value = "";
22
+ export let show_label: boolean;
23
+ export let scale: number | null = null;
24
+ export let min_width: number | undefined = undefined;
25
+ export let loading_status: LoadingStatus | undefined = undefined;
26
+ export let value_is_output = false;
27
+ export let mode: "static" | "interactive";
28
+ export let rtl = false;
29
+
30
+ let is_being_edited = false;
31
+ let _value = "";
32
+ $: {
33
+ _value = bbcodeParser.bbcodeToHtml(value || "");
34
+ }
35
+
36
+ async function handle_blur(): Promise<void> {
37
+ await tick();
38
+ if (mode === "static") {
39
+ return;
40
+ }
41
+ value = el.innerText
42
+ is_being_edited = false;
43
+ el.innerText = "";
44
+ }
45
+
46
+ async function handle_focus(): Promise<void> {
47
+ await tick();
48
+ if (mode === "static") {
49
+ el.blur();
50
+ return;
51
+ }
52
+ is_being_edited = true;
53
+ }
54
+
55
+
56
+ let el: HTMLDivElement;
57
+ const container = true;
58
+
59
+ function handle_change(): void {
60
+ gradio.dispatch("change");
61
+ if (!value_is_output) {
62
+ gradio.dispatch("input");
63
+ }
64
+ }
65
+
66
+ async function handle_keypress(e: KeyboardEvent): Promise<void> {
67
+ await tick();
68
+ if (e.key === "Enter") {
69
+ e.preventDefault();
70
+ gradio.dispatch("submit");
71
+ }
72
+ }
73
+
74
+ $: if (value === null) value = "";
75
+
76
+ // When the value changes, dispatch the change event via handle_change()
77
+ // See the docs for an explanation: https://svelte.dev/docs/svelte-components#script-3-$-marks-a-statement-as-reactive
78
+ $: value, handle_change();
79
+ </script>
80
+
81
+ <Block
82
+ {visible}
83
+ {elem_id}
84
+ {elem_classes}
85
+ {scale}
86
+ {min_width}
87
+ allow_overflow={false}
88
+ padding={true}
89
+ >
90
+ {#if loading_status}
91
+ <StatusTracker
92
+ autoscroll={gradio.autoscroll}
93
+ i18n={gradio.i18n}
94
+ {...loading_status}
95
+ />
96
+ {/if}
97
+
98
+ <label class:container>
99
+ <BlockTitle {show_label} info={undefined}>{label}</BlockTitle>
100
+
101
+ <div
102
+ data-testid="textbox"
103
+ contenteditable=true
104
+ class="text-container"
105
+ class:disabled={mode === "static"}
106
+ bind:this={el}
107
+ on:keypress={handle_keypress}
108
+ on:blur={handle_blur}
109
+ on:focus={handle_focus}
110
+ role="textbox"
111
+ tabindex="0"
112
+ dir={rtl ? "rtl" : "ltr"}
113
+ >
114
+ {#if is_being_edited}
115
+ {value}
116
+ {:else}
117
+ {@html _value}
118
+ {/if}
119
+ </div>
120
+ </label>
121
+
122
+ </Block>
123
+
124
+ <style>
125
+ label {
126
+ display: block;
127
+ width: 100%;
128
+ }
129
+ .container > div.text-container
130
+ {
131
+ border: var(--input-border-width) solid var(--input-border-color);
132
+ border-radius: var(--input-radius);
133
+ }
134
+
135
+ div.text-container {
136
+ display: block;
137
+ position: relative;
138
+ outline: none !important;
139
+ box-shadow: var(--input-shadow);
140
+ background: var(--input-background-fill);
141
+ padding: var(--input-padding);
142
+ width: 100%;
143
+ color: var(--body-text-color);
144
+ font-weight: var(--input-text-weight);
145
+ font-size: var(--input-text-size);
146
+ line-height: var(--line-sm);
147
+ border: none;
148
+ }
149
+ div.text-container:disabled
150
+ {
151
+ -webkit-text-fill-color: var(--body-text-color);
152
+ -webkit-opacity: 1;
153
+ opacity: 1;
154
+ }
155
+
156
+ div.text-container:focus {
157
+ box-shadow: var(--input-shadow-focus);
158
+ border-color: var(--input-border-color-focus);
159
+ }
160
+
161
+ </style>
src/frontend/package-lock.json ADDED
@@ -0,0 +1,918 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "richtextbox",
3
+ "version": "0.0.1-beta.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "richtextbox",
9
+ "version": "0.0.1-beta.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "@gradio/atoms": "0.2.0-beta.4",
13
+ "@gradio/icons": "0.2.0-beta.1",
14
+ "@gradio/statustracker": "0.3.0-beta.6",
15
+ "@gradio/utils": "0.2.0-beta.4"
16
+ }
17
+ },
18
+ "node_modules/@ampproject/remapping": {
19
+ "version": "2.2.1",
20
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
21
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
22
+ "peer": true,
23
+ "dependencies": {
24
+ "@jridgewell/gen-mapping": "^0.3.0",
25
+ "@jridgewell/trace-mapping": "^0.3.9"
26
+ },
27
+ "engines": {
28
+ "node": ">=6.0.0"
29
+ }
30
+ },
31
+ "node_modules/@esbuild/android-arm": {
32
+ "version": "0.19.5",
33
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz",
34
+ "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==",
35
+ "cpu": [
36
+ "arm"
37
+ ],
38
+ "optional": true,
39
+ "os": [
40
+ "android"
41
+ ],
42
+ "engines": {
43
+ "node": ">=12"
44
+ }
45
+ },
46
+ "node_modules/@esbuild/android-arm64": {
47
+ "version": "0.19.5",
48
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz",
49
+ "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==",
50
+ "cpu": [
51
+ "arm64"
52
+ ],
53
+ "optional": true,
54
+ "os": [
55
+ "android"
56
+ ],
57
+ "engines": {
58
+ "node": ">=12"
59
+ }
60
+ },
61
+ "node_modules/@esbuild/android-x64": {
62
+ "version": "0.19.5",
63
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz",
64
+ "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==",
65
+ "cpu": [
66
+ "x64"
67
+ ],
68
+ "optional": true,
69
+ "os": [
70
+ "android"
71
+ ],
72
+ "engines": {
73
+ "node": ">=12"
74
+ }
75
+ },
76
+ "node_modules/@esbuild/darwin-arm64": {
77
+ "version": "0.19.5",
78
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz",
79
+ "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==",
80
+ "cpu": [
81
+ "arm64"
82
+ ],
83
+ "optional": true,
84
+ "os": [
85
+ "darwin"
86
+ ],
87
+ "engines": {
88
+ "node": ">=12"
89
+ }
90
+ },
91
+ "node_modules/@esbuild/darwin-x64": {
92
+ "version": "0.19.5",
93
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz",
94
+ "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==",
95
+ "cpu": [
96
+ "x64"
97
+ ],
98
+ "optional": true,
99
+ "os": [
100
+ "darwin"
101
+ ],
102
+ "engines": {
103
+ "node": ">=12"
104
+ }
105
+ },
106
+ "node_modules/@esbuild/freebsd-arm64": {
107
+ "version": "0.19.5",
108
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz",
109
+ "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==",
110
+ "cpu": [
111
+ "arm64"
112
+ ],
113
+ "optional": true,
114
+ "os": [
115
+ "freebsd"
116
+ ],
117
+ "engines": {
118
+ "node": ">=12"
119
+ }
120
+ },
121
+ "node_modules/@esbuild/freebsd-x64": {
122
+ "version": "0.19.5",
123
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz",
124
+ "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==",
125
+ "cpu": [
126
+ "x64"
127
+ ],
128
+ "optional": true,
129
+ "os": [
130
+ "freebsd"
131
+ ],
132
+ "engines": {
133
+ "node": ">=12"
134
+ }
135
+ },
136
+ "node_modules/@esbuild/linux-arm": {
137
+ "version": "0.19.5",
138
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz",
139
+ "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==",
140
+ "cpu": [
141
+ "arm"
142
+ ],
143
+ "optional": true,
144
+ "os": [
145
+ "linux"
146
+ ],
147
+ "engines": {
148
+ "node": ">=12"
149
+ }
150
+ },
151
+ "node_modules/@esbuild/linux-arm64": {
152
+ "version": "0.19.5",
153
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz",
154
+ "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==",
155
+ "cpu": [
156
+ "arm64"
157
+ ],
158
+ "optional": true,
159
+ "os": [
160
+ "linux"
161
+ ],
162
+ "engines": {
163
+ "node": ">=12"
164
+ }
165
+ },
166
+ "node_modules/@esbuild/linux-ia32": {
167
+ "version": "0.19.5",
168
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz",
169
+ "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==",
170
+ "cpu": [
171
+ "ia32"
172
+ ],
173
+ "optional": true,
174
+ "os": [
175
+ "linux"
176
+ ],
177
+ "engines": {
178
+ "node": ">=12"
179
+ }
180
+ },
181
+ "node_modules/@esbuild/linux-loong64": {
182
+ "version": "0.19.5",
183
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz",
184
+ "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==",
185
+ "cpu": [
186
+ "loong64"
187
+ ],
188
+ "optional": true,
189
+ "os": [
190
+ "linux"
191
+ ],
192
+ "engines": {
193
+ "node": ">=12"
194
+ }
195
+ },
196
+ "node_modules/@esbuild/linux-mips64el": {
197
+ "version": "0.19.5",
198
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz",
199
+ "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==",
200
+ "cpu": [
201
+ "mips64el"
202
+ ],
203
+ "optional": true,
204
+ "os": [
205
+ "linux"
206
+ ],
207
+ "engines": {
208
+ "node": ">=12"
209
+ }
210
+ },
211
+ "node_modules/@esbuild/linux-ppc64": {
212
+ "version": "0.19.5",
213
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz",
214
+ "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==",
215
+ "cpu": [
216
+ "ppc64"
217
+ ],
218
+ "optional": true,
219
+ "os": [
220
+ "linux"
221
+ ],
222
+ "engines": {
223
+ "node": ">=12"
224
+ }
225
+ },
226
+ "node_modules/@esbuild/linux-riscv64": {
227
+ "version": "0.19.5",
228
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz",
229
+ "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==",
230
+ "cpu": [
231
+ "riscv64"
232
+ ],
233
+ "optional": true,
234
+ "os": [
235
+ "linux"
236
+ ],
237
+ "engines": {
238
+ "node": ">=12"
239
+ }
240
+ },
241
+ "node_modules/@esbuild/linux-s390x": {
242
+ "version": "0.19.5",
243
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz",
244
+ "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==",
245
+ "cpu": [
246
+ "s390x"
247
+ ],
248
+ "optional": true,
249
+ "os": [
250
+ "linux"
251
+ ],
252
+ "engines": {
253
+ "node": ">=12"
254
+ }
255
+ },
256
+ "node_modules/@esbuild/linux-x64": {
257
+ "version": "0.19.5",
258
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz",
259
+ "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==",
260
+ "cpu": [
261
+ "x64"
262
+ ],
263
+ "optional": true,
264
+ "os": [
265
+ "linux"
266
+ ],
267
+ "engines": {
268
+ "node": ">=12"
269
+ }
270
+ },
271
+ "node_modules/@esbuild/netbsd-x64": {
272
+ "version": "0.19.5",
273
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz",
274
+ "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==",
275
+ "cpu": [
276
+ "x64"
277
+ ],
278
+ "optional": true,
279
+ "os": [
280
+ "netbsd"
281
+ ],
282
+ "engines": {
283
+ "node": ">=12"
284
+ }
285
+ },
286
+ "node_modules/@esbuild/openbsd-x64": {
287
+ "version": "0.19.5",
288
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz",
289
+ "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==",
290
+ "cpu": [
291
+ "x64"
292
+ ],
293
+ "optional": true,
294
+ "os": [
295
+ "openbsd"
296
+ ],
297
+ "engines": {
298
+ "node": ">=12"
299
+ }
300
+ },
301
+ "node_modules/@esbuild/sunos-x64": {
302
+ "version": "0.19.5",
303
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz",
304
+ "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==",
305
+ "cpu": [
306
+ "x64"
307
+ ],
308
+ "optional": true,
309
+ "os": [
310
+ "sunos"
311
+ ],
312
+ "engines": {
313
+ "node": ">=12"
314
+ }
315
+ },
316
+ "node_modules/@esbuild/win32-arm64": {
317
+ "version": "0.19.5",
318
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz",
319
+ "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==",
320
+ "cpu": [
321
+ "arm64"
322
+ ],
323
+ "optional": true,
324
+ "os": [
325
+ "win32"
326
+ ],
327
+ "engines": {
328
+ "node": ">=12"
329
+ }
330
+ },
331
+ "node_modules/@esbuild/win32-ia32": {
332
+ "version": "0.19.5",
333
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz",
334
+ "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==",
335
+ "cpu": [
336
+ "ia32"
337
+ ],
338
+ "optional": true,
339
+ "os": [
340
+ "win32"
341
+ ],
342
+ "engines": {
343
+ "node": ">=12"
344
+ }
345
+ },
346
+ "node_modules/@esbuild/win32-x64": {
347
+ "version": "0.19.5",
348
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz",
349
+ "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==",
350
+ "cpu": [
351
+ "x64"
352
+ ],
353
+ "optional": true,
354
+ "os": [
355
+ "win32"
356
+ ],
357
+ "engines": {
358
+ "node": ">=12"
359
+ }
360
+ },
361
+ "node_modules/@formatjs/ecma402-abstract": {
362
+ "version": "1.11.4",
363
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
364
+ "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
365
+ "dependencies": {
366
+ "@formatjs/intl-localematcher": "0.2.25",
367
+ "tslib": "^2.1.0"
368
+ }
369
+ },
370
+ "node_modules/@formatjs/fast-memoize": {
371
+ "version": "1.2.1",
372
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
373
+ "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
374
+ "dependencies": {
375
+ "tslib": "^2.1.0"
376
+ }
377
+ },
378
+ "node_modules/@formatjs/icu-messageformat-parser": {
379
+ "version": "2.1.0",
380
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz",
381
+ "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==",
382
+ "dependencies": {
383
+ "@formatjs/ecma402-abstract": "1.11.4",
384
+ "@formatjs/icu-skeleton-parser": "1.3.6",
385
+ "tslib": "^2.1.0"
386
+ }
387
+ },
388
+ "node_modules/@formatjs/icu-skeleton-parser": {
389
+ "version": "1.3.6",
390
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz",
391
+ "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==",
392
+ "dependencies": {
393
+ "@formatjs/ecma402-abstract": "1.11.4",
394
+ "tslib": "^2.1.0"
395
+ }
396
+ },
397
+ "node_modules/@formatjs/intl-localematcher": {
398
+ "version": "0.2.25",
399
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
400
+ "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
401
+ "dependencies": {
402
+ "tslib": "^2.1.0"
403
+ }
404
+ },
405
+ "node_modules/@gradio/atoms": {
406
+ "version": "0.2.0-beta.4",
407
+ "resolved": "https://registry.npmjs.org/@gradio/atoms/-/atoms-0.2.0-beta.4.tgz",
408
+ "integrity": "sha512-xZfP9oPmb7iiuGl7KB4vVELSVk9f3w5Y9KRIxkAaMb+oeRpmb5uDtKQPAxntpm0W9rKAZmYG+DIWhInlu1eeKA==",
409
+ "dependencies": {
410
+ "@gradio/icons": "^0.2.0-beta.1",
411
+ "@gradio/utils": "^0.2.0-beta.4"
412
+ }
413
+ },
414
+ "node_modules/@gradio/column": {
415
+ "version": "0.1.0-beta.2",
416
+ "resolved": "https://registry.npmjs.org/@gradio/column/-/column-0.1.0-beta.2.tgz",
417
+ "integrity": "sha512-vL0GECdNL4wAaO/o0JcF3fm2xyMrx5DJWXUiPq/sUwqZwwB95srPGKBVTmVja3HproVXCBEnTzPQmRlrwWK67w=="
418
+ },
419
+ "node_modules/@gradio/icons": {
420
+ "version": "0.2.0-beta.1",
421
+ "resolved": "https://registry.npmjs.org/@gradio/icons/-/icons-0.2.0-beta.1.tgz",
422
+ "integrity": "sha512-6nwP1NIi0u4YQoSoaqC/rY0wuCvJHsnK+8aHDOE37070JpzBGuxB/VUlEgO7trNz5zI/EJy2htIRYsqz1vKmXA=="
423
+ },
424
+ "node_modules/@gradio/statustracker": {
425
+ "version": "0.3.0-beta.6",
426
+ "resolved": "https://registry.npmjs.org/@gradio/statustracker/-/statustracker-0.3.0-beta.6.tgz",
427
+ "integrity": "sha512-AIhaMCnr2uibHdqRrs4K8ZUvZK0q5e430TcvoduLOkaoOrkfnqetrHaHdOLNBz+H4kJlXJRsmt7ZZYV4wwMXRQ==",
428
+ "dependencies": {
429
+ "@gradio/atoms": "^0.2.0-beta.4",
430
+ "@gradio/column": "^0.1.0-beta.2",
431
+ "@gradio/icons": "^0.2.0-beta.1",
432
+ "@gradio/utils": "^0.2.0-beta.4"
433
+ }
434
+ },
435
+ "node_modules/@gradio/theme": {
436
+ "version": "0.2.0-beta.2",
437
+ "resolved": "https://registry.npmjs.org/@gradio/theme/-/theme-0.2.0-beta.2.tgz",
438
+ "integrity": "sha512-yKrA8eE02URtXUC9w98lBW8tqZk5oGumbBH7bFKOAhsrv1sbVZKir18P4a2/EL4XJ6Um36MwhPB3D5ipMniV5g=="
439
+ },
440
+ "node_modules/@gradio/utils": {
441
+ "version": "0.2.0-beta.4",
442
+ "resolved": "https://registry.npmjs.org/@gradio/utils/-/utils-0.2.0-beta.4.tgz",
443
+ "integrity": "sha512-jaOY3IQs1MnWRagXBICHXl5ZDKFqgF4XMfgsZNjTQxTG6THFOCsrUc14X1BNmXWkh9zVXJJTZcXifekj8O6LZQ==",
444
+ "dependencies": {
445
+ "@gradio/theme": "^0.2.0-beta.2",
446
+ "svelte-i18n": "^3.6.0"
447
+ }
448
+ },
449
+ "node_modules/@jridgewell/gen-mapping": {
450
+ "version": "0.3.3",
451
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
452
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
453
+ "peer": true,
454
+ "dependencies": {
455
+ "@jridgewell/set-array": "^1.0.1",
456
+ "@jridgewell/sourcemap-codec": "^1.4.10",
457
+ "@jridgewell/trace-mapping": "^0.3.9"
458
+ },
459
+ "engines": {
460
+ "node": ">=6.0.0"
461
+ }
462
+ },
463
+ "node_modules/@jridgewell/resolve-uri": {
464
+ "version": "3.1.1",
465
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
466
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
467
+ "peer": true,
468
+ "engines": {
469
+ "node": ">=6.0.0"
470
+ }
471
+ },
472
+ "node_modules/@jridgewell/set-array": {
473
+ "version": "1.1.2",
474
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
475
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
476
+ "peer": true,
477
+ "engines": {
478
+ "node": ">=6.0.0"
479
+ }
480
+ },
481
+ "node_modules/@jridgewell/sourcemap-codec": {
482
+ "version": "1.4.15",
483
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
484
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
485
+ "peer": true
486
+ },
487
+ "node_modules/@jridgewell/trace-mapping": {
488
+ "version": "0.3.20",
489
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
490
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
491
+ "peer": true,
492
+ "dependencies": {
493
+ "@jridgewell/resolve-uri": "^3.1.0",
494
+ "@jridgewell/sourcemap-codec": "^1.4.14"
495
+ }
496
+ },
497
+ "node_modules/@types/estree": {
498
+ "version": "1.0.3",
499
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz",
500
+ "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==",
501
+ "peer": true
502
+ },
503
+ "node_modules/acorn": {
504
+ "version": "8.10.0",
505
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
506
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
507
+ "peer": true,
508
+ "bin": {
509
+ "acorn": "bin/acorn"
510
+ },
511
+ "engines": {
512
+ "node": ">=0.4.0"
513
+ }
514
+ },
515
+ "node_modules/aria-query": {
516
+ "version": "5.3.0",
517
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
518
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
519
+ "peer": true,
520
+ "dependencies": {
521
+ "dequal": "^2.0.3"
522
+ }
523
+ },
524
+ "node_modules/axobject-query": {
525
+ "version": "3.2.1",
526
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
527
+ "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
528
+ "peer": true,
529
+ "dependencies": {
530
+ "dequal": "^2.0.3"
531
+ }
532
+ },
533
+ "node_modules/cli-color": {
534
+ "version": "2.0.3",
535
+ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz",
536
+ "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==",
537
+ "dependencies": {
538
+ "d": "^1.0.1",
539
+ "es5-ext": "^0.10.61",
540
+ "es6-iterator": "^2.0.3",
541
+ "memoizee": "^0.4.15",
542
+ "timers-ext": "^0.1.7"
543
+ },
544
+ "engines": {
545
+ "node": ">=0.10"
546
+ }
547
+ },
548
+ "node_modules/code-red": {
549
+ "version": "1.0.4",
550
+ "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
551
+ "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
552
+ "peer": true,
553
+ "dependencies": {
554
+ "@jridgewell/sourcemap-codec": "^1.4.15",
555
+ "@types/estree": "^1.0.1",
556
+ "acorn": "^8.10.0",
557
+ "estree-walker": "^3.0.3",
558
+ "periscopic": "^3.1.0"
559
+ }
560
+ },
561
+ "node_modules/css-tree": {
562
+ "version": "2.3.1",
563
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
564
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
565
+ "peer": true,
566
+ "dependencies": {
567
+ "mdn-data": "2.0.30",
568
+ "source-map-js": "^1.0.1"
569
+ },
570
+ "engines": {
571
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
572
+ }
573
+ },
574
+ "node_modules/d": {
575
+ "version": "1.0.1",
576
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
577
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
578
+ "dependencies": {
579
+ "es5-ext": "^0.10.50",
580
+ "type": "^1.0.1"
581
+ }
582
+ },
583
+ "node_modules/deepmerge": {
584
+ "version": "4.3.1",
585
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
586
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
587
+ "engines": {
588
+ "node": ">=0.10.0"
589
+ }
590
+ },
591
+ "node_modules/dequal": {
592
+ "version": "2.0.3",
593
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
594
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
595
+ "peer": true,
596
+ "engines": {
597
+ "node": ">=6"
598
+ }
599
+ },
600
+ "node_modules/es5-ext": {
601
+ "version": "0.10.62",
602
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
603
+ "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
604
+ "hasInstallScript": true,
605
+ "dependencies": {
606
+ "es6-iterator": "^2.0.3",
607
+ "es6-symbol": "^3.1.3",
608
+ "next-tick": "^1.1.0"
609
+ },
610
+ "engines": {
611
+ "node": ">=0.10"
612
+ }
613
+ },
614
+ "node_modules/es6-iterator": {
615
+ "version": "2.0.3",
616
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
617
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
618
+ "dependencies": {
619
+ "d": "1",
620
+ "es5-ext": "^0.10.35",
621
+ "es6-symbol": "^3.1.1"
622
+ }
623
+ },
624
+ "node_modules/es6-symbol": {
625
+ "version": "3.1.3",
626
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
627
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
628
+ "dependencies": {
629
+ "d": "^1.0.1",
630
+ "ext": "^1.1.2"
631
+ }
632
+ },
633
+ "node_modules/es6-weak-map": {
634
+ "version": "2.0.3",
635
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
636
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
637
+ "dependencies": {
638
+ "d": "1",
639
+ "es5-ext": "^0.10.46",
640
+ "es6-iterator": "^2.0.3",
641
+ "es6-symbol": "^3.1.1"
642
+ }
643
+ },
644
+ "node_modules/esbuild": {
645
+ "version": "0.19.5",
646
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz",
647
+ "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==",
648
+ "hasInstallScript": true,
649
+ "bin": {
650
+ "esbuild": "bin/esbuild"
651
+ },
652
+ "engines": {
653
+ "node": ">=12"
654
+ },
655
+ "optionalDependencies": {
656
+ "@esbuild/android-arm": "0.19.5",
657
+ "@esbuild/android-arm64": "0.19.5",
658
+ "@esbuild/android-x64": "0.19.5",
659
+ "@esbuild/darwin-arm64": "0.19.5",
660
+ "@esbuild/darwin-x64": "0.19.5",
661
+ "@esbuild/freebsd-arm64": "0.19.5",
662
+ "@esbuild/freebsd-x64": "0.19.5",
663
+ "@esbuild/linux-arm": "0.19.5",
664
+ "@esbuild/linux-arm64": "0.19.5",
665
+ "@esbuild/linux-ia32": "0.19.5",
666
+ "@esbuild/linux-loong64": "0.19.5",
667
+ "@esbuild/linux-mips64el": "0.19.5",
668
+ "@esbuild/linux-ppc64": "0.19.5",
669
+ "@esbuild/linux-riscv64": "0.19.5",
670
+ "@esbuild/linux-s390x": "0.19.5",
671
+ "@esbuild/linux-x64": "0.19.5",
672
+ "@esbuild/netbsd-x64": "0.19.5",
673
+ "@esbuild/openbsd-x64": "0.19.5",
674
+ "@esbuild/sunos-x64": "0.19.5",
675
+ "@esbuild/win32-arm64": "0.19.5",
676
+ "@esbuild/win32-ia32": "0.19.5",
677
+ "@esbuild/win32-x64": "0.19.5"
678
+ }
679
+ },
680
+ "node_modules/estree-walker": {
681
+ "version": "3.0.3",
682
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
683
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
684
+ "peer": true,
685
+ "dependencies": {
686
+ "@types/estree": "^1.0.0"
687
+ }
688
+ },
689
+ "node_modules/event-emitter": {
690
+ "version": "0.3.5",
691
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
692
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
693
+ "dependencies": {
694
+ "d": "1",
695
+ "es5-ext": "~0.10.14"
696
+ }
697
+ },
698
+ "node_modules/ext": {
699
+ "version": "1.7.0",
700
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
701
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
702
+ "dependencies": {
703
+ "type": "^2.7.2"
704
+ }
705
+ },
706
+ "node_modules/ext/node_modules/type": {
707
+ "version": "2.7.2",
708
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
709
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
710
+ },
711
+ "node_modules/globalyzer": {
712
+ "version": "0.1.0",
713
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
714
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
715
+ },
716
+ "node_modules/globrex": {
717
+ "version": "0.1.2",
718
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
719
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
720
+ },
721
+ "node_modules/intl-messageformat": {
722
+ "version": "9.13.0",
723
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz",
724
+ "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==",
725
+ "dependencies": {
726
+ "@formatjs/ecma402-abstract": "1.11.4",
727
+ "@formatjs/fast-memoize": "1.2.1",
728
+ "@formatjs/icu-messageformat-parser": "2.1.0",
729
+ "tslib": "^2.1.0"
730
+ }
731
+ },
732
+ "node_modules/is-promise": {
733
+ "version": "2.2.2",
734
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
735
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
736
+ },
737
+ "node_modules/is-reference": {
738
+ "version": "3.0.2",
739
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
740
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
741
+ "peer": true,
742
+ "dependencies": {
743
+ "@types/estree": "*"
744
+ }
745
+ },
746
+ "node_modules/locate-character": {
747
+ "version": "3.0.0",
748
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
749
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
750
+ "peer": true
751
+ },
752
+ "node_modules/lru-queue": {
753
+ "version": "0.1.0",
754
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
755
+ "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
756
+ "dependencies": {
757
+ "es5-ext": "~0.10.2"
758
+ }
759
+ },
760
+ "node_modules/magic-string": {
761
+ "version": "0.30.5",
762
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
763
+ "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
764
+ "peer": true,
765
+ "dependencies": {
766
+ "@jridgewell/sourcemap-codec": "^1.4.15"
767
+ },
768
+ "engines": {
769
+ "node": ">=12"
770
+ }
771
+ },
772
+ "node_modules/mdn-data": {
773
+ "version": "2.0.30",
774
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
775
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
776
+ "peer": true
777
+ },
778
+ "node_modules/memoizee": {
779
+ "version": "0.4.15",
780
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
781
+ "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
782
+ "dependencies": {
783
+ "d": "^1.0.1",
784
+ "es5-ext": "^0.10.53",
785
+ "es6-weak-map": "^2.0.3",
786
+ "event-emitter": "^0.3.5",
787
+ "is-promise": "^2.2.2",
788
+ "lru-queue": "^0.1.0",
789
+ "next-tick": "^1.1.0",
790
+ "timers-ext": "^0.1.7"
791
+ }
792
+ },
793
+ "node_modules/mri": {
794
+ "version": "1.2.0",
795
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
796
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
797
+ "engines": {
798
+ "node": ">=4"
799
+ }
800
+ },
801
+ "node_modules/next-tick": {
802
+ "version": "1.1.0",
803
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
804
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
805
+ },
806
+ "node_modules/periscopic": {
807
+ "version": "3.1.0",
808
+ "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
809
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
810
+ "peer": true,
811
+ "dependencies": {
812
+ "@types/estree": "^1.0.0",
813
+ "estree-walker": "^3.0.0",
814
+ "is-reference": "^3.0.0"
815
+ }
816
+ },
817
+ "node_modules/sade": {
818
+ "version": "1.8.1",
819
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
820
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
821
+ "dependencies": {
822
+ "mri": "^1.1.0"
823
+ },
824
+ "engines": {
825
+ "node": ">=6"
826
+ }
827
+ },
828
+ "node_modules/source-map-js": {
829
+ "version": "1.0.2",
830
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
831
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
832
+ "peer": true,
833
+ "engines": {
834
+ "node": ">=0.10.0"
835
+ }
836
+ },
837
+ "node_modules/svelte": {
838
+ "version": "4.2.2",
839
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.2.tgz",
840
+ "integrity": "sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==",
841
+ "peer": true,
842
+ "dependencies": {
843
+ "@ampproject/remapping": "^2.2.1",
844
+ "@jridgewell/sourcemap-codec": "^1.4.15",
845
+ "@jridgewell/trace-mapping": "^0.3.18",
846
+ "acorn": "^8.9.0",
847
+ "aria-query": "^5.3.0",
848
+ "axobject-query": "^3.2.1",
849
+ "code-red": "^1.0.3",
850
+ "css-tree": "^2.3.1",
851
+ "estree-walker": "^3.0.3",
852
+ "is-reference": "^3.0.1",
853
+ "locate-character": "^3.0.0",
854
+ "magic-string": "^0.30.4",
855
+ "periscopic": "^3.1.0"
856
+ },
857
+ "engines": {
858
+ "node": ">=16"
859
+ }
860
+ },
861
+ "node_modules/svelte-i18n": {
862
+ "version": "3.7.4",
863
+ "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-3.7.4.tgz",
864
+ "integrity": "sha512-yGRCNo+eBT4cPuU7IVsYTYjxB7I2V8qgUZPlHnNctJj5IgbJgV78flsRzpjZ/8iUYZrS49oCt7uxlU3AZv/N5Q==",
865
+ "dependencies": {
866
+ "cli-color": "^2.0.3",
867
+ "deepmerge": "^4.2.2",
868
+ "esbuild": "^0.19.2",
869
+ "estree-walker": "^2",
870
+ "intl-messageformat": "^9.13.0",
871
+ "sade": "^1.8.1",
872
+ "tiny-glob": "^0.2.9"
873
+ },
874
+ "bin": {
875
+ "svelte-i18n": "dist/cli.js"
876
+ },
877
+ "engines": {
878
+ "node": ">= 16"
879
+ },
880
+ "peerDependencies": {
881
+ "svelte": "^3 || ^4"
882
+ }
883
+ },
884
+ "node_modules/svelte-i18n/node_modules/estree-walker": {
885
+ "version": "2.0.2",
886
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
887
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
888
+ },
889
+ "node_modules/timers-ext": {
890
+ "version": "0.1.7",
891
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
892
+ "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
893
+ "dependencies": {
894
+ "es5-ext": "~0.10.46",
895
+ "next-tick": "1"
896
+ }
897
+ },
898
+ "node_modules/tiny-glob": {
899
+ "version": "0.2.9",
900
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
901
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
902
+ "dependencies": {
903
+ "globalyzer": "0.1.0",
904
+ "globrex": "^0.1.2"
905
+ }
906
+ },
907
+ "node_modules/tslib": {
908
+ "version": "2.6.2",
909
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
910
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
911
+ },
912
+ "node_modules/type": {
913
+ "version": "1.2.0",
914
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
915
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
916
+ }
917
+ }
918
+ }
src/frontend/package.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "richtextbox",
3
+ "version": "0.0.1-beta.0",
4
+ "description": "Gradio UI packages",
5
+ "type": "module",
6
+ "author": "",
7
+ "license": "ISC",
8
+ "private": false,
9
+ "main_changeset": true,
10
+ "exports": {
11
+ ".": "./Index.svelte",
12
+ "./example": "./Example.svelte",
13
+ "./package.json": "./package.json"
14
+ },
15
+ "dependencies": {
16
+ "@gradio/atoms": "0.2.0-beta.4",
17
+ "@gradio/icons": "0.2.0-beta.1",
18
+ "@gradio/statustracker": "0.3.0-beta.6",
19
+ "@gradio/utils": "0.2.0-beta.4"
20
+ }
21
+ }
src/frontend/utils.ts ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // JS function to convert BBCode and HTML code - http;//coursesweb.net/javascript/
2
+ var BBCodeHTML = function() {
3
+ var me = this; // stores the object instance
4
+ var token_match = /{[A-Z_]+[0-9]*}/ig;
5
+
6
+ // regular expressions for the different bbcode tokens
7
+ var tokens = {
8
+ 'URL' : '((?:(?:[a-z][a-z\\d+\\-.]*:\\/{2}(?:(?:[a-z0-9\\-._~\\!$&\'*+,;=:@|]+|%[\\dA-F]{2})+|[0-9.]+|\\[[a-z0-9.]+:[a-z0-9.]+:[a-z0-9.:]+\\])(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~\\!$&\'*+,;=:@|]+|%[\\dA-F]{2})*)*(?:\\?(?:[a-z0-9\\-._~\\!$&\'*+,;=:@\\/?|]+|%[\\dA-F]{2})*)?(?:#(?:[a-z0-9\\-._~\\!$&\'*+,;=:@\\/?|]+|%[\\dA-F]{2})*)?)|(?:www\\.(?:[a-z0-9\\-._~\\!$&\'*+,;=:@|]+|%[\\dA-F]{2})+(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~\\!$&\'*+,;=:@|]+|%[\\dA-F]{2})*)*(?:\\?(?:[a-z0-9\\-._~\\!$&\'*+,;=:@\\/?|]+|%[\\dA-F]{2})*)?(?:#(?:[a-z0-9\\-._~\\!$&\'*+,;=:@\\/?|]+|%[\\dA-F]{2})*)?)))',
9
+ 'LINK' : '([a-z0-9\-\./]+[^"\' ]*)',
10
+ 'EMAIL' : '((?:[\\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*(?:[\\w\!\#$\%\'\*\+\-\/\=\?\^\`{\|\}\~]|&)+@(?:(?:(?:(?:(?:[a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(?:\\d{1,3}\.){3}\\d{1,3}(?:\:\\d{1,5})?))',
11
+ 'TEXT' : '(.*?)',
12
+ 'SIMPLETEXT' : '([a-zA-Z0-9-+.,_ ]+)',
13
+ 'INTTEXT' : '([a-zA-Z0-9-+,_. ]+)',
14
+ 'IDENTIFIER' : '([a-zA-Z0-9-_]+)',
15
+ 'COLOR' : '([a-z]+|#[0-9abcdef]+)',
16
+ 'NUMBER' : '([0-9]+)'
17
+ };
18
+
19
+ var bbcode_matches = []; // matches for bbcode to html
20
+
21
+ var html_tpls = []; // html templates for html to bbcode
22
+
23
+ var html_matches = []; // matches for html to bbcode
24
+
25
+ var bbcode_tpls = []; // bbcode templates for bbcode to html
26
+
27
+ /**
28
+ * Turns a bbcode into a regular rexpression by changing the tokens into
29
+ * their regex form
30
+ */
31
+ var _getRegEx = function(str) {
32
+ var matches = str.match(token_match);
33
+ var nrmatches = matches.length;
34
+ var i = 0;
35
+ var replacement = '';
36
+
37
+ if (nrmatches <= 0) {
38
+ return new RegExp(preg_quote(str), 'g'); // no tokens so return the escaped string
39
+ }
40
+
41
+ for(; i < nrmatches; i += 1) {
42
+ // Remove {, } and numbers from the token so it can match the
43
+ // keys in tokens
44
+ var token = matches[i].replace(/[{}0-9]/g, '');
45
+
46
+ if (tokens[token]) {
47
+ // Escape everything before the token
48
+ replacement += preg_quote(str.substr(0, str.indexOf(matches[i]))) + tokens[token];
49
+
50
+ // Remove everything before the end of the token so it can be used
51
+ // with the next token. Doing this so that parts can be escaped
52
+ str = str.substr(str.indexOf(matches[i]) + matches[i].length);
53
+ }
54
+ }
55
+
56
+ replacement += preg_quote(str); // add whatever is left to the string
57
+
58
+ return new RegExp(replacement, 'gi');
59
+ };
60
+
61
+ /**
62
+ * Turns a bbcode template into the replacement form used in regular expressions
63
+ * by turning the tokens in $1, $2, etc.
64
+ */
65
+ var _getTpls = function(str) {
66
+ var matches = str.match(token_match);
67
+ var nrmatches = matches.length;
68
+ var i = 0;
69
+ var replacement = '';
70
+ var positions = {};
71
+ var next_position = 0;
72
+
73
+ if (nrmatches <= 0) {
74
+ return str; // no tokens so return the string
75
+ }
76
+
77
+ for(; i < nrmatches; i += 1) {
78
+ // Remove {, } and numbers from the token so it can match the
79
+ // keys in tokens
80
+ var token = matches[i].replace(/[{}0-9]/g, '');
81
+ var position;
82
+
83
+ // figure out what $# to use ($1, $2)
84
+ if (positions[matches[i]]) {
85
+ position = positions[matches[i]]; // if the token already has a position then use that
86
+ } else {
87
+ // token doesn't have a position so increment the next position
88
+ // and record this token's position
89
+ next_position += 1;
90
+ position = next_position;
91
+ positions[matches[i]] = position;
92
+ }
93
+
94
+ if (tokens[token]) {
95
+ replacement += str.substr(0, str.indexOf(matches[i])) + '$' + position;
96
+ str = str.substr(str.indexOf(matches[i]) + matches[i].length);
97
+ }
98
+ }
99
+
100
+ replacement += str;
101
+
102
+ return replacement;
103
+ };
104
+
105
+ /**
106
+ * Adds a bbcode to the list
107
+ */
108
+ me.addBBCode = function(bbcode_match, bbcode_tpl) {
109
+ // add the regular expressions and templates for bbcode to html
110
+ bbcode_matches.push(_getRegEx(bbcode_match));
111
+ html_tpls.push(_getTpls(bbcode_tpl));
112
+
113
+ // add the regular expressions and templates for html to bbcode
114
+ html_matches.push(_getRegEx(bbcode_tpl));
115
+ bbcode_tpls.push(_getTpls(bbcode_match));
116
+ };
117
+
118
+ /**
119
+ * Turns all of the added bbcodes into html
120
+ */
121
+ me.bbcodeToHtml = function(str) {
122
+ var nrbbcmatches = bbcode_matches.length;
123
+ var i = 0;
124
+
125
+ for(; i < nrbbcmatches; i += 1) {
126
+ str = str.replace(bbcode_matches[i], html_tpls[i]);
127
+ }
128
+
129
+ return str;
130
+ };
131
+
132
+ /**
133
+ * Turns html into bbcode
134
+ */
135
+ me.htmlToBBCode = function(str) {
136
+ var nrhtmlmatches = html_matches.length;
137
+ var i = 0;
138
+
139
+ for(; i < nrhtmlmatches; i += 1) {
140
+ str = str.replace(html_matches[i], bbcode_tpls[i]);
141
+ }
142
+
143
+ return str;
144
+ }
145
+
146
+ /**
147
+ * Quote regular expression characters plus an optional character
148
+ * taken from phpjs.org
149
+ */
150
+ function preg_quote (str, delimiter) {
151
+ return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
152
+ }
153
+
154
+ // adds BBCodes and their HTML
155
+ me.addBBCode('[b]{TEXT}[/b]', '<strong>{TEXT}</strong>');
156
+ me.addBBCode('[i]{TEXT}[/i]', '<em>{TEXT}</em>');
157
+ me.addBBCode('[u]{TEXT}[/u]', '<span style="text-decoration:underline;">{TEXT}</span>');
158
+ me.addBBCode('[s]{TEXT}[/s]', '<span style="text-decoration:line-through;">{TEXT}</span>');
159
+ me.addBBCode('[color={COLOR}]{TEXT}[/color]', '<span style="color:{COLOR}">{TEXT}</span>');
160
+ };
161
+
162
+ export var bbcodeParser = new BBCodeHTML(); // creates object instance of BBCodeHTML()
163
+
src/pyproject.toml ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [build-system]
2
+ requires = [
3
+ "hatchling",
4
+ "hatch-requirements-txt",
5
+ "hatch-fancy-pypi-readme>=22.5.0",
6
+ ]
7
+ build-backend = "hatchling.build"
8
+
9
+ [project]
10
+ name = "gradio_richtextbox"
11
+ version = "0.0.1"
12
+ description = "Python library for easily interacting with trained machine learning models"
13
+ license = "Apache-2.0"
14
+ requires-python = ">=3.8"
15
+ authors = [{ name = "YOUR NAME", email = "YOUREMAIL@domain.com" }]
16
+ keywords = [
17
+ "machine learning",
18
+ "reproducibility",
19
+ "visualization",
20
+ "gradio",
21
+ "gradio custom component",
22
+ ]
23
+ # Add dependencies here
24
+ dependencies = ["gradio"]
25
+ classifiers = [
26
+ 'Development Status :: 3 - Alpha',
27
+ 'License :: OSI Approved :: Apache Software License',
28
+ 'Operating System :: OS Independent',
29
+ 'Programming Language :: Python :: 3',
30
+ 'Programming Language :: Python :: 3 :: Only',
31
+ 'Programming Language :: Python :: 3.8',
32
+ 'Programming Language :: Python :: 3.9',
33
+ 'Programming Language :: Python :: 3.10',
34
+ 'Programming Language :: Python :: 3.11',
35
+ 'Topic :: Scientific/Engineering',
36
+ 'Topic :: Scientific/Engineering :: Artificial Intelligence',
37
+ 'Topic :: Scientific/Engineering :: Visualization',
38
+ ]
39
+
40
+ [project.optional-dependencies]
41
+ dev = ["build", "twine"]
42
+
43
+ [tool.hatch.build]
44
+ artifacts = ["/backend/gradio_richtextbox/templates", "*.pyi", "backend/gradio_richtextbox/templates", "backend/gradio_richtextbox/templates", "backend/gradio_richtextbox/templates", "backend/gradio_richtextbox/templates"]
45
+
46
+ [tool.hatch.build.targets.wheel]
47
+ packages = ["/backend/gradio_richtextbox"]
src/test/.gitignore ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ .eggs/
2
+ dist/
3
+ *.pyc
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+ __tmp/*
8
+ *.pyi
9
+ node_modules
src/test/backend/gradio_test/__init__.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+
2
+ from .test import Test
3
+
4
+ __all__ = ['Test']
src/test/backend/gradio_test/test.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Callable
4
+
5
+ from gradio.components.base import FormComponent
6
+ from gradio.events import Events
7
+
8
+
9
+ class Test(FormComponent):
10
+ """
11
+ Creates a very simple textbox for user to enter string input or display string output.
12
+ Preprocessing: passes textbox value as a {str} into the function.
13
+ Postprocessing: expects a {str} returned from function and sets textbox value to it.
14
+ Examples-format: a {str} representing the textbox input.
15
+ """
16
+
17
+ EVENTS = [
18
+ Events.change,
19
+ Events.input,
20
+ Events.submit,
21
+ ]
22
+
23
+ def __init__(
24
+ self,
25
+ value: str | Callable | None = "",
26
+ *,
27
+ placeholder: str | None = None,
28
+ label: str | None = None,
29
+ every: float | None = None,
30
+ show_label: bool | None = None,
31
+ scale: int | None = None,
32
+ min_width: int = 160,
33
+ interactive: bool | None = None,
34
+ visible: bool = True,
35
+ rtl: bool = False,
36
+ elem_id: str | None = None,
37
+ elem_classes: list[str] | str | None = None,
38
+ **kwargs,
39
+ ):
40
+ """
41
+ Parameters:
42
+ value: default text to provide in textbox. If callable, the function will be called whenever the app loads to set the initial value of the component.
43
+ placeholder: placeholder hint to provide behind textbox.
44
+ label: component name in interface.
45
+ every: If `value` is a callable, run the function 'every' number of seconds while the client connection is open. Has no effect otherwise. Queue must be enabled. The event can be accessed (e.g. to cancel it) via this component's .load_event attribute.
46
+ show_label: if True, will display label.
47
+ scale: relative width compared to adjacent Components in a Row. For example, if Component A has scale=2, and Component B has scale=1, A will be twice as wide as B. Should be an integer.
48
+ min_width: minimum pixel width, will wrap if not sufficient screen space to satisfy this value. If a certain scale value results in this Component being narrower than min_width, the min_width parameter will be respected first.
49
+ interactive: if True, will be rendered as an editable textbox; if False, editing will be disabled. If not provided, this is inferred based on whether the component is used as an input or output.
50
+ visible: If False, component will be hidden.
51
+ rtl: If True and `type` is "text", sets the direction of the text to right-to-left (cursor appears on the left of the text). Default is False, which renders cursor on the right.
52
+ elem_id: An optional string that is assigned as the id of this component in the HTML DOM. Can be used for targeting CSS styles.
53
+ elem_classes: An optional list of strings that are assigned as the classes of this component in the HTML DOM. Can be used for targeting CSS styles.
54
+ """
55
+ self.placeholder = placeholder
56
+ self.rtl = rtl
57
+ super().__init__(
58
+ label=label,
59
+ every=every,
60
+ show_label=show_label,
61
+ scale=scale,
62
+ min_width=min_width,
63
+ interactive=interactive,
64
+ visible=visible,
65
+ elem_id=elem_id,
66
+ elem_classes=elem_classes,
67
+ value=value,
68
+ **kwargs,
69
+ )
70
+
71
+ def preprocess(self, x: str | None) -> str | None:
72
+ """
73
+ Preprocesses input (converts it to a string) before passing it to the function.
74
+ Parameters:
75
+ x: text
76
+ Returns:
77
+ text
78
+ """
79
+ return None if x is None else str(x)
80
+
81
+ def postprocess(self, y: str | None) -> str | None:
82
+ """
83
+ Postproccess the function output y by converting it to a str before passing it to the frontend.
84
+ Parameters:
85
+ y: function output to postprocess.
86
+ Returns:
87
+ text
88
+ """
89
+ return None if y is None else str(y)
90
+
91
+ def api_info(self) -> dict[str, Any]:
92
+ return {"type": "string"}
93
+
94
+ def example_inputs(self) -> Any:
95
+ return "Hello!!"
src/test/backend/gradio_test/test.pyi ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Callable
4
+
5
+ from gradio.components.base import FormComponent
6
+ from gradio.events import Events
7
+
8
+ from gradio.events import Dependency
9
+
10
+ class Test(FormComponent):
11
+ """
12
+ Creates a very simple textbox for user to enter string input or display string output.
13
+ Preprocessing: passes textbox value as a {str} into the function.
14
+ Postprocessing: expects a {str} returned from function and sets textbox value to it.
15
+ Examples-format: a {str} representing the textbox input.
16
+ """
17
+
18
+ EVENTS = [
19
+ Events.change,
20
+ Events.input,
21
+ Events.submit,
22
+ ]
23
+
24
+ def __init__(
25
+ self,
26
+ value: str | Callable | None = "",
27
+ *,
28
+ placeholder: str | None = None,
29
+ label: str | None = None,
30
+ every: float | None = None,
31
+ show_label: bool | None = None,
32
+ scale: int | None = None,
33
+ min_width: int = 160,
34
+ interactive: bool | None = None,
35
+ visible: bool = True,
36
+ rtl: bool = False,
37
+ elem_id: str | None = None,
38
+ elem_classes: list[str] | str | None = None,
39
+ **kwargs,
40
+ ):
41
+ """
42
+ Parameters:
43
+ value: default text to provide in textbox. If callable, the function will be called whenever the app loads to set the initial value of the component.
44
+ placeholder: placeholder hint to provide behind textbox.
45
+ label: component name in interface.
46
+ every: If `value` is a callable, run the function 'every' number of seconds while the client connection is open. Has no effect otherwise. Queue must be enabled. The event can be accessed (e.g. to cancel it) via this component's .load_event attribute.
47
+ show_label: if True, will display label.
48
+ scale: relative width compared to adjacent Components in a Row. For example, if Component A has scale=2, and Component B has scale=1, A will be twice as wide as B. Should be an integer.
49
+ min_width: minimum pixel width, will wrap if not sufficient screen space to satisfy this value. If a certain scale value results in this Component being narrower than min_width, the min_width parameter will be respected first.
50
+ interactive: if True, will be rendered as an editable textbox; if False, editing will be disabled. If not provided, this is inferred based on whether the component is used as an input or output.
51
+ visible: If False, component will be hidden.
52
+ rtl: If True and `type` is "text", sets the direction of the text to right-to-left (cursor appears on the left of the text). Default is False, which renders cursor on the right.
53
+ elem_id: An optional string that is assigned as the id of this component in the HTML DOM. Can be used for targeting CSS styles.
54
+ elem_classes: An optional list of strings that are assigned as the classes of this component in the HTML DOM. Can be used for targeting CSS styles.
55
+ """
56
+ self.placeholder = placeholder
57
+ self.rtl = rtl
58
+ super().__init__(
59
+ label=label,
60
+ every=every,
61
+ show_label=show_label,
62
+ scale=scale,
63
+ min_width=min_width,
64
+ interactive=interactive,
65
+ visible=visible,
66
+ elem_id=elem_id,
67
+ elem_classes=elem_classes,
68
+ value=value,
69
+ **kwargs,
70
+ )
71
+
72
+ def preprocess(self, x: str | None) -> str | None:
73
+ """
74
+ Preprocesses input (converts it to a string) before passing it to the function.
75
+ Parameters:
76
+ x: text
77
+ Returns:
78
+ text
79
+ """
80
+ return None if x is None else str(x)
81
+
82
+ def postprocess(self, y: str | None) -> str | None:
83
+ """
84
+ Postproccess the function output y by converting it to a str before passing it to the frontend.
85
+ Parameters:
86
+ y: function output to postprocess.
87
+ Returns:
88
+ text
89
+ """
90
+ return None if y is None else str(y)
91
+
92
+ def api_info(self) -> dict[str, Any]:
93
+ return {"type": "string"}
94
+
95
+ def example_inputs(self) -> Any:
96
+ return "Hello!!"
97
+
98
+
99
+ def change(self,
100
+ fn: Callable | None,
101
+ inputs: Component | Sequence[Component] | set[Component] | None = None,
102
+ outputs: Component | Sequence[Component] | None = None,
103
+ api_name: str | None | Literal[False] = None,
104
+ status_tracker: None = None,
105
+ scroll_to_output: bool = False,
106
+ show_progress: Literal["full", "minimal", "hidden"] = "full",
107
+ queue: bool | None = None,
108
+ batch: bool = False,
109
+ max_batch_size: int = 4,
110
+ preprocess: bool = True,
111
+ postprocess: bool = True,
112
+ cancels: dict[str, Any] | list[dict[str, Any]] | None = None,
113
+ every: float | None = None,
114
+ trigger_mode: Literal["once", "multiple", "always_last"] | None = None,
115
+ _js: str | None = None,) -> Dependency:
116
+ """
117
+ Parameters:
118
+ fn: the function to call when this event is triggered. Often a machine learning model's prediction function. Each parameter of the function corresponds to one input component, and the function should return a single value or a tuple of values, with each element in the tuple corresponding to one output component.
119
+ inputs: List of gradio.components to use as inputs. If the function takes no inputs, this should be an empty list.
120
+ outputs: List of gradio.components to use as outputs. If the function returns no outputs, this should be an empty list.
121
+ api_name: Defines how the endpoint appears in the API docs. Can be a string, None, or False. If False, the endpoint will not be exposed in the api docs. If set to None, the endpoint will be exposed in the api docs as an unnamed endpoint, although this behavior will be changed in Gradio 4.0. If set to a string, the endpoint will be exposed in the api docs with the given name.
122
+ scroll_to_output: If True, will scroll to output component on completion
123
+ show_progress: If True, will show progress animation while pending
124
+ queue: If True, will place the request on the queue, if the queue has been enabled. If False, will not put this event on the queue, even if the queue has been enabled. If None, will use the queue setting of the gradio app.
125
+ batch: If True, then the function should process a batch of inputs, meaning that it should accept a list of input values for each parameter. The lists should be of equal length (and be up to length `max_batch_size`). The function is then *required* to return a tuple of lists (even if there is only 1 output component), with each list in the tuple corresponding to one output component.
126
+ max_batch_size: Maximum number of inputs to batch together if this is called from the queue (only relevant if batch=True)
127
+ preprocess: If False, will not run preprocessing of component data before running 'fn' (e.g. leaving it as a base64 string if this method is called with the `Image` component).
128
+ postprocess: If False, will not run postprocessing of component data before returning 'fn' output to the browser.
129
+ cancels: A list of other events to cancel when this listener is triggered. For example, setting cancels=[click_event] will cancel the click_event, where click_event is the return value of another components .click method. Functions that have not yet run (or generators that are iterating) will be cancelled, but functions that are currently running will be allowed to finish.
130
+ every: Run this event 'every' number of seconds while the client connection is open. Interpreted in seconds. Queue must be enabled.
131
+ trigger_mode: If "once" (default for all events except `.change()`) would not allow any submissions while an event is pending. If set to "multiple", unlimited submissions are allowed while pending, and "always_last" (default for `.change()` event) would allow a second submission after the pending event is complete.
132
+ """
133
+ ...
134
+
135
+ def input(self,
136
+ fn: Callable | None,
137
+ inputs: Component | Sequence[Component] | set[Component] | None = None,
138
+ outputs: Component | Sequence[Component] | None = None,
139
+ api_name: str | None | Literal[False] = None,
140
+ status_tracker: None = None,
141
+ scroll_to_output: bool = False,
142
+ show_progress: Literal["full", "minimal", "hidden"] = "full",
143
+ queue: bool | None = None,
144
+ batch: bool = False,
145
+ max_batch_size: int = 4,
146
+ preprocess: bool = True,
147
+ postprocess: bool = True,
148
+ cancels: dict[str, Any] | list[dict[str, Any]] | None = None,
149
+ every: float | None = None,
150
+ trigger_mode: Literal["once", "multiple", "always_last"] | None = None,
151
+ _js: str | None = None,) -> Dependency:
152
+ """
153
+ Parameters:
154
+ fn: the function to call when this event is triggered. Often a machine learning model's prediction function. Each parameter of the function corresponds to one input component, and the function should return a single value or a tuple of values, with each element in the tuple corresponding to one output component.
155
+ inputs: List of gradio.components to use as inputs. If the function takes no inputs, this should be an empty list.
156
+ outputs: List of gradio.components to use as outputs. If the function returns no outputs, this should be an empty list.
157
+ api_name: Defines how the endpoint appears in the API docs. Can be a string, None, or False. If False, the endpoint will not be exposed in the api docs. If set to None, the endpoint will be exposed in the api docs as an unnamed endpoint, although this behavior will be changed in Gradio 4.0. If set to a string, the endpoint will be exposed in the api docs with the given name.
158
+ scroll_to_output: If True, will scroll to output component on completion
159
+ show_progress: If True, will show progress animation while pending
160
+ queue: If True, will place the request on the queue, if the queue has been enabled. If False, will not put this event on the queue, even if the queue has been enabled. If None, will use the queue setting of the gradio app.
161
+ batch: If True, then the function should process a batch of inputs, meaning that it should accept a list of input values for each parameter. The lists should be of equal length (and be up to length `max_batch_size`). The function is then *required* to return a tuple of lists (even if there is only 1 output component), with each list in the tuple corresponding to one output component.
162
+ max_batch_size: Maximum number of inputs to batch together if this is called from the queue (only relevant if batch=True)
163
+ preprocess: If False, will not run preprocessing of component data before running 'fn' (e.g. leaving it as a base64 string if this method is called with the `Image` component).
164
+ postprocess: If False, will not run postprocessing of component data before returning 'fn' output to the browser.
165
+ cancels: A list of other events to cancel when this listener is triggered. For example, setting cancels=[click_event] will cancel the click_event, where click_event is the return value of another components .click method. Functions that have not yet run (or generators that are iterating) will be cancelled, but functions that are currently running will be allowed to finish.
166
+ every: Run this event 'every' number of seconds while the client connection is open. Interpreted in seconds. Queue must be enabled.
167
+ trigger_mode: If "once" (default for all events except `.change()`) would not allow any submissions while an event is pending. If set to "multiple", unlimited submissions are allowed while pending, and "always_last" (default for `.change()` event) would allow a second submission after the pending event is complete.
168
+ """
169
+ ...
170
+
171
+ def submit(self,
172
+ fn: Callable | None,
173
+ inputs: Component | Sequence[Component] | set[Component] | None = None,
174
+ outputs: Component | Sequence[Component] | None = None,
175
+ api_name: str | None | Literal[False] = None,
176
+ status_tracker: None = None,
177
+ scroll_to_output: bool = False,
178
+ show_progress: Literal["full", "minimal", "hidden"] = "full",
179
+ queue: bool | None = None,
180
+ batch: bool = False,
181
+ max_batch_size: int = 4,
182
+ preprocess: bool = True,
183
+ postprocess: bool = True,
184
+ cancels: dict[str, Any] | list[dict[str, Any]] | None = None,
185
+ every: float | None = None,
186
+ trigger_mode: Literal["once", "multiple", "always_last"] | None = None,
187
+ _js: str | None = None,) -> Dependency:
188
+ """
189
+ Parameters:
190
+ fn: the function to call when this event is triggered. Often a machine learning model's prediction function. Each parameter of the function corresponds to one input component, and the function should return a single value or a tuple of values, with each element in the tuple corresponding to one output component.
191
+ inputs: List of gradio.components to use as inputs. If the function takes no inputs, this should be an empty list.
192
+ outputs: List of gradio.components to use as outputs. If the function returns no outputs, this should be an empty list.
193
+ api_name: Defines how the endpoint appears in the API docs. Can be a string, None, or False. If False, the endpoint will not be exposed in the api docs. If set to None, the endpoint will be exposed in the api docs as an unnamed endpoint, although this behavior will be changed in Gradio 4.0. If set to a string, the endpoint will be exposed in the api docs with the given name.
194
+ scroll_to_output: If True, will scroll to output component on completion
195
+ show_progress: If True, will show progress animation while pending
196
+ queue: If True, will place the request on the queue, if the queue has been enabled. If False, will not put this event on the queue, even if the queue has been enabled. If None, will use the queue setting of the gradio app.
197
+ batch: If True, then the function should process a batch of inputs, meaning that it should accept a list of input values for each parameter. The lists should be of equal length (and be up to length `max_batch_size`). The function is then *required* to return a tuple of lists (even if there is only 1 output component), with each list in the tuple corresponding to one output component.
198
+ max_batch_size: Maximum number of inputs to batch together if this is called from the queue (only relevant if batch=True)
199
+ preprocess: If False, will not run preprocessing of component data before running 'fn' (e.g. leaving it as a base64 string if this method is called with the `Image` component).
200
+ postprocess: If False, will not run postprocessing of component data before returning 'fn' output to the browser.
201
+ cancels: A list of other events to cancel when this listener is triggered. For example, setting cancels=[click_event] will cancel the click_event, where click_event is the return value of another components .click method. Functions that have not yet run (or generators that are iterating) will be cancelled, but functions that are currently running will be allowed to finish.
202
+ every: Run this event 'every' number of seconds while the client connection is open. Interpreted in seconds. Queue must be enabled.
203
+ trigger_mode: If "once" (default for all events except `.change()`) would not allow any submissions while an event is pending. If set to "multiple", unlimited submissions are allowed while pending, and "always_last" (default for `.change()` event) would allow a second submission after the pending event is complete.
204
+ """
205
+ ...
src/test/demo/__init__.py ADDED
File without changes
src/test/demo/app.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from gradio_test import Test
4
+
5
+
6
+ example = Test().example_inputs()
7
+
8
+ demo = gr.Interface(
9
+ lambda x:x,
10
+ Test(), # interactive version of your component
11
+ Test(), # static version of your component
12
+ # examples=[[example]], # uncomment this line to view the "example version" of your component
13
+ )
14
+
15
+
16
+ demo.launch()
src/test/frontend/Example.svelte ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { onMount } from "svelte";
3
+
4
+ export let value: string;
5
+ export let type: "gallery" | "table";
6
+ export let selected = false;
7
+
8
+ let size: number;
9
+ let el: HTMLDivElement;
10
+
11
+ function set_styles(element: HTMLElement, el_width: number): void {
12
+ if (!element || !el_width) return;
13
+ el.style.setProperty(
14
+ "--local-text-width",
15
+ `${el_width < 150 ? el_width : 200}px`
16
+ );
17
+ el.style.whiteSpace = "unset";
18
+ }
19
+
20
+ onMount(() => {
21
+ set_styles(el, size);
22
+ });
23
+ </script>
24
+
25
+ <div
26
+ bind:clientWidth={size}
27
+ bind:this={el}
28
+ class:table={type === "table"}
29
+ class:gallery={type === "gallery"}
30
+ class:selected
31
+ >
32
+ {value}
33
+ </div>
34
+
35
+ <style>
36
+ .gallery {
37
+ padding: var(--size-1) var(--size-2);
38
+ }
39
+
40
+ div {
41
+ overflow: hidden;
42
+ min-width: var(--local-text-width);
43
+
44
+ white-space: nowrap;
45
+ }
46
+ </style>
src/test/frontend/Index.svelte ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svelte:options accessors={true} />
2
+
3
+ <script lang="ts">
4
+ import type { Gradio } from "@gradio/utils";
5
+ import { BlockTitle } from "@gradio/atoms";
6
+ import { Block } from "@gradio/atoms";
7
+ import { StatusTracker } from "@gradio/statustracker";
8
+ import type { LoadingStatus } from "@gradio/statustracker";
9
+ import { tick } from "svelte";
10
+
11
+ export let gradio: Gradio<{
12
+ change: never;
13
+ submit: never;
14
+ input: never;
15
+ }>;
16
+ export let label = "Textbox";
17
+ export let elem_id = "";
18
+ export let elem_classes: string[] = [];
19
+ export let visible = true;
20
+ export let value = "";
21
+ export let placeholder = "";
22
+ export let show_label: boolean;
23
+ export let scale: number | null = null;
24
+ export let min_width: number | undefined = undefined;
25
+ export let loading_status: LoadingStatus | undefined = undefined;
26
+ export let value_is_output = false;
27
+ export let mode: "static" | "interactive";
28
+ export let rtl = false;
29
+
30
+ let el: HTMLTextAreaElement | HTMLInputElement;
31
+ const container = true;
32
+
33
+ function handle_change(): void {
34
+ gradio.dispatch("change");
35
+ if (!value_is_output) {
36
+ gradio.dispatch("input");
37
+ }
38
+ }
39
+
40
+ async function handle_keypress(e: KeyboardEvent): Promise<void> {
41
+ await tick();
42
+ if (e.key === "Enter") {
43
+ e.preventDefault();
44
+ gradio.dispatch("submit");
45
+ }
46
+ }
47
+
48
+ $: if (value === null) value = "";
49
+
50
+ // When the value changes, dispatch the change event via handle_change()
51
+ // See the docs for an explanation: https://svelte.dev/docs/svelte-components#script-3-$-marks-a-statement-as-reactive
52
+ $: value, handle_change();
53
+ </script>
54
+
55
+ <Block
56
+ {visible}
57
+ {elem_id}
58
+ {elem_classes}
59
+ {scale}
60
+ {min_width}
61
+ allow_overflow={false}
62
+ padding={true}
63
+ >
64
+ {#if loading_status}
65
+ <StatusTracker
66
+ autoscroll={gradio.autoscroll}
67
+ i18n={gradio.i18n}
68
+ {...loading_status}
69
+ />
70
+ {/if}
71
+
72
+ <label class:container>
73
+ <BlockTitle {show_label} info={undefined}>{label}</BlockTitle>
74
+
75
+ <input
76
+ data-testid="textbox"
77
+ type="text"
78
+ class="scroll-hide"
79
+ bind:value
80
+ bind:this={el}
81
+ {placeholder}
82
+ disabled={mode === "static"}
83
+ dir={rtl ? "rtl" : "ltr"}
84
+ on:keypress={handle_keypress}
85
+ />
86
+ </label>
87
+ </Block>
88
+
89
+ <style>
90
+ label {
91
+ display: block;
92
+ width: 100%;
93
+ }
94
+
95
+ input {
96
+ display: block;
97
+ position: relative;
98
+ outline: none !important;
99
+ box-shadow: var(--input-shadow);
100
+ background: var(--input-background-fill);
101
+ padding: var(--input-padding);
102
+ width: 100%;
103
+ color: var(--body-text-color);
104
+ font-weight: var(--input-text-weight);
105
+ font-size: var(--input-text-size);
106
+ line-height: var(--line-sm);
107
+ border: none;
108
+ }
109
+ .container > input {
110
+ border: var(--input-border-width) solid var(--input-border-color);
111
+ border-radius: var(--input-radius);
112
+ }
113
+ input:disabled {
114
+ -webkit-text-fill-color: var(--body-text-color);
115
+ -webkit-opacity: 1;
116
+ opacity: 1;
117
+ }
118
+
119
+ input:focus {
120
+ box-shadow: var(--input-shadow-focus);
121
+ border-color: var(--input-border-color-focus);
122
+ }
123
+
124
+ input::placeholder {
125
+ color: var(--input-placeholder-color);
126
+ }
127
+ </style>
src/test/frontend/package-lock.json ADDED
@@ -0,0 +1,918 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "gradio_test",
3
+ "version": "0.0.1-beta.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "gradio_test",
9
+ "version": "0.0.1-beta.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "@gradio/atoms": "0.2.0-beta.4",
13
+ "@gradio/icons": "0.2.0-beta.1",
14
+ "@gradio/statustracker": "0.3.0-beta.6",
15
+ "@gradio/utils": "0.2.0-beta.4"
16
+ }
17
+ },
18
+ "node_modules/@ampproject/remapping": {
19
+ "version": "2.2.1",
20
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
21
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
22
+ "peer": true,
23
+ "dependencies": {
24
+ "@jridgewell/gen-mapping": "^0.3.0",
25
+ "@jridgewell/trace-mapping": "^0.3.9"
26
+ },
27
+ "engines": {
28
+ "node": ">=6.0.0"
29
+ }
30
+ },
31
+ "node_modules/@esbuild/android-arm": {
32
+ "version": "0.19.5",
33
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz",
34
+ "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==",
35
+ "cpu": [
36
+ "arm"
37
+ ],
38
+ "optional": true,
39
+ "os": [
40
+ "android"
41
+ ],
42
+ "engines": {
43
+ "node": ">=12"
44
+ }
45
+ },
46
+ "node_modules/@esbuild/android-arm64": {
47
+ "version": "0.19.5",
48
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz",
49
+ "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==",
50
+ "cpu": [
51
+ "arm64"
52
+ ],
53
+ "optional": true,
54
+ "os": [
55
+ "android"
56
+ ],
57
+ "engines": {
58
+ "node": ">=12"
59
+ }
60
+ },
61
+ "node_modules/@esbuild/android-x64": {
62
+ "version": "0.19.5",
63
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz",
64
+ "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==",
65
+ "cpu": [
66
+ "x64"
67
+ ],
68
+ "optional": true,
69
+ "os": [
70
+ "android"
71
+ ],
72
+ "engines": {
73
+ "node": ">=12"
74
+ }
75
+ },
76
+ "node_modules/@esbuild/darwin-arm64": {
77
+ "version": "0.19.5",
78
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz",
79
+ "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==",
80
+ "cpu": [
81
+ "arm64"
82
+ ],
83
+ "optional": true,
84
+ "os": [
85
+ "darwin"
86
+ ],
87
+ "engines": {
88
+ "node": ">=12"
89
+ }
90
+ },
91
+ "node_modules/@esbuild/darwin-x64": {
92
+ "version": "0.19.5",
93
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz",
94
+ "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==",
95
+ "cpu": [
96
+ "x64"
97
+ ],
98
+ "optional": true,
99
+ "os": [
100
+ "darwin"
101
+ ],
102
+ "engines": {
103
+ "node": ">=12"
104
+ }
105
+ },
106
+ "node_modules/@esbuild/freebsd-arm64": {
107
+ "version": "0.19.5",
108
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz",
109
+ "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==",
110
+ "cpu": [
111
+ "arm64"
112
+ ],
113
+ "optional": true,
114
+ "os": [
115
+ "freebsd"
116
+ ],
117
+ "engines": {
118
+ "node": ">=12"
119
+ }
120
+ },
121
+ "node_modules/@esbuild/freebsd-x64": {
122
+ "version": "0.19.5",
123
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz",
124
+ "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==",
125
+ "cpu": [
126
+ "x64"
127
+ ],
128
+ "optional": true,
129
+ "os": [
130
+ "freebsd"
131
+ ],
132
+ "engines": {
133
+ "node": ">=12"
134
+ }
135
+ },
136
+ "node_modules/@esbuild/linux-arm": {
137
+ "version": "0.19.5",
138
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz",
139
+ "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==",
140
+ "cpu": [
141
+ "arm"
142
+ ],
143
+ "optional": true,
144
+ "os": [
145
+ "linux"
146
+ ],
147
+ "engines": {
148
+ "node": ">=12"
149
+ }
150
+ },
151
+ "node_modules/@esbuild/linux-arm64": {
152
+ "version": "0.19.5",
153
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz",
154
+ "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==",
155
+ "cpu": [
156
+ "arm64"
157
+ ],
158
+ "optional": true,
159
+ "os": [
160
+ "linux"
161
+ ],
162
+ "engines": {
163
+ "node": ">=12"
164
+ }
165
+ },
166
+ "node_modules/@esbuild/linux-ia32": {
167
+ "version": "0.19.5",
168
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz",
169
+ "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==",
170
+ "cpu": [
171
+ "ia32"
172
+ ],
173
+ "optional": true,
174
+ "os": [
175
+ "linux"
176
+ ],
177
+ "engines": {
178
+ "node": ">=12"
179
+ }
180
+ },
181
+ "node_modules/@esbuild/linux-loong64": {
182
+ "version": "0.19.5",
183
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz",
184
+ "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==",
185
+ "cpu": [
186
+ "loong64"
187
+ ],
188
+ "optional": true,
189
+ "os": [
190
+ "linux"
191
+ ],
192
+ "engines": {
193
+ "node": ">=12"
194
+ }
195
+ },
196
+ "node_modules/@esbuild/linux-mips64el": {
197
+ "version": "0.19.5",
198
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz",
199
+ "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==",
200
+ "cpu": [
201
+ "mips64el"
202
+ ],
203
+ "optional": true,
204
+ "os": [
205
+ "linux"
206
+ ],
207
+ "engines": {
208
+ "node": ">=12"
209
+ }
210
+ },
211
+ "node_modules/@esbuild/linux-ppc64": {
212
+ "version": "0.19.5",
213
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz",
214
+ "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==",
215
+ "cpu": [
216
+ "ppc64"
217
+ ],
218
+ "optional": true,
219
+ "os": [
220
+ "linux"
221
+ ],
222
+ "engines": {
223
+ "node": ">=12"
224
+ }
225
+ },
226
+ "node_modules/@esbuild/linux-riscv64": {
227
+ "version": "0.19.5",
228
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz",
229
+ "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==",
230
+ "cpu": [
231
+ "riscv64"
232
+ ],
233
+ "optional": true,
234
+ "os": [
235
+ "linux"
236
+ ],
237
+ "engines": {
238
+ "node": ">=12"
239
+ }
240
+ },
241
+ "node_modules/@esbuild/linux-s390x": {
242
+ "version": "0.19.5",
243
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz",
244
+ "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==",
245
+ "cpu": [
246
+ "s390x"
247
+ ],
248
+ "optional": true,
249
+ "os": [
250
+ "linux"
251
+ ],
252
+ "engines": {
253
+ "node": ">=12"
254
+ }
255
+ },
256
+ "node_modules/@esbuild/linux-x64": {
257
+ "version": "0.19.5",
258
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz",
259
+ "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==",
260
+ "cpu": [
261
+ "x64"
262
+ ],
263
+ "optional": true,
264
+ "os": [
265
+ "linux"
266
+ ],
267
+ "engines": {
268
+ "node": ">=12"
269
+ }
270
+ },
271
+ "node_modules/@esbuild/netbsd-x64": {
272
+ "version": "0.19.5",
273
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz",
274
+ "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==",
275
+ "cpu": [
276
+ "x64"
277
+ ],
278
+ "optional": true,
279
+ "os": [
280
+ "netbsd"
281
+ ],
282
+ "engines": {
283
+ "node": ">=12"
284
+ }
285
+ },
286
+ "node_modules/@esbuild/openbsd-x64": {
287
+ "version": "0.19.5",
288
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz",
289
+ "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==",
290
+ "cpu": [
291
+ "x64"
292
+ ],
293
+ "optional": true,
294
+ "os": [
295
+ "openbsd"
296
+ ],
297
+ "engines": {
298
+ "node": ">=12"
299
+ }
300
+ },
301
+ "node_modules/@esbuild/sunos-x64": {
302
+ "version": "0.19.5",
303
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz",
304
+ "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==",
305
+ "cpu": [
306
+ "x64"
307
+ ],
308
+ "optional": true,
309
+ "os": [
310
+ "sunos"
311
+ ],
312
+ "engines": {
313
+ "node": ">=12"
314
+ }
315
+ },
316
+ "node_modules/@esbuild/win32-arm64": {
317
+ "version": "0.19.5",
318
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz",
319
+ "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==",
320
+ "cpu": [
321
+ "arm64"
322
+ ],
323
+ "optional": true,
324
+ "os": [
325
+ "win32"
326
+ ],
327
+ "engines": {
328
+ "node": ">=12"
329
+ }
330
+ },
331
+ "node_modules/@esbuild/win32-ia32": {
332
+ "version": "0.19.5",
333
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz",
334
+ "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==",
335
+ "cpu": [
336
+ "ia32"
337
+ ],
338
+ "optional": true,
339
+ "os": [
340
+ "win32"
341
+ ],
342
+ "engines": {
343
+ "node": ">=12"
344
+ }
345
+ },
346
+ "node_modules/@esbuild/win32-x64": {
347
+ "version": "0.19.5",
348
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz",
349
+ "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==",
350
+ "cpu": [
351
+ "x64"
352
+ ],
353
+ "optional": true,
354
+ "os": [
355
+ "win32"
356
+ ],
357
+ "engines": {
358
+ "node": ">=12"
359
+ }
360
+ },
361
+ "node_modules/@formatjs/ecma402-abstract": {
362
+ "version": "1.11.4",
363
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
364
+ "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
365
+ "dependencies": {
366
+ "@formatjs/intl-localematcher": "0.2.25",
367
+ "tslib": "^2.1.0"
368
+ }
369
+ },
370
+ "node_modules/@formatjs/fast-memoize": {
371
+ "version": "1.2.1",
372
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
373
+ "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
374
+ "dependencies": {
375
+ "tslib": "^2.1.0"
376
+ }
377
+ },
378
+ "node_modules/@formatjs/icu-messageformat-parser": {
379
+ "version": "2.1.0",
380
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz",
381
+ "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==",
382
+ "dependencies": {
383
+ "@formatjs/ecma402-abstract": "1.11.4",
384
+ "@formatjs/icu-skeleton-parser": "1.3.6",
385
+ "tslib": "^2.1.0"
386
+ }
387
+ },
388
+ "node_modules/@formatjs/icu-skeleton-parser": {
389
+ "version": "1.3.6",
390
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz",
391
+ "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==",
392
+ "dependencies": {
393
+ "@formatjs/ecma402-abstract": "1.11.4",
394
+ "tslib": "^2.1.0"
395
+ }
396
+ },
397
+ "node_modules/@formatjs/intl-localematcher": {
398
+ "version": "0.2.25",
399
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
400
+ "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
401
+ "dependencies": {
402
+ "tslib": "^2.1.0"
403
+ }
404
+ },
405
+ "node_modules/@gradio/atoms": {
406
+ "version": "0.2.0-beta.4",
407
+ "resolved": "https://registry.npmjs.org/@gradio/atoms/-/atoms-0.2.0-beta.4.tgz",
408
+ "integrity": "sha512-xZfP9oPmb7iiuGl7KB4vVELSVk9f3w5Y9KRIxkAaMb+oeRpmb5uDtKQPAxntpm0W9rKAZmYG+DIWhInlu1eeKA==",
409
+ "dependencies": {
410
+ "@gradio/icons": "^0.2.0-beta.1",
411
+ "@gradio/utils": "^0.2.0-beta.4"
412
+ }
413
+ },
414
+ "node_modules/@gradio/column": {
415
+ "version": "0.1.0-beta.2",
416
+ "resolved": "https://registry.npmjs.org/@gradio/column/-/column-0.1.0-beta.2.tgz",
417
+ "integrity": "sha512-vL0GECdNL4wAaO/o0JcF3fm2xyMrx5DJWXUiPq/sUwqZwwB95srPGKBVTmVja3HproVXCBEnTzPQmRlrwWK67w=="
418
+ },
419
+ "node_modules/@gradio/icons": {
420
+ "version": "0.2.0-beta.1",
421
+ "resolved": "https://registry.npmjs.org/@gradio/icons/-/icons-0.2.0-beta.1.tgz",
422
+ "integrity": "sha512-6nwP1NIi0u4YQoSoaqC/rY0wuCvJHsnK+8aHDOE37070JpzBGuxB/VUlEgO7trNz5zI/EJy2htIRYsqz1vKmXA=="
423
+ },
424
+ "node_modules/@gradio/statustracker": {
425
+ "version": "0.3.0-beta.6",
426
+ "resolved": "https://registry.npmjs.org/@gradio/statustracker/-/statustracker-0.3.0-beta.6.tgz",
427
+ "integrity": "sha512-AIhaMCnr2uibHdqRrs4K8ZUvZK0q5e430TcvoduLOkaoOrkfnqetrHaHdOLNBz+H4kJlXJRsmt7ZZYV4wwMXRQ==",
428
+ "dependencies": {
429
+ "@gradio/atoms": "^0.2.0-beta.4",
430
+ "@gradio/column": "^0.1.0-beta.2",
431
+ "@gradio/icons": "^0.2.0-beta.1",
432
+ "@gradio/utils": "^0.2.0-beta.4"
433
+ }
434
+ },
435
+ "node_modules/@gradio/theme": {
436
+ "version": "0.2.0-beta.2",
437
+ "resolved": "https://registry.npmjs.org/@gradio/theme/-/theme-0.2.0-beta.2.tgz",
438
+ "integrity": "sha512-yKrA8eE02URtXUC9w98lBW8tqZk5oGumbBH7bFKOAhsrv1sbVZKir18P4a2/EL4XJ6Um36MwhPB3D5ipMniV5g=="
439
+ },
440
+ "node_modules/@gradio/utils": {
441
+ "version": "0.2.0-beta.4",
442
+ "resolved": "https://registry.npmjs.org/@gradio/utils/-/utils-0.2.0-beta.4.tgz",
443
+ "integrity": "sha512-jaOY3IQs1MnWRagXBICHXl5ZDKFqgF4XMfgsZNjTQxTG6THFOCsrUc14X1BNmXWkh9zVXJJTZcXifekj8O6LZQ==",
444
+ "dependencies": {
445
+ "@gradio/theme": "^0.2.0-beta.2",
446
+ "svelte-i18n": "^3.6.0"
447
+ }
448
+ },
449
+ "node_modules/@jridgewell/gen-mapping": {
450
+ "version": "0.3.3",
451
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
452
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
453
+ "peer": true,
454
+ "dependencies": {
455
+ "@jridgewell/set-array": "^1.0.1",
456
+ "@jridgewell/sourcemap-codec": "^1.4.10",
457
+ "@jridgewell/trace-mapping": "^0.3.9"
458
+ },
459
+ "engines": {
460
+ "node": ">=6.0.0"
461
+ }
462
+ },
463
+ "node_modules/@jridgewell/resolve-uri": {
464
+ "version": "3.1.1",
465
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
466
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
467
+ "peer": true,
468
+ "engines": {
469
+ "node": ">=6.0.0"
470
+ }
471
+ },
472
+ "node_modules/@jridgewell/set-array": {
473
+ "version": "1.1.2",
474
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
475
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
476
+ "peer": true,
477
+ "engines": {
478
+ "node": ">=6.0.0"
479
+ }
480
+ },
481
+ "node_modules/@jridgewell/sourcemap-codec": {
482
+ "version": "1.4.15",
483
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
484
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
485
+ "peer": true
486
+ },
487
+ "node_modules/@jridgewell/trace-mapping": {
488
+ "version": "0.3.20",
489
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
490
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
491
+ "peer": true,
492
+ "dependencies": {
493
+ "@jridgewell/resolve-uri": "^3.1.0",
494
+ "@jridgewell/sourcemap-codec": "^1.4.14"
495
+ }
496
+ },
497
+ "node_modules/@types/estree": {
498
+ "version": "1.0.3",
499
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz",
500
+ "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==",
501
+ "peer": true
502
+ },
503
+ "node_modules/acorn": {
504
+ "version": "8.10.0",
505
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
506
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
507
+ "peer": true,
508
+ "bin": {
509
+ "acorn": "bin/acorn"
510
+ },
511
+ "engines": {
512
+ "node": ">=0.4.0"
513
+ }
514
+ },
515
+ "node_modules/aria-query": {
516
+ "version": "5.3.0",
517
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
518
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
519
+ "peer": true,
520
+ "dependencies": {
521
+ "dequal": "^2.0.3"
522
+ }
523
+ },
524
+ "node_modules/axobject-query": {
525
+ "version": "3.2.1",
526
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
527
+ "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
528
+ "peer": true,
529
+ "dependencies": {
530
+ "dequal": "^2.0.3"
531
+ }
532
+ },
533
+ "node_modules/cli-color": {
534
+ "version": "2.0.3",
535
+ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz",
536
+ "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==",
537
+ "dependencies": {
538
+ "d": "^1.0.1",
539
+ "es5-ext": "^0.10.61",
540
+ "es6-iterator": "^2.0.3",
541
+ "memoizee": "^0.4.15",
542
+ "timers-ext": "^0.1.7"
543
+ },
544
+ "engines": {
545
+ "node": ">=0.10"
546
+ }
547
+ },
548
+ "node_modules/code-red": {
549
+ "version": "1.0.4",
550
+ "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
551
+ "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
552
+ "peer": true,
553
+ "dependencies": {
554
+ "@jridgewell/sourcemap-codec": "^1.4.15",
555
+ "@types/estree": "^1.0.1",
556
+ "acorn": "^8.10.0",
557
+ "estree-walker": "^3.0.3",
558
+ "periscopic": "^3.1.0"
559
+ }
560
+ },
561
+ "node_modules/css-tree": {
562
+ "version": "2.3.1",
563
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
564
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
565
+ "peer": true,
566
+ "dependencies": {
567
+ "mdn-data": "2.0.30",
568
+ "source-map-js": "^1.0.1"
569
+ },
570
+ "engines": {
571
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
572
+ }
573
+ },
574
+ "node_modules/d": {
575
+ "version": "1.0.1",
576
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
577
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
578
+ "dependencies": {
579
+ "es5-ext": "^0.10.50",
580
+ "type": "^1.0.1"
581
+ }
582
+ },
583
+ "node_modules/deepmerge": {
584
+ "version": "4.3.1",
585
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
586
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
587
+ "engines": {
588
+ "node": ">=0.10.0"
589
+ }
590
+ },
591
+ "node_modules/dequal": {
592
+ "version": "2.0.3",
593
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
594
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
595
+ "peer": true,
596
+ "engines": {
597
+ "node": ">=6"
598
+ }
599
+ },
600
+ "node_modules/es5-ext": {
601
+ "version": "0.10.62",
602
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
603
+ "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
604
+ "hasInstallScript": true,
605
+ "dependencies": {
606
+ "es6-iterator": "^2.0.3",
607
+ "es6-symbol": "^3.1.3",
608
+ "next-tick": "^1.1.0"
609
+ },
610
+ "engines": {
611
+ "node": ">=0.10"
612
+ }
613
+ },
614
+ "node_modules/es6-iterator": {
615
+ "version": "2.0.3",
616
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
617
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
618
+ "dependencies": {
619
+ "d": "1",
620
+ "es5-ext": "^0.10.35",
621
+ "es6-symbol": "^3.1.1"
622
+ }
623
+ },
624
+ "node_modules/es6-symbol": {
625
+ "version": "3.1.3",
626
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
627
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
628
+ "dependencies": {
629
+ "d": "^1.0.1",
630
+ "ext": "^1.1.2"
631
+ }
632
+ },
633
+ "node_modules/es6-weak-map": {
634
+ "version": "2.0.3",
635
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
636
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
637
+ "dependencies": {
638
+ "d": "1",
639
+ "es5-ext": "^0.10.46",
640
+ "es6-iterator": "^2.0.3",
641
+ "es6-symbol": "^3.1.1"
642
+ }
643
+ },
644
+ "node_modules/esbuild": {
645
+ "version": "0.19.5",
646
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz",
647
+ "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==",
648
+ "hasInstallScript": true,
649
+ "bin": {
650
+ "esbuild": "bin/esbuild"
651
+ },
652
+ "engines": {
653
+ "node": ">=12"
654
+ },
655
+ "optionalDependencies": {
656
+ "@esbuild/android-arm": "0.19.5",
657
+ "@esbuild/android-arm64": "0.19.5",
658
+ "@esbuild/android-x64": "0.19.5",
659
+ "@esbuild/darwin-arm64": "0.19.5",
660
+ "@esbuild/darwin-x64": "0.19.5",
661
+ "@esbuild/freebsd-arm64": "0.19.5",
662
+ "@esbuild/freebsd-x64": "0.19.5",
663
+ "@esbuild/linux-arm": "0.19.5",
664
+ "@esbuild/linux-arm64": "0.19.5",
665
+ "@esbuild/linux-ia32": "0.19.5",
666
+ "@esbuild/linux-loong64": "0.19.5",
667
+ "@esbuild/linux-mips64el": "0.19.5",
668
+ "@esbuild/linux-ppc64": "0.19.5",
669
+ "@esbuild/linux-riscv64": "0.19.5",
670
+ "@esbuild/linux-s390x": "0.19.5",
671
+ "@esbuild/linux-x64": "0.19.5",
672
+ "@esbuild/netbsd-x64": "0.19.5",
673
+ "@esbuild/openbsd-x64": "0.19.5",
674
+ "@esbuild/sunos-x64": "0.19.5",
675
+ "@esbuild/win32-arm64": "0.19.5",
676
+ "@esbuild/win32-ia32": "0.19.5",
677
+ "@esbuild/win32-x64": "0.19.5"
678
+ }
679
+ },
680
+ "node_modules/estree-walker": {
681
+ "version": "3.0.3",
682
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
683
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
684
+ "peer": true,
685
+ "dependencies": {
686
+ "@types/estree": "^1.0.0"
687
+ }
688
+ },
689
+ "node_modules/event-emitter": {
690
+ "version": "0.3.5",
691
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
692
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
693
+ "dependencies": {
694
+ "d": "1",
695
+ "es5-ext": "~0.10.14"
696
+ }
697
+ },
698
+ "node_modules/ext": {
699
+ "version": "1.7.0",
700
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
701
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
702
+ "dependencies": {
703
+ "type": "^2.7.2"
704
+ }
705
+ },
706
+ "node_modules/ext/node_modules/type": {
707
+ "version": "2.7.2",
708
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
709
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
710
+ },
711
+ "node_modules/globalyzer": {
712
+ "version": "0.1.0",
713
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
714
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
715
+ },
716
+ "node_modules/globrex": {
717
+ "version": "0.1.2",
718
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
719
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
720
+ },
721
+ "node_modules/intl-messageformat": {
722
+ "version": "9.13.0",
723
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz",
724
+ "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==",
725
+ "dependencies": {
726
+ "@formatjs/ecma402-abstract": "1.11.4",
727
+ "@formatjs/fast-memoize": "1.2.1",
728
+ "@formatjs/icu-messageformat-parser": "2.1.0",
729
+ "tslib": "^2.1.0"
730
+ }
731
+ },
732
+ "node_modules/is-promise": {
733
+ "version": "2.2.2",
734
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
735
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
736
+ },
737
+ "node_modules/is-reference": {
738
+ "version": "3.0.2",
739
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
740
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
741
+ "peer": true,
742
+ "dependencies": {
743
+ "@types/estree": "*"
744
+ }
745
+ },
746
+ "node_modules/locate-character": {
747
+ "version": "3.0.0",
748
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
749
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
750
+ "peer": true
751
+ },
752
+ "node_modules/lru-queue": {
753
+ "version": "0.1.0",
754
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
755
+ "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
756
+ "dependencies": {
757
+ "es5-ext": "~0.10.2"
758
+ }
759
+ },
760
+ "node_modules/magic-string": {
761
+ "version": "0.30.5",
762
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
763
+ "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
764
+ "peer": true,
765
+ "dependencies": {
766
+ "@jridgewell/sourcemap-codec": "^1.4.15"
767
+ },
768
+ "engines": {
769
+ "node": ">=12"
770
+ }
771
+ },
772
+ "node_modules/mdn-data": {
773
+ "version": "2.0.30",
774
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
775
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
776
+ "peer": true
777
+ },
778
+ "node_modules/memoizee": {
779
+ "version": "0.4.15",
780
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
781
+ "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
782
+ "dependencies": {
783
+ "d": "^1.0.1",
784
+ "es5-ext": "^0.10.53",
785
+ "es6-weak-map": "^2.0.3",
786
+ "event-emitter": "^0.3.5",
787
+ "is-promise": "^2.2.2",
788
+ "lru-queue": "^0.1.0",
789
+ "next-tick": "^1.1.0",
790
+ "timers-ext": "^0.1.7"
791
+ }
792
+ },
793
+ "node_modules/mri": {
794
+ "version": "1.2.0",
795
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
796
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
797
+ "engines": {
798
+ "node": ">=4"
799
+ }
800
+ },
801
+ "node_modules/next-tick": {
802
+ "version": "1.1.0",
803
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
804
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
805
+ },
806
+ "node_modules/periscopic": {
807
+ "version": "3.1.0",
808
+ "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
809
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
810
+ "peer": true,
811
+ "dependencies": {
812
+ "@types/estree": "^1.0.0",
813
+ "estree-walker": "^3.0.0",
814
+ "is-reference": "^3.0.0"
815
+ }
816
+ },
817
+ "node_modules/sade": {
818
+ "version": "1.8.1",
819
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
820
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
821
+ "dependencies": {
822
+ "mri": "^1.1.0"
823
+ },
824
+ "engines": {
825
+ "node": ">=6"
826
+ }
827
+ },
828
+ "node_modules/source-map-js": {
829
+ "version": "1.0.2",
830
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
831
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
832
+ "peer": true,
833
+ "engines": {
834
+ "node": ">=0.10.0"
835
+ }
836
+ },
837
+ "node_modules/svelte": {
838
+ "version": "4.2.2",
839
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.2.tgz",
840
+ "integrity": "sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==",
841
+ "peer": true,
842
+ "dependencies": {
843
+ "@ampproject/remapping": "^2.2.1",
844
+ "@jridgewell/sourcemap-codec": "^1.4.15",
845
+ "@jridgewell/trace-mapping": "^0.3.18",
846
+ "acorn": "^8.9.0",
847
+ "aria-query": "^5.3.0",
848
+ "axobject-query": "^3.2.1",
849
+ "code-red": "^1.0.3",
850
+ "css-tree": "^2.3.1",
851
+ "estree-walker": "^3.0.3",
852
+ "is-reference": "^3.0.1",
853
+ "locate-character": "^3.0.0",
854
+ "magic-string": "^0.30.4",
855
+ "periscopic": "^3.1.0"
856
+ },
857
+ "engines": {
858
+ "node": ">=16"
859
+ }
860
+ },
861
+ "node_modules/svelte-i18n": {
862
+ "version": "3.7.4",
863
+ "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-3.7.4.tgz",
864
+ "integrity": "sha512-yGRCNo+eBT4cPuU7IVsYTYjxB7I2V8qgUZPlHnNctJj5IgbJgV78flsRzpjZ/8iUYZrS49oCt7uxlU3AZv/N5Q==",
865
+ "dependencies": {
866
+ "cli-color": "^2.0.3",
867
+ "deepmerge": "^4.2.2",
868
+ "esbuild": "^0.19.2",
869
+ "estree-walker": "^2",
870
+ "intl-messageformat": "^9.13.0",
871
+ "sade": "^1.8.1",
872
+ "tiny-glob": "^0.2.9"
873
+ },
874
+ "bin": {
875
+ "svelte-i18n": "dist/cli.js"
876
+ },
877
+ "engines": {
878
+ "node": ">= 16"
879
+ },
880
+ "peerDependencies": {
881
+ "svelte": "^3 || ^4"
882
+ }
883
+ },
884
+ "node_modules/svelte-i18n/node_modules/estree-walker": {
885
+ "version": "2.0.2",
886
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
887
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
888
+ },
889
+ "node_modules/timers-ext": {
890
+ "version": "0.1.7",
891
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
892
+ "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
893
+ "dependencies": {
894
+ "es5-ext": "~0.10.46",
895
+ "next-tick": "1"
896
+ }
897
+ },
898
+ "node_modules/tiny-glob": {
899
+ "version": "0.2.9",
900
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
901
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
902
+ "dependencies": {
903
+ "globalyzer": "0.1.0",
904
+ "globrex": "^0.1.2"
905
+ }
906
+ },
907
+ "node_modules/tslib": {
908
+ "version": "2.6.2",
909
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
910
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
911
+ },
912
+ "node_modules/type": {
913
+ "version": "1.2.0",
914
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
915
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
916
+ }
917
+ }
918
+ }
src/test/frontend/package.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "gradio_test",
3
+ "version": "0.0.1-beta.0",
4
+ "description": "Gradio UI packages",
5
+ "type": "module",
6
+ "author": "",
7
+ "license": "ISC",
8
+ "private": false,
9
+ "main_changeset": true,
10
+ "exports": {
11
+ ".": "./Index.svelte",
12
+ "./example": "./Example.svelte",
13
+ "./package.json": "./package.json"
14
+ },
15
+ "dependencies": {
16
+ "@gradio/atoms": "0.2.0-beta.4",
17
+ "@gradio/icons": "0.2.0-beta.1",
18
+ "@gradio/statustracker": "0.3.0-beta.6",
19
+ "@gradio/utils": "0.2.0-beta.4"
20
+ }
21
+ }
src/test/pyproject.toml ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [build-system]
2
+ requires = [
3
+ "hatchling",
4
+ "hatch-requirements-txt",
5
+ "hatch-fancy-pypi-readme>=22.5.0",
6
+ ]
7
+ build-backend = "hatchling.build"
8
+
9
+ [project]
10
+ name = "gradio_test"
11
+ version = "0.0.1"
12
+ description = "Python library for easily interacting with trained machine learning models"
13
+ license = "Apache-2.0"
14
+ requires-python = ">=3.8"
15
+ authors = [{ name = "YOUR NAME", email = "YOUREMAIL@domain.com" }]
16
+ keywords = [
17
+ "machine learning",
18
+ "reproducibility",
19
+ "visualization",
20
+ "gradio",
21
+ "gradio custom component",
22
+ ]
23
+ # Add dependencies here
24
+ dependencies = ["gradio"]
25
+ classifiers = [
26
+ 'Development Status :: 3 - Alpha',
27
+ 'License :: OSI Approved :: Apache Software License',
28
+ 'Operating System :: OS Independent',
29
+ 'Programming Language :: Python :: 3',
30
+ 'Programming Language :: Python :: 3 :: Only',
31
+ 'Programming Language :: Python :: 3.8',
32
+ 'Programming Language :: Python :: 3.9',
33
+ 'Programming Language :: Python :: 3.10',
34
+ 'Programming Language :: Python :: 3.11',
35
+ 'Topic :: Scientific/Engineering',
36
+ 'Topic :: Scientific/Engineering :: Artificial Intelligence',
37
+ 'Topic :: Scientific/Engineering :: Visualization',
38
+ ]
39
+
40
+ [project.optional-dependencies]
41
+ dev = ["build", "twine"]
42
+
43
+ [tool.hatch.build]
44
+ artifacts = ["/backend/gradio_test/templates", "*.pyi", "backend/gradio_test/templates"]
45
+
46
+ [tool.hatch.build.targets.wheel]
47
+ packages = ["/backend/gradio_test"]