streamlit-nightly 1.43.2.dev20250307__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.
Files changed (563) hide show
  1. streamlit/__init__.py +306 -0
  2. streamlit/__main__.py +20 -0
  3. streamlit/auth_util.py +218 -0
  4. streamlit/cli_util.py +105 -0
  5. streamlit/column_config.py +56 -0
  6. streamlit/commands/__init__.py +13 -0
  7. streamlit/commands/echo.py +126 -0
  8. streamlit/commands/execution_control.py +238 -0
  9. streamlit/commands/experimental_query_params.py +169 -0
  10. streamlit/commands/logo.py +189 -0
  11. streamlit/commands/navigation.py +385 -0
  12. streamlit/commands/page_config.py +311 -0
  13. streamlit/components/__init__.py +13 -0
  14. streamlit/components/lib/__init__.py +13 -0
  15. streamlit/components/lib/local_component_registry.py +84 -0
  16. streamlit/components/types/__init__.py +13 -0
  17. streamlit/components/types/base_component_registry.py +99 -0
  18. streamlit/components/types/base_custom_component.py +150 -0
  19. streamlit/components/v1/__init__.py +31 -0
  20. streamlit/components/v1/component_arrow.py +141 -0
  21. streamlit/components/v1/component_registry.py +130 -0
  22. streamlit/components/v1/components.py +38 -0
  23. streamlit/components/v1/custom_component.py +243 -0
  24. streamlit/config.py +1513 -0
  25. streamlit/config_option.py +311 -0
  26. streamlit/config_util.py +177 -0
  27. streamlit/connections/__init__.py +28 -0
  28. streamlit/connections/base_connection.py +174 -0
  29. streamlit/connections/snowflake_connection.py +562 -0
  30. streamlit/connections/snowpark_connection.py +213 -0
  31. streamlit/connections/sql_connection.py +425 -0
  32. streamlit/connections/util.py +97 -0
  33. streamlit/cursor.py +210 -0
  34. streamlit/dataframe_util.py +1416 -0
  35. streamlit/delta_generator.py +602 -0
  36. streamlit/delta_generator_singletons.py +204 -0
  37. streamlit/deprecation_util.py +209 -0
  38. streamlit/development.py +21 -0
  39. streamlit/elements/__init__.py +13 -0
  40. streamlit/elements/alert.py +234 -0
  41. streamlit/elements/arrow.py +962 -0
  42. streamlit/elements/balloons.py +47 -0
  43. streamlit/elements/bokeh_chart.py +133 -0
  44. streamlit/elements/code.py +114 -0
  45. streamlit/elements/deck_gl_json_chart.py +546 -0
  46. streamlit/elements/dialog_decorator.py +267 -0
  47. streamlit/elements/doc_string.py +558 -0
  48. streamlit/elements/empty.py +130 -0
  49. streamlit/elements/exception.py +331 -0
  50. streamlit/elements/form.py +354 -0
  51. streamlit/elements/graphviz_chart.py +150 -0
  52. streamlit/elements/heading.py +302 -0
  53. streamlit/elements/html.py +105 -0
  54. streamlit/elements/iframe.py +191 -0
  55. streamlit/elements/image.py +196 -0
  56. streamlit/elements/json.py +139 -0
  57. streamlit/elements/layouts.py +879 -0
  58. streamlit/elements/lib/__init__.py +13 -0
  59. streamlit/elements/lib/built_in_chart_utils.py +1157 -0
  60. streamlit/elements/lib/color_util.py +263 -0
  61. streamlit/elements/lib/column_config_utils.py +542 -0
  62. streamlit/elements/lib/column_types.py +2188 -0
  63. streamlit/elements/lib/dialog.py +147 -0
  64. streamlit/elements/lib/dicttools.py +154 -0
  65. streamlit/elements/lib/event_utils.py +37 -0
  66. streamlit/elements/lib/file_uploader_utils.py +66 -0
  67. streamlit/elements/lib/form_utils.py +77 -0
  68. streamlit/elements/lib/image_utils.py +441 -0
  69. streamlit/elements/lib/js_number.py +105 -0
  70. streamlit/elements/lib/mutable_status_container.py +183 -0
  71. streamlit/elements/lib/options_selector_utils.py +250 -0
  72. streamlit/elements/lib/pandas_styler_utils.py +274 -0
  73. streamlit/elements/lib/policies.py +194 -0
  74. streamlit/elements/lib/streamlit_plotly_theme.py +207 -0
  75. streamlit/elements/lib/subtitle_utils.py +176 -0
  76. streamlit/elements/lib/utils.py +250 -0
  77. streamlit/elements/map.py +508 -0
  78. streamlit/elements/markdown.py +277 -0
  79. streamlit/elements/media.py +793 -0
  80. streamlit/elements/metric.py +301 -0
  81. streamlit/elements/plotly_chart.py +546 -0
  82. streamlit/elements/progress.py +156 -0
  83. streamlit/elements/pyplot.py +194 -0
  84. streamlit/elements/snow.py +47 -0
  85. streamlit/elements/spinner.py +113 -0
  86. streamlit/elements/text.py +76 -0
  87. streamlit/elements/toast.py +98 -0
  88. streamlit/elements/vega_charts.py +1984 -0
  89. streamlit/elements/widgets/__init__.py +13 -0
  90. streamlit/elements/widgets/audio_input.py +310 -0
  91. streamlit/elements/widgets/button.py +1123 -0
  92. streamlit/elements/widgets/button_group.py +1008 -0
  93. streamlit/elements/widgets/camera_input.py +263 -0
  94. streamlit/elements/widgets/chat.py +647 -0
  95. streamlit/elements/widgets/checkbox.py +352 -0
  96. streamlit/elements/widgets/color_picker.py +265 -0
  97. streamlit/elements/widgets/data_editor.py +983 -0
  98. streamlit/elements/widgets/file_uploader.py +486 -0
  99. streamlit/elements/widgets/multiselect.py +338 -0
  100. streamlit/elements/widgets/number_input.py +545 -0
  101. streamlit/elements/widgets/radio.py +407 -0
  102. streamlit/elements/widgets/select_slider.py +437 -0
  103. streamlit/elements/widgets/selectbox.py +366 -0
  104. streamlit/elements/widgets/slider.py +880 -0
  105. streamlit/elements/widgets/text_widgets.py +628 -0
  106. streamlit/elements/widgets/time_widgets.py +970 -0
  107. streamlit/elements/write.py +574 -0
  108. streamlit/emojis.py +34 -0
  109. streamlit/env_util.py +61 -0
  110. streamlit/error_util.py +105 -0
  111. streamlit/errors.py +452 -0
  112. streamlit/external/__init__.py +13 -0
  113. streamlit/external/langchain/__init__.py +23 -0
  114. streamlit/external/langchain/streamlit_callback_handler.py +406 -0
  115. streamlit/file_util.py +247 -0
  116. streamlit/git_util.py +173 -0
  117. streamlit/hello/__init__.py +13 -0
  118. streamlit/hello/animation_demo.py +82 -0
  119. streamlit/hello/dataframe_demo.py +71 -0
  120. streamlit/hello/hello.py +37 -0
  121. streamlit/hello/mapping_demo.py +114 -0
  122. streamlit/hello/plotting_demo.py +55 -0
  123. streamlit/hello/streamlit_app.py +55 -0
  124. streamlit/hello/utils.py +28 -0
  125. streamlit/logger.py +130 -0
  126. streamlit/material_icon_names.py +25 -0
  127. streamlit/navigation/__init__.py +13 -0
  128. streamlit/navigation/page.py +302 -0
  129. streamlit/net_util.py +125 -0
  130. streamlit/platform.py +33 -0
  131. streamlit/proto/Alert_pb2.py +29 -0
  132. streamlit/proto/Alert_pb2.pyi +90 -0
  133. streamlit/proto/AppPage_pb2.py +27 -0
  134. streamlit/proto/AppPage_pb2.pyi +64 -0
  135. streamlit/proto/ArrowNamedDataSet_pb2.py +28 -0
  136. streamlit/proto/ArrowNamedDataSet_pb2.pyi +57 -0
  137. streamlit/proto/ArrowVegaLiteChart_pb2.py +29 -0
  138. streamlit/proto/ArrowVegaLiteChart_pb2.pyi +84 -0
  139. streamlit/proto/Arrow_pb2.py +33 -0
  140. streamlit/proto/Arrow_pb2.pyi +188 -0
  141. streamlit/proto/AudioInput_pb2.py +28 -0
  142. streamlit/proto/AudioInput_pb2.pyi +58 -0
  143. streamlit/proto/Audio_pb2.py +27 -0
  144. streamlit/proto/Audio_pb2.pyi +58 -0
  145. streamlit/proto/AuthRedirect_pb2.py +27 -0
  146. streamlit/proto/AuthRedirect_pb2.pyi +41 -0
  147. streamlit/proto/AutoRerun_pb2.py +27 -0
  148. streamlit/proto/AutoRerun_pb2.pyi +45 -0
  149. streamlit/proto/BackMsg_pb2.py +29 -0
  150. streamlit/proto/BackMsg_pb2.pyi +105 -0
  151. streamlit/proto/Balloons_pb2.py +27 -0
  152. streamlit/proto/Balloons_pb2.pyi +43 -0
  153. streamlit/proto/Block_pb2.py +53 -0
  154. streamlit/proto/Block_pb2.pyi +322 -0
  155. streamlit/proto/BokehChart_pb2.py +27 -0
  156. streamlit/proto/BokehChart_pb2.pyi +49 -0
  157. streamlit/proto/ButtonGroup_pb2.py +36 -0
  158. streamlit/proto/ButtonGroup_pb2.pyi +169 -0
  159. streamlit/proto/Button_pb2.py +27 -0
  160. streamlit/proto/Button_pb2.pyi +71 -0
  161. streamlit/proto/CameraInput_pb2.py +28 -0
  162. streamlit/proto/CameraInput_pb2.pyi +58 -0
  163. streamlit/proto/ChatInput_pb2.py +31 -0
  164. streamlit/proto/ChatInput_pb2.pyi +111 -0
  165. streamlit/proto/Checkbox_pb2.py +30 -0
  166. streamlit/proto/Checkbox_pb2.pyi +90 -0
  167. streamlit/proto/ClientState_pb2.py +30 -0
  168. streamlit/proto/ClientState_pb2.pyi +90 -0
  169. streamlit/proto/Code_pb2.py +27 -0
  170. streamlit/proto/Code_pb2.pyi +55 -0
  171. streamlit/proto/ColorPicker_pb2.py +28 -0
  172. streamlit/proto/ColorPicker_pb2.pyi +67 -0
  173. streamlit/proto/Common_pb2.py +51 -0
  174. streamlit/proto/Common_pb2.pyi +293 -0
  175. streamlit/proto/Components_pb2.py +35 -0
  176. streamlit/proto/Components_pb2.pyi +172 -0
  177. streamlit/proto/DataFrame_pb2.py +56 -0
  178. streamlit/proto/DataFrame_pb2.pyi +397 -0
  179. streamlit/proto/DateInput_pb2.py +28 -0
  180. streamlit/proto/DateInput_pb2.pyi +83 -0
  181. streamlit/proto/DeckGlJsonChart_pb2.py +29 -0
  182. streamlit/proto/DeckGlJsonChart_pb2.pyi +102 -0
  183. streamlit/proto/Delta_pb2.py +31 -0
  184. streamlit/proto/Delta_pb2.pyi +74 -0
  185. streamlit/proto/DocString_pb2.py +29 -0
  186. streamlit/proto/DocString_pb2.pyi +93 -0
  187. streamlit/proto/DownloadButton_pb2.py +27 -0
  188. streamlit/proto/DownloadButton_pb2.pyi +70 -0
  189. streamlit/proto/Element_pb2.py +78 -0
  190. streamlit/proto/Element_pb2.pyi +312 -0
  191. streamlit/proto/Empty_pb2.py +27 -0
  192. streamlit/proto/Empty_pb2.pyi +36 -0
  193. streamlit/proto/Exception_pb2.py +27 -0
  194. streamlit/proto/Exception_pb2.pyi +72 -0
  195. streamlit/proto/Favicon_pb2.py +27 -0
  196. streamlit/proto/Favicon_pb2.pyi +40 -0
  197. streamlit/proto/FileUploader_pb2.py +28 -0
  198. streamlit/proto/FileUploader_pb2.pyi +78 -0
  199. streamlit/proto/ForwardMsg_pb2.py +53 -0
  200. streamlit/proto/ForwardMsg_pb2.pyi +293 -0
  201. streamlit/proto/GitInfo_pb2.py +29 -0
  202. streamlit/proto/GitInfo_pb2.pyi +83 -0
  203. streamlit/proto/GraphVizChart_pb2.py +27 -0
  204. streamlit/proto/GraphVizChart_pb2.pyi +53 -0
  205. streamlit/proto/Heading_pb2.py +27 -0
  206. streamlit/proto/Heading_pb2.pyi +56 -0
  207. streamlit/proto/Html_pb2.py +27 -0
  208. streamlit/proto/Html_pb2.pyi +42 -0
  209. streamlit/proto/IFrame_pb2.py +27 -0
  210. streamlit/proto/IFrame_pb2.pyi +59 -0
  211. streamlit/proto/Image_pb2.py +29 -0
  212. streamlit/proto/Image_pb2.pyi +84 -0
  213. streamlit/proto/Json_pb2.py +27 -0
  214. streamlit/proto/Json_pb2.pyi +53 -0
  215. streamlit/proto/LabelVisibilityMessage_pb2.py +29 -0
  216. streamlit/proto/LabelVisibilityMessage_pb2.pyi +68 -0
  217. streamlit/proto/LinkButton_pb2.py +27 -0
  218. streamlit/proto/LinkButton_pb2.pyi +58 -0
  219. streamlit/proto/Logo_pb2.py +27 -0
  220. streamlit/proto/Logo_pb2.pyi +51 -0
  221. streamlit/proto/Markdown_pb2.py +29 -0
  222. streamlit/proto/Markdown_pb2.pyi +86 -0
  223. streamlit/proto/Metric_pb2.py +32 -0
  224. streamlit/proto/Metric_pb2.pyi +101 -0
  225. streamlit/proto/MetricsEvent_pb2.py +30 -0
  226. streamlit/proto/MetricsEvent_pb2.pyi +200 -0
  227. streamlit/proto/MultiSelect_pb2.py +28 -0
  228. streamlit/proto/MultiSelect_pb2.pyi +81 -0
  229. streamlit/proto/NamedDataSet_pb2.py +28 -0
  230. streamlit/proto/NamedDataSet_pb2.pyi +59 -0
  231. streamlit/proto/Navigation_pb2.py +30 -0
  232. streamlit/proto/Navigation_pb2.pyi +84 -0
  233. streamlit/proto/NewSession_pb2.py +51 -0
  234. streamlit/proto/NewSession_pb2.pyi +481 -0
  235. streamlit/proto/NumberInput_pb2.py +30 -0
  236. streamlit/proto/NumberInput_pb2.pyi +121 -0
  237. streamlit/proto/PageConfig_pb2.py +33 -0
  238. streamlit/proto/PageConfig_pb2.pyi +126 -0
  239. streamlit/proto/PageInfo_pb2.py +27 -0
  240. streamlit/proto/PageInfo_pb2.pyi +43 -0
  241. streamlit/proto/PageLink_pb2.py +27 -0
  242. streamlit/proto/PageLink_pb2.pyi +63 -0
  243. streamlit/proto/PageNotFound_pb2.py +27 -0
  244. streamlit/proto/PageNotFound_pb2.pyi +42 -0
  245. streamlit/proto/PageProfile_pb2.py +31 -0
  246. streamlit/proto/PageProfile_pb2.pyi +127 -0
  247. streamlit/proto/PagesChanged_pb2.py +28 -0
  248. streamlit/proto/PagesChanged_pb2.pyi +48 -0
  249. streamlit/proto/ParentMessage_pb2.py +27 -0
  250. streamlit/proto/ParentMessage_pb2.pyi +46 -0
  251. streamlit/proto/PlotlyChart_pb2.py +31 -0
  252. streamlit/proto/PlotlyChart_pb2.pyi +131 -0
  253. streamlit/proto/Progress_pb2.py +27 -0
  254. streamlit/proto/Progress_pb2.pyi +43 -0
  255. streamlit/proto/Radio_pb2.py +28 -0
  256. streamlit/proto/Radio_pb2.pyi +84 -0
  257. streamlit/proto/RootContainer_pb2.py +27 -0
  258. streamlit/proto/RootContainer_pb2.pyi +56 -0
  259. streamlit/proto/Selectbox_pb2.py +28 -0
  260. streamlit/proto/Selectbox_pb2.pyi +80 -0
  261. streamlit/proto/SessionEvent_pb2.py +28 -0
  262. streamlit/proto/SessionEvent_pb2.pyi +62 -0
  263. streamlit/proto/SessionStatus_pb2.py +27 -0
  264. streamlit/proto/SessionStatus_pb2.pyi +57 -0
  265. streamlit/proto/Skeleton_pb2.py +29 -0
  266. streamlit/proto/Skeleton_pb2.pyi +71 -0
  267. streamlit/proto/Slider_pb2.py +32 -0
  268. streamlit/proto/Slider_pb2.pyi +142 -0
  269. streamlit/proto/Snow_pb2.py +27 -0
  270. streamlit/proto/Snow_pb2.pyi +43 -0
  271. streamlit/proto/Spinner_pb2.py +27 -0
  272. streamlit/proto/Spinner_pb2.pyi +49 -0
  273. streamlit/proto/TextArea_pb2.py +28 -0
  274. streamlit/proto/TextArea_pb2.pyi +80 -0
  275. streamlit/proto/TextInput_pb2.py +30 -0
  276. streamlit/proto/TextInput_pb2.pyi +107 -0
  277. streamlit/proto/Text_pb2.py +27 -0
  278. streamlit/proto/Text_pb2.pyi +46 -0
  279. streamlit/proto/TimeInput_pb2.py +28 -0
  280. streamlit/proto/TimeInput_pb2.pyi +74 -0
  281. streamlit/proto/Toast_pb2.py +27 -0
  282. streamlit/proto/Toast_pb2.pyi +45 -0
  283. streamlit/proto/VegaLiteChart_pb2.py +29 -0
  284. streamlit/proto/VegaLiteChart_pb2.pyi +71 -0
  285. streamlit/proto/Video_pb2.py +31 -0
  286. streamlit/proto/Video_pb2.pyi +117 -0
  287. streamlit/proto/WidgetStates_pb2.py +31 -0
  288. streamlit/proto/WidgetStates_pb2.pyi +126 -0
  289. streamlit/proto/__init__.py +15 -0
  290. streamlit/proto/openmetrics_data_model_pb2.py +60 -0
  291. streamlit/proto/openmetrics_data_model_pb2.pyi +522 -0
  292. streamlit/py.typed +0 -0
  293. streamlit/runtime/__init__.py +50 -0
  294. streamlit/runtime/app_session.py +982 -0
  295. streamlit/runtime/caching/__init__.py +98 -0
  296. streamlit/runtime/caching/cache_data_api.py +665 -0
  297. streamlit/runtime/caching/cache_errors.py +142 -0
  298. streamlit/runtime/caching/cache_resource_api.py +527 -0
  299. streamlit/runtime/caching/cache_type.py +33 -0
  300. streamlit/runtime/caching/cache_utils.py +523 -0
  301. streamlit/runtime/caching/cached_message_replay.py +290 -0
  302. streamlit/runtime/caching/hashing.py +637 -0
  303. streamlit/runtime/caching/legacy_cache_api.py +169 -0
  304. streamlit/runtime/caching/storage/__init__.py +29 -0
  305. streamlit/runtime/caching/storage/cache_storage_protocol.py +239 -0
  306. streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
  307. streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +145 -0
  308. streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
  309. streamlit/runtime/connection_factory.py +436 -0
  310. streamlit/runtime/context.py +280 -0
  311. streamlit/runtime/credentials.py +364 -0
  312. streamlit/runtime/forward_msg_cache.py +296 -0
  313. streamlit/runtime/forward_msg_queue.py +240 -0
  314. streamlit/runtime/fragment.py +477 -0
  315. streamlit/runtime/media_file_manager.py +234 -0
  316. streamlit/runtime/media_file_storage.py +143 -0
  317. streamlit/runtime/memory_media_file_storage.py +181 -0
  318. streamlit/runtime/memory_session_storage.py +77 -0
  319. streamlit/runtime/memory_uploaded_file_manager.py +138 -0
  320. streamlit/runtime/metrics_util.py +486 -0
  321. streamlit/runtime/pages_manager.py +165 -0
  322. streamlit/runtime/runtime.py +792 -0
  323. streamlit/runtime/runtime_util.py +106 -0
  324. streamlit/runtime/script_data.py +46 -0
  325. streamlit/runtime/scriptrunner/__init__.py +38 -0
  326. streamlit/runtime/scriptrunner/exec_code.py +159 -0
  327. streamlit/runtime/scriptrunner/magic.py +273 -0
  328. streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
  329. streamlit/runtime/scriptrunner/script_cache.py +89 -0
  330. streamlit/runtime/scriptrunner/script_runner.py +756 -0
  331. streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
  332. streamlit/runtime/scriptrunner_utils/exceptions.py +48 -0
  333. streamlit/runtime/scriptrunner_utils/script_requests.py +307 -0
  334. streamlit/runtime/scriptrunner_utils/script_run_context.py +287 -0
  335. streamlit/runtime/secrets.py +534 -0
  336. streamlit/runtime/session_manager.py +394 -0
  337. streamlit/runtime/state/__init__.py +41 -0
  338. streamlit/runtime/state/common.py +191 -0
  339. streamlit/runtime/state/query_params.py +205 -0
  340. streamlit/runtime/state/query_params_proxy.py +218 -0
  341. streamlit/runtime/state/safe_session_state.py +138 -0
  342. streamlit/runtime/state/session_state.py +772 -0
  343. streamlit/runtime/state/session_state_proxy.py +153 -0
  344. streamlit/runtime/state/widgets.py +135 -0
  345. streamlit/runtime/stats.py +109 -0
  346. streamlit/runtime/uploaded_file_manager.py +148 -0
  347. streamlit/runtime/websocket_session_manager.py +167 -0
  348. streamlit/source_util.py +98 -0
  349. streamlit/static/favicon.png +0 -0
  350. streamlit/static/index.html +61 -0
  351. streamlit/static/static/css/index.Bmkmz40k.css +1 -0
  352. streamlit/static/static/css/index.DpJG_94W.css +1 -0
  353. streamlit/static/static/css/index.DzuxGC_t.css +1 -0
  354. streamlit/static/static/js/FileDownload.esm.Bp9m5jrx.js +1 -0
  355. streamlit/static/static/js/FileHelper.D_3pbilj.js +5 -0
  356. streamlit/static/static/js/FormClearHelper.Ct2rwLXo.js +1 -0
  357. streamlit/static/static/js/Hooks.BKdzj5MJ.js +1 -0
  358. streamlit/static/static/js/InputInstructions.DB3QGNJP.js +1 -0
  359. streamlit/static/static/js/ProgressBar.D40A5xc2.js +2 -0
  360. streamlit/static/static/js/RenderInPortalIfExists.DLUCooTN.js +1 -0
  361. streamlit/static/static/js/Toolbar.BiGGIQun.js +1 -0
  362. streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +1 -0
  363. streamlit/static/static/js/base-input.CQBQT24M.js +4 -0
  364. streamlit/static/static/js/checkbox.Buj8gd_M.js +9 -0
  365. streamlit/static/static/js/createDownloadLinkElement.DZMwyjvU.js +1 -0
  366. streamlit/static/static/js/createSuper.CesK3I23.js +1 -0
  367. streamlit/static/static/js/data-grid-overlay-editor.B69OOFM4.js +1 -0
  368. streamlit/static/static/js/downloader.BZQhlBNT.js +1 -0
  369. streamlit/static/static/js/es6.D9Zhqujy.js +2 -0
  370. streamlit/static/static/js/iframeResizer.contentWindow.CAzcBpCC.js +1 -0
  371. streamlit/static/static/js/index.08vcOOvb.js +1 -0
  372. streamlit/static/static/js/index.0uqKfJUS.js +1 -0
  373. streamlit/static/static/js/index.B02M5u69.js +203 -0
  374. streamlit/static/static/js/index.B7mcZKMx.js +1 -0
  375. streamlit/static/static/js/index.BAQDHFA_.js +1 -0
  376. streamlit/static/static/js/index.BI60cMVr.js +2 -0
  377. streamlit/static/static/js/index.BLug2inK.js +1 -0
  378. streamlit/static/static/js/index.BM6TMY8g.js +2 -0
  379. streamlit/static/static/js/index.BZ9p1t7G.js +1 -0
  380. streamlit/static/static/js/index.BZqa87a1.js +2 -0
  381. streamlit/static/static/js/index.BcsRUzZZ.js +1 -0
  382. streamlit/static/static/js/index.BgVMiY_P.js +197 -0
  383. streamlit/static/static/js/index.BtuGy7By.js +6 -0
  384. streamlit/static/static/js/index.BuDuBmrs.js +1 -0
  385. streamlit/static/static/js/index.BvXU2oKV.js +1 -0
  386. streamlit/static/static/js/index.BxcwPacT.js +73 -0
  387. streamlit/static/static/js/index.CWX8KB81.js +1 -0
  388. streamlit/static/static/js/index.CXzZTo_q.js +1 -0
  389. streamlit/static/static/js/index.CcRWp_KL.js +1 -0
  390. streamlit/static/static/js/index.Cd-_xe55.js +3 -0
  391. streamlit/static/static/js/index.CdG2PXln.js +4537 -0
  392. streamlit/static/static/js/index.CjXvXmcP.js +1 -0
  393. streamlit/static/static/js/index.D1HZENZx.js +776 -0
  394. streamlit/static/static/js/index.D21Efo64.js +1617 -0
  395. streamlit/static/static/js/index.D9WgGVBx.js +7 -0
  396. streamlit/static/static/js/index.DEcsHtvb.js +12 -0
  397. streamlit/static/static/js/index.DFeMfr_K.js +1 -0
  398. streamlit/static/static/js/index.DHFBoItz.js +1 -0
  399. streamlit/static/static/js/index.D_PrBKnJ.js +3 -0
  400. streamlit/static/static/js/index.DmuRkekN.js +3855 -0
  401. streamlit/static/static/js/index.Do6eY8sf.js +1 -0
  402. streamlit/static/static/js/index.Dz3lP2P-.js +1 -0
  403. streamlit/static/static/js/index.Dz_UqF-s.js +1 -0
  404. streamlit/static/static/js/index.GkSUsPhJ.js +1 -0
  405. streamlit/static/static/js/index.H1U1IC_d.js +3 -0
  406. streamlit/static/static/js/index.g6p_4DPr.js +1 -0
  407. streamlit/static/static/js/index.g9x_GKss.js +1 -0
  408. streamlit/static/static/js/index.zo9jm08y.js +1 -0
  409. streamlit/static/static/js/input.DnaFglHq.js +2 -0
  410. streamlit/static/static/js/inputUtils.CQWz5UKz.js +1 -0
  411. streamlit/static/static/js/memory.Crb9x4-F.js +1 -0
  412. streamlit/static/static/js/mergeWith.ouAz0sK3.js +1 -0
  413. streamlit/static/static/js/number-overlay-editor._UaN-O48.js +9 -0
  414. streamlit/static/static/js/possibleConstructorReturn.CtGjGFHz.js +1 -0
  415. streamlit/static/static/js/sandbox.CBybYOhV.js +1 -0
  416. streamlit/static/static/js/sprintf.D7DtBTRn.js +1 -0
  417. streamlit/static/static/js/textarea.Cb_uJt5U.js +2 -0
  418. streamlit/static/static/js/threshold.DjX0wlsa.js +1 -0
  419. streamlit/static/static/js/timepicker.DKT7pfoF.js +4 -0
  420. streamlit/static/static/js/timer.CAwTRJ_g.js +1 -0
  421. streamlit/static/static/js/toConsumableArray.05Ikp13-.js +3 -0
  422. streamlit/static/static/js/uniqueId.D2FMWUEI.js +1 -0
  423. streamlit/static/static/js/useBasicWidgetState.urnZLANY.js +1 -0
  424. streamlit/static/static/js/useOnInputChange.BOKIIdJ1.js +1 -0
  425. streamlit/static/static/js/value.CgPGBV_l.js +1 -0
  426. streamlit/static/static/js/withFullScreenWrapper.C_N8J0Xx.js +1 -0
  427. streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
  428. streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
  429. streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
  430. streamlit/static/static/media/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
  431. streamlit/static/static/media/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
  432. streamlit/static/static/media/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
  433. streamlit/static/static/media/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
  434. streamlit/static/static/media/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
  435. streamlit/static/static/media/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
  436. streamlit/static/static/media/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
  437. streamlit/static/static/media/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
  438. streamlit/static/static/media/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
  439. streamlit/static/static/media/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
  440. streamlit/static/static/media/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
  441. streamlit/static/static/media/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
  442. streamlit/static/static/media/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
  443. streamlit/static/static/media/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
  444. streamlit/static/static/media/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
  445. streamlit/static/static/media/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
  446. streamlit/static/static/media/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
  447. streamlit/static/static/media/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
  448. streamlit/static/static/media/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
  449. streamlit/static/static/media/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
  450. streamlit/static/static/media/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
  451. streamlit/static/static/media/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
  452. streamlit/static/static/media/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
  453. streamlit/static/static/media/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
  454. streamlit/static/static/media/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
  455. streamlit/static/static/media/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
  456. streamlit/static/static/media/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
  457. streamlit/static/static/media/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
  458. streamlit/static/static/media/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
  459. streamlit/static/static/media/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
  460. streamlit/static/static/media/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
  461. streamlit/static/static/media/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
  462. streamlit/static/static/media/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
  463. streamlit/static/static/media/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
  464. streamlit/static/static/media/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
  465. streamlit/static/static/media/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
  466. streamlit/static/static/media/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
  467. streamlit/static/static/media/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
  468. streamlit/static/static/media/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
  469. streamlit/static/static/media/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
  470. streamlit/static/static/media/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
  471. streamlit/static/static/media/KaTeX_Script-Regular.D5yQViql.woff +0 -0
  472. streamlit/static/static/media/KaTeX_Size1-Regular.C195tn64.woff +0 -0
  473. streamlit/static/static/media/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
  474. streamlit/static/static/media/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
  475. streamlit/static/static/media/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
  476. streamlit/static/static/media/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
  477. streamlit/static/static/media/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
  478. streamlit/static/static/media/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
  479. streamlit/static/static/media/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
  480. streamlit/static/static/media/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
  481. streamlit/static/static/media/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
  482. streamlit/static/static/media/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
  483. streamlit/static/static/media/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
  484. streamlit/static/static/media/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
  485. streamlit/static/static/media/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
  486. streamlit/static/static/media/MaterialSymbols-Rounded.DcZbplWk.woff2 +0 -0
  487. streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
  488. streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
  489. streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
  490. streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
  491. streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
  492. streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
  493. streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
  494. streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
  495. streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
  496. streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
  497. streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
  498. streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
  499. streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
  500. streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
  501. streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
  502. streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
  503. streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
  504. streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
  505. streamlit/static/static/media/balloon-0.Czj7AKwE.png +0 -0
  506. streamlit/static/static/media/balloon-1.CNvFFrND.png +0 -0
  507. streamlit/static/static/media/balloon-2.DTvC6B1t.png +0 -0
  508. streamlit/static/static/media/balloon-3.CgSk4tbL.png +0 -0
  509. streamlit/static/static/media/balloon-4.mbtFrzxf.png +0 -0
  510. streamlit/static/static/media/balloon-5.CSwkUfRA.png +0 -0
  511. streamlit/static/static/media/fireworks.B4d-_KUe.gif +0 -0
  512. streamlit/static/static/media/flake-0.DgWaVvm5.png +0 -0
  513. streamlit/static/static/media/flake-1.B2r5AHMK.png +0 -0
  514. streamlit/static/static/media/flake-2.BnWSExPC.png +0 -0
  515. streamlit/static/static/media/snowflake.JU2jBHL8.svg +11 -0
  516. streamlit/string_util.py +203 -0
  517. streamlit/temporary_directory.py +56 -0
  518. streamlit/testing/__init__.py +13 -0
  519. streamlit/testing/v1/__init__.py +17 -0
  520. streamlit/testing/v1/app_test.py +1050 -0
  521. streamlit/testing/v1/element_tree.py +2083 -0
  522. streamlit/testing/v1/local_script_runner.py +180 -0
  523. streamlit/testing/v1/util.py +53 -0
  524. streamlit/time_util.py +75 -0
  525. streamlit/type_util.py +460 -0
  526. streamlit/url_util.py +122 -0
  527. streamlit/user_info.py +519 -0
  528. streamlit/util.py +72 -0
  529. streamlit/vendor/__init__.py +0 -0
  530. streamlit/vendor/pympler/__init__.py +0 -0
  531. streamlit/vendor/pympler/asizeof.py +2869 -0
  532. streamlit/version.py +18 -0
  533. streamlit/watcher/__init__.py +28 -0
  534. streamlit/watcher/event_based_path_watcher.py +406 -0
  535. streamlit/watcher/folder_black_list.py +82 -0
  536. streamlit/watcher/local_sources_watcher.py +233 -0
  537. streamlit/watcher/path_watcher.py +185 -0
  538. streamlit/watcher/polling_path_watcher.py +124 -0
  539. streamlit/watcher/util.py +207 -0
  540. streamlit/web/__init__.py +13 -0
  541. streamlit/web/bootstrap.py +353 -0
  542. streamlit/web/cache_storage_manager_config.py +38 -0
  543. streamlit/web/cli.py +369 -0
  544. streamlit/web/server/__init__.py +26 -0
  545. streamlit/web/server/app_static_file_handler.py +93 -0
  546. streamlit/web/server/authlib_tornado_integration.py +60 -0
  547. streamlit/web/server/browser_websocket_handler.py +246 -0
  548. streamlit/web/server/component_request_handler.py +116 -0
  549. streamlit/web/server/media_file_handler.py +141 -0
  550. streamlit/web/server/oauth_authlib_routes.py +176 -0
  551. streamlit/web/server/oidc_mixin.py +108 -0
  552. streamlit/web/server/routes.py +295 -0
  553. streamlit/web/server/server.py +479 -0
  554. streamlit/web/server/server_util.py +161 -0
  555. streamlit/web/server/stats_request_handler.py +95 -0
  556. streamlit/web/server/upload_file_request_handler.py +137 -0
  557. streamlit/web/server/websocket_headers.py +56 -0
  558. streamlit_nightly-1.43.2.dev20250307.data/scripts/streamlit.cmd +16 -0
  559. streamlit_nightly-1.43.2.dev20250307.dist-info/METADATA +207 -0
  560. streamlit_nightly-1.43.2.dev20250307.dist-info/RECORD +563 -0
  561. streamlit_nightly-1.43.2.dev20250307.dist-info/WHEEL +5 -0
  562. streamlit_nightly-1.43.2.dev20250307.dist-info/entry_points.txt +2 -0
  563. streamlit_nightly-1.43.2.dev20250307.dist-info/top_level.txt +1 -0
