runtimepy 5.6.4__tar.gz → 5.7.1__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 (298) hide show
  1. {runtimepy-5.6.4/runtimepy.egg-info → runtimepy-5.7.1}/PKG-INFO +6 -6
  2. {runtimepy-5.6.4 → runtimepy-5.7.1}/README.md +2 -2
  3. {runtimepy-5.6.4 → runtimepy-5.7.1}/pyproject.toml +1 -1
  4. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/__init__.py +2 -2
  5. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/css/bootstrap_extra.css +7 -3
  6. runtimepy-5.7.1/runtimepy/data/css/font.css +47 -0
  7. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/css/main.css +0 -1
  8. runtimepy-5.7.1/runtimepy/data/favicon.ico +0 -0
  9. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/WindowHashManager.js +29 -7
  10. runtimepy-5.7.1/runtimepy/data/static/svg/chip-circle-bootstrap.svg +22 -0
  11. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaCode-Bold.woff2 +0 -0
  12. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaCode-BoldItalic.woff2 +0 -0
  13. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaCode-Italic.woff2 +0 -0
  14. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaCode-Regular.woff2 +0 -0
  15. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaMono-Bold.woff2 +0 -0
  16. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaMono-BoldItalic.woff2 +0 -0
  17. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaMono-Italic.woff2 +0 -0
  18. runtimepy-5.7.1/runtimepy/data/static/woff2/CascadiaMono-Regular.woff2 +0 -0
  19. runtimepy-5.7.1/runtimepy/data/static/woff2/README.md +9 -0
  20. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/base.py +2 -3
  21. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/bootstrap/elements.py +1 -1
  22. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/bootstrap/tabs.py +12 -3
  23. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/__init__.py +5 -1
  24. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/modal.py +1 -1
  25. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/settings.py +2 -2
  26. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/tab/html.py +7 -4
  27. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/placeholder.py +1 -1
  28. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/sound.py +1 -1
  29. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/requirements.txt +1 -1
  30. {runtimepy-5.6.4 → runtimepy-5.7.1/runtimepy.egg-info}/PKG-INFO +6 -6
  31. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy.egg-info/SOURCES.txt +11 -0
  32. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy.egg-info/requires.txt +3 -3
  33. runtimepy-5.6.4/runtimepy/data/favicon.ico +0 -0
  34. {runtimepy-5.6.4 → runtimepy-5.7.1}/LICENSE +0 -0
  35. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/__main__.py +0 -0
  36. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/app.py +0 -0
  37. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/__init__.py +0 -0
  38. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/__init__.py +0 -0
  39. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/array.py +0 -0
  40. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/base.py +0 -0
  41. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/command/__init__.py +0 -0
  42. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/command/parser.py +0 -0
  43. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/command/processor.py +0 -0
  44. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/command/result.py +0 -0
  45. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/create.py +0 -0
  46. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/file.py +0 -0
  47. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/sample.py +0 -0
  48. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/environment/telemetry.py +0 -0
  49. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/event/__init__.py +0 -0
  50. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/event/header.py +0 -0
  51. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/channel/registry.py +0 -0
  52. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/codec/__init__.py +0 -0
  53. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/codec/protocol/__init__.py +0 -0
  54. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/codec/protocol/base.py +0 -0
  55. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/codec/protocol/json.py +0 -0
  56. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/codec/system/__init__.py +0 -0
  57. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/__init__.py +0 -0
  58. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/all.py +0 -0
  59. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/arbiter.py +0 -0
  60. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/common.py +0 -0
  61. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/mtu.py +0 -0
  62. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/server.py +0 -0
  63. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/task.py +0 -0
  64. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/tftp.py +0 -0
  65. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/commands/tui.py +0 -0
  66. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/control/__init__.py +0 -0
  67. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/control/env/__init__.py +0 -0
  68. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/control/source.py +0 -0
  69. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/control/step.py +0 -0
  70. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/browser.yaml +0 -0
  71. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/dummy_load.yaml +0 -0
  72. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/factories.yaml +0 -0
  73. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/DataConnection.js +0 -0
  74. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/JsonConnection.js +0 -0
  75. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/audio.js +0 -0
  76. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/App.js +0 -0
  77. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/ChannelTable.js +0 -0
  78. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/DataConnection.js +0 -0
  79. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/JsonConnection.js +0 -0
  80. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/OverlayManager.js +0 -0
  81. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/Plot.js +0 -0
  82. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/PlotDrawer.js +0 -0
  83. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/PlotManager.js +0 -0
  84. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/PlotModalManager.js +0 -0
  85. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/PointBuffer.js +0 -0
  86. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/PointManager.js +0 -0
  87. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/TabFilter.js +0 -0
  88. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/TabInterface.js +0 -0
  89. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/UnitSystem.js +0 -0
  90. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/classes/WorkerInterface.js +0 -0
  91. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/events.js +0 -0
  92. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/init.js +0 -0
  93. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/main.js +0 -0
  94. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/tab/env.js +0 -0
  95. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/tab/sound.js +0 -0
  96. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/third-party/webgl-debug.js +0 -0
  97. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/unused/pyodide.js +0 -0
  98. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/util.js +0 -0
  99. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/js/worker.js +0 -0
  100. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/md/Connection.md +0 -0
  101. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/md/PeriodicTask.md +0 -0
  102. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/md/RuntimeStruct.md +0 -0
  103. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/md/RuntimepyPeer.md +0 -0
  104. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/md/SinusoidTask.md +0 -0
  105. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/sample_telemetry.yaml +0 -0
  106. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/BitFields.yaml +0 -0
  107. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/Channel.yaml +0 -0
  108. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/ChannelCommand.yaml +0 -0
  109. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/ChannelRegistry.yaml +0 -0
  110. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/ClientConnectionConfig.yaml +0 -0
  111. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/ConnectionArbiterConfig.yaml +0 -0
  112. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/EnumRegistry.yaml +0 -0
  113. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/FindFile.yaml +0 -0
  114. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/PeerProcessConfig.yaml +0 -0
  115. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/RuntimeEnum.yaml +0 -0
  116. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/ServerConnectionConfig.yaml +0 -0
  117. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/StructConfig.yaml +0 -0
  118. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/TaskConfig.yaml +0 -0
  119. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/channel_controls.yaml +0 -0
  120. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/has_config.yaml +0 -0
  121. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/has_factory.yaml +0 -0
  122. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/has_markdown.yaml +0 -0
  123. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/has_name.yaml +0 -0
  124. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/schemas/has_request_flag.yaml +0 -0
  125. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/server.yaml +0 -0
  126. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/server_base.yaml +0 -0
  127. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/server_dev.yaml +0 -0
  128. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/data/tftp_server.yaml +0 -0
  129. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/dev_requirements.txt +0 -0
  130. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/entry.py +0 -0
  131. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/enum/__init__.py +0 -0
  132. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/enum/registry.py +0 -0
  133. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/enum/types.py +0 -0
  134. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mapping.py +0 -0
  135. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/message/__init__.py +0 -0
  136. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/message/handlers.py +0 -0
  137. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/message/interface.py +0 -0
  138. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/message/types.py +0 -0
  139. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/metrics/__init__.py +0 -0
  140. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/metrics/channel.py +0 -0
  141. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/metrics/connection.py +0 -0
  142. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/metrics/task.py +0 -0
  143. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/__init__.py +0 -0
  144. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/async_command.py +0 -0
  145. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/enum.py +0 -0
  146. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/environment.py +0 -0
  147. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/finalize.py +0 -0
  148. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/logging.py +0 -0
  149. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/psutil.py +0 -0
  150. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/regex.py +0 -0
  151. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/mixins/trig.py +0 -0
  152. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/__init__.py +0 -0
  153. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/apps/__init__.py +0 -0
  154. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/__init__.py +0 -0
  155. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/base.py +0 -0
  156. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/config/__init__.py +0 -0
  157. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/config/codec.py +0 -0
  158. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/config/util.py +0 -0
  159. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/factory/__init__.py +0 -0
  160. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/factory/connection.py +0 -0
  161. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/factory/task.py +0 -0
  162. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/housekeeping/__init__.py +0 -0
  163. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/imports/__init__.py +0 -0
  164. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/imports/util.py +0 -0
  165. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/info.py +0 -0
  166. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/result.py +0 -0
  167. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/struct/__init__.py +0 -0
  168. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/task.py +0 -0
  169. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/tcp/__init__.py +0 -0
  170. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/tcp/json.py +0 -0
  171. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/udp.py +0 -0
  172. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/arbiter/websocket.py +0 -0
  173. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/backoff.py +0 -0
  174. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/connection.py +0 -0
  175. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/factories/__init__.py +0 -0
  176. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/http/__init__.py +0 -0
  177. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/http/common.py +0 -0
  178. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/http/header.py +0 -0
  179. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/http/request_target.py +0 -0
  180. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/http/response.py +0 -0
  181. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/http/state.py +0 -0
  182. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/http/version.py +0 -0
  183. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/manager.py +0 -0
  184. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/mixin.py +0 -0
  185. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/mtu.py +0 -0
  186. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/__init__.py +0 -0
  187. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/__init__.py +0 -0
  188. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/bootstrap/__init__.py +0 -0
  189. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/create.py +0 -0
  190. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/elements.py +0 -0
  191. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/tab/__init__.py +0 -0
  192. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/tab/base.py +0 -0
  193. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/tab/controls.py +0 -0
  194. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/tab/message.py +0 -0
  195. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/env/widgets.py +0 -0
  196. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/files.py +0 -0
  197. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/landing_page.py +0 -0
  198. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/pyodide.py +0 -0
  199. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/app/tab.py +0 -0
  200. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/html.py +0 -0
  201. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/json.py +0 -0
  202. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/struct/__init__.py +0 -0
  203. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/websocket/__init__.py +0 -0
  204. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/server/websocket/state.py +0 -0
  205. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/ssl.py +0 -0
  206. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/stream/__init__.py +0 -0
  207. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/stream/base.py +0 -0
  208. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/stream/json/__init__.py +0 -0
  209. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/stream/string.py +0 -0
  210. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/__init__.py +0 -0
  211. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/connection.py +0 -0
  212. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/create.py +0 -0
  213. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/http/__init__.py +0 -0
  214. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/protocol.py +0 -0
  215. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/scpi/__init__.py +0 -0
  216. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/telnet/__init__.py +0 -0
  217. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/telnet/codes.py +0 -0
  218. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/tcp/telnet/np_05b.py +0 -0
  219. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/__init__.py +0 -0
  220. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/connection.py +0 -0
  221. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/create.py +0 -0
  222. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/protocol.py +0 -0
  223. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/queue.py +0 -0
  224. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/tftp/__init__.py +0 -0
  225. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/tftp/base.py +0 -0
  226. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/tftp/endpoint.py +0 -0
  227. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/tftp/enums.py +0 -0
  228. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/udp/tftp/io.py +0 -0
  229. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/util.py +0 -0
  230. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/websocket/__init__.py +0 -0
  231. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/net/websocket/connection.py +0 -0
  232. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/noise/__init__.py +0 -0
  233. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/__init__.py +0 -0
  234. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/array/__init__.py +0 -0
  235. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/base.py +0 -0
  236. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/bool.py +0 -0
  237. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/byte_order.py +0 -0
  238. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/evaluation.py +0 -0
  239. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/field/__init__.py +0 -0
  240. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/field/fields.py +0 -0
  241. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/field/manager/__init__.py +0 -0
  242. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/field/manager/base.py +0 -0
  243. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/float.py +0 -0
  244. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/int.py +0 -0
  245. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/scaling.py +0 -0
  246. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/serializable/__init__.py +0 -0
  247. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/serializable/base.py +0 -0
  248. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/serializable/fixed.py +0 -0
  249. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/serializable/framer.py +0 -0
  250. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/serializable/prefixed.py +0 -0
  251. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/string.py +0 -0
  252. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/types/__init__.py +0 -0
  253. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/types/base.py +0 -0
  254. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/types/bool.py +0 -0
  255. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/types/bounds.py +0 -0
  256. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/types/float.py +0 -0
  257. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/primitives/types/int.py +0 -0
  258. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/py.typed +0 -0
  259. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/registry/__init__.py +0 -0
  260. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/registry/bool.py +0 -0
  261. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/registry/item.py +0 -0
  262. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/registry/name.py +0 -0
  263. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/sample/__init__.py +0 -0
  264. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/sample/peer.py +0 -0
  265. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/sample/program.py +0 -0
  266. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/schemas.py +0 -0
  267. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/struct/__init__.py +0 -0
  268. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/subprocess/__init__.py +0 -0
  269. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/subprocess/interface.py +0 -0
  270. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/subprocess/peer.py +0 -0
  271. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/subprocess/program.py +0 -0
  272. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/subprocess/protocol.py +0 -0
  273. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/task/__init__.py +0 -0
  274. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/task/asynchronous.py +0 -0
  275. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/task/basic/__init__.py +0 -0
  276. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/task/basic/manager.py +0 -0
  277. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/task/basic/periodic.py +0 -0
  278. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/task/sample.py +0 -0
  279. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/task/trig/__init__.py +0 -0
  280. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/telemetry/__init__.py +0 -0
  281. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/telemetry/sample.py +0 -0
  282. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/tui/__init__.py +0 -0
  283. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/tui/channels/__init__.py +0 -0
  284. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/tui/cursor.py +0 -0
  285. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/tui/mixin.py +0 -0
  286. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/tui/mock.py +0 -0
  287. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/tui/task.py +0 -0
  288. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/ui/__init__.py +0 -0
  289. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/ui/controls.py +0 -0
  290. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy/util.py +0 -0
  291. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy.egg-info/dependency_links.txt +0 -0
  292. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy.egg-info/entry_points.txt +0 -0
  293. {runtimepy-5.6.4 → runtimepy-5.7.1}/runtimepy.egg-info/top_level.txt +0 -0
  294. {runtimepy-5.6.4 → runtimepy-5.7.1}/setup.cfg +0 -0
  295. {runtimepy-5.6.4 → runtimepy-5.7.1}/setup.py +0 -0
  296. {runtimepy-5.6.4 → runtimepy-5.7.1}/tests/test_entry.py +0 -0
  297. {runtimepy-5.6.4 → runtimepy-5.7.1}/tests/test_mapping.py +0 -0
  298. {runtimepy-5.6.4 → runtimepy-5.7.1}/tests/test_resources.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: runtimepy
