streamlit-plugins 0.7.9__tar.gz → 0.7.11__tar.gz

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 (88) hide show
  1. {streamlit_plugins-0.7.9/streamlit_plugins.egg-info → streamlit_plugins-0.7.11}/PKG-INFO +1 -1
  2. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/loader/__init__.py +7 -10
  3. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/inject_script.py +22 -10
  4. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/theme_changer/inject_script.py +18 -8
  5. streamlit_plugins-0.7.11/streamlit_plugins/framework/reactlit/__init__.py +79 -0
  6. streamlit_plugins-0.7.11/streamlit_plugins/framework/reactlit/advanced_patterns.py +633 -0
  7. streamlit_plugins-0.7.11/streamlit_plugins/framework/reactlit/lab.py +317 -0
  8. streamlit_plugins-0.7.11/streamlit_plugins/framework/reactlit/reactive.py +722 -0
  9. streamlit_plugins-0.7.11/streamlit_plugins/framework/reactlit/test_reactive.py +427 -0
  10. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11/streamlit_plugins.egg-info}/PKG-INFO +1 -1
  11. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins.egg-info/SOURCES.txt +6 -1
  12. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/LICENSE +0 -0
  13. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/README.md +0 -0
  14. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/setup.cfg +0 -0
  15. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/setup.py +0 -0
  16. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/__init__.py +0 -0
  17. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/__init__.py +0 -0
  18. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/annotated_text/__init__.py +0 -0
  19. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/input_chat_advance/__init__.py +0 -0
  20. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/__init__.py +0 -0
  21. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/asset-manifest.json +0 -0
  22. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/bootstrap.min.css +0 -0
  23. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/custom.css +0 -0
  24. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/index.html +0 -0
  25. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/css/2.4f758a59.chunk.css +0 -0
  26. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/css/2.4f758a59.chunk.css.map +0 -0
  27. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/js/2.524324ba.chunk.js +0 -0
  28. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/js/2.524324ba.chunk.js.LICENSE.txt +0 -0
  29. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/js/2.524324ba.chunk.js.map +0 -0
  30. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/js/main.34b82d10.chunk.js +0 -0
  31. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/js/main.34b82d10.chunk.js.map +0 -0
  32. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/js/runtime-main.65660c44.js +0 -0
  33. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/label_studio/frontend/build/static/js/runtime-main.65660c44.js.map +0 -0
  34. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/__init__.py +0 -0
  35. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/config.py +0 -0
  36. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/CrossOriginInterface.js +0 -0
  37. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/asset-manifest.json +0 -0
  38. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/bootstrap.min.css +0 -0
  39. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/bootstrap.min.css.map +0 -0
  40. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/index.html +0 -0
  41. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/material-fonts.css +0 -0
  42. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/material.woff2 +0 -0
  43. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/st-styles.css +0 -0
  44. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/static/js/main.8bc23bfa.js +0 -0
  45. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/static/js/main.8bc23bfa.js.LICENSE.txt +0 -0
  46. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/static/js/main.8bc23bfa.js.map +0 -0
  47. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/navbar/frontend/build/style.css +0 -0
  48. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/selectbox_enrich/__init__.py +0 -0
  49. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/__init__.py +0 -0
  50. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/asset-manifest.json +0 -0
  51. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/index.html +0 -0
  52. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/drawsvg.js +0 -0
  53. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/drawsvg.v7.js +0 -0
  54. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/favicon.ico +0 -0
  55. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/images/sort_asc.png +0 -0
  56. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/images/sort_both.png +0 -0
  57. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/images/sort_desc.png +0 -0
  58. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/js/2.9cedfdc4.chunk.js +0 -0
  59. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/js/2.9cedfdc4.chunk.js.LICENSE.txt +0 -0
  60. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/js/2.9cedfdc4.chunk.js.map +0 -0
  61. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/js/main.1dfd8582.chunk.js +0 -0
  62. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/js/main.1dfd8582.chunk.js.map +0 -0
  63. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/js/runtime-main.8efd821a.js +0 -0
  64. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/js/runtime-main.8efd821a.js.map +0 -0
  65. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/snakeviz.css +0 -0
  66. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/snakeviz.js +0 -0
  67. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/vendor/d3.v3.min.js +0 -0
  68. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/vendor/immutable.min.js +0 -0
  69. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/vendor/jquery-3.2.1.min.js +0 -0
  70. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/vendor/jquery.dataTables.min.css +0 -0
  71. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/vendor/jquery.dataTables.min.js +0 -0
  72. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/static/vendor/lodash.min.js +0 -0
  73. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/templates/dir.html +0 -0
  74. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/snakeviz/frontend/build/templates/viz.html +0 -0
  75. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/theme_changer/__init__.py +0 -0
  76. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/theme_changer/config.py +0 -0
  77. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/theme_changer/entity.py +0 -0
  78. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/components/theme_changer/frontend/build/CrossOriginInterface.js +0 -0
  79. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/extension/__init__.py +0 -0
  80. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/extension/button_group/__init__.py +0 -0
  81. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/framework/__init__.py +0 -0
  82. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/framework/multilit/__init__.py +0 -0
  83. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/framework/multilit/app_wrapper.py +0 -0
  84. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/framework/multilit/loading_engine.py +0 -0
  85. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins/framework/multilit/multilit.py +0 -0
  86. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins.egg-info/dependency_links.txt +0 -0
  87. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins.egg-info/requires.txt +0 -0
  88. {streamlit_plugins-0.7.9 → streamlit_plugins-0.7.11}/streamlit_plugins.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: streamlit-plugins
