scitex 2.10.3__py3-none-any.whl → 2.11.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. scitex/__init__.py +1 -4
  2. scitex/__version__.py +1 -1
  3. scitex/_install_guide.py +14 -2
  4. scitex/bridge/_figrecipe.py +1 -1
  5. scitex/bridge/_helpers.py +1 -1
  6. scitex/bridge/_plt_vis.py +1 -1
  7. scitex/bridge/_stats_plt.py +1 -1
  8. scitex/bridge/_stats_vis.py +2 -2
  9. scitex/{fig → canvas}/__init__.py +84 -96
  10. scitex/{fig → canvas}/backend/_parser.py +1 -1
  11. scitex/{fig → canvas}/canvas.py +13 -14
  12. scitex/{fts/_fig/_editor → canvas/editor}/_defaults.py +2 -2
  13. scitex/{fig → canvas}/editor/edit/__init__.py +11 -14
  14. scitex/{fig → canvas}/editor/edit/bundle_resolver.py +56 -48
  15. scitex/{fig → canvas}/editor/edit/editor_launcher.py +79 -26
  16. scitex/{fts/_fig/_editor/_cui/_panel_loader.py → canvas/editor/edit/panel_loader.py} +8 -8
  17. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_bbox.py +2 -1
  18. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_core.py +84 -84
  19. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_renderer.py +7 -6
  20. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/static/css/features/canvas.css +2 -2
  21. scitex/{fig → canvas}/editor/flask_editor/static/css/features/panel-grid.css +1 -1
  22. scitex/{fig → canvas}/editor/flask_editor/static/js/core/api.js +3 -4
  23. scitex/{fig → canvas}/editor/flask_editor/static/js/editor/preview.js +5 -5
  24. scitex/{fig → canvas}/editor/flask_editor/templates/_html.py +3 -3
  25. scitex/{fig → canvas}/editor/flask_editor/templates/_scripts.py +10 -10
  26. scitex/{fig → canvas}/editor/flask_editor/templates/_styles.py +3 -3
  27. scitex/{fig → canvas}/io/__init__.py +32 -38
  28. scitex/{fig → canvas}/io/_bundle.py +217 -154
  29. scitex/{fig → canvas}/io/_canvas.py +1 -1
  30. scitex/{fig → canvas}/io/_data.py +1 -1
  31. scitex/{fig → canvas}/io/_export.py +1 -1
  32. scitex/{fig → canvas}/io/_load.py +1 -1
  33. scitex/{fig → canvas}/io/_panel.py +1 -1
  34. scitex/{fig → canvas}/io/_save.py +1 -1
  35. scitex/{fig → canvas}/model/__init__.py +1 -1
  36. scitex/{fig → canvas}/model/_annotations.py +1 -1
  37. scitex/{fig → canvas}/model/_axes.py +1 -1
  38. scitex/{fig → canvas}/model/_figure.py +1 -1
  39. scitex/{fig → canvas}/model/_guides.py +1 -1
  40. scitex/{fig → canvas}/model/_plot.py +1 -1
  41. scitex/{fig → canvas}/model/_styles.py +1 -1
  42. scitex/{fig → canvas}/utils/__init__.py +1 -1
  43. scitex/cli/convert.py +10 -6
  44. scitex/diagram/README.md +7 -7
  45. scitex/io/__init__.py +7 -19
  46. scitex/io/_load.py +15 -19
  47. scitex/io/_load_modules/_canvas.py +2 -2
  48. scitex/io/_load_modules/_con.py +5 -5
  49. scitex/io/_load_modules/_eeg.py +16 -12
  50. scitex/io/_save.py +11 -16
  51. scitex/io/_save_modules/__init__.py +6 -10
  52. scitex/io/_save_modules/_canvas.py +3 -3
  53. scitex/io/_save_modules/_plot_bundle.py +112 -0
  54. scitex/io/_save_modules/{_pltz_stx.py → _plot_scitex.py} +7 -7
  55. scitex/io/_save_modules/_stx_bundle.py +16 -16
  56. scitex/io/bundle/README.md +89 -80
  57. scitex/{fts/_bundle/_FTS.py → io/bundle/_Bundle.py} +197 -95
  58. scitex/io/bundle/__init__.py +67 -35
  59. scitex/{fts/_bundle → io/bundle}/_children.py +32 -40
  60. scitex/io/bundle/_core.py +184 -97
  61. scitex/{fts/_bundle/_dataclasses/_Node.py → io/bundle/_dataclasses/_Spec.py} +29 -23
  62. scitex/{fts/_bundle/_dataclasses/_NodeRefs.py → io/bundle/_dataclasses/_SpecRefs.py} +6 -6
  63. scitex/{fts/_bundle → io/bundle}/_dataclasses/__init__.py +4 -4
  64. scitex/{fts/_bundle → io/bundle}/_loader.py +19 -19
  65. scitex/io/bundle/_manifest.py +99 -0
  66. scitex/{fts/_bundle → io/bundle}/_mpl_helpers.py +119 -28
  67. scitex/io/bundle/_nested.py +113 -100
  68. scitex/{fts/_bundle → io/bundle}/_saver.py +13 -14
  69. scitex/{fts/_bundle → io/bundle}/_storage.py +3 -3
  70. scitex/io/bundle/_types.py +41 -16
  71. scitex/{fts/_bundle → io/bundle}/_validation.py +20 -18
  72. scitex/io/bundle/_zip.py +21 -31
  73. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_backend/_parser.py +1 -1
  74. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Annotations.py +1 -1
  75. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Axes.py +1 -1
  76. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Figure.py +1 -1
  77. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Guides.py +1 -1
  78. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Plot.py +1 -1
  79. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Styles.py +1 -1
  80. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_utils/_plot_layout.py +1 -1
  81. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/__init__.py +1 -1
  82. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/_app.py +1 -1
  83. scitex/{fts/_tables → io/bundle/kinds/_table}/_latex/_export.py +1 -1
  84. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_figure_exporter.py +1 -1
  85. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_table_exporter.py +1 -1
  86. scitex/io/bundle/schemas/__init__.py +30 -0
  87. scitex/parallel/_run.py +5 -4
  88. scitex/path/_find.py +60 -83
  89. scitex/path/_get_module_path.py +23 -21
  90. scitex/path/_get_spath.py +6 -27
  91. scitex/path/_getsize.py +23 -9
  92. scitex/path/_increment_version.py +31 -38
  93. scitex/path/_mk_spath.py +26 -29
  94. scitex/path/_path.py +5 -12
  95. scitex/path/_split.py +27 -15
  96. scitex/path/_this_path.py +23 -9
  97. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +2 -1
  98. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +2 -2
  99. scitex/plt/gallery/_generate.py +76 -50
  100. scitex/plt/io/__init__.py +17 -19
  101. scitex/plt/io/_bundle.py +99 -52
  102. scitex/plt/io/_layered_bundle.py +303 -168
  103. scitex/plt/utils/_csv_column_naming.py +250 -118
  104. scitex/schema/__init__.py +69 -73
  105. scitex/schema/_canvas.py +1 -1
  106. scitex/schema/_stats.py +2 -2
  107. scitex/stats/__init__.py +30 -33
  108. scitex/stats/_schema.py +1 -1
  109. scitex/stats/io/__init__.py +10 -11
  110. scitex/stats/io/_bundle.py +16 -16
  111. {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/METADATA +190 -73
  112. {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/RECORD +237 -360
  113. scitex/fig/editor/_defaults.py +0 -300
  114. scitex/fig/editor/edit/panel_loader.py +0 -232
  115. scitex/fig/editor/flask_editor/_bbox.py +0 -1299
  116. scitex/fig/editor/flask_editor/_core.py +0 -1429
  117. scitex/fig/editor/flask_editor/_renderer.py +0 -813
  118. scitex/fig/editor/flask_editor/static/css/features/canvas.css +0 -176
  119. scitex/fts/README.md +0 -262
  120. scitex/fts/TODO.md +0 -66
  121. scitex/fts/__init__.py +0 -90
  122. scitex/fts/_bundle/README_IN_BUNDLE.md +0 -102
  123. scitex/fts/_bundle/__init__.py +0 -38
  124. scitex/fts/_bundle/_utils/__init__.py +0 -55
  125. scitex/fts/_bundle/_utils/_const.py +0 -26
  126. scitex/fts/_bundle/_utils/_errors.py +0 -73
  127. scitex/fts/_bundle/_utils/_generate.py +0 -21
  128. scitex/fts/_bundle/_utils/_types.py +0 -76
  129. scitex/fts/_bundle/_zipbundle.py +0 -165
  130. scitex/fts/_fig/__init__.py +0 -22
  131. scitex/fts/_fig/_backend/_parser.py +0 -188
  132. scitex/fts/_fig/_editor/__init__.py +0 -14
  133. scitex/fts/_fig/_editor/_cui/__init__.py +0 -33
  134. scitex/fts/_fig/_editor/_cui/_backend_detector.py +0 -39
  135. scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +0 -366
  136. scitex/fts/_fig/_editor/_cui/_editor_launcher.py +0 -175
  137. scitex/fts/_fig/_editor/_cui/_manual_handler.py +0 -52
  138. scitex/fts/_fig/_editor/_cui/_path_resolver.py +0 -66
  139. scitex/fts/_fig/_editor/_gui/__init__.py +0 -11
  140. scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +0 -20
  141. scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +0 -664
  142. scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +0 -79
  143. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +0 -41
  144. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +0 -16
  145. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +0 -85
  146. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +0 -217
  147. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +0 -93
  148. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +0 -57
  149. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +0 -112
  150. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +0 -59
  151. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +0 -212
  152. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +0 -190
  153. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +0 -59
  154. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +0 -45
  155. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +0 -95
  156. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +0 -101
  157. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +0 -138
  158. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +0 -31
  159. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +0 -7
  160. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +0 -56
  161. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +0 -78
  162. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +0 -314
  163. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +0 -107
  164. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +0 -54
  165. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +0 -172
  166. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +0 -258
  167. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +0 -48
  168. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +0 -71
  169. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +0 -288
  170. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +0 -143
  171. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +0 -245
  172. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +0 -992
  173. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +0 -339
  174. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +0 -286
  175. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +0 -371
  176. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +0 -293
  177. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +0 -426
  178. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +0 -152
  179. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +0 -265
  180. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +0 -184
  181. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +0 -57
  182. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +0 -100
  183. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +0 -34
  184. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +0 -124
  185. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +0 -851
  186. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +0 -4932
  187. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +0 -1657
  188. scitex/fts/_fig/_editor/_gui/_flask_editor.py +0 -36
  189. scitex/fts/_fig/_models/_Annotations.py +0 -115
  190. scitex/fts/_fig/_models/_Axes.py +0 -152
  191. scitex/fts/_fig/_models/_Figure.py +0 -138
  192. scitex/fts/_fig/_models/_Plot.py +0 -123
  193. scitex/fts/_fig/_utils/_plot_layout.py +0 -397
  194. scitex/fts/_kinds/_figure/_composite.py +0 -345
  195. scitex/fts/_kinds/_plot/_backend/__init__.py +0 -53
  196. scitex/fts/_kinds/_plot/_backend/_export.py +0 -165
  197. scitex/fts/_kinds/_plot/_backend/_render.py +0 -538
  198. scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +0 -46
  199. scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +0 -82
  200. scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +0 -441
  201. scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +0 -52
  202. scitex/fts/_kinds/_plot/_dataclasses/__init__.py +0 -47
  203. scitex/fts/_kinds/_plot/_models/_Guides.py +0 -104
  204. scitex/fts/_kinds/_plot/_models/_Styles.py +0 -245
  205. scitex/fts/_kinds/_plot/_models/__init__.py +0 -80
  206. scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +0 -156
  207. scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +0 -43
  208. scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +0 -38
  209. scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +0 -36
  210. scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +0 -60
  211. scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +0 -30
  212. scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +0 -61
  213. scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +0 -57
  214. scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +0 -30
  215. scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +0 -121
  216. scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +0 -36
  217. scitex/fts/_kinds/_plot/_utils/__init__.py +0 -129
  218. scitex/fts/_kinds/_plot/_utils/_auto_layout.py +0 -127
  219. scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +0 -111
  220. scitex/fts/_kinds/_plot/_utils/_const_sizes.py +0 -48
  221. scitex/fts/_kinds/_plot/_utils/_convert_coords.py +0 -77
  222. scitex/fts/_kinds/_plot/_utils/_get_template.py +0 -178
  223. scitex/fts/_kinds/_plot/_utils/_normalize.py +0 -73
  224. scitex/fts/_kinds/_plot/_utils/_validate.py +0 -197
  225. scitex/fts/_kinds/_table/_latex/_export.py +0 -279
  226. scitex/fts/_stats/__init__.py +0 -48
  227. scitex/fts/_stats/_dataclasses/_Stats.py +0 -423
  228. scitex/fts/_stats/_dataclasses/__init__.py +0 -48
  229. scitex/fts/_tables/__init__.py +0 -65
  230. scitex/fts/_tables/_latex/__init__.py +0 -93
  231. scitex/fts/_tables/_latex/_editor/__init__.py +0 -11
  232. scitex/fts/_tables/_latex/_editor/_app.py +0 -725
  233. scitex/fts/_tables/_latex/_figure_exporter.py +0 -153
  234. scitex/fts/_tables/_latex/_stats_formatter.py +0 -274
  235. scitex/fts/_tables/_latex/_table_exporter.py +0 -362
  236. scitex/fts/_tables/_latex/_utils.py +0 -369
  237. scitex/fts/_tables/_latex/_validator.py +0 -445
  238. scitex/io/_save_modules/_pltz_bundle.py +0 -356
  239. /scitex/{fig → canvas}/README.md +0 -0
  240. /scitex/{fig → canvas}/backend/__init__.py +0 -0
  241. /scitex/{fig → canvas}/backend/_export.py +0 -0
  242. /scitex/{fig → canvas}/backend/_render.py +0 -0
  243. /scitex/{fig → canvas}/docs/CANVAS_ARCHITECTURE.md +0 -0
  244. /scitex/{fig → canvas}/editor/__init__.py +0 -0
  245. /scitex/{fig → canvas}/editor/_dearpygui_editor.py +0 -0
  246. /scitex/{fig → canvas}/editor/_flask_editor.py +0 -0
  247. /scitex/{fig → canvas}/editor/_mpl_editor.py +0 -0
  248. /scitex/{fig → canvas}/editor/_qt_editor.py +0 -0
  249. /scitex/{fig → canvas}/editor/_tkinter_editor.py +0 -0
  250. /scitex/{fig → canvas}/editor/edit/backend_detector.py +0 -0
  251. /scitex/{fig → canvas}/editor/edit/manual_handler.py +0 -0
  252. /scitex/{fig → canvas}/editor/edit/path_resolver.py +0 -0
  253. /scitex/{fig → canvas}/editor/flask_editor/__init__.py +0 -0
  254. /scitex/{fig → canvas}/editor/flask_editor/_plotter.py +0 -0
  255. /scitex/{fig → canvas}/editor/flask_editor/_utils.py +0 -0
  256. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/reset.css +0 -0
  257. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/typography.css +0 -0
  258. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/variables.css +0 -0
  259. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/buttons.css +0 -0
  260. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/context-menu.css +0 -0
  261. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/dropdown.css +0 -0
  262. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/forms.css +0 -0
  263. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/modal.css +0 -0
  264. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/sections.css +0 -0
  265. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/element-inspector.css +0 -0
  266. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/loading.css +0 -0
  267. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/overlay.css +0 -0
  268. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/selection.css +0 -0
  269. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/statistics.css +0 -0
  270. /scitex/{fig → canvas}/editor/flask_editor/static/css/index.css +0 -0
  271. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/container.css +0 -0
  272. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/controls.css +0 -0
  273. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/preview.css +0 -0
  274. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/axis.js +0 -0
  275. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/basic.js +0 -0
  276. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/distribute.js +0 -0
  277. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/canvas.js +0 -0
  278. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/dragging.js +0 -0
  279. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/resize.js +0 -0
  280. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/selection.js +0 -0
  281. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/state.js +0 -0
  282. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/utils.js +0 -0
  283. /scitex/{fig → canvas}/editor/flask_editor/static/js/dev/element-inspector.js +0 -0
  284. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/bbox.js +0 -0
  285. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/element-drag.js +0 -0
  286. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/overlay.js +0 -0
  287. /scitex/{fig → canvas}/editor/flask_editor/static/js/main.js +0 -0
  288. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/context-menu.js +0 -0
  289. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/keyboard.js +0 -0
  290. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/controls.js +0 -0
  291. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/download.js +0 -0
  292. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/help.js +0 -0
  293. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/theme.js +0 -0
  294. /scitex/{fig → canvas}/editor/flask_editor/templates/__init__.py +0 -0
  295. /scitex/{fig → canvas}/io/_directory.py +0 -0
  296. /scitex/{fig → canvas}/model/_plot_types.py +0 -0
  297. /scitex/{fig → canvas}/utils/_defaults.py +0 -0
  298. /scitex/{fig → canvas}/utils/_validate.py +0 -0
  299. /scitex/{fts/_bundle → io/bundle}/_conversion/__init__.py +0 -0
  300. /scitex/{fts/_bundle → io/bundle}/_conversion/_bundle2dict.py +0 -0
  301. /scitex/{fts/_bundle → io/bundle}/_conversion/_dict2bundle.py +0 -0
  302. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_Axes.py +0 -0
  303. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_BBox.py +0 -0
  304. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_ColumnDef.py +0 -0
  305. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataFormat.py +0 -0
  306. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataInfo.py +0 -0
  307. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataSource.py +0 -0
  308. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_SizeMM.py +0 -0
  309. /scitex/{fts/_bundle → io/bundle}/_extractors/__init__.py +0 -0
  310. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_bar.py +0 -0
  311. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_line.py +0 -0
  312. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_scatter.py +0 -0
  313. /scitex/{fts/_kinds → io/bundle/kinds}/__init__.py +0 -0
  314. /scitex/{fts/_kinds → io/bundle/kinds}/_figure/__init__.py +0 -0
  315. /scitex/{fts/_fig → io/bundle/kinds/_figure}/_composite.py +0 -0
  316. /scitex/{fts/_kinds → io/bundle/kinds}/_plot/__init__.py +0 -0
  317. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/__init__.py +0 -0
  318. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_export.py +0 -0
  319. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_render.py +0 -0
  320. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_ChannelEncoding.py +0 -0
  321. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Encoding.py +0 -0
  322. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Theme.py +0 -0
  323. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_TraceEncoding.py +0 -0
  324. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/__init__.py +0 -0
  325. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/__init__.py +0 -0
  326. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/__init__.py +0 -0
  327. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_bar.py +0 -0
  328. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_box.py +0 -0
  329. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_distribution.py +0 -0
  330. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_errorbar.py +0 -0
  331. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_histogram.py +0 -0
  332. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_image.py +0 -0
  333. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_line.py +0 -0
  334. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_scatter.py +0 -0
  335. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_seaborn.py +0 -0
  336. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_violin.py +0 -0
  337. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/__init__.py +0 -0
  338. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_auto_layout.py +0 -0
  339. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_calc_bounds.py +0 -0
  340. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_const_sizes.py +0 -0
  341. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_convert_coords.py +0 -0
  342. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_get_template.py +0 -0
  343. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_normalize.py +0 -0
  344. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_validate.py +0 -0
  345. /scitex/{fts/_kinds → io/bundle/kinds}/_shape/__init__.py +0 -0
  346. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/__init__.py +0 -0
  347. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/_Stats.py +0 -0
  348. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/__init__.py +0 -0
  349. /scitex/{fts/_kinds → io/bundle/kinds}/_table/__init__.py +0 -0
  350. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/__init__.py +0 -0
  351. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_stats_formatter.py +0 -0
  352. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_utils.py +0 -0
  353. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_validator.py +0 -0
  354. /scitex/{fts/_kinds → io/bundle/kinds}/_text/__init__.py +0 -0
  355. /scitex/{fts/_schemas → io/bundle/schemas}/data_info.schema.json +0 -0
  356. /scitex/{fts/_schemas → io/bundle/schemas}/encoding.schema.json +0 -0
  357. /scitex/{fts/_schemas → io/bundle/schemas}/node.schema.json +0 -0
  358. /scitex/{fts/_schemas → io/bundle/schemas}/render_manifest.schema.json +0 -0
  359. /scitex/{fts/_schemas → io/bundle/schemas}/stats.schema.json +0 -0
  360. /scitex/{fts/_schemas → io/bundle/schemas}/theme.schema.json +0 -0
  361. {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/WHEEL +0 -0
  362. {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/entry_points.txt +0 -0
  363. {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,851 +0,0 @@
1
- #!/usr/bin/env python3
2
- # File: ./src/scitex/vis/editor/flask_editor/templates/html.py
3
- """HTML structure for the Flask editor UI."""
4
-
5
- HTML_BODY = """
6
- <div class="container">
7
- <!-- Global Loading Overlay (visible for both single and multi-panel views) -->
8
- <div id="global-loading-overlay" class="global-loading-overlay" style="display: none;">
9
- <div class="spinner"></div>
10
- <span class="loading-text">Updating...</span>
11
- </div>
12
- <div class="preview">
13
- <!-- Panel Grid View (for multi-panel figz bundles) -->
14
- <div class="panel-grid-section" id="panel-grid-section" style="display: none;">
15
- <div class="panel-grid-header">
16
- <div class="canvas-controls">
17
- <button class="btn btn-secondary btn-sm" id="panel-debug-btn" onclick="togglePanelDebugMode()">Show Hit Regions</button>
18
- <div class="toolbar-separator"></div>
19
- <div class="download-dropdown">
20
- <button class="btn btn-primary btn-sm" onclick="toggleDownloadMenu()" id="download-btn">
21
- ⬇ Download
22
- </button>
23
- <div id="download-menu" class="download-menu">
24
- <a href="/download/png" class="download-item">PNG (300 DPI)</a>
25
- <a href="/download/svg" class="download-item">SVG (Vector)</a>
26
- <a href="/download/pdf" class="download-item">PDF</a>
27
- <div class="download-divider"></div>
28
- <a href="/download/jpeg" class="download-item">JPEG</a>
29
- <a href="/download_figz" class="download-item">FIGZ Bundle</a>
30
- </div>
31
- </div>
32
- <div class="toolbar-separator"></div>
33
- <button class="btn btn-secondary btn-sm" onclick="showShortcutHelp()" title="Keyboard Shortcuts (? or F1)">
34
- ⌨ Shortcuts
35
- </button>
36
- </div>
37
- </div>
38
- <div class="panel-canvas" id="panel-canvas">
39
- <!-- Panels will be rendered here -->
40
- </div>
41
- </div>
42
-
43
- <!-- Single-panel preview (hidden for multi-panel figz bundles) -->
44
- <div class="preview-wrapper" id="preview-wrapper">
45
- <div class="preview-header" id="preview-header" style="display: none;">
46
- <span id="current-panel-name">Panel A</span>
47
- <span id="panel-indicator"></span>
48
- </div>
49
- <div class="preview-container" id="preview-container">
50
- <img id="preview" src="" alt="Figure Preview">
51
- <svg id="hover-overlay" class="hover-overlay"></svg>
52
- <div id="loading-overlay" class="loading-overlay" style="display: none;">
53
- <div class="spinner"></div>
54
- </div>
55
- </div>
56
- <button id="debug-toggle-btn" class="debug-toggle" onclick="toggleDebugMode()">Show Hit Areas</button>
57
- </div>
58
- </div>
59
- <div class="controls">
60
- <div class="controls-header">
61
- <div>
62
- <h1>SciTeX Figure Editor</h1>
63
- <div class="filename">{{ filename }}</div>
64
- {% if panel_path %}<div class="panel-path" id="panel-path-display">Panel: {{ panel_path }}</div>{% endif %}
65
- </div>
66
- <button class="theme-toggle" onclick="toggleTheme()" title="Toggle light/dark mode">
67
- <span id="theme-icon">&#9790;</span>
68
- </button>
69
- </div>
70
-
71
- <div class="controls-body">
72
- <!-- Selected Element Section (Dynamic) -->
73
- <div class="section" id="section-selected" style="display: none;">
74
- <div class="section-header section-toggle" onclick="toggleSection(this)">
75
- <span id="selected-element-title">Selected: None</span>
76
- </div>
77
- <div class="section-content">
78
- <div id="selected-element-info" class="selected-info">
79
- <div class="element-type-badge" id="element-type-badge"></div>
80
- <div class="element-axis-info" id="element-axis-info"></div>
81
- </div>
82
-
83
- <!-- Trace/Line Properties -->
84
- <div id="selected-trace-props" class="element-props" style="display: none;">
85
- <div class="field">
86
- <label>Label</label>
87
- <input type="text" id="sel-trace-label" placeholder="Trace label">
88
- </div>
89
- <div class="field">
90
- <label>Color</label>
91
- <div class="color-field">
92
- <input type="color" id="sel-trace-color" value="#1f77b4">
93
- <input type="text" id="sel-trace-color-text" value="#1f77b4">
94
- </div>
95
- </div>
96
- <div class="field-row">
97
- <div class="field">
98
- <label>Line Width (pt)</label>
99
- <input type="number" id="sel-trace-linewidth" value="1.0" min="0.1" max="5" step="0.1">
100
- </div>
101
- <div class="field">
102
- <label>Line Style</label>
103
- <select id="sel-trace-linestyle">
104
- <option value="-">Solid</option>
105
- <option value="--">Dashed</option>
106
- <option value="-.">Dash-dot</option>
107
- <option value=":">Dotted</option>
108
- </select>
109
- </div>
110
- </div>
111
- <div class="field-row">
112
- <div class="field">
113
- <label>Marker</label>
114
- <select id="sel-trace-marker">
115
- <option value="">None</option>
116
- <option value="o">Circle</option>
117
- <option value="s">Square</option>
118
- <option value="^">Triangle</option>
119
- <option value="D">Diamond</option>
120
- <option value="x">X</option>
121
- <option value="+">Plus</option>
122
- </select>
123
- </div>
124
- <div class="field">
125
- <label>Marker Size</label>
126
- <input type="number" id="sel-trace-markersize" value="4" min="1" max="20" step="0.5">
127
- </div>
128
- </div>
129
- <div class="field">
130
- <label>Alpha (0-1)</label>
131
- <input type="range" id="sel-trace-alpha" min="0" max="1" step="0.1" value="1">
132
- </div>
133
- </div>
134
-
135
- <!-- Scatter Properties -->
136
- <div id="selected-scatter-props" class="element-props" style="display: none;">
137
- <div class="field">
138
- <label>Color</label>
139
- <div class="color-field">
140
- <input type="color" id="sel-scatter-color" value="#1f77b4">
141
- <input type="text" id="sel-scatter-color-text" value="#1f77b4">
142
- </div>
143
- </div>
144
- <div class="field-row">
145
- <div class="field">
146
- <label>Marker Size</label>
147
- <input type="number" id="sel-scatter-size" value="20" min="1" max="200" step="1">
148
- </div>
149
- <div class="field">
150
- <label>Marker</label>
151
- <select id="sel-scatter-marker">
152
- <option value="o">Circle</option>
153
- <option value="s">Square</option>
154
- <option value="^">Triangle</option>
155
- <option value="D">Diamond</option>
156
- <option value="x">X</option>
157
- </select>
158
- </div>
159
- </div>
160
- <div class="field">
161
- <label>Alpha (0-1)</label>
162
- <input type="range" id="sel-scatter-alpha" min="0" max="1" step="0.1" value="0.7">
163
- </div>
164
- <div class="field">
165
- <label>Edge Color</label>
166
- <div class="color-field">
167
- <input type="color" id="sel-scatter-edgecolor" value="#000000">
168
- <input type="text" id="sel-scatter-edgecolor-text" value="#000000">
169
- </div>
170
- </div>
171
- </div>
172
-
173
- <!-- Fill Properties -->
174
- <div id="selected-fill-props" class="element-props" style="display: none;">
175
- <div class="field">
176
- <label>Fill Color</label>
177
- <div class="color-field">
178
- <input type="color" id="sel-fill-color" value="#1f77b4">
179
- <input type="text" id="sel-fill-color-text" value="#1f77b4">
180
- </div>
181
- </div>
182
- <div class="field">
183
- <label>Alpha (0-1)</label>
184
- <input type="range" id="sel-fill-alpha" min="0" max="1" step="0.05" value="0.3">
185
- </div>
186
- </div>
187
-
188
- <!-- Bar Properties -->
189
- <div id="selected-bar-props" class="element-props" style="display: none;">
190
- <div class="field">
191
- <label>Face Color</label>
192
- <div class="color-field">
193
- <input type="color" id="sel-bar-facecolor" value="#1f77b4">
194
- <input type="text" id="sel-bar-facecolor-text" value="#1f77b4">
195
- </div>
196
- </div>
197
- <div class="field">
198
- <label>Edge Color</label>
199
- <div class="color-field">
200
- <input type="color" id="sel-bar-edgecolor" value="#000000">
201
- <input type="text" id="sel-bar-edgecolor-text" value="#000000">
202
- </div>
203
- </div>
204
- <div class="field">
205
- <label>Alpha (0-1)</label>
206
- <input type="range" id="sel-bar-alpha" min="0" max="1" step="0.1" value="1">
207
- </div>
208
- </div>
209
-
210
- <!-- Label/Text Properties -->
211
- <div id="selected-label-props" class="element-props" style="display: none;">
212
- <div class="field">
213
- <label>Text</label>
214
- <input type="text" id="sel-label-text" placeholder="Label text">
215
- </div>
216
- <div class="field-row">
217
- <div class="field">
218
- <label>Font Size (pt)</label>
219
- <input type="number" id="sel-label-fontsize" value="7" min="4" max="24" step="1">
220
- </div>
221
- <div class="field">
222
- <label>Font Weight</label>
223
- <select id="sel-label-fontweight">
224
- <option value="normal">Normal</option>
225
- <option value="bold">Bold</option>
226
- </select>
227
- </div>
228
- </div>
229
- <div class="field">
230
- <label>Color</label>
231
- <div class="color-field">
232
- <input type="color" id="sel-label-color" value="#000000">
233
- <input type="text" id="sel-label-color-text" value="#000000">
234
- </div>
235
- </div>
236
- </div>
237
-
238
- <!-- Panel Properties -->
239
- <div id="selected-panel-props" class="element-props" style="display: none;">
240
- <div class="field">
241
- <label>Panel Title</label>
242
- <input type="text" id="sel-panel-title" placeholder="Panel title">
243
- </div>
244
- <div class="field-row">
245
- <div class="field">
246
- <label>X Label</label>
247
- <input type="text" id="sel-panel-xlabel" placeholder="X axis">
248
- </div>
249
- <div class="field">
250
- <label>Y Label</label>
251
- <input type="text" id="sel-panel-ylabel" placeholder="Y axis">
252
- </div>
253
- </div>
254
- <div class="field">
255
- <label>Background Color</label>
256
- <div class="color-field">
257
- <input type="color" id="sel-panel-facecolor" value="#ffffff">
258
- <input type="text" id="sel-panel-facecolor-text" value="#ffffff">
259
- </div>
260
- </div>
261
- <label class="checkbox-field">
262
- <input type="checkbox" id="sel-panel-transparent" checked>
263
- <span>Transparent</span>
264
- </label>
265
- <label class="checkbox-field">
266
- <input type="checkbox" id="sel-panel-grid">
267
- <span>Show Grid</span>
268
- </label>
269
- </div>
270
-
271
- <!-- X-Axis Properties -->
272
- <div id="selected-xaxis-props" class="element-props" style="display: none;">
273
- <div class="field-row">
274
- <div class="field">
275
- <label>Tick Font Size (pt)</label>
276
- <input type="number" id="sel-xaxis-fontsize" value="7" min="4" max="16" step="1">
277
- </div>
278
- <div class="field">
279
- <label>Label Font Size (pt)</label>
280
- <input type="number" id="sel-xaxis-label-fontsize" value="7" min="4" max="16" step="1">
281
- </div>
282
- </div>
283
- <div class="field-row">
284
- <div class="field">
285
- <label>Tick Direction</label>
286
- <select id="sel-xaxis-direction">
287
- <option value="out">Out</option>
288
- <option value="in">In</option>
289
- <option value="inout">Both</option>
290
- </select>
291
- </div>
292
- <div class="field">
293
- <label>N Ticks</label>
294
- <input type="number" id="sel-xaxis-nticks" value="5" min="2" max="15" step="1">
295
- </div>
296
- </div>
297
- <label class="checkbox-field">
298
- <input type="checkbox" id="sel-xaxis-hide-ticks">
299
- <span>Hide Ticks</span>
300
- </label>
301
- <label class="checkbox-field">
302
- <input type="checkbox" id="sel-xaxis-hide-label">
303
- <span>Hide Label</span>
304
- </label>
305
- <label class="checkbox-field">
306
- <input type="checkbox" id="sel-xaxis-hide-spine">
307
- <span>Hide Spine</span>
308
- </label>
309
- </div>
310
-
311
- <!-- Y-Axis Properties -->
312
- <div id="selected-yaxis-props" class="element-props" style="display: none;">
313
- <div class="field-row">
314
- <div class="field">
315
- <label>Tick Font Size (pt)</label>
316
- <input type="number" id="sel-yaxis-fontsize" value="7" min="4" max="16" step="1">
317
- </div>
318
- <div class="field">
319
- <label>Label Font Size (pt)</label>
320
- <input type="number" id="sel-yaxis-label-fontsize" value="7" min="4" max="16" step="1">
321
- </div>
322
- </div>
323
- <div class="field-row">
324
- <div class="field">
325
- <label>Tick Direction</label>
326
- <select id="sel-yaxis-direction">
327
- <option value="out">Out</option>
328
- <option value="in">In</option>
329
- <option value="inout">Both</option>
330
- </select>
331
- </div>
332
- <div class="field">
333
- <label>N Ticks</label>
334
- <input type="number" id="sel-yaxis-nticks" value="5" min="2" max="15" step="1">
335
- </div>
336
- </div>
337
- <label class="checkbox-field">
338
- <input type="checkbox" id="sel-yaxis-hide-ticks">
339
- <span>Hide Ticks</span>
340
- </label>
341
- <label class="checkbox-field">
342
- <input type="checkbox" id="sel-yaxis-hide-label">
343
- <span>Hide Label</span>
344
- </label>
345
- <label class="checkbox-field">
346
- <input type="checkbox" id="sel-yaxis-hide-spine">
347
- <span>Hide Spine</span>
348
- </label>
349
- </div>
350
-
351
- <!-- Statistics (for data elements) -->
352
- <div id="selected-stats" class="element-stats" style="display: none;">
353
- <div class="stats-header">Statistics</div>
354
- <div class="stats-grid">
355
- <div class="stat-item">
356
- <span class="stat-label">N points</span>
357
- <span class="stat-value" id="stat-n">-</span>
358
- </div>
359
- <div class="stat-item">
360
- <span class="stat-label">Mean</span>
361
- <span class="stat-value" id="stat-mean">-</span>
362
- </div>
363
- <div class="stat-item">
364
- <span class="stat-label">Std</span>
365
- <span class="stat-value" id="stat-std">-</span>
366
- </div>
367
- <div class="stat-item">
368
- <span class="stat-label">Min</span>
369
- <span class="stat-value" id="stat-min">-</span>
370
- </div>
371
- <div class="stat-item">
372
- <span class="stat-label">Max</span>
373
- <span class="stat-value" id="stat-max">-</span>
374
- </div>
375
- <div class="stat-item">
376
- <span class="stat-label">Range</span>
377
- <span class="stat-value" id="stat-range">-</span>
378
- </div>
379
- </div>
380
- </div>
381
-
382
- <button class="btn btn-primary" onclick="applySelectedElementChanges()" style="margin-top: 10px;">Apply Changes</button>
383
- </div>
384
- </div>
385
-
386
- <!-- Dimensions Section (General - moved higher) -->
387
- <div class="section" id="section-dimensions">
388
- <div class="section-header section-toggle collapsed" onclick="toggleSection(this)">Dimensions</div>
389
- <div class="section-content collapsed">
390
- <div class="field" style="margin-bottom: 8px;">
391
- <label>Unit</label>
392
- <div class="unit-toggle">
393
- <button class="unit-btn active" id="unit-mm" onclick="setDimensionUnit('mm')">mm</button>
394
- <button class="unit-btn" id="unit-inch" onclick="setDimensionUnit('inch')">inch</button>
395
- </div>
396
- </div>
397
- <div class="field-row">
398
- <div class="field">
399
- <label id="fig_width_label">Width (mm)</label>
400
- <input type="number" id="fig_width" value="80" min="10" max="300" step="1">
401
- </div>
402
- <div class="field">
403
- <label id="fig_height_label">Height (mm)</label>
404
- <input type="number" id="fig_height" value="68" min="10" max="300" step="1">
405
- </div>
406
- </div>
407
- <div class="field">
408
- <label>DPI</label>
409
- <input type="number" id="dpi" value="300" min="72" max="600" step="1">
410
- </div>
411
- </div>
412
- </div>
413
-
414
- <!-- Style Section (General - moved higher) -->
415
- <div class="section" id="section-style">
416
- <div class="section-header section-toggle collapsed" onclick="toggleSection(this)">Style</div>
417
- <div class="section-content collapsed">
418
- <label class="checkbox-field">
419
- <input type="checkbox" id="grid">
420
- <span>Show Grid</span>
421
- </label>
422
- <div class="field">
423
- <label>Label Size (pt)</label>
424
- <input type="number" id="axis_fontsize" value="7" min="4" max="16" step="1">
425
- </div>
426
- <div class="field">
427
- <label>Background</label>
428
- <div class="bg-toggle">
429
- <button class="bg-btn" id="bg-white" onclick="setBackgroundType('white')" title="White background">
430
- <span class="bg-preview white"></span>
431
- <span>White</span>
432
- </button>
433
- <button class="bg-btn active" id="bg-transparent" onclick="setBackgroundType('transparent')" title="Transparent background">
434
- <span class="bg-preview transparent"></span>
435
- <span>Transparent</span>
436
- </button>
437
- <button class="bg-btn" id="bg-black" onclick="setBackgroundType('black')" title="Black background">
438
- <span class="bg-preview black"></span>
439
- <span>Black</span>
440
- </button>
441
- </div>
442
- </div>
443
- <input type="hidden" id="facecolor" value="#ffffff">
444
- <input type="hidden" id="transparent" value="true">
445
- </div>
446
- </div>
447
-
448
- <!-- Title, Labels & Caption Section -->
449
- <div class="section" id="section-labels">
450
- <div class="section-header section-toggle collapsed" onclick="toggleSection(this)">Title, Labels & Caption</div>
451
- <div class="section-content collapsed">
452
- <p class="section-hint">For multi-panel figures, select a panel to edit its labels.</p>
453
-
454
- <!-- Title row in table style -->
455
- <table class="props-table" style="width: 100%; border-collapse: collapse; margin-bottom: 8px;">
456
- <tr>
457
- <td style="width: 70px; padding: 4px 0;"><label>Title</label></td>
458
- <td style="padding: 4px 0;">
459
- <input type="text" id="title" placeholder="Figure title" style="width: 100%;">
460
- </td>
461
- <td style="width: 50px; padding: 4px 0; text-align: right;">
462
- <input type="number" id="title_fontsize" value="8" min="4" max="24" step="1" style="width: 45px;" title="Font size (pt)">
463
- </td>
464
- <td style="width: 24px; padding: 4px 0;">
465
- <label class="checkbox-field" style="margin: 0;" title="Show title">
466
- <input type="checkbox" id="show_title" checked>
467
- </label>
468
- </td>
469
- </tr>
470
- <tr>
471
- <td style="padding: 4px 0;"><label>X Label</label></td>
472
- <td style="padding: 4px 0;">
473
- <input type="text" id="xlabel" placeholder="X axis label" style="width: 100%;">
474
- </td>
475
- <td colspan="2"></td>
476
- </tr>
477
- <tr>
478
- <td style="padding: 4px 0;"><label>Y Label</label></td>
479
- <td style="padding: 4px 0;">
480
- <input type="text" id="ylabel" placeholder="Y axis label" style="width: 100%;">
481
- </td>
482
- <td colspan="2"></td>
483
- </tr>
484
- <tr>
485
- <td style="padding: 4px 0; vertical-align: top;"><label>Caption</label></td>
486
- <td style="padding: 4px 0;">
487
- <textarea id="caption" rows="2" placeholder="Figure caption..." style="width: 100%; padding: 6px; border: 1px solid var(--border-muted); border-radius: 4px; background: var(--bg-surface); color: var(--text-primary); font-size: 0.85em; resize: vertical;"></textarea>
488
- </td>
489
- <td style="padding: 4px 0; text-align: right; vertical-align: top;">
490
- <input type="number" id="caption_fontsize" value="7" min="4" max="16" step="1" style="width: 45px;" title="Font size (pt)">
491
- </td>
492
- <td style="padding: 4px 0; vertical-align: top;">
493
- <label class="checkbox-field" style="margin: 0;" title="Show caption">
494
- <input type="checkbox" id="show_caption">
495
- </label>
496
- </td>
497
- </tr>
498
- </table>
499
- </div>
500
- </div>
501
-
502
- <!-- Axis & Ticks Section (merged with Axis Limits) -->
503
- <div class="section" id="section-ticks">
504
- <div class="section-header section-toggle collapsed" onclick="toggleSection(this)">Axis & Ticks</div>
505
- <div class="section-content collapsed">
506
- <!-- Axis Limits (merged from separate section) -->
507
- <div class="subsection-header">Limits</div>
508
- <div class="field-row">
509
- <div class="field">
510
- <label>X Range</label>
511
- <div class="field-row" style="gap: 4px; margin-top: 4px;">
512
- <input type="number" id="xmin" step="any" placeholder="Min">
513
- <input type="number" id="xmax" step="any" placeholder="Max">
514
- </div>
515
- </div>
516
- <div class="field">
517
- <label>Y Range</label>
518
- <div class="field-row" style="gap: 4px; margin-top: 4px;">
519
- <input type="number" id="ymin" step="any" placeholder="Min">
520
- <input type="number" id="ymax" step="any" placeholder="Max">
521
- </div>
522
- </div>
523
- </div>
524
-
525
- <!-- Axis Tabs -->
526
- <div class="subsection-header" style="margin-top: 12px;">Tick Settings</div>
527
- <div class="axis-tabs">
528
- <button class="axis-tab active" onclick="switchAxisTab('x')" id="axis-tab-x">X</button>
529
- <button class="axis-tab" onclick="switchAxisTab('y')" id="axis-tab-y">Y</button>
530
- <button class="axis-tab" onclick="switchAxisTab('z')" id="axis-tab-z">Z</button>
531
- </div>
532
-
533
- <!-- X Axis Panel -->
534
- <div class="axis-panel" id="axis-panel-x">
535
- <div class="subsection-header">Bottom (Primary)</div>
536
- <div class="field-row">
537
- <div class="field">
538
- <label class="checkbox-field">
539
- <input type="checkbox" id="hide_x_ticks">
540
- <span>Hide</span>
541
- </label>
542
- </div>
543
- <div class="field">
544
- <label>N Ticks</label>
545
- <input type="number" id="x_n_ticks" value="4" min="2" max="10" step="1">
546
- </div>
547
- </div>
548
- <div class="field-row">
549
- <div class="field">
550
- <label>Font Size (pt)</label>
551
- <input type="number" id="x_tick_fontsize" value="7" min="4" max="16" step="1">
552
- </div>
553
- <div class="field">
554
- <label>Direction</label>
555
- <select id="x_tick_direction">
556
- <option value="out">Out</option>
557
- <option value="in">In</option>
558
- <option value="inout">Both</option>
559
- </select>
560
- </div>
561
- </div>
562
- <div class="field-row">
563
- <div class="field">
564
- <label>Length (mm)</label>
565
- <input type="number" id="x_tick_length" value="0.8" min="0.1" max="3" step="0.1">
566
- </div>
567
- <div class="field">
568
- <label>Width (mm)</label>
569
- <input type="number" id="x_tick_width" value="0.2" min="0.05" max="1" step="0.05">
570
- </div>
571
- </div>
572
- <div class="field-row">
573
- <div class="field">
574
- <label class="checkbox-field">
575
- <input type="checkbox" id="hide_bottom_spine" unchecked>
576
- <span>Hide Spine</span>
577
- </label>
578
- </div>
579
- </div>
580
-
581
- <div class="subsection-header" style="margin-top: 12px;">Top (Secondary)</div>
582
- <div class="field-row">
583
- <div class="field">
584
- <label class="checkbox-field">
585
- <input type="checkbox" id="show_x_top" unchecked>
586
- <span>Show</span>
587
- </label>
588
- </div>
589
- <div class="field">
590
- <label class="checkbox-field">
591
- <input type="checkbox" id="x_top_mirror">
592
- <span>Mirror</span>
593
- </label>
594
- </div>
595
- </div>
596
- <div class="field-row">
597
- <div class="field">
598
- <label class="checkbox-field">
599
- <input type="checkbox" id="hide_top_spine" checked>
600
- <span>Hide Spine</span>
601
- </label>
602
- </div>
603
- </div>
604
- </div>
605
-
606
- <!-- Y Axis Panel -->
607
- <div class="axis-panel" id="axis-panel-y" style="display: none;">
608
- <div class="subsection-header">Left (Primary)</div>
609
- <div class="field-row">
610
- <div class="field">
611
- <label class="checkbox-field">
612
- <input type="checkbox" id="hide_y_ticks">
613
- <span>Hide</span>
614
- </label>
615
- </div>
616
- <div class="field">
617
- <label>N Ticks</label>
618
- <input type="number" id="y_n_ticks" value="4" min="2" max="10" step="1">
619
- </div>
620
- </div>
621
- <div class="field-row">
622
- <div class="field">
623
- <label>Font Size (pt)</label>
624
- <input type="number" id="y_tick_fontsize" value="7" min="4" max="16" step="1">
625
- </div>
626
- <div class="field">
627
- <label>Direction</label>
628
- <select id="y_tick_direction">
629
- <option value="out">Out</option>
630
- <option value="in">In</option>
631
- <option value="inout">Both</option>
632
- </select>
633
- </div>
634
- </div>
635
- <div class="field-row">
636
- <div class="field">
637
- <label>Length (mm)</label>
638
- <input type="number" id="y_tick_length" value="0.8" min="0.1" max="3" step="0.1">
639
- </div>
640
- <div class="field">
641
- <label>Width (mm)</label>
642
- <input type="number" id="y_tick_width" value="0.2" min="0.05" max="1" step="0.05">
643
- </div>
644
- </div>
645
- <div class="field-row">
646
- <div class="field">
647
- <label class="checkbox-field">
648
- <input type="checkbox" id="hide_left_spine" unchecked>
649
- <span>Hide Spine</span>
650
- </label>
651
- </div>
652
- </div>
653
-
654
- <div class="subsection-header" style="margin-top: 12px;">Right (Secondary)</div>
655
- <div class="field-row">
656
- <div class="field">
657
- <label class="checkbox-field">
658
- <input type="checkbox" id="show_y_right" unchecked>
659
- <span>Show</span>
660
- </label>
661
- </div>
662
- <div class="field">
663
- <label class="checkbox-field">
664
- <input type="checkbox" id="y_right_mirror">
665
- <span>Mirror</span>
666
- </label>
667
- </div>
668
- </div>
669
- <div class="field-row">
670
- <div class="field">
671
- <label class="checkbox-field">
672
- <input type="checkbox" id="hide_right_spine" checked>
673
- <span>Hide Spine</span>
674
- </label>
675
- </div>
676
- </div>
677
- </div>
678
-
679
- <!-- Z Axis Panel (for 3D plots) -->
680
- <div class="axis-panel" id="axis-panel-z" style="display: none;">
681
- <div class="subsection-header">Z Axis (3D)</div>
682
- <div class="field-row">
683
- <div class="field">
684
- <label class="checkbox-field">
685
- <input type="checkbox" id="hide_z_ticks">
686
- <span>Hide</span>
687
- </label>
688
- </div>
689
- <div class="field">
690
- <label>N Ticks</label>
691
- <input type="number" id="z_n_ticks" value="4" min="2" max="10" step="1">
692
- </div>
693
- </div>
694
- <div class="field-row">
695
- <div class="field">
696
- <label>Font Size (pt)</label>
697
- <input type="number" id="z_tick_fontsize" value="7" min="4" max="16" step="1">
698
- </div>
699
- <div class="field">
700
- <label>Direction</label>
701
- <select id="z_tick_direction">
702
- <option value="out">Out</option>
703
- <option value="in">In</option>
704
- <option value="inout">Both</option>
705
- </select>
706
- </div>
707
- </div>
708
- <p class="section-hint">Z axis settings apply to 3D plots only.</p>
709
- </div>
710
-
711
- <!-- Common Settings -->
712
- <div class="subsection-header" style="margin-top: 12px;">Common</div>
713
- <div class="field">
714
- <label>Spine Width (mm)</label>
715
- <input type="number" id="axis_width" value="0.2" min="0.05" max="1" step="0.05">
716
- </div>
717
- </div>
718
- </div>
719
-
720
- <!-- Traces Section (Simplified for beta) -->
721
- <div class="section" id="section-traces">
722
- <div class="section-header section-toggle collapsed" onclick="toggleSection(this)">Traces</div>
723
- <div class="section-content collapsed">
724
- <p class="section-hint">Click on a trace in the preview to edit its properties.</p>
725
- <div class="traces-list" id="traces-list">
726
- <!-- Dynamically populated -->
727
- </div>
728
- </div>
729
- </div>
730
-
731
- <!-- Legend Section (Enhanced) -->
732
- <div class="section" id="section-legend">
733
- <div class="section-header section-toggle collapsed" onclick="toggleSection(this)">Legend</div>
734
- <div class="section-content collapsed">
735
- <label class="checkbox-field">
736
- <input type="checkbox" id="legend_visible" checked>
737
- <span>Show Legend</span>
738
- </label>
739
- <div class="field-row">
740
- <div class="field">
741
- <label>Position</label>
742
- <select id="legend_loc" onchange="toggleCustomLegendPosition()">
743
- <option value="best">Best (auto)</option>
744
- <option value="upper right">Upper Right</option>
745
- <option value="upper left">Upper Left</option>
746
- <option value="lower right">Lower Right</option>
747
- <option value="lower left">Lower Left</option>
748
- <option value="center right">Center Right</option>
749
- <option value="center left">Center Left</option>
750
- <option value="upper center">Upper Center</option>
751
- <option value="lower center">Lower Center</option>
752
- <option value="center">Center</option>
753
- <option value="custom">Custom...</option>
754
- </select>
755
- </div>
756
- <div class="field">
757
- <label>Columns</label>
758
- <input type="number" id="legend_ncols" value="1" min="1" max="5" step="1" title="Number of columns">
759
- </div>
760
- </div>
761
- <div id="custom-legend-coords" class="field-row" style="display: none; margin-top: 8px;">
762
- <div class="field">
763
- <label>X (0-1)</label>
764
- <input type="number" id="legend_x" value="0.95" min="0" max="1.5" step="0.01" title="X coordinate in axes fraction">
765
- </div>
766
- <div class="field">
767
- <label>Y (0-1)</label>
768
- <input type="number" id="legend_y" value="0.95" min="-0.5" max="1.5" step="0.01" title="Y coordinate in axes fraction">
769
- </div>
770
- </div>
771
- <div class="field-row" style="margin-top: 8px;">
772
- <div class="field">
773
- <label class="checkbox-field">
774
- <input type="checkbox" id="legend_frameon">
775
- <span>Show Frame</span>
776
- </label>
777
- </div>
778
- <div class="field">
779
- <label>Font Size (pt)</label>
780
- <input type="number" id="legend_fontsize" value="6" min="4" max="16" step="1">
781
- </div>
782
- </div>
783
- </div>
784
- </div>
785
-
786
- <!-- Statistics Section -->
787
- <div class="section" id="section-statistics">
788
- <div class="section-header section-toggle" onclick="toggleSection(this)">Statistics</div>
789
- <div class="section-content">
790
- <div id="stats-container">
791
- <div class="stats-loading">Loading statistics...</div>
792
- </div>
793
- <button class="btn btn-secondary" onclick="refreshStats()" style="margin-top: 8px;">Refresh Stats</button>
794
- </div>
795
- </div>
796
-
797
- <!-- Annotations Section -->
798
- <div class="section" id="section-annotations">
799
- <div class="section-header section-toggle collapsed" onclick="toggleSection(this)">Annotations</div>
800
- <div class="section-content collapsed">
801
- <div class="field">
802
- <label>Text</label>
803
- <input type="text" id="annot-text" placeholder="Annotation text">
804
- </div>
805
- <div class="field-row">
806
- <div class="field">
807
- <label>X (0-1)</label>
808
- <input type="number" id="annot-x" value="0.5" min="0" max="1" step="0.05">
809
- </div>
810
- <div class="field">
811
- <label>Y (0-1)</label>
812
- <input type="number" id="annot-y" value="0.5" min="0" max="1" step="0.05">
813
- </div>
814
- <div class="field">
815
- <label>Size</label>
816
- <input type="number" id="annot-size" value="8" min="4" max="24" step="1">
817
- </div>
818
- </div>
819
- <button class="btn btn-secondary" onclick="addAnnotation()">Add Annotation</button>
820
- <div class="annotations-list" id="annotations-list"></div>
821
- </div>
822
- </div>
823
-
824
- <!-- Actions Section -->
825
- <div class="section">
826
- <div class="section-header">Actions</div>
827
- <div class="field-row" style="align-items: center; margin-bottom: 8px;">
828
- <div class="field" style="flex: 1;">
829
- <label>Auto-Update</label>
830
- <select id="auto_update_interval" onchange="setAutoUpdateInterval()">
831
- <option value="0">Off</option>
832
- <option value="500">Hot (0.5s)</option>
833
- <option value="1000">Fast (1s)</option>
834
- <option value="2000" selected>Normal (2s)</option>
835
- <option value="5000">Slow (5s)</option>
836
- </select>
837
- </div>
838
- <button class="btn btn-cta" onclick="updatePreview(true)" style="flex: 0; margin-left: 8px;">Update Now</button>
839
- </div>
840
- <button class="btn btn-primary" onclick="saveManual()" title="Ctrl+S">Save</button>
841
- <button class="btn btn-secondary" onclick="resetOverrides()" title="Reset to original values">Reset</button>
842
- </div>
843
-
844
- <div class="status-bar" id="status">Ready</div>
845
- </div>
846
- </div>
847
- </div>
848
- """
849
-
850
-
851
- # EOF