st-graph-workbench 0.1.0__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 (368) hide show
  1. st_graph_workbench-0.1.0/.gitignore +78 -0
  2. st_graph_workbench-0.1.0/CHANGELOG.md +360 -0
  3. st_graph_workbench-0.1.0/CONTRIBUTING.md +55 -0
  4. st_graph_workbench-0.1.0/LICENSE +202 -0
  5. st_graph_workbench-0.1.0/NOTICE +14 -0
  6. st_graph_workbench-0.1.0/PKG-INFO +561 -0
  7. st_graph_workbench-0.1.0/README.md +523 -0
  8. st_graph_workbench-0.1.0/SECURITY.md +24 -0
  9. st_graph_workbench-0.1.0/THIRD_PARTY_NOTICES.md +31 -0
  10. st_graph_workbench-0.1.0/docs/advanced/architecture.md +103 -0
  11. st_graph_workbench-0.1.0/docs/advanced/development.md +140 -0
  12. st_graph_workbench-0.1.0/docs/advanced/troubleshooting.md +118 -0
  13. st_graph_workbench-0.1.0/docs/assets/images/logo.png +0 -0
  14. st_graph_workbench-0.1.0/docs/assets/images/logo_icon.png +0 -0
  15. st_graph_workbench-0.1.0/docs/assets/screenshots/analysis.png +0 -0
  16. st_graph_workbench-0.1.0/docs/assets/screenshots/crud-dialog.png +0 -0
  17. st_graph_workbench-0.1.0/docs/assets/screenshots/data-records.png +0 -0
  18. st_graph_workbench-0.1.0/docs/assets/screenshots/editing-viewport.png +0 -0
  19. st_graph_workbench-0.1.0/docs/assets/screenshots/layouts.png +0 -0
  20. st_graph_workbench-0.1.0/docs/assets/screenshots/node-expansion.png +0 -0
  21. st_graph_workbench-0.1.0/docs/assets/screenshots/quick-start.png +0 -0
  22. st_graph_workbench-0.1.0/docs/assets/screenshots/selection-search.png +0 -0
  23. st_graph_workbench-0.1.0/docs/assets/screenshots/showcase.png +0 -0
  24. st_graph_workbench-0.1.0/docs/assets/screenshots/workflow-analysis.png +0 -0
  25. st_graph_workbench-0.1.0/docs/assets/screenshots/workflow-crud.png +0 -0
  26. st_graph_workbench-0.1.0/docs/assets/screenshots/workflow-expansion-collapsed.png +0 -0
  27. st_graph_workbench-0.1.0/docs/assets/screenshots/workflow-expansion-open.png +0 -0
  28. st_graph_workbench-0.1.0/docs/assets/screenshots/workflow-search.png +0 -0
  29. st_graph_workbench-0.1.0/docs/changelog.md +1 -0
  30. st_graph_workbench-0.1.0/docs/concepts/elements.md +122 -0
  31. st_graph_workbench-0.1.0/docs/concepts/events-state.md +87 -0
  32. st_graph_workbench-0.1.0/docs/concepts/records.md +84 -0
  33. st_graph_workbench-0.1.0/docs/getting-started/in-action.md +123 -0
  34. st_graph_workbench-0.1.0/docs/getting-started/installation.md +101 -0
  35. st_graph_workbench-0.1.0/docs/getting-started/mental-model.md +70 -0
  36. st_graph_workbench-0.1.0/docs/getting-started/quickstart.md +97 -0
  37. st_graph_workbench-0.1.0/docs/getting-started/tutorials.md +87 -0
  38. st_graph_workbench-0.1.0/docs/guides/analysis.md +116 -0
  39. st_graph_workbench-0.1.0/docs/guides/commands.md +78 -0
  40. st_graph_workbench-0.1.0/docs/guides/compound-performance.md +86 -0
  41. st_graph_workbench-0.1.0/docs/guides/crud.md +128 -0
  42. st_graph_workbench-0.1.0/docs/guides/editing-viewport.md +105 -0
  43. st_graph_workbench-0.1.0/docs/guides/events-exports.md +91 -0
  44. st_graph_workbench-0.1.0/docs/guides/expansion-visibility.md +217 -0
  45. st_graph_workbench-0.1.0/docs/guides/progressive-loading.md +321 -0
  46. st_graph_workbench-0.1.0/docs/guides/rendering-layouts.md +125 -0
  47. st_graph_workbench-0.1.0/docs/guides/selection-search.md +163 -0
  48. st_graph_workbench-0.1.0/docs/guides/styling-icons.md +102 -0
  49. st_graph_workbench-0.1.0/docs/index.md +210 -0
  50. st_graph_workbench-0.1.0/docs/license.md +39 -0
  51. st_graph_workbench-0.1.0/docs/recipes/intelligence-workflow.md +74 -0
  52. st_graph_workbench-0.1.0/docs/recipes/multiple-instances.md +41 -0
  53. st_graph_workbench-0.1.0/docs/recipes/persistence-scale.md +59 -0
  54. st_graph_workbench-0.1.0/docs/recipes/progressive-expansion.md +63 -0
  55. st_graph_workbench-0.1.0/docs/reference/capability-matrix.md +61 -0
  56. st_graph_workbench-0.1.0/docs/reference/commands.md +37 -0
  57. st_graph_workbench-0.1.0/docs/reference/component.md +79 -0
  58. st_graph_workbench-0.1.0/docs/reference/data-elements.md +44 -0
  59. st_graph_workbench-0.1.0/docs/reference/events-types.md +48 -0
  60. st_graph_workbench-0.1.0/docs/reference/expansion.md +36 -0
  61. st_graph_workbench-0.1.0/docs/reference/index.md +106 -0
  62. st_graph_workbench-0.1.0/docs/reference/styles.md +19 -0
  63. st_graph_workbench-0.1.0/docs/snippets/command_driven.py +38 -0
  64. st_graph_workbench-0.1.0/docs/snippets/managed_expansion.py +28 -0
  65. st_graph_workbench-0.1.0/docs/snippets/multiple_instances.py +32 -0
  66. st_graph_workbench-0.1.0/docs/snippets/persist_positions.py +33 -0
  67. st_graph_workbench-0.1.0/docs/snippets/progressive_expansion.py +69 -0
  68. st_graph_workbench-0.1.0/docs/snippets/progressive_loading.py +117 -0
  69. st_graph_workbench-0.1.0/docs/snippets/quickstart.py +68 -0
  70. st_graph_workbench-0.1.0/docs/snippets/readme_graph.py +34 -0
  71. st_graph_workbench-0.1.0/docs/snippets/readme_records.py +21 -0
  72. st_graph_workbench-0.1.0/docs/snippets/readme_selection.py +13 -0
  73. st_graph_workbench-0.1.0/docs/snippets/readme_style.py +23 -0
  74. st_graph_workbench-0.1.0/docs/snippets/record_roundtrip.py +26 -0
  75. st_graph_workbench-0.1.0/docs/snippets/selected_records.py +26 -0
  76. st_graph_workbench-0.1.0/docs/stylesheets/extra.css +37 -0
  77. st_graph_workbench-0.1.0/examples/README.md +54 -0
  78. st_graph_workbench-0.1.0/examples/analysis_examples.py +241 -0
  79. st_graph_workbench-0.1.0/examples/app.py +98 -0
  80. st_graph_workbench-0.1.0/examples/component_capability_map.py +156 -0
  81. st_graph_workbench-0.1.0/examples/data/README.md +13 -0
  82. st_graph_workbench-0.1.0/examples/data/intelligence_case.json +163 -0
  83. st_graph_workbench-0.1.0/examples/demos/__init__.py +1 -0
  84. st_graph_workbench-0.1.0/examples/demos/branch_expansion.py +22 -0
  85. st_graph_workbench-0.1.0/examples/demos/component_v2_validation.py +206 -0
  86. st_graph_workbench-0.1.0/examples/demos/compound_performance.py +234 -0
  87. st_graph_workbench-0.1.0/examples/demos/data_helpers_commands.py +595 -0
  88. st_graph_workbench-0.1.0/examples/demos/demo_helpers.py +595 -0
  89. st_graph_workbench-0.1.0/examples/demos/demo_overview.py +32 -0
  90. st_graph_workbench-0.1.0/examples/demos/edge_style.py +170 -0
  91. st_graph_workbench-0.1.0/examples/demos/editing_viewport_tools.py +454 -0
  92. st_graph_workbench-0.1.0/examples/demos/event_listeners.py +154 -0
  93. st_graph_workbench-0.1.0/examples/demos/graph_workbench_showcase.py +552 -0
  94. st_graph_workbench-0.1.0/examples/demos/interactive_crud.py +744 -0
  95. st_graph_workbench-0.1.0/examples/demos/investigation_tools.py +617 -0
  96. st_graph_workbench-0.1.0/examples/demos/layout.py +148 -0
  97. st_graph_workbench-0.1.0/examples/demos/node_actions.py +391 -0
  98. st_graph_workbench-0.1.0/examples/demos/node_style.py +175 -0
  99. st_graph_workbench-0.1.0/examples/demos/progressive_loading.py +788 -0
  100. st_graph_workbench-0.1.0/examples/demos/progressive_loading_scale.py +318 -0
  101. st_graph_workbench-0.1.0/examples/docs/changelog.py +33 -0
  102. st_graph_workbench-0.1.0/examples/docs/element_contract.py +262 -0
  103. st_graph_workbench-0.1.0/examples/docs/frontend_architecture.py +235 -0
  104. st_graph_workbench-0.1.0/examples/docs/interactive_crud.py +217 -0
  105. st_graph_workbench-0.1.0/examples/docs/project_overview.py +129 -0
  106. st_graph_workbench-0.1.0/examples/docs/styling_guide.py +107 -0
  107. st_graph_workbench-0.1.0/examples/docs/supported_icons.py +58 -0
  108. st_graph_workbench-0.1.0/examples/expansion_data.py +87 -0
  109. st_graph_workbench-0.1.0/examples/expansion_workflow.py +341 -0
  110. st_graph_workbench-0.1.0/examples/page_catalog.py +665 -0
  111. st_graph_workbench-0.1.0/examples/page_links.py +18 -0
  112. st_graph_workbench-0.1.0/examples/page_overview.py +172 -0
  113. st_graph_workbench-0.1.0/examples/progressive_loading_data.py +119 -0
  114. st_graph_workbench-0.1.0/examples/tutorials/__init__.py +1 -0
  115. st_graph_workbench-0.1.0/examples/tutorials/analysis.py +144 -0
  116. st_graph_workbench-0.1.0/examples/tutorials/change_records.py +137 -0
  117. st_graph_workbench-0.1.0/examples/tutorials/commands.py +132 -0
  118. st_graph_workbench-0.1.0/examples/tutorials/common.py +250 -0
  119. st_graph_workbench-0.1.0/examples/tutorials/crud.py +315 -0
  120. st_graph_workbench-0.1.0/examples/tutorials/data.py +167 -0
  121. st_graph_workbench-0.1.0/examples/tutorials/editing.py +202 -0
  122. st_graph_workbench-0.1.0/examples/tutorials/events.py +135 -0
  123. st_graph_workbench-0.1.0/examples/tutorials/expansion.py +18 -0
  124. st_graph_workbench-0.1.0/examples/tutorials/exports.py +146 -0
  125. st_graph_workbench-0.1.0/examples/tutorials/first_graph.py +103 -0
  126. st_graph_workbench-0.1.0/examples/tutorials/layouts.py +122 -0
  127. st_graph_workbench-0.1.0/examples/tutorials/load_data.py +130 -0
  128. st_graph_workbench-0.1.0/examples/tutorials/loading.py +164 -0
  129. st_graph_workbench-0.1.0/examples/tutorials/scale.py +143 -0
  130. st_graph_workbench-0.1.0/examples/tutorials/search.py +108 -0
  131. st_graph_workbench-0.1.0/examples/tutorials/selection.py +170 -0
  132. st_graph_workbench-0.1.0/examples/tutorials/style_graph.py +130 -0
  133. st_graph_workbench-0.1.0/examples/tutorials/workflows.py +173 -0
  134. st_graph_workbench-0.1.0/hatch_build.py +30 -0
  135. st_graph_workbench-0.1.0/images/logo.png +0 -0
  136. st_graph_workbench-0.1.0/images/logo_icon.png +0 -0
  137. st_graph_workbench-0.1.0/licenses/material-symbols.txt +202 -0
  138. st_graph_workbench-0.1.0/licenses/st-link-analysis.txt +21 -0
  139. st_graph_workbench-0.1.0/mkdocs.local.yml +5 -0
  140. st_graph_workbench-0.1.0/mkdocs.yml +133 -0
  141. st_graph_workbench-0.1.0/pyproject.toml +135 -0
  142. st_graph_workbench-0.1.0/scripts/capture_docs_screenshots.py +506 -0
  143. st_graph_workbench-0.1.0/scripts/verify_minimum_dependencies.py +36 -0
  144. st_graph_workbench-0.1.0/scripts/verify_release.py +340 -0
  145. st_graph_workbench-0.1.0/st_graph_workbench/__init__.py +115 -0
  146. st_graph_workbench-0.1.0/st_graph_workbench/component/__init__.py +1 -0
  147. st_graph_workbench-0.1.0/st_graph_workbench/component/_expansion_contract.py +106 -0
  148. st_graph_workbench-0.1.0/st_graph_workbench/component/_ids.py +44 -0
  149. st_graph_workbench-0.1.0/st_graph_workbench/component/_typing.py +6 -0
  150. st_graph_workbench-0.1.0/st_graph_workbench/component/_warnings.py +8 -0
  151. st_graph_workbench-0.1.0/st_graph_workbench/component/commands.py +705 -0
  152. st_graph_workbench-0.1.0/st_graph_workbench/component/component.py +990 -0
  153. st_graph_workbench-0.1.0/st_graph_workbench/component/elements.py +191 -0
  154. st_graph_workbench-0.1.0/st_graph_workbench/component/events.py +70 -0
  155. st_graph_workbench-0.1.0/st_graph_workbench/component/expansion.py +1207 -0
  156. st_graph_workbench-0.1.0/st_graph_workbench/component/expansion_provider.py +170 -0
  157. st_graph_workbench-0.1.0/st_graph_workbench/component/icons.py +54 -0
  158. st_graph_workbench-0.1.0/st_graph_workbench/component/layouts.py +100 -0
  159. st_graph_workbench-0.1.0/st_graph_workbench/component/records.py +369 -0
  160. st_graph_workbench-0.1.0/st_graph_workbench/component/styles.py +267 -0
  161. st_graph_workbench-0.1.0/st_graph_workbench/component/types.py +83 -0
  162. st_graph_workbench-0.1.0/st_graph_workbench/component/validation.py +147 -0
  163. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/111-76b489c917f19c7113b7.js +1 -0
  164. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/477-3b51cf5f6d2483b89d23.js +1 -0
  165. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/527-15ddbbbebc4c095e1a00.js +1 -0
  166. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/576-875a5e1c17a808590401.js +1 -0
  167. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/644-fd47658f645d99a1478f.js +1 -0
  168. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/95-b2593eb4f78f89f4f83a.js +1 -0
  169. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/THIRD_PARTY_LICENSES.txt +651 -0
  170. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/component.html +905 -0
  171. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/account_balance.svg +1 -0
  172. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/alternate_email.svg +1 -0
  173. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/analytics.svg +1 -0
  174. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/assured_workload.svg +1 -0
  175. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/badge.svg +1 -0
  176. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/business.svg +1 -0
  177. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/campaign.svg +1 -0
  178. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/cell_tower.svg +1 -0
  179. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/chat.svg +1 -0
  180. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/cloud.svg +1 -0
  181. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/credit_card.svg +1 -0
  182. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/description.svg +1 -0
  183. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/directions_car.svg +1 -0
  184. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/dns.svg +1 -0
  185. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/email.svg +1 -0
  186. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/factory.svg +1 -0
  187. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/flag.svg +1 -0
  188. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/flight.svg +1 -0
  189. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/folder.svg +1 -0
  190. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/group.svg +1 -0
  191. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/home.svg +1 -0
  192. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/inventory.svg +1 -0
  193. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/key.svg +1 -0
  194. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/language.svg +1 -0
  195. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/laptop.svg +1 -0
  196. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/link.svg +1 -0
  197. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/local_shipping.svg +1 -0
  198. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/lock.svg +1 -0
  199. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/medical_information.svg +1 -0
  200. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/medical_services.svg +1 -0
  201. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/monitor.svg +1 -0
  202. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/person.svg +1 -0
  203. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/phone.svg +1 -0
  204. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/photo_camera.svg +1 -0
  205. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/place.svg +1 -0
  206. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/request_quote.svg +1 -0
  207. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/router.svg +1 -0
  208. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/schedule.svg +1 -0
  209. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/science.svg +1 -0
  210. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/sell.svg +1 -0
  211. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/shopping_cart.svg +1 -0
  212. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/sim_card.svg +1 -0
  213. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/smartphone.svg +1 -0
  214. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/storage.svg +1 -0
  215. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/store.svg +1 -0
  216. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/swap_horiz.svg +1 -0
  217. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/train.svg +1 -0
  218. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/translate.svg +1 -0
  219. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/videocam.svg +1 -0
  220. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/wallet.svg +1 -0
  221. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/warehouse.svg +1 -0
  222. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/icons/wifi.svg +1 -0
  223. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/index-04eff230345e2c3afcce.js +2 -0
  224. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/index-04eff230345e2c3afcce.js.LICENSE.txt +9 -0
  225. st_graph_workbench-0.1.0/st_graph_workbench/frontend/build/style.css +1268 -0
  226. st_graph_workbench-0.1.0/st_graph_workbench/frontend/eslint.config.mjs +8 -0
  227. st_graph_workbench-0.1.0/st_graph_workbench/frontend/package-lock.json +6220 -0
  228. st_graph_workbench-0.1.0/st_graph_workbench/frontend/package.json +47 -0
  229. st_graph_workbench-0.1.0/st_graph_workbench/frontend/scripts/write_licenses.cjs +44 -0
  230. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/download.svg +1 -0
  231. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/fullscreen.svg +1 -0
  232. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/fullscreen_exit.svg +1 -0
  233. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/account_balance.svg +1 -0
  234. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/alternate_email.svg +1 -0
  235. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/analytics.svg +1 -0
  236. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/assured_workload.svg +1 -0
  237. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/badge.svg +1 -0
  238. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/business.svg +1 -0
  239. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/campaign.svg +1 -0
  240. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/cell_tower.svg +1 -0
  241. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/chat.svg +1 -0
  242. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/cloud.svg +1 -0
  243. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/credit_card.svg +1 -0
  244. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/description.svg +1 -0
  245. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/directions_car.svg +1 -0
  246. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/dns.svg +1 -0
  247. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/email.svg +1 -0
  248. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/factory.svg +1 -0
  249. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/flag.svg +1 -0
  250. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/flight.svg +1 -0
  251. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/folder.svg +1 -0
  252. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/group.svg +1 -0
  253. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/home.svg +1 -0
  254. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/inventory.svg +1 -0
  255. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/key.svg +1 -0
  256. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/language.svg +1 -0
  257. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/laptop.svg +1 -0
  258. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/link.svg +1 -0
  259. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/local_shipping.svg +1 -0
  260. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/lock.svg +1 -0
  261. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/medical_information.svg +1 -0
  262. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/medical_services.svg +1 -0
  263. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/monitor.svg +1 -0
  264. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/person.svg +1 -0
  265. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/phone.svg +1 -0
  266. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/photo_camera.svg +1 -0
  267. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/place.svg +1 -0
  268. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/request_quote.svg +1 -0
  269. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/router.svg +1 -0
  270. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/schedule.svg +1 -0
  271. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/science.svg +1 -0
  272. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/sell.svg +1 -0
  273. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/shopping_cart.svg +1 -0
  274. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/sim_card.svg +1 -0
  275. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/smartphone.svg +1 -0
  276. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/storage.svg +1 -0
  277. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/store.svg +1 -0
  278. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/swap_horiz.svg +1 -0
  279. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/train.svg +1 -0
  280. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/translate.svg +1 -0
  281. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/videocam.svg +1 -0
  282. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/wallet.svg +1 -0
  283. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/warehouse.svg +1 -0
  284. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/icons/wifi.svg +1 -0
  285. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/assets/refresh.svg +1 -0
  286. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/component.html +905 -0
  287. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/analysis.js +299 -0
  288. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/boxSelection.js +263 -0
  289. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/connectedDrag.js +379 -0
  290. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/crud.js +137 -0
  291. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/editTools.js +509 -0
  292. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/expansionBadges.js +151 -0
  293. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/expansionControls.js +350 -0
  294. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/graph.js +331 -0
  295. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/graphCommands.js +380 -0
  296. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/graphStats.js +119 -0
  297. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/infopanel.js +194 -0
  298. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/nodeActions.js +369 -0
  299. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/progressiveLoading.js +120 -0
  300. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/search.js +374 -0
  301. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/selectionControls.js +168 -0
  302. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/toolbar.js +135 -0
  303. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/toolbarLayout.js +227 -0
  304. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/toolbox.js +242 -0
  305. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/viewbar.js +78 -0
  306. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/components/viewportTools.js +188 -0
  307. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/index.html +163 -0
  308. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/index.js +850 -0
  309. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/style.css +1268 -0
  310. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/utils/dom.js +23 -0
  311. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/utils/expansion.js +149 -0
  312. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/utils/helpers.js +165 -0
  313. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/utils/layouts.js +120 -0
  314. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/utils/payloads.js +129 -0
  315. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/utils/state.js +61 -0
  316. st_graph_workbench-0.1.0/st_graph_workbench/frontend/src/utils/styles.js +257 -0
  317. st_graph_workbench-0.1.0/st_graph_workbench/frontend/webpack.config.js +69 -0
  318. st_graph_workbench-0.1.0/st_graph_workbench/py.typed +0 -0
  319. st_graph_workbench-0.1.0/st_graph_workbench/pyproject.toml +7 -0
  320. st_graph_workbench-0.1.0/tests/apps/connected_drag.py +108 -0
  321. st_graph_workbench-0.1.0/tests/apps/layout_command_rerun.py +25 -0
  322. st_graph_workbench-0.1.0/tests/apps/managed_expansion.py +51 -0
  323. st_graph_workbench-0.1.0/tests/apps/progressive_loading.py +85 -0
  324. st_graph_workbench-0.1.0/tests/apps/selection_details.py +68 -0
  325. st_graph_workbench-0.1.0/tests/apps/toolbar_layout.py +58 -0
  326. st_graph_workbench-0.1.0/tests/conftest.py +159 -0
  327. st_graph_workbench-0.1.0/tests/graph_test_helpers.py +372 -0
  328. st_graph_workbench-0.1.0/tests/test_component_capability_map.py +40 -0
  329. st_graph_workbench-0.1.0/tests/test_component_v2_validation.py +334 -0
  330. st_graph_workbench-0.1.0/tests/test_connected_drag.py +255 -0
  331. st_graph_workbench-0.1.0/tests/test_docs_gallery.py +24 -0
  332. st_graph_workbench-0.1.0/tests/test_editing_viewport_tools.py +222 -0
  333. st_graph_workbench-0.1.0/tests/test_elements.py +455 -0
  334. st_graph_workbench-0.1.0/tests/test_event_contract.py +39 -0
  335. st_graph_workbench-0.1.0/tests/test_events.py +138 -0
  336. st_graph_workbench-0.1.0/tests/test_examples_documentation.py +177 -0
  337. st_graph_workbench-0.1.0/tests/test_expansion.py +690 -0
  338. st_graph_workbench-0.1.0/tests/test_frontend_rendering_options.py +296 -0
  339. st_graph_workbench-0.1.0/tests/test_graph_commands.py +416 -0
  340. st_graph_workbench-0.1.0/tests/test_graph_workbench_showcase.py +47 -0
  341. st_graph_workbench-0.1.0/tests/test_icons.py +46 -0
  342. st_graph_workbench-0.1.0/tests/test_ids.py +37 -0
  343. st_graph_workbench-0.1.0/tests/test_infopanel.py +68 -0
  344. st_graph_workbench-0.1.0/tests/test_interactive_crud.py +205 -0
  345. st_graph_workbench-0.1.0/tests/test_investigation_tools.py +539 -0
  346. st_graph_workbench-0.1.0/tests/test_layouts.py +40 -0
  347. st_graph_workbench-0.1.0/tests/test_literal_option_sets.py +23 -0
  348. st_graph_workbench-0.1.0/tests/test_managed_expansion.py +447 -0
  349. st_graph_workbench-0.1.0/tests/test_mkdocs.py +271 -0
  350. st_graph_workbench-0.1.0/tests/test_node_actions.py +255 -0
  351. st_graph_workbench-0.1.0/tests/test_package_metadata.py +519 -0
  352. st_graph_workbench-0.1.0/tests/test_page_catalog.py +91 -0
  353. st_graph_workbench-0.1.0/tests/test_progressive_loading.py +620 -0
  354. st_graph_workbench-0.1.0/tests/test_progressive_loading_data.py +90 -0
  355. st_graph_workbench-0.1.0/tests/test_public_api_docs.py +131 -0
  356. st_graph_workbench-0.1.0/tests/test_readme_walkthrough.py +129 -0
  357. st_graph_workbench-0.1.0/tests/test_records.py +234 -0
  358. st_graph_workbench-0.1.0/tests/test_rename.py +87 -0
  359. st_graph_workbench-0.1.0/tests/test_request_delivery.py +161 -0
  360. st_graph_workbench-0.1.0/tests/test_search_readability.py +77 -0
  361. st_graph_workbench-0.1.0/tests/test_selection_details.py +274 -0
  362. st_graph_workbench-0.1.0/tests/test_smoke.py +463 -0
  363. st_graph_workbench-0.1.0/tests/test_toolbar_layout.py +111 -0
  364. st_graph_workbench-0.1.0/tests/test_tutorial_browser.py +213 -0
  365. st_graph_workbench-0.1.0/tests/test_tutorial_interactions.py +249 -0
  366. st_graph_workbench-0.1.0/tests/test_tutorials.py +473 -0
  367. st_graph_workbench-0.1.0/tests/test_validation.py +166 -0
  368. st_graph_workbench-0.1.0/tests/test_workflow_tutorials.py +257 -0