3
- Version: 0.7.9
3
+ Version: 0.7.11
4
4
  Summary: Components and Frameworks to give new features to streamlit
5
5
  Home-page: https://github.com/quiradev/streamlit-plugins
6
6
  Author: Victor Quilon Ranera
@@ -1,6 +1,5 @@
1
1
  import inspect
2
2
  from abc import ABC, abstractmethod
3
- import atexit
4
3
  import time
5
4
  from enum import Enum, auto
6
5
  from typing import TypeVar, Callable, Tuple, Optional
@@ -4425,8 +4424,6 @@ class BaseLoader(ABC):
4425
4424
  )
4426
4425
  self.loader_container = loader_container
4427
4426
 
4428
- atexit.register(self.stop_loader)
4429
-
4430
4427
  def recreate_loader_with(self, **loader_kwargs) -> "LoaderType":
4431
4428
  return self.__class__(loader_container=self.loader_container, **loader_kwargs)
4432
4429
 
@@ -4446,10 +4443,11 @@ class DefaultLoader(BaseLoader):
4446
4443
  loader_container=None,
4447
4444
  label='', height=256,
4448
4445
  primary_color=None, background_color=None,
4449
- loader_lib: LoadersLib | Callable[..., Tuple[str, str ,str], ] = LoadersLib.book_loader, index=0, loader_lib_kwargs: dict = None
4446
+ loader_lib: LoadersLib | Callable[..., Tuple[str, str ,str], ] = LoadersLib.book_loader, index=0, loader_lib_kwargs: dict = None,
4447
+ sleep_animation_time: float = 0.1
4450
4448
  ):
4451
4449
  super().__init__(loader_container=loader_container)
4452
-
4450
+ self.sleep_animation_time = sleep_animation_time
4453
4451
  if primary_color is None:
4454
4452
  if st.get_option('theme.primaryColor') is None:
4455
4453
  primary_color = '#F63366'
@@ -4495,8 +4493,6 @@ class DefaultLoader(BaseLoader):
4495
4493
  self.display_element = st.empty()
4496
4494
  self.display_element_out = st.empty()
4497
4495
 
4498
- atexit.register(self.stop_loader)
4499
-
4500
4496
  @staticmethod
4501
4497
  def _parse_height_css(height: int | str) -> str:
4502
4498
  if isinstance(height, (int, float)):
@@ -4524,16 +4520,17 @@ class DefaultLoader(BaseLoader):
4524
4520
 
4525
4521
  with self.loader_container:
4526
4522
  self.display_element_out.empty()
4527
- time.sleep(0.2) # Pequeña pausa para evitar parpadeos
4523
+ if self.sleep_animation_time:
4524
+ time.sleep(self.sleep_animation_time) # Pequeña pausa para evitar parpadeos
4528
4525
  self.display_element.markdown(element_style+element_code, unsafe_allow_html=True)
