nishantguvvada commited on
Commit
a8ecc9d
1 Parent(s): e6724f7

Upload 20 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ frontend/Streamlit-Image-Carousel-master/sample_recording.gif filter=lfs diff=lfs merge=lfs -text
frontend/README.md ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *Looking for a shareable component template? Go here --> [sveltejs/component-template](https://github.com/sveltejs/component-template)*
2
+
3
+ ---
4
+
5
+ # svelte app
6
+
7
+ This is a project template for [Svelte](https://svelte.dev) apps. It lives at https://github.com/sveltejs/template.
8
+
9
+ To create a new project based on this template using [degit](https://github.com/Rich-Harris/degit):
10
+
11
+ ```bash
12
+ npx degit sveltejs/template svelte-app
13
+ cd svelte-app
14
+ ```
15
+
16
+ *Note that you will need to have [Node.js](https://nodejs.org) installed.*
17
+
18
+
19
+ ## Get started
20
+
21
+ Install the dependencies...
22
+
23
+ ```bash
24
+ cd svelte-app
25
+ npm install
26
+ ```
27
+
28
+ ...then start [Rollup](https://rollupjs.org):
29
+
30
+ ```bash
31
+ npm run dev
32
+ ```
33
+
34
+ Navigate to [localhost:5000](http://localhost:5000). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes.
35
+
36
+ By default, the server will only respond to requests from localhost. To allow connections from other computers, edit the `sirv` commands in package.json to include the option `--host 0.0.0.0`.
37
+
38
+
39
+ ## Building and running in production mode
40
+
41
+ To create an optimised version of the app:
42
+
43
+ ```bash
44
+ npm run build
45
+ ```
46
+
47
+ You can run the newly built app with `npm run start`. This uses [sirv](https://github.com/lukeed/sirv), which is included in your package.json's `dependencies` so that the app will work when you deploy to platforms like [Heroku](https://heroku.com).
48
+
49
+
50
+ ## Single-page app mode
51
+
52
+ By default, sirv will only respond to requests that match files in `public`. This is to maximise compatibility with static fileservers, allowing you to deploy your app anywhere.
53
+
54
+ If you're building a single-page app (SPA) with multiple routes, sirv needs to be able to respond to requests for *any* path. You can make it so by editing the `"start"` command in package.json:
55
+
56
+ ```js
57
+ "start": "sirv public --single"
58
+ ```
59
+
60
+ ## Using TypeScript
61
+
62
+ This template comes with a script to set up a TypeScript development environment, you can run it immediately after cloning the template with:
63
+
64
+ ```bash
65
+ node scripts/setupTypeScript.js
66
+ ```
67
+
68
+ Or remove the script via:
69
+
70
+ ```bash
71
+ rm scripts/setupTypeScript.js
72
+ ```
73
+
74
+ ## Deploying to the web
75
+
76
+ ### With [Vercel](https://vercel.com)
77
+
78
+ Install `vercel` if you haven't already:
79
+
80
+ ```bash
81
+ npm install -g vercel
82
+ ```
83
+
84
+ Then, from within your project folder:
85
+
86
+ ```bash
87
+ cd public
88
+ vercel deploy --name my-project
89
+ ```
90
+
91
+ ### With [surge](https://surge.sh/)
92
+
93
+ Install `surge` if you haven't already:
94
+
95
+ ```bash
96
+ npm install -g surge
97
+ ```
98
+
99
+ Then, from within your project folder:
100
+
101
+ ```bash
102
+ npm run build
103
+ surge public my-project.surge.sh
104
+ ```
frontend/Streamlit-Image-Carousel-master/README.md ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Streamlit Image-Carousel-Component
2
+
3
+ Streamlit component for image-carousel:
4
+
5
+
6
+
7
+ #### Usage:
8
+
9
+ - First install the streamlit library : `pip install streamlit`
10
+
11
+ - Then, install the node packages inside `frontend` directory : `npm i`
12
+
13
+ - Then, build the node modules : `npm run build`
14
+
15
+ - Finally, run the streamlit app : `streamlit run __init__.py`
16
+
17
+
18
+
19
+ #### Example:
20
+
21
+ ```python
22
+ import streamlit as st
23
+ import streamlit.components.v1 as components
24
+
25
+ def main():
26
+
27
+ imageCarouselComponent = components.declare_component("image-carousel-component", path="frontend/public")
28
+
29
+ imageUrls = [
30
+ "https://images.unsplash.com/photo-1522093007474-d86e9bf7ba6f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=764&q=80",
31
+ "https://images.unsplash.com/photo-1610016302534-6f67f1c968d8?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1075&q=80",
32
+ "https://images.unsplash.com/photo-1516550893923-42d28e5677af?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=872&q=80",
33
+ "https://images.unsplash.com/photo-1541343672885-9be56236302a?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80",
34
+ "https://images.unsplash.com/photo-1512470876302-972faa2aa9a4?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
35
+ "https://images.unsplash.com/photo-1528728329032-2972f65dfb3f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
36
+ "https://images.unsplash.com/photo-1557744813-846c28d0d0db?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1118&q=80",
37
+ "https://images.unsplash.com/photo-1513635269975-59663e0ac1ad?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
38
+ "https://images.unsplash.com/photo-1595867818082-083862f3d630?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
39
+ "https://images.unsplash.com/photo-1622214366189-72b19cc61597?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80",
40
+ "https://images.unsplash.com/photo-1558180077-09f158c76707?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=764&q=80",
41
+ "https://images.unsplash.com/photo-1520106212299-d99c443e4568?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80",
42
+ "https://images.unsplash.com/photo-1534430480872-3498386e7856?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
43
+ "https://images.unsplash.com/photo-1571317084911-8899d61cc464?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
44
+ "https://images.unsplash.com/photo-1624704765325-fd4868c9702e?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=764&q=80",
45
+ ]
46
+ selectedImageUrl = imageCarouselComponent(imageUrls=imageUrls, height=200)
47
+
48
+ if selectedImageUrl is not None:
49
+ st.image(selectedImageUrl)
50
+
51
+ if __name__ == "__main__":
52
+ main()
53
+ ```
54
+
55
+ ![result](sample_recording.gif)
56
+
frontend/Streamlit-Image-Carousel-master/__init__.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import streamlit.components.v1 as components
3
+
4
+ def main():
5
+
6
+ imageCarouselComponent = components.declare_component("image-carousel-component", path="frontend/public")
7
+
8
+ imageUrls = [
9
+ "https://images.unsplash.com/photo-1522093007474-d86e9bf7ba6f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=764&q=80",
10
+ "https://images.unsplash.com/photo-1610016302534-6f67f1c968d8?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1075&q=80",
11
+ "https://images.unsplash.com/photo-1516550893923-42d28e5677af?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=872&q=80",
12
+ "https://images.unsplash.com/photo-1541343672885-9be56236302a?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80",
13
+ "https://images.unsplash.com/photo-1512470876302-972faa2aa9a4?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
14
+ "https://images.unsplash.com/photo-1528728329032-2972f65dfb3f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
15
+ "https://images.unsplash.com/photo-1557744813-846c28d0d0db?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1118&q=80",
16
+ "https://images.unsplash.com/photo-1513635269975-59663e0ac1ad?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
17
+ "https://images.unsplash.com/photo-1595867818082-083862f3d630?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
18
+ "https://images.unsplash.com/photo-1622214366189-72b19cc61597?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80",
19
+ "https://images.unsplash.com/photo-1558180077-09f158c76707?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=764&q=80",
20
+ "https://images.unsplash.com/photo-1520106212299-d99c443e4568?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80",
21
+ "https://images.unsplash.com/photo-1534430480872-3498386e7856?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
22
+ "https://images.unsplash.com/photo-1571317084911-8899d61cc464?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=870&q=80",
23
+ "https://images.unsplash.com/photo-1624704765325-fd4868c9702e?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=764&q=80",
24
+ ]
25
+ selectedImageUrl = imageCarouselComponent(imageUrls=imageUrls, height=200)
26
+
27
+ if selectedImageUrl is not None:
28
+ st.image(selectedImageUrl)
29
+
30
+ if __name__ == "__main__":
31
+ main()
frontend/Streamlit-Image-Carousel-master/sample_recording.gif ADDED

Git LFS Details

  • SHA256: 8225f0af7d138c6aa89a1452cbec3e3eea3f2b931e849e74f2bf573cf6e8a79b
  • Pointer size: 132 Bytes
  • Size of remote file: 9.31 MB
frontend/package-lock.json ADDED
@@ -0,0 +1,1174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "streamlit_component_svelte_template",
3
+ "version": "2.0.0",
4
+ "lockfileVersion": 1,
5
+ "requires": true,
6
+ "dependencies": {
7
+ "@babel/code-frame": {
8
+ "version": "7.16.0",
9
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
10
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
11
+ "dev": true,
12
+ "requires": {
13
+ "@babel/highlight": "^7.16.0"
14
+ }
15
+ },
16
+ "@babel/helper-validator-identifier": {
17
+ "version": "7.15.7",
18
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
19
+ "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
20
+ "dev": true
21
+ },
22
+ "@babel/highlight": {
23
+ "version": "7.16.0",
24
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz",
25
+ "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==",
26
+ "dev": true,
27
+ "requires": {
28
+ "@babel/helper-validator-identifier": "^7.15.7",
29
+ "chalk": "^2.0.0",
30
+ "js-tokens": "^4.0.0"
31
+ }
32
+ },
33
+ "@polka/url": {
34
+ "version": "1.0.0-next.21",
35
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
36
+ "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g=="
37
+ },
38
+ "@rollup/plugin-commonjs": {
39
+ "version": "12.0.0",
40
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-12.0.0.tgz",
41
+ "integrity": "sha512-8+mDQt1QUmN+4Y9D3yCG8AJNewuTSLYPJVzKKUZ+lGeQrI+bV12Tc5HCyt2WdlnG6ihIL/DPbKRJlB40DX40mw==",
42
+ "dev": true,
43
+ "requires": {
44
+ "@rollup/pluginutils": "^3.0.8",
45
+ "commondir": "^1.0.1",
46
+ "estree-walker": "^1.0.1",
47
+ "glob": "^7.1.2",
48
+ "is-reference": "^1.1.2",
49
+ "magic-string": "^0.25.2",
50
+ "resolve": "^1.11.0"
51
+ }
52
+ },
53
+ "@rollup/plugin-node-resolve": {
54
+ "version": "8.4.0",
55
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz",
56
+ "integrity": "sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ==",
57
+ "dev": true,
58
+ "requires": {
59
+ "@rollup/pluginutils": "^3.1.0",
60
+ "@types/resolve": "1.17.1",
61
+ "builtin-modules": "^3.1.0",
62
+ "deep-freeze": "^0.0.1",
63
+ "deepmerge": "^4.2.2",
64
+ "is-module": "^1.0.0",
65
+ "resolve": "^1.17.0"
66
+ }
67
+ },
68
+ "@rollup/plugin-typescript": {
69
+ "version": "4.1.2",
70
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-4.1.2.tgz",
71
+ "integrity": "sha512-+7UlGat/99e2JbmGNnIauxwEhYLwrL7adO/tSJxUN57xrrS3Ps+ZzYpLCDGPZJ57j+ZJTZLLN89KXW9JMEB+jg==",
72
+ "dev": true,
73
+ "requires": {
74
+ "@rollup/pluginutils": "^3.0.1",
75
+ "resolve": "^1.14.1"
76
+ }
77
+ },
78
+ "@rollup/pluginutils": {
79
+ "version": "3.1.0",
80
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
81
+ "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
82
+ "dev": true,
83
+ "requires": {
84
+ "@types/estree": "0.0.39",
85
+ "estree-walker": "^1.0.1",
86
+ "picomatch": "^2.2.2"
87
+ }
88
+ },
89
+ "@tsconfig/svelte": {
90
+ "version": "1.0.13",
91
+ "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-1.0.13.tgz",
92
+ "integrity": "sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA==",
93
+ "dev": true
94
+ },
95
+ "@types/estree": {
96
+ "version": "0.0.39",
97
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
98
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
99
+ "dev": true
100
+ },
101
+ "@types/flatbuffers": {
102
+ "version": "1.10.0",
103
+ "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz",
104
+ "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA=="
105
+ },
106
+ "@types/node": {
107
+ "version": "16.11.6",
108
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz",
109
+ "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
110
+ "dev": true
111
+ },
112
+ "@types/pug": {
113
+ "version": "2.0.5",
114
+ "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.5.tgz",
115
+ "integrity": "sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==",
116
+ "dev": true
117
+ },
118
+ "@types/resolve": {
119
+ "version": "1.17.1",
120
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
121
+ "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
122
+ "dev": true,
123
+ "requires": {
124
+ "@types/node": "*"
125
+ }
126
+ },
127
+ "@types/sass": {
128
+ "version": "1.43.0",
129
+ "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.0.tgz",
130
+ "integrity": "sha512-DPSXNJ1rYLo88GyF9tuB4bsYGfpKI1a4+wOQmc+LI1SUoocm9QLRSpz0GxxuyjmJsYFIQo/dDlRSSpIXngff+w==",
131
+ "dev": true,
132
+ "requires": {
133
+ "@types/node": "*"
134
+ }
135
+ },
136
+ "@types/text-encoding-utf-8": {
137
+ "version": "1.0.2",
138
+ "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz",
139
+ "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ=="
140
+ },
141
+ "ansi-styles": {
142
+ "version": "3.2.1",
143
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
144
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
145
+ "requires": {
146
+ "color-convert": "^1.9.0"
147
+ }
148
+ },
149
+ "anymatch": {
150
+ "version": "3.1.2",
151
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
152
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
153
+ "dev": true,
154
+ "requires": {
155
+ "normalize-path": "^3.0.0",
156
+ "picomatch": "^2.0.4"
157
+ }
158
+ },
159
+ "apache-arrow": {
160
+ "version": "0.17.0",
161
+ "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-0.17.0.tgz",
162
+ "integrity": "sha512-cbgSx/tzGgnC1qeUySXnAsSsoxhDykNINqr1D3U5pRwf0/Q0ztVccV3/VRW6gUR+lcOFawk6FtyYwmU+KjglbQ==",
163
+ "requires": {
164
+ "@types/flatbuffers": "^1.9.1",
165
+ "@types/node": "^12.0.4",
166
+ "@types/text-encoding-utf-8": "^1.0.1",
167
+ "command-line-args": "5.0.2",
168
+ "command-line-usage": "5.0.5",
169
+ "flatbuffers": "1.11.0",
170
+ "json-bignum": "^0.0.3",
171
+ "pad-left": "^2.1.0",
172
+ "text-encoding-utf-8": "^1.0.2",
173
+ "tslib": "^1.9.3"
174
+ },
175
+ "dependencies": {
176
+ "@types/node": {
177
+ "version": "12.20.36",
178
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz",
179
+ "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA=="
180
+ },
181
+ "tslib": {
182
+ "version": "1.14.1",
183
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
184
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
185
+ }
186
+ }
187
+ },
188
+ "argv-tools": {
189
+ "version": "0.1.2",
190
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.2.tgz",
191
+ "integrity": "sha512-wxqoymY0BEu9NblZVQiOTOAiJUjPhaa/kbNMjC2h6bnrmUSgnxKgWJo3lzXvi3bHJRwXyqK/dHzMlZVRT89Cxg==",
192
+ "requires": {
193
+ "array-back": "^2.0.0",
194
+ "find-replace": "^2.0.1"
195
+ }
196
+ },
197
+ "array-back": {
198
+ "version": "2.0.0",
199
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
200
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
201
+ "requires": {
202
+ "typical": "^2.6.1"
203
+ }
204
+ },
205
+ "balanced-match": {
206
+ "version": "1.0.2",
207
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
208
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
209
+ "dev": true
210
+ },
211
+ "binary-extensions": {
212
+ "version": "2.2.0",
213
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
214
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
215
+ "dev": true
216
+ },
217
+ "brace-expansion": {
218
+ "version": "1.1.11",
219
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
220
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
221
+ "dev": true,
222
+ "requires": {
223
+ "balanced-match": "^1.0.0",
224
+ "concat-map": "0.0.1"
225
+ }
226
+ },
227
+ "braces": {
228
+ "version": "3.0.2",
229
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
230
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
231
+ "dev": true,
232
+ "requires": {
233
+ "fill-range": "^7.0.1"
234
+ }
235
+ },
236
+ "buffer-crc32": {
237
+ "version": "0.2.13",
238
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
239
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
240
+ "dev": true
241
+ },
242
+ "buffer-from": {
243
+ "version": "1.1.2",
244
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
245
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
246
+ "dev": true
247
+ },
248
+ "builtin-modules": {
249
+ "version": "3.2.0",
250
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
251
+ "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
252
+ "dev": true
253
+ },
254
+ "callsites": {
255
+ "version": "3.1.0",
256
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
257
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
258
+ "dev": true
259
+ },
260
+ "chalk": {
261
+ "version": "2.4.2",
262
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
263
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
264
+ "requires": {
265
+ "ansi-styles": "^3.2.1",
266
+ "escape-string-regexp": "^1.0.5",
267
+ "supports-color": "^5.3.0"
268
+ }
269
+ },
270
+ "chokidar": {
271
+ "version": "3.5.2",
272
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
273
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
274
+ "dev": true,
275
+ "requires": {
276
+ "anymatch": "~3.1.2",
277
+ "braces": "~3.0.2",
278
+ "fsevents": "~2.3.2",
279
+ "glob-parent": "~5.1.2",
280
+ "is-binary-path": "~2.1.0",
281
+ "is-glob": "~4.0.1",
282
+ "normalize-path": "~3.0.0",
283
+ "readdirp": "~3.6.0"
284
+ }
285
+ },
286
+ "color-convert": {
287
+ "version": "1.9.3",
288
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
289
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
290
+ "requires": {
291
+ "color-name": "1.1.3"
292
+ }
293
+ },
294
+ "color-name": {
295
+ "version": "1.1.3",
296
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
297
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
298
+ },
299
+ "command-line-args": {
300
+ "version": "5.0.2",
301
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
302
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
303
+ "requires": {
304
+ "argv-tools": "^0.1.1",
305
+ "array-back": "^2.0.0",
306
+ "find-replace": "^2.0.1",
307
+ "lodash.camelcase": "^4.3.0",
308
+ "typical": "^2.6.1"
309
+ }
310
+ },
311
+ "command-line-usage": {
312
+ "version": "5.0.5",
313
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz",
314
+ "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==",
315
+ "requires": {
316
+ "array-back": "^2.0.0",
317
+ "chalk": "^2.4.1",
318
+ "table-layout": "^0.4.3",
319
+ "typical": "^2.6.1"
320
+ }
321
+ },
322
+ "commander": {
323
+ "version": "2.20.3",
324
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
325
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
326
+ "dev": true
327
+ },
328
+ "commondir": {
329
+ "version": "1.0.1",
330
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
331
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
332
+ "dev": true
333
+ },
334
+ "concat-map": {
335
+ "version": "0.0.1",
336
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
337
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
338
+ "dev": true
339
+ },
340
+ "console-clear": {
341
+ "version": "1.1.1",
342
+ "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz",
343
+ "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ=="
344
+ },
345
+ "deep-extend": {
346
+ "version": "0.6.0",
347
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
348
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
349
+ },
350
+ "deep-freeze": {
351
+ "version": "0.0.1",
352
+ "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz",
353
+ "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=",
354
+ "dev": true
355
+ },
356
+ "deepmerge": {
357
+ "version": "4.2.2",
358
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
359
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
360
+ "dev": true
361
+ },
362
+ "detect-indent": {
363
+ "version": "6.1.0",
364
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
365
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
366
+ "dev": true
367
+ },
368
+ "es6-promise": {
369
+ "version": "3.3.1",
370
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
371
+ "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
372
+ "dev": true
373
+ },
374
+ "escape-string-regexp": {
375
+ "version": "1.0.5",
376
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
377
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
378
+ },
379
+ "estree-walker": {
380
+ "version": "1.0.1",
381
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
382
+ "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
383
+ "dev": true
384
+ },
385
+ "event-target-shim": {
386
+ "version": "5.0.1",
387
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
388
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
389
+ },
390
+ "fill-range": {
391
+ "version": "7.0.1",
392
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
393
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
394
+ "dev": true,
395
+ "requires": {
396
+ "to-regex-range": "^5.0.1"
397
+ }
398
+ },
399
+ "find-replace": {
400
+ "version": "2.0.1",
401
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
402
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
403
+ "requires": {
404
+ "array-back": "^2.0.0",
405
+ "test-value": "^3.0.0"
406
+ }
407
+ },
408
+ "flatbuffers": {
409
+ "version": "1.11.0",
410
+ "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.11.0.tgz",
411
+ "integrity": "sha512-0PqFKtXI4MjxomI7jO4g5XfLPm/15g2R+5WGCHBGYGh0ihQiypnHlJ6bMmkkrAe0GzZ4d7PDAfCONKIPUxNF+A=="
412
+ },
413
+ "fs.realpath": {
414
+ "version": "1.0.0",
415
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
416
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
417
+ "dev": true
418
+ },
419
+ "fsevents": {
420
+ "version": "2.3.2",
421
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
422
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
423
+ "dev": true,
424
+ "optional": true
425
+ },
426
+ "function-bind": {
427
+ "version": "1.1.1",
428
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
429
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
430
+ "dev": true
431
+ },
432
+ "get-port": {
433
+ "version": "3.2.0",
434
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
435
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw="
436
+ },
437
+ "glob": {
438
+ "version": "7.2.0",
439
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
440
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
441
+ "dev": true,
442
+ "requires": {
443
+ "fs.realpath": "^1.0.0",
444
+ "inflight": "^1.0.4",
445
+ "inherits": "2",
446
+ "minimatch": "^3.0.4",
447
+ "once": "^1.3.0",
448
+ "path-is-absolute": "^1.0.0"
449
+ }
450
+ },
451
+ "glob-parent": {
452
+ "version": "5.1.2",
453
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
454
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
455
+ "dev": true,
456
+ "requires": {
457
+ "is-glob": "^4.0.1"
458
+ }
459
+ },
460
+ "graceful-fs": {
461
+ "version": "4.2.8",
462
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
463
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
464
+ "dev": true
465
+ },
466
+ "has": {
467
+ "version": "1.0.3",
468
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
469
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
470
+ "dev": true,
471
+ "requires": {
472
+ "function-bind": "^1.1.1"
473
+ }
474
+ },
475
+ "has-flag": {
476
+ "version": "3.0.0",
477
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
478
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
479
+ },
480
+ "import-fresh": {
481
+ "version": "3.3.0",
482
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
483
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
484
+ "dev": true,
485
+ "requires": {
486
+ "parent-module": "^1.0.0",
487
+ "resolve-from": "^4.0.0"
488
+ }
489
+ },
490
+ "inflight": {
491
+ "version": "1.0.6",
492
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
493
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
494
+ "dev": true,
495
+ "requires": {
496
+ "once": "^1.3.0",
497
+ "wrappy": "1"
498
+ }
499
+ },
500
+ "inherits": {
501
+ "version": "2.0.4",
502
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
503
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
504
+ "dev": true
505
+ },
506
+ "is-binary-path": {
507
+ "version": "2.1.0",
508
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
509
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
510
+ "dev": true,
511
+ "requires": {
512
+ "binary-extensions": "^2.0.0"
513
+ }
514
+ },
515
+ "is-core-module": {
516
+ "version": "2.8.0",
517
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
518
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
519
+ "dev": true,
520
+ "requires": {
521
+ "has": "^1.0.3"
522
+ }
523
+ },
524
+ "is-extglob": {
525
+ "version": "2.1.1",
526
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
527
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
528
+ "dev": true
529
+ },
530
+ "is-glob": {
531
+ "version": "4.0.3",
532
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
533
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
534
+ "dev": true,
535
+ "requires": {
536
+ "is-extglob": "^2.1.1"
537
+ }
538
+ },
539
+ "is-module": {
540
+ "version": "1.0.0",
541
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
542
+ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
543
+ "dev": true
544
+ },
545
+ "is-number": {
546
+ "version": "7.0.0",
547
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
548
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
549
+ "dev": true
550
+ },
551
+ "is-reference": {
552
+ "version": "1.2.1",
553
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
554
+ "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
555
+ "dev": true,
556
+ "requires": {
557
+ "@types/estree": "*"
558
+ }
559
+ },
560
+ "jest-worker": {
561
+ "version": "24.9.0",
562
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
563
+ "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
564
+ "dev": true,
565
+ "requires": {
566
+ "merge-stream": "^2.0.0",
567
+ "supports-color": "^6.1.0"
568
+ },
569
+ "dependencies": {
570
+ "supports-color": {
571
+ "version": "6.1.0",
572
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
573
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
574
+ "dev": true,
575
+ "requires": {
576
+ "has-flag": "^3.0.0"
577
+ }
578
+ }
579
+ }
580
+ },
581
+ "js-tokens": {
582
+ "version": "4.0.0",
583
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
584
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
585
+ "dev": true
586
+ },
587
+ "json-bignum": {
588
+ "version": "0.0.3",
589
+ "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz",
590
+ "integrity": "sha1-QRY7UENsdz2CQk28IO1w23YEuNc="
591
+ },
592
+ "kleur": {
593
+ "version": "3.0.3",
594
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
595
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
596
+ },
597
+ "livereload": {
598
+ "version": "0.9.3",
599
+ "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz",
600
+ "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==",
601
+ "dev": true,
602
+ "requires": {
603
+ "chokidar": "^3.5.0",
604
+ "livereload-js": "^3.3.1",
605
+ "opts": ">= 1.2.0",
606
+ "ws": "^7.4.3"
607
+ }
608
+ },
609
+ "livereload-js": {
610
+ "version": "3.3.2",
611
+ "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz",
612
+ "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==",
613
+ "dev": true
614
+ },
615
+ "local-access": {
616
+ "version": "1.1.0",
617
+ "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz",
618
+ "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw=="
619
+ },
620
+ "lodash.camelcase": {
621
+ "version": "4.3.0",
622
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
623
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
624
+ },
625
+ "lodash.padend": {
626
+ "version": "4.6.1",
627
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
628
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4="
629
+ },
630
+ "magic-string": {
631
+ "version": "0.25.7",
632
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
633
+ "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
634
+ "dev": true,
635
+ "requires": {
636
+ "sourcemap-codec": "^1.4.4"
637
+ }
638
+ },
639
+ "merge-stream": {
640
+ "version": "2.0.0",
641
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
642
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
643
+ "dev": true
644
+ },
645
+ "mime": {
646
+ "version": "2.5.2",
647
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
648
+ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
649
+ },
650
+ "min-indent": {
651
+ "version": "1.0.1",
652
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
653
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
654
+ "dev": true
655
+ },
656
+ "minimatch": {
657
+ "version": "3.0.4",
658
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
659
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
660
+ "dev": true,
661
+ "requires": {
662
+ "brace-expansion": "^1.1.7"
663
+ }
664
+ },
665
+ "minimist": {
666
+ "version": "1.2.5",
667
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
668
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
669
+ "dev": true
670
+ },
671
+ "mkdirp": {
672
+ "version": "0.5.5",
673
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
674
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
675
+ "dev": true,
676
+ "requires": {
677
+ "minimist": "^1.2.5"
678
+ }
679
+ },
680
+ "mri": {
681
+ "version": "1.2.0",
682
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
683
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
684
+ },
685
+ "normalize-path": {
686
+ "version": "3.0.0",
687
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
688
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
689
+ "dev": true
690
+ },
691
+ "once": {
692
+ "version": "1.4.0",
693
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
694
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
695
+ "dev": true,
696
+ "requires": {
697
+ "wrappy": "1"
698
+ }
699
+ },
700
+ "opts": {
701
+ "version": "2.0.2",
702
+ "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz",
703
+ "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==",
704
+ "dev": true
705
+ },
706
+ "pad-left": {
707
+ "version": "2.1.0",
708
+ "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz",
709
+ "integrity": "sha1-FuajstRKjhOMsIOMx8tAOk/J6ZQ=",
710
+ "requires": {
711
+ "repeat-string": "^1.5.4"
712
+ }
713
+ },
714
+ "parent-module": {
715
+ "version": "1.0.1",
716
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
717
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
718
+ "dev": true,
719
+ "requires": {
720
+ "callsites": "^3.0.0"
721
+ }
722
+ },
723
+ "path-is-absolute": {
724
+ "version": "1.0.1",
725
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
726
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
727
+ "dev": true
728
+ },
729
+ "path-parse": {
730
+ "version": "1.0.7",
731
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
732
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
733
+ "dev": true
734
+ },
735
+ "picomatch": {
736
+ "version": "2.3.0",
737
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
738
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
739
+ "dev": true
740
+ },
741
+ "randombytes": {
742
+ "version": "2.1.0",
743
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
744
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
745
+ "dev": true,
746
+ "requires": {
747
+ "safe-buffer": "^5.1.0"
748
+ }
749
+ },
750
+ "readdirp": {
751
+ "version": "3.6.0",
752
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
753
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
754
+ "dev": true,
755
+ "requires": {
756
+ "picomatch": "^2.2.1"
757
+ }
758
+ },
759
+ "reduce-flatten": {
760
+ "version": "1.0.1",
761
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
762
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc="
763
+ },
764
+ "repeat-string": {
765
+ "version": "1.6.1",
766
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
767
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
768
+ },
769
+ "require-relative": {
770
+ "version": "0.8.7",
771
+ "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
772
+ "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
773
+ "dev": true
774
+ },
775
+ "resolve": {
776
+ "version": "1.20.0",
777
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
778
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
779
+ "dev": true,
780
+ "requires": {
781
+ "is-core-module": "^2.2.0",
782
+ "path-parse": "^1.0.6"
783
+ }
784
+ },
785
+ "resolve-from": {
786
+ "version": "4.0.0",
787
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
788
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
789
+ "dev": true
790
+ },
791
+ "rimraf": {
792
+ "version": "2.7.1",
793
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
794
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
795
+ "dev": true,
796
+ "requires": {
797
+ "glob": "^7.1.3"
798
+ }
799
+ },
800
+ "rollup": {
801
+ "version": "2.59.0",
802
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.59.0.tgz",
803
+ "integrity": "sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw==",
804
+ "dev": true,
805
+ "requires": {
806
+ "fsevents": "~2.3.2"
807
+ }
808
+ },
809
+ "rollup-plugin-livereload": {
810
+ "version": "1.3.0",
811
+ "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-1.3.0.tgz",
812
+ "integrity": "sha512-abyqXaB21+nFHo+vJULBqfzNx6zXABC19UyvqgDfdoxR/8pFAd041GO+GIUe8ZYC2DbuMUmioh1Lvbk14YLZgw==",
813
+ "dev": true,
814
+ "requires": {
815
+ "livereload": "^0.9.1"
816
+ }
817
+ },
818
+ "rollup-plugin-svelte": {
819
+ "version": "6.1.1",
820
+ "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-6.1.1.tgz",
821
+ "integrity": "sha512-ijnm0pH1ScrY4uxwaNXBpNVejVzpL2769hIEbAlnqNUWZrffLspu5/k9/l/Wsj3NrEHLQ6wCKGagVJonyfN7ow==",
822
+ "dev": true,
823
+ "requires": {
824
+ "require-relative": "^0.8.7",
825
+ "rollup-pluginutils": "^2.8.2",
826
+ "sourcemap-codec": "^1.4.8"
827
+ }
828
+ },
829
+ "rollup-plugin-terser": {
830
+ "version": "5.3.1",
831
+ "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz",
832
+ "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==",
833
+ "dev": true,
834
+ "requires": {
835
+ "@babel/code-frame": "^7.5.5",
836
+ "jest-worker": "^24.9.0",
837
+ "rollup-pluginutils": "^2.8.2",
838
+ "serialize-javascript": "^4.0.0",
839
+ "terser": "^4.6.2"
840
+ }
841
+ },
842
+ "rollup-pluginutils": {
843
+ "version": "2.8.2",
844
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
845
+ "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
846
+ "dev": true,
847
+ "requires": {
848
+ "estree-walker": "^0.6.1"
849
+ },
850
+ "dependencies": {
851
+ "estree-walker": {
852
+ "version": "0.6.1",
853
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
854
+ "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
855
+ "dev": true
856
+ }
857
+ }
858
+ },
859
+ "sade": {
860
+ "version": "1.7.4",
861
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz",
862
+ "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==",
863
+ "requires": {
864
+ "mri": "^1.1.0"
865
+ }
866
+ },
867
+ "safe-buffer": {
868
+ "version": "5.2.1",
869
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
870
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
871
+ "dev": true
872
+ },
873
+ "sander": {
874
+ "version": "0.5.1",
875
+ "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
876
+ "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=",
877
+ "dev": true,
878
+ "requires": {
879
+ "es6-promise": "^3.1.2",
880
+ "graceful-fs": "^4.1.3",
881
+ "mkdirp": "^0.5.1",
882
+ "rimraf": "^2.5.2"
883
+ }
884
+ },
885
+ "semiver": {
886
+ "version": "1.1.0",
887
+ "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz",
888
+ "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg=="
889
+ },
890
+ "serialize-javascript": {
891
+ "version": "4.0.0",
892
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
893
+ "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
894
+ "dev": true,
895
+ "requires": {
896
+ "randombytes": "^2.1.0"
897
+ }
898
+ },
899
+ "sirv": {
900
+ "version": "1.0.18",
901
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.18.tgz",
902
+ "integrity": "sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA==",
903
+ "requires": {
904
+ "@polka/url": "^1.0.0-next.20",
905
+ "mime": "^2.3.1",
906
+ "totalist": "^1.0.0"
907
+ }
908
+ },
909
+ "sirv-cli": {
910
+ "version": "1.0.14",
911
+ "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.14.tgz",
912
+ "integrity": "sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==",
913
+ "requires": {
914
+ "console-clear": "^1.1.0",
915
+ "get-port": "^3.2.0",
916
+ "kleur": "^3.0.0",
917
+ "local-access": "^1.0.1",
918
+ "sade": "^1.6.0",
919
+ "semiver": "^1.0.0",
920
+ "sirv": "^1.0.13",
921
+ "tinydate": "^1.0.0"
922
+ }
923
+ },
924
+ "sorcery": {
925
+ "version": "0.10.0",
926
+ "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz",
927
+ "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=",
928
+ "dev": true,
929
+ "requires": {
930
+ "buffer-crc32": "^0.2.5",
931
+ "minimist": "^1.2.0",
932
+ "sander": "^0.5.0",
933
+ "sourcemap-codec": "^1.3.0"
934
+ }
935
+ },
936
+ "source-map": {
937
+ "version": "0.7.3",
938
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
939
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
940
+ "dev": true
941
+ },
942
+ "source-map-support": {
943
+ "version": "0.5.20",
944
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
945
+ "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
946
+ "dev": true,
947
+ "requires": {
948
+ "buffer-from": "^1.0.0",
949
+ "source-map": "^0.6.0"
950
+ },
951
+ "dependencies": {
952
+ "source-map": {
953
+ "version": "0.6.1",
954
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
955
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
956
+ "dev": true
957
+ }
958
+ }
959
+ },
960
+ "sourcemap-codec": {
961
+ "version": "1.4.8",
962
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
963
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
964
+ "dev": true
965
+ },
966
+ "strip-indent": {
967
+ "version": "3.0.0",
968
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
969
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
970
+ "dev": true,
971
+ "requires": {
972
+ "min-indent": "^1.0.0"
973
+ }
974
+ },
975
+ "supports-color": {
976
+ "version": "5.5.0",
977
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
978
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
979
+ "requires": {
980
+ "has-flag": "^3.0.0"
981
+ }
982
+ },
983
+ "svelte": {
984
+ "version": "3.44.1",
985
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.44.1.tgz",
986
+ "integrity": "sha512-4DrCEJoBvdR689efHNSxIQn2pnFwB7E7j2yLEJtHE/P8hxwZWIphCtJ8are7bjl/iVMlcEf5uh5pJ68IwR09vQ==",
987
+ "dev": true
988
+ },
989
+ "svelte-check": {
990
+ "version": "1.6.0",
991
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-1.6.0.tgz",
992
+ "integrity": "sha512-nQTlbFJWhwoeLY5rkhgbjzGQSwk5F1pRdEXait0EFaQSrE/iJF+PIjrQlk0BjL/ogk9HaR9ZI0DQSYrl7jl3IQ==",
993
+ "dev": true,
994
+ "requires": {
995
+ "chalk": "^4.0.0",
996
+ "chokidar": "^3.4.1",
997
+ "glob": "^7.1.6",
998
+ "import-fresh": "^3.2.1",
999
+ "minimist": "^1.2.5",
1000
+ "sade": "^1.7.4",
1001
+ "source-map": "^0.7.3",
1002
+ "svelte-preprocess": "^4.0.0",
1003
+ "typescript": "*"
1004
+ },
1005
+ "dependencies": {
1006
+ "ansi-styles": {
1007
+ "version": "4.3.0",
1008
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1009
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1010
+ "dev": true,
1011
+ "requires": {
1012
+ "color-convert": "^2.0.1"
1013
+ }
1014
+ },
1015
+ "chalk": {
1016
+ "version": "4.1.2",
1017
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1018
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1019
+ "dev": true,
1020
+ "requires": {
1021
+ "ansi-styles": "^4.1.0",
1022
+ "supports-color": "^7.1.0"
1023
+ }
1024
+ },
1025
+ "color-convert": {
1026
+ "version": "2.0.1",
1027
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1028
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1029
+ "dev": true,
1030
+ "requires": {
1031
+ "color-name": "~1.1.4"
1032
+ }
1033
+ },
1034
+ "color-name": {
1035
+ "version": "1.1.4",
1036
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1037
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1038
+ "dev": true
1039
+ },
1040
+ "has-flag": {
1041
+ "version": "4.0.0",
1042
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1043
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1044
+ "dev": true
1045
+ },
1046
+ "supports-color": {
1047
+ "version": "7.2.0",
1048
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1049
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1050
+ "dev": true,
1051
+ "requires": {
1052
+ "has-flag": "^4.0.0"
1053
+ }
1054
+ }
1055
+ }
1056
+ },
1057
+ "svelte-preprocess": {
1058
+ "version": "4.9.8",
1059
+ "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.9.8.tgz",
1060
+ "integrity": "sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og==",
1061
+ "dev": true,
1062
+ "requires": {
1063
+ "@types/pug": "^2.0.4",
1064
+ "@types/sass": "^1.16.0",
1065
+ "detect-indent": "^6.0.0",
1066
+ "magic-string": "^0.25.7",
1067
+ "sorcery": "^0.10.0",
1068
+ "strip-indent": "^3.0.0"
1069
+ }
1070
+ },
1071
+ "table-layout": {
1072
+ "version": "0.4.5",
1073
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz",
1074
+ "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==",
1075
+ "requires": {
1076
+ "array-back": "^2.0.0",
1077
+ "deep-extend": "~0.6.0",
1078
+ "lodash.padend": "^4.6.1",
1079
+ "typical": "^2.6.1",
1080
+ "wordwrapjs": "^3.0.0"
1081
+ }
1082
+ },
1083
+ "terser": {
1084
+ "version": "4.8.0",
1085
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
1086
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
1087
+ "dev": true,
1088
+ "requires": {
1089
+ "commander": "^2.20.0",
1090
+ "source-map": "~0.6.1",
1091
+ "source-map-support": "~0.5.12"
1092
+ },
1093
+ "dependencies": {
1094
+ "source-map": {
1095
+ "version": "0.6.1",
1096
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1097
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1098
+ "dev": true
1099
+ }
1100
+ }
1101
+ },
1102
+ "test-value": {
1103
+ "version": "3.0.0",
1104
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
1105
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
1106
+ "requires": {
1107
+ "array-back": "^2.0.0",
1108
+ "typical": "^2.6.1"
1109
+ }
1110
+ },
1111
+ "text-encoding-utf-8": {
1112
+ "version": "1.0.2",
1113
+ "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz",
1114
+ "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg=="
1115
+ },
1116
+ "tinydate": {
1117
+ "version": "1.3.0",
1118
+ "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz",
1119
+ "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w=="
1120
+ },
1121
+ "to-regex-range": {
1122
+ "version": "5.0.1",
1123
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1124
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1125
+ "dev": true,
1126
+ "requires": {
1127
+ "is-number": "^7.0.0"
1128
+ }
1129
+ },
1130
+ "totalist": {
1131
+ "version": "1.1.0",
1132
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
1133
+ "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g=="
1134
+ },
1135
+ "tslib": {
1136
+ "version": "2.3.1",
1137
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
1138
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
1139
+ "dev": true
1140
+ },
1141
+ "typescript": {
1142
+ "version": "3.9.10",
1143
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
1144
+ "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
1145
+ "dev": true
1146
+ },
1147
+ "typical": {
1148
+ "version": "2.6.1",
1149
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
1150
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
1151
+ },
1152
+ "wordwrapjs": {
1153
+ "version": "3.0.0",
1154
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
1155
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
1156
+ "requires": {
1157
+ "reduce-flatten": "^1.0.1",
1158
+ "typical": "^2.6.1"
1159
+ }
1160
+ },
1161
+ "wrappy": {
1162
+ "version": "1.0.2",
1163
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1164
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1165
+ "dev": true
1166
+ },
1167
+ "ws": {
1168
+ "version": "7.5.5",
1169
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
1170
+ "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
1171
+ "dev": true
1172
+ }
1173
+ }
1174
+ }
frontend/package.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "streamlit_component_svelte_template",
3
+ "version": "2.0.0",
4
+ "scripts": {
5
+ "build": "rollup -c",
6
+ "dev": "rollup -c -w",
7
+ "start": "sirv public",
8
+ "validate": "svelte-check"
9
+ },
10
+ "devDependencies": {
11
+ "@rollup/plugin-commonjs": "^12.0.0",
12
+ "@rollup/plugin-node-resolve": "^8.0.0",
13
+ "@rollup/plugin-typescript": "^4.0.0",
14
+ "@tsconfig/svelte": "^1.0.0",
15
+ "rollup": "^2.3.4",
16
+ "rollup-plugin-livereload": "^1.0.0",
17
+ "rollup-plugin-svelte": "^6.1.1",
18
+ "rollup-plugin-terser": "^5.1.2",
19
+ "svelte": "^3.0.0",
20
+ "svelte-check": "^1.0.0",
21
+ "svelte-preprocess": "^4.0.0",
22
+ "tslib": "^2.0.0",
23
+ "typescript": "^3.9.3"
24
+ },
25
+ "dependencies": {
26
+ "apache-arrow": "^0.17.0",
27
+ "event-target-shim": "^5.0.1",
28
+ "sirv-cli": "^1.0.0"
29
+ }
30
+ }
frontend/public/bootstrap.min.css ADDED
The diff for this file is too large to render. See raw diff
 
frontend/public/bootstrap.min.css.map ADDED
The diff for this file is too large to render. See raw diff
 
frontend/public/build/bundle.js ADDED
The diff for this file is too large to render. See raw diff
 
frontend/public/build/bundle.js.map ADDED
The diff for this file is too large to render. See raw diff
 
frontend/public/index.html ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Streamlit Component</title>
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <meta name="theme-color" content="#000000" />
8
+ <meta name="description" content="Streamlit Component" />
9
+ <link rel="stylesheet" href="./bootstrap.min.css" />
10
+ <link rel="stylesheet" href="./build/bundle.css" />
11
+ <script defer src="./build/bundle.js"></script>
12
+ </head>
13
+ <body>
14
+ <noscript>You need to enable JavaScript to run this app.</noscript>
15
+ </body>
16
+ </html>
frontend/rollup.config.js ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import svelte from 'rollup-plugin-svelte';
2
+ import resolve from '@rollup/plugin-node-resolve';
3
+ import commonjs from '@rollup/plugin-commonjs';
4
+ import livereload from 'rollup-plugin-livereload';
5
+ import { terser } from 'rollup-plugin-terser';
6
+ import sveltePreprocess from 'svelte-preprocess';
7
+ import typescript from '@rollup/plugin-typescript';
8
+
9
+ const production = !process.env.ROLLUP_WATCH;
10
+
11
+ function serve() {
12
+ let server;
13
+
14
+ function toExit() {
15
+ if (server) server.kill(0);
16
+ }
17
+
18
+ return {
19
+ writeBundle() {
20
+ if (server) return;
21
+ server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
22
+ stdio: ['ignore', 'inherit', 'inherit'],
23
+ shell: true
24
+ });
25
+
26
+ process.on('SIGTERM', toExit);
27
+ process.on('exit', toExit);
28
+ }
29
+ };
30
+ }
31
+
32
+ export default {
33
+ input: 'src/main.ts',
34
+ output: {
35
+ sourcemap: true,
36
+ format: 'iife',
37
+ name: 'app',
38
+ file: 'public/build/bundle.js'
39
+ },
40
+ plugins: [
41
+ svelte({
42
+ // enable run-time checks when not in production
43
+ dev: !production,
44
+ // we'll extract any component CSS out into
45
+ // a separate file - better for performance
46
+ // css: css => {
47
+ // css.write('public/build/bundle.css');
48
+ // },
49
+ preprocess: sveltePreprocess(),
50
+ }),
51
+
52
+ // If you have external dependencies installed from
53
+ // npm, you'll most likely need these plugins. In
54
+ // some cases you'll need additional configuration -
55
+ // consult the documentation for details:
56
+ // https://github.com/rollup/plugins/tree/master/packages/commonjs
57
+ resolve({
58
+ browser: true,
59
+ dedupe: ['svelte']
60
+ }),
61
+ commonjs(),
62
+ typescript({ sourceMap: !production }),
63
+
64
+ // In dev mode, call `npm run start` once
65
+ // the bundle has been generated
66
+ !production && serve(),
67
+
68
+ // Watch the `public` directory and refresh the
69
+ // browser on changes when not in production
70
+ !production && livereload('public'),
71
+
72
+ // If we're building for production (npm run build
73
+ // instead of npm run dev), minify
74
+ production && terser()
75
+ ],
76
+ watch: {
77
+ clearScreen: false
78
+ }
79
+ };
frontend/src/ImageGallery.svelte ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { Streamlit, setStreamlitLifecycle } from "./streamlit";
3
+ setStreamlitLifecycle();
4
+
5
+ export let imageUrls: Array<string>;
6
+ export let height: number;
7
+
8
+ let selectedImageUrl: string;
9
+
10
+ function image_onclick(event: any) {
11
+ selectedImageUrl = event.srcElement.currentSrc;
12
+ Streamlit.setComponentValue(selectedImageUrl);
13
+ }
14
+ </script>
15
+
16
+
17
+ <div class="scroller">
18
+ {#each imageUrls as imageUrl}
19
+ <img src={imageUrl} id={imageUrl} alt="" style="height: {height}px;" on:click={image_onclick}>
20
+ {/each}
21
+ </div>
22
+
23
+
24
+ <style>
25
+ .scroller {
26
+ min-height: 100px;
27
+ overflow-x: scroll;
28
+ overflow-y: hidden;
29
+ white-space: nowrap;
30
+ }
31
+ img {
32
+ display: inline-block;
33
+ padding: 1%;
34
+ border-radius: 20px;
35
+ opacity: 0.9;
36
+ transition: all .2s;
37
+ }
38
+
39
+ img:hover {
40
+ opacity: 1;
41
+ transform: scale(1.05);
42
+ cursor: pointer;
43
+ }
44
+ </style>
45
+
46
+
47
+
48
+
49
+
50
+
frontend/src/main.ts ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { WithStreamlitConnection } from "./streamlit";
2
+ import ImageGallery from "./ImageGallery.svelte";
3
+
4
+ // "WithStreamlitConnection" is a wrapper component. It bootstraps the
5
+ // connection between your component and the Streamlit app, and handles
6
+ // passing arguments from Python -> Component.
7
+ //
8
+ // You don't need to edit withStreamlitConnection (but you're welcome to!).
9
+ const imageGallery = new WithStreamlitConnection({
10
+ target: document.body,
11
+ props: {
12
+ /**
13
+ * Custom Streamlit component
14
+ */
15
+ component: ImageGallery,
16
+
17
+ /**
18
+ * Set to false if you want `args` (the named dictionary of arguments passed
19
+ * from Python) to be passed as a dictionary to your component.
20
+ *
21
+ * Default is `true`.
22
+ */
23
+ spreadArgs: true,
24
+ },
25
+ });
26
+
27
+ export default ImageGallery;
frontend/src/streamlit/ArrowTable.ts ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @license
3
+ * Copyright 2018-2019 Streamlit Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import { Table, Type } from "apache-arrow"
19
+
20
+ type CellType = "blank" | "index" | "columns" | "data"
21
+
22
+ export interface ArrowDataframeProto {
23
+ data: ArrowTableProto
24
+ height: string
25
+ width: string
26
+ }
27
+
28
+ export interface ArrowTableProto {
29
+ data: Uint8Array
30
+ index: Uint8Array
31
+ columns: Uint8Array
32
+ styler: Styler
33
+ }
34
+
35
+ interface Cell {
36
+ classNames: string
37
+ content: string
38
+ id?: string
39
+ type: CellType
40
+ }
41
+
42
+ interface Styler {
43
+ caption?: string
44
+ displayValuesTable: Table
45
+ styles?: string
46
+ uuid: string
47
+ }
48
+
49
+ export class ArrowTable {
50
+ private readonly dataTable: Table
51
+ private readonly indexTable: Table
52
+ private readonly columnsTable: Table
53
+ private readonly styler?: Styler
54
+
55
+ constructor(
56
+ dataBuffer: Uint8Array,
57
+ indexBuffer: Uint8Array,
58
+ columnsBuffer: Uint8Array,
59
+ styler?: any
60
+ ) {
61
+ this.dataTable = Table.from(dataBuffer)
62
+ this.indexTable = Table.from(indexBuffer)
63
+ this.columnsTable = Table.from(columnsBuffer)
64
+ this.styler = styler
65
+ ? {
66
+ caption: styler.get("caption"),
67
+ displayValuesTable: Table.from(styler.get("displayValues")),
68
+ styles: styler.get("styles"),
69
+ uuid: styler.get("uuid"),
70
+ }
71
+ : undefined
72
+ }
73
+
74
+ get rows(): number {
75
+ return this.indexTable.length + this.columnsTable.numCols
76
+ }
77
+
78
+ get columns(): number {
79
+ return this.indexTable.numCols + this.columnsTable.length
80
+ }
81
+
82
+ get headerRows(): number {
83
+ return this.rows - this.dataRows
84
+ }
85
+
86
+ get headerColumns(): number {
87
+ return this.columns - this.dataColumns
88
+ }
89
+
90
+ get dataRows(): number {
91
+ return this.dataTable.length
92
+ }
93
+
94
+ get dataColumns(): number {
95
+ return this.dataTable.numCols
96
+ }
97
+
98
+ get uuid(): string | undefined {
99
+ return this.styler && this.styler.uuid
100
+ }
101
+
102
+ get caption(): string | undefined {
103
+ return this.styler && this.styler.caption
104
+ }
105
+
106
+ get styles(): string | undefined {
107
+ return this.styler && this.styler.styles
108
+ }
109
+
110
+ get table(): Table {
111
+ return this.dataTable
112
+ }
113
+
114
+ get index(): Table {
115
+ return this.indexTable
116
+ }
117
+
118
+ get columnTable(): Table {
119
+ return this.columnsTable
120
+ }
121
+
122
+ public getCell = (rowIndex: number, columnIndex: number): Cell => {
123
+ const isBlankCell =
124
+ rowIndex < this.headerRows && columnIndex < this.headerColumns
125
+ const isIndexCell =
126
+ rowIndex >= this.headerRows && columnIndex < this.headerColumns
127
+ const isColumnsCell =
128
+ rowIndex < this.headerRows && columnIndex >= this.headerColumns
129
+
130
+ if (isBlankCell) {
131
+ const classNames = ["blank"]
132
+ if (columnIndex > 0) {
133
+ classNames.push("level" + rowIndex)
134
+ }
135
+
136
+ return {
137
+ type: "blank",
138
+ classNames: classNames.join(" "),
139
+ content: "",
140
+ }
141
+ } else if (isColumnsCell) {
142
+ const dataColumnIndex = columnIndex - this.headerColumns
143
+ const classNames = [
144
+ "col_heading",
145
+ "level" + rowIndex,
146
+ "col" + dataColumnIndex,
147
+ ]
148
+
149
+ return {
150
+ type: "columns",
151
+ classNames: classNames.join(" "),
152
+ content: this.getContent(this.columnsTable, dataColumnIndex, rowIndex),
153
+ }
154
+ } else if (isIndexCell) {
155
+ const dataRowIndex = rowIndex - this.headerRows
156
+ const classNames = [
157
+ "row_heading",
158
+ "level" + columnIndex,
159
+ "row" + dataRowIndex,
160
+ ]
161
+
162
+ return {
163
+ type: "index",
164
+ id: `T_${this.uuid}level${columnIndex}_row${dataRowIndex}`,
165
+ classNames: classNames.join(" "),
166
+ content: this.getContent(this.indexTable, dataRowIndex, columnIndex),
167
+ }
168
+ } else {
169
+ const dataRowIndex = rowIndex - this.headerRows
170
+ const dataColumnIndex = columnIndex - this.headerColumns
171
+ const classNames = [
172
+ "data",
173
+ "row" + dataRowIndex,
174
+ "col" + dataColumnIndex,
175
+ ]
176
+ const content = this.styler
177
+ ? this.getContent(
178
+ this.styler.displayValuesTable,
179
+ dataRowIndex,
180
+ dataColumnIndex
181
+ )
182
+ : this.getContent(this.dataTable, dataRowIndex, dataColumnIndex)
183
+
184
+ return {
185
+ type: "data",
186
+ id: `T_${this.uuid}row${dataRowIndex}_col${dataColumnIndex}`,
187
+ classNames: classNames.join(" "),
188
+ content,
189
+ }
190
+ }
191
+ }
192
+
193
+ public getContent = (
194
+ table: Table,
195
+ rowIndex: number,
196
+ columnIndex: number
197
+ ): any => {
198
+ const column = table.getColumnAt(columnIndex)
199
+ if (column === null) {
200
+ return ""
201
+ }
202
+
203
+ const columnTypeId = this.getColumnTypeId(table, columnIndex)
204
+ switch (columnTypeId) {
205
+ case Type.Timestamp: {
206
+ return this.nanosToDate(column.get(rowIndex))
207
+ }
208
+ default: {
209
+ return column.get(rowIndex)
210
+ }
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Returns apache-arrow specific typeId of column.
216
+ */
217
+ private getColumnTypeId(table: Table, columnIndex: number): Type {
218
+ return table.schema.fields[columnIndex].type.typeId
219
+ }
220
+
221
+ private nanosToDate(nanos: number): Date {
222
+ return new Date(nanos / 1e6)
223
+ }
224
+ }
frontend/src/streamlit/WithStreamlitConnection.svelte ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { onMount, afterUpdate, onDestroy } from "svelte";
3
+ import { Streamlit } from "./streamlit";
4
+ import type { RenderData } from "./streamlit";
5
+
6
+ /**
7
+ * Custom Streamlit component
8
+ */
9
+ export let component: any;
10
+
11
+ /**
12
+ * Set to false if you want `args` (the named dictionary of arguments passed
13
+ * from Python) to be passed as a dictionary to your component.
14
+ *
15
+ * Default is `true`.
16
+ */
17
+ export let spreadArgs: boolean = true;
18
+
19
+ // State
20
+ let renderData: RenderData;
21
+
22
+ // Props passed to custom Streamlit components.
23
+ /** Named dictionary of arguments passed from Python.
24
+ * Arguments will be passed directly if `spreadArgs=true`
25
+ */
26
+ let args: any;
27
+
28
+ /** The component's width. */
29
+ let width: number;
30
+
31
+ /**
32
+ * True if the component should be disabled.
33
+ * All components get disabled while the app is being re-run,
34
+ * and become re-enabled when the re-run has finished.
35
+ */
36
+ let disabled: boolean;
37
+
38
+ /**
39
+ * Streamlit is telling this component to redraw.
40
+ * We save the render data in State, so that it can be passed to the
41
+ * component.
42
+ */
43
+ const onRenderEvent = (event: Event): void => {
44
+ // Update our state with the newest render data
45
+ renderData = (event as CustomEvent<RenderData>).detail;
46
+ args = renderData.args;
47
+ disabled = renderData.disabled;
48
+ };
49
+
50
+ onMount((): void => {
51
+ // Set up event listeners, and signal to Streamlit that we're ready.
52
+ // We won't render the component until we receive the first RENDER_EVENT.
53
+ Streamlit.events.addEventListener(Streamlit.RENDER_EVENT, onRenderEvent);
54
+ Streamlit.setComponentReady();
55
+ });
56
+
57
+ onDestroy((): void => {
58
+ // Remove our `onRender` handler to Streamlit's render event.
59
+ Streamlit.events.removeEventListener(Streamlit.RENDER_EVENT, onRenderEvent);
60
+ });
61
+ </script>
62
+
63
+ <svelte:window bind:innerWidth={width} />
64
+ <!-- Don't render until we've gotten our first RENDER_EVENT from Streamlit. -->
65
+ {#if renderData}
66
+ {#if spreadArgs}
67
+ <svelte:component this={component} {...args} {disabled} {width} />
68
+ {:else}
69
+ <svelte:component this={component} {args} {disabled} {width} />
70
+ {/if}
71
+ {/if}
frontend/src/streamlit/index.ts ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { RenderData as RenderData_ } from "./streamlit";
2
+ import WithStreamlitConnection from "./WithStreamlitConnection.svelte";
3
+
4
+ export { ArrowTable } from "./ArrowTable";
5
+ export { Streamlit } from "./streamlit";
6
+
7
+ export { setStreamlitLifecycle } from "./setStreamlitLifecycle";
8
+ export { WithStreamlitConnection };
9
+
10
+ export type RenderData = RenderData_;
frontend/src/streamlit/setStreamlitLifecycle.ts ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { onMount, afterUpdate } from "svelte";
2
+ import { Streamlit } from "./streamlit";
3
+
4
+ /**
5
+ * [Optional] Set Streamlit Svelte Lifecycle functions
6
+ *
7
+ * You are not required call this function on your Streamlit
8
+ * component. If you decide not to call it, you should implement the
9
+ * `onMount` and `afterUpdate` functions in your own component,
10
+ * so that your plugin properly resizes.
11
+ */
12
+ export const setStreamlitLifecycle = (): void => {
13
+ onMount((): void => {
14
+ // Finally, tell Streamlit to update our initial height. We omit the
15
+ // `height` parameter here to have it default to our scrollHeight.
16
+ Streamlit.setFrameHeight();
17
+ });
18
+
19
+ afterUpdate((): void => {
20
+ // We tell Streamlit to update our frameHeight after each update, in
21
+ // case it has changed. (This isn't strictly necessary for the example
22
+ // because our height stays fixed, but this is a low-cost function, so
23
+ // there's no harm in doing it redundantly.)
24
+ Streamlit.setFrameHeight();
25
+ });
26
+ };
frontend/src/streamlit/streamlit.ts ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @license
3
+ * Copyright 2018-2020 Streamlit Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ // Safari doesn't support the EventTarget class, so we use a shim.
19
+ import { EventTarget } from "event-target-shim"
20
+ import { ArrowDataframeProto, ArrowTable } from "./ArrowTable"
21
+
22
+ /** Data sent in the custom Streamlit render event. */
23
+ export interface RenderData {
24
+ args: any
25
+ disabled: boolean
26
+ }
27
+
28
+ /** Messages from Component -> Streamlit */
29
+ enum ComponentMessageType {
30
+ // A component sends this message when it's ready to receive messages
31
+ // from Streamlit. Streamlit won't send any messages until it gets this.
32
+ // Data: { apiVersion: number }
33
+ COMPONENT_READY = "streamlit:componentReady",
34
+
35
+ // The component has a new widget value. Send it back to Streamlit, which
36
+ // will then re-run the app.
37
+ // Data: { value: any }
38
+ SET_COMPONENT_VALUE = "streamlit:setComponentValue",
39
+
40
+ // The component has a new height for its iframe.
41
+ // Data: { height: number }
42
+ SET_FRAME_HEIGHT = "streamlit:setFrameHeight",
43
+ }
44
+
45
+ /**
46
+ * Streamlit communication API.
47
+ *
48
+ * Components can send data to Streamlit via the functions defined here,
49
+ * and receive data from Streamlit via the `events` property.
50
+ */
51
+ export class Streamlit {
52
+ /**
53
+ * The Streamlit component API version we're targetting.
54
+ * There's currently only 1!
55
+ */
56
+ public static readonly API_VERSION = 1
57
+
58
+ public static readonly RENDER_EVENT = "streamlit:render"
59
+
60
+ /** Dispatches events received from Streamlit. */
61
+ public static readonly events = new EventTarget()
62
+
63
+ private static registeredMessageListener = false
64
+ private static lastFrameHeight?: number
65
+
66
+ /**
67
+ * Tell Streamlit that the component is ready to start receiving data.
68
+ * Streamlit will defer emitting RENDER events until it receives the
69
+ * COMPONENT_READY message.
70
+ */
71
+ public static setComponentReady = (): void => {
72
+ if (!Streamlit.registeredMessageListener) {
73
+ // Register for message events if we haven't already
74
+ window.addEventListener("message", Streamlit.onMessageEvent)
75
+ Streamlit.registeredMessageListener = true
76
+ }
77
+
78
+ Streamlit.sendBackMsg(ComponentMessageType.COMPONENT_READY, {
79
+ apiVersion: Streamlit.API_VERSION,
80
+ })
81
+ }
82
+
83
+ /**
84
+ * Report the component's height to Streamlit.
85
+ * This should be called every time the component changes its DOM - that is,
86
+ * when it's first loaded, and any time it updates.
87
+ */
88
+ public static setFrameHeight = (height?: number): void => {
89
+ if (height === undefined) {
90
+ // `height` is optional. If undefined, it defaults to scrollHeight,
91
+ // which is the entire height of the element minus its border,
92
+ // scrollbar, and margin.
93
+ height = document.body.scrollHeight
94
+ }
95
+
96
+ if (height === Streamlit.lastFrameHeight) {
97
+ // Don't bother updating if our height hasn't changed.
98
+ return
99
+ }
100
+
101
+ Streamlit.lastFrameHeight = height
102
+ Streamlit.sendBackMsg(ComponentMessageType.SET_FRAME_HEIGHT, { height })
103
+ }
104
+
105
+ /**
106
+ * Set the component's value. This value will be returned to the Python
107
+ * script, and the script will be re-run.
108
+ *
109
+ * For example:
110
+ *
111
+ * JavaScript:
112
+ * Streamlit.setComponentValue("ahoy!")
113
+ *
114
+ * Python:
115
+ * value = st.my_component(...)
116
+ * st.write(value) # -> "ahoy!"
117
+ *
118
+ * The value must be serializable into JSON.
119
+ */
120
+ public static setComponentValue = (value: any): void => {
121
+ Streamlit.sendBackMsg(ComponentMessageType.SET_COMPONENT_VALUE, { value })
122
+ }
123
+
124
+ /** Receive a ForwardMsg from the Streamlit app */
125
+ private static onMessageEvent = (event: MessageEvent): void => {
126
+ const type = event.data["type"]
127
+ switch (type) {
128
+ case Streamlit.RENDER_EVENT:
129
+ Streamlit.onRenderMessage(event.data)
130
+ break
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Handle an untyped Streamlit render event and redispatch it as a
136
+ * StreamlitRenderEvent.
137
+ */
138
+ private static onRenderMessage = (data: any): void => {
139
+ let args = data["args"]
140
+ if (args == null) {
141
+ console.error(
142
+ `Got null args in onRenderMessage. This should never happen`
143
+ )
144
+ args = {}
145
+ }
146
+
147
+ // Parse our dataframe arguments with arrow, and merge them into our args dict
148
+ const dataframeArgs =
149
+ data["dfs"] && data["dfs"].length > 0
150
+ ? Streamlit.argsDataframeToObject(data["dfs"])
151
+ : {}
152
+
153
+ args = {
154
+ ...args,
155
+ ...dataframeArgs,
156
+ }
157
+
158
+ const disabled = Boolean(data["disabled"])
159
+
160
+ // Dispatch a render event!
161
+ const eventData = { disabled, args }
162
+ const event = new CustomEvent<RenderData>(Streamlit.RENDER_EVENT, {
163
+ detail: eventData,
164
+ })
165
+ Streamlit.events.dispatchEvent(event)
166
+ }
167
+
168
+ private static argsDataframeToObject = (
169
+ argsDataframe: ArgsDataframe[]
170
+ ): object => {
171
+ const argsDataframeArrow = argsDataframe.map(
172
+ ({ key, value }: ArgsDataframe) => [key, Streamlit.toArrowTable(value)]
173
+ )
174
+ return Object.fromEntries(argsDataframeArrow)
175
+ }
176
+
177
+ private static toArrowTable = (df: ArrowDataframeProto): ArrowTable => {
178
+ const { data, index, columns } = df.data
179
+ return new ArrowTable(data, index, columns)
180
+ }
181
+
182
+ /** Post a message to the Streamlit app. */
183
+ private static sendBackMsg = (type: string, data?: any): void => {
184
+ window.parent.postMessage(
185
+ {
186
+ isStreamlitMessage: true,
187
+ type: type,
188
+ ...data,
189
+ },
190
+ "*"
191
+ )
192
+ }
193
+ }
194
+
195
+ interface ArgsDataframe {
196
+ key: string
197
+ value: ArrowDataframeProto
198
+ }
frontend/tsconfig.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "extends": "@tsconfig/svelte/tsconfig.json",
3
+ "compilerOptions": {
4
+ "target": "esnext",
5
+ "lib": ["dom", "dom.iterable", "esnext"],
6
+ "allowJs": true,
7
+ "skipLibCheck": true,
8
+ "esModuleInterop": true,
9
+ "allowSyntheticDefaultImports": true,
10
+ "strict": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "module": "esnext",
13
+ "moduleResolution": "node",
14
+ "resolveJsonModule": true,
15
+ "isolatedModules": true,
16
+ "noEmit": true
17
+ },
18
+ "include": ["src/**/*"],
19
+ "exclude": ["node_modules/*", "__sapper__/*", "public/*"]
20
+ }