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,531 @@
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
+ """Register the st.components.v2 API namespace."""
16
+
17
+ from __future__ import annotations
18
+
19
+ from typing import TYPE_CHECKING, Any
20
+
21
+ from streamlit import deprecation_util
22
+ from streamlit.components.v2.component_definition_resolver import (
23
+ build_definition_with_validation,
24
+ )
25
+ from streamlit.components.v2.get_bidi_component_manager import (
26
+ get_bidi_component_manager,
27
+ )
28
+ from streamlit.errors import StreamlitAPIException
29
+
30
+ if TYPE_CHECKING:
31
+ from streamlit.components.v2.types import ComponentRenderer
32
+
33
+ if TYPE_CHECKING:
34
+ from collections.abc import Callable
35
+
36
+ from streamlit.components.v2.bidi_component import BidiComponentResult
37
+ from streamlit.elements.lib.layout_utils import Height, Width
38
+ from streamlit.runtime.state.common import WidgetCallback
39
+
40
+
41
+ def _register_component(
42
+ name: str,
43
+ html: str | None = None,
44
+ css: str | None = None,
45
+ js: str | None = None,
46
+ ) -> str:
47
+ """Register a component and return its fully qualified key.
48
+
49
+ This shared function handles the component registration and constructing a
50
+ validated definition against any pre-registered components from
51
+ ``pyproject.toml``.
52
+
53
+ Parameters
54
+ ----------
55
+ name : str
56
+ A short, descriptive identifier for the component.
57
+ html : str or None
58
+ Inline HTML markup for the component root.
59
+ css : str | None
60
+ Either inline CSS (string) or an asset-dir-relative path/glob to a
61
+ ``.css`` file declared in the component's ``asset_dir``. Globs are
62
+ allowed and must resolve to exactly one file within ``asset_dir``.
63
+ js : str | None
64
+ Either inline JavaScript (string) or an asset-dir-relative path/glob to
65
+ a ``.js`` file declared in the component's ``asset_dir``. Globs are
66
+ allowed and must resolve to exactly one file within ``asset_dir``.
67
+
68
+ Returns
69
+ -------
70
+ str
71
+ The fully qualified component key in the form ``<module_name>.<n>``.
72
+
73
+ Raises
74
+ ------
75
+ StreamlitAPIException
76
+ If ``css`` or ``js`` parameters are not strings or None.
77
+ """
78
+ # Parameter type guards: only strings or None are supported for js/css
79
+ for _param_name, _param_value in (("css", css), ("js", js)):
80
+ if _param_value is not None and not isinstance(_param_value, str):
81
+ raise StreamlitAPIException(
82
+ f"{_param_name} parameter must be a string or None. Pass a string path or glob."
83
+ )
84
+
85
+ component_key = name
86
+
87
+ manager = get_bidi_component_manager()
88
+ manager.register(
89
+ build_definition_with_validation(
90
+ manager=manager,
91
+ component_key=component_key,
92
+ html=html,
93
+ css=css,
94
+ js=js,
95
+ )
96
+ )
97
+
98
+ # Record API inputs for future re-resolution on file changes
99
+ manager.record_api_inputs(component_key, css, js)
100
+
101
+ return component_key
102
+
103
+
104
+ def _create_component_callable(
105
+ name: str,
106
+ *,
107
+ html: str | None = None,
108
+ css: str | None = None,
109
+ js: str | None = None,
110
+ isolate_styles: bool = True,
111
+ ) -> Callable[..., Any]:
112
+ """Create a component callable, handling both lookup and registration cases.
113
+
114
+ Parameters
115
+ ----------
116
+ name : str
117
+ A short, descriptive identifier for the component.
118
+ html : str | None
119
+ Inline HTML markup for the component root.
120
+ css : str | None
121
+ Inline CSS (string) or a string path/glob to a file under ``asset_dir``;
122
+ see :func:`_register_component` for path validation semantics.
123
+ js : str | None
124
+ Inline JavaScript (string) or a string path/glob to a file under
125
+ ``asset_dir``; see :func:`_register_component` for path validation semantics.
126
+ isolate_styles : bool
127
+ Whether to sandbox the component's styles in a shadow root.
128
+ Defaults to True.
129
+
130
+ Returns
131
+ -------
132
+ Callable[..., Any]
133
+ A function that, when called inside a Streamlit script, mounts the
134
+ component and returns its state.
135
+
136
+ Raises
137
+ ------
138
+ StreamlitAPIException
139
+ If a component is not found in the registry.
140
+ """
141
+ component_key = _register_component(name=name, html=html, css=css, js=js)
142
+
143
+ # The inner callable that mounts the component.
144
+ def _mount_component(
145
+ *,
146
+ key: str | None = None,
147
+ data: Any | None = None,
148
+ default: dict[str, Any] | None = None,
149
+ width: Width = "stretch",
150
+ height: Height = "content",
151
+ **on_callbacks: WidgetCallback | None,
152
+ ) -> BidiComponentResult:
153
+ """Mount the component.
154
+
155
+ Parameters
156
+ ----------
157
+ key : str or None
158
+ An optional string to use as the unique key for the component.
159
+ data : Any or None
160
+ Data to pass to the component (JSON-serializable).
161
+ default : dict[str, Any] or None
162
+ A dictionary of default values for state properties. Keys must
163
+ correspond to valid state names (those with on_*_change callbacks).
164
+ width : Width
165
+ The width of the component.
166
+ height : Height
167
+ The height of the component.
168
+ **on_callbacks : WidgetCallback
169
+ Callback functions for handling component events. Use pattern
170
+ on_{state_name}_change (e.g., on_click_change, on_value_change).
171
+
172
+ Returns
173
+ -------
174
+ BidiComponentResult
175
+ Component state.
176
+ """
177
+ import streamlit as st
178
+
179
+ # Backwards-tolerant: old code may still pass isolate_styles at mount
180
+ # time. Since isolate_styles is now configured on component(), ignore it
181
+ # here to prevent a runtime error.
182
+ if "isolate_styles" in on_callbacks:
183
+ on_callbacks.pop("isolate_styles", None)
184
+
185
+ deprecation_util.show_deprecation_warning(
186
+ "Passing `isolate_styles` when mounting a component created via "
187
+ "`st.components.v2.component` is deprecated and will be ignored. "
188
+ "Set `isolate_styles` when creating the component instead "
189
+ "(`st.components.v2.component(..., isolate_styles=...)`).",
190
+ show_in_browser=False,
191
+ )
192
+
193
+ return st._bidi_component(
194
+ component_key,
195
+ key=key,
196
+ isolate_styles=isolate_styles,
197
+ data=data,
198
+ default=default,
199
+ width=width,
200
+ height=height,
201
+ **on_callbacks,
202
+ )
203
+
204
+ return _mount_component
205
+
206
+
207
+ def component(
208
+ name: str,
209
+ *,
210
+ html: str | None = None,
211
+ css: str | None = None,
212
+ js: str | None = None,
213
+ isolate_styles: bool = True,
214
+ ) -> ComponentRenderer:
215
+ '''Register an ``st.components.v2`` component and return a callable to mount it.
216
+
217
+ Components can have any combination of HTML, CSS, and JavaScript. If none
218
+ are provided, the component renders as an empty element without raising
219
+ an error.
220
+
221
+ If your component is defined in an installed package, you can declare an
222
+ asset directory (``asset_dir``) through ``pyproject.toml`` files in the
223
+ package. This allows you to serve component assets and reference them by
224
+ path or glob in the ``html``, ``css``, and ``js`` parameters. Otherwise,
225
+ you must provide raw HTML, CSS, and/or JavaScript strings directly to these
226
+ parameters.
227
+
228
+ .. important::
229
+ When using paths or globs to define one or more component assets, the
230
+ paths must be relative to the component's ``asset_dir`` as declared in
231
+ the component manifest. This is only possible for installed components.
232
+
233
+ For security reasons, absolute paths and path traversals are rejected.
234
+ Because of runtime constraints, paths and globs must be provided as
235
+ strings and not ``Path`` objects.
236
+
237
+ Parameters
238
+ ----------
239
+ name : str
240
+ A short, descriptive identifier for the component. This is used
241
+ internally by Streamlit to manage instances of the component.
242
+
243
+ Component names must be unique across an app. The names of imported
244
+ components are prefixed by their module name to avoid collisions.
245
+
246
+ If you register multiple components with the same name, a warning is
247
+ logged and the last-registered component is used. Because this can lead
248
+ to unexpected behavior, ensure that component names are unique. If you
249
+ intend to have multiple instances of a component in one app, avoid
250
+ wrapping a component definition together with its mounting command so
251
+ you don't re-register your component with each instance.
252
+
253
+ html : str or None
254
+ Inline HTML markup for the component root. This can be one of the
255
+ following strings:
256
+
257
+ - Raw HTML. This doesn't require any ``<html>``, ``<head>``, or
258
+ ``<body>`` tags; just provide the inner HTML.
259
+ - A path or glob to an HTML file, relative to the component's
260
+ asset directory.
261
+
262
+ If any HTML depends on data passed at mount time, use a placeholder
263
+ element and populate it via JavaScript. Alternatively, you can append
264
+ a new element to the parent. For more information, see Example 2.
265
+
266
+ css : str or None
267
+ Inline CSS. This can be one of the following strings:
268
+
269
+ - Raw CSS (without a ``<style>`` block).
270
+ - A path or glob to a CSS file, relative to the component's
271
+ asset directory.
272
+
273
+ js : str or None
274
+ Inline JavaScript. This can be one of the following strings:
275
+
276
+ - Raw JavaScript (without a ``<script>`` block).
277
+ - A path or glob to a JS file, relative to the component's
278
+ asset directory.
279
+
280
+ isolate_styles : bool
281
+ Whether to sandbox the component styles in a shadow root. If this is
282
+ ``True`` (default), the component's HTML is mounted inside a shadow DOM
283
+ and, in your component's JavaScript, ``parentElement`` returns a
284
+ ``ShadowRoot``. If this is ``False``, the component's HTML is mounted
285
+ directly into the app's DOM tree, and ``parentElement`` returns a
286
+ regular ``HTMLElement``.
287
+
288
+ Returns
289
+ -------
290
+ ComponentRenderer
291
+ The component's mounting command.
292
+
293
+ This callable accepts the component parameters like ``key`` and
294
+ ``data`` and returns a ``BidiComponentResult`` object with the
295
+ component's state. The mounting command can be included in a
296
+ user-friendly wrapper function to provide a simpler API. A mounting
297
+ command can be called multiple times in an app to create multiple
298
+ instances of the component.
299
+
300
+ Examples
301
+ --------
302
+ **Example 1: Create a JavaScript-only component that captures link clicks**
303
+
304
+ You can create a simple component that allows inline links to communicate
305
+ with Python. Normally, clicking links in a Streamlit app would start a new
306
+ session. This component captures link clicks and sends them to Python as
307
+ trigger values.
308
+
309
+ .. code-block:: python
310
+
311
+ import streamlit as st
312
+
313
+ JS = """
314
+ export default function(component) {
315
+ const { setTriggerValue } = component;
316
+ const links = document.querySelectorAll('a[href="#"]');
317
+
318
+ links.forEach((link) => {
319
+ link.onclick = (e) => {
320
+ setTriggerValue('clicked', link.innerHTML);
321
+ };
322
+ });
323
+ }
324
+ """
325
+
326
+ my_component = st.components.v2.component(
327
+ "inline_links",
328
+ js=JS,
329
+ )
330
+
331
+ result = my_component(on_clicked_change=lambda: None)
332
+
333
+ st.markdown(
334
+ "Components aren't [sandboxed](#), so you can write JS that [interacts](#) with the main [document](#)."
335
+ )
336
+
337
+ if result.clicked:
338
+ st.write(f"You clicked {result.clicked}!")
339
+
340
+ .. output::
341
+ https://doc-components-markdown-links.streamlit.app/
342
+ height: 250px
343
+
344
+ **Example 2: Display a paragraph with custom inline links**
345
+
346
+ If you want to dynamically pass custom data from inline links, you can pass
347
+ HTML to the ``data`` parameter of the component's mount command. When a
348
+ link is clicked, the component sets a trigger value from the link's
349
+ ``data-link`` HTML attribute.
350
+
351
+ .. warning::
352
+
353
+ If you directly modify the inner HTML of the parent element, you will
354
+ overwrite the HTML and CSS passed to the component. Instead, create a
355
+ new child element and set its inner HTML. You can create the
356
+ placeholder dynamically in JavaScript or include it in the ``html``
357
+ parameter.
358
+
359
+ .. code-block:: python
360
+
361
+ import streamlit as st
362
+
363
+ CSS = """
364
+ a {
365
+ color: var(--st-link-color);
366
+ }
367
+ """
368
+
369
+ JS = """
370
+ export default function(component) {
371
+ const { data, setTriggerValue, parentElement } = component;
372
+ const newElement = document.createElement('div');
373
+ parentElement.appendChild(newElement);
374
+ newElement.innerHTML = data;
375
+
376
+ const links = newElement.querySelectorAll('a');
377
+
378
+ links.forEach((link) => {
379
+ link.onclick = (e) => {
380
+ setTriggerValue('clicked', link.getAttribute('data-link'));
381
+ };
382
+ });
383
+ }
384
+ """
385
+
386
+ my_component = st.components.v2.component(
387
+ "inline_links",
388
+ css=CSS,
389
+ js=JS,
390
+ )
391
+
392
+ paragraph_html = """
393
+ <p>This is an example paragraph with inline links. To see the response in
394
+ Python, click on the <a href="#" data-link="link_1">first link</a> or
395
+ <a href="#" data-link="link_2">second link</a>.</p>
396
+ """
397
+
398
+ result = my_component(data=paragraph_html, on_clicked_change=lambda: None)
399
+ if result.clicked == "link_1":
400
+ st.write("You clicked the first link!")
401
+ elif result.clicked == "link_2":
402
+ st.write("You clicked the second link!")
403
+
404
+ .. output::
405
+ https://doc-components-custom-anchors.streamlit.app/
406
+ height: 250px
407
+
408
+ **Example 3: Display an interactive SVG image**
409
+
410
+ You can create a component that displays an SVG image with clickable
411
+ shapes. When a shape is clicked, the component sends the shape type to
412
+ Python as a trigger value.
413
+
414
+ .. code-block:: python
415
+
416
+ import streamlit as st
417
+
418
+ HTML = """
419
+ <p>Click on the triangle, square, or circle to interact with the shapes:</p>
420
+
421
+ <svg width="400" height="300">
422
+ <polygon points="100,50 50,150 150,150" data-shape="triangle"></polygon>
423
+ <rect x="200" y="75" width="100" height="100" data-shape="square"></rect>
424
+ <circle cx="125" cy="225" r="40" data-shape="circle"></circle>
425
+ </svg>
426
+ """
427
+
428
+ JS = """
429
+ export default function(component) {
430
+ const { setTriggerValue, parentElement } = component;
431
+ const shapes = parentElement.querySelectorAll('[data-shape]');
432
+
433
+ shapes.forEach((shape) => {
434
+ shape.onclick = (e) => {
435
+ setTriggerValue('clicked', shape.getAttribute('data-shape'));
436
+ };
437
+ });
438
+ }
439
+ """
440
+
441
+ CSS = """
442
+ polygon, rect, circle {
443
+ stroke: var(--st-primary-color);
444
+ stroke-width: 2;
445
+ fill: transparent;
446
+ cursor: pointer;
447
+ }
448
+ polygon:hover, rect:hover, circle:hover {
449
+ fill: var(--st-secondary-background-color);
450
+ }
451
+ """
452
+
453
+ my_component = st.components.v2.component(
454
+ "clickable_svg",
455
+ html=HTML,
456
+ css=CSS,
457
+ js=JS,
458
+ )
459
+
460
+ result = my_component(on_clicked_change=lambda: None)
461
+ result
462
+
463
+ .. output::
464
+ https://doc-components-interactive-svg.streamlit.app/
465
+ height: 550px
466
+
467
+ **Example 4: Clean up your component's resources**
468
+
469
+ You can use the return value of the component's JavaScript function to
470
+ clean up any resources when the component is unmounted. For example, you
471
+ can disconnect a MutationObserver that was monitoring changes in the DOM.
472
+
473
+ .. code-block:: python
474
+
475
+ import streamlit as st
476
+
477
+ JS = """
478
+ export default function(component) {
479
+ const { setStateValue, parentElement } = component;
480
+ const sidebar = document.querySelector('section.stSidebar');
481
+ const initialState = sidebar.getAttribute('aria-expanded') === 'true';
482
+
483
+ // Create observer to watch for aria-expanded attribute changes
484
+ const observer = new MutationObserver((mutations) => {
485
+ mutations.forEach((mutation) => {
486
+ if (mutation.type === 'attributes' && mutation.attributeName === 'aria-expanded') {
487
+ const newIsExpanded = sidebar.getAttribute('aria-expanded') === 'true';
488
+ setStateValue('expanded', newIsExpanded);
489
+ }
490
+ });
491
+ });
492
+
493
+ // Start observing
494
+ observer.observe(sidebar, {
495
+ attributes: true,
496
+ attributeFilter: ['aria-expanded']
497
+ });
498
+
499
+ // Set initial state
500
+ setStateValue('expanded', initialState);
501
+
502
+ // Cleanup function to remove the observer
503
+ return () => {
504
+ observer.disconnect();
505
+ };
506
+
507
+ };
508
+ """
509
+
510
+ my_component = st.components.v2.component(
511
+ "sidebar_expansion_detector",
512
+ js=JS,
513
+ )
514
+
515
+ st.sidebar.write("Sidebar content")
516
+ result = my_component(on_expanded_change=lambda: None)
517
+ result
518
+
519
+ .. output::
520
+ https://doc-components-cleanup-function.streamlit.app/
521
+ height: 250px
522
+
523
+ '''
524
+ return _create_component_callable(
525
+ name, html=html, css=css, js=js, isolate_styles=isolate_styles
526
+ )
527
+
528
+
529
+ __all__ = [
530
+ "component",
531
+ ]
@@ -0,0 +1,20 @@
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 streamlit.components.v2.bidi_component.main import BidiComponentMixin
18
+ from streamlit.components.v2.bidi_component.state import BidiComponentResult
19
+
20
+ __all__ = ["BidiComponentMixin", "BidiComponentResult"]
@@ -0,0 +1,29 @@
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 Final
18
+
19
+ INTERNAL_COMPONENT_NAME: Final[str] = "bidi_component"
20
+
21
+ # Shared constant that delimits the base widget id from the event suffix.
22
+ # This value **must** stay in sync with its TypeScript counterpart defined in
23
+ # `frontend/lib/src/components/widgets/BidiComponent/constants.ts`.
24
+ EVENT_DELIM: Final[str] = "__"
25
+
26
+ # Shared constant that is used to identify ArrowReference objects in the data structure.
27
+ # This value **must** stay in sync with its TypeScript counterpart defined in
28
+ # `frontend/lib/src/components/widgets/BidiComponent/constants.ts`.
29
+ ARROW_REF_KEY: Final[str] = "__streamlit_arrow_ref__"