streamlit-data-editor-plus 0.1.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.
Files changed (456) hide show
  1. streamlit/__init__.py +292 -0
  2. streamlit/__main__.py +20 -0
  3. streamlit/auth_util.py +583 -0
  4. streamlit/cli_util.py +107 -0
  5. streamlit/column_config.py +60 -0
  6. streamlit/commands/__init__.py +13 -0
  7. streamlit/commands/echo.py +128 -0
  8. streamlit/commands/execution_control.py +318 -0
  9. streamlit/commands/logo.py +250 -0
  10. streamlit/commands/navigation.py +430 -0
  11. streamlit/commands/page_config.py +335 -0
  12. streamlit/components/__init__.py +13 -0
  13. streamlit/components/lib/__init__.py +13 -0
  14. streamlit/components/lib/local_component_registry.py +84 -0
  15. streamlit/components/types/__init__.py +13 -0
  16. streamlit/components/types/base_component_registry.py +99 -0
  17. streamlit/components/types/base_custom_component.py +158 -0
  18. streamlit/components/v1/__init__.py +29 -0
  19. streamlit/components/v1/component_arrow.py +141 -0
  20. streamlit/components/v1/component_registry.py +147 -0
  21. streamlit/components/v1/components.py +38 -0
  22. streamlit/components/v1/custom_component.py +239 -0
  23. streamlit/components/v2/__init__.py +531 -0
  24. streamlit/components/v2/bidi_component/__init__.py +20 -0
  25. streamlit/components/v2/bidi_component/constants.py +29 -0
  26. streamlit/components/v2/bidi_component/main.py +537 -0
  27. streamlit/components/v2/bidi_component/serialization.py +272 -0
  28. streamlit/components/v2/bidi_component/state.py +92 -0
  29. streamlit/components/v2/component_definition_resolver.py +143 -0
  30. streamlit/components/v2/component_file_watcher.py +403 -0
  31. streamlit/components/v2/component_manager.py +439 -0
  32. streamlit/components/v2/component_manifest_handler.py +122 -0
  33. streamlit/components/v2/component_path_utils.py +233 -0
  34. streamlit/components/v2/component_registry.py +426 -0
  35. streamlit/components/v2/get_bidi_component_manager.py +51 -0
  36. streamlit/components/v2/manifest_scanner.py +620 -0
  37. streamlit/components/v2/presentation.py +198 -0
  38. streamlit/components/v2/types.py +317 -0
  39. streamlit/config.py +2977 -0
  40. streamlit/config_option.py +319 -0
  41. streamlit/config_util.py +887 -0
  42. streamlit/connections/__init__.py +32 -0
  43. streamlit/connections/base_connection.py +215 -0
  44. streamlit/connections/snowflake_connection.py +765 -0
  45. streamlit/connections/snowpark_connection.py +213 -0
  46. streamlit/connections/sql_connection.py +427 -0
  47. streamlit/connections/util.py +97 -0
  48. streamlit/cursor.py +314 -0
  49. streamlit/dataframe_util.py +1434 -0
  50. streamlit/delta_generator.py +696 -0
  51. streamlit/delta_generator_singletons.py +243 -0
  52. streamlit/deprecation_util.py +253 -0
  53. streamlit/development.py +21 -0
  54. streamlit/elements/__init__.py +13 -0
  55. streamlit/elements/alert.py +341 -0
  56. streamlit/elements/arrow.py +1065 -0
  57. streamlit/elements/balloons.py +47 -0
  58. streamlit/elements/bokeh_chart.py +75 -0
  59. streamlit/elements/code.py +154 -0
  60. streamlit/elements/deck_gl_json_chart.py +627 -0
  61. streamlit/elements/dialog_decorator.py +320 -0
  62. streamlit/elements/empty.py +130 -0
  63. streamlit/elements/exception.py +370 -0
  64. streamlit/elements/form.py +481 -0
  65. streamlit/elements/graphviz_chart.py +226 -0
  66. streamlit/elements/heading.py +407 -0
  67. streamlit/elements/help.py +565 -0
  68. streamlit/elements/html.py +189 -0
  69. streamlit/elements/iframe.py +245 -0
  70. streamlit/elements/image.py +221 -0
  71. streamlit/elements/json.py +171 -0
  72. streamlit/elements/layouts.py +1534 -0
  73. streamlit/elements/lib/__init__.py +13 -0
  74. streamlit/elements/lib/built_in_chart_utils.py +1316 -0
  75. streamlit/elements/lib/color_util.py +272 -0
  76. streamlit/elements/lib/column_config_utils.py +555 -0
  77. streamlit/elements/lib/column_types.py +2699 -0
  78. streamlit/elements/lib/dialog.py +212 -0
  79. streamlit/elements/lib/dicttools.py +152 -0
  80. streamlit/elements/lib/file_uploader_utils.py +91 -0
  81. streamlit/elements/lib/form_utils.py +77 -0
  82. streamlit/elements/lib/image_utils.py +447 -0
  83. streamlit/elements/lib/js_number.py +105 -0
  84. streamlit/elements/lib/layout_utils.py +325 -0
  85. streamlit/elements/lib/mutable_expander_container.py +73 -0
  86. streamlit/elements/lib/mutable_popover_container.py +73 -0
  87. streamlit/elements/lib/mutable_status_container.py +194 -0
  88. streamlit/elements/lib/mutable_tab_container.py +73 -0
  89. streamlit/elements/lib/options_selector_utils.py +480 -0
  90. streamlit/elements/lib/pandas_styler_utils.py +302 -0
  91. streamlit/elements/lib/policies.py +198 -0
  92. streamlit/elements/lib/shortcut_utils.py +152 -0
  93. streamlit/elements/lib/streamlit_plotly_theme.py +206 -0
  94. streamlit/elements/lib/subtitle_utils.py +175 -0
  95. streamlit/elements/lib/utils.py +274 -0
  96. streamlit/elements/map.py +526 -0
  97. streamlit/elements/markdown.py +529 -0
  98. streamlit/elements/media.py +843 -0
  99. streamlit/elements/metric.py +529 -0
  100. streamlit/elements/pdf.py +190 -0
  101. streamlit/elements/plotly_chart.py +779 -0
  102. streamlit/elements/progress.py +172 -0
  103. streamlit/elements/pyplot.py +240 -0
  104. streamlit/elements/snow.py +47 -0
  105. streamlit/elements/space.py +121 -0
  106. streamlit/elements/spinner.py +152 -0
  107. streamlit/elements/table.py +240 -0
  108. streamlit/elements/text.py +113 -0
  109. streamlit/elements/toast.py +175 -0
  110. streamlit/elements/vega_charts.py +2510 -0
  111. streamlit/elements/widgets/__init__.py +13 -0
  112. streamlit/elements/widgets/audio_input.py +334 -0
  113. streamlit/elements/widgets/button.py +1559 -0
  114. streamlit/elements/widgets/button_group.py +1061 -0
  115. streamlit/elements/widgets/camera_input.py +281 -0
  116. streamlit/elements/widgets/chat.py +1028 -0
  117. streamlit/elements/widgets/checkbox.py +420 -0
  118. streamlit/elements/widgets/color_picker.py +329 -0
  119. streamlit/elements/widgets/data_editor.py +1168 -0
  120. streamlit/elements/widgets/data_editor_plus.py +902 -0
  121. streamlit/elements/widgets/feedback.py +322 -0
  122. streamlit/elements/widgets/file_uploader.py +592 -0
  123. streamlit/elements/widgets/multiselect.py +654 -0
  124. streamlit/elements/widgets/number_input.py +719 -0
  125. streamlit/elements/widgets/radio.py +551 -0
  126. streamlit/elements/widgets/select_slider.py +568 -0
  127. streamlit/elements/widgets/selectbox.py +680 -0
  128. streamlit/elements/widgets/slider.py +1093 -0
  129. streamlit/elements/widgets/text_widgets.py +779 -0
  130. streamlit/elements/widgets/time_widgets.py +1712 -0
  131. streamlit/elements/write.py +585 -0
  132. streamlit/emojis.py +34 -0
  133. streamlit/env_util.py +56 -0
  134. streamlit/error_util.py +112 -0
  135. streamlit/errors.py +680 -0
  136. streamlit/external/__init__.py +13 -0
  137. streamlit/external/langchain/__init__.py +23 -0
  138. streamlit/external/langchain/streamlit_callback_handler.py +410 -0
  139. streamlit/file_util.py +266 -0
  140. streamlit/git_util.py +200 -0
  141. streamlit/hello/__init__.py +13 -0
  142. streamlit/hello/__pycache__/__init__.cpython-312.pyc +0 -0
  143. streamlit/hello/__pycache__/streamlit_app.cpython-312.pyc +0 -0
  144. streamlit/hello/animation_demo.py +82 -0
  145. streamlit/hello/dataframe_demo.py +71 -0
  146. streamlit/hello/hello.py +46 -0
  147. streamlit/hello/mapping_demo.py +113 -0
  148. streamlit/hello/plotting_demo.py +62 -0
  149. streamlit/hello/streamlit_app.py +57 -0
  150. streamlit/hello/utils.py +30 -0
  151. streamlit/logger.py +129 -0
  152. streamlit/material_icon_names.py +25 -0
  153. streamlit/navigation/__init__.py +13 -0
  154. streamlit/navigation/page.py +365 -0
  155. streamlit/net_util.py +125 -0
  156. streamlit/path_security.py +98 -0
  157. streamlit/platform.py +31 -0
  158. streamlit/proto/Alert_pb2.py +28 -0
  159. streamlit/proto/Alert_pb2.pyi +100 -0
  160. streamlit/proto/AppPage_pb2.py +25 -0
  161. streamlit/proto/AppPage_pb2.pyi +75 -0
  162. streamlit/proto/ArrowData_pb2.py +27 -0
  163. streamlit/proto/ArrowData_pb2.pyi +103 -0
  164. streamlit/proto/ArrowNamedDataSet_pb2.py +26 -0
  165. streamlit/proto/ArrowNamedDataSet_pb2.pyi +65 -0
  166. streamlit/proto/AudioInput_pb2.py +26 -0
  167. streamlit/proto/AudioInput_pb2.pyi +72 -0
  168. streamlit/proto/Audio_pb2.py +26 -0
  169. streamlit/proto/Audio_pb2.pyi +75 -0
  170. streamlit/proto/AuthRedirect_pb2.py +25 -0
  171. streamlit/proto/AuthRedirect_pb2.pyi +48 -0
  172. streamlit/proto/AutoRerun_pb2.py +25 -0
  173. streamlit/proto/AutoRerun_pb2.pyi +52 -0
  174. streamlit/proto/BackMsg_pb2.py +29 -0
  175. streamlit/proto/BackMsg_pb2.pyi +132 -0
  176. streamlit/proto/Balloons_pb2.py +25 -0
  177. streamlit/proto/Balloons_pb2.pyi +48 -0
  178. streamlit/proto/BidiComponent_pb2.py +32 -0
  179. streamlit/proto/BidiComponent_pb2.pyi +176 -0
  180. streamlit/proto/Block_pb2.py +62 -0
  181. streamlit/proto/Block_pb2.pyi +518 -0
  182. streamlit/proto/ButtonGroup_pb2.py +32 -0
  183. streamlit/proto/ButtonGroup_pb2.pyi +157 -0
  184. streamlit/proto/ButtonLikeIconPosition_pb2.py +25 -0
  185. streamlit/proto/ButtonLikeIconPosition_pb2.pyi +47 -0
  186. streamlit/proto/Button_pb2.py +26 -0
  187. streamlit/proto/Button_pb2.pyi +82 -0
  188. streamlit/proto/CameraInput_pb2.py +26 -0
  189. streamlit/proto/CameraInput_pb2.pyi +66 -0
  190. streamlit/proto/ChatInput_pb2.py +27 -0
  191. streamlit/proto/ChatInput_pb2.pyi +113 -0
  192. streamlit/proto/Checkbox_pb2.py +28 -0
  193. streamlit/proto/Checkbox_pb2.pyi +99 -0
  194. streamlit/proto/ClientState_pb2.py +28 -0
  195. streamlit/proto/ClientState_pb2.pyi +137 -0
  196. streamlit/proto/Code_pb2.py +25 -0
  197. streamlit/proto/Code_pb2.pyi +59 -0
  198. streamlit/proto/ColorPicker_pb2.py +26 -0
  199. streamlit/proto/ColorPicker_pb2.pyi +82 -0
  200. streamlit/proto/Common_pb2.py +49 -0
  201. streamlit/proto/Common_pb2.pyi +325 -0
  202. streamlit/proto/Components_pb2.py +33 -0
  203. streamlit/proto/Components_pb2.pyi +196 -0
  204. streamlit/proto/Dataframe_pb2.py +30 -0
  205. streamlit/proto/Dataframe_pb2.pyi +172 -0
  206. streamlit/proto/DateInput_pb2.py +26 -0
  207. streamlit/proto/DateInput_pb2.pyi +91 -0
  208. streamlit/proto/DateTimeInput_pb2.py +26 -0
  209. streamlit/proto/DateTimeInput_pb2.pyi +94 -0
  210. streamlit/proto/DeckGlJsonChart_pb2.py +27 -0
  211. streamlit/proto/DeckGlJsonChart_pb2.pyi +91 -0
  212. streamlit/proto/Delta_pb2.py +29 -0
  213. streamlit/proto/Delta_pb2.pyi +82 -0
  214. streamlit/proto/DownloadButton_pb2.py +26 -0
  215. streamlit/proto/DownloadButton_pb2.pyi +92 -0
  216. streamlit/proto/Element_pb2.py +81 -0
  217. streamlit/proto/Element_pb2.pyi +348 -0
  218. streamlit/proto/Empty_pb2.py +25 -0
  219. streamlit/proto/Empty_pb2.pyi +42 -0
  220. streamlit/proto/Exception_pb2.py +26 -0
  221. streamlit/proto/Exception_pb2.pyi +88 -0
  222. streamlit/proto/Favicon_pb2.py +25 -0
  223. streamlit/proto/Favicon_pb2.pyi +47 -0
  224. streamlit/proto/Feedback_pb2.py +27 -0
  225. streamlit/proto/Feedback_pb2.pyi +93 -0
  226. streamlit/proto/FileUploader_pb2.py +26 -0
  227. streamlit/proto/FileUploader_pb2.pyi +90 -0
  228. streamlit/proto/ForwardMsg_pb2.py +48 -0
  229. streamlit/proto/ForwardMsg_pb2.pyi +296 -0
  230. streamlit/proto/GapSize_pb2.py +27 -0
  231. streamlit/proto/GapSize_pb2.pyi +82 -0
  232. streamlit/proto/GitInfo_pb2.py +27 -0
  233. streamlit/proto/GitInfo_pb2.pyi +84 -0
  234. streamlit/proto/GraphVizChart_pb2.py +25 -0
  235. streamlit/proto/GraphVizChart_pb2.pyi +56 -0
  236. streamlit/proto/Heading_pb2.py +25 -0
  237. streamlit/proto/Heading_pb2.pyi +63 -0
  238. streamlit/proto/HeightConfig_pb2.py +25 -0
  239. streamlit/proto/HeightConfig_pb2.pyi +61 -0
  240. streamlit/proto/Help_pb2.py +27 -0
  241. streamlit/proto/Help_pb2.pyi +104 -0
  242. streamlit/proto/Html_pb2.py +25 -0
  243. streamlit/proto/Html_pb2.pyi +52 -0
  244. streamlit/proto/IFrame_pb2.py +25 -0
  245. streamlit/proto/IFrame_pb2.pyi +68 -0
  246. streamlit/proto/Image_pb2.py +27 -0
  247. streamlit/proto/Image_pb2.pyi +73 -0
  248. streamlit/proto/Json_pb2.py +25 -0
  249. streamlit/proto/Json_pb2.pyi +63 -0
  250. streamlit/proto/LabelVisibility_pb2.py +27 -0
  251. streamlit/proto/LabelVisibility_pb2.pyi +69 -0
  252. streamlit/proto/LinkButton_pb2.py +26 -0
  253. streamlit/proto/LinkButton_pb2.pyi +76 -0
  254. streamlit/proto/Logo_pb2.py +27 -0
  255. streamlit/proto/Logo_pb2.pyi +82 -0
  256. streamlit/proto/Markdown_pb2.py +27 -0
  257. streamlit/proto/Markdown_pb2.pyi +83 -0
  258. streamlit/proto/Metric_pb2.py +32 -0
  259. streamlit/proto/Metric_pb2.pyi +145 -0
  260. streamlit/proto/MetricsEvent_pb2.py +28 -0
  261. streamlit/proto/MetricsEvent_pb2.pyi +224 -0
  262. streamlit/proto/MultiSelect_pb2.py +26 -0
  263. streamlit/proto/MultiSelect_pb2.pyi +108 -0
  264. streamlit/proto/Navigation_pb2.py +28 -0
  265. streamlit/proto/Navigation_pb2.pyi +89 -0
  266. streamlit/proto/NewSession_pb2.py +47 -0
  267. streamlit/proto/NewSession_pb2.pyi +753 -0
  268. streamlit/proto/NumberInput_pb2.py +28 -0
  269. streamlit/proto/NumberInput_pb2.pyi +138 -0
  270. streamlit/proto/PageConfig_pb2.py +33 -0
  271. streamlit/proto/PageConfig_pb2.pyi +179 -0
  272. streamlit/proto/PageInfo_pb2.py +25 -0
  273. streamlit/proto/PageInfo_pb2.pyi +50 -0
  274. streamlit/proto/PageLink_pb2.py +26 -0
  275. streamlit/proto/PageLink_pb2.pyi +80 -0
  276. streamlit/proto/PageNotFound_pb2.py +25 -0
  277. streamlit/proto/PageNotFound_pb2.pyi +49 -0
  278. streamlit/proto/PageProfile_pb2.py +29 -0
  279. streamlit/proto/PageProfile_pb2.pyi +146 -0
  280. streamlit/proto/ParentMessage_pb2.py +25 -0
  281. streamlit/proto/ParentMessage_pb2.pyi +53 -0
  282. streamlit/proto/PlotlyChart_pb2.py +27 -0
  283. streamlit/proto/PlotlyChart_pb2.pyi +96 -0
  284. streamlit/proto/Progress_pb2.py +25 -0
  285. streamlit/proto/Progress_pb2.pyi +50 -0
  286. streamlit/proto/Radio_pb2.py +26 -0
  287. streamlit/proto/Radio_pb2.pyi +104 -0
  288. streamlit/proto/RootContainer_pb2.py +25 -0
  289. streamlit/proto/RootContainer_pb2.pyi +56 -0
  290. streamlit/proto/Selectbox_pb2.py +26 -0
  291. streamlit/proto/Selectbox_pb2.pyi +107 -0
  292. streamlit/proto/SessionEvent_pb2.py +26 -0
  293. streamlit/proto/SessionEvent_pb2.pyi +72 -0
  294. streamlit/proto/SessionStatus_pb2.py +25 -0
  295. streamlit/proto/SessionStatus_pb2.pyi +64 -0
  296. streamlit/proto/Skeleton_pb2.py +27 -0
  297. streamlit/proto/Skeleton_pb2.pyi +75 -0
  298. streamlit/proto/Slider_pb2.py +30 -0
  299. streamlit/proto/Slider_pb2.pyi +161 -0
  300. streamlit/proto/Snow_pb2.py +25 -0
  301. streamlit/proto/Snow_pb2.pyi +48 -0
  302. streamlit/proto/Space_pb2.py +25 -0
  303. streamlit/proto/Space_pb2.pyi +48 -0
  304. streamlit/proto/Spinner_pb2.py +25 -0
  305. streamlit/proto/Spinner_pb2.pyi +56 -0
  306. streamlit/proto/Table_pb2.py +28 -0
  307. streamlit/proto/Table_pb2.pyi +83 -0
  308. streamlit/proto/TextAlignmentConfig_pb2.py +27 -0
  309. streamlit/proto/TextAlignmentConfig_pb2.pyi +69 -0
  310. streamlit/proto/TextArea_pb2.py +26 -0
  311. streamlit/proto/TextArea_pb2.pyi +97 -0
  312. streamlit/proto/TextInput_pb2.py +28 -0
  313. streamlit/proto/TextInput_pb2.pyi +124 -0
  314. streamlit/proto/Text_pb2.py +25 -0
  315. streamlit/proto/Text_pb2.pyi +53 -0
  316. streamlit/proto/TimeInput_pb2.py +26 -0
  317. streamlit/proto/TimeInput_pb2.pyi +86 -0
  318. streamlit/proto/Toast_pb2.py +25 -0
  319. streamlit/proto/Toast_pb2.pyi +64 -0
  320. streamlit/proto/Transient_pb2.py +26 -0
  321. streamlit/proto/Transient_pb2.pyi +53 -0
  322. streamlit/proto/VegaLiteChart_pb2.py +27 -0
  323. streamlit/proto/VegaLiteChart_pb2.pyi +92 -0
  324. streamlit/proto/Video_pb2.py +30 -0
  325. streamlit/proto/Video_pb2.pyi +129 -0
  326. streamlit/proto/WidgetStates_pb2.py +31 -0
  327. streamlit/proto/WidgetStates_pb2.pyi +157 -0
  328. streamlit/proto/WidthConfig_pb2.py +25 -0
  329. streamlit/proto/WidthConfig_pb2.pyi +61 -0
  330. streamlit/proto/__init__.py +15 -0
  331. streamlit/proto/openmetrics_data_model_pb2.py +58 -0
  332. streamlit/proto/openmetrics_data_model_pb2.pyi +558 -0
  333. streamlit/py.typed +0 -0
  334. streamlit/runtime/__init__.py +50 -0
  335. streamlit/runtime/app_session.py +1302 -0
  336. streamlit/runtime/caching/__init__.py +118 -0
  337. streamlit/runtime/caching/cache_data_api.py +775 -0
  338. streamlit/runtime/caching/cache_errors.py +143 -0
  339. streamlit/runtime/caching/cache_resource_api.py +756 -0
  340. streamlit/runtime/caching/cache_type.py +33 -0
  341. streamlit/runtime/caching/cache_utils.py +601 -0
  342. streamlit/runtime/caching/cached_message_replay.py +290 -0
  343. streamlit/runtime/caching/hashing.py +655 -0
  344. streamlit/runtime/caching/legacy_cache_api.py +170 -0
  345. streamlit/runtime/caching/storage/__init__.py +29 -0
  346. streamlit/runtime/caching/storage/cache_storage_protocol.py +236 -0
  347. streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
  348. streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +159 -0
  349. streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
  350. streamlit/runtime/caching/ttl_cleanup_cache.py +85 -0
  351. streamlit/runtime/connection_factory.py +498 -0
  352. streamlit/runtime/context.py +449 -0
  353. streamlit/runtime/context_util.py +49 -0
  354. streamlit/runtime/credentials.py +355 -0
  355. streamlit/runtime/download_data_util.py +53 -0
  356. streamlit/runtime/forward_msg_cache.py +101 -0
  357. streamlit/runtime/forward_msg_queue.py +263 -0
  358. streamlit/runtime/fragment.py +441 -0
  359. streamlit/runtime/media_file_manager.py +409 -0
  360. streamlit/runtime/media_file_storage.py +143 -0
  361. streamlit/runtime/memory_media_file_storage.py +201 -0
  362. streamlit/runtime/memory_session_storage.py +77 -0
  363. streamlit/runtime/memory_uploaded_file_manager.py +149 -0
  364. streamlit/runtime/metrics_util.py +612 -0
  365. streamlit/runtime/pages_manager.py +160 -0
  366. streamlit/runtime/runtime.py +775 -0
  367. streamlit/runtime/runtime_util.py +108 -0
  368. streamlit/runtime/script_data.py +46 -0
  369. streamlit/runtime/scriptrunner/__init__.py +38 -0
  370. streamlit/runtime/scriptrunner/exec_code.py +167 -0
  371. streamlit/runtime/scriptrunner/magic.py +277 -0
  372. streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
  373. streamlit/runtime/scriptrunner/script_cache.py +89 -0
  374. streamlit/runtime/scriptrunner/script_runner.py +805 -0
  375. streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
  376. streamlit/runtime/scriptrunner_utils/exceptions.py +44 -0
  377. streamlit/runtime/scriptrunner_utils/script_requests.py +311 -0
  378. streamlit/runtime/scriptrunner_utils/script_run_context.py +277 -0
  379. streamlit/runtime/secrets.py +533 -0
  380. streamlit/runtime/session_manager.py +430 -0
  381. streamlit/runtime/state/__init__.py +47 -0
  382. streamlit/runtime/state/common.py +256 -0
  383. streamlit/runtime/state/presentation.py +85 -0
  384. streamlit/runtime/state/query_params.py +767 -0
  385. streamlit/runtime/state/query_params_proxy.py +222 -0
  386. streamlit/runtime/state/safe_session_state.py +146 -0
  387. streamlit/runtime/state/session_state.py +1299 -0
  388. streamlit/runtime/state/session_state_proxy.py +153 -0
  389. streamlit/runtime/state/widgets.py +197 -0
  390. streamlit/runtime/stats.py +356 -0
  391. streamlit/runtime/theme_util.py +148 -0
  392. streamlit/runtime/uploaded_file_manager.py +152 -0
  393. streamlit/runtime/websocket_session_manager.py +301 -0
  394. streamlit/source_util.py +97 -0
  395. streamlit/starlette.py +34 -0
  396. streamlit/string_util.py +264 -0
  397. streamlit/temporary_directory.py +67 -0
  398. streamlit/testing/__init__.py +13 -0
  399. streamlit/testing/v1/__init__.py +17 -0
  400. streamlit/testing/v1/app_test.py +1089 -0
  401. streamlit/testing/v1/element_tree.py +2272 -0
  402. streamlit/testing/v1/local_script_runner.py +176 -0
  403. streamlit/testing/v1/util.py +61 -0
  404. streamlit/time_util.py +73 -0
  405. streamlit/type_util.py +480 -0
  406. streamlit/url_util.py +120 -0
  407. streamlit/user_info.py +698 -0
  408. streamlit/util.py +108 -0
  409. streamlit/vendor/__init__.py +0 -0
  410. streamlit/vendor/pympler/__init__.py +0 -0
  411. streamlit/vendor/pympler/asizeof.py +2870 -0
  412. streamlit/version.py +18 -0
  413. streamlit/watcher/__init__.py +28 -0
  414. streamlit/watcher/event_based_path_watcher.py +500 -0
  415. streamlit/watcher/folder_black_list.py +82 -0
  416. streamlit/watcher/local_sources_watcher.py +297 -0
  417. streamlit/watcher/path_watcher.py +244 -0
  418. streamlit/watcher/polling_path_watcher.py +138 -0
  419. streamlit/watcher/util.py +223 -0
  420. streamlit/web/__init__.py +13 -0
  421. streamlit/web/bootstrap.py +463 -0
  422. streamlit/web/cache_storage_manager_config.py +38 -0
  423. streamlit/web/cli.py +465 -0
  424. streamlit/web/server/__init__.py +30 -0
  425. streamlit/web/server/app_discovery.py +422 -0
  426. streamlit/web/server/app_static_file_handler.py +102 -0
  427. streamlit/web/server/authlib_tornado_integration.py +125 -0
  428. streamlit/web/server/bidi_component_request_handler.py +193 -0
  429. streamlit/web/server/browser_websocket_handler.py +341 -0
  430. streamlit/web/server/component_file_utils.py +105 -0
  431. streamlit/web/server/component_request_handler.py +107 -0
  432. streamlit/web/server/media_file_handler.py +148 -0
  433. streamlit/web/server/oauth_authlib_routes.py +314 -0
  434. streamlit/web/server/oidc_mixin.py +138 -0
  435. streamlit/web/server/routes.py +257 -0
  436. streamlit/web/server/server.py +555 -0
  437. streamlit/web/server/server_util.py +235 -0
  438. streamlit/web/server/starlette/__init__.py +23 -0
  439. streamlit/web/server/starlette/starlette_app.py +541 -0
  440. streamlit/web/server/starlette/starlette_app_utils.py +306 -0
  441. streamlit/web/server/starlette/starlette_auth_routes.py +584 -0
  442. streamlit/web/server/starlette/starlette_gzip_middleware.py +121 -0
  443. streamlit/web/server/starlette/starlette_path_security_middleware.py +97 -0
  444. streamlit/web/server/starlette/starlette_routes.py +884 -0
  445. streamlit/web/server/starlette/starlette_server.py +496 -0
  446. streamlit/web/server/starlette/starlette_server_config.py +55 -0
  447. streamlit/web/server/starlette/starlette_static_routes.py +181 -0
  448. streamlit/web/server/starlette/starlette_websocket.py +560 -0
  449. streamlit/web/server/stats_request_handler.py +116 -0
  450. streamlit/web/server/upload_file_request_handler.py +158 -0
  451. streamlit/web/server/websocket_headers.py +56 -0
  452. streamlit_data_editor_plus-0.1.0.dist-info/METADATA +76 -0
  453. streamlit_data_editor_plus-0.1.0.dist-info/RECORD +456 -0
  454. streamlit_data_editor_plus-0.1.0.dist-info/WHEEL +5 -0
  455. streamlit_data_editor_plus-0.1.0.dist-info/entry_points.txt +2 -0
  456. streamlit_data_editor_plus-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,189 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
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 os
18
+ import re
19
+ from pathlib import Path
20
+ from typing import TYPE_CHECKING, Any, cast
21
+
22
+ from streamlit.delta_generator_singletons import get_dg_singleton_instance
23
+ from streamlit.elements.lib.layout_utils import (
24
+ LayoutConfig,
25
+ Width,
26
+ validate_width,
27
+ )
28
+ from streamlit.errors import StreamlitAPIException
29
+ from streamlit.proto.Html_pb2 import Html as HtmlProto
30
+ from streamlit.runtime.metrics_util import gather_metrics
31
+ from streamlit.string_util import clean_text
32
+ from streamlit.type_util import SupportsReprHtml, SupportsStr, has_callable_attr
33
+
34
+ if TYPE_CHECKING:
35
+ from streamlit.delta_generator import DeltaGenerator
36
+
37
+
38
+ class HtmlMixin:
39
+ @gather_metrics("html")
40
+ def html(
41
+ self,
42
+ body: str | Path | SupportsStr | SupportsReprHtml,
43
+ *, # keyword-only arguments:
44
+ width: Width = "stretch",
45
+ unsafe_allow_javascript: bool = False,
46
+ ) -> DeltaGenerator:
47
+ """Insert HTML into your app.
48
+
49
+ Adding custom HTML to your app impacts safety, styling, and
50
+ maintainability. We sanitize HTML with `DOMPurify
51
+ <https://github.com/cure53/DOMPurify>`_, but inserting HTML remains a
52
+ developer risk. Passing untrusted code to ``st.html`` or dynamically
53
+ loading external code can increase the risk of vulnerabilities in your
54
+ app.
55
+
56
+ ``st.html`` content is **not** iframed. By default, JavaScript is
57
+ ignored. To execute JavaScript contained in your HTML, set
58
+ ``unsafe_allow_javascript=True``. Use this with caution and never pass
59
+ untrusted input.
60
+
61
+ Parameters
62
+ ----------
63
+ body : any
64
+ The HTML code to insert. This can be one of the following:
65
+
66
+ - A string of HTML code.
67
+ - A path to a local file with HTML code. The path can be a ``str``
68
+ or ``Path`` object. Paths can be absolute or relative to the
69
+ working directory (where you execute ``streamlit run``).
70
+ - Any object. If ``body`` is not a string or path, Streamlit will
71
+ convert the object to a string. ``body._repr_html_()`` takes
72
+ precedence over ``str(body)`` when available.
73
+
74
+ If the resulting HTML content is empty, Streamlit will raise an
75
+ error.
76
+
77
+ If ``body`` is a path to a CSS file, Streamlit will wrap the CSS
78
+ content in ``<style>`` tags automatically. When the resulting HTML
79
+ content only contains style tags, Streamlit will send the content
80
+ to the event container instead of the main container to avoid
81
+ taking up space in the app.
82
+
83
+ width : "stretch", "content", or int
84
+ The width of the HTML element. This can be one of the following:
85
+
86
+ - ``"stretch"`` (default): The width of the element matches the
87
+ width of the parent container.
88
+ - ``"content"``: The width of the element matches the width of its
89
+ content, but doesn't exceed the width of the parent container.
90
+ - An integer specifying the width in pixels: The element has a
91
+ fixed width. If the specified width is greater than the width of
92
+ the parent container, the width of the element matches the width
93
+ of the parent container.
94
+
95
+ unsafe_allow_javascript : bool
96
+ Whether to execute JavaScript contained in your HTML. If this is
97
+ ``False`` (default), JavaScript is ignored. If this is ``True``,
98
+ JavaScript is executed. Use this with caution and never pass
99
+ untrusted input.
100
+
101
+ Example
102
+ -------
103
+ >>> import streamlit as st
104
+ >>>
105
+ >>> st.html(
106
+ ... "<p><span style='text-decoration: line-through double red;'>Oops</span>!</p>"
107
+ ... )
108
+
109
+ .. output::
110
+ https://doc-html.streamlit.app/
111
+ height: 300px
112
+
113
+ """
114
+ html_proto = HtmlProto()
115
+
116
+ # If body supports _repr_html_, use that.
117
+ if has_callable_attr(body, "_repr_html_"):
118
+ html_content = cast("SupportsReprHtml", body)._repr_html_()
119
+
120
+ # Check if the body is a file path. May include filesystem lookup.
121
+ elif isinstance(body, Path) or _is_file(body):
122
+ file_path = str(body)
123
+ with open(file_path, encoding="utf-8") as f:
124
+ html_content = f.read()
125
+
126
+ # If it's a CSS file, wrap the content in style tags
127
+ if Path(file_path).suffix.lower() == ".css":
128
+ html_content = f"<style>{html_content}</style>"
129
+
130
+ # OK, let's just try converting to string and hope for the best.
131
+ else:
132
+ html_content = clean_text(cast("SupportsStr", body))
133
+
134
+ # Raise an error if the body is empty
135
+ if html_content == "":
136
+ raise StreamlitAPIException("`st.html` body cannot be empty")
137
+
138
+ validate_width(width, allow_content=True)
139
+ layout_config = LayoutConfig(width=width)
140
+
141
+ # Handle the case where there are only style tags - issue #9388
142
+ # Use event container for style tags so they don't take up space in the app content
143
+ if _html_only_style_tags(html_content):
144
+ # If true, there are only style tags - send html to the event container
145
+ html_proto.body = html_content
146
+ return self._event_dg._enqueue("html", html_proto)
147
+ # Otherwise, send the html to the main container as normal
148
+ # Only set the unsafe JS flag for non-style-only HTML content
149
+ html_proto.unsafe_allow_javascript = unsafe_allow_javascript
150
+ html_proto.body = html_content
151
+ return self.dg._enqueue("html", html_proto, layout_config=layout_config)
152
+
153
+ @property
154
+ def dg(self) -> DeltaGenerator:
155
+ """Get our DeltaGenerator."""
156
+ return cast("DeltaGenerator", self)
157
+
158
+ @property
159
+ def _event_dg(self) -> DeltaGenerator:
160
+ """Get the event delta generator."""
161
+ return get_dg_singleton_instance().event_dg
162
+
163
+
164
+ def _html_only_style_tags(html_content: str) -> bool:
165
+ """Check if the HTML content is only style tags."""
166
+ # Pattern to match HTML comments
167
+ comment_pattern = r"<!--.*?-->"
168
+ # Pattern to match style tags and their contents (case-insensitive)
169
+ style_pattern = r"<style[^>]*>.*?</style>"
170
+
171
+ # Remove style tags and comments
172
+ html_without_comments = re.sub(comment_pattern, "", html_content, flags=re.DOTALL)
173
+ html_without_styles_and_comments = re.sub(
174
+ style_pattern, "", html_without_comments, flags=re.DOTALL | re.IGNORECASE
175
+ )
176
+
177
+ # Return whether html content is empty after removing style tags and comments
178
+ return html_without_styles_and_comments.strip() == ""
179
+
180
+
181
+ def _is_file(obj: Any) -> bool:
182
+ """Checks if obj is a file, and doesn't throw if not.
183
+
184
+ The "not throwing" part is important!
185
+ """
186
+ try:
187
+ return os.path.isfile(obj)
188
+ except TypeError:
189
+ return False
@@ -0,0 +1,245 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
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
+ from typing import TYPE_CHECKING, cast
18
+
19
+ from streamlit.elements.lib.layout_utils import LayoutConfig
20
+ from streamlit.errors import StreamlitAPIException
21
+ from streamlit.proto.IFrame_pb2 import IFrame as IFrameProto
22
+ from streamlit.runtime.metrics_util import gather_metrics
23
+
24
+ if TYPE_CHECKING:
25
+ from streamlit.delta_generator import DeltaGenerator
26
+
27
+
28
+ class IframeMixin:
29
+ @gather_metrics("_iframe")
30
+ def _iframe(
31
+ self,
32
+ src: str,
33
+ width: int | None = None,
34
+ height: int | None = None,
35
+ scrolling: bool = False,
36
+ *,
37
+ tab_index: int | None = None,
38
+ ) -> DeltaGenerator:
39
+ """Load a remote URL in an iframe.
40
+
41
+ To use this function, import it from the ``streamlit.components.v1``
42
+ module.
43
+
44
+ .. warning::
45
+ Using ``st.components.v1.iframe`` directly (instead of importing
46
+ its module) is deprecated and will be disallowed in a later version.
47
+
48
+ Parameters
49
+ ----------
50
+ src : str
51
+ The URL of the page to embed.
52
+
53
+ width : int
54
+ The width of the iframe in CSS pixels. By default, this is the
55
+ app's default element width.
56
+
57
+ height : int
58
+ The height of the frame in CSS pixels. By default, this is ``150``.
59
+
60
+ scrolling : bool
61
+ Whether to allow scrolling in the iframe. If this ``False``
62
+ (default), Streamlit crops any content larger than the iframe and
63
+ does not show a scrollbar. If this is ``True``, Streamlit shows a
64
+ scrollbar when the content is larger than the iframe.
65
+
66
+ tab_index : int or None
67
+ Specifies how and if the iframe is sequentially focusable.
68
+ Users typically use the ``Tab`` key for sequential focus
69
+ navigation.
70
+
71
+ This can be one of the following values:
72
+
73
+ - ``None`` (default): Uses the browser's default behavior.
74
+ - ``-1``: Removes the iframe from sequential navigation, but still
75
+ allows it to be focused programmatically.
76
+ - ``0``: Includes the iframe in sequential navigation in the order
77
+ it appears in the document but after all elements with a positive
78
+ ``tab_index``.
79
+ - Positive integer: Includes the iframe in sequential navigation.
80
+ Elements are navigated in ascending order of their positive
81
+ ``tab_index``.
82
+
83
+ For more information, see the `tabindex
84
+ <https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex>`_
85
+ documentation on MDN.
86
+
87
+ Example
88
+ -------
89
+
90
+ >>> import streamlit.components.v1 as components
91
+ >>>
92
+ >>> components.iframe("https://example.com", height=500)
93
+
94
+ """
95
+ iframe_proto = IFrameProto()
96
+ marshall(
97
+ iframe_proto,
98
+ src=src,
99
+ scrolling=scrolling,
100
+ tab_index=tab_index,
101
+ )
102
+ layout_config = LayoutConfig(
103
+ width=width if width is not None else "stretch",
104
+ height=height if height is not None else 150,
105
+ )
106
+ return self.dg._enqueue("iframe", iframe_proto, layout_config=layout_config)
107
+
108
+ @gather_metrics("_html")
109
+ def _html(
110
+ self,
111
+ html: str,
112
+ width: int | None = None,
113
+ height: int | None = None,
114
+ scrolling: bool = False,
115
+ *,
116
+ tab_index: int | None = None,
117
+ ) -> DeltaGenerator:
118
+ """Display an HTML string in an iframe.
119
+
120
+ To use this function, import it from the ``streamlit.components.v1``
121
+ module.
122
+
123
+ If you want to insert HTML text into your app without an iframe, try
124
+ ``st.html`` instead.
125
+
126
+ .. warning::
127
+ Using ``st.components.v1.html`` directly (instead of importing
128
+ its module) is deprecated and will be disallowed in a later version.
129
+
130
+ Parameters
131
+ ----------
132
+ html : str
133
+ The HTML string to embed in the iframe.
134
+
135
+ width : int
136
+ The width of the iframe in CSS pixels. By default, this is the
137
+ app's default element width.
138
+
139
+ height : int
140
+ The height of the frame in CSS pixels. By default, this is ``150``.
141
+
142
+ scrolling : bool
143
+ Whether to allow scrolling in the iframe. If this ``False``
144
+ (default), Streamlit crops any content larger than the iframe and
145
+ does not show a scrollbar. If this is ``True``, Streamlit shows a
146
+ scrollbar when the content is larger than the iframe.
147
+
148
+ tab_index : int or None
149
+ Specifies how and if the iframe is sequentially focusable.
150
+ Users typically use the ``Tab`` key for sequential focus
151
+ navigation.
152
+
153
+ This can be one of the following values:
154
+
155
+ - ``None`` (default): Uses the browser's default behavior.
156
+ - ``-1``: Removes the iframe from sequential navigation, but still
157
+ allows it to be focused programmatically.
158
+ - ``0``: Includes the iframe in sequential navigation in the order
159
+ it appears in the document but after all elements with a positive
160
+ ``tab_index``.
161
+ - Positive integer: Includes the iframe in sequential navigation.
162
+ Elements are navigated in ascending order of their positive
163
+ ``tab_index``.
164
+
165
+ For more information, see the `tabindex
166
+ <https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex>`_
167
+ documentation on MDN.
168
+
169
+ Example
170
+ -------
171
+
172
+ >>> import streamlit.components.v1 as components
173
+ >>>
174
+ >>> components.html(
175
+ >>> "<p><span style='text-decoration: line-through double red;'>Oops</span>!</p>"
176
+ >>> )
177
+
178
+ """
179
+ iframe_proto = IFrameProto()
180
+ marshall(
181
+ iframe_proto,
182
+ srcdoc=html,
183
+ scrolling=scrolling,
184
+ tab_index=tab_index,
185
+ )
186
+ layout_config = LayoutConfig(
187
+ width=width if width is not None else "stretch",
188
+ height=height if height is not None else 150,
189
+ )
190
+ return self.dg._enqueue("iframe", iframe_proto, layout_config=layout_config)
191
+
192
+ @property
193
+ def dg(self) -> DeltaGenerator:
194
+ """Get our DeltaGenerator."""
195
+ return cast("DeltaGenerator", self)
196
+
197
+
198
+ def marshall(
199
+ proto: IFrameProto,
200
+ src: str | None = None,
201
+ srcdoc: str | None = None,
202
+ scrolling: bool = False,
203
+ tab_index: int | None = None,
204
+ ) -> None:
205
+ """Marshalls data into an IFrame proto.
206
+
207
+ These parameters correspond directly to <iframe> attributes, which are
208
+ described in more detail at
209
+ https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe.
210
+
211
+ Parameters
212
+ ----------
213
+ proto : IFrame protobuf
214
+ The protobuf object to marshall data into.
215
+ src : str
216
+ The URL of the page to embed.
217
+ srcdoc : str
218
+ Inline HTML to embed. Overrides src.
219
+ scrolling : bool
220
+ If true, show a scrollbar when the content is larger than the iframe.
221
+ Otherwise, never show a scrollbar.
222
+ tab_index : int, optional
223
+ Specifies the tab order of the iframe.
224
+
225
+ """
226
+ if src is not None:
227
+ proto.src = src
228
+
229
+ if srcdoc is not None:
230
+ proto.srcdoc = srcdoc
231
+
232
+ proto.scrolling = scrolling
233
+
234
+ if tab_index is not None:
235
+ # Validate tab_index according to web specifications
236
+ if not (
237
+ isinstance(tab_index, int)
238
+ and not isinstance(tab_index, bool)
239
+ and tab_index >= -1
240
+ ):
241
+ raise StreamlitAPIException(
242
+ "tab_index must be None, -1, or a non-negative integer."
243
+ )
244
+
245
+ proto.tab_index = tab_index
@@ -0,0 +1,221 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
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
+ # Some casts in this file are only occasionally necessary depending on the
16
+ # user's Python version, and mypy doesn't have a good way of toggling this
17
+ # specific config option at a per-line level.
18
+ # mypy: no-warn-unused-ignores
19
+
20
+ """Image marshalling."""
21
+
22
+ from __future__ import annotations
23
+
24
+ from typing import TYPE_CHECKING, Literal, TypeAlias, cast
25
+
26
+ from streamlit.deprecation_util import (
27
+ make_deprecated_name_warning,
28
+ show_deprecation_warning,
29
+ )
30
+ from streamlit.elements.lib.image_utils import (
31
+ Channels,
32
+ ImageFormatOrAuto,
33
+ ImageOrImageList,
34
+ marshall_images,
35
+ )
36
+ from streamlit.elements.lib.layout_utils import LayoutConfig, Width, validate_width
37
+ from streamlit.errors import StreamlitAPIException
38
+ from streamlit.proto.Image_pb2 import ImageList as ImageListProto
39
+ from streamlit.runtime.metrics_util import gather_metrics
40
+
41
+ if TYPE_CHECKING:
42
+ from streamlit.delta_generator import DeltaGenerator
43
+
44
+ UseColumnWith: TypeAlias = Literal["auto", "always", "never"] | bool | None
45
+
46
+
47
+ class ImageMixin:
48
+ @gather_metrics("image")
49
+ def image(
50
+ self,
51
+ image: ImageOrImageList,
52
+ # TODO: Narrow type of caption, dependent on type of image,
53
+ # by way of overload
54
+ caption: str | list[str] | None = None,
55
+ width: Width = "content",
56
+ use_column_width: UseColumnWith = None,
57
+ clamp: bool = False,
58
+ channels: Channels = "RGB",
59
+ output_format: ImageFormatOrAuto = "auto",
60
+ *,
61
+ use_container_width: bool | None = None,
62
+ ) -> DeltaGenerator:
63
+ """Display an image or list of images.
64
+
65
+ Parameters
66
+ ----------
67
+ image : numpy.ndarray, BytesIO, str, Path, or list of these
68
+ The image to display. This can be one of the following:
69
+
70
+ - A URL (string) for a hosted image.
71
+ - A path to a local image file. The path can be a ``str``
72
+ or ``Path`` object. Paths can be absolute or relative to the
73
+ working directory (where you execute ``streamlit run``).
74
+ - An SVG string like ``<svg xmlns=...</svg>``.
75
+ - A byte array defining an image. This includes monochrome images of
76
+ shape (w,h) or (w,h,1), color images of shape (w,h,3), or RGBA
77
+ images of shape (w,h,4), where w and h are the image width and
78
+ height, respectively.
79
+ - A list of any of the above. Streamlit displays the list as a
80
+ row of images that overflow to additional rows as needed.
81
+ caption : str or list of str
82
+ Image caption(s). If this is ``None`` (default), no caption is
83
+ displayed. If ``image`` is a list of multiple images, ``caption``
84
+ must be a list of captions (one caption for each image) or
85
+ ``None``.
86
+
87
+ Captions can optionally contain GitHub-flavored Markdown. Syntax
88
+ information can be found at: https://github.github.com/gfm.
89
+
90
+ See the ``body`` parameter of |st.markdown|_ for additional,
91
+ supported Markdown directives.
92
+
93
+ .. |st.markdown| replace:: ``st.markdown``
94
+ .. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
95
+ width : "content", "stretch", or int
96
+ The width of the image element. This can be one of the following:
97
+
98
+ - ``"content"`` (default): The width of the element matches the
99
+ width of its content, but doesn't exceed the width of the parent
100
+ container.
101
+ - ``"stretch"``: The width of the element matches the width of the
102
+ parent container.
103
+ - An integer specifying the width in pixels: The element has a
104
+ fixed width. If the specified width is greater than the width of
105
+ the parent container, the width of the element matches the width
106
+ of the parent container.
107
+
108
+ When using an SVG image without a default width, use ``"stretch"``
109
+ or an integer.
110
+ use_column_width : "auto", "always", "never", or bool
111
+ If "auto", set the image's width to its natural size,
112
+ but do not exceed the width of the column.
113
+ If "always" or True, set the image's width to the column width.
114
+ If "never" or False, set the image's width to its natural size.
115
+ Note: if set, `use_column_width` takes precedence over the `width` parameter.
116
+
117
+ .. deprecated::
118
+ ``use_column_width`` is deprecated and will be removed in a future
119
+ release. Please use the ``width`` parameter instead.
120
+
121
+ clamp : bool
122
+ Whether to clamp image pixel values to a valid range (0-255 per
123
+ channel). This is only used for byte array images; the parameter is
124
+ ignored for image URLs and files. If this is ``False`` (default)
125
+ and an image has an out-of-range value, a ``RuntimeError`` will be
126
+ raised.
127
+ channels : "RGB" or "BGR"
128
+ The color format when ``image`` is an ``nd.array``. This is ignored
129
+ for other image types. If this is ``"RGB"`` (default),
130
+ ``image[:, :, 0]`` is the red channel, ``image[:, :, 1]`` is the
131
+ green channel, and ``image[:, :, 2]`` is the blue channel. For
132
+ images coming from libraries like OpenCV, you should set this to
133
+ ``"BGR"`` instead.
134
+ output_format : "JPEG", "PNG", or "auto"
135
+ The output format to use when transferring the image data. If this
136
+ is ``"auto"`` (default), Streamlit identifies the compression type
137
+ based on the type and format of the image. Photos should use the
138
+ ``"JPEG"`` format for lossy compression while diagrams should use
139
+ the ``"PNG"`` format for lossless compression.
140
+
141
+ use_container_width : bool
142
+ Whether to override ``width`` with the width of the parent
143
+ container. If ``use_container_width`` is ``False`` (default),
144
+ Streamlit sets the image's width according to ``width``. If
145
+ ``use_container_width`` is ``True``, Streamlit sets the width of
146
+ the image to match the width of the parent container.
147
+
148
+ .. deprecated::
149
+ ``use_container_width`` is deprecated and will be removed in a
150
+ future release. For ``use_container_width=True``, use
151
+ ``width="stretch"``. For ``use_container_width=False``, use
152
+ ``width="content"``.
153
+
154
+ Example
155
+ -------
156
+ >>> import streamlit as st
157
+ >>> st.image("sunrise.jpg", caption="Sunrise by the mountains")
158
+
159
+ .. output::
160
+ https://doc-image.streamlit.app/
161
+ height: 710px
162
+
163
+ """
164
+
165
+ if use_column_width is not None:
166
+ if use_container_width is not None:
167
+ raise StreamlitAPIException(
168
+ "`use_container_width` and `use_column_width` cannot be set at the same time.",
169
+ "Please utilize `use_container_width` since `use_column_width` is deprecated.",
170
+ )
171
+
172
+ show_deprecation_warning(
173
+ "The `use_column_width` parameter has been deprecated and will be removed "
174
+ "in a future release. Please utilize the `width` parameter instead."
175
+ )
176
+ if use_column_width in {"auto", "never"} or use_column_width is False:
177
+ width = "content"
178
+ elif use_column_width == "always" or use_column_width is True:
179
+ width = "stretch"
180
+
181
+ if use_container_width is not None:
182
+ show_deprecation_warning(
183
+ make_deprecated_name_warning(
184
+ "use_container_width",
185
+ "width",
186
+ "2025-12-31",
187
+ "For `use_container_width=True`, use `width='stretch'`. "
188
+ "For `use_container_width=False`, use `width='content'`.",
189
+ include_st_prefix=False,
190
+ ),
191
+ show_in_browser=False,
192
+ )
193
+ if use_container_width is True:
194
+ width = "stretch"
195
+ elif isinstance(width, int):
196
+ # Preserve the existing behavior with respect to use_container_width=False
197
+ # and width=int.
198
+ pass
199
+ else:
200
+ width = "content"
201
+
202
+ validate_width(width, allow_content=True)
203
+ layout_config = LayoutConfig(width=width)
204
+
205
+ image_list_proto = ImageListProto()
206
+ marshall_images(
207
+ self.dg._get_delta_path_str(),
208
+ image,
209
+ caption,
210
+ layout_config,
211
+ image_list_proto,
212
+ clamp,
213
+ channels,
214
+ output_format,
215
+ )
216
+ return self.dg._enqueue("imgs", image_list_proto, layout_config=layout_config)
217
+
218
+ @property
219
+ def dg(self) -> DeltaGenerator:
220
+ """Get our DeltaGenerator."""
221
+ return cast("DeltaGenerator", self)