@@ -0,0 +1,78 @@
1
+ # Python bytecode and environments
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ .venv/
6
+ venv/
7
+ env/
8
+ ENV/
9
+ __pypackages__/
10
+
11
+ # Python packaging
12
+ *.egg
13
+ *.egg-info/
14
+ /build/
15
+ dist/
16
+ wheelhouse/
17
+ pip-wheel-metadata/
18
+ MANIFEST
19
+
20
+ # Test, coverage, and type-checking output
21
+ .mypy_cache/
22
+ .pytest_cache/
23
+ .ruff_cache/
24
+ .hypothesis/
25
+ .tox/
26
+ .nox/
27
+ .pytype/
28
+ .pyright/
29
+ .coverage
30
+ .coverage.*
31
+ coverage.xml
32
+ coverage.json
33
+ coverage/
34
+ htmlcov/
35
+ lcov.info
36
+ junit*.xml
37
+ pytest*.xml
38
+ playwright-report/
39
+ test-results/
40
+ blob-report/
41
+
42
+ # Generated documentation and temporary output
43
+ site/
44
+ .tmp/
45
+ *.log
46
+ *.tmp
47
+ *.bak
48
+
49
+ # Frontend dependencies
50
+ node_modules/
51
+
52
+ # Local configuration and credentials
53
+ .env
54
+ .env.*
55
+ !.env.example
56
+ .pypirc
57
+ .streamlit/secrets.toml
58
+
59
+ # Editors, notebooks, and operating-system metadata
60
+ .vscode/
61
+ .idea/
62
+ *.code-workspace
63
+ .ipynb_checkpoints/
64
+ .DS_Store
65
+ Thumbs.db
66
+ Desktop.ini
67
+ *.swp
68
+ *~
69
+
70
+ # Local agent configuration
71
+ .agents/
72
+ .codex/
73
+
74
+ # Private maintainer notes and release checklists
75
+ .maintainer/
76
+
77
+ # Deliberately unshipped example scratch pages
78
+ /examples/debug/*.py
@@ -0,0 +1,360 @@
1
+ # Changelog
2
+
3
+ All notable changes to `st-graph-workbench` will be documented in this file.
4
+
5
+ This changelog covers the standalone `st-graph-workbench` package beginning
6
+ with version `0.1.0`.
7
+
8
+ ## [Unreleased]
9
+
10
+ No unreleased changes.
11
+
12
+ ## [0.1.0] - 2026-09-26
13
+
14
+ ### Added
15
+
16
+ - An adaptive top toolbar with expanded, compact, and minimized presentations,
17
+ accessible search/minimize controls, stable-key preferences, and measured
18
+ canvas space that prevents wrapped controls from covering graph records.
19
+ Compact menus stay inside narrow pages, while an initial clipped graph is
20
+ fitted once after layout without changing later user viewport choices.
21
+ - `ToolbarConfig` for application-controlled mode, collapse availability, top
22
+ placement, and reserved-space behavior, with corresponding examples and
23
+ browser coverage.
24
+
25
+ - Opt-in connected-record dragging with one-to-three-hop visible scopes,
26
+ per-instance toolbar preferences, rigid selected-safe movement, bounded
27
+ refusal, lazy Cytoscape Automove loading, and returned movement metadata.
28
+ - Connected-drag workflows in the selection tutorial, Investigation Tools,
29
+ Progressive Loading, and the browser scale activity, including checkpointed
30
+ positions and oversized-neighborhood guidance.
31
+
32
+ - A Progressive Loading Scale Test activity with deterministic 100-to-10,000
33
+ record checkpoints and a repeatable Chromium capacity benchmark.
34
+ - User-facing Load more guidance covering bounded pages, Python-owned providers,
35
+ incremental commands, cursor handling, and when to switch to filtering or expansion.
36
+
37
+ - Shortest-path experiments in Progressive Loading, with one/two-node selection,
38
+ checkpoint-labelled relationship tables, and CSV export.
39
+ - Explicit Clear Selection and the details panel's X now also remove analysis
40
+ highlights on nodes and edges, without changing search matches or saved results.
41
+
42
+ - Beginner-oriented progressive-loading guidance, single-root BFS experiments,
43
+ optional paginated cross-location sightings, and snapshot-labelled visit tables
44
+ with hop distances and CSV export in the Progressive Loading demo.
45
+
46
+ - Real tutorial screenshots in the README and MkDocs, including path analysis,
47
+ search, independent branch collapse, and a populated Python-owned CRUD dialog.
48
+ - A reproducible workflow-gallery capture mode and project URL configuration
49
+ for reviewed documentation assets.
50
+
51
+ - Learning objectives and review prompts for all sixteen tutorials, with more
52
+ executing code, preserved teaching comments, and source-backed callback examples.
53
+
54
+ - CRUD tutorial type choices, styled browser drafts, side-by-side Python/edit
55
+ reports, and practical scenarios explaining approval-first versus edit-first workflows.
56
+
57
+ - User-adjustable selection details through `show_selection_details` and the
58
+ Selection menu checkbox, with independent per-graph rerun preferences.
59
+ - Readable 16px search inputs/dropdowns, 14px feedback, and responsive wrapping.
60
+ - Selection-details visibility is controlled by the toolbar checkbox; the
61
+ panel's X retains its clear-selection behavior without changing that preference.
62
+
63
+ - Opt-in, Python-owned expansion with shared-record retention, nested restoration,
64
+ paginated providers, bounded bulk operations, scoped search/analysis and snapshots.
65
+ - Persistent request delivery and browser command acknowledgments for managed
66
+ exploration, plus reliable delivery of existing progressive-loading requests.
67
+ - Separate node/edge change badges, consistent degree scope, and preserved source
68
+ records, cached edits, positions and viewport during collapse.
69
+ - A shared multi-location tutorial, Feature Lab and generated expansion API reference.
70
+
71
+ - A sixteen-lesson, tutorial-first examples app with independent checkpoints,
72
+ visible source data, executable code, explained results, and local resets.
73
+ - A separate Feature Lab navigation view and searchable feature finder, with
74
+ existing demonstration URLs and the live README walkthrough preserved.
75
+ - Curriculum coverage checks and browser tests for navigation, lesson state,
76
+ selections, commands, expansion, CRUD, exports, and progressive loading.
77
+
78
+ - Apache License 2.0 for original project work, project attribution, and license
79
+ metadata in both Python and frontend packages; upstream notices are retained.
80
+ - Contributor and private vulnerability-reporting guidance for public repository
81
+ users.
82
+ - Loading request IDs and optional completion acknowledgments for retrying
83
+ handled fetch failures without remounting or advancing the data cursor.
84
+ - Packaged typing markers, upstream license texts, generated production
85
+ dependency notices, and isolated installed-wheel release verification.
86
+
87
+ - Cursor-aware progressive loading through `ProgressiveLoadConfig`, an
88
+ in-canvas Load more control, and structured `load_more` event dictionaries.
89
+ - A Progressive Loading demo that grows a 600-record mobility graph through
90
+ idempotent browser commands without replacing the current viewport.
91
+ - Graph-aware CRUD endpoint selectors, custom node/edge property fields, and
92
+ duplicate-ID and endpoint validation in the interactive demo.
93
+ - Added a locally served Material for MkDocs site with task-oriented
94
+ guides, intelligence-analysis recipes, generated API reference, a complete
95
+ frontend capability matrix, screenshot automation, and strict CI builds.
96
+
97
+ - Public `Element`, `Elements`, `Record`, `Layout`, `GraphCommand`, and
98
+ `GraphEvent` type aliases for annotated Python integrations.
99
+ - Public `ElementId` and `ElementIdInput` aliases now match the scalar and
100
+ iterable identifier forms accepted by Python graph helpers.
101
+ - Selection and search element records can now be passed directly to
102
+ `records_to_dataframe(...)` for a flattened pandas view.
103
+ - The Data Helpers And Commands demo now loads, validates, and previews the
104
+ packaged intelligence graph JSON file.
105
+ - Box selection now includes an explicit Pan/Box select canvas-mode control,
106
+ allowing users to navigate dense graphs without leaving box selection mode.
107
+ - Streamlit examples app branding with the repository logo and page-level
108
+ Material Symbols icons.
109
+ - Front-page and demo-overview library badges for Cytoscape.js, Streamlit,
110
+ Python, Components v2, and Material Symbols.
111
+ - README banner logo and source distribution packaging for `images/logo.png`
112
+ and the Streamlit app icon asset.
113
+ - README guidance for running the local examples app on port 8502 and for the
114
+ single-bundle Components v2 build invariant.
115
+ - An `examples/data/intelligence_case.json` sample with vehicles, places,
116
+ times, people, and device links.
117
+ - Source distributions now include the examples app, tests, documentation
118
+ assets, and frontend source needed for local review.
119
+ - Wheels keep only the Python package and built component runtime assets,
120
+ excluding frontend source and npm metadata to reduce install size.
121
+
122
+ ### Changed
123
+
124
+ - Shared expansion record/filter validation and reused indexed graph projections
125
+ reduce repeated loaded-cache scans when preparing branch badges.
126
+
127
+ - Aligned the README, MkDocs home, and interactive overview around shared
128
+ capability summaries and executable graph, styling, dataframe, and selection
129
+ examples. The overview now renders the documented data and filtered evidence.
130
+ - CI installs locked development and documentation dependencies together, and
131
+ the test suite no longer automatically retries failures.
132
+ - Updated the transitive production Lodash dependency to 4.18.1.
133
+ - Updated vulnerable frontend development dependencies, including the copy
134
+ plugin and dev server. Frontend development now requires Node.js 22.15 or
135
+ newer, with Node.js 24 in CI; Python installations do not need Node.js.
136
+ - README images use tracked relative paths in editors and on GitHub, while the
137
+ distribution metadata converts those paths to public URLs for PyPI.
138
+ - Repository ignore rules now cover common Python, browser-test, coverage,
139
+ editor, secret, and temporary outputs without hiding packaged frontend
140
+ bundles, reviewed screenshots, or dependency lockfiles.
141
+ - The supported pandas floor is 2.2.2, avoiding the pandas 1.x and NumPy 2.x
142
+ binary incompatibility while preserving Python 3.10 support.
143
+ - Documentation dependencies explicitly remain on MkDocs 1.x, and CI verifies
144
+ minimum dependencies plus Python 3.10 through 3.14.
145
+ - Public documentation identifies local Streamlit routes without linking a
146
+ published reader directly to `localhost`.
147
+ - CI validates pull requests, `main` pushes, and version tags, with immutable
148
+ action revisions and one complete Chromium regression run.
149
+
150
+ - High-risk showcase nodes retain their semantic icon shape and use a red
151
+ border instead of being forced into a diamond.
152
+ - The project introduction now positions the component as a general graph and
153
+ knowledge-graph workbench for data science and application development.
154
+ - The Demo Overview now maps common dataframe, selection, related-data,
155
+ browser-editing, and large-graph tasks to their recommended API patterns.
156
+ - `Event(...)` now validates required text fields and rejects names reserved by
157
+ built-in component actions.
158
+ - Demo pages now share the same source-code expander helper instead of
159
+ repeating per-page file readers.
160
+ - Graph Workbench Showcase now uses a vehicle, location, and time intelligence
161
+ case instead of company and wallet records.
162
+ - Interactive CRUD / Data Loading now uses vehicle, location, time, person, and
163
+ device records, with a state-version guard for clean hot reloads.
164
+ - Components V2 Validation now uses the same vehicle/person intelligence
165
+ vocabulary while preserving the multi-instance icon asset check.
166
+ - Investigation Tools now uses vehicle, person, time-window, camera, phone,
167
+ tower, and location records across search, selection, analysis, and export
168
+ examples.
169
+ - Editing And Viewport Tools now uses vehicle, time-window, person, and device
170
+ records, with a state-version guard for clean hot reloads.
171
+ - Graph Data Format and Compound And Performance now use the same
172
+ intelligence-data vocabulary as the rest of the reader-facing examples.
173
+ - The old unreferenced company fixture was replaced with the intelligence-case
174
+ sample dataset.
175
+ - Demo capability summaries now render as contents-style lists instead of front
176
+ matter tables.
177
+ - Front-page library badges now render as a titled `Library stack` section so
178
+ screenshots clearly label the Cytoscape.js, Streamlit, Python, Components v2,
179
+ and Material Symbols stack.
180
+ - Dictionary preview blocks now show an explanatory waiting payload before any
181
+ component event exists.
182
+ - README live outputs now use the same described, scrollable dictionary preview
183
+ pattern as the demo pages.
184
+ - The Editing And Viewport Tools demo now makes custom mouse-wheel sensitivity
185
+ opt-in so the default page load uses Cytoscape's native wheel behavior.
186
+ - Root package exports now include the action and mode typing aliases for
187
+ node actions, CRUD actions, editing, viewport controls, analysis,
188
+ selection, performance profiles, and element sync modes.
189
+ - The JavaScript-to-Streamlit capability map now includes selection controls
190
+ and utility modules for layouts, expansion summaries, state, and context.
191
+ - Test coverage now checks that the JavaScript capability map mentions every
192
+ current frontend source module.
193
+ - Test coverage now checks that the README Public API block lists every root
194
+ package export.
195
+ - Browser tests now share Cytoscape/Playwright helper functions for component
196
+ lookup, readiness, selection, toolbox menus, node IDs, edge IDs, badges, and
197
+ positions.
198
+ - Runtime validation choices for graph options and graph command operations now
199
+ derive from the same `Literal` aliases used for public type hints.
200
+ - Deprecated compatibility arguments now share one internal warning category.
201
+
202
+ ### Fixed
203
+
204
+ - Bundled node icons now resolve from the loaded Components v2 bundle URL, so
205
+ deployment prefixes are retained and SVG assets render on Streamlit Community
206
+ Cloud as well as local servers.
207
+
208
+ - The progressive-loading button keeps a compact plus icon at all viewport
209
+ widths instead of inheriting percentage sizing from icon-only toolbar buttons.
210
+
211
+ - The Data Helpers And Commands demo now reserves its command-status slot so
212
+ feedback does not remount the graph during slow reruns, including circle layout.
213
+
214
+ - Managed expansion now generates request IDs on non-localhost HTTP origins,
215
+ using the same secure-random helper as progressive loading. Right-click and
216
+ dialog actions no longer fail when `crypto.randomUUID` is unavailable.
217
+
218
+ - Updated the locked GitPython dependency from 3.1.52 to the 3.1.59 security release.
219
+ - Selected-record details have a bounded, readable scrolling area, responsive
220
+ width, and a close control separated from the node icon.
221
+ - Expansion snapshots preserve edited starting relationships and compound context
222
+ after CRUD; source-search reveal rejects deleted or rewired paths.
223
+ - Request receipts survive partial callback failures and long in-flight queues;
224
+ hidden/filtered anchors invalidate pending responses before they can reappear.
225
+ - Explicit branch collapse, null-property filters, time ranges and provider limits
226
+ now enforce their documented scope and validation rules.
227
+
228
+ - Progressive-loading resets no longer reuse browser command IDs or report
229
+ batches that the browser silently ignored.
230
+ - Handled failed fetches can release the Load more button without changing
231
+ progress, and stale acknowledgments cannot complete a newer request.
232
+ - The empty-start loading snippet positions its nodes and fits its first page
233
+ instead of stacking every node at the origin.
234
+
235
+ - Scalar numeric and boolean IDs now work consistently in lookup, update,
236
+ delete, validation, and browser-command helpers; invalid object and
237
+ non-finite numeric IDs fail with one shared error contract.
238
+ - Expansion counts now reject `NaN` and infinite values before they can become
239
+ misleading browser badges.
240
+ - The selected-element details panel now has a direct clear-selection button,
241
+ so an expanded overlay cannot trap a selected node underneath it.
242
+ - Named `preset` layouts and layout command strings now follow the same
243
+ validated Python-to-Cytoscape path as layout option dictionaries.
244
+ - Initial info-panel and node-action state now starts collapsed before the
245
+ first browser selection update.
246
+ - Position return events no longer let the initial layout overwrite manually
247
+ dragged node coordinates.
248
+ - Node expansion from right-click and double-click/tap interactions is more
249
+ reliable across browser reruns and Cytoscape event variants.
250
+ - User-command events such as CRUD, remove, search, analysis, viewport, and
251
+ visibility actions now run without delayed click handlers, suppress
252
+ follow-up selection/position emissions, and use monotonic event timestamps
253
+ so Streamlit dialogs and notices are not dropped during fast interactions.
254
+ - Selection-menu visibility actions now respect the `node_actions` API:
255
+ `hide_unselected` and `restore_hidden` are hidden and guarded unless the
256
+ Python call enables those actions.
257
+ - Graph command validation now tracks node additions, deletions, clears, and
258
+ full graph replacements across an ordered command list, so a valid batch can
259
+ add a node and then add an edge to that node in the same rerun.
260
+ - Node-action remove and neighbor filters now read the live Cytoscape
261
+ selection when clicked, avoiding stale cached selection during fast
262
+ select-and-act workflows.
263
+ - Interactive CRUD / Data Loading now relies on CRUD payloads for selected
264
+ records instead of emitting separate selection events, reducing dialog-open
265
+ races during fast select-and-click workflows.
266
+ - The examples app now resolves pages, README/changelog content, debug pages,
267
+ and icon assets from the app file location, so it can run from either the
268
+ repository root or the `examples` directory.
269
+ - Browser tests now launch Streamlit through the active Python interpreter
270
+ instead of whichever `streamlit` executable appears first on `PATH`.
271
+ - Package metadata now requires Streamlit 1.57 or newer, matching the
272
+ Components v2 `isolate_styles` API used by the component wrapper.
273
+ - The component explicitly mounts with `isolate_styles=False` because
274
+ Cytoscape box selection needs light-DOM pointer handling; the generic
275
+ container CSS selector is now scoped to `.st-graph-workbench.container`.
276
+ - The frontend now marks the graph canvas ready only after Cytoscape listeners
277
+ and active layouts are initialized, avoiding early click/tap races during
278
+ first render and expansion animation.
279
+ - The frontend development HTML template no longer contains the invalid
280
+ `id="infopanel" ,` attribute typo.
281
+ - Public documentation now consistently refers to bundled node-icon assets as
282
+ Material Symbols-style assets instead of the older Material Icons wording.
283
+
284
+ ### Initial foundation (2026-07-27)
285
+
286
+ #### Added
287
+
288
+ - Initial `st-graph-workbench` package structure.
289
+ - Public Python API through `graph_workbench(...)`.
290
+ - Streamlit Components v2 frontend integration.
291
+ - Cytoscape.js graph rendering with bundled frontend assets.
292
+ - Python graph validation with friendly errors for malformed nodes, edges,
293
+ duplicate IDs, invalid edge references, invalid compound parents, and
294
+ malformed expansion metadata.
295
+ - Python styling helpers:
296
+ - `NodeStyle`
297
+ - `EdgeStyle`
298
+ - `StyleRule`
299
+ - Layout support for the bundled Cytoscape layouts.
300
+ - Unified graph toolbox with node actions, view controls, graph controls,
301
+ display controls, selection tools, analysis tools, export tools, and CRUD
302
+ intent actions.
303
+ - Expand/collapse action support with expansion-count badges.
304
+ - Selection modes and structured selection return payloads.
305
+ - Search and filter panel for graph investigation workflows.
306
+ - Non-destructive search behavior that highlights and selects every match,
307
+ fits the viewport toward those matches, and keeps graph context visible.
308
+ - Neighborhood exploration actions for incoming, outgoing, and connected nodes.
309
+ - Frontend graph analysis actions for shortest path, BFS, DFS, connected
310
+ components, and degree.
311
+ - Export and position-return support for saving graph state.
312
+ - Compound-node validation and performance profiles for larger graph scenarios.
313
+ - Graph-count overlay for shown, hidden, and total nodes and edges.
314
+ - CRUD/data-loading event contract and Python helper functions:
315
+ - `get_element`
316
+ - `upsert_elements`
317
+ - `update_element_data`
318
+ - `delete_elements`
319
+ - Incremental graph command helpers and browser command application:
320
+ - `add_elements_command`
321
+ - `upsert_elements_command`
322
+ - `update_data_command`
323
+ - `delete_elements_command`
324
+ - `set_elements_command`
325
+ - `clear_graph_command`
326
+ - `viewport_command`
327
+ - `apply_graph_command`
328
+ - `apply_graph_commands`
329
+ - Browser-local edit tools for add node, connect selected, delete selected,
330
+ lock/unlock, grabbable/ungrabbable, snap to grid, undo, and redo.
331
+ - Viewport controls and commands for zoom/pan toggles, saved views, reset view,
332
+ pan, zoom, viewport restore, zoom bounds, fit, center, and rerun layout.
333
+ - Example pages for:
334
+ - Graph Workbench Showcase
335
+ - Interactive CRUD / Data Loading
336
+ - Editing And Viewport Tools
337
+ - Investigation Tools
338
+ - Node Actions
339
+ - Compound And Performance
340
+ - Components V2 Validation
341
+ - Node Styles
342
+ - Edge Styles
343
+ - Layout Algorithms
344
+ - Events Listeners
345
+ - Standalone documentation sequence covering first graph, styling, selection/search,
346
+ expand/collapse, CRUD/data loading, analysis/export, compound/large graphs,
347
+ editing/viewport controls, and large graph behavior.
348
+ - Learning-focused documentation pages for graph data format, styling,
349
+ frontend architecture, and CRUD/data loading.
350
+ - `uv`-based development workflow and lockfile.
351
+
352
+ #### Changed
353
+
354
+ - Package metadata uses the new distribution name `st-graph-workbench`.
355
+ - Python import package is `st_graph_workbench`.
356
+ - Main public function is `graph_workbench(...)`.
357
+
358
+ #### Notes
359
+
360
+ - This is the first changelog entry for the new package history.
@@ -0,0 +1,55 @@
1
+ # Contributing
2
+
3
+ Thank you for helping improve `st-graph-workbench`. Contributions should keep
4
+ the Python API, Streamlit examples, browser component, and documentation in
5
+ agreement.
6
+
7
+ ## Set up the checkout
8
+
9
+ ```powershell
10
+ uv sync --extra dev --extra docs
11
+ uv run playwright install chromium
12
+ cd st_graph_workbench/frontend
13
+ npm ci
14
+ cd ../..
15
+ ```
16
+
17
+ Node.js is needed only when changing or rebuilding the frontend. The compiled
18
+ component is already included for ordinary Python development.
19
+
20
+ ## Make a focused change
21
+
22
+ - Follow the existing public API and typing patterns.
23
+ - Add or update tests for changed behavior.
24
+ - Update the relevant tutorial and MkDocs guide for user-visible behavior.
25
+ - Use synthetic records in examples, tests, screenshots, and bug reports.
26
+ - Rebuild `st_graph_workbench/frontend/build` after frontend source changes.
27
+ - Preserve third-party attribution when adapting external code or assets.
28
+
29
+ ## Run the checks
30
+
31
+ ```powershell
32
+ uv run ruff format --check .
33
+ uv run ruff check .
34
+ uv run mypy st_graph_workbench/
35
+ uv run pytest --reruns=0 -q
36
+ uv run mkdocs build --strict
37
+ uv run python scripts/verify_release.py
38
+ ```
39
+
40
+ For frontend changes, also run:
41
+
42
+ ```powershell
43
+ cd st_graph_workbench/frontend
44
+ npm run format
45
+ npm run lint
46
+ npm run build
47
+ npm audit
48
+ ```
49
+
50
+ ## Submit the change
51
+
52
+ Describe the behavior, verification performed, and any compatibility impact.
53
+ Do not include credentials, private datasets, personal records, or generated
54
+ environment files. Contributions are accepted under the project's Apache
55
+ License 2.0.