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.
- scitex/__init__.py +1 -4
- scitex/__version__.py +1 -1
- scitex/_install_guide.py +14 -2
- scitex/bridge/_figrecipe.py +1 -1
- scitex/bridge/_helpers.py +1 -1
- scitex/bridge/_plt_vis.py +1 -1
- scitex/bridge/_stats_plt.py +1 -1
- scitex/bridge/_stats_vis.py +2 -2
- scitex/{fig → canvas}/__init__.py +84 -96
- scitex/{fig → canvas}/backend/_parser.py +1 -1
- scitex/{fig → canvas}/canvas.py +13 -14
- scitex/{fts/_fig/_editor → canvas/editor}/_defaults.py +2 -2
- scitex/{fig → canvas}/editor/edit/__init__.py +11 -14
- scitex/{fig → canvas}/editor/edit/bundle_resolver.py +56 -48
- scitex/{fig → canvas}/editor/edit/editor_launcher.py +79 -26
- scitex/{fts/_fig/_editor/_cui/_panel_loader.py → canvas/editor/edit/panel_loader.py} +8 -8
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_bbox.py +2 -1
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_core.py +84 -84
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_renderer.py +7 -6
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/static/css/features/canvas.css +2 -2
- scitex/{fig → canvas}/editor/flask_editor/static/css/features/panel-grid.css +1 -1
- scitex/{fig → canvas}/editor/flask_editor/static/js/core/api.js +3 -4
- scitex/{fig → canvas}/editor/flask_editor/static/js/editor/preview.js +5 -5
- scitex/{fig → canvas}/editor/flask_editor/templates/_html.py +3 -3
- scitex/{fig → canvas}/editor/flask_editor/templates/_scripts.py +10 -10
- scitex/{fig → canvas}/editor/flask_editor/templates/_styles.py +3 -3
- scitex/{fig → canvas}/io/__init__.py +32 -38
- scitex/{fig → canvas}/io/_bundle.py +217 -154
- scitex/{fig → canvas}/io/_canvas.py +1 -1
- scitex/{fig → canvas}/io/_data.py +1 -1
- scitex/{fig → canvas}/io/_export.py +1 -1
- scitex/{fig → canvas}/io/_load.py +1 -1
- scitex/{fig → canvas}/io/_panel.py +1 -1
- scitex/{fig → canvas}/io/_save.py +1 -1
- scitex/{fig → canvas}/model/__init__.py +1 -1
- scitex/{fig → canvas}/model/_annotations.py +1 -1
- scitex/{fig → canvas}/model/_axes.py +1 -1
- scitex/{fig → canvas}/model/_figure.py +1 -1
- scitex/{fig → canvas}/model/_guides.py +1 -1
- scitex/{fig → canvas}/model/_plot.py +1 -1
- scitex/{fig → canvas}/model/_styles.py +1 -1
- scitex/{fig → canvas}/utils/__init__.py +1 -1
- scitex/cli/convert.py +10 -6
- scitex/diagram/README.md +7 -7
- scitex/io/__init__.py +7 -19
- scitex/io/_load.py +15 -19
- scitex/io/_load_modules/_canvas.py +2 -2
- scitex/io/_load_modules/_con.py +5 -5
- scitex/io/_load_modules/_eeg.py +16 -12
- scitex/io/_save.py +11 -16
- scitex/io/_save_modules/__init__.py +6 -10
- scitex/io/_save_modules/_canvas.py +3 -3
- scitex/io/_save_modules/_plot_bundle.py +112 -0
- scitex/io/_save_modules/{_pltz_stx.py → _plot_scitex.py} +7 -7
- scitex/io/_save_modules/_stx_bundle.py +16 -16
- scitex/io/bundle/README.md +89 -80
- scitex/{fts/_bundle/_FTS.py → io/bundle/_Bundle.py} +197 -95
- scitex/io/bundle/__init__.py +67 -35
- scitex/{fts/_bundle → io/bundle}/_children.py +32 -40
- scitex/io/bundle/_core.py +184 -97
- scitex/{fts/_bundle/_dataclasses/_Node.py → io/bundle/_dataclasses/_Spec.py} +29 -23
- scitex/{fts/_bundle/_dataclasses/_NodeRefs.py → io/bundle/_dataclasses/_SpecRefs.py} +6 -6
- scitex/{fts/_bundle → io/bundle}/_dataclasses/__init__.py +4 -4
- scitex/{fts/_bundle → io/bundle}/_loader.py +19 -19
- scitex/io/bundle/_manifest.py +99 -0
- scitex/{fts/_bundle → io/bundle}/_mpl_helpers.py +119 -28
- scitex/io/bundle/_nested.py +113 -100
- scitex/{fts/_bundle → io/bundle}/_saver.py +13 -14
- scitex/{fts/_bundle → io/bundle}/_storage.py +3 -3
- scitex/io/bundle/_types.py +41 -16
- scitex/{fts/_bundle → io/bundle}/_validation.py +20 -18
- scitex/io/bundle/_zip.py +21 -31
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_backend/_parser.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Annotations.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Axes.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Figure.py +1 -1
- scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Guides.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Plot.py +1 -1
- scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Styles.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_utils/_plot_layout.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/__init__.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/_app.py +1 -1
- scitex/{fts/_tables → io/bundle/kinds/_table}/_latex/_export.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_figure_exporter.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_table_exporter.py +1 -1
- scitex/io/bundle/schemas/__init__.py +30 -0
- scitex/parallel/_run.py +5 -4
- scitex/path/_find.py +60 -83
- scitex/path/_get_module_path.py +23 -21
- scitex/path/_get_spath.py +6 -27
- scitex/path/_getsize.py +23 -9
- scitex/path/_increment_version.py +31 -38
- scitex/path/_mk_spath.py +26 -29
- scitex/path/_path.py +5 -12
- scitex/path/_split.py +27 -15
- scitex/path/_this_path.py +23 -9
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +2 -1
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +2 -2
- scitex/plt/gallery/_generate.py +76 -50
- scitex/plt/io/__init__.py +17 -19
- scitex/plt/io/_bundle.py +99 -52
- scitex/plt/io/_layered_bundle.py +303 -168
- scitex/plt/utils/_csv_column_naming.py +250 -118
- scitex/schema/__init__.py +69 -73
- scitex/schema/_canvas.py +1 -1
- scitex/schema/_stats.py +2 -2
- scitex/stats/__init__.py +30 -33
- scitex/stats/_schema.py +1 -1
- scitex/stats/io/__init__.py +10 -11
- scitex/stats/io/_bundle.py +16 -16
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/METADATA +191 -72
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/RECORD +237 -360
- scitex/fig/editor/_defaults.py +0 -300
- scitex/fig/editor/edit/panel_loader.py +0 -232
- scitex/fig/editor/flask_editor/_bbox.py +0 -1299
- scitex/fig/editor/flask_editor/_core.py +0 -1429
- scitex/fig/editor/flask_editor/_renderer.py +0 -813
- scitex/fig/editor/flask_editor/static/css/features/canvas.css +0 -176
- scitex/fts/README.md +0 -262
- scitex/fts/TODO.md +0 -66
- scitex/fts/__init__.py +0 -90
- scitex/fts/_bundle/README_IN_BUNDLE.md +0 -102
- scitex/fts/_bundle/__init__.py +0 -38
- scitex/fts/_bundle/_utils/__init__.py +0 -55
- scitex/fts/_bundle/_utils/_const.py +0 -26
- scitex/fts/_bundle/_utils/_errors.py +0 -73
- scitex/fts/_bundle/_utils/_generate.py +0 -21
- scitex/fts/_bundle/_utils/_types.py +0 -76
- scitex/fts/_bundle/_zipbundle.py +0 -165
- scitex/fts/_fig/__init__.py +0 -22
- scitex/fts/_fig/_backend/_parser.py +0 -188
- scitex/fts/_fig/_editor/__init__.py +0 -14
- scitex/fts/_fig/_editor/_cui/__init__.py +0 -33
- scitex/fts/_fig/_editor/_cui/_backend_detector.py +0 -39
- scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +0 -366
- scitex/fts/_fig/_editor/_cui/_editor_launcher.py +0 -175
- scitex/fts/_fig/_editor/_cui/_manual_handler.py +0 -52
- scitex/fts/_fig/_editor/_cui/_path_resolver.py +0 -66
- scitex/fts/_fig/_editor/_gui/__init__.py +0 -11
- scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +0 -20
- scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +0 -664
- scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +0 -79
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +0 -41
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +0 -16
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +0 -85
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +0 -217
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +0 -93
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +0 -57
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +0 -112
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +0 -59
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +0 -212
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +0 -190
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +0 -59
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +0 -45
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +0 -95
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +0 -101
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +0 -138
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +0 -31
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +0 -7
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +0 -56
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +0 -78
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +0 -314
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +0 -107
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +0 -54
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +0 -172
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +0 -258
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +0 -48
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +0 -71
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +0 -288
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +0 -143
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +0 -245
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +0 -992
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +0 -339
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +0 -286
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +0 -371
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +0 -293
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +0 -426
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +0 -152
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +0 -265
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +0 -184
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +0 -57
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +0 -100
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +0 -34
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +0 -124
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +0 -851
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +0 -4932
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +0 -1657
- scitex/fts/_fig/_editor/_gui/_flask_editor.py +0 -36
- scitex/fts/_fig/_models/_Annotations.py +0 -115
- scitex/fts/_fig/_models/_Axes.py +0 -152
- scitex/fts/_fig/_models/_Figure.py +0 -138
- scitex/fts/_fig/_models/_Plot.py +0 -123
- scitex/fts/_fig/_utils/_plot_layout.py +0 -397
- scitex/fts/_kinds/_figure/_composite.py +0 -345
- scitex/fts/_kinds/_plot/_backend/__init__.py +0 -53
- scitex/fts/_kinds/_plot/_backend/_export.py +0 -165
- scitex/fts/_kinds/_plot/_backend/_render.py +0 -538
- scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +0 -46
- scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +0 -82
- scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +0 -441
- scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +0 -52
- scitex/fts/_kinds/_plot/_dataclasses/__init__.py +0 -47
- scitex/fts/_kinds/_plot/_models/_Guides.py +0 -104
- scitex/fts/_kinds/_plot/_models/_Styles.py +0 -245
- scitex/fts/_kinds/_plot/_models/__init__.py +0 -80
- scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +0 -156
- scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +0 -43
- scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +0 -38
- scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +0 -36
- scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +0 -60
- scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +0 -30
- scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +0 -61
- scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +0 -57
- scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +0 -30
- scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +0 -121
- scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +0 -36
- scitex/fts/_kinds/_plot/_utils/__init__.py +0 -129
- scitex/fts/_kinds/_plot/_utils/_auto_layout.py +0 -127
- scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +0 -111
- scitex/fts/_kinds/_plot/_utils/_const_sizes.py +0 -48
- scitex/fts/_kinds/_plot/_utils/_convert_coords.py +0 -77
- scitex/fts/_kinds/_plot/_utils/_get_template.py +0 -178
- scitex/fts/_kinds/_plot/_utils/_normalize.py +0 -73
- scitex/fts/_kinds/_plot/_utils/_validate.py +0 -197
- scitex/fts/_kinds/_table/_latex/_export.py +0 -279
- scitex/fts/_stats/__init__.py +0 -48
- scitex/fts/_stats/_dataclasses/_Stats.py +0 -423
- scitex/fts/_stats/_dataclasses/__init__.py +0 -48
- scitex/fts/_tables/__init__.py +0 -65
- scitex/fts/_tables/_latex/__init__.py +0 -93
- scitex/fts/_tables/_latex/_editor/__init__.py +0 -11
- scitex/fts/_tables/_latex/_editor/_app.py +0 -725
- scitex/fts/_tables/_latex/_figure_exporter.py +0 -153
- scitex/fts/_tables/_latex/_stats_formatter.py +0 -274
- scitex/fts/_tables/_latex/_table_exporter.py +0 -362
- scitex/fts/_tables/_latex/_utils.py +0 -369
- scitex/fts/_tables/_latex/_validator.py +0 -445
- scitex/io/_save_modules/_pltz_bundle.py +0 -356
- /scitex/{fig → canvas}/README.md +0 -0
- /scitex/{fig → canvas}/backend/__init__.py +0 -0
- /scitex/{fig → canvas}/backend/_export.py +0 -0
- /scitex/{fig → canvas}/backend/_render.py +0 -0
- /scitex/{fig → canvas}/docs/CANVAS_ARCHITECTURE.md +0 -0
- /scitex/{fig → canvas}/editor/__init__.py +0 -0
- /scitex/{fig → canvas}/editor/_dearpygui_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_flask_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_mpl_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_qt_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_tkinter_editor.py +0 -0
- /scitex/{fig → canvas}/editor/edit/backend_detector.py +0 -0
- /scitex/{fig → canvas}/editor/edit/manual_handler.py +0 -0
- /scitex/{fig → canvas}/editor/edit/path_resolver.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/__init__.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/_plotter.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/_utils.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/reset.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/typography.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/variables.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/buttons.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/context-menu.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/dropdown.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/forms.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/modal.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/sections.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/element-inspector.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/loading.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/overlay.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/selection.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/statistics.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/index.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/container.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/controls.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/preview.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/axis.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/basic.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/distribute.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/canvas.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/dragging.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/resize.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/selection.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/core/state.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/core/utils.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/dev/element-inspector.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/bbox.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/element-drag.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/overlay.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/main.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/context-menu.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/keyboard.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/controls.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/download.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/help.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/theme.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/templates/__init__.py +0 -0
- /scitex/{fig → canvas}/io/_directory.py +0 -0
- /scitex/{fig → canvas}/model/_plot_types.py +0 -0
- /scitex/{fig → canvas}/utils/_defaults.py +0 -0
- /scitex/{fig → canvas}/utils/_validate.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/__init__.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/_bundle2dict.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/_dict2bundle.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_Axes.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_BBox.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_ColumnDef.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataFormat.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataInfo.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataSource.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_SizeMM.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/__init__.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_bar.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_line.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_scatter.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_figure/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_figure}/_composite.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_plot/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_export.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_render.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_ChannelEncoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Encoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Theme.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_TraceEncoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_bar.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_box.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_distribution.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_errorbar.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_histogram.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_image.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_line.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_scatter.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_seaborn.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_violin.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_auto_layout.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_calc_bounds.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_const_sizes.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_convert_coords.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_get_template.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_normalize.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_validate.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_shape/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/_Stats.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_stats_formatter.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_utils.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_validator.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_text/__init__.py +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/data_info.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/encoding.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/node.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/render_manifest.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/stats.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/theme.schema.json +0 -0
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/WHEEL +0 -0
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/entry_points.txt +0 -0
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Global State Variables
|
|
3
|
-
* Central state management for the Flask figure editor
|
|
4
|
-
*
|
|
5
|
-
* Note: `overrides` is set in the HTML page via inline script before loading modules.
|
|
6
|
-
* This allows Flask to inject the initial data using Jinja2 templating.
|
|
7
|
-
*
|
|
8
|
-
* IMPORTANT: Variables use `var` (not `let`) to ensure they're accessible
|
|
9
|
-
* as globals across all script files loaded via separate <script> tags.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
// ============================================================================
|
|
13
|
-
// Override Data and Element State
|
|
14
|
-
// ============================================================================
|
|
15
|
-
// `overrides` is defined in HTML before this script loads
|
|
16
|
-
// Fallback to empty object if not defined
|
|
17
|
-
if (typeof overrides === 'undefined') {
|
|
18
|
-
var overrides = {};
|
|
19
|
-
}
|
|
20
|
-
var traces = overrides.traces || [];
|
|
21
|
-
var elementBboxes = {};
|
|
22
|
-
var imgSize = {width: 0, height: 0};
|
|
23
|
-
var hoveredElement = null;
|
|
24
|
-
var selectedElement = null;
|
|
25
|
-
var debugMode = false; // Debug mode to show all hit areas
|
|
26
|
-
var isShowingOriginalPreview = false; // True when showing existing SVG/PNG from bundle
|
|
27
|
-
var originalBboxes = null; // Store original bboxes from /preview
|
|
28
|
-
var originalImgSize = null; // Store original img size from /preview
|
|
29
|
-
|
|
30
|
-
// Schema metadata storage
|
|
31
|
-
var schemaMeta = null;
|
|
32
|
-
|
|
33
|
-
// ============================================================================
|
|
34
|
-
// Multi-Panel State
|
|
35
|
-
// ============================================================================
|
|
36
|
-
var panelData = null; // Panel info from /preview
|
|
37
|
-
var currentPanelIndex = 0;
|
|
38
|
-
var showingPanelGrid = false;
|
|
39
|
-
var panelBboxesCache = {}; // Cache bboxes per panel {panelName: {bboxes, imgSize}}
|
|
40
|
-
var activePanelCard = null; // Currently active panel card for hover/click
|
|
41
|
-
var panelHoveredElement = null; // Hovered element in panel grid
|
|
42
|
-
var panelDebugMode = false; // Show hit regions in panel grid
|
|
43
|
-
|
|
44
|
-
// ============================================================================
|
|
45
|
-
// Cycle Selection State
|
|
46
|
-
// ============================================================================
|
|
47
|
-
var elementsAtCursor = []; // All elements at current cursor position
|
|
48
|
-
var currentCycleIndex = 0; // Current index in cycle
|
|
49
|
-
|
|
50
|
-
// ============================================================================
|
|
51
|
-
// Dimension Settings
|
|
52
|
-
// ============================================================================
|
|
53
|
-
var dimensionUnit = 'mm';
|
|
54
|
-
var MM_TO_INCH = 1 / 25.4;
|
|
55
|
-
var INCH_TO_MM = 25.4;
|
|
56
|
-
|
|
57
|
-
// ============================================================================
|
|
58
|
-
// Hitmap State
|
|
59
|
-
// ============================================================================
|
|
60
|
-
var hitmapCanvas = null;
|
|
61
|
-
var hitmapCtx = null;
|
|
62
|
-
var hitmapColorMap = {}; // Maps RGB string -> element info
|
|
63
|
-
var hitmapLoaded = false;
|
|
64
|
-
var hitmapImgSize = {width: 0, height: 0};
|
|
65
|
-
|
|
66
|
-
// ============================================================================
|
|
67
|
-
// Background Settings
|
|
68
|
-
// ============================================================================
|
|
69
|
-
var backgroundType = 'transparent';
|
|
70
|
-
var initializingBackground = true; // Flag to prevent updates during init
|
|
71
|
-
|
|
72
|
-
// ============================================================================
|
|
73
|
-
// Canvas Mode and Layout State
|
|
74
|
-
// ============================================================================
|
|
75
|
-
var canvasMode = 'grid'; // 'grid' or 'canvas'
|
|
76
|
-
var panelPositions = {}; // Store panel positions {name: {x, y, width, height}} in pixels
|
|
77
|
-
var panelLayoutMm = {}; // Store panel positions in mm for saving {name: {x_mm, y_mm, width_mm, height_mm}}
|
|
78
|
-
var canvasScale = 3; // Scale factor: pixels per mm (updated in loadPanelGrid)
|
|
79
|
-
var draggedPanel = null;
|
|
80
|
-
var dragOffset = {x: 0, y: 0};
|
|
81
|
-
var layoutModified = false; // Track if layout has been modified
|
|
82
|
-
|
|
83
|
-
// ============================================================================
|
|
84
|
-
// Element Drag State
|
|
85
|
-
// ============================================================================
|
|
86
|
-
var elementDragState = null; // {element, panelName, startPos, elementType, axId}
|
|
87
|
-
|
|
88
|
-
// Snap positions for legend alignment
|
|
89
|
-
var SNAP_POSITIONS = {
|
|
90
|
-
'upper right': [1.0, 1.0],
|
|
91
|
-
'upper left': [0.0, 1.0],
|
|
92
|
-
'lower left': [0.0, 0.0],
|
|
93
|
-
'lower right': [1.0, 0.0],
|
|
94
|
-
'upper center': [0.5, 1.0],
|
|
95
|
-
'lower center': [0.5, 0.0],
|
|
96
|
-
'center left': [0.0, 0.5],
|
|
97
|
-
'center right': [1.0, 0.5],
|
|
98
|
-
'center': [0.5, 0.5]
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
// ============================================================================
|
|
102
|
-
// Resize State
|
|
103
|
-
// ============================================================================
|
|
104
|
-
var resizingPanel = null;
|
|
105
|
-
|
|
106
|
-
// ============================================================================
|
|
107
|
-
// Update Scheduling
|
|
108
|
-
// ============================================================================
|
|
109
|
-
var updateTimer = null;
|
|
110
|
-
var DEBOUNCE_DELAY = 500;
|
|
111
|
-
|
|
112
|
-
// ============================================================================
|
|
113
|
-
// Shortcut Mode State
|
|
114
|
-
// ============================================================================
|
|
115
|
-
var shortcutMode = null; // For multi-key shortcuts like Alt+A → L
|
|
116
|
-
|
|
117
|
-
// ============================================================================
|
|
118
|
-
// Canvas Zoom and View State
|
|
119
|
-
// ============================================================================
|
|
120
|
-
var canvasZoom = 1.0;
|
|
121
|
-
|
|
122
|
-
// ============================================================================
|
|
123
|
-
// Grid Visibility
|
|
124
|
-
// ============================================================================
|
|
125
|
-
var gridVisible = true;
|
|
126
|
-
|
|
127
|
-
// ============================================================================
|
|
128
|
-
// Undo/Redo State
|
|
129
|
-
// ============================================================================
|
|
130
|
-
var undoStack = [];
|
|
131
|
-
var redoStack = [];
|
|
132
|
-
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Context Menu State
|
|
135
|
-
// ============================================================================
|
|
136
|
-
var contextMenu = null;
|
|
137
|
-
|
|
138
|
-
// ============================================================================
|
|
139
|
-
// Auto-Update State
|
|
140
|
-
// ============================================================================
|
|
141
|
-
var autoUpdateIntervalId = null;
|
|
142
|
-
|
|
143
|
-
console.log('state.js loaded - global state variables initialized');
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility Functions
|
|
3
|
-
* Common helper functions used across the editor
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// ============================================================================
|
|
7
|
-
// Theme Utilities
|
|
8
|
-
// ============================================================================
|
|
9
|
-
function isDarkMode() {
|
|
10
|
-
return document.body.classList.contains('dark-theme');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// ============================================================================
|
|
14
|
-
// Image Dimension Calculations
|
|
15
|
-
// ============================================================================
|
|
16
|
-
function getObjectFitContainDimensions(img) {
|
|
17
|
-
const containerWidth = img.clientWidth;
|
|
18
|
-
const containerHeight = img.clientHeight;
|
|
19
|
-
const imgWidth = img.naturalWidth;
|
|
20
|
-
const imgHeight = img.naturalHeight;
|
|
21
|
-
|
|
22
|
-
// Handle edge cases
|
|
23
|
-
if (!containerWidth || !containerHeight || !imgWidth || !imgHeight) {
|
|
24
|
-
return {
|
|
25
|
-
displayWidth: containerWidth,
|
|
26
|
-
displayHeight: containerHeight,
|
|
27
|
-
offsetX: 0,
|
|
28
|
-
offsetY: 0
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Calculate scale factor for object-fit: contain
|
|
33
|
-
const containerRatio = containerWidth / containerHeight;
|
|
34
|
-
const imgRatio = imgWidth / imgHeight;
|
|
35
|
-
|
|
36
|
-
let displayWidth, displayHeight, offsetX, offsetY;
|
|
37
|
-
|
|
38
|
-
if (imgRatio > containerRatio) {
|
|
39
|
-
// Image is wider than container - fit to width, letterbox top/bottom
|
|
40
|
-
displayWidth = containerWidth;
|
|
41
|
-
displayHeight = containerWidth / imgRatio;
|
|
42
|
-
offsetX = 0;
|
|
43
|
-
offsetY = (containerHeight - displayHeight) / 2;
|
|
44
|
-
} else {
|
|
45
|
-
// Image is taller than container - fit to height, letterbox left/right
|
|
46
|
-
displayHeight = containerHeight;
|
|
47
|
-
displayWidth = containerHeight * imgRatio;
|
|
48
|
-
offsetX = (containerWidth - displayWidth) / 2;
|
|
49
|
-
offsetY = 0;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return {displayWidth, displayHeight, offsetX, offsetY};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// ============================================================================
|
|
56
|
-
// Status Display
|
|
57
|
-
// ============================================================================
|
|
58
|
-
function setStatus(msg, isError = false) {
|
|
59
|
-
document.getElementById('status').textContent = msg;
|
|
60
|
-
document.getElementById('status').style.color = isError ? 'red' : '';
|
|
61
|
-
|
|
62
|
-
// Show/hide spinner for loading states
|
|
63
|
-
if (msg.toLowerCase().includes('updating') || msg.toLowerCase().includes('loading')) {
|
|
64
|
-
// Show global overlay (visible for both single and multi-panel views)
|
|
65
|
-
const globalOverlay = document.getElementById('loading-overlay');
|
|
66
|
-
if (globalOverlay) globalOverlay.style.display = 'flex';
|
|
67
|
-
|
|
68
|
-
// Also show local overlay if visible
|
|
69
|
-
const localOverlay = document.getElementById('overlay-loading');
|
|
70
|
-
if (localOverlay) localOverlay.style.display = 'flex';
|
|
71
|
-
} else {
|
|
72
|
-
// Hide both overlays
|
|
73
|
-
const globalOverlay = document.getElementById('loading-overlay');
|
|
74
|
-
if (globalOverlay) globalOverlay.style.display = 'none';
|
|
75
|
-
const localOverlay = document.getElementById('overlay-loading');
|
|
76
|
-
if (localOverlay) localOverlay.style.display = 'none';
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// ============================================================================
|
|
81
|
-
// Loading State Management
|
|
82
|
-
// ============================================================================
|
|
83
|
-
function showLoading(message = 'Loading...') {
|
|
84
|
-
const overlay = document.getElementById('loading-overlay');
|
|
85
|
-
if (overlay) {
|
|
86
|
-
overlay.style.display = 'flex';
|
|
87
|
-
const text = overlay.querySelector('.loading-text');
|
|
88
|
-
if (text) text.textContent = message;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function hideLoading() {
|
|
93
|
-
const overlay = document.getElementById('loading-overlay');
|
|
94
|
-
if (overlay) {
|
|
95
|
-
overlay.style.display = 'none';
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// ============================================================================
|
|
100
|
-
// Section Management
|
|
101
|
-
// ============================================================================
|
|
102
|
-
function toggleSection(header) {
|
|
103
|
-
const content = header.nextElementSibling;
|
|
104
|
-
content.style.display = content.style.display === 'none' ? 'block' : 'none';
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function expandSection(sectionId) {
|
|
108
|
-
const section = document.getElementById(sectionId);
|
|
109
|
-
if (section) {
|
|
110
|
-
const header = section.querySelector('h3');
|
|
111
|
-
const content = section.querySelector('.section-content');
|
|
112
|
-
if (content && content.style.display === 'none') {
|
|
113
|
-
content.style.display = 'block';
|
|
114
|
-
if (header) {
|
|
115
|
-
header.classList.add('expanded');
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Scroll the section into view
|
|
120
|
-
section.scrollIntoView({behavior: 'smooth', block: 'start'});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// ============================================================================
|
|
125
|
-
// Scroll to Section by Element Name
|
|
126
|
-
// ============================================================================
|
|
127
|
-
function scrollToSection(elementName) {
|
|
128
|
-
if (!elementName) return;
|
|
129
|
-
|
|
130
|
-
// Map element names to section IDs
|
|
131
|
-
let sectionId = null;
|
|
132
|
-
const lowerName = elementName.toLowerCase();
|
|
133
|
-
|
|
134
|
-
if (lowerName.includes('legend')) {
|
|
135
|
-
sectionId = 'section-legend';
|
|
136
|
-
} else if (lowerName.includes('title')) {
|
|
137
|
-
sectionId = 'section-labels';
|
|
138
|
-
} else if (lowerName.includes('xlabel') || lowerName.includes('ylabel') || lowerName.includes('label')) {
|
|
139
|
-
sectionId = 'section-labels';
|
|
140
|
-
} else if (lowerName.includes('xaxis') || lowerName.includes('yaxis') || lowerName.includes('axis') || lowerName.includes('tick') || lowerName.includes('spine')) {
|
|
141
|
-
sectionId = 'section-ticks';
|
|
142
|
-
} else if (lowerName.includes('trace') || lowerName.includes('line') || lowerName.includes('scatter') || lowerName.includes('bar')) {
|
|
143
|
-
sectionId = 'section-traces';
|
|
144
|
-
} else if (lowerName.includes('panel') || lowerName.includes('ax_')) {
|
|
145
|
-
sectionId = 'section-selected';
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (sectionId) {
|
|
149
|
-
expandSection(sectionId);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// ============================================================================
|
|
154
|
-
// Color Synchronization
|
|
155
|
-
// ============================================================================
|
|
156
|
-
function setupColorSync(colorId, textId) {
|
|
157
|
-
const colorInput = document.getElementById(colorId);
|
|
158
|
-
const textInput = document.getElementById(textId);
|
|
159
|
-
if (colorInput && textInput) {
|
|
160
|
-
colorInput.addEventListener('input', function() {
|
|
161
|
-
textInput.value = this.value;
|
|
162
|
-
});
|
|
163
|
-
textInput.addEventListener('input', function() {
|
|
164
|
-
colorInput.value = this.value;
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// ============================================================================
|
|
170
|
-
// Dimension Unit Conversion
|
|
171
|
-
// ============================================================================
|
|
172
|
-
function setDimensionUnit(unit) {
|
|
173
|
-
if (dimensionUnit === unit) return;
|
|
174
|
-
|
|
175
|
-
const oldUnit = dimensionUnit;
|
|
176
|
-
dimensionUnit = unit;
|
|
177
|
-
|
|
178
|
-
// Get current values
|
|
179
|
-
const widthInput = document.getElementById('fig_width');
|
|
180
|
-
const heightInput = document.getElementById('fig_height');
|
|
181
|
-
|
|
182
|
-
// Convert values
|
|
183
|
-
if (unit === 'mm') {
|
|
184
|
-
// inch to mm
|
|
185
|
-
if (widthInput.value) {
|
|
186
|
-
widthInput.value = (parseFloat(widthInput.value) * INCH_TO_MM).toFixed(1);
|
|
187
|
-
}
|
|
188
|
-
if (heightInput.value) {
|
|
189
|
-
heightInput.value = (parseFloat(heightInput.value) * INCH_TO_MM).toFixed(1);
|
|
190
|
-
}
|
|
191
|
-
} else {
|
|
192
|
-
// mm to inch
|
|
193
|
-
if (widthInput.value) {
|
|
194
|
-
widthInput.value = (parseFloat(widthInput.value) * MM_TO_INCH).toFixed(2);
|
|
195
|
-
}
|
|
196
|
-
if (heightInput.value) {
|
|
197
|
-
heightInput.value = (parseFloat(heightInput.value) * MM_TO_INCH).toFixed(2);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Update values and labels
|
|
202
|
-
document.getElementById('unit_width').textContent = unit;
|
|
203
|
-
document.getElementById('unit_height').textContent = unit;
|
|
204
|
-
|
|
205
|
-
// Update button states
|
|
206
|
-
document.getElementById('btn_mm').classList.toggle('active', unit === 'mm');
|
|
207
|
-
document.getElementById('btn_inch').classList.toggle('active', unit === 'inch');
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// ============================================================================
|
|
211
|
-
// Figure Size Conversion
|
|
212
|
-
// ============================================================================
|
|
213
|
-
function getFigSizeInches() {
|
|
214
|
-
const width = parseFloat(document.getElementById('fig_width').value);
|
|
215
|
-
const height = parseFloat(document.getElementById('fig_height').value);
|
|
216
|
-
|
|
217
|
-
if (dimensionUnit === 'mm') {
|
|
218
|
-
return {
|
|
219
|
-
width: width * MM_TO_INCH,
|
|
220
|
-
height: height * MM_TO_INCH
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
return {width, height};
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// ============================================================================
|
|
227
|
-
// Significance Class Helper
|
|
228
|
-
// ============================================================================
|
|
229
|
-
function getSigClass(stars) {
|
|
230
|
-
if (stars >= 3) return 'sig-high';
|
|
231
|
-
if (stars >= 2) return 'sig-med';
|
|
232
|
-
if (stars >= 1) return 'sig-low';
|
|
233
|
-
return '';
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// ============================================================================
|
|
237
|
-
// Debounce Helper
|
|
238
|
-
// ============================================================================
|
|
239
|
-
function debounce(func, delay) {
|
|
240
|
-
let timeoutId;
|
|
241
|
-
return function(...args) {
|
|
242
|
-
clearTimeout(timeoutId);
|
|
243
|
-
timeoutId = setTimeout(() => func.apply(this, args), delay);
|
|
244
|
-
};
|
|
245
|
-
}
|