3
- Version: 5.6.4
3
+ Version: 5.7.1
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/vkottler/runtimepy
6
6
  Author: Vaughn Kottler
@@ -17,10 +17,10 @@ Classifier: License :: OSI Approved :: MIT License
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: websockets
21
- Requires-Dist: svgen>=0.6.8
22
- Requires-Dist: vcorelib>=3.4.1
23
20
  Requires-Dist: psutil
21
+ Requires-Dist: vcorelib>=3.4.2
22
+ Requires-Dist: svgen>=0.6.8
23
+ Requires-Dist: websockets
24
24
  Requires-Dist: aiofiles
25
25
  Provides-Extra: test
26
26
  Requires-Dist: pylint; extra == "test"
@@ -45,11 +45,11 @@ Requires-Dist: uvloop; (sys_platform != "win32" and sys_platform != "cygwin") an
45
45
  =====================================
46
46
  generator=datazen
47
47
  version=3.1.4
48
- hash=41c5a2511c80b2cbbaee668bb6a75bd2
48
+ hash=8247340c8c4e6982a54b831c311f2c0b
49
49
  =====================================
50
50
  -->
51
51
 
52
- # runtimepy ([5.6.4](https://pypi.org/project/runtimepy/))
52
+ # runtimepy ([5.7.1](https://pypi.org/project/runtimepy/))
53
53
 