4529
- time.sleep(5)
4530
4526
 
4531
4527
  def stop_loader(self):
4532
4528
  if self.running:
4533
4529
  with self.loader_container:
4534
4530
  self.display_element_out.markdown(self.element_out_style, unsafe_allow_html=True)
4535
4531
  # Para que se termine la animacion de salida y no se vea como parpadeos
4536
- time.sleep(0.3)
4532
+ if self.sleep_animation_time:
4533
+ time.sleep(self.sleep_animation_time)
4537
4534
  self.display_element.empty()
4538
4535
  self.display_element_out.empty()
4539
4536
  self.running = False
@@ -1,7 +1,19 @@
1
1
  import json
2
+ from typing import Literal
2
3
 
3
4
  import requests
4
- import streamlit.components.v1 as components
5
+
6
+ import streamlit as st
7
+
8
+ WIDTH: Literal["stretch", "content"] | int = "content"
9
+ HEIGHT: Literal["stretch", "content"] | int = "content"
10
+ try:
11
+ iframe = st.iframe
12
+ except Exception as e:
13
+ import streamlit.components.v1 as components
14
+ iframe = components.html
15
+ WIDTH = 0
16
+ HEIGHT = 0
5
17
 
6
18
  from .config import _RELEASE, build_path, dev_url
7
19
 
@@ -25,7 +37,7 @@ def inject_crossorigin_interface():
25
37
  # Same domain can bypass sandbox restrictions to create an interface for cross-origin iframes
26
38
  # This allows custom components to interact with parent scope
27
39
  escaped_content = content.replace("`", r"\`").replace("${", r"\${")
