solara-ui 1.49.0__py3-none-any.whl → 1.50.0__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 CHANGED
@@ -1,6 +1,6 @@
1
1
  """Build webapps using IPywidgets"""
2
2
 
3
- __version__ = "1.49.0"
3
+ __version__ = "1.50.0"
4
4
  github_url = "https://github.com/widgetti/solara"
5
5
  git_branch = "master"
6
6
 
@@ -36,11 +36,61 @@ def use_change(el: reacton.core.Element, on_value: Callable[[Any], Any], enabled
36
36
  solara.use_effect(add_events, [enabled])
37
37
 
38
38
 
39
+ @overload
39
40
  @solara.component
40
41
  def InputText(
41
42
  label: str,
42
43
  value: Union[str, solara.Reactive[str]] = "",
43
- on_value: Callable[[str], None] = None,
44
+ on_value: Optional[Callable[[str], None]] = ...,
45
+ disabled: bool = ...,
46
+ password: bool = ...,
47
+ continuous_update: bool = ...,
48
+ update_events: list = ...,
49
+ error: Union[bool, str] = ...,
50
+ message: Optional[str] = ...,
51
+ classes: List[str] = ...,
52
+ style: Optional[Union[str, Dict[str, str]]] = ...,
53
+ autofocus: bool = ...,
54
+ dense: bool = ...,
55
+ hide_details: Union[str, bool] = ...,
56
+ placeholder: Optional[str] = ...,
57
+ prefix: Optional[str] = ...,
58
+ suffix: Optional[str] = ...,
59
+ clearable: Literal[False] = ...,
60
+ optional: Literal[False] = ...,
61
+ ) -> reacton.core.ValueElement[vw.TextField, Any]: ...
62
+
63
+
64
+ @overload
65
+ @solara.component
66
+ def InputText(
67
+ label: str,
68
+ value: Union[Optional[str], solara.Reactive[Optional[str]]] = ...,
69
+ on_value: Optional[Callable[[Optional[str]], None]] = ...,
70
+ disabled: bool = ...,
71
+ password: bool = ...,
72
+ continuous_update: bool = ...,
73
+ update_events: list = ...,
74
+ error: Union[bool, str] = ...,
75
+ message: Optional[str] = ...,
76
+ classes: List[str] = ...,
77
+ style: Optional[Union[str, Dict[str, str]]] = ...,
78
+ autofocus: bool = ...,
79
+ dense: bool = ...,
80
+ hide_details: Union[str, bool] = ...,
81
+ placeholder: Optional[str] = ...,
82
+ prefix: Optional[str] = ...,
83
+ suffix: Optional[str] = ...,
84
+ clearable: bool = ...,
85
+ optional: Literal[True] = ...,
86
+ ) -> reacton.core.ValueElement[vw.TextField, Any]: ...
87
+
88
+
89
+ @solara.component
90
+ def InputText(
91
+ label: str,
92
+ value: Union[None, str, solara.Reactive[str], solara.Reactive[Optional[str]]] = "",
93
+ on_value: Union[None, Callable[[Optional[str]], None], Callable[[str], None]] = None,
44
94
  disabled: bool = False,
45
95
  password: bool = False,
46
96
  continuous_update: bool = False,
@@ -50,7 +100,14 @@ def InputText(
50
100
  classes: List[str] = [],
51
101
  style: Optional[Union[str, Dict[str, str]]] = None,
52
102
  autofocus: bool = False,
53
- ):
103
+ dense: bool = False,
104
+ hide_details: Union[str, bool] = "auto",
105
+ placeholder: Optional[str] = None,
106
+ prefix: Optional[str] = None,
107
+ suffix: Optional[str] = None,
108
+ clearable: bool = False,
109
+ optional: bool = False,
110
+ ) -> reacton.core.ValueElement[vw.TextField, Optional[str]]:
54
111
  """Free form text input.
55
112
 
56
113
  ### Basic example:
@@ -107,8 +164,15 @@ def InputText(
107
164
  * `classes`: List of CSS classes to apply to the input.
108
165
  * `style`: CSS style to apply to the input.
109
166
  * `autofocus`: Determines if a component is to be autofocused or not (Default is False). Autofocus will occur during page load and only one component per page can have autofocus active.
167
+ * `dense`: Reduces the input height.
168
+ * `hide_details`: Hides hint and validation errors. When set to 'auto', messages will be rendered only if there's a message (hint, error message, etc) to display.
169
+ * `placeholder`: Sets the input's placeholder text.
170
+ * `prefix`: Displays prefix text.
171
+ * `suffix`: Displays suffix text.
172
+ * `clearable`: Whether the input can be cleared.
173
+ * `optional`: Whether the value can be None. If `clearable=True`, `optional` is forced to True.
110
174
  """
111
- reactive_value = solara.use_reactive(value, on_value)
175
+ reactive_value = solara.use_reactive(value, on_value) # type: ignore
112
176
  del value, on_value
113
177
  style_flat = solara.util._flatten_style(style)
114
178
  classes_flat = solara.util._combine_classes(classes)
@@ -130,12 +194,18 @@ def InputText(
130
194
  on_v_model=on_v_model,
131
195
  label=label,
132
196
  disabled=disabled,
133
- type="password" if password else None,
197
+ type="password" if password else "text",
134
198
  error=bool(error),
135
199
  messages=messages,
136
200
  class_=classes_flat,
137
201
  style_=style_flat,
138
202
  autofocus=autofocus,
203
+ dense=dense,
204
+ hide_details=hide_details,
205
+ placeholder=placeholder if placeholder is not None else "",
206
+ prefix=prefix if prefix is not None else "",
207
+ suffix=suffix if suffix is not None else "",
208
+ clearable=clearable,
139
209
  )
140
210
  use_change(text_field, set_value_cast, enabled=not continuous_update, update_events=update_events)
141
211
  return text_field
@@ -154,6 +224,11 @@ def InputFloat(
154
224
  classes: List[str] = ...,
155
225
  style: Optional[Union[str, Dict[str, str]]] = ...,
156
226
  autofocus: bool = False,
227
+ dense: bool = False,
228
+ hide_details: Union[str, bool] = "auto",
229
+ placeholder: Optional[str] = None,
230
+ prefix: Optional[str] = None,
231
+ suffix: Optional[str] = None,
157
232
  ) -> reacton.core.ValueElement[vw.TextField, Any]: ...
158
233
 
159
234
 
@@ -170,6 +245,11 @@ def InputFloat(
170
245
  classes: List[str] = ...,
171
246
  style: Optional[Union[str, Dict[str, str]]] = ...,
172
247
  autofocus: bool = False,
248
+ dense: bool = False,
249
+ hide_details: Union[str, bool] = "auto",
250
+ placeholder: Optional[str] = None,
251
+ prefix: Optional[str] = None,
252
+ suffix: Optional[str] = None,
173
253
  ) -> reacton.core.ValueElement[vw.TextField, Any]: ...
174
254
 
175
255
 
@@ -185,6 +265,11 @@ def InputFloat(
185
265
  classes: List[str] = [],
186
266
  style: Optional[Union[str, Dict[str, str]]] = None,
187
267
  autofocus: bool = False,
268
+ dense: bool = False,
269
+ hide_details: Union[str, bool] = "auto",
270
+ placeholder: Optional[str] = None,
271
+ prefix: Optional[str] = None,
272
+ suffix: Optional[str] = None,
188
273
  ):
189
274
  """Numeric input (floats).
190
275
 
@@ -218,6 +303,11 @@ def InputFloat(
218
303
  * `classes`: List of CSS classes to apply to the input.
219
304
  * `style`: CSS style to apply to the input.
220
305
  * `autofocus`: Determines if a component is to be autofocused or not (Default is False). Autofocus will occur either during page load, or when the component becomes visible (for example, dialog being opened). Only one component per page should have autofocus on each such event.
306
+ * `dense`: Reduces the input height.
307
+ * `hide_details`: Hides hint and validation errors. When set to 'auto', messages will be rendered only if there's a message (hint, error message, etc) to display.
308
+ * `placeholder`: Sets the input's placeholder text.
309
+ * `prefix`: Displays prefix text.
310
+ * `suffix`: Displays suffix text.
221
311
 
222
312
  """
223
313
 
@@ -237,15 +327,20 @@ def InputFloat(
237
327
  return _InputNumeric(
238
328
  str_to_float,
239
329
  label=label,
240
- value=value,
241
- on_value=on_value,
330
+ value=value, # type: ignore
331
+ on_value=on_value, # type: ignore
242
332
  disabled=disabled,
243
333
  continuous_update=continuous_update,
244
334
  clearable=clearable,
245
335
  classes=classes,
246
336
  style=style,
247
337
  autofocus=autofocus,
248
- )
338
+ dense=dense,
339
+ hide_details=hide_details,
340
+ placeholder=placeholder,
341
+ prefix=prefix,
342
+ suffix=suffix,
343
+ ) # type: ignore
249
344
 
250
345
 
251
346
  @overload
@@ -261,6 +356,11 @@ def InputInt(
261
356
  classes: List[str] = ...,
262
357
  style: Optional[Union[str, Dict[str, str]]] = ...,
263
358
  autofocus: bool = False,
359
+ dense: bool = False,
360
+ hide_details: Union[str, bool] = "auto",
361
+ placeholder: Optional[str] = None,
362
+ prefix: Optional[str] = None,
363
+ suffix: Optional[str] = None,
264
364
  ) -> reacton.core.ValueElement[vw.TextField, Any]: ...
265
365
 
266
366
 
@@ -277,6 +377,11 @@ def InputInt(
277
377
  classes: List[str] = ...,
278
378
  style: Optional[Union[str, Dict[str, str]]] = ...,
279
379
  autofocus: bool = False,
380
+ dense: bool = False,
381
+ hide_details: Union[str, bool] = "auto",
382
+ placeholder: Optional[str] = None,
383
+ prefix: Optional[str] = None,
384
+ suffix: Optional[str] = None,
280
385
  ) -> reacton.core.ValueElement[vw.TextField, Any]: ...
281
386
 
282
387
 
@@ -292,6 +397,11 @@ def InputInt(
292
397
  classes: List[str] = [],
293
398
  style: Optional[Union[str, Dict[str, str]]] = None,
294
399
  autofocus: bool = False,
400
+ dense: bool = False,
401
+ hide_details: Union[str, bool] = "auto",
402
+ placeholder: Optional[str] = None,
403
+ prefix: Optional[str] = None,
404
+ suffix: Optional[str] = None,
295
405
  ):
296
406
  """Numeric input (integers).
297
407
 
@@ -324,6 +434,11 @@ def InputInt(
324
434
  * `classes`: List of CSS classes to apply to the input.
325
435
  * `style`: CSS style to apply to the input.
326
436
  * `autofocus`: Determines if a component is to be autofocused or not (Default is False). Autofocus will occur either during page load, or when the component becomes visible (for example, dialog being opened). Only one component per page should have autofocus on each such event.
437
+ * `dense`: Reduces the input height.
438
+ * `hide_details`: Hides hint and validation errors. When set to 'auto', messages will be rendered only if there's a message (hint, error message, etc) to display.
439
+ * `placeholder`: Sets the input's placeholder text.
440
+ * `prefix`: Displays prefix text.
441
+ * `suffix`: Displays suffix text.
327
442
  """
328
443
 
329
444
  def str_to_int(value: Optional[str]):
@@ -341,15 +456,20 @@ def InputInt(
341
456
  return _InputNumeric(
342
457
  str_to_int,
343
458
  label=label,
344
- value=value,
345
- on_value=on_value,
459
+ value=value, # type: ignore
460
+ on_value=on_value, # type: ignore
346
461
  disabled=disabled,
347
462
  continuous_update=continuous_update,
348
463
  clearable=clearable,
349
464
  classes=classes,
350
465
  style=style,
351
466
  autofocus=autofocus,
352
- )
467
+ dense=dense,
468
+ hide_details=hide_details,
469
+ placeholder=placeholder,
470
+ prefix=prefix,
471
+ suffix=suffix,
472
+ ) # type: ignore
353
473
 
354
474
 
355
475
  def _use_input_type(
@@ -360,7 +480,7 @@ def _use_input_type(
360
480
  ):
361
481
  reactive_value = solara.use_reactive(input_value, on_value) # type: ignore
362
482
  del input_value, on_value
363
- string_value, set_string_value = solara.use_state(stringify(reactive_value.value) if reactive_value.value is not None else None)
483
+ string_value, set_string_value = solara.use_state(stringify(reactive_value.value) if reactive_value.value is not None else None) # type: ignore
364
484
  # Use a ref to make sure sync_back_input_value() does not get a stale string_value
365
485
  string_value_ref = solara.use_ref(string_value)
366
486
  string_value_ref.current = string_value
@@ -368,14 +488,14 @@ def _use_input_type(
368
488
  error_message = cast(Union[str, None], None)
369
489
 
370
490
  try:
371
- reactive_value.set(parse(string_value))
491
+ reactive_value.set(parse(string_value)) # type: ignore
372
492
  except ValueError as e:
373
493
  error_message = str(e.args[0])
374
494
 
375
495
  def sync_back_input_value():
376
496
  # Make sure we update string_value when the effect is rerun,
377
497
  # Since the parsing & stringigying functions might have changed
378
- set_string_value(stringify(reactive_value.value) if reactive_value.value is not None else None)
498
+ set_string_value(stringify(reactive_value.value) if reactive_value.value is not None else None) # type: ignore
379
499
 
380
500
  def on_external_value_change(new_value: Optional[T]):
381
501
  new_string_value = stringify(new_value)
@@ -388,7 +508,7 @@ def _use_input_type(
388
508
  if new_value != parse(string_value_ref.current):
389
509
  set_string_value(new_string_value)
390
510
 
391
- return reactive_value.subscribe(on_external_value_change)
511
+ return reactive_value.subscribe(on_external_value_change) # type: ignore
392
512
 
393
513
  solara.use_effect(sync_back_input_value, [reactive_value, parse, stringify])
394
514
 
@@ -407,6 +527,11 @@ def _InputNumeric(
407
527
  classes: List[str] = [],
408
528
  style: Optional[Union[str, Dict[str, str]]] = None,
409
529
  autofocus: bool = False,
530
+ dense: bool = False,
531
+ hide_details: Union[str, bool] = "auto",
532
+ placeholder: Optional[str] = None,
533
+ prefix: Optional[str] = None,
534
+ suffix: Optional[str] = None,
410
535
  ):
411
536
  """Numeric input.
412
537
 
@@ -420,6 +545,12 @@ def _InputNumeric(
420
545
  * `classes`: List of CSS classes to apply to the input.
421
546
  * `style`: CSS style to apply to the input.
422
547
  * `autofocus`: Determines if a component is to be autofocused or not (Default is False). Autofocus will occur either during page load, or when the component becomes visible (for example, dialog being opened). Only one component per page should have autofocus on each such event.
548
+ * `dense`: Reduces the input height.
549
+ * `hide_details`: Hides hint and validation errors. When set to 'auto', messages will be rendered only if there's a message (hint, error message, etc) to display.
550
+ * `placeholder`: Sets the input's placeholder text.
551
+ * `prefix`: Displays prefix text.
552
+ * `suffix`: Displays suffix text.
553
+ * `clearable`: Whether the input can be cleared.
423
554
  """
424
555
  style_flat = solara.util._flatten_style(style)
425
556
  classes_flat = solara.util._combine_classes(classes)
@@ -445,12 +576,16 @@ def _InputNumeric(
445
576
  # we are not using the number type, since we cannot validate invalid input
446
577
  # see https://stackoverflow.blog/2022/12/26/why-the-number-input-is-the-worst-input/
447
578
  # type="number",
448
- hide_details=True,
579
+ hide_details=hide_details,
449
580
  clearable=clearable,
450
581
  error=bool(error),
451
582
  class_=classes_flat,
452
583
  style_=style_flat,
453
584
  autofocus=autofocus,
585
+ dense=dense,
586
+ placeholder=placeholder if placeholder is not None else "",
587
+ prefix=prefix if prefix is not None else "",
588
+ suffix=suffix if suffix is not None else "",
454
589
  )
455
590
  use_change(text_field, set_value_cast, enabled=not continuous_update)
456
591
  return text_field
@@ -16,6 +16,11 @@ def InputTextArea(
16
16
  message: Optional[str] = None,
17
17
  auto_grow: bool = True,
18
18
  rows: int = 5,
19
+ dense: bool = False,
20
+ hide_details: Union[str, bool] = "auto",
21
+ placeholder: Optional[str] = None,
22
+ prefix: Optional[str] = None,
23
+ suffix: Optional[str] = None,
19
24
  ):
20
25
  r"""Free form text area input.
21
26
 
@@ -53,6 +58,11 @@ def InputTextArea(
53
58
  * `message`: Message to show below the input. If `error` is a string, this will be ignored.
54
59
  * `classes`: List of CSS classes to apply to the input.
55
60
  * `style`: CSS style to apply to the input.
61
+ * `dense`: Reduces the input height.
62
+ * `hide_details`: Hides hint and validation errors. When set to 'auto', messages will be rendered only if there's a message (hint, error message, counter value etc) to display.
63
+ * `placeholder`: Sets the input's placeholder text.
64
+ * `prefix`: Displays prefix text.
65
+ * `suffix`: Displays suffix text.
56
66
  """
57
67
  reactive_value = solara.use_reactive(value, on_value)
58
68
  del value, on_value
@@ -77,10 +87,14 @@ def InputTextArea(
77
87
  error=bool(error),
78
88
  messages=messages,
79
89
  solo=True,
80
- hide_details=True,
90
+ hide_details=hide_details,
81
91
  outlined=True,
82
92
  rows=rows,
83
93
  auto_grow=auto_grow,
94
+ dense=dense,
95
+ placeholder=placeholder if placeholder is not None else "",
96
+ prefix=prefix if prefix is not None else "",
97
+ suffix=suffix if suffix is not None else "",
84
98
  )
85
99
  use_change(text_area, set_value_cast, enabled=not continuous_update, update_events=update_events)
86
100
  return text_area
@@ -46,6 +46,12 @@ def InputDate(
46
46
  date_picker_type: str = "date",
47
47
  min_date: Optional[str] = None,
48
48
  max_date: Optional[str] = None,
49
+ dense: bool = False,
50
+ hide_details: Union[str, bool] = "auto",
51
+ placeholder: Optional[str] = None,
52
+ prefix: Optional[str] = None,
53
+ suffix: Optional[str] = None,
54
+ clearable: bool = False,
49
55
  ):
50
56
  """
51
57
  Show a textfield, which when clicked, opens a datepicker. The input date should be of type `datetime.date`.
@@ -84,6 +90,12 @@ def InputDate(
84
90
  * date_picker_type: Sets the type of the datepicker. Use `"date"` for date selection or `"month"` for month selection. Defaults to `"date"`.
85
91
  * min_date: Earliest allowed date/month (ISO 8601 format). If not specified, there is no limit.
86
92
  * max_date: Latest allowed date/month (ISO 8601 format). If not specified, there is no limit.
93
+ * dense: Reduces the input height.
94
+ * hide_details: Hides hint and validation errors. When set to 'auto', messages will be rendered only if there's a message (hint, error message, counter value etc) to display.
95
+ * placeholder: Sets the input's placeholder text.
96
+ * prefix: Displays prefix text.
97
+ * suffix: Displays suffix text.
98
+ * clearable: Whether the input can be cleared.
87
99
  """
88
100
  value_reactive = solara.use_reactive(value, on_value) # type: ignore
89
101
  del value, on_value
@@ -142,6 +154,12 @@ def InputDate(
142
154
  error=bool(error_message),
143
155
  style_="min-width: 290px;" + style_flat,
144
156
  class_=", ".join(classes) if classes else "",
157
+ dense=dense,
158
+ hide_details=hide_details,
159
+ placeholder=placeholder if placeholder is not None else "",
160
+ prefix=prefix if prefix is not None else "",
161
+ suffix=suffix if suffix is not None else "",
162
+ clearable=clearable,
145
163
  )
146
164
 
147
165
  use_close_menu(input, datepicker_is_open)
@@ -157,8 +175,8 @@ def InputDate(
157
175
  on_v_model=set_date_cast,
158
176
  first_day_of_week=first_day_of_the_week,
159
177
  style_="width: 100%;",
160
- max=max_date,
161
- min=min_date,
178
+ max=max_date, # type: ignore
179
+ min=min_date, # type: ignore
162
180
  type=date_picker_type,
163
181
  ):
164
182
  if len(children) > 0:
@@ -182,6 +200,11 @@ def InputDateRange(
182
200
  min_date: Optional[str] = None,
183
201
  max_date: Optional[str] = None,
184
202
  sort: Optional[bool] = False,
203
+ dense: bool = False,
204
+ hide_details: Union[str, bool] = "auto",
205
+ placeholder: Optional[str] = None,
206
+ prefix: Optional[str] = None,
207
+ suffix: Optional[str] = None,
185
208
  ):
186
209
  """
187
210
  Show a textfield, which when clicked, opens a datepicker that allows users to select a range of dates by choosing a starting and ending date.
@@ -224,6 +247,11 @@ def InputDateRange(
224
247
  * max_date: Latest allowed date/month (ISO 8601 format). If not specified, there is no limit.
225
248
  * sort: If True, selected dates will be sorted in ascending order, regardless of the order they were picked. If False, preserves the order the
226
249
  dates were selected.
250
+ * dense: Reduces the input height.
251
+ * hide_details: Hides hint and validation errors. When set to 'auto', messages will be rendered only if there's a message (hint, error message, counter value etc) to display.
252
+ * placeholder: Sets the input's placeholder text.
253
+ * prefix: Displays prefix text.
254
+ * suffix: Displays suffix text.
227
255
 
228
256
  ## A More Advanced Example
229
257
 
@@ -313,6 +341,11 @@ def InputDateRange(
313
341
  style_="min-width: 290px;" + style_flat,
314
342
  readonly=True,
315
343
  class_=", ".join(classes) if classes else "",
344
+ dense=dense,
345
+ hide_details=hide_details,
346
+ placeholder=placeholder if placeholder is not None else "",
347
+ prefix=prefix if prefix is not None else "",
348
+ suffix=suffix if suffix is not None else "",
316
349
  )
317
350
 
318
351
  # We include closing on tab in case users want to skip the field with tab
@@ -330,8 +363,8 @@ def InputDateRange(
330
363
  range=True,
331
364
  first_day_of_week=first_day_of_the_week,
332
365
  style_="width: 100%;",
333
- max=max_date,
334
- min=min_date,
366
+ max=max_date, # type: ignore
367
+ min=min_date, # type: ignore
335
368
  type=date_picker_type,
336
369
  ):
337
370
  if len(children) > 0:
@@ -638,6 +638,13 @@ def readyz(request: Request):
638
638
  return JSONResponse(json, status_code=status)
639
639
 
640
640
 
641
+ def _sanitize_for_json(value):
642
+ """Convert infinite values to None for JSON serialization."""
643
+ if isinstance(value, (int, float)) and math.isinf(value):
644
+ return None
645
+ return value
646
+
647
+
641
648
  async def resourcez(request: Request):
642
649
  _ensure_limiter()
643
650
  assert limiter is not None
@@ -664,16 +671,16 @@ async def resourcez(request: Request):
664
671
  "has_disconnected": len([k for k in contexts if kernel_context.PageStatus.DISCONNECTED in k.page_status.values()]),
665
672
  "has_closed": len([k for k in contexts if kernel_context.PageStatus.CLOSED in k.page_status.values()]),
666
673
  "limiter": {
667
- "total_tokens": limiter.total_tokens,
668
- "borrowed_tokens": limiter.borrowed_tokens,
669
- "available_tokens": limiter.available_tokens,
674
+ "total_tokens": _sanitize_for_json(limiter.total_tokens),
675
+ "borrowed_tokens": _sanitize_for_json(limiter.borrowed_tokens),
676
+ "available_tokens": _sanitize_for_json(limiter.available_tokens),
670
677
  },
671
678
  }
672
679
  default_limiter = anyio.to_thread.current_default_thread_limiter()
673
680
  data["anyio.to_thread.limiter"] = {
674
- "total_tokens": default_limiter.total_tokens,
675
- "borrowed_tokens": default_limiter.borrowed_tokens,
676
- "available_tokens": default_limiter.available_tokens,
681
+ "total_tokens": _sanitize_for_json(default_limiter.total_tokens),
682
+ "borrowed_tokens": _sanitize_for_json(default_limiter.borrowed_tokens),
683
+ "available_tokens": _sanitize_for_json(default_limiter.available_tokens),
677
684
  }
678
685
  if verbose:
679
686
  try:
@@ -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.49.0-py2.py3-none-any.whl", keep_going=True)
122
+ await micropip.install("/wheels/solara-1.50.0-py2.py3-none-any.whl", keep_going=True)
123
123
  import solara
124
124
 
125
125
  el = solara.Warning("lala")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: solara-ui
3
- Version: 1.49.0
3
+ Version: 1.50.0
4
4
  Dynamic: Summary
5
5
  Project-URL: Home, https://www.github.com/widgetti/solara
6
6
  Project-URL: Documentation, https://solara.dev
@@ -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=wkvVNU53A8t1_3SujgqIpjFmcWrnOx_JyZzVmpAcpm8,3647
3
+ solara/__init__.py,sha256=sAwo5ilYgvykEmTDawkWICtbv2z1XUaEy1WglDsBrvM,3647
4
4
  solara/__main__.py,sha256=pm79jfba-0ZapLR0PtwZfMeiTHrLz8kEt79EygRyXxQ,24828
5
5
  solara/_stores.py,sha256=N2Ec-61XNFXwigBx8f5QYPx7gDXenCOBdmLPXiJB45E,12320
6
6
  solara/alias.py,sha256=9vfLzud77NP8in3OID9b5mmIO8NyrnFjN2_aE0lSb1k,216
@@ -52,8 +52,8 @@ solara/components/head.py,sha256=QZRTbwaUH0trfce3ntEcOqmLjw74CbSHpuMt9gGj7oA,648
52
52
  solara/components/head_tag.py,sha256=xPj_ug0TUAZF4yN6ypKlmLcsHORIHU8zfIZgEDNi4PQ,1591
53
53
  solara/components/head_tag.vue,sha256=vw0PJzAajq1XbyKhrTakfzJGF_beXAjupkFXPKJbVDo,1642
54
54
  solara/components/image.py,sha256=o44iu0_wv3cPKnKv47mw10d2f67vuBaW2Jhs775hNAM,4503
55
- solara/components/input.py,sha256=9oO9FNsKO89tz34Uy0r1wODc1LDf8q4nfQfhYp22_UA,16244
56
- solara/components/input_text_area.py,sha256=iExJf5Ok6XU25O0fB_jaj3nZTsDKmREa76dduhR2liI,3008
55
+ solara/components/input.py,sha256=xvnxbT_MSa-xU3dG_F9UGlvXosUG5Yk5d7RYobKEZBc,21875
56
+ solara/components/input_text_area.py,sha256=TPsq2B3Dg1X_u0gXM6it259gz_MViAfeHXAAtOqZI9U,3742
57
57
  solara/components/link.py,sha256=bYXVencL9hjBcrGniXdE0JlSzBE9bkUFFmd4apfYhjk,1842
58
58
  solara/components/markdown.py,sha256=PQqa0yv95qPJWdePnBZulnOkQfsXdMVkLiyy_ANop6A,14511
59
59
  solara/components/markdown_editor.py,sha256=egsCsxeAuot2oolSLt_XjTUmg6S4YCtArQUIbQ9YC6E,874
@@ -90,7 +90,7 @@ solara/lab/components/__init__.py,sha256=u723AESIHyInjD_7LaonMSheo3-6a-LOmrk6NGk
90
90
  solara/lab/components/chat.py,sha256=m2hW4CGkTjydN5p_CL_HAwtkl6t14psoSZrwlSMRvJc,9305
91
91
  solara/lab/components/confirmation_dialog.py,sha256=V48iN3SovPLLuYI0HVNGlSJ1jfyeCOK2BDFhLW3gg9Y,5822
92
92
  solara/lab/components/cross_filter.py,sha256=qJZTRDMCNGy8UuHzuDyWuGA_dU4pI8lzSCDw0hmN8I4,186
93
- solara/lab/components/input_date.py,sha256=RtAZCeq6A_56Js6MLdA3bjPfCHNIwHltexxh3-4A2mg,13900
93
+ solara/lab/components/input_date.py,sha256=ivbZZWr5SGF2W-TTwdM0WwtyeC2V3eHSZ-EKQCk36XI,15575
94
94
  solara/lab/components/input_time.py,sha256=Lko7EhN6Ny68aiszwCu8dBVhAYXpLo2W0jLe1alU6EU,5399
95
95
  solara/lab/components/menu.py,sha256=Ig2icuftK5m27k5SUO-98hn6S6Ng4g6s4p_g5ccSkTw,5962
96
96
  solara/lab/components/menu.vue,sha256=wiHv6NP4LtCxdYHl62oz_3DiFoVzeRBdgL3be3p2bPo,1319
@@ -120,7 +120,7 @@ solara/server/reload.py,sha256=BBH7QhrV1-e9RVyNE3uz1oPj1DagC3t_XSqGPNz0nJE,9747
120
120
  solara/server/server.py,sha256=9NQcg_ncrGPQUDs50-jJGdzhlub3G3dsgcBjxqrIxX0,17120
121
121
  solara/server/settings.py,sha256=tXXpoK5CBBDbuRSMiert6UKpzMQaDbsBfyoX1Hk8iLM,7599
122
122
  solara/server/shell.py,sha256=eLrpTAw3j_1pU-2S7_Jzd4xkoSs_CA7Nv7w0Q7IVLUM,9333
123
- solara/server/starlette.py,sha256=wchutafZy2V9lBaX3ZFfSGcARDOw6K2sti3D0XhnQGU,32616
123
+ solara/server/starlette.py,sha256=gEBSJf-jZQ6Ep3HKIkcZNadpxgCp6VWdvlq67TjxJQ8,32934
124
124
  solara/server/telemetry.py,sha256=GPKGA5kCIqJb76wgxQ2_U2uV_s0r-1tKqv-GVxo5hs8,6038
125
125
  solara/server/threaded.py,sha256=k9k461md4MxEFX-RLit5RpVRPFlQNwr-qp5pprT8JB0,2347
126
126
  solara/server/utils.py,sha256=1Pa6HF8O1jsxDBcCWlVfP_9jFiUIQgqiIhT4oJ-iUmo,1207
@@ -146,7 +146,7 @@ solara/server/static/highlight-dark.css,sha256=xO8-vta9vG4s1OfJNHXWqiLWzx_gM03jo
146
146
  solara/server/static/highlight.css,sha256=k8ZdT5iwrGQ5tXTQHAXuxvZrSUq3kwCdEpy3mlFoZjs,2637
147
147
  solara/server/static/main-vuetify.js,sha256=R3qM4xMlstMpRUdRaul78p34z_Av2ONSTXksg2V9TqQ,9503
148
148
  solara/server/static/main.js,sha256=mcx4JNQ4Lg4pNdUIqMoZos1mZyYFS48yd_JNFFJUqIE,5679
149
- solara/server/static/solara_bootstrap.py,sha256=1du6V59LpN8Al8-Lrir3kR3_uG0HpcbYB25mq0hRDks,3195
149
+ solara/server/static/solara_bootstrap.py,sha256=cIh-4dt_etWJrcPHobnu8SkhQ1PFrzzFYwXQ1kP0ZRc,3195
150
150
  solara/server/static/sun.svg,sha256=jEKBAGCr7b9zNYv0VUb7lMWKjnU2dX69_Ye_DZWGXJI,6855
151
151
  solara/server/static/webworker.js,sha256=cjAFz7-SygStHJnYlJUlJs-gE_7YQeQ-WBDcmKYyjvo,1372
152
152
  solara/server/templates/index.html.j2,sha256=JXQo1M-STFHLBOFetgG7509cAq8xUP0VAEtYDzz35fY,31
@@ -456,9 +456,9 @@ solara/widgets/vue/gridlayout.vue,sha256=LZk-YlqM7nv_7Y5TTq2xqfH1j2SLP1QOH5eiz7G
456
456
  solara/widgets/vue/html.vue,sha256=48K5rjp0AdJDeRV6F3nOHW3J0WXPeHn55r5pGClK2fU,112
457
457
  solara/widgets/vue/navigator.vue,sha256=7fkX-4_YSnnMIPUMKMvQVVEzrmhY9BFAYvHMqZqTXpI,4790
458
458
  solara/widgets/vue/vegalite.vue,sha256=zhocRsUCNIRQCEbD16er5sYnuHU0YThatRHnorA3P18,4596
459
- solara_ui-1.49.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json,sha256=3UhTBQi6z7F7pPjmqXxfddv79c8VGR9H7zStDLp6AwY,115
460
- solara_ui-1.49.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json,sha256=D9J-rYxAzyD5GOqWvuPjacGUVFHsYtTfZ4FUbRzRvIA,113
461
- solara_ui-1.49.0.dist-info/METADATA,sha256=NVpNXdQ7OF1dnnWLInqm9L7OFq-trlhtFgiF4AHgimE,7459
462
- solara_ui-1.49.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
463
- solara_ui-1.49.0.dist-info/licenses/LICENSE,sha256=fFJUz-CWzZ9nEc4QZKu44jMEoDr5fEW-SiqljKpD82E,1086
464
- solara_ui-1.49.0.dist-info/RECORD,,
459
+ solara_ui-1.50.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json,sha256=3UhTBQi6z7F7pPjmqXxfddv79c8VGR9H7zStDLp6AwY,115
460
+ solara_ui-1.50.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json,sha256=D9J-rYxAzyD5GOqWvuPjacGUVFHsYtTfZ4FUbRzRvIA,113
461
+ solara_ui-1.50.0.dist-info/METADATA,sha256=r0DTlg-HfHyjB5IT76jfwQZeeIIf3Kf4TswqHH6z5mI,7459
462
+ solara_ui-1.50.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
463
+ solara_ui-1.50.0.dist-info/licenses/LICENSE,sha256=fFJUz-CWzZ9nEc4QZKu44jMEoDr5fEW-SiqljKpD82E,1086
464
+ solara_ui-1.50.0.dist-info/RECORD,,