54
54
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
55
55
  ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
@@ -2,11 +2,11 @@
2
2
  =====================================
3
3
  generator=datazen
4
4
  version=3.1.4
5
- hash=41c5a2511c80b2cbbaee668bb6a75bd2
5
+ hash=8247340c8c4e6982a54b831c311f2c0b
6
6
  =====================================
7
7
  -->
8
8
 
9
- # runtimepy ([5.6.4](https://pypi.org/project/runtimepy/))
9
+ # runtimepy ([5.7.1](https://pypi.org/project/runtimepy/))
10
10
 
11
11
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
12
12
  ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta:__legacy__"
4
4
 
5
5
  [project]
6
6
  name = "runtimepy"
7
- version = "5.6.4"
7
+ version = "5.7.1"
8
8
  description = "A framework for implementing Python services."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,7 +1,7 @@
1
1
  # =====================================
2
2
  # generator=datazen
3
3
  # version=3.1.4
4
- # hash=beefe82269955725f177c01474f7cea1
4
+ # hash=405585c0fbfcc966ef193f744f21fa59
5
5
  # =====================================
6
6
 
7
7
  """
@@ -10,7 +10,7 @@ Useful defaults and other package metadata.
10
10
 
11
11
  DESCRIPTION = "A framework for implementing Python services."
12
12
  PKG_NAME = "runtimepy"
13
- VERSION = "5.6.4"
13
+ VERSION = "5.7.1"
14
14
 
15
15
  # runtimepy-specific content.
16
16
  METRICS_NAME = "metrics"
@@ -77,19 +77,17 @@ textarea.text-logs {
77
77
  padding-bottom: 0 !important;
78
78
 
79
79
  border-top: 0;
80
- background-color: var(--bs-secondary-bg-subtle);
81
80
  }
82
81
 
83
82
  .vertical-divider {
84
83
  flex-basis: 0.75em;
85
84
  flex-grow: 0;
86
85
  flex-shrink: 0;
87
- background-color: var(--bs-secondary-bg-subtle);
88
86
  }
89
87
 
90
88
  .vertical-divider:hover {
91
89
  cursor: col-resize;
92
- background-color: var(--bs-secondary-bg);
90
+ background-color: var(--bs-highlight-bg) !important;
93
91
  }
94
92
 
95
93
  button:hover {
@@ -99,3 +97,9 @@ button:hover {
99
97
  .channel-value-input {
100
98
  width: 6em;
101
99
  }
100
+
101
+ /* Prefer 'CascadiaCode' and 'CascadiaMono' at the highest priority. */
102
+ :root, [data-bs-theme=dark], [data-bs-theme=light] {
103
+ --bs-font-sans-serif: CascadiaCode, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
104
+ --bs-font-monospace: CascadiaMono, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
105
+ }
@@ -0,0 +1,47 @@
1
+ @font-face {
2
+ font-family: CascadiaCode;
3
+ src: url("/static/woff2/CascadiaCode-Regular.woff2");
4
+ }
5
+
6
+ @font-face {
7
+ font-family: CascadiaCode;
8
+ src: url("/static/woff2/CascadiaCode-Bold.woff2");
9
+ font-weight: bold;
10
+ }
11
+
12
+ @font-face {
13
+ font-family: CascadiaCode;
14
+ src: url("/static/woff2/CascadiaCode-BoldItalic.woff2");
15
+ font-weight: bold;
16
+ font-style: italic;
17
+ }
18
+
19
+ @font-face {
20
+ font-family: CascadiaCode;
21
+ src: url("/static/woff2/CascadiaCode-Italic.woff2");
22
+ font-style: italic;
23
+ }
24
+
25
+ @font-face {
26
+ font-family: CascadiaMono;
27
+ src: url("/static/woff2/CascadiaMono-Regular.woff2");
28
+ }
29
+
30
+ @font-face {
31
+ font-family: CascadiaMono;
32
+ src: url("/static/woff2/CascadiaMono-Bold.woff2");
33
+ font-weight: bold;
34
+ }
35
+
36
+ @font-face {
37
+ font-family: CascadiaMono;
38
+ src: url("/static/woff2/CascadiaMono-BoldItalic.woff2");
39
+ font-weight: bold;
40
+ font-style: italic;
41
+ }
42
+
43
+ @font-face {
44
+ font-family: CascadiaMono;
45
+ src: url("/static/woff2/CascadiaMono-Italic.woff2");
46
+ font-style: italic;
47
+ }
@@ -28,7 +28,6 @@ body > :first-child {
28
28
  width: 100vw;
29
29
  height: 100vh;
30
30
  opacity: 1.0;
31
- background-color: var(--bs-secondary-bg-subtle);
32
31
  }
33
32
 
34
33
  .click-plot {
@@ -7,6 +7,7 @@ class WindowHashManager {
7
7
  this.tabFilter = "";
8
8
  this.tabsShown = true;
9
9
  this.channelsShown = true;
10
+ this.lightMode = false;
10
11
  this.plotChannels = {};
11
12
  this.filters = {};
12
13
  this.minTxPeriod = 0.0;
@@ -17,6 +18,15 @@ class WindowHashManager {
17
18
  this.update();
18
19
  }
19
20
 
21
+ lightDarkClick(event) {
22
+ this.lightMode = !this.lightMode;
23
+
24
+ document.getElementById("runtimepy")
25
+ .setAttribute("data-bs-theme", this.lightMode ? "light" : "dark");
26
+
27
+ this.update();
28
+ }
29
+
20
30
  channelClick(event) {
21
31
  this.channelsShown = !this.channelsShown;
22
32
 
@@ -106,6 +116,12 @@ class WindowHashManager {
106
116
  channelsButton.addEventListener("click", this.channelClick.bind(this));
107
117
  }
108
118
 
119
+ /* Click handler for light/dark toggle. */
120
+ let lightDarkButton = document.getElementById("theme-button");
121
+ if (lightDarkButton) {
122
+ lightDarkButton.addEventListener("click", this.lightDarkClick.bind(this));
123
+ }
124
+
109
125
  /* Click handlers for new window buttons. */
110
126
  for (const button of document.querySelectorAll(".window-button")) {
111
127
  button.onclick = () => {
@@ -150,13 +166,6 @@ class WindowHashManager {
150
166
  }
151
167
  }
152
168
 
153
- if (split.includes("hide-tabs")) {
154
- tabButton.click();
155
- }
156
- if (split.includes("hide-channels")) {
157
- channelsButton.click();
158
- }
159
-
160
169
  /* Check for tab filter. */
161
170
  for (let item of split) {
162
171
  if (item.includes("=")) {
@@ -171,6 +180,16 @@ class WindowHashManager {
171
180
  }
172
181
  }
173
182
  }
183
+
184
+ if (split.includes("hide-tabs")) {
185
+ tabButton.click();
186
+ }
187
+ if (split.includes("hide-channels")) {
188
+ channelsButton.click();
189
+ }
190
+ if (split.includes("light-mode")) {
191
+ lightDarkButton.click();
192
+ }
174
193
  }
175
194
  }
176
195
 
@@ -199,6 +218,9 @@ class WindowHashManager {
199
218
  if (!this.channelsShown) {
200
219
  hash += ",hide-channels"
201
220
  }
221
+ if (this.lightMode) {
222
+ hash += ",light-mode";
223
+ }
202
224
 
203
225
  if (this.minTxPeriod != 0.0) {
204
226
  hash += `,min-tx-period-ms=${this.minTxPeriod}`;
@@ -0,0 +1,22 @@
1
+ <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
2
+ <circle r="50.0" cx="50.0" cy="50.0" style="fill: #ADB5BD" />
3
+ <rect x="16.666666666666664" y="33.333333333333336" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
4
+ <rect x="16.666666666666664" y="45.833333333333336" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
5
+ <rect x="16.666666666666664" y="58.333333333333336" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
6
+ <rect x="58.33333333333333" y="16.666666666666664" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
7
+ <rect x="45.83333333333333" y="16.666666666666664" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
8
+ <rect x="33.33333333333333" y="16.666666666666664" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
9
+ <rect x="33.333333333333336" y="66.66666666666667" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
10
+ <rect x="45.833333333333336" y="66.66666666666667" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
11
+ <rect x="58.333333333333336" y="66.66666666666667" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
12
+ <rect x="66.66666666666667" y="58.33333333333333" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
13
+ <rect x="66.66666666666667" y="45.83333333333333" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
14
+ <rect x="66.66666666666667" y="33.33333333333333" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
15
+ <rect x="25.0" y="25.0" width="50.0" height="50.0" rx="8.333333333333334" ry="8.333333333333334" style="fill: #212529" />
16
+ <line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="31.25" y1="50.0" x2="40.625" y2="59.375" />
17
+ <line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="31.25" y1="50.0" x2="40.625" y2="40.625" />
18
+ <line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="68.75" y1="50.0" x2="59.375" y2="59.375" />
19
+ <line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="68.75" y1="50.0" x2="59.375" y2="40.625" />
20
+ <line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="45.3125" y1="61.71875" x2="50.0" y2="50.0" />
21
+ <line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="54.6875" y1="38.28125" x2="50.0" y2="50.0" />
22
+ </svg>
@@ -0,0 +1,9 @@
1
+ # [Cascadia Code](https://github.com/microsoft/cascadia-code)
2
+
3
+ Assets sourced from
4
+ [this release](https://github.com/microsoft/cascadia-code/releases/tag/v2404.23).
5
+
6
+ See also:
7
+ [LICENSE](https://github.com/microsoft/cascadia-code/blob/main/LICENSE).
8
+
9
+ **Fonts are used from release as-is.**
@@ -52,10 +52,9 @@ class WebApplication:
52
52
  def populate(self, document: Html, app: TabPopulater) -> None:
53
53
  """Populate the body element with the application."""
54
54
 
55
- # Third-party dependencies.
55
+ # CSS.
56
+ append_kind(document.head, "font", kind="css", tag="style")
56
57
  add_bootstrap_css(document.head)
57
-
58
- # Internal CSS.
59
58
  append_kind(
60
59
  document.head, "main", "bootstrap_extra", kind="css", tag="style"
61
60
  )
@@ -192,7 +192,7 @@ def centered_markdown(
192
192
  div(
193
193
  text=stream.getvalue(),
194
194
  parent=horiz_container,
195
- class_str="text-light p-3 pb-0",
195
+ class_str="text-body p-3 pb-0",
196
196
  )
197
197
 
198
198
  div(parent=horiz_container)
@@ -8,8 +8,10 @@ from svgen.element.html import div
8
8
 
9
9
  # internal
10
10
  from runtimepy import PKG_NAME
11
+ from runtimepy.net.server.app.bootstrap import icon_str
11
12
  from runtimepy.net.server.app.bootstrap.elements import (
12
13
  BOOTSTRAP_BUTTON,
14
+ bootstrap_button,
13
15
  collapse_button,
14
16
  flex,
15
17
  toggle_button,
@@ -85,16 +87,23 @@ class TabbedContent:
85
87
 
86
88
  # Create application container.
87
89
  self.container = div(parent=parent, id=name)
88
- self.container.add_class("d-flex", "align-items-start")
90
+ self.container.add_class("d-flex", "align-items-start", "bg-body")
89
91
 
90
92
  # Dark theme.
91
93
  self.container["data-bs-theme"] = "dark"
92
- parent.add_class("bg-dark")
93
94
 
94
95
  # Buttons.
95
96
  self.button_column = div(parent=self.container)
96
97
  self.button_column.add_class(
97
- "d-flex", "flex-column", "h-100", "bg-secondary-subtle"
98
+ "d-flex", "flex-column", "h-100", "bg-dark-subtle"
99
+ )
100
+
101
+ # Dark/light theme switch button.
102
+ bootstrap_button(
103
+ icon_str("lightbulb"),
104
+ tooltip=" Toggle light/dark.",
105
+ id="theme-button",
106
+ parent=self.button_column,
98
107
  )
99
108
 
100
109
  # Toggle tabs button.
@@ -155,4 +155,8 @@ def channel_environments(app: AppInfo, tabs: TabbedContent) -> None:
155
155
  )
156
156
 
157
157
  # Add splash screen element.
158
- div(id=f"{PKG_NAME}-splash", parent=tabs.container)
158
+ div(
159
+ id=f"{PKG_NAME}-splash",
160
+ parent=tabs.container,
161
+ class_str="bg-success-subtle bg-gradient",
162
+ )
@@ -32,7 +32,7 @@ class Modal:
32
32
 
33
33
  content = div(
34
34
  parent=div(
35
- parent=modal, class_str="modal-dialog text-light " + TEXT
35
+ parent=modal, class_str="modal-dialog text-body " + TEXT
36
36
  ),
37
37
  class_str="modal-content rounded-0",
38
38
  )
@@ -43,7 +43,7 @@ def plot_settings(tabs: TabbedContent) -> None:
43
43
  div(
44
44
  text="0 ms ('high', run at native refresh rate)",
45
45
  parent=container,
46
- class_str="text-nowrap text-primary",
46
+ class_str="text-nowrap text-body-emphasis",
47
47
  )
48
48
 
49
49
  slider(
@@ -53,7 +53,7 @@ def plot_settings(tabs: TabbedContent) -> None:
53
53
  div(
54
54
  text="100 ms ('low', 10 Hz)",
55
55
  parent=container,
56
- class_str="text-nowrap text-primary",
56
+ class_str="text-nowrap text-body-emphasis",
57
57
  )
58
58
 
59
59
  div(tag="hr", parent=modal.body)
@@ -50,6 +50,9 @@ def create_name_td(parent: Element) -> Element:
50
50
  return div(tag="td", parent=parent, class_str="p-0 text-nowrap")
51
51
 
52
52
 
53
+ COMMANDABLE = "text-info-emphasis"
54
+
55
+
53
56
  class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
54
57
  """A channel-environment tab interface."""
55
58
 
@@ -67,7 +70,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
67
70
 
68
71
  name_elem = div(tag="span", text=name, parent=name_td)
69
72
  if chan.commandable:
70
- name_elem.add_class("text-success")
73
+ name_elem.add_class(COMMANDABLE)
71
74
 
72
75
  if description:
73
76
  set_tooltip(name_elem, description, placement="left")
@@ -105,7 +108,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
105
108
 
106
109
  name_elem = div(tag="span", text=name, parent=name_td)
107
110
  if field.commandable:
108
- name_elem.add_class("text-success")
111
+ name_elem.add_class(COMMANDABLE)
109
112
 
110
113
  if field.description:
111
114
  description = field.description
@@ -238,7 +241,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
238
241
  logs = div(
239
242
  tag="textarea",
240
243
  parent=div(parent=vert_container, class_str="form-floating"),
241
- class_str=f"form-control rounded-0 {TEXT} text-logs",
244
+ class_str=(f"form-control rounded-0 {TEXT} text-logs"),
242
245
  id=self.get_id("logs"),
243
246
  title=f"Text logs for {self.name}.",
244
247
  )
@@ -258,7 +261,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
258
261
  div(
259
262
  id=self.get_id("divider"),
260
263
  parent=container,
261
- class_str="vertical-divider border-start",
264
+ class_str="vertical-divider border-start bg-dark-subtle",
262
265
  )
263
266
 
264
267
  self._compose_plot(container)
@@ -19,7 +19,7 @@ class DummyTab(Tab):
19
19
  def compose(self, parent: Element) -> None:
20
20
  """Compose the tab's HTML elements."""