28
- components.html(
40
+ iframe(
29
41
  f"""<script>
30
42
  frameElement.parentElement.style.display = 'none';
31
43
  if (!window.parent.NavbarCOI_injected) {{
@@ -36,22 +48,22 @@ if (!window.parent.NavbarCOI_injected) {{
36
48
  window.parent.document.head.appendChild(script);
37
49
  }}
38
50
  </script>""",
39
- height=0,
40
- width=0,
51
+ height=HEIGHT,
52
+ width=WIDTH
41
53
  )
42
54
 
43
55
 
44
56
  def instantiate_crossorigin_interface(component_name: str, key: str, is_navigation: bool, default_page_id: str, position_mode: str, sticky_nav: bool):
45
57
  """Instantiate the CrossOriginInterface in the parent scope that responds to messages for key."""
46
- components.html(
58
+ iframe(
47
59
  f"""<script>
48
60
  frameElement.parentElement.style.display = 'none';
49
61
  if (!window.parent.navbarCOI) {{
50
62
  window.parent.navbarCOI = new window.parent.instantiateNavbarCOI('{component_name}', '{key}', {json.dumps(is_navigation)}, '{default_page_id}', '{position_mode}', {json.dumps(sticky_nav)});
51
63
  }}
52
64
  </script>""",
53
- height=0,
54
- width=0,
65
+ height=HEIGHT,
66
+ width=WIDTH,
55
67
  )
56
68
 
57
69
  def apply_styles(key: str, custom_styles: str):
@@ -65,10 +77,10 @@ def apply_styles(key: str, custom_styles: str):
65
77
  content = response.text
66
78
  pass
67
79
 
68
- components.html(
80
+ iframe(
69
81
  f"""<script>
70
82
  window.parent.navbarCOI.applyNavbarStyles('{key}', `{content}`, {custom_styles})
71
83
  </script>""",
72
- height=0,
73
- width=0,
84
+ height=HEIGHT,
85
+ width=WIDTH,
74
86
  )
@@ -1,6 +1,16 @@
1
- import json
1
+ from typing import Literal
2
2
 
3
- import streamlit.components.v1 as components
3
+ import streamlit as st
4
+
5
+ WIDTH: Literal["stretch", "content"] | int = "content"
6
+ HEIGHT: Literal["stretch", "content"] | int = "content"
7
+ try:
8
+ iframe = st.iframe
9
+ except Exception as e:
10
+ import streamlit.components.v1 as components
11
+ iframe = components.html
12
+ WIDTH = 0
13
+ HEIGHT = 0
4
14
 
5
15
  from .entity import ThemeInput
6
16
  from .config import build_path
@@ -18,7 +28,7 @@ def inject_crossorigin_interface():
18
28
  # This works because streamlit.components.v1.html() creates an iframe from same domain as the parent scope
19
29
  # Same domain can bypass sandbox restrictions to create an interface for cross-origin iframes
20
30
  # This allows custom components to interact with parent scope
21
- components.html(
31
+ iframe(
22
32
  f"""<script>
23
33
  frameElement.parentElement.style.display = 'none';
24
34
  if (!window.parent.ThemeChangerCOI_injected) {{
@@ -29,18 +39,18 @@ if (!window.parent.ThemeChangerCOI_injected) {{
29
39
  window.parent.document.head.appendChild(script);
30
40
  }}
31
41
  </script>""",
32
- height=0,
33
- width=0,
42
+ height=HEIGHT,
43
+ width=WIDTH
34
44
  )
35
45
 
36
46
 
37
47
  def change_theme_coi(key, theme_data: ThemeInput):
38
48
  theme_data_raw = theme_data.model_dump_json(exclude_none=True)
39
- components.html(
49
+ iframe(
40
50
  f"""<script>
41
51
  // frameElement.parentElement.style.display = 'none';
42
52
  window.parent.changeThemeWithCOI('{key}', {theme_data_raw});
43
53
  </script>""",
44
- height=0,
45
- width=0,
54
+ height=HEIGHT,
55
+ width=WIDTH
46
56
  )
@@ -0,0 +1,79 @@
1
+ """
2
+ Reactlit - Reactive Fragment Framework for Streamlit
3
+
4
+ Framework que permite crear componentes reactivos (fragmentos) que
5
+ se actualizan automáticamente cuando sus dependencias cambian.
6
+
7
+ Características:
8
+ - Fragmentos reactivos con detección de cambios
9
+ - Grafo de dependencias entre componentes
10
+ - Prevención de ciclos infinitos
11
+ - Cascadas automáticas de reruns
12
+ - Observación de state compartido
13
+
14
+ Uso básico:
15
+
16
+ from streamlit_plugins.framework.reactlit import reactive_fragment
17
+
18
+ @reactive_fragment(
19
+ dependencies=['user_id', 'filters'],
20
+ watch_params=True
21
+ )
22
+ def my_panel(user_id, filters=None):
23
+ st.write(f"Data for {user_id}")
24
+
25
+ @reactive_fragment(dependencies=['my_panel'])
26
+ def dependent_panel():
27
+ st.write("This updates when my_panel changes")
28
+ """
29
+
30
+ from .reactive import (
31
+ # Decorators
32
+ reactive_fragment,
33
+ # Registration
34
+ register_dependency,
35
+ register_dependencies,
36
+ # Query & Introspection
37
+ get_fragment_metadata,
38
+ get_all_fragments,
39
+ get_dependency_chain,
40
+ has_dependency_cycle,
41
+ # Utilities
42
+ get_fragment_state,
43
+ set_fragment_dirty,
44
+ enqueue_fragment_rerun,
45
+ manually_trigger_rerun_cascade,
46
+ # Debugging
47
+ debug_dependency_graph,
48
+ reset_reactive_state,
49
+ # Data Models
50
+ FragmentMetadata,
51
+ DependencyGraph,
52
+ )
53
+
54
+ __all__ = [
55
+ # Decorators
56
+ "reactive_fragment",
57
+ # Registration
58
+ "register_dependency",
59
+ "register_dependencies",
60
+ # Query & Introspection
61
+ "get_fragment_metadata",
62
+ "get_all_fragments",
63
+ "get_dependency_chain",
64
+ "has_dependency_cycle",
65
+ # Utilities
66
+ "get_fragment_state",
67
+ "set_fragment_dirty",
68
+ "enqueue_fragment_rerun",
69
+ "manually_trigger_rerun_cascade",
70
+ # Debugging
71
+ "debug_dependency_graph",
72
+ "reset_reactive_state",
73
+ # Data Models
74
+ "FragmentMetadata",
75
+ "DependencyGraph",
76
+ ]
77
+
78
+ __version__ = "0.1.0"
79
+