solara-ui 1.34.0__py2.py3-none-any.whl → 1.35.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- solara/__init__.py +1 -1
- solara/components/applayout.py +1 -1
- solara/components/echarts.vue +2 -8
- solara/components/file_browser.py +13 -14
- solara/components/markdown.py +4 -6
- solara/components/markdown_editor.vue +2 -5
- solara/components/sql_code.vue +2 -5
- solara/server/cdn_helper.py +11 -1
- solara/server/esm.py +1 -1
- solara/server/reload.py +24 -15
- solara/server/static/solara_bootstrap.py +1 -1
- solara/server/templates/solara.html.j2 +5 -0
- solara/server/threaded.py +10 -1
- solara/test/pytest_plugin.py +2 -1
- solara/website/components/algolia_api.vue +2 -5
- solara/website/components/sidebar.py +26 -20
- solara/website/pages/changelog/changelog.md +18 -0
- solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +4 -0
- solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +6 -0
- solara/widgets/vue/gridlayout.vue +2 -5
- solara/widgets/vue/vegalite.vue +2 -5
- {solara_ui-1.34.0.dist-info → solara_ui-1.35.0.dist-info}/METADATA +1 -1
- {solara_ui-1.34.0.dist-info → solara_ui-1.35.0.dist-info}/RECORD +27 -27
- {solara_ui-1.34.0.data → solara_ui-1.35.0.data}/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
- {solara_ui-1.34.0.data → solara_ui-1.35.0.data}/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
- {solara_ui-1.34.0.dist-info → solara_ui-1.35.0.dist-info}/WHEEL +0 -0
- {solara_ui-1.34.0.dist-info → solara_ui-1.35.0.dist-info}/licenses/LICENSE +0 -0
solara/__init__.py
CHANGED
solara/components/applayout.py
CHANGED
|
@@ -342,7 +342,7 @@ def AppLayout(
|
|
|
342
342
|
):
|
|
343
343
|
if not show_app_bar:
|
|
344
344
|
AppIcon(sidebar_open, on_click=lambda: set_sidebar_open(not sidebar_open))
|
|
345
|
-
v.Html(tag="div", children=children_sidebar, style_="padding: 12px;").meta(ref="sidebar-content")
|
|
345
|
+
v.Html(tag="div", children=children_sidebar, style_="padding: 12px; height: 100%").meta(ref="sidebar-content")
|
|
346
346
|
if show_app_bar:
|
|
347
347
|
# if hide_on_scroll is True, and we have a little bit of scrolling, vuetify seems to act strangely
|
|
348
348
|
# when scrolling (on @mariobuikhuizen/vuetify v2.2.26-rc.0
|
solara/components/echarts.vue
CHANGED
|
@@ -93,10 +93,7 @@ module.exports = {
|
|
|
93
93
|
document.head.appendChild(script);
|
|
94
94
|
});
|
|
95
95
|
},
|
|
96
|
-
|
|
97
|
-
if (window.solara && window.solara.rootPath !== undefined) {
|
|
98
|
-
return solara.rootPath + "/";
|
|
99
|
-
}
|
|
96
|
+
getJupyterBaseUrl() {
|
|
100
97
|
// if base url is set, we use ./ for relative paths compared to the base url
|
|
101
98
|
if (document.getElementsByTagName("base").length) {
|
|
102
99
|
return "./";
|
|
@@ -113,10 +110,7 @@ module.exports = {
|
|
|
113
110
|
return base;
|
|
114
111
|
},
|
|
115
112
|
getCdn() {
|
|
116
|
-
return (
|
|
117
|
-
(typeof solara_cdn !== "undefined" && solara_cdn) ||
|
|
118
|
-
`${this.getBaseUrl()}_solara/cdn`
|
|
119
|
-
);
|
|
113
|
+
return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`
|
|
120
114
|
},
|
|
121
115
|
},
|
|
122
116
|
};
|
|
@@ -51,12 +51,12 @@ class FileListWidget(vy.VuetifyTemplate):
|
|
|
51
51
|
@solara.component
|
|
52
52
|
def FileBrowser(
|
|
53
53
|
directory: Union[None, str, Path, solara.Reactive[Path]] = None,
|
|
54
|
-
on_directory_change: Callable[[Path], None] = None,
|
|
55
|
-
on_path_select: Callable[[Optional[Path]], None] = None,
|
|
56
|
-
on_file_open: Callable[[Path], None] = None,
|
|
54
|
+
on_directory_change: Optional[Callable[[Path], None]] = None,
|
|
55
|
+
on_path_select: Optional[Callable[[Optional[Path]], None]] = None,
|
|
56
|
+
on_file_open: Optional[Callable[[Path], None]] = None,
|
|
57
57
|
filter: Callable[[Path], bool] = lambda x: True,
|
|
58
58
|
directory_first: bool = False,
|
|
59
|
-
on_file_name: Callable[[str], None] = None,
|
|
59
|
+
on_file_name: Optional[Callable[[str], None]] = None,
|
|
60
60
|
start_directory=None,
|
|
61
61
|
can_select=False,
|
|
62
62
|
):
|
|
@@ -98,11 +98,11 @@ def FileBrowser(
|
|
|
98
98
|
scroll_pos, set_scroll_pos = solara.use_state(0)
|
|
99
99
|
selected, set_selected = solara.use_state(None)
|
|
100
100
|
|
|
101
|
-
def change_dir(new_dir:
|
|
101
|
+
def change_dir(new_dir: Path):
|
|
102
102
|
if os.access(new_dir, os.R_OK):
|
|
103
|
-
current_dir.value =
|
|
103
|
+
current_dir.value = new_dir
|
|
104
104
|
if on_directory_change:
|
|
105
|
-
on_directory_change(
|
|
105
|
+
on_directory_change(new_dir)
|
|
106
106
|
set_warning(None)
|
|
107
107
|
return True
|
|
108
108
|
else:
|
|
@@ -114,8 +114,7 @@ def FileBrowser(
|
|
|
114
114
|
on_path_select(None)
|
|
115
115
|
return
|
|
116
116
|
if item["name"] == "..":
|
|
117
|
-
|
|
118
|
-
new_dir = current_dir_str[: current_dir_str.rfind(os.path.sep)]
|
|
117
|
+
new_dir = current_dir.value.parent
|
|
119
118
|
action_change_directory = (can_select and double_click) or (not can_select and not double_click)
|
|
120
119
|
if action_change_directory and change_dir(new_dir):
|
|
121
120
|
if scroll_pos_stack:
|
|
@@ -128,17 +127,17 @@ def FileBrowser(
|
|
|
128
127
|
on_path_select(None)
|
|
129
128
|
if can_select and not double_click:
|
|
130
129
|
if on_path_select:
|
|
131
|
-
on_path_select(
|
|
130
|
+
on_path_select(new_dir)
|
|
132
131
|
return
|
|
133
132
|
|
|
134
|
-
path =
|
|
133
|
+
path = current_dir.value / item["name"]
|
|
135
134
|
is_file = item["is_file"]
|
|
136
135
|
if (can_select and double_click) or (not can_select and not double_click):
|
|
137
136
|
if is_file:
|
|
138
137
|
if on_file_open:
|
|
139
|
-
on_file_open(
|
|
138
|
+
on_file_open(path)
|
|
140
139
|
if on_file_name is not None:
|
|
141
|
-
on_file_name(path)
|
|
140
|
+
on_file_name(str(path))
|
|
142
141
|
else:
|
|
143
142
|
if change_dir(path):
|
|
144
143
|
set_scroll_pos_stack(scroll_pos_stack + [scroll_pos])
|
|
@@ -149,7 +148,7 @@ def FileBrowser(
|
|
|
149
148
|
on_path_select(None)
|
|
150
149
|
elif can_select and not double_click:
|
|
151
150
|
if on_path_select:
|
|
152
|
-
on_path_select(
|
|
151
|
+
on_path_select(path)
|
|
153
152
|
else: # not can_select and double_click is ignored
|
|
154
153
|
raise RuntimeError("Combination should not happen") # pragma: no cover
|
|
155
154
|
|
solara/components/markdown.py
CHANGED
|
@@ -119,7 +119,8 @@ module.exports = {
|
|
|
119
119
|
href = location.pathname + href.substr(1);
|
|
120
120
|
a.attributes['href'].href = href;
|
|
121
121
|
}
|
|
122
|
-
|
|
122
|
+
let authLink = href.starswith("/_solara/auth/");
|
|
123
|
+
if( (href.startsWith("./") || href.startsWith("/")) && !authLink) {
|
|
123
124
|
a.onclick = e => {
|
|
124
125
|
console.log("clicked", href)
|
|
125
126
|
if(href.startsWith("./")) {
|
|
@@ -184,10 +185,7 @@ module.exports = {
|
|
|
184
185
|
document.head.appendChild(script);
|
|
185
186
|
});
|
|
186
187
|
},
|
|
187
|
-
|
|
188
|
-
if (window.solara && window.solara.rootPath !== undefined) {
|
|
189
|
-
return solara.rootPath + "/";
|
|
190
|
-
}
|
|
188
|
+
getJupyterBaseUrl() {
|
|
191
189
|
// if base url is set, we use ./ for relative paths compared to the base url
|
|
192
190
|
if (document.getElementsByTagName("base").length) {
|
|
193
191
|
return "./";
|
|
@@ -204,7 +202,7 @@ module.exports = {
|
|
|
204
202
|
return base
|
|
205
203
|
},
|
|
206
204
|
getCdn() {
|
|
207
|
-
return this.cdn || (
|
|
205
|
+
return this.cdn || (window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`);
|
|
208
206
|
}
|
|
209
207
|
},
|
|
210
208
|
updated() {
|
|
@@ -247,10 +247,7 @@ module.exports = {
|
|
|
247
247
|
document.head.appendChild(script);
|
|
248
248
|
});
|
|
249
249
|
},
|
|
250
|
-
|
|
251
|
-
if (window.solara && window.solara.rootPath !== undefined) {
|
|
252
|
-
return solara.rootPath + "/";
|
|
253
|
-
}
|
|
250
|
+
getJupyterBaseUrl() {
|
|
254
251
|
// if base url is set, we use ./ for relative paths compared to the base url
|
|
255
252
|
if (document.getElementsByTagName("base").length) {
|
|
256
253
|
return "./";
|
|
@@ -267,7 +264,7 @@ module.exports = {
|
|
|
267
264
|
return base
|
|
268
265
|
},
|
|
269
266
|
getCdn() {
|
|
270
|
-
return
|
|
267
|
+
return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
|
|
271
268
|
},
|
|
272
269
|
},
|
|
273
270
|
};
|
solara/components/sql_code.vue
CHANGED
|
@@ -83,10 +83,7 @@
|
|
|
83
83
|
document.head.appendChild(script);
|
|
84
84
|
});
|
|
85
85
|
},
|
|
86
|
-
|
|
87
|
-
if (window.solara && window.solara.rootPath !== undefined) {
|
|
88
|
-
return solara.rootPath + "/";
|
|
89
|
-
}
|
|
86
|
+
getJupyterBaseUrl() {
|
|
90
87
|
// if base url is set, we use ./ for relative paths compared to the base url
|
|
91
88
|
if (document.getElementsByTagName("base").length) {
|
|
92
89
|
return document.baseURI;
|
|
@@ -103,7 +100,7 @@
|
|
|
103
100
|
return base
|
|
104
101
|
},
|
|
105
102
|
getCdn() {
|
|
106
|
-
return
|
|
103
|
+
return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
|
|
107
104
|
},
|
|
108
105
|
}
|
|
109
106
|
}
|
solara/server/cdn_helper.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import os
|
|
2
3
|
import pathlib
|
|
3
4
|
import shutil
|
|
4
5
|
|
|
@@ -22,7 +23,16 @@ def put_in_cache(base_cache_dir: pathlib.Path, path, data: bytes):
|
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
def get_from_cache(base_cache_dir: pathlib.Path, path):
|
|
25
|
-
cache_path = base_cache_dir / path
|
|
26
|
+
cache_path = pathlib.Path(base_cache_dir / path)
|
|
27
|
+
# Make sure cache_path is a subdirectory of base_cache_dir
|
|
28
|
+
# so we don't accidentally read files from the parent directory
|
|
29
|
+
# which is a security risk.
|
|
30
|
+
# We use os.path.normpath() because we do not want to follow symlinks
|
|
31
|
+
# in editable installs, since some packages are symlinked
|
|
32
|
+
if not os.path.normpath(cache_path).startswith(str(base_cache_dir.resolve())):
|
|
33
|
+
logger.warning("Trying to read from outside of cache directory: %s is not a subdir of %s", cache_path, base_cache_dir)
|
|
34
|
+
raise PermissionError("Trying to read from outside of cache directory")
|
|
35
|
+
|
|
26
36
|
try:
|
|
27
37
|
logger.info("Opening cache file: %s", cache_path)
|
|
28
38
|
return cache_path.read_bytes()
|
solara/server/esm.py
CHANGED
|
@@ -40,7 +40,7 @@ def get_module_names():
|
|
|
40
40
|
def create_modules():
|
|
41
41
|
kernel_id = kernel_context.get_current_context().id
|
|
42
42
|
_modules_added = _modules_added_per_kernel[kernel_id]
|
|
43
|
-
logger.info("
|
|
43
|
+
logger.info("create modules %s", _modules)
|
|
44
44
|
widgets = {}
|
|
45
45
|
with lock:
|
|
46
46
|
for name, (module, dependencies) in _modules.items():
|
solara/server/reload.py
CHANGED
|
@@ -15,6 +15,7 @@ NO_WATCHDOG = False
|
|
|
15
15
|
try:
|
|
16
16
|
from watchdog.events import FileSystemEventHandler
|
|
17
17
|
from watchdog.observers import Observer
|
|
18
|
+
import watchdog.events
|
|
18
19
|
except ImportError:
|
|
19
20
|
pass
|
|
20
21
|
NO_WATCHDOG = True
|
|
@@ -99,27 +100,35 @@ else:
|
|
|
99
100
|
self.observers.append(observer)
|
|
100
101
|
self.directories.add(directory)
|
|
101
102
|
|
|
103
|
+
def on_moved(self, event):
|
|
104
|
+
logger.debug("Moved event: %s", event)
|
|
105
|
+
if isinstance(event, watchdog.events.FileMovedEvent):
|
|
106
|
+
if event.dest_path in self.files:
|
|
107
|
+
self._handle_possible_change(event.dest_path)
|
|
108
|
+
|
|
102
109
|
def on_modified(self, event):
|
|
103
|
-
|
|
104
|
-
logger.debug("Watch event: %s", event)
|
|
110
|
+
logger.debug("Modified event: %s", event)
|
|
105
111
|
if not event.is_directory:
|
|
106
112
|
if event.src_path in self.files:
|
|
107
|
-
|
|
108
|
-
changed = mtime_new > self.mtimes[event.src_path]
|
|
109
|
-
self.mtimes[event.src_path] = mtime_new
|
|
110
|
-
if changed:
|
|
111
|
-
logger.debug("File modified: %s", event.src_path)
|
|
112
|
-
try:
|
|
113
|
-
self.on_change(event.src_path)
|
|
114
|
-
except: # noqa
|
|
115
|
-
# we are in the watchdog thread here, all we can do is report
|
|
116
|
-
# and continue running (otherwise reload stops working)
|
|
117
|
-
logger.exception("Error while executing on change handler")
|
|
118
|
-
else:
|
|
119
|
-
logger.debug("File reported modified, but mtime did not change: %s", event.src_path)
|
|
113
|
+
self._handle_possible_change(event.src_path)
|
|
120
114
|
else:
|
|
121
115
|
logger.debug("Ignore file modification: %s", event.src_path)
|
|
122
116
|
|
|
117
|
+
def _handle_possible_change(self, path: str):
|
|
118
|
+
mtime_new = os.path.getmtime(path)
|
|
119
|
+
changed = mtime_new > self.mtimes[path]
|
|
120
|
+
self.mtimes[path] = mtime_new
|
|
121
|
+
if changed:
|
|
122
|
+
logger.debug("File modified: %s", path)
|
|
123
|
+
try:
|
|
124
|
+
self.on_change(path)
|
|
125
|
+
except: # noqa
|
|
126
|
+
# we are in the watchdog thread here, all we can do is report
|
|
127
|
+
# and continue running (otherwise reload stops working)
|
|
128
|
+
logger.exception("Error while executing on change handler")
|
|
129
|
+
else:
|
|
130
|
+
logger.debug("File reported modified, but mtime did not change: %s", path)
|
|
131
|
+
|
|
123
132
|
WatcherType = WatcherWatchdog # type: ignore
|
|
124
133
|
|
|
125
134
|
|
|
@@ -119,7 +119,7 @@ async def main():
|
|
|
119
119
|
]
|
|
120
120
|
for dep in requirements:
|
|
121
121
|
await micropip.install(dep, keep_going=True)
|
|
122
|
-
await micropip.install("/wheels/solara-1.
|
|
122
|
+
await micropip.install("/wheels/solara-1.35.0-py2.py3-none-any.whl", keep_going=True)
|
|
123
123
|
import solara
|
|
124
124
|
|
|
125
125
|
el = solara.Warning("lala")
|
|
@@ -237,6 +237,11 @@
|
|
|
237
237
|
{% endif %}
|
|
238
238
|
<script>
|
|
239
239
|
solara.rootPath = {{ root_path | tojson | safe}};
|
|
240
|
+
solara.cdn = {{ cdn | tojson | safe }};
|
|
241
|
+
// the vue templates expect it to not have a trailing slash
|
|
242
|
+
solara.cdn = solara.cdn.replace(/\/$/, '');
|
|
243
|
+
// keep this for backwards compatibility
|
|
244
|
+
window.solara_cdn = solara.cdn;
|
|
240
245
|
console.log("rootPath", solara.rootPath);
|
|
241
246
|
|
|
242
247
|
async function changeThemeCSS(theme) {
|
solara/server/threaded.py
CHANGED
|
@@ -2,15 +2,24 @@ import logging
|
|
|
2
2
|
import threading
|
|
3
3
|
import time
|
|
4
4
|
from typing import Optional
|
|
5
|
+
import socket
|
|
5
6
|
|
|
6
7
|
logger = logging.getLogger("solara.server.threaded")
|
|
7
8
|
|
|
8
9
|
|
|
10
|
+
def get_free_port():
|
|
11
|
+
sock = socket.socket()
|
|
12
|
+
sock.bind(("", 0))
|
|
13
|
+
port = sock.getsockname()[1]
|
|
14
|
+
sock.close()
|
|
15
|
+
return port
|
|
16
|
+
|
|
17
|
+
|
|
9
18
|
class ServerBase(threading.Thread):
|
|
10
19
|
name = "not set"
|
|
11
20
|
|
|
12
21
|
def __init__(self, port: int, host: str = "localhost", **kwargs):
|
|
13
|
-
self.port = port
|
|
22
|
+
self.port = get_free_port() if port == 0 else port
|
|
14
23
|
self.host = host
|
|
15
24
|
self.base_url = f"http://{self.host}:{self.port}"
|
|
16
25
|
|
solara/test/pytest_plugin.py
CHANGED
|
@@ -37,6 +37,7 @@ logger = logging.getLogger("solara.pytest_plugin")
|
|
|
37
37
|
TEST_PORT_START = int(os.environ.get("PORT", "18765")) + 100 # do not interfere with the solara integration tests
|
|
38
38
|
TEST_HOST = solara.server.settings.main.host
|
|
39
39
|
TIMEOUT = float(os.environ.get("SOLARA_PW_TIMEOUT", "18"))
|
|
40
|
+
PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT = int(os.environ.get("PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT", "10"))
|
|
40
41
|
|
|
41
42
|
|
|
42
43
|
@pytest.fixture(scope="session")
|
|
@@ -192,7 +193,7 @@ def _solara_test(solara_server, solara_app, page_session: "playwright.sync_api.P
|
|
|
192
193
|
run_events[id] = run_event = threading.Event()
|
|
193
194
|
page_session.goto(solara_server.base_url + f"?id={id}")
|
|
194
195
|
try:
|
|
195
|
-
assert run_event.wait(
|
|
196
|
+
assert run_event.wait(PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT)
|
|
196
197
|
context = used_contexts[id]
|
|
197
198
|
with context:
|
|
198
199
|
test_output_warmup = widgets.Output()
|
|
@@ -151,10 +151,7 @@ module.exports = {
|
|
|
151
151
|
document.head.appendChild(script);
|
|
152
152
|
});
|
|
153
153
|
},
|
|
154
|
-
|
|
155
|
-
if (window.solara && window.solara.rootPath !== undefined) {
|
|
156
|
-
return solara.rootPath + "/";
|
|
157
|
-
}
|
|
154
|
+
getJupyterBaseUrl() {
|
|
158
155
|
// if base url is set, we use ./ for relative paths compared to the base url
|
|
159
156
|
if (document.getElementsByTagName("base").length) {
|
|
160
157
|
return document.baseURI;
|
|
@@ -171,7 +168,7 @@ module.exports = {
|
|
|
171
168
|
return base
|
|
172
169
|
},
|
|
173
170
|
getCdn() {
|
|
174
|
-
return
|
|
171
|
+
return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
|
|
175
172
|
},
|
|
176
173
|
},
|
|
177
174
|
data(){
|
|
@@ -16,6 +16,7 @@ def Sidebar():
|
|
|
16
16
|
|
|
17
17
|
with solara.v.List(expand=True, nav=True, style_="height: 100%; display: flex; flex-direction: column;") as main:
|
|
18
18
|
with solara.v.ListItemGroup(v_model=router.path):
|
|
19
|
+
# e.g. getting_started, examples, components, api, advanced, faq
|
|
19
20
|
for route in all_routes:
|
|
20
21
|
if len(route.children) == 1 or route.path == "/":
|
|
21
22
|
with solara.Link("/documentation/" + route.path if route.path != "/" else "/documentation"):
|
|
@@ -24,6 +25,8 @@ def Sidebar():
|
|
|
24
25
|
solara.v.ListItemIcon(children=[solara.v.Icon(children=["mdi-home"])])
|
|
25
26
|
solara.v.ListItemTitle(style_="padding: 0 20px;", children=[route.label])
|
|
26
27
|
else:
|
|
28
|
+
path_top_level = "/documentation/" + route.path
|
|
29
|
+
top_level_expanded = router.path.startswith(path_top_level)
|
|
27
30
|
with solara.v.ListGroup(
|
|
28
31
|
v_slots=[
|
|
29
32
|
{
|
|
@@ -34,57 +37,60 @@ def Sidebar():
|
|
|
34
37
|
),
|
|
35
38
|
}
|
|
36
39
|
],
|
|
37
|
-
value=
|
|
40
|
+
value=top_level_expanded,
|
|
41
|
+
eager=True, # better for SEO
|
|
38
42
|
):
|
|
39
43
|
for item in route.children:
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
label = item.label
|
|
45
|
+
if item.path == "/" and route.path in ["examples", "api", "components"]:
|
|
46
|
+
# the 'homepage' of the subpage are named Overview
|
|
47
|
+
label = "Overview"
|
|
48
|
+
path_sub = "/documentation/" + route.path + "/" + item.path
|
|
49
|
+
sub_should_be_expanded = router.path.startswith(path_sub)
|
|
42
50
|
if item.children != [] and any([c.label is not None and c.path != "/" for c in item.children]):
|
|
43
51
|
with solara.v.ListGroup(
|
|
44
52
|
v_slots=[
|
|
45
53
|
{
|
|
46
54
|
"name": "activator",
|
|
47
55
|
"children": solara.v.ListItemTitle(
|
|
48
|
-
children=[
|
|
56
|
+
children=[label],
|
|
49
57
|
),
|
|
50
58
|
}
|
|
51
59
|
],
|
|
52
60
|
sub_group=True,
|
|
53
61
|
no_action=True,
|
|
54
|
-
|
|
62
|
+
eager=True, # better for SEO
|
|
63
|
+
value=sub_should_be_expanded,
|
|
55
64
|
):
|
|
56
65
|
for subitem in item.children:
|
|
57
|
-
# skip
|
|
58
|
-
if subitem.path == "/"
|
|
66
|
+
# skip the 'homepage' of the examples only
|
|
67
|
+
if subitem.path == "/" and route.path not in ["getting_started", "advanced"]:
|
|
59
68
|
continue
|
|
60
69
|
path = (
|
|
61
|
-
"/documentation/" + route.path + "/" + item.path + "/" + subitem.path
|
|
70
|
+
"/documentation/" + route.path + "/" + item.path + "/" + (subitem.path if subitem.path != "/" else "")
|
|
62
71
|
if item.path != "fullscreen"
|
|
63
72
|
else "/apps/" + subitem.path
|
|
64
73
|
)
|
|
65
74
|
with solara.Link(
|
|
66
75
|
path,
|
|
67
76
|
):
|
|
68
|
-
with solara.v.ListItem(dense=True, style_="padding: 0 20px;", value=path):
|
|
77
|
+
with solara.v.ListItem(dense=True, style_="margin-left: 40px; padding: 0 20px;", value=path):
|
|
69
78
|
solara.v.ListItemContent(
|
|
70
79
|
children=[subitem.label],
|
|
71
80
|
)
|
|
72
81
|
else:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
children=[item.label],
|
|
80
|
-
)
|
|
81
|
-
with solara.v.ListItemGroup():
|
|
82
|
+
path = "/documentation/" + route.path + ("/" + item.path if item.path != "/" else "")
|
|
83
|
+
with solara.Link(path):
|
|
84
|
+
with solara.v.ListItem(dense=True, style_="padding: 0 20px;", value=path):
|
|
85
|
+
solara.v.ListItemContent(
|
|
86
|
+
children=[label],
|
|
87
|
+
)
|
|
82
88
|
with solara.Link("/contact"):
|
|
83
|
-
with solara.v.ListItem():
|
|
89
|
+
with solara.v.ListItem(value="/contact"):
|
|
84
90
|
solara.v.ListItemIcon(children=[solara.v.Icon(children=["mdi-email"])])
|
|
85
91
|
solara.v.ListItemTitle(style_="padding: 0 20px;", children=["Contact"])
|
|
86
92
|
with solara.Link("/changelog"):
|
|
87
|
-
with solara.v.ListItem():
|
|
93
|
+
with solara.v.ListItem(value="/changelog"):
|
|
88
94
|
solara.v.ListItemIcon(children=[solara.v.Icon(children=["mdi-history"])])
|
|
89
95
|
solara.v.ListItemTitle(style_="padding: 0 20px;", children=["Changelog"])
|
|
90
96
|
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Solara Changelog
|
|
2
2
|
|
|
3
|
+
## Version 1.34.1
|
|
4
|
+
|
|
5
|
+
* Bug Fix: Using `SOLARA_ASSETS_PROXY=False` (default on [py.cafe](https://py.cafe)) would break grid layout. [#705](https://github.com/widgetti/solara/pull/705)
|
|
6
|
+
* Bug Fix: Hot reload work in more situations on Linux. [#702](https://github.com/widgetti/solara/pull/702)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## Version 1.34.0
|
|
10
|
+
|
|
11
|
+
* Feature: Enhancements for Solara `InputDate` and `InputDateRange` components [#672](https://github.com/widgetti/solara/pull/672):
|
|
12
|
+
* Limiting allowed dates with `min_date` and `max_date` arguments.
|
|
13
|
+
* Monthly granularity with `date_picker_type="month"`.
|
|
14
|
+
* `InputDateRange` selection can be sorted in ascending order with `sort` argument.
|
|
15
|
+
* Bug Fix: Typo in `solara.Tooltip`. [#695](https://github.com/widgetti/solara/pull/695)
|
|
16
|
+
* Bug Fix: `ipywidgets.Accordion` content was not hidden when closed. [#694](https://github.com/widgetti/solara/pull/694)
|
|
17
|
+
* Bug Fix: `solara.Tooltip` would break any functionality in it's children that relied on the `blur`, `keydown`, or `focus` events. [#696](https://github.com/widgetti/solara/pull/696)
|
|
18
|
+
* Bug Fix: Raise an error instead of showing a custom page on 404. Enables custom 404 pages in Solara apps. [#670](https://github.com/widgetti/solara/pull/670)
|
|
19
|
+
* Bug Fix: Prevent broken installation by restricting Numpy version. [#687](https://github.com/widgetti/solara/pull/687) and [`286e196`](https://github.com/widgetti/solara/commit/286e196ee990af814768d0612b98b5138f5ceb51).
|
|
20
|
+
|
|
3
21
|
## Version 1.33.0
|
|
4
22
|
|
|
5
23
|
### Details
|
|
@@ -411,3 +411,7 @@ To configure the ports the socket is bound to when starting the test servers, us
|
|
|
411
411
|
#### Vuetify warmup
|
|
412
412
|
|
|
413
413
|
By default, we insert an ipyvuetify widget with an icon into the frontend to force loading all the vuetify assets, such as CSS and fonts. However, if you are using the solara test plugin to test pure ipywidgets or a 3rd ipywidget based party library you might not need this. Disable this vuetify warmup phase by passing the `--no-solara-vuetify-warmup` argument to pytest, or setting the environment variable `SOLARA_TEST_VUETIFY_WARMUP` to a falsey value (e.g. `SOLARA_TEST_VUETIFY_WARMUP=0`).
|
|
414
|
+
|
|
415
|
+
#### Changing the application wait timeout
|
|
416
|
+
|
|
417
|
+
By default, we wait for 10 seconds for the browser to connect to the server when the solara server is used for testing. On slower systems, this may be too short. To change this timeout, set the `PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT` environment variable to the desired value in seconds (e.g. `PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT=20`).
|
|
@@ -1 +1,7 @@
|
|
|
1
1
|
# Solara enterprise
|
|
2
|
+
|
|
3
|
+
Solara enterprise is a not Open Source, but the source code is visible, is free for non-commercial use and installable from pypi.
|
|
4
|
+
|
|
5
|
+
For commercial use, you require a license. Please [contact](/contact) us for more information.
|
|
6
|
+
|
|
7
|
+
Solara-enterprise will stay free for non-commercial use and features that are in solara will **not be moved to solara-enterprise**.
|
|
@@ -78,10 +78,7 @@ module.exports = {
|
|
|
78
78
|
document.head.appendChild(script);
|
|
79
79
|
});
|
|
80
80
|
},
|
|
81
|
-
|
|
82
|
-
if (window.solara && window.solara.rootPath !== undefined) {
|
|
83
|
-
return solara.rootPath + "/";
|
|
84
|
-
}
|
|
81
|
+
getJupyterBaseUrl() {
|
|
85
82
|
if (document.getElementsByTagName("base").length) {
|
|
86
83
|
return "./";
|
|
87
84
|
}
|
|
@@ -97,7 +94,7 @@ module.exports = {
|
|
|
97
94
|
return base
|
|
98
95
|
},
|
|
99
96
|
getCdn() {
|
|
100
|
-
return
|
|
97
|
+
return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
|
|
101
98
|
},
|
|
102
99
|
}
|
|
103
100
|
}
|
solara/widgets/vue/vegalite.vue
CHANGED
|
@@ -88,10 +88,7 @@ module.exports = {
|
|
|
88
88
|
document.head.appendChild(script);
|
|
89
89
|
});
|
|
90
90
|
},
|
|
91
|
-
|
|
92
|
-
if (window.solara && window.solara.rootPath !== undefined) {
|
|
93
|
-
return solara.rootPath + "/";
|
|
94
|
-
}
|
|
91
|
+
getJupyterBaseUrl() {
|
|
95
92
|
// if base url is set, we use ./ for relative paths compared to the base url
|
|
96
93
|
if (document.getElementsByTagName("base").length) {
|
|
97
94
|
return "./";
|
|
@@ -108,7 +105,7 @@ module.exports = {
|
|
|
108
105
|
return base
|
|
109
106
|
},
|
|
110
107
|
getCdn() {
|
|
111
|
-
return this.cdn || (
|
|
108
|
+
return this.cdn || (window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`);
|
|
112
109
|
}
|
|
113
110
|
},
|
|
114
111
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
prefix/etc/jupyter/jupyter_notebook_config.d/solara.json,sha256=3UhTBQi6z7F7pPjmqXxfddv79c8VGR9H7zStDLp6AwY,115
|
|
2
2
|
prefix/etc/jupyter/jupyter_server_config.d/solara.json,sha256=D9J-rYxAzyD5GOqWvuPjacGUVFHsYtTfZ4FUbRzRvIA,113
|
|
3
|
-
solara/__init__.py,sha256=
|
|
3
|
+
solara/__init__.py,sha256=SDPK0vT6QxeWzzWF9qbyAr5f9oYiBkHmqlY1dPqwMVc,3584
|
|
4
4
|
solara/__main__.py,sha256=_RSUhoxkTruY4MMlSJ9qBKWdsgNSasuYs1EBbufnNrM,23656
|
|
5
5
|
solara/alias.py,sha256=9vfLzud77NP8in3OID9b5mmIO8NyrnFjN2_aE0lSb1k,216
|
|
6
6
|
solara/autorouting.py,sha256=IXNqJBaKjniuQIHGq_LSqoWXec9qq34t2b6UEqj4YBE,22677
|
|
@@ -23,7 +23,7 @@ solara/toestand.py,sha256=cGVw1TAX_Kn9u2IN_GHhCPEOP8W3N0PwA-WHuvk8EgU,23570
|
|
|
23
23
|
solara/util.py,sha256=ex3Hggy-kTQa4DTEMDlhFTihzqnTfjxWCbHk0ihaZSM,8934
|
|
24
24
|
solara/components/__init__.py,sha256=kVFPHiqv0-G_jQoL5NJnYskB9l9_2Y9jxVP3fFY8cVg,2636
|
|
25
25
|
solara/components/alert.py,sha256=sNjlrCu2niR6LD9gZFXwvSBMszCKt6nRH58kE7RgsDw,5144
|
|
26
|
-
solara/components/applayout.py,sha256=
|
|
26
|
+
solara/components/applayout.py,sha256=Q1n8foPT1szjIKqjUum6QxFnUvNj_MheMmyc8r7FIsI,16753
|
|
27
27
|
solara/components/button.py,sha256=8Q4s3cD7mULDzASAmUlKGAOcOuXgDFHJMC1PJS5DHYc,3143
|
|
28
28
|
solara/components/card.py,sha256=2xNXrIRJ4jGJtRbirX1Xp8V2h3HtW9vnxhLGUCrPr9I,2797
|
|
29
29
|
solara/components/checkbox.py,sha256=MLQ9Hxvtv5aKLj4XO3ILWtGc6nKOUH560A2bBt0Z030,1445
|
|
@@ -38,9 +38,9 @@ solara/components/datatable.vue,sha256=xoIT7tS2QSKgJHt0kHRODsDx81S9SEwk1EoVM9sgF
|
|
|
38
38
|
solara/components/details.py,sha256=KsGATbjlLNn9X490o8n55njy_VCE8RnL3Hx08Lsu4Kk,1587
|
|
39
39
|
solara/components/download.vue,sha256=xdh4olwVvGkQwGNRMU5eVUW1FGvcXrYrCyjddJbvH7E,1069
|
|
40
40
|
solara/components/echarts.py,sha256=yaj3dQ1OiPD2XqpL_iPa545NRhgnmjJlz4-BqSdvsEw,2625
|
|
41
|
-
solara/components/echarts.vue,sha256=
|
|
41
|
+
solara/components/echarts.vue,sha256=ogs-9-aurH_VXXV4YBvi-pPX-ZEt1jZaU7M7kZaDpkA,3552
|
|
42
42
|
solara/components/figure_altair.py,sha256=t4EEwXrdoisrbV5j2MS-HBlPc5HSFCK5r4mRXvYRH9w,1150
|
|
43
|
-
solara/components/file_browser.py,sha256=
|
|
43
|
+
solara/components/file_browser.py,sha256=701vg4_c0au9va206sx3pQDX6NL1VFqs7ewQ0RAbn6k,7331
|
|
44
44
|
solara/components/file_download.py,sha256=Lil0qyiozU_Pxyb_HgnJXOumrxMeDwwavEmZZw6kAs8,7475
|
|
45
45
|
solara/components/file_drop.py,sha256=3j8TkhGZK21lqpjOAc9tNMsvKjmUNhr7YUKbGB99Y1Q,4711
|
|
46
46
|
solara/components/file_drop.vue,sha256=ywQvWjqLIRNMAL6ZrdLpHCK4ZprrVbh0n2AJFanVlR8,2243
|
|
@@ -51,9 +51,9 @@ solara/components/head_tag.vue,sha256=vw0PJzAajq1XbyKhrTakfzJGF_beXAjupkFXPKJbVD
|
|
|
51
51
|
solara/components/image.py,sha256=o44iu0_wv3cPKnKv47mw10d2f67vuBaW2Jhs775hNAM,4503
|
|
52
52
|
solara/components/input.py,sha256=wzpJXEH9MYVtZetqJQd4MTfRhsjg_juCpdiD4VHhZ0c,14593
|
|
53
53
|
solara/components/link.py,sha256=bYXVencL9hjBcrGniXdE0JlSzBE9bkUFFmd4apfYhjk,1842
|
|
54
|
-
solara/components/markdown.py,sha256=
|
|
54
|
+
solara/components/markdown.py,sha256=agHcpMxBLDn7JJeb42GHDUwF2mVP7KOZ4fcKBOuruWo,12959
|
|
55
55
|
solara/components/markdown_editor.py,sha256=Ii_IVzl99JBVqegRu1aHdOC-hTIzbHXzuNKlRVvAEx0,634
|
|
56
|
-
solara/components/markdown_editor.vue,sha256=
|
|
56
|
+
solara/components/markdown_editor.vue,sha256=_QXDv1EdyFNCZdXTZL5dPDm8kCHNl2xT1jioEnHgaMg,8748
|
|
57
57
|
solara/components/matplotlib.py,sha256=c7iQhOIG_8aKTOz_Xnw3wXa0sgfiBunIzOxRhljQlzw,2029
|
|
58
58
|
solara/components/meta.py,sha256=IFE2EINt8YVxZOyKkCKhu68nc3-ri5d2OzsDjoH9EAI,1655
|
|
59
59
|
solara/components/misc.py,sha256=_az9Jetk9lb0WgNFrbM4dKxzaxj1h7QS7z6k6yAbXLQ,12473
|
|
@@ -67,7 +67,7 @@ solara/components/slider_date.vue,sha256=TJsDmZqsXCET61JlVCYqmkWVWDlu6NSfQii9ZcA
|
|
|
67
67
|
solara/components/spinner-solara.vue,sha256=fH8AtwXUZf_YZnUj-1OWspcbVWc-mSbY2T5sebRmKrU,2928
|
|
68
68
|
solara/components/spinner.py,sha256=EGB9qL6WnNchaEc8RnjPk79jm5TV9v_7UoEoDZKikBM,586
|
|
69
69
|
solara/components/sql_code.py,sha256=XUx91w_E7q6QzOPpY1NZVuCNPh6hPP6gPJLM7cMDYs4,1190
|
|
70
|
-
solara/components/sql_code.vue,sha256=
|
|
70
|
+
solara/components/sql_code.vue,sha256=ogqWdIOm1OnTQJj_p2UhcFPO_biv1uMaYCOCXPBJ6AQ,3815
|
|
71
71
|
solara/components/style.py,sha256=l2UAke1Js9IMAFP31k5T2-YDjo2WMbR104ZYvMpXUEs,3112
|
|
72
72
|
solara/components/switch.py,sha256=Vq6LgroaY3jx4PO2n1_08lqPL9g0MUZNsMPA4uqKr7I,2309
|
|
73
73
|
solara/components/tab_navigation.py,sha256=xVlVx4GvLNNxeE53sGtRLkcQB3mzEWM_jTlXOnY3SEs,1047
|
|
@@ -102,21 +102,21 @@ solara/scope/__init__.py,sha256=0sP3B6L4Aai0b6nadPtEETb8XqdGmSFKvQusNH0-yvY,2987
|
|
|
102
102
|
solara/scope/types.py,sha256=HTf_wnkpkhhtGaeFsB690KBP623CUuqiMssd72-u9yg,1540
|
|
103
103
|
solara/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
104
104
|
solara/server/app.py,sha256=6cWds871ZTD-zT5H2p3ep0cXX9AqT2VnKk3kIEbek60,20336
|
|
105
|
-
solara/server/cdn_helper.py,sha256=
|
|
106
|
-
solara/server/esm.py,sha256=
|
|
105
|
+
solara/server/cdn_helper.py,sha256=BvqxkA3jKi1fEZ5g3FZjphx2NY6PnoxnSCG9JK6zdBE,3101
|
|
106
|
+
solara/server/esm.py,sha256=dX9pzTJQ6kd6qNHQgzC938O5LTowLhuATXO0Q1paz44,2951
|
|
107
107
|
solara/server/fastapi.py,sha256=qVIHn0_Kxr6zWqcBWySu5nnJ6pNTSDqb4EHIh-cqH_8,93
|
|
108
108
|
solara/server/flask.py,sha256=7VsZ12XouYJvlObZ-ZotL4aupXWQE7OsyghJynWr0wk,9027
|
|
109
109
|
solara/server/jupytertools.py,sha256=cYFIUjLX7n0uuEXqWVWvmV6sV7R_MNg8ZZlabQgw8vk,1320
|
|
110
110
|
solara/server/kernel.py,sha256=3mwRRBw6BOcKLACL4fCUGgtI_RZ5KTSM1MlAtRlDbmA,11092
|
|
111
111
|
solara/server/kernel_context.py,sha256=RrNVAkoev6u6LZBvDfG86zyVs7eDVUsrp_4Au_FLlgY,16718
|
|
112
112
|
solara/server/patch.py,sha256=bwIlgXJSMUEk2eMTqIXaWG3es3WiAq3e2AilFMvrZKQ,18788
|
|
113
|
-
solara/server/reload.py,sha256=
|
|
113
|
+
solara/server/reload.py,sha256=BBH7QhrV1-e9RVyNE3uz1oPj1DagC3t_XSqGPNz0nJE,9747
|
|
114
114
|
solara/server/server.py,sha256=fo-3o7L20kC6tb4_mLzoVI39dodRRuNIVuCCYBOF94k,16268
|
|
115
115
|
solara/server/settings.py,sha256=8QpVW_hYe4QvSVvDMeobpUEFa_jjCAGrSKgCGzjZ3As,7340
|
|
116
116
|
solara/server/shell.py,sha256=xKox0fvDxdcWleE8p2ffCkihvjLJsWn2FujMbgUjYn0,8677
|
|
117
117
|
solara/server/starlette.py,sha256=8cVrYxkt2hm7RaO9E12wHAqabK_viLPSbgUUXA19fRA,23599
|
|
118
118
|
solara/server/telemetry.py,sha256=GPKGA5kCIqJb76wgxQ2_U2uV_s0r-1tKqv-GVxo5hs8,6038
|
|
119
|
-
solara/server/threaded.py,sha256=
|
|
119
|
+
solara/server/threaded.py,sha256=k9k461md4MxEFX-RLit5RpVRPFlQNwr-qp5pprT8JB0,2347
|
|
120
120
|
solara/server/utils.py,sha256=I_PaObYgXz--fw-5G_K_uwxfEVSPynQud8Pn-MHDR3c,648
|
|
121
121
|
solara/server/websocket.py,sha256=hUYw9TeVf4vHKL8TGG4RAZGLL7rmkt1INVq5qSYRWOo,1076
|
|
122
122
|
solara/server/assets/custom.css,sha256=4p04-uxHTobfr6Xkvf1iOrYiks8NciWLT_EwHZSy6jw,15
|
|
@@ -135,7 +135,7 @@ solara/server/static/highlight-dark.css,sha256=gmC3pr3x2BqJgTswNoN6AkqfEhBk24hPF
|
|
|
135
135
|
solara/server/static/highlight.css,sha256=k8ZdT5iwrGQ5tXTQHAXuxvZrSUq3kwCdEpy3mlFoZjs,2637
|
|
136
136
|
solara/server/static/main-vuetify.js,sha256=-FLlUqclZdVhCXsqawzpxtQ9vpaDA6KQdwoDKJCr_AI,8926
|
|
137
137
|
solara/server/static/main.js,sha256=mcx4JNQ4Lg4pNdUIqMoZos1mZyYFS48yd_JNFFJUqIE,5679
|
|
138
|
-
solara/server/static/solara_bootstrap.py,sha256=
|
|
138
|
+
solara/server/static/solara_bootstrap.py,sha256=zwGV7dvJYWueF5Kl6dGZ0ACt2xAAAgcLr4V_19iRBiU,3195
|
|
139
139
|
solara/server/static/sun.svg,sha256=jEKBAGCr7b9zNYv0VUb7lMWKjnU2dX69_Ye_DZWGXJI,6855
|
|
140
140
|
solara/server/static/webworker.js,sha256=cjAFz7-SygStHJnYlJUlJs-gE_7YQeQ-WBDcmKYyjvo,1372
|
|
141
141
|
solara/server/templates/index.html.j2,sha256=JXQo1M-STFHLBOFetgG7509cAq8xUP0VAEtYDzz35fY,31
|
|
@@ -144,7 +144,7 @@ solara/server/templates/loader-plain.html,sha256=VEtMDC8MQj75o2iWJ_gR70Jp05oOoyR
|
|
|
144
144
|
solara/server/templates/loader-solara.css,sha256=QerfzwlenkSJMq8uk_qEtoSdcI-DKMRrH9XXDEPsrUA,1670
|
|
145
145
|
solara/server/templates/loader-solara.html,sha256=bgp3GHOAhfzU0rcAAYDsqhGlemfZo4YNhRsYIvhU7YM,2726
|
|
146
146
|
solara/server/templates/plain.html,sha256=yO1r2hidA3bxOclaxtI_vTZtdDTFn2KKeeoldJuinXk,2762
|
|
147
|
-
solara/server/templates/solara.html.j2,sha256=
|
|
147
|
+
solara/server/templates/solara.html.j2,sha256=xFfGWcuS1qUyOIF5K_hoSO4I7QsJ3s5B0NCzeBX5uP0,19915
|
|
148
148
|
solara/template/button.py,sha256=HM382prl4bNLF8sLBd9Sh43ReMGedG_z_h4XN4mDYRI,311
|
|
149
149
|
solara/template/markdown.py,sha256=31G3ezFooiveSrUH5afz5_nJ8SStjbx-_x5YLXv_hPk,1137
|
|
150
150
|
solara/template/portal/.flake8,sha256=wxWLwamdP33Jm1mPa1sVe3uT0AZkG_wHPbY3Ci7j5-g,136
|
|
@@ -168,7 +168,7 @@ solara/template/portal/solara_portal/pages/article/__init__.py,sha256=6PgHyyeK1_
|
|
|
168
168
|
solara/template/portal/solara_portal/pages/viz/__init__.py,sha256=l65uqBpFJ6Uh5XytXhLMnR-8G4FBnjqJg86OJX7_LO0,2858
|
|
169
169
|
solara/template/portal/solara_portal/pages/viz/overview.py,sha256=GPlzFxUR0LRQhR96a_CVWquGTjHhDehL1PR03Tcm3gs,365
|
|
170
170
|
solara/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
171
|
-
solara/test/pytest_plugin.py,sha256=
|
|
171
|
+
solara/test/pytest_plugin.py,sha256=n0iXaY1hPXu4qeEbXvc68I4pBZrVn9dspWXw0hv5L1s,26438
|
|
172
172
|
solara/website/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
173
173
|
solara/website/utils.py,sha256=TfoExocZ8ko2hTcA7XDKI5FfKZ4gi3JTc_f9Oi5L7Fs,855
|
|
174
174
|
solara/website/assets/custom.css,sha256=yBAhh-21ycWwDC2HLDKuMbNAR9ROj3gmF1wOdoq5olM,9888
|
|
@@ -179,7 +179,7 @@ solara/website/assets/images/logo_white.svg,sha256=bbqWAerR15o8bj35DTYBMfOphEvWY
|
|
|
179
179
|
solara/website/components/__init__.py,sha256=2zL8q_PDhJ5n6rx8gZ96ufTbo_jbp8D93f0frHs0pvo,167
|
|
180
180
|
solara/website/components/algolia.py,sha256=2Xv8iuD8UXakcPL0tZKmkFP3ujvzBUwTvWUFUq9qvnA,81
|
|
181
181
|
solara/website/components/algolia.vue,sha256=JziH7MHESAjkpFD5b1izCpjYL3G3Qdn-XLbxAhLVXHg,460
|
|
182
|
-
solara/website/components/algolia_api.vue,sha256=
|
|
182
|
+
solara/website/components/algolia_api.vue,sha256=Trj4vaL7rPJiTZDO96Qu3iYW7RK7ECRFBbA1VJzDXQU,7020
|
|
183
183
|
solara/website/components/docs.py,sha256=9iLPAStSP_vq2b9wy7S8RcQiHOEXA4sRCAJh0SfcoOY,5114
|
|
184
184
|
solara/website/components/header.py,sha256=T3RFJXUPrPXQfBDvShCsC1A0nKUj3ljPUhrv-z4LfXE,3239
|
|
185
185
|
solara/website/components/hero.py,sha256=rJdgQpnimOqejdwdGmS5PwS_tOfHeYWSAwRs2fMHEvQ,688
|
|
@@ -187,7 +187,7 @@ solara/website/components/mailchimp.py,sha256=ziMYkNpHLLKamniXnzS1wOtWMzLeIqqQGR
|
|
|
187
187
|
solara/website/components/mailchimp.vue,sha256=f2cFKUfl7gL9FJbGLCtPRUFBghxS8kcGuI_xSSOAEpo,3543
|
|
188
188
|
solara/website/components/markdown.py,sha256=-ueVz2IlQQlSHJlLAp4nDdQaKZI6ycZKAzRFwJcDWEM,1036
|
|
189
189
|
solara/website/components/notebook.py,sha256=MM73_c5l49SSpK63O4TYMsQ-mA43CwfhfU7VKXjfNC0,6867
|
|
190
|
-
solara/website/components/sidebar.py,sha256=
|
|
190
|
+
solara/website/components/sidebar.py,sha256=oPKov45G-6i1SJXtLshc4sDCTrnr47PNzvtL6tPmT5A,5668
|
|
191
191
|
solara/website/pages/__init__.py,sha256=T7lJcubDDA18Ct-5lwXMcVdptj1QqyKuY6ASRe1gdGA,31602
|
|
192
192
|
solara/website/pages/doc_use_download.py,sha256=lWx9so-xPgV19FGTFqvgnL5_IeJragj8bYmClVPfuLw,3139
|
|
193
193
|
solara/website/pages/docutils.py,sha256=2ne991oUtK4dMj-qN18NtsVYxSfCT1c6o5yYThQnxUE,736
|
|
@@ -204,7 +204,7 @@ solara/website/pages/apps/multipage/__init__.py,sha256=zljTAXbsV8hqb67dwmx_PhzN-
|
|
|
204
204
|
solara/website/pages/apps/multipage/page1.py,sha256=5hK0RZ8UBBOaZcPKaplbLeb0VvaerhB6m3Jn5C0afRM,872
|
|
205
205
|
solara/website/pages/apps/multipage/page2.py,sha256=uRJ8YPFyKy7GR_Ii8DJSx3akb3H15rQAJZETMt9jVEk,1422
|
|
206
206
|
solara/website/pages/changelog/__init__.py,sha256=iBCpD5LVrFxQtEHX116u_6vqNBktZD3AXR65eTZblFo,227
|
|
207
|
-
solara/website/pages/changelog/changelog.md,sha256=
|
|
207
|
+
solara/website/pages/changelog/changelog.md,sha256=Qo0G88hN0lhmf9e666WOmBIBJj9aiA-ZMiREYSHMJXM,16144
|
|
208
208
|
solara/website/pages/contact/__init__.py,sha256=L6o45fHAMClqyWdHWxI6JuiwUTP-U-yXCgd3lxMUcxA,223
|
|
209
209
|
solara/website/pages/contact/contact.md,sha256=zp66RGhOE_tdkRaWKZqGbuk-PnOqBWhDVvX5zSLXoHw,798
|
|
210
210
|
solara/website/pages/documentation/__init__.py,sha256=zJh3kmr6OhFPbax8Igp-LN-m9cZNrs9sq9ifFuC8Kic,6003
|
|
@@ -213,7 +213,7 @@ solara/website/pages/documentation/advanced/content/00-overview.md,sha256=GY7d74
|
|
|
213
213
|
solara/website/pages/documentation/advanced/content/10-howto/00-overview.md,sha256=mG2UzdSn7ReVNIYFGYv7ODxPI5s_ux8j-J8HlWxE6Wo,324
|
|
214
214
|
solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md,sha256=V52UWqYUnC7AaqbfpnM9-rOUEONZxczt-3k6FIjO77E,7417
|
|
215
215
|
solara/website/pages/documentation/advanced/content/10-howto/20-layout.md,sha256=0STmZU16cfcgi7mGdGvDdCOfV7RUPMl160RUG2rHM64,5792
|
|
216
|
-
solara/website/pages/documentation/advanced/content/10-howto/30-testing.md,sha256=
|
|
216
|
+
solara/website/pages/documentation/advanced/content/10-howto/30-testing.md,sha256=_tD7fwDdesaGS6eJvvnkOHPjEEyPKUPbDQq4VPYsygk,19588
|
|
217
217
|
solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md,sha256=KUmLAJj2iiEL6im3lkOI8gRjaX4JM6uH565mTZNjV3I,1791
|
|
218
218
|
solara/website/pages/documentation/advanced/content/10-howto/40-embed.md,sha256=tufVLEUJ_nqpow5iwD_1Huw9Sa-4n-alNrvrY50A4WA,2119
|
|
219
219
|
solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md,sha256=nIrx3eHDUAQpP-JxeE6DqhkAiHBHfT3pX_k_VqgLGno,5091
|
|
@@ -237,7 +237,7 @@ solara/website/pages/documentation/advanced/content/20-understanding/20-solara.m
|
|
|
237
237
|
solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md,sha256=7-efGbXIVhUkLCFtG9rCBxKcDcQMEt_GMyt4GDCHRK8,9669
|
|
238
238
|
solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md,sha256=0DaBpVnR2smTAKjgY73zlEATMsN5CK8XRr2gfg0H7GY,5933
|
|
239
239
|
solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md,sha256=jlL0kyzzDdHytNizBBLPx7buFFforlIDdMF724C2RLE,1132
|
|
240
|
-
solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md,sha256=
|
|
240
|
+
solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md,sha256=FsLYifZZdSZrRuL0ix0T2AFDkOkDeSBkONSOxcFp91w,380
|
|
241
241
|
solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md,sha256=juypsyEycVgptRPtlbsByg5kfdkF911zYZrxePMvCkM,9432
|
|
242
242
|
solara/website/pages/documentation/advanced/content/40-development/00-overview.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
243
243
|
solara/website/pages/documentation/advanced/content/40-development/01-contribute.md,sha256=zzcRg3Jk7JSdPoybMeFzICyS1c1MqCnN7sbd1WF0-II,2880
|
|
@@ -430,13 +430,13 @@ solara/website/public/social/twitter.svg,sha256=3Ub5a29H_NM2g7ed3689rKHU-K66PA8r
|
|
|
430
430
|
solara/website/templates/index.html.j2,sha256=NYBuEHmKeSju-b3apY0h3FEJ-tnGDhrnkY-0cZ92Rro,4358
|
|
431
431
|
solara/widgets/__init__.py,sha256=D3RfEez9dllmst64_nyzzII-NZXoNMEPDnEog4ov3VE,43
|
|
432
432
|
solara/widgets/widgets.py,sha256=wIApVzltULe9WHc4lXxZ7_9-ArwsqoQ7ravfmDsnrt0,2212
|
|
433
|
-
solara/widgets/vue/gridlayout.vue,sha256=
|
|
433
|
+
solara/widgets/vue/gridlayout.vue,sha256=nFZJotdznqI9tUYZ1Elv9OLA0adazxvVZAggMHHCK5E,3427
|
|
434
434
|
solara/widgets/vue/html.vue,sha256=48K5rjp0AdJDeRV6F3nOHW3J0WXPeHn55r5pGClK2fU,112
|
|
435
435
|
solara/widgets/vue/navigator.vue,sha256=SLrzBI0Eiys-7maXA4e8yyD13-O5b4AnCGE9wKuJDHE,3646
|
|
436
|
-
solara/widgets/vue/vegalite.vue,sha256=
|
|
437
|
-
solara_ui-1.
|
|
438
|
-
solara_ui-1.
|
|
439
|
-
solara_ui-1.
|
|
440
|
-
solara_ui-1.
|
|
441
|
-
solara_ui-1.
|
|
442
|
-
solara_ui-1.
|
|
436
|
+
solara/widgets/vue/vegalite.vue,sha256=E3dlfhR-Ol7nqQZN6wCZC_3Tz98CJW0i_EU39mj0XHw,3986
|
|
437
|
+
solara_ui-1.35.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json,sha256=3UhTBQi6z7F7pPjmqXxfddv79c8VGR9H7zStDLp6AwY,115
|
|
438
|
+
solara_ui-1.35.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json,sha256=D9J-rYxAzyD5GOqWvuPjacGUVFHsYtTfZ4FUbRzRvIA,113
|
|
439
|
+
solara_ui-1.35.0.dist-info/METADATA,sha256=_-WkmPpHeaki7f02ZMmtIVuNdUW29OA8_H8mxpz3xYM,7284
|
|
440
|
+
solara_ui-1.35.0.dist-info/WHEEL,sha256=L5_n4Kc1NmrSdVgbp6hdnwwVwBnoYOCnbHBRMD-qNJ4,105
|
|
441
|
+
solara_ui-1.35.0.dist-info/licenses/LICENSE,sha256=fFJUz-CWzZ9nEc4QZKu44jMEoDr5fEW-SiqljKpD82E,1086
|
|
442
|
+
solara_ui-1.35.0.dist-info/RECORD,,
|
|
File without changes
|
{solara_ui-1.34.0.data → solara_ui-1.35.0.data}/data/etc/jupyter/jupyter_server_config.d/solara.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|