@@ -0,0 +1,546 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ import json
18
+ from dataclasses import dataclass
19
+ from typing import (
20
+ TYPE_CHECKING,
21
+ Any,
22
+ Final,
23
+ Literal,
24
+ TypedDict,
25
+ cast,
26
+ overload,
27
+ )
28
+
29
+ from typing_extensions import TypeAlias
30
+
31
+ from streamlit import config
32
+ from streamlit.elements.lib.event_utils import AttributeDictionary
33
+ from streamlit.elements.lib.form_utils import current_form_id
34
+ from streamlit.elements.lib.policies import check_widget_policies
35
+ from streamlit.elements.lib.utils import Key, compute_and_register_element_id, to_key
36
+ from streamlit.errors import StreamlitAPIException
37
+ from streamlit.proto.DeckGlJsonChart_pb2 import DeckGlJsonChart as PydeckProto
38
+ from streamlit.runtime.metrics_util import gather_metrics
39
+ from streamlit.runtime.scriptrunner_utils.script_run_context import get_script_run_ctx
40
+ from streamlit.runtime.state import (
41
+ WidgetCallback,
42
+ register_widget,
43
+ )
44
+
45
+ if TYPE_CHECKING:
46
+ from collections.abc import Iterable, Mapping
47
+
48
+ from pydeck import Deck
49
+
50
+ from streamlit.delta_generator import DeltaGenerator
51
+
52
+
53
+ # Mapping used when no data is passed.
54
+ EMPTY_MAP: Final[Mapping[str, Any]] = {
55
+ "initialViewState": {"latitude": 0, "longitude": 0, "pitch": 0, "zoom": 1},
56
+ }
57
+
58
+ SelectionMode: TypeAlias = Literal["single-object", "multi-object"]
59
+ _SELECTION_MODES: Final[set[SelectionMode]] = {
60
+ "single-object",
61
+ "multi-object",
62
+ }
63
+
64
+
65
+ def parse_selection_mode(
66
+ selection_mode: SelectionMode | Iterable[SelectionMode],
67
+ ) -> set[PydeckProto.SelectionMode.ValueType]:
68
+ """Parse and check the user provided selection modes."""
69
+ if isinstance(selection_mode, str):
70
+ # Only a single selection mode was passed
71
+ selection_mode_set = {selection_mode}
72
+ else:
73
+ # Multiple selection modes were passed.
74
+ # This is not yet supported as a functionality, but the infra is here to
75
+ # support it in the future!
76
+ # @see DeckGlJsonChart.tsx
77
+ raise StreamlitAPIException(
78
+ f"Invalid selection mode: {selection_mode}. ",
79
+ "Selection mode must be a single value, but got a set instead.",
80
+ )
81
+
82
+ if not selection_mode_set.issubset(_SELECTION_MODES):
83
+ raise StreamlitAPIException(
84
+ f"Invalid selection mode: {selection_mode}. "
85
+ f"Valid options are: {_SELECTION_MODES}"
86
+ )
87
+
88
+ if selection_mode_set.issuperset({"single-object", "multi-object"}):
89
+ raise StreamlitAPIException(
90
+ "Only one of `single-object` or `multi-object` can be selected as selection mode."
91
+ )
92
+
93
+ parsed_selection_modes = []
94
+ for selection_mode in selection_mode_set:
95
+ if selection_mode == "single-object":
96
+ parsed_selection_modes.append(PydeckProto.SelectionMode.SINGLE_OBJECT)
97
+ elif selection_mode == "multi-object":
98
+ parsed_selection_modes.append(PydeckProto.SelectionMode.MULTI_OBJECT)
99
+ return set(parsed_selection_modes)
100
+
101
+
102
+ class PydeckSelectionState(TypedDict, total=False):
103
+ r"""
104
+ The schema for the PyDeck chart selection state.
105
+
106
+ The selection state is stored in a dictionary-like object that supports
107
+ both key and attribute notation. Selection states cannot be
108
+ programmatically changed or set through Session State.
109
+
110
+ You must define ``id`` in ``pydeck.Layer`` to ensure statefulness when
111
+ using selections with ``st.pydeck_chart``.
112
+
113
+ Attributes
114
+ ----------
115
+ indices : dict[str, list[int]]
116
+ A dictionary of selected objects by layer. Each key in the dictionary
117
+ is a layer id, and each value is a list of object indices within that
118
+ layer.
119
+ objects : dict[str, list[dict[str, Any]]]
120
+ A dictionary of object attributes by layer. Each key in the dictionary
121
+ is a layer id, and each value is a list of metadata dictionaries for
122
+ the selected objects in that layer.
123
+
124
+ Examples
125
+ --------
126
+ The following example has multi-object selection enabled. The chart
127
+ displays US state capitals by population (2023 US Census estimate). You
128
+ can access this `data
129
+ <https://github.com/streamlit/docs/blob/main/python/api-examples-source/data/capitals.csv>`_
130
+ from GitHub.
131
+
132
+ >>> import streamlit as st
133
+ >>> import pydeck
134
+ >>> import pandas as pd
135
+ >>>
136
+ >>> capitals = pd.read_csv(
137
+ ... "capitals.csv",
138
+ ... header=0,
139
+ ... names=[
140
+ ... "Capital",
141
+ ... "State",
142
+ ... "Abbreviation",
143
+ ... "Latitude",
144
+ ... "Longitude",
145
+ ... "Population",
146
+ ... ],
147
+ ... )
148
+ >>> capitals["size"] = capitals.Population / 10
149
+ >>>
150
+ >>> point_layer = pydeck.Layer(
151
+ ... "ScatterplotLayer",
152
+ ... data=capitals,
153
+ ... id="capital-cities",
154
+ ... get_position=["Longitude", "Latitude"],
155
+ ... get_color="[255, 75, 75]",
156
+ ... pickable=True,
157
+ ... auto_highlight=True,
158
+ ... get_radius="size",
159
+ ... )
160
+ >>>
161
+ >>> view_state = pydeck.ViewState(
162
+ ... latitude=40, longitude=-117, controller=True, zoom=2.4, pitch=30
163
+ ... )
164
+ >>>
165
+ >>> chart = pydeck.Deck(
166
+ ... point_layer,
167
+ ... initial_view_state=view_state,
168
+ ... tooltip={"text": "{Capital}, {Abbreviation}\nPopulation: {Population}"},
169
+ ... )
170
+ >>>
171
+ >>> event = st.pydeck_chart(chart, on_select="rerun", selection_mode="multi-object")
172
+ >>>
173
+ >>> event.selection
174
+
175
+ .. output ::
176
+ https://doc-pydeck-event-state-selections.streamlit.app/
177
+ height: 700px
178
+
179
+ This is an example of the selection state when selecting a single object
180
+ from a layer with id, ``"captial-cities"``:
181
+
182
+ >>> {
183
+ >>> "indices":{
184
+ >>> "capital-cities":[
185
+ >>> 2
186
+ >>> ]
187
+ >>> },
188
+ >>> "objects":{
189
+ >>> "capital-cities":[
190
+ >>> {
191
+ >>> "Abbreviation":" AZ"
192
+ >>> "Capital":"Phoenix"
193
+ >>> "Latitude":33.448457
194
+ >>> "Longitude":-112.073844
195
+ >>> "Population":1650070
196
+ >>> "State":" Arizona"
197
+ >>> "size":165007.0
198
+ >>> }
199
+ >>> ]
200
+ >>> }
201
+ >>> }
202
+
203
+ """
204
+
205
+ indices: dict[str, list[int]]
206
+ objects: dict[str, list[dict[str, Any]]]
207
+
208
+
209
+ class PydeckState(TypedDict, total=False):
210
+ """
211
+ The schema for the PyDeck event state.
212
+
213
+ The event state is stored in a dictionary-like object that supports both
214
+ key and attribute notation. Event states cannot be programmatically changed
215
+ or set through Session State.
216
+
217
+ Only selection events are supported at this time.
218
+
219
+ Attributes
220
+ ----------
221
+ selection : dict
222
+ The state of the ``on_select`` event. This attribute returns a
223
+ dictionary-like object that supports both key and attribute notation.
224
+ The attributes are described by the ``PydeckSelectionState``
225
+ dictionary schema.
226
+
227
+ """
228
+
229
+ selection: PydeckSelectionState
230
+
231
+
232
+ @dataclass
233
+ class PydeckSelectionSerde:
234
+ """PydeckSelectionSerde is used to serialize and deserialize the Pydeck selection state."""
235
+
236
+ def deserialize(self, ui_value: str | None, widget_id: str = "") -> PydeckState:
237
+ empty_selection_state: PydeckState = {
238
+ "selection": {
239
+ "indices": {},
240
+ "objects": {},
241
+ }
242
+ }
243
+
244
+ selection_state = (
245
+ empty_selection_state if ui_value is None else json.loads(ui_value)
246
+ )
247
+
248
+ # We have seen some situations where the ui_value was just an empty
249
+ # dict, so we want to ensure that it always returns the empty state in
250
+ # case this happens.
251
+ if "selection" not in selection_state:
252
+ selection_state = empty_selection_state
253
+
254
+ return cast(PydeckState, AttributeDictionary(selection_state))
255
+
256
+ def serialize(self, selection_state: PydeckState) -> str:
257
+ return json.dumps(selection_state, default=str)
258
+
259
+
260
+ class PydeckMixin:
261
+ @overload
262
+ def pydeck_chart(
263
+ self,
264
+ pydeck_obj: Deck | None = None,
265
+ *,
266
+ use_container_width: bool = True,
267
+ width: int | None = None,
268
+ height: int | None = None,
269
+ selection_mode: Literal[
270
+ "single-object"
271
+ ], # Selection mode will only be activated by on_select param, this is a default value here to make it work with mypy
272
+ on_select: Literal["ignore"], # No default value here to make it work with mypy
273
+ key: Key | None = None,
274
+ ) -> DeltaGenerator: ...
275
+
276
+ @overload
277
+ def pydeck_chart(
278
+ self,
279
+ pydeck_obj: Deck | None = None,
280
+ *,
281
+ use_container_width: bool = True,
282
+ width: int | None = None,
283
+ height: int | None = None,
284
+ selection_mode: SelectionMode = "single-object",
285
+ on_select: Literal["rerun"] | WidgetCallback = "rerun",
286
+ key: Key | None = None,
287
+ ) -> PydeckState: ...
288
+
289
+ @gather_metrics("pydeck_chart")
290
+ def pydeck_chart(
291
+ self,
292
+ pydeck_obj: Deck | None = None,
293
+ *,
294
+ use_container_width: bool = True,
295
+ width: int | None = None,
296
+ height: int | None = None,
297
+ selection_mode: SelectionMode = "single-object",
298
+ on_select: Literal["rerun", "ignore"] | WidgetCallback = "ignore",
299
+ key: Key | None = None,
300
+ ) -> DeltaGenerator | PydeckState:
301
+ """Draw a chart using the PyDeck library.
302
+
303
+ This supports 3D maps, point clouds, and more! More info about PyDeck
304
+ at https://deckgl.readthedocs.io/en/latest/.
305
+
306
+ These docs are also quite useful:
307
+
308
+ - DeckGL docs: https://github.com/uber/deck.gl/tree/master/docs
309
+ - DeckGL JSON docs: https://github.com/uber/deck.gl/tree/master/modules/json
310
+
311
+ When using this command, Mapbox provides the map tiles to render map
312
+ content. Note that Mapbox is a third-party product and Streamlit accepts
313
+ no responsibility or liability of any kind for Mapbox or for any content
314
+ or information made available by Mapbox.
315
+
316
+ Mapbox requires users to register and provide a token before users can
317
+ request map tiles. Currently, Streamlit provides this token for you, but
318
+ this could change at any time. We strongly recommend all users create and
319
+ use their own personal Mapbox token to avoid any disruptions to their
320
+ experience. You can do this with the ``mapbox.token`` config option. The
321
+ use of Mapbox is governed by Mapbox's Terms of Use.
322
+
323
+ To get a token for yourself, create an account at https://mapbox.com.
324
+ For more info on how to set config options, see
325
+ https://docs.streamlit.io/develop/api-reference/configuration/config.toml.
326
+
327
+ Parameters
328
+ ----------
329
+ pydeck_obj : pydeck.Deck or None
330
+ Object specifying the PyDeck chart to draw.
331
+ use_container_width : bool
332
+ Whether to override the figure's native width with the width of
333
+ the parent container. If ``use_container_width`` is ``True`` (default),
334
+ Streamlit sets the width of the figure to match the width of the parent
335
+ container. If ``use_container_width`` is ``False``, Streamlit sets the
336
+ width of the chart to fit its contents according to the plotting library,
337
+ up to the width of the parent container.
338
+ width : int or None
339
+ Desired width of the chart expressed in pixels. If ``width`` is
340
+ ``None`` (default), Streamlit sets the width of the chart to fit
341
+ its contents according to the plotting library, up to the width of
342
+ the parent container. If ``width`` is greater than the width of the
343
+ parent container, Streamlit sets the chart width to match the width
344
+ of the parent container.
345
+
346
+ To use ``width``, you must set ``use_container_width=False``.
347
+ height : int or None
348
+ Desired height of the chart expressed in pixels. If ``height`` is
349
+ ``None`` (default), Streamlit sets the height of the chart to fit
350
+ its contents according to the plotting library.
351
+ on_select : "ignore" or "rerun" or callable
352
+ How the figure should respond to user selection events. This controls
353
+ whether or not the chart behaves like an input widget.
354
+ ``on_select`` can be one of the following:
355
+
356
+ - ``"ignore"`` (default): Streamlit will not react to any selection
357
+ events in the chart. The figure will not behave like an
358
+ input widget.
359
+ - ``"rerun"``: Streamlit will rerun the app when the user selects
360
+ data in the chart. In this case, ``st.pydeck_chart`` will return
361
+ the selection data as a dictionary.
362
+ - A ``callable``: Streamlit will rerun the app and execute the callable
363
+ as a callback function before the rest of the app. In this case,
364
+ ``st.pydeck_chart`` will return the selection data as a
365
+ dictionary.
366
+
367
+ If ``on_select`` is not ``"ignore"``, all layers must have a
368
+ declared ``id`` to keep the chart stateful across reruns.
369
+ selection_mode : "single-object" or "multi-object"
370
+ The selection mode of the chart. This can be one of the following:
371
+
372
+ - ``"single-object"`` (default): Only one object can be selected at
373
+ a time.
374
+ - ``"multi-object"``: Multiple objects can be selected at a time.
375
+
376
+ key : str
377
+ An optional string to use for giving this element a stable
378
+ identity. If ``key`` is ``None`` (default), this element's identity
379
+ will be determined based on the values of the other parameters.
380
+
381
+ Additionally, if selections are activated and ``key`` is provided,
382
+ Streamlit will register the key in Session State to store the
383
+ selection state. The selection state is read-only.
384
+
385
+ Returns
386
+ -------
387
+ element or dict
388
+ If ``on_select`` is ``"ignore"`` (default), this command returns an
389
+ internal placeholder for the chart element. Otherwise, this method
390
+ returns a dictionary-like object that supports both key and
391
+ attribute notation. The attributes are described by the
392
+ ``PydeckState`` dictionary schema.
393
+
394
+ Example
395
+ -------
396
+ Here's a chart using a HexagonLayer and a ScatterplotLayer. It uses either the
397
+ light or dark map style, based on which Streamlit theme is currently active:
398
+
399
+ >>> import streamlit as st
400
+ >>> import pandas as pd
401
+ >>> import numpy as np
402
+ >>> import pydeck as pdk
403
+ >>>
404
+ >>> chart_data = pd.DataFrame(
405
+ ... np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4],
406
+ ... columns=["lat", "lon"],
407
+ ... )
408
+ >>>
409
+ >>> st.pydeck_chart(
410
+ ... pdk.Deck(
411
+ ... map_style=None,
412
+ ... initial_view_state=pdk.ViewState(
413
+ ... latitude=37.76,
414
+ ... longitude=-122.4,
415
+ ... zoom=11,
416
+ ... pitch=50,
417
+ ... ),
418
+ ... layers=[
419
+ ... pdk.Layer(
420
+ ... "HexagonLayer",
421
+ ... data=chart_data,
422
+ ... get_position="[lon, lat]",
423
+ ... radius=200,
424
+ ... elevation_scale=4,
425
+ ... elevation_range=[0, 1000],
426
+ ... pickable=True,
427
+ ... extruded=True,
428
+ ... ),
429
+ ... pdk.Layer(
430
+ ... "ScatterplotLayer",
431
+ ... data=chart_data,
432
+ ... get_position="[lon, lat]",
433
+ ... get_color="[200, 30, 0, 160]",
434
+ ... get_radius=200,
435
+ ... ),
436
+ ... ],
437
+ ... )
438
+ ... )
439
+
440
+ .. output::
441
+ https://doc-pydeck-chart.streamlit.app/
442
+ height: 530px
443
+
444
+ .. note::
445
+ To make the PyDeck chart's style consistent with Streamlit's theme,
446
+ you can set ``map_style=None`` in the ``pydeck.Deck`` object.
447
+
448
+ """
449
+ pydeck_proto = PydeckProto()
450
+
451
+ ctx = get_script_run_ctx()
452
+
453
+ if pydeck_obj is None:
454
+ spec = json.dumps(EMPTY_MAP)
455
+ else:
456
+ spec = pydeck_obj.to_json()
457
+
458
+ pydeck_proto.json = spec
459
+ pydeck_proto.use_container_width = use_container_width
460
+
461
+ if width:
462
+ pydeck_proto.width = width
463
+ if height:
464
+ pydeck_proto.height = height
465
+
466
+ tooltip = _get_pydeck_tooltip(pydeck_obj)
467
+ if tooltip:
468
+ pydeck_proto.tooltip = json.dumps(tooltip)
469
+
470
+ mapbox_token = config.get_option("mapbox.token")
471
+ if mapbox_token:
472
+ pydeck_proto.mapbox_token = mapbox_token
473
+
474
+ key = to_key(key)
475
+ is_selection_activated = on_select != "ignore"
476
+
477
+ if on_select not in ["ignore", "rerun"] and not callable(on_select):
478
+ raise StreamlitAPIException(
479
+ f"You have passed {on_select} to `on_select`. But only 'ignore', 'rerun', or a callable is supported."
480
+ )
481
+
482
+ if is_selection_activated:
483
+ # Selections are activated, treat Pydeck as a widget:
484
+ pydeck_proto.selection_mode.extend(parse_selection_mode(selection_mode))
485
+
486
+ # Run some checks that are only relevant when selections are activated
487
+ is_callback = callable(on_select)
488
+ check_widget_policies(
489
+ self.dg,
490
+ key,
491
+ on_change=cast(WidgetCallback, on_select) if is_callback else None,
492
+ default_value=None,
493
+ writes_allowed=False,
494
+ enable_check_callback_rules=is_callback,
495
+ )
496
+ pydeck_proto.form_id = current_form_id(self.dg)
497
+
498
+ pydeck_proto.id = compute_and_register_element_id(
499
+ "deck_gl_json_chart",
500
+ user_key=key,
501
+ is_selection_activated=is_selection_activated,
502
+ selection_mode=selection_mode,
503
+ use_container_width=use_container_width,
504
+ spec=spec,
505
+ form_id=pydeck_proto.form_id,
506
+ )
507
+
508
+ serde = PydeckSelectionSerde()
509
+
510
+ widget_state = register_widget(
511
+ pydeck_proto.id,
512
+ ctx=ctx,
513
+ deserializer=serde.deserialize,
514
+ on_change_handler=on_select if callable(on_select) else None,
515
+ serializer=serde.serialize,
516
+ value_type="string_value",
517
+ )
518
+
519
+ self.dg._enqueue("deck_gl_json_chart", pydeck_proto)
520
+
521
+ return cast(PydeckState, widget_state.value)
522
+
523
+ return self.dg._enqueue("deck_gl_json_chart", pydeck_proto)
524
+
525
+ @property
526
+ def dg(self) -> DeltaGenerator:
527
+ """Get our DeltaGenerator."""
528
+ return cast("DeltaGenerator", self)
529
+
530
+
531
+ def _get_pydeck_tooltip(pydeck_obj: Deck | None) -> dict[str, str] | None:
532
+ if pydeck_obj is None:
533
+ return None
534
+
535
+ # For pydeck <0.8.1 or pydeck>=0.8.1 when jupyter extra is installed.
536
+ desk_widget = getattr(pydeck_obj, "deck_widget", None)
537
+ if desk_widget is not None and isinstance(desk_widget.tooltip, dict):
538
+ return desk_widget.tooltip
539
+
540
+ # For pydeck >=0.8.1 when jupyter extra is not installed.
541
+ # For details, see: https://github.com/visgl/deck.gl/pull/7125/files
542
+ tooltip = getattr(pydeck_obj, "_tooltip", None)
543
+ if tooltip is not None and isinstance(tooltip, dict):
544
+ return cast(dict[str, str], tooltip)
545
+
546
+ return None