21
21
 
22
- parent.add_class("text-light")
22
+ parent.add_class("text-body")
23
23
 
24
24
  for idx in range(10):
25
25
  div(parent=parent, text="Hello, world! " + str(idx))
@@ -17,7 +17,7 @@ class SoundTab(Tab):
17
17
  def compose(self, parent: Element) -> None:
18
18
  """Compose the tab's HTML elements."""
19
19
 
20
- container = div(parent=parent, class_str="text-light")
20
+ container = div(parent=parent, class_str="text-body")
21
21
 
22
22
  div(text="Hello, world! 1", parent=container)
23
23
  div(text="Hello, world! 2", parent=container)
@@ -1,5 +1,5 @@
1
1
  aiofiles
2
- vcorelib>=3.4.1
2
+ vcorelib>=3.4.2
3
3
  svgen>=0.6.8
4
4
  websockets
5
5
  psutil
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: runtimepy
3
- Version: 5.6.4
3
+ Version: 5.7.1
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/vkottler/runtimepy
6
6
  Author: Vaughn Kottler
@@ -17,10 +17,10 @@ Classifier: License :: OSI Approved :: MIT License
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: websockets
21
- Requires-Dist: svgen>=0.6.8
22
- Requires-Dist: vcorelib>=3.4.1
23
20
  Requires-Dist: psutil
