scitex 2.10.3__py3-none-any.whl → 2.13.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/__main__.py +24 -5
- scitex/__version__.py +1 -1
- scitex/_install_guide.py +14 -2
- scitex/_optional_deps.py +33 -0
- scitex/ai/classification/reporters/_ClassificationReporter.py +1 -1
- scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +2 -2
- scitex/ai/classification/timeseries/_normalize_timestamp.py +1 -1
- scitex/ai/metrics/_calc_seizure_prediction_metrics.py +1 -1
- scitex/ai/plt/_plot_feature_importance.py +1 -1
- scitex/ai/plt/_plot_learning_curve.py +1 -1
- scitex/ai/plt/_plot_optuna_study.py +1 -1
- scitex/ai/plt/_plot_pre_rec_curve.py +1 -1
- scitex/ai/plt/_plot_roc_curve.py +1 -1
- scitex/ai/plt/_stx_conf_mat.py +1 -1
- scitex/ai/training/_LearningCurveLogger.py +1 -1
- scitex/audio/mcp_server.py +38 -8
- 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/browser/automation/CookieHandler.py +1 -1
- scitex/browser/core/BrowserMixin.py +1 -1
- scitex/browser/core/ChromeProfileManager.py +1 -1
- scitex/browser/debugging/_browser_logger.py +1 -1
- scitex/browser/debugging/_highlight_element.py +1 -1
- scitex/browser/debugging/_show_grid.py +1 -1
- scitex/browser/interaction/click_center.py +1 -1
- scitex/browser/interaction/click_with_fallbacks.py +1 -1
- scitex/browser/interaction/close_popups.py +1 -1
- scitex/browser/interaction/fill_with_fallbacks.py +1 -1
- scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +1 -1
- scitex/browser/pdf/detect_chrome_pdf_viewer.py +1 -1
- scitex/browser/stealth/HumanBehavior.py +1 -1
- scitex/browser/stealth/StealthManager.py +1 -1
- scitex/{fig → canvas}/__init__.py +84 -96
- scitex/canvas/_mcp_handlers.py +372 -0
- scitex/canvas/_mcp_tool_schemas.py +219 -0
- 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/canvas/mcp_server.py +151 -0
- 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/capture/mcp_server.py +41 -12
- scitex/cli/audio.py +233 -0
- scitex/cli/capture.py +307 -0
- scitex/cli/convert.py +10 -6
- scitex/cli/main.py +27 -4
- scitex/cli/repro.py +233 -0
- scitex/cli/resource.py +240 -0
- scitex/cli/stats.py +325 -0
- scitex/cli/template.py +236 -0
- scitex/cli/tex.py +286 -0
- scitex/cli/web.py +11 -12
- scitex/dev/__init__.py +3 -0
- scitex/dev/_pyproject.py +405 -0
- scitex/dev/plt/__init__.py +2 -2
- scitex/dev/plt/mpl/get_dir_ax.py +1 -1
- scitex/dev/plt/mpl/get_signatures.py +1 -1
- scitex/dev/plt/mpl/get_signatures_details.py +1 -1
- scitex/diagram/README.md +7 -7
- scitex/diagram/_mcp_handlers.py +400 -0
- scitex/diagram/_mcp_tool_schemas.py +157 -0
- scitex/diagram/mcp_server.py +151 -0
- scitex/dsp/_demo_sig.py +51 -5
- scitex/dsp/_mne.py +13 -2
- scitex/dsp/_modulation_index.py +15 -3
- scitex/dsp/_pac.py +23 -5
- scitex/dsp/_psd.py +16 -4
- scitex/dsp/_resample.py +24 -4
- scitex/dsp/_transform.py +16 -3
- scitex/dsp/add_noise.py +15 -1
- scitex/dsp/norm.py +17 -2
- scitex/dsp/reference.py +17 -1
- scitex/dsp/utils/_differential_bandpass_filters.py +20 -2
- scitex/dsp/utils/_zero_pad.py +18 -4
- scitex/dt/_normalize_timestamp.py +1 -1
- scitex/git/_session.py +1 -1
- 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 +17 -6
- scitex/io/_load_modules/_eeg.py +28 -13
- scitex/io/_load_modules/_optuna.py +21 -63
- scitex/io/_load_modules/_torch.py +11 -3
- 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/_optuna_study_as_csv_and_pngs.py +13 -2
- 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/_save_modules/_torch.py +11 -3
- 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/mcp_server.py +159 -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/_mcp_handlers.py +361 -0
- scitex/plt/_mcp_tool_schemas.py +169 -0
- 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/mcp_server.py +205 -0
- scitex/plt/utils/_csv_column_naming.py +250 -118
- scitex/repro/README_RandomStateManager.md +3 -3
- scitex/repro/_RandomStateManager.py +14 -14
- scitex/repro/_gen_ID.py +1 -1
- scitex/repro/_gen_timestamp.py +1 -1
- scitex/repro/_hash_array.py +4 -4
- scitex/schema/__init__.py +69 -73
- scitex/schema/_canvas.py +1 -1
- scitex/schema/_stats.py +2 -2
- scitex/scholar/__main__.py +24 -2
- scitex/scholar/_mcp_handlers.py +685 -0
- scitex/scholar/_mcp_tool_schemas.py +339 -0
- scitex/scholar/docs/template.py +1 -1
- scitex/scholar/examples/07_storage_integration.py +1 -1
- scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +1 -1
- scitex/scholar/impact_factor/jcr/build_database.py +1 -1
- scitex/scholar/mcp_server.py +315 -0
- scitex/scholar/pdf_download/ScholarPDFDownloader.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineParallel.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineSingle.py +1 -1
- scitex/scholar/storage/PaperIO.py +1 -1
- scitex/session/README.md +4 -4
- scitex/session/__init__.py +1 -1
- scitex/session/_decorator.py +9 -9
- scitex/session/_lifecycle.py +5 -5
- scitex/session/template.py +1 -1
- scitex/stats/__init__.py +30 -33
- scitex/stats/__main__.py +281 -0
- scitex/stats/_mcp_handlers.py +1191 -0
- scitex/stats/_mcp_tool_schemas.py +384 -0
- scitex/stats/_schema.py +1 -1
- scitex/stats/correct/_correct_bonferroni.py +1 -1
- scitex/stats/correct/_correct_fdr.py +1 -1
- scitex/stats/correct/_correct_fdr_.py +1 -1
- scitex/stats/correct/_correct_holm.py +1 -1
- scitex/stats/correct/_correct_sidak.py +1 -1
- scitex/stats/effect_sizes/_cliffs_delta.py +1 -1
- scitex/stats/effect_sizes/_cohens_d.py +1 -1
- scitex/stats/effect_sizes/_epsilon_squared.py +1 -1
- scitex/stats/effect_sizes/_eta_squared.py +1 -1
- scitex/stats/effect_sizes/_prob_superiority.py +1 -1
- scitex/stats/io/__init__.py +10 -11
- scitex/stats/io/_bundle.py +16 -16
- scitex/stats/mcp_server.py +405 -0
- scitex/stats/posthoc/_dunnett.py +1 -1
- scitex/stats/posthoc/_games_howell.py +1 -1
- scitex/stats/posthoc/_tukey_hsd.py +1 -1
- scitex/stats/power/_power.py +1 -1
- scitex/stats/utils/_effect_size.py +1 -1
- scitex/stats/utils/_formatters.py +1 -1
- scitex/stats/utils/_power.py +1 -1
- scitex/template/_mcp_handlers.py +259 -0
- scitex/template/_mcp_tool_schemas.py +112 -0
- scitex/template/mcp_server.py +186 -0
- scitex/utils/_verify_scitex_format.py +2 -2
- scitex/utils/template.py +1 -1
- scitex/web/__init__.py +12 -11
- scitex/web/_scraping.py +26 -265
- scitex/web/download_images.py +316 -0
- scitex/writer/Writer.py +1 -1
- scitex/writer/_clone_writer_project.py +1 -1
- scitex/writer/_validate_tree_structures.py +1 -1
- scitex/writer/dataclasses/config/_WriterConfig.py +1 -1
- scitex/writer/dataclasses/contents/_ManuscriptContents.py +1 -1
- scitex/writer/dataclasses/core/_Document.py +1 -1
- scitex/writer/dataclasses/core/_DocumentSection.py +1 -1
- scitex/writer/dataclasses/results/_CompilationResult.py +1 -1
- scitex/writer/dataclasses/results/_LaTeXIssue.py +1 -1
- scitex/writer/utils/.legacy_git_retry.py +7 -5
- scitex/writer/utils/_parse_latex_logs.py +1 -1
- scitex-2.13.0.dist-info/METADATA +1231 -0
- {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/RECORD +376 -470
- scitex-2.13.0.dist-info/entry_points.txt +11 -0
- 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-2.10.3.dist-info/METADATA +0 -952
- scitex-2.10.3.dist-info/entry_points.txt +0 -2
- /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.3.dist-info → scitex-2.13.0.dist-info}/WHEEL +0 -0
- {scitex-2.10.3.dist-info → scitex-2.13.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">☾</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
|