scitex 2.10.2__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.2.dist-info → scitex-2.11.0.dist-info}/METADATA +191 -72
  112. {scitex-2.10.2.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.2.dist-info → scitex-2.11.0.dist-info}/WHEEL +0 -0
  362. {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/entry_points.txt +0 -0
  363. {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,79 +0,0 @@
1
- #!/usr/bin/env python3
2
- # File: ./src/scitex/vis/editor/flask_editor/utils.py
3
- """Port management utilities for Flask editor."""
4
-
5
- import socket
6
- import subprocess
7
- import sys
8
-
9
-
10
- def find_available_port(start_port: int = 5050, max_attempts: int = 10) -> int:
11
- """Find an available port, starting from start_port."""
12
- for offset in range(max_attempts):
13
- port = start_port + offset
14
- try:
15
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
16
- s.bind(("127.0.0.1", port))
17
- return port
18
- except OSError:
19
- continue
20
-
21
- raise RuntimeError(
22
- f"Could not find available port in range {start_port}-{start_port + max_attempts}"
23
- )
24
-
25
-
26
- def kill_process_on_port(port: int) -> bool:
27
- """Try to kill process using the specified port. Returns True if successful."""
28
- try:
29
- if sys.platform == "win32":
30
- # Windows: netstat + taskkill
31
- result = subprocess.run(
32
- f"netstat -ano | findstr :{port}",
33
- shell=True,
34
- capture_output=True,
35
- text=True,
36
- )
37
- if result.stdout:
38
- for line in result.stdout.strip().split("\n"):
39
- parts = line.split()
40
- if len(parts) >= 5:
41
- pid = parts[-1]
42
- subprocess.run(
43
- f"taskkill /F /PID {pid}", shell=True, capture_output=True
44
- )
45
- return True
46
- else:
47
- # Linux/Mac: fuser or lsof
48
- result = subprocess.run(
49
- ["fuser", "-k", f"{port}/tcp"], capture_output=True, text=True
50
- )
51
- if result.returncode == 0:
52
- return True
53
-
54
- # Fallback to lsof
55
- result = subprocess.run(
56
- ["lsof", "-t", f"-i:{port}"], capture_output=True, text=True
57
- )
58
- if result.stdout:
59
- for pid in result.stdout.strip().split("\n"):
60
- if pid:
61
- subprocess.run(["kill", "-9", pid], capture_output=True)
62
- return True
63
- except Exception:
64
- pass
65
-
66
- return False
67
-
68
-
69
- def check_port_available(port: int) -> bool:
70
- """Check if a port is available."""
71
- try:
72
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
73
- s.bind(("127.0.0.1", port))
74
- return True
75
- except OSError:
76
- return False
77
-
78
-
79
- # EOF
@@ -1,41 +0,0 @@
1
- /* =============================================================================
2
- * Base Styles & Reset
3
- * ============================================================================= */
4
- * {
5
- box-sizing: border-box;
6
- margin: 0;
7
- padding: 0;
8
- }
9
-
10
- body {
11
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
12
- background: var(--workspace-bg-primary);
13
- color: var(--text-primary);
14
- transition: background 0.3s, color 0.3s;
15
- }
16
-
17
- /* Scrollbar Styling */
18
- .controls::-webkit-scrollbar,
19
- .traces-list::-webkit-scrollbar,
20
- .annotations-list::-webkit-scrollbar {
21
- width: 6px;
22
- }
23
-
24
- .controls::-webkit-scrollbar-track,
25
- .traces-list::-webkit-scrollbar-track,
26
- .annotations-list::-webkit-scrollbar-track {
27
- background: var(--bg-muted);
28
- }
29
-
30
- .controls::-webkit-scrollbar-thumb,
31
- .traces-list::-webkit-scrollbar-thumb,
32
- .annotations-list::-webkit-scrollbar-thumb {
33
- background: var(--border-default);
34
- border-radius: 3px;
35
- }
36
-
37
- .controls::-webkit-scrollbar-thumb:hover,
38
- .traces-list::-webkit-scrollbar-thumb:hover,
39
- .annotations-list::-webkit-scrollbar-thumb:hover {
40
- background: var(--text-muted);
41
- }
@@ -1,16 +0,0 @@
1
- /* =============================================================================
2
- * Typography
3
- * ============================================================================= */
4
- .filename {
5
- font-size: 0.8em;
6
- color: var(--text-muted);
7
- margin-top: 4px;
8
- word-break: break-all;
9
- }
10
-
11
- .panel-path {
12
- font-size: 0.75em;
13
- color: var(--text-muted);
14
- margin-top: 2px;
15
- opacity: 0.8;
16
- }
@@ -1,85 +0,0 @@
1
- /* =============================================================================
2
- * SciTeX Color System - Based on scitex-cloud/static/shared/css
3
- * ============================================================================= */
4
- :root, [data-theme="light"] {
5
- /* Brand colors (light mode) */
6
- --scitex-01: #1a2a40;
7
- --scitex-02: #34495e;
8
- --scitex-03: #506b7a;
9
- --scitex-04: #6c8ba0;
10
- --scitex-05: #8fa4b0;
11
- --scitex-06: #b5c7d1;
12
- --scitex-07: #d4e1e8;
13
- --white: #fafbfc;
14
- --gray-subtle: #f6f8fa;
15
-
16
- /* Semantic tokens */
17
- --text-primary: var(--scitex-01);
18
- --text-secondary: var(--scitex-02);
19
- --text-muted: var(--scitex-04);
20
- --text-inverse: var(--white);
21
-
22
- --bg-page: #fefefe;
23
- --bg-surface: var(--white);
24
- --bg-muted: var(--gray-subtle);
25
-
26
- --border-default: var(--scitex-05);
27
- --border-muted: var(--scitex-06);
28
-
29
- /* Workspace colors */
30
- --workspace-bg-primary: #f8f9fa;
31
- --workspace-bg-secondary: #f3f4f6;
32
- --workspace-bg-tertiary: #ebedef;
33
- --workspace-bg-elevated: #ffffff;
34
- --workspace-border-subtle: #e0e4e8;
35
- --workspace-border-default: #b5c7d1;
36
-
37
- /* Status */
38
- --status-success: #4a9b7e;
39
- --status-warning: #b8956a;
40
- --status-error: #a67373;
41
-
42
- /* CTA */
43
- --color-cta: #3b82f6;
44
- --color-cta-hover: #2563eb;
45
-
46
- /* Preview background (checkered for transparency) */
47
- --preview-bg: linear-gradient(45deg, #e0e0e0 25%, transparent 25%),
48
- linear-gradient(-45deg, #e0e0e0 25%, transparent 25%),
49
- linear-gradient(45deg, transparent 75%, #e0e0e0 75%),
50
- linear-gradient(-45deg, transparent 75%, #e0e0e0 75%);
51
- }
52
-
53
- [data-theme="dark"] {
54
- /* Semantic tokens (dark mode) */
55
- --text-primary: var(--scitex-07);
56
- --text-secondary: var(--scitex-05);
57
- --text-muted: var(--scitex-04);
58
- --text-inverse: var(--scitex-01);
59
-
60
- --bg-page: #0f1419;
61
- --bg-surface: var(--scitex-01);
62
- --bg-muted: var(--scitex-02);
63
-
64
- --border-default: var(--scitex-03);
65
- --border-muted: var(--scitex-02);
66
-
67
- /* Workspace colors */
68
- --workspace-bg-primary: #0d0d0d;
69
- --workspace-bg-secondary: #151515;
70
- --workspace-bg-tertiary: #1a1a1a;
71
- --workspace-bg-elevated: #1f1f1f;
72
- --workspace-border-subtle: #1a1a1a;
73
- --workspace-border-default: #3a3a3a;
74
-
75
- /* Status */
76
- --status-success: #6ba89a;
77
- --status-warning: #d4a87a;
78
- --status-error: #c08888;
79
-
80
- /* Preview background (darker checkered) */
81
- --preview-bg: linear-gradient(45deg, #2a2a2a 25%, transparent 25%),
82
- linear-gradient(-45deg, #2a2a2a 25%, transparent 25%),
83
- linear-gradient(45deg, transparent 75%, #2a2a2a 75%),
84
- linear-gradient(-45deg, transparent 75%, #2a2a2a 75%);
85
- }
@@ -1,217 +0,0 @@
1
- /* =============================================================================
2
- * Buttons
3
- * ============================================================================= */
4
- .btn {
5
- width: 100%;
6
- padding: 7px 12px;
7
- margin-top: 6px;
8
- border: none;
9
- border-radius: 4px;
10
- cursor: pointer;
11
- font-size: 0.9em;
12
- font-weight: 500;
13
- transition: all 0.2s;
14
- }
15
-
16
- .btn-primary {
17
- background: var(--status-success);
18
- color: white;
19
- }
20
-
21
- .btn-primary:hover {
22
- filter: brightness(1.1);
23
- }
24
-
25
- .btn-secondary {
26
- background: var(--bg-muted);
27
- color: var(--text-primary);
28
- border: 1px solid var(--border-muted);
29
- }
30
-
31
- .btn-secondary:hover {
32
- background: var(--workspace-bg-tertiary);
33
- }
34
-
35
- .btn-warning {
36
- background: #f59e0b;
37
- color: #000;
38
- border: 1px solid #d97706;
39
- }
40
-
41
- .btn-warning:hover {
42
- background: #fbbf24;
43
- }
44
-
45
- .btn-cta {
46
- background: var(--color-cta);
47
- color: white;
48
- }
49
-
50
- .btn-cta:hover {
51
- background: var(--color-cta-hover);
52
- }
53
-
54
- .btn-sm {
55
- padding: 4px 10px;
56
- font-size: 0.8em;
57
- width: auto;
58
- margin: 0;
59
- }
60
-
61
- /* Unit Toggle */
62
- .unit-toggle {
63
- display: flex;
64
- gap: 0;
65
- border-radius: 4px;
66
- overflow: hidden;
67
- border: 1px solid var(--border-default);
68
- }
69
-
70
- .unit-btn {
71
- padding: 4px 12px;
72
- font-size: 0.8em;
73
- font-weight: 500;
74
- border: none;
75
- background: var(--bg-muted);
76
- color: var(--text-muted);
77
- cursor: pointer;
78
- transition: all 0.15s;
79
- }
80
-
81
- .unit-btn:first-child {
82
- border-right: 1px solid var(--border-default);
83
- }
84
-
85
- .unit-btn:hover {
86
- background: var(--bg-surface);
87
- color: var(--text-secondary);
88
- }
89
-
90
- .unit-btn.active {
91
- background: var(--color-cta);
92
- color: white;
93
- }
94
-
95
- /* Background Type Toggle */
96
- .bg-toggle {
97
- display: flex;
98
- gap: 6px;
99
- }
100
-
101
- .bg-btn {
102
- display: flex;
103
- flex-direction: column;
104
- align-items: center;
105
- gap: 4px;
106
- padding: 6px 10px;
107
- font-size: 0.75em;
108
- border: 1px solid var(--border-default);
109
- border-radius: 4px;
110
- background: var(--bg-muted);
111
- color: var(--text-muted);
112
- cursor: pointer;
113
- transition: all 0.15s;
114
- flex: 1;
115
- }
116
-
117
- .bg-btn:hover {
118
- background: var(--bg-surface);
119
- color: var(--text-secondary);
120
- }
121
-
122
- .bg-btn.active {
123
- border-color: var(--color-cta);
124
- background: var(--bg-surface);
125
- color: var(--text-primary);
126
- box-shadow: 0 0 0 1px var(--color-cta);
127
- }
128
-
129
- .bg-preview {
130
- width: 20px;
131
- height: 14px;
132
- border-radius: 2px;
133
- border: 1px solid var(--border-default);
134
- }
135
-
136
- .bg-preview.white {
137
- background: #ffffff;
138
- }
139
-
140
- .bg-preview.transparent {
141
- background: linear-gradient(45deg, #ccc 25%, transparent 25%),
142
- linear-gradient(-45deg, #ccc 25%, transparent 25%),
143
- linear-gradient(45deg, transparent 75%, #ccc 75%),
144
- linear-gradient(-45deg, transparent 75%, #ccc 75%);
145
- background-size: 8px 8px;
146
- background-position: 0 0, 0 4px, 4px -4px, -4px 0px;
147
- background-color: #fff;
148
- }
149
-
150
- .bg-preview.black {
151
- background: #000000;
152
- }
153
-
154
- /* Axis Tabs (for X/Y/Z axis switching) */
155
- .axis-tabs {
156
- display: flex;
157
- gap: 3px;
158
- margin-bottom: 8px;
159
- background: var(--bg-muted);
160
- padding: 3px;
161
- border-radius: 6px;
162
- }
163
-
164
- .axis-tab {
165
- flex: 1;
166
- padding: 4px 8px;
167
- border: none;
168
- background: transparent;
169
- color: var(--text-secondary);
170
- font-size: 0.8em;
171
- font-weight: 600;
172
- cursor: pointer;
173
- border-radius: 4px;
174
- transition: all 0.15s ease;
175
- }
176
-
177
- .axis-tab:hover {
178
- background: var(--bg-surface);
179
- color: var(--text-primary);
180
- }
181
-
182
- .axis-tab.active {
183
- background: var(--scitex-01);
184
- color: var(--bg-primary);
185
- }
186
-
187
- .axis-panel {
188
- animation: fadeIn 0.15s ease;
189
- }
190
-
191
- @keyframes fadeIn {
192
- from { opacity: 0; }
193
- to { opacity: 1; }
194
- }
195
-
196
- /* Debug toggle button */
197
- .debug-toggle {
198
- position: fixed;
199
- bottom: 10px;
200
- right: 10px;
201
- z-index: 1000;
202
- padding: 8px 12px;
203
- background: #333;
204
- color: #fff;
205
- border: none;
206
- border-radius: 4px;
207
- cursor: pointer;
208
- font-size: 12px;
209
- }
210
-
211
- .debug-toggle:hover {
212
- background: #555;
213
- }
214
-
215
- .debug-toggle.active {
216
- background: #c00;
217
- }
@@ -1,93 +0,0 @@
1
- /* =============================================================================
2
- * Context Menu (Right-Click)
3
- * ============================================================================= */
4
- .context-menu {
5
- position: fixed;
6
- background: var(--bg-secondary, #2a2a2a);
7
- border: 1px solid var(--border-color, #444);
8
- border-radius: 6px;
9
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
10
- min-width: 200px;
11
- z-index: 10000;
12
- padding: 4px 0;
13
- font-size: 13px;
14
- }
15
-
16
- .context-menu-item {
17
- display: flex;
18
- align-items: center;
19
- padding: 8px 12px;
20
- cursor: pointer;
21
- color: var(--text-primary, #ddd);
22
- transition: background 0.1s;
23
- position: relative;
24
- }
25
-
26
- .context-menu-item:hover:not(.disabled) {
27
- background: var(--accent-primary, #4a90d9);
28
- color: #fff;
29
- }
30
-
31
- .context-menu-item.disabled {
32
- color: var(--text-muted, #666);
33
- cursor: not-allowed;
34
- }
35
-
36
- .context-menu-icon {
37
- width: 20px;
38
- margin-right: 8px;
39
- text-align: center;
40
- font-size: 14px;
41
- }
42
-
43
- .context-menu-shortcut {
44
- margin-left: auto;
45
- font-size: 11px;
46
- color: var(--text-muted, #888);
47
- padding-left: 16px;
48
- }
49
-
50
- .context-menu-item:hover:not(.disabled) .context-menu-shortcut {
51
- color: rgba(255, 255, 255, 0.7);
52
- }
53
-
54
- .context-menu-arrow {
55
- margin-left: auto;
56
- font-size: 10px;
57
- color: var(--text-muted, #888);
58
- }
59
-
60
- .context-menu-divider {
61
- height: 1px;
62
- background: var(--border-color, #444);
63
- margin: 4px 0;
64
- }
65
-
66
- /* Submenu */
67
- .context-menu-submenu {
68
- position: relative;
69
- }
70
-
71
- .context-submenu {
72
- display: none;
73
- position: absolute;
74
- left: 100%;
75
- top: 0;
76
- background: var(--bg-secondary, #2a2a2a);
77
- border: 1px solid var(--border-color, #444);
78
- border-radius: 6px;
79
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
80
- min-width: 150px;
81
- padding: 4px 0;
82
- z-index: 10001;
83
- pointer-events: auto;
84
- }
85
-
86
- .context-menu-submenu:hover > .context-submenu,
87
- .context-submenu:hover {
88
- display: block;
89
- }
90
-
91
- .context-submenu .context-menu-item {
92
- padding: 6px 12px;
93
- }
@@ -1,57 +0,0 @@
1
- /* =============================================================================
2
- * Download Dropdown
3
- * ============================================================================= */
4
- .download-dropdown {
5
- position: relative;
6
- display: inline-block;
7
- }
8
-
9
- .download-dropdown #download-btn {
10
- background: #4a90d9;
11
- border: none;
12
- color: white;
13
- padding: 4px 12px;
14
- font-size: 0.8em;
15
- border-radius: 3px;
16
- cursor: pointer;
17
- }
18
-
19
- .download-dropdown #download-btn:hover {
20
- background: #5a9fe9;
21
- }
22
-
23
- #download-menu {
24
- display: none;
25
- position: absolute;
26
- top: 100%;
27
- left: 0;
28
- background: #2a2a2a;
29
- border: 1px solid #444;
30
- border-radius: 4px;
31
- min-width: 160px;
32
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
33
- z-index: 1000;
34
- margin-top: 4px;
35
- padding: 4px 0;
36
- }
37
-
38
- .download-item {
39
- display: block;
40
- padding: 8px 12px;
41
- color: #ddd;
42
- text-decoration: none;
43
- font-size: 0.85em;
44
- transition: background 0.15s;
45
- white-space: nowrap;
46
- }
47
-
48
- .download-item:hover {
49
- background: #3a3a3a;
50
- color: #fff;
51
- }
52
-
53
- .download-divider {
54
- height: 1px;
55
- background: #444;
56
- margin: 4px 0;
57
- }
@@ -1,112 +0,0 @@
1
- /* =============================================================================
2
- * Form Fields
3
- * ============================================================================= */
4
- .field {
5
- margin-bottom: 8px;
6
- }
7
-
8
- .field label {
9
- display: block;
10
- font-size: 0.78em;
11
- font-weight: 500;
12
- margin-bottom: 3px;
13
- color: var(--text-secondary);
14
- }
15
-
16
- .field input[type="text"],
17
- .field input[type="number"],
18
- .field select {
19
- width: 100%;
20
- padding: 5px 8px;
21
- border: 1px solid var(--border-muted);
22
- border-radius: 4px;
23
- background: var(--bg-surface);
24
- color: var(--text-primary);
25
- font-size: 0.82em;
26
- transition: border-color 0.2s;
27
- }
28
-
29
- .field input:focus,
30
- .field select:focus {
31
- outline: none;
32
- border-color: var(--status-success);
33
- }
34
-
35
- .field input[type="color"] {
36
- width: 40px;
37
- height: 32px;
38
- padding: 2px;
39
- border: 1px solid var(--border-muted);
40
- border-radius: 4px;
41
- cursor: pointer;
42
- background: var(--bg-surface);
43
- }
44
-
45
- .field-row {
46
- display: flex;
47
- gap: 8px;
48
- }
49
-
50
- .field-row .field {
51
- flex: 1;
52
- margin-bottom: 0;
53
- }
54
-
55
- /* Checkbox styling */
56
- .checkbox-field {
57
- display: flex;
58
- align-items: center;
59
- gap: 6px;
60
- cursor: pointer;
61
- padding: 4px 0;
62
- }
63
-
64
- .checkbox-field input[type="checkbox"] {
65
- width: 16px;
66
- height: 16px;
67
- accent-color: var(--status-success);
68
- }
69
-
70
- .checkbox-field span {
71
- font-size: 0.85em;
72
- color: var(--text-primary);
73
- }
74
-
75
- /* Color field with input */
76
- .color-field {
77
- display: flex;
78
- align-items: center;
79
- gap: 8px;
80
- }
81
-
82
- .color-field input[type="text"] {
83
- flex: 1;
84
- }
85
-
86
- /* Range slider styling */
87
- input[type="range"] {
88
- width: 100%;
89
- height: 6px;
90
- border-radius: 3px;
91
- background: var(--bg-tertiary);
92
- outline: none;
93
- -webkit-appearance: none;
94
- }
95
-
96
- input[type="range"]::-webkit-slider-thumb {
97
- -webkit-appearance: none;
98
- width: 16px;
99
- height: 16px;
100
- border-radius: 50%;
101
- background: var(--accent);
102
- cursor: pointer;
103
- }
104
-
105
- input[type="range"]::-moz-range-thumb {
106
- width: 16px;
107
- height: 16px;
108
- border-radius: 50%;
109
- background: var(--accent);
110
- cursor: pointer;
111
- border: none;
112
- }