21
+ Requires-Dist: vcorelib>=3.4.2
22
+ Requires-Dist: svgen>=0.6.8
23
+ Requires-Dist: websockets
24
24
  Requires-Dist: aiofiles
25
25
  Provides-Extra: test
26
26
  Requires-Dist: pylint; extra == "test"
@@ -45,11 +45,11 @@ Requires-Dist: uvloop; (sys_platform != "win32" and sys_platform != "cygwin") an
45
45
  =====================================
46
46
  generator=datazen
47
47
  version=3.1.4
48
- hash=41c5a2511c80b2cbbaee668bb6a75bd2
48
+ hash=8247340c8c4e6982a54b831c311f2c0b
49
49
  =====================================
50
50
  -->
51
51
 
52
- # runtimepy ([5.6.4](https://pypi.org/project/runtimepy/))
52
+ # runtimepy ([5.7.1](https://pypi.org/project/runtimepy/))
53
53
 
54
54
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
55
55
  ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
@@ -61,6 +61,7 @@ runtimepy/data/server_base.yaml
61
61
  runtimepy/data/server_dev.yaml
62
62
  runtimepy/data/tftp_server.yaml
63
63
  runtimepy/data/css/bootstrap_extra.css
64
+ runtimepy/data/css/font.css
64
65
  runtimepy/data/css/main.css
