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,226 @@
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
+ """Streamlit support for GraphViz charts."""
16
+
17
+ from __future__ import annotations
18
+
19
+ from typing import TYPE_CHECKING, TypeAlias, Union, cast
20
+
21
+ from streamlit import type_util
22
+ from streamlit.deprecation_util import (
23
+ make_deprecated_name_warning,
24
+ show_deprecation_warning,
25
+ )
26
+ from streamlit.elements.lib.layout_utils import (
27
+ Height,
28
+ LayoutConfig,
29
+ Width,
30
+ validate_height,
31
+ validate_width,
32
+ )
33
+ from streamlit.errors import StreamlitAPIException
34
+ from streamlit.proto.GraphVizChart_pb2 import GraphVizChart as GraphVizChartProto
35
+ from streamlit.runtime.metrics_util import gather_metrics
36
+ from streamlit.util import calc_md5
37
+
38
+ if TYPE_CHECKING:
39
+ import graphviz
40
+
41
+ from streamlit.delta_generator import DeltaGenerator
42
+
43
+ FigureOrDot: TypeAlias = Union[
44
+ "graphviz.Graph", "graphviz.Digraph", "graphviz.Source", str
45
+ ]
46
+
47
+
48
+ class GraphvizMixin:
49
+ @gather_metrics("graphviz_chart")
50
+ def graphviz_chart(
51
+ self,
52
+ figure_or_dot: FigureOrDot,
53
+ use_container_width: bool | None = None,
54
+ *, # keyword-only arguments:
55
+ width: Width = "content",
56
+ height: Height = "content",
57
+ ) -> DeltaGenerator:
58
+ """Display a graph using the dagre-d3 library.
59
+
60
+ .. Important::
61
+ You must install ``graphviz>=0.19.0`` to use this command. You can
62
+ install all charting dependencies (except Bokeh) as an extra with
63
+ Streamlit:
64
+
65
+ .. code-block:: shell
66
+
67
+ pip install streamlit[charts]
68
+
69
+ Parameters
70
+ ----------
71
+ figure_or_dot : graphviz.dot.Graph, graphviz.dot.Digraph, graphviz.sources.Source, str
72
+ The Graphlib graph object or dot string to display
73
+
74
+ use_container_width : bool
75
+ Whether to override the figure's native width with the width of
76
+ the parent container. If ``use_container_width`` is ``False``
77
+ (default), Streamlit sets the width of the chart to fit its contents
78
+ according to the plotting library, up to the width of the parent
79
+ container. If ``use_container_width`` is ``True``, Streamlit sets
80
+ the width of the figure to match the width of the parent container.
81
+
82
+ .. deprecated::
83
+ ``use_container_width`` is deprecated and will be removed in a
84
+ future release. For ``use_container_width=True``, use
85
+ ``width="stretch"``. For ``use_container_width=False``, use
86
+ ``width="content"``.
87
+
88
+ width : "content", "stretch", or int
89
+ The width of the chart element. This can be one of the following:
90
+
91
+ - ``"content"`` (default): The width of the element matches the
92
+ width of its content, but doesn't exceed the width of the parent
93
+ container.
94
+ - ``"stretch"``: The width of the element matches the width of the
95
+ parent container.
96
+ - An integer specifying the width in pixels: The element has a
97
+ fixed width. If the specified width is greater than the width of
98
+ the parent container, the width of the element matches the width
99
+ of the parent container.
100
+
101
+ height : "content", "stretch", or int
102
+ The height of the chart element. This can be one of the following:
103
+
104
+ - ``"content"`` (default): The height of the element matches the
105
+ height of its content.
106
+ - ``"stretch"``: The height of the element matches the height of
107
+ its content or the height of the parent container, whichever is
108
+ larger. If the element is not in a parent container, the height
109
+ of the element matches the height of its content.
110
+ - An integer specifying the height in pixels: The element has a
111
+ fixed height. If the content is larger than the specified
112
+ height, scrolling is enabled.
113
+
114
+ Example
115
+ -------
116
+ >>> import streamlit as st
117
+ >>> import graphviz
118
+ >>>
119
+ >>> # Create a graphlib graph object
120
+ >>> graph = graphviz.Digraph()
121
+ >>> graph.edge("run", "intr")
122
+ >>> graph.edge("intr", "runbl")
123
+ >>> graph.edge("runbl", "run")
124
+ >>> graph.edge("run", "kernel")
125
+ >>> graph.edge("kernel", "zombie")
126
+ >>> graph.edge("kernel", "sleep")
127
+ >>> graph.edge("kernel", "runmem")
128
+ >>> graph.edge("sleep", "swap")
129
+ >>> graph.edge("swap", "runswap")
130
+ >>> graph.edge("runswap", "new")
131
+ >>> graph.edge("runswap", "runmem")
132
+ >>> graph.edge("new", "runmem")
133
+ >>> graph.edge("sleep", "runmem")
134
+ >>>
135
+ >>> st.graphviz_chart(graph)
136
+
137
+ Or you can render the chart from the graph using GraphViz's Dot
138
+ language:
139
+
140
+ >>> st.graphviz_chart('''
141
+ digraph {
142
+ run -> intr
143
+ intr -> runbl
144
+ runbl -> run
145
+ run -> kernel
146
+ kernel -> zombie
147
+ kernel -> sleep
148
+ kernel -> runmem
149
+ sleep -> swap
150
+ swap -> runswap
151
+ runswap -> new
152
+ runswap -> runmem
153
+ new -> runmem
154
+ sleep -> runmem
155
+ }
156
+ ''')
157
+
158
+ .. output::
159
+ https://doc-graphviz-chart.streamlit.app/
160
+ height: 600px
161
+
162
+ """
163
+ if use_container_width is not None:
164
+ show_deprecation_warning(
165
+ make_deprecated_name_warning(
166
+ "use_container_width",
167
+ "width",
168
+ "2025-12-31",
169
+ "For `use_container_width=True`, use `width='stretch'`. "
170
+ "For `use_container_width=False`, use `width='content'`.",
171
+ include_st_prefix=False,
172
+ ),
173
+ show_in_browser=False,
174
+ )
175
+ width = "stretch" if use_container_width else "content"
176
+
177
+ # Generate element ID from delta path
178
+ delta_path = self.dg._get_delta_path_str()
179
+ element_id = calc_md5(delta_path.encode())
180
+
181
+ graphviz_chart_proto = GraphVizChartProto()
182
+
183
+ marshall(graphviz_chart_proto, figure_or_dot, element_id)
184
+
185
+ # Validate and set layout configuration
186
+ validate_width(width, allow_content=True)
187
+ validate_height(height, allow_content=True)
188
+ layout_config = LayoutConfig(width=width, height=height)
189
+
190
+ return self.dg._enqueue(
191
+ "graphviz_chart", graphviz_chart_proto, layout_config=layout_config
192
+ )
193
+
194
+ @property
195
+ def dg(self) -> DeltaGenerator:
196
+ """Get our DeltaGenerator."""
197
+ return cast("DeltaGenerator", self)
198
+
199
+
200
+ def marshall(
201
+ proto: GraphVizChartProto,
202
+ figure_or_dot: FigureOrDot,
203
+ element_id: str,
204
+ ) -> None:
205
+ """Construct a GraphViz chart object.
206
+
207
+ See DeltaGenerator.graphviz_chart for docs.
208
+ """
209
+
210
+ if type_util.is_graphviz_chart(figure_or_dot):
211
+ chart = cast(
212
+ "graphviz.Graph | graphviz.Digraph | graphviz.Source", figure_or_dot
213
+ )
214
+ dot = chart.source
215
+ engine = chart.engine
216
+ elif isinstance(figure_or_dot, str):
217
+ dot = figure_or_dot
218
+ engine = "dot"
219
+ else:
220
+ raise StreamlitAPIException(
221
+ f"Unhandled type for graphviz chart: {type(figure_or_dot)}"
222
+ )
223
+
224
+ proto.spec = dot
225
+ proto.engine = engine
226
+ proto.element_id = element_id
@@ -0,0 +1,407 @@
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 enum import Enum
18
+ from typing import TYPE_CHECKING, Literal, TypeAlias, cast
19
+
20
+ from streamlit.elements.lib.layout_utils import LayoutConfig, validate_width
21
+ from streamlit.errors import StreamlitAPIException
22
+ from streamlit.proto.Heading_pb2 import Heading as HeadingProto
23
+ from streamlit.runtime.metrics_util import gather_metrics
24
+ from streamlit.string_util import clean_text
25
+
26
+ if TYPE_CHECKING:
27
+ from streamlit.delta_generator import DeltaGenerator
28
+ from streamlit.elements.lib.layout_utils import TextAlignment, Width
29
+ from streamlit.type_util import SupportsStr
30
+
31
+
32
+ class HeadingProtoTag(Enum):
33
+ TITLE_TAG = "h1"
34
+ HEADER_TAG = "h2"
35
+ SUBHEADER_TAG = "h3"
36
+
37
+
38
+ Anchor: TypeAlias = str | Literal[False] | None
39
+ Divider: TypeAlias = bool | str | None
40
+
41
+
42
+ class HeadingMixin:
43
+ @gather_metrics("header")
44
+ def header(
45
+ self,
46
+ body: SupportsStr,
47
+ anchor: Anchor = None,
48
+ *, # keyword-only arguments:
49
+ help: str | None = None,
50
+ divider: Divider = False,
51
+ width: Width = "stretch",
52
+ text_alignment: TextAlignment = "left",
53
+ ) -> DeltaGenerator:
54
+ """Display text in header formatting.
55
+
56
+ Parameters
57
+ ----------
58
+ body : str
59
+ The text to display as GitHub-flavored Markdown. Syntax
60
+ information can be found at: https://github.github.com/gfm.
61
+
62
+ See the ``body`` parameter of |st.markdown|_ for additional,
63
+ supported Markdown directives.
64
+
65
+ .. |st.markdown| replace:: ``st.markdown``
66
+ .. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
67
+
68
+ anchor : str or False
69
+ The anchor name of the header that can be accessed with #anchor
70
+ in the URL. If omitted, it generates an anchor using the body.
71
+ If False, the anchor is not shown in the UI.
72
+
73
+ help : str or None
74
+ A tooltip that gets displayed next to the header. If this is
75
+ ``None`` (default), no tooltip is displayed.
76
+
77
+ The tooltip can optionally contain GitHub-flavored Markdown,
78
+ including the Markdown directives described in the ``body``
79
+ parameter of ``st.markdown``.
80
+
81
+ divider : bool, "blue", "green", "orange", "red", "violet", "yellow", "gray"/"grey", or "rainbow"
82
+ Shows a colored divider below the header. If this is ``True``,
83
+ successive headers will cycle through divider colors, except gray
84
+ and rainbow. That is, the first header will have a blue line, the
85
+ second header will have a green line, and so on. If this is a
86
+ string, the color can be set to one of the following: blue, green,
87
+ orange, red, violet, yellow, gray/grey, or rainbow.
88
+
89
+ width : "stretch", "content", or int
90
+ The width of the header element. This can be one of the following:
91
+
92
+ - ``"stretch"`` (default): The width of the element matches the
93
+ width of the parent container.
94
+ - ``"content"``: The width of the element matches the width of its
95
+ content, but doesn't exceed the width of the parent container.
96
+ - An integer specifying the width in pixels: The element has a
97
+ fixed width. If the specified width is greater than the width of
98
+ the parent container, the width of the element matches the width
99
+ of the parent container.
100
+
101
+ text_alignment : "left", "center", "right", or "justify"
102
+ The horizontal alignment of the text within the element. This can
103
+ be one of the following:
104
+
105
+ - ``"left"`` (default): Text is aligned to the left edge.
106
+ - ``"center"``: Text is centered.
107
+ - ``"right"``: Text is aligned to the right edge.
108
+ - ``"justify"``: Text is justified (stretched to fill the available
109
+ width with the last line left-aligned).
110
+
111
+ .. note::
112
+ For text alignment to have a visible effect, the element's
113
+ width must be wider than its content. If you use
114
+ ``width="content"`` with short text, the alignment may not be
115
+ noticeable.
116
+
117
+ Examples
118
+ --------
119
+ >>> import streamlit as st
120
+ >>>
121
+ >>> st.header("_Streamlit_ is :blue[cool] :sunglasses:")
122
+ >>> st.header("This is a header with a divider", divider="gray")
123
+ >>> st.header("These headers have rotating dividers", divider=True)
124
+ >>> st.header("One", divider=True)
125
+ >>> st.header("Two", divider=True)
126
+ >>> st.header("Three", divider=True)
127
+ >>> st.header("Four", divider=True)
128
+
129
+ .. output::
130
+ https://doc-header.streamlit.app/
131
+ height: 600px
132
+
133
+ """
134
+ validate_width(width, allow_content=True)
135
+ layout_config = LayoutConfig(width=width, text_alignment=text_alignment)
136
+
137
+ return self.dg._enqueue(
138
+ "heading",
139
+ HeadingMixin._create_heading_proto(
140
+ tag=HeadingProtoTag.HEADER_TAG,
141
+ body=body,
142
+ anchor=anchor,
143
+ help=help,
144
+ divider=divider,
145
+ ),
146
+ layout_config=layout_config,
147
+ )
148
+
149
+ @gather_metrics("subheader")
150
+ def subheader(
151
+ self,
152
+ body: SupportsStr,
153
+ anchor: Anchor = None,
154
+ *, # keyword-only arguments:
155
+ help: str | None = None,
156
+ divider: Divider = False,
157
+ width: Width = "stretch",
158
+ text_alignment: TextAlignment = "left",
159
+ ) -> DeltaGenerator:
160
+ """Display text in subheader formatting.
161
+
162
+ Parameters
163
+ ----------
164
+ body : str
165
+ The text to display as GitHub-flavored Markdown. Syntax
166
+ information can be found at: https://github.github.com/gfm.
167
+
168
+ See the ``body`` parameter of |st.markdown|_ for additional,
169
+ supported Markdown directives.
170
+
171
+ .. |st.markdown| replace:: ``st.markdown``
172
+ .. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
173
+
174
+ anchor : str or False
175
+ The anchor name of the header that can be accessed with #anchor
176
+ in the URL. If omitted, it generates an anchor using the body.
177
+ If False, the anchor is not shown in the UI.
178
+
179
+ help : str or None
180
+ A tooltip that gets displayed next to the subheader. If this is
181
+ ``None`` (default), no tooltip is displayed.
182
+
183
+ The tooltip can optionally contain GitHub-flavored Markdown,
184
+ including the Markdown directives described in the ``body``
185
+ parameter of ``st.markdown``.
186
+
187
+ divider : bool, "blue", "green", "orange", "red", "violet", "yellow", "gray"/"grey", or "rainbow"
188
+ Shows a colored divider below the header. If this is ``True``,
189
+ successive headers will cycle through divider colors, except gray
190
+ and rainbow. That is, the first header will have a blue line, the
191
+ second header will have a green line, and so on. If this is a
192
+ string, the color can be set to one of the following: blue, green,
193
+ orange, red, violet, yellow, gray/grey, or rainbow.
194
+
195
+ width : "stretch", "content", or int
196
+ The width of the subheader element. This can be one of the following:
197
+
198
+ - ``"stretch"`` (default): The width of the element matches the
199
+ width of the parent container.
200
+ - ``"content"``: The width of the element matches the width of its
201
+ content, but doesn't exceed the width of the parent container.
202
+ - An integer specifying the width in pixels: The element has a
203
+ fixed width. If the specified width is greater than the width of
204
+ the parent container, the width of the element matches the width
205
+ of the parent container.
206
+
207
+ text_alignment : "left", "center", "right", or "justify"
208
+ The horizontal alignment of the text within the element. This can
209
+ be one of the following:
210
+
211
+ - ``"left"`` (default): Text is aligned to the left edge.
212
+ - ``"center"``: Text is centered.
213
+ - ``"right"``: Text is aligned to the right edge.
214
+ - ``"justify"``: Text is justified (stretched to fill the available
215
+ width with the last line left-aligned).
216
+
217
+ .. note::
218
+ For text alignment to have a visible effect, the element's
219
+ width must be wider than its content. If you use
220
+ ``width="content"`` with short text, the alignment may not be
221
+ noticeable.
222
+
223
+ Examples
224
+ --------
225
+ >>> import streamlit as st
226
+ >>>
227
+ >>> st.subheader("_Streamlit_ is :blue[cool] :sunglasses:")
228
+ >>> st.subheader("This is a subheader with a divider", divider="gray")
229
+ >>> st.subheader("These subheaders have rotating dividers", divider=True)
230
+ >>> st.subheader("One", divider=True)
231
+ >>> st.subheader("Two", divider=True)
232
+ >>> st.subheader("Three", divider=True)
233
+ >>> st.subheader("Four", divider=True)
234
+
235
+ .. output::
236
+ https://doc-subheader.streamlit.app/
237
+ height: 500px
238
+
239
+ """
240
+ validate_width(width, allow_content=True)
241
+ layout_config = LayoutConfig(width=width, text_alignment=text_alignment)
242
+
243
+ return self.dg._enqueue(
244
+ "heading",
245
+ HeadingMixin._create_heading_proto(
246
+ tag=HeadingProtoTag.SUBHEADER_TAG,
247
+ body=body,
248
+ anchor=anchor,
249
+ help=help,
250
+ divider=divider,
251
+ ),
252
+ layout_config=layout_config,
253
+ )
254
+
255
+ @gather_metrics("title")
256
+ def title(
257
+ self,
258
+ body: SupportsStr,
259
+ anchor: Anchor = None,
260
+ *, # keyword-only arguments:
261
+ help: str | None = None,
262
+ width: Width = "stretch",
263
+ text_alignment: TextAlignment = "left",
264
+ ) -> DeltaGenerator:
265
+ """Display text in title formatting.
266
+
267
+ Each document should have a single `st.title()`, although this is not
268
+ enforced.
269
+
270
+ Parameters
271
+ ----------
272
+ body : str
273
+ The text to display as GitHub-flavored Markdown. Syntax
274
+ information can be found at: https://github.github.com/gfm.
275
+
276
+ See the ``body`` parameter of |st.markdown|_ for additional,
277
+ supported Markdown directives.
278
+
279
+ .. |st.markdown| replace:: ``st.markdown``
280
+ .. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
281
+
282
+ anchor : str or False
283
+ The anchor name of the header that can be accessed with #anchor
284
+ in the URL. If omitted, it generates an anchor using the body.
285
+ If False, the anchor is not shown in the UI.
286
+
287
+ help : str or None
288
+ A tooltip that gets displayed next to the title. If this is
289
+ ``None`` (default), no tooltip is displayed.
290
+
291
+ The tooltip can optionally contain GitHub-flavored Markdown,
292
+ including the Markdown directives described in the ``body``
293
+ parameter of ``st.markdown``.
294
+
295
+ width : "stretch", "content", or int
296
+ The width of the title element. This can be one of the following:
297
+
298
+ - ``"stretch"`` (default): The width of the element matches the
299
+ width of the parent container.
300
+ - ``"content"``: The width of the element matches the width of its
301
+ content, but doesn't exceed the width of the parent container.
302
+ - An integer specifying the width in pixels: The element has a
303
+ fixed width. If the specified width is greater than the width of
304
+ the parent container, the width of the element matches the width
305
+ of the parent container.
306
+
307
+ text_alignment : "left", "center", "right", or "justify"
308
+ The horizontal alignment of the text within the element. This can
309
+ be one of the following:
310
+
311
+ - ``"left"`` (default): Text is aligned to the left edge.
312
+ - ``"center"``: Text is centered.
313
+ - ``"right"``: Text is aligned to the right edge.
314
+ - ``"justify"``: Text is justified (stretched to fill the available
315
+ width with the last line left-aligned).
316
+
317
+ .. note::
318
+ For text alignment to have a visible effect, the element's
319
+ width must be wider than its content. If you use
320
+ ``width="content"`` with short text, the alignment may not be
321
+ noticeable.
322
+
323
+ Examples
324
+ --------
325
+ >>> import streamlit as st
326
+ >>>
327
+ >>> st.title("This is a title")
328
+ >>> st.title("_Streamlit_ is :blue[cool] :sunglasses:")
329
+
330
+ .. output::
331
+ https://doc-title.streamlit.app/
332
+ height: 220px
333
+
334
+ """
335
+ validate_width(width, allow_content=True)
336
+ layout_config = LayoutConfig(width=width, text_alignment=text_alignment)
337
+
338
+ return self.dg._enqueue(
339
+ "heading",
340
+ HeadingMixin._create_heading_proto(
341
+ tag=HeadingProtoTag.TITLE_TAG,
342
+ body=body,
343
+ anchor=anchor,
344
+ help=help,
345
+ ),
346
+ layout_config=layout_config,
347
+ )
348
+
349
+ @property
350
+ def dg(self) -> DeltaGenerator:
351
+ """Get our DeltaGenerator."""
352
+ return cast("DeltaGenerator", self)
353
+
354
+ @staticmethod
355
+ def _handle_divider_color(divider: Divider) -> str:
356
+ if divider is True:
357
+ return "auto"
358
+ valid_colors = [
359
+ "red",
360
+ "orange",
361
+ "yellow",
362
+ "blue",
363
+ "green",
364
+ "violet",
365
+ "gray",
366
+ "grey",
367
+ "rainbow",
368
+ ]
369
+ if divider in valid_colors:
370
+ return cast("str", divider)
371
+ raise StreamlitAPIException(
372
+ f"Divider parameter has invalid value: `{divider}`. Please choose from: {', '.join(valid_colors)}."
373
+ )
374
+
375
+ @staticmethod
376
+ def _create_heading_proto(
377
+ tag: HeadingProtoTag,
378
+ body: SupportsStr,
379
+ anchor: Anchor = None,
380
+ help: str | None = None,
381
+ divider: Divider = False,
382
+ ) -> HeadingProto:
383
+ proto = HeadingProto()
384
+ proto.tag = tag.value
385
+ proto.body = clean_text(body)
386
+ if divider:
387
+ proto.divider = HeadingMixin._handle_divider_color(divider)
388
+ if anchor is not None:
389
+ if anchor is False:
390
+ proto.hide_anchor = True
391
+ elif isinstance(anchor, str):
392
+ proto.anchor = anchor
393
+ elif anchor is True: # type: ignore
394
+ raise StreamlitAPIException(
395
+ f"Anchor parameter has invalid value: {anchor}. "
396
+ "Supported values: None, any string or False"
397
+ )
398
+ else:
399
+ raise StreamlitAPIException(
400
+ f"Anchor parameter has invalid type: {type(anchor).__name__}. "
401
+ "Supported values: None, any string or False"
402
+ )
403
+
404
+ if help:
405
+ proto.help = help
406
+
407
+ return proto