65
66
  runtimepy/data/js/DataConnection.js
66
67
  runtimepy/data/js/JsonConnection.js
@@ -114,6 +115,16 @@ runtimepy/data/schemas/has_factory.yaml
114
115
  runtimepy/data/schemas/has_markdown.yaml
115
116
  runtimepy/data/schemas/has_name.yaml
116
117
  runtimepy/data/schemas/has_request_flag.yaml
118
+ runtimepy/data/static/svg/chip-circle-bootstrap.svg
119
+ runtimepy/data/static/woff2/CascadiaCode-Bold.woff2
120
+ runtimepy/data/static/woff2/CascadiaCode-BoldItalic.woff2
121
+ runtimepy/data/static/woff2/CascadiaCode-Italic.woff2
122
+ runtimepy/data/static/woff2/CascadiaCode-Regular.woff2
123
+ runtimepy/data/static/woff2/CascadiaMono-Bold.woff2
124
+ runtimepy/data/static/woff2/CascadiaMono-BoldItalic.woff2
125
+ runtimepy/data/static/woff2/CascadiaMono-Italic.woff2
126
+ runtimepy/data/static/woff2/CascadiaMono-Regular.woff2
127
+ runtimepy/data/static/woff2/README.md
117
128
  runtimepy/enum/__init__.py
118
129
  runtimepy/enum/registry.py
119
130
  runtimepy/enum/types.py
@@ -1,7 +1,7 @@
1
- websockets
2
- svgen>=0.6.8
3
- vcorelib>=3.4.1
4
1
  psutil
2
+ vcorelib>=3.4.2
3
+ svgen>=0.6.8
4
+ websockets
5
5
  aiofiles
6
6
 
7
7
  [test]
Binary file
File without changes
File without changes