figrecipe 0.7.4__py3-none-any.whl → 0.9.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.
- figrecipe/__init__.py +74 -76
- figrecipe/__main__.py +12 -0
- figrecipe/_api/_panel.py +67 -0
- figrecipe/_api/_save.py +100 -4
- figrecipe/_cli/__init__.py +7 -0
- figrecipe/_cli/_compose.py +87 -0
- figrecipe/_cli/_convert.py +117 -0
- figrecipe/_cli/_crop.py +82 -0
- figrecipe/_cli/_edit.py +70 -0
- figrecipe/_cli/_extract.py +128 -0
- figrecipe/_cli/_fonts.py +47 -0
- figrecipe/_cli/_info.py +67 -0
- figrecipe/_cli/_main.py +58 -0
- figrecipe/_cli/_reproduce.py +79 -0
- figrecipe/_cli/_style.py +77 -0
- figrecipe/_cli/_validate.py +66 -0
- figrecipe/_cli/_version.py +50 -0
- figrecipe/_composition/__init__.py +32 -0
- figrecipe/_composition/_alignment.py +452 -0
- figrecipe/_composition/_compose.py +179 -0
- figrecipe/_composition/_import_axes.py +127 -0
- figrecipe/_composition/_visibility.py +125 -0
- figrecipe/_dev/__init__.py +2 -0
- figrecipe/_dev/browser/__init__.py +69 -0
- figrecipe/_dev/browser/_audio.py +240 -0
- figrecipe/_dev/browser/_caption.py +356 -0
- figrecipe/_dev/browser/_click_effect.py +146 -0
- figrecipe/_dev/browser/_cursor.py +196 -0
- figrecipe/_dev/browser/_highlight.py +105 -0
- figrecipe/_dev/browser/_narration.py +237 -0
- figrecipe/_dev/browser/_recorder.py +446 -0
- figrecipe/_dev/browser/_utils.py +178 -0
- figrecipe/_dev/browser/_video_trim/__init__.py +152 -0
- figrecipe/_dev/browser/_video_trim/_detection.py +223 -0
- figrecipe/_dev/browser/_video_trim/_markers.py +140 -0
- figrecipe/_editor/__init__.py +36 -36
- figrecipe/_editor/_bbox/_extract.py +155 -9
- figrecipe/_editor/_bbox/_extract_text.py +124 -0
- figrecipe/_editor/_call_overrides.py +183 -0
- figrecipe/_editor/_datatable_plot_handlers.py +249 -0
- figrecipe/_editor/_figure_layout.py +211 -0
- figrecipe/_editor/_flask_app.py +157 -16
- figrecipe/_editor/_helpers.py +17 -8
- figrecipe/_editor/_hitmap/_detect.py +89 -32
- figrecipe/_editor/_hitmap_main.py +4 -4
- figrecipe/_editor/_overrides.py +4 -1
- figrecipe/_editor/_plot_types_registry.py +190 -0
- figrecipe/_editor/_render_overrides.py +38 -11
- figrecipe/_editor/_renderer.py +46 -1
- figrecipe/_editor/_routes_annotation.py +114 -0
- figrecipe/_editor/_routes_axis.py +35 -6
- figrecipe/_editor/_routes_captions.py +130 -0
- figrecipe/_editor/_routes_composition.py +270 -0
- figrecipe/_editor/_routes_core.py +15 -173
- figrecipe/_editor/_routes_datatable.py +364 -0
- figrecipe/_editor/_routes_element.py +37 -19
- figrecipe/_editor/_routes_files.py +443 -0
- figrecipe/_editor/_routes_image.py +200 -0
- figrecipe/_editor/_routes_snapshot.py +94 -0
- figrecipe/_editor/_routes_style.py +28 -8
- figrecipe/_editor/_templates/__init__.py +40 -2
- figrecipe/_editor/_templates/_html.py +97 -103
- figrecipe/_editor/_templates/_html_components/__init__.py +13 -0
- figrecipe/_editor/_templates/_html_components/_composition_toolbar.py +79 -0
- figrecipe/_editor/_templates/_html_components/_file_browser.py +41 -0
- figrecipe/_editor/_templates/_html_datatable.py +92 -0
- figrecipe/_editor/_templates/_scripts/__init__.py +58 -0
- figrecipe/_editor/_templates/_scripts/_accordion.py +328 -0
- figrecipe/_editor/_templates/_scripts/_annotation_drag.py +504 -0
- figrecipe/_editor/_templates/_scripts/_api.py +1 -1
- figrecipe/_editor/_templates/_scripts/_canvas_context_menu.py +182 -0
- figrecipe/_editor/_templates/_scripts/_captions.py +231 -0
- figrecipe/_editor/_templates/_scripts/_composition.py +283 -0
- figrecipe/_editor/_templates/_scripts/_core.py +94 -37
- figrecipe/_editor/_templates/_scripts/_datatable/__init__.py +59 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_cell_edit.py +97 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_clipboard.py +164 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_context_menu.py +221 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_core.py +150 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_editable.py +511 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_import.py +161 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_plot.py +261 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_selection.py +438 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_table.py +256 -0
- figrecipe/_editor/_templates/_scripts/_datatable/_tabs.py +354 -0
- figrecipe/_editor/_templates/_scripts/_element_editor.py +17 -2
- figrecipe/_editor/_templates/_scripts/_files.py +274 -40
- figrecipe/_editor/_templates/_scripts/_files_context_menu.py +240 -0
- figrecipe/_editor/_templates/_scripts/_hitmap.py +87 -84
- figrecipe/_editor/_templates/_scripts/_image_drop.py +428 -0
- figrecipe/_editor/_templates/_scripts/_legend_drag.py +5 -0
- figrecipe/_editor/_templates/_scripts/_multi_select.py +198 -0
- figrecipe/_editor/_templates/_scripts/_panel_drag.py +219 -48
- figrecipe/_editor/_templates/_scripts/_panel_drag_snapshot.py +33 -0
- figrecipe/_editor/_templates/_scripts/_panel_position.py +238 -54
- figrecipe/_editor/_templates/_scripts/_panel_resize.py +230 -0
- figrecipe/_editor/_templates/_scripts/_panel_snap.py +307 -0
- figrecipe/_editor/_templates/_scripts/_region_select.py +255 -0
- figrecipe/_editor/_templates/_scripts/_selection.py +8 -1
- figrecipe/_editor/_templates/_scripts/_sync.py +242 -0
- figrecipe/_editor/_templates/_scripts/_undo_redo.py +348 -0
- figrecipe/_editor/_templates/_scripts/_zoom.py +52 -19
- figrecipe/_editor/_templates/_styles/__init__.py +9 -0
- figrecipe/_editor/_templates/_styles/_base.py +47 -0
- figrecipe/_editor/_templates/_styles/_buttons.py +127 -6
- figrecipe/_editor/_templates/_styles/_composition.py +87 -0
- figrecipe/_editor/_templates/_styles/_controls.py +168 -3
- figrecipe/_editor/_templates/_styles/_datatable/__init__.py +40 -0
- figrecipe/_editor/_templates/_styles/_datatable/_editable.py +203 -0
- figrecipe/_editor/_templates/_styles/_datatable/_panel.py +268 -0
- figrecipe/_editor/_templates/_styles/_datatable/_table.py +479 -0
- figrecipe/_editor/_templates/_styles/_datatable/_toolbar.py +384 -0
- figrecipe/_editor/_templates/_styles/_datatable/_vars.py +123 -0
- figrecipe/_editor/_templates/_styles/_dynamic_props.py +5 -5
- figrecipe/_editor/_templates/_styles/_file_browser.py +466 -0
- figrecipe/_editor/_templates/_styles/_forms.py +98 -0
- figrecipe/_editor/_templates/_styles/_hitmap.py +7 -0
- figrecipe/_editor/_templates/_styles/_modals.py +29 -0
- figrecipe/_editor/_templates/_styles/_overlays.py +5 -5
- figrecipe/_editor/_templates/_styles/_preview.py +213 -8
- figrecipe/_editor/_templates/_styles/_spinner.py +117 -0
- figrecipe/_editor/static/audio/click.mp3 +0 -0
- figrecipe/_editor/static/click.mp3 +0 -0
- figrecipe/_editor/static/icons/favicon.ico +0 -0
- figrecipe/_integrations/__init__.py +17 -0
- figrecipe/_integrations/_scitex_stats.py +298 -0
- figrecipe/_params/_DECORATION_METHODS.py +2 -0
- figrecipe/_recorder.py +28 -3
- figrecipe/_reproducer/_core.py +60 -49
- figrecipe/_utils/__init__.py +3 -0
- figrecipe/_utils/_bundle.py +205 -0
- figrecipe/_wrappers/_axes.py +150 -2
- figrecipe/_wrappers/_caption_generator.py +218 -0
- figrecipe/_wrappers/_figure.py +26 -1
- figrecipe/_wrappers/_stat_annotation.py +274 -0
- figrecipe/styles/_style_applier.py +10 -2
- figrecipe/styles/presets/SCITEX.yaml +11 -4
- {figrecipe-0.7.4.dist-info → figrecipe-0.9.0.dist-info}/METADATA +144 -146
- figrecipe-0.9.0.dist-info/RECORD +277 -0
- figrecipe-0.9.0.dist-info/entry_points.txt +2 -0
- figrecipe-0.7.4.dist-info/RECORD +0 -188
- {figrecipe-0.7.4.dist-info → figrecipe-0.9.0.dist-info}/WHEEL +0 -0
- {figrecipe-0.7.4.dist-info → figrecipe-0.9.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""HTML component for composition toolbar."""
|
|
4
|
+
|
|
5
|
+
HTML_COMPOSITION_TOOLBAR = """
|
|
6
|
+
<!-- Composition Toolbar -->
|
|
7
|
+
<div id="composition-toolbar" class="composition-toolbar">
|
|
8
|
+
<span class="toolbar-label">Align:</span>
|
|
9
|
+
<button onclick="alignPanels('left')" title="Align Left" class="toolbar-btn">
|
|
10
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
11
|
+
<rect x="2" y="2" width="2" height="12"/>
|
|
12
|
+
<rect x="6" y="4" width="8" height="3"/>
|
|
13
|
+
<rect x="6" y="9" width="5" height="3"/>
|
|
14
|
+
</svg>
|
|
15
|
+
</button>
|
|
16
|
+
<button onclick="alignPanels('center_h')" title="Center Horizontal" class="toolbar-btn">
|
|
17
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
18
|
+
<rect x="7" y="2" width="2" height="12"/>
|
|
19
|
+
<rect x="3" y="4" width="10" height="3"/>
|
|
20
|
+
<rect x="4" y="9" width="8" height="3"/>
|
|
21
|
+
</svg>
|
|
22
|
+
</button>
|
|
23
|
+
<button onclick="alignPanels('right')" title="Align Right" class="toolbar-btn">
|
|
24
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
25
|
+
<rect x="12" y="2" width="2" height="12"/>
|
|
26
|
+
<rect x="2" y="4" width="8" height="3"/>
|
|
27
|
+
<rect x="5" y="9" width="5" height="3"/>
|
|
28
|
+
</svg>
|
|
29
|
+
</button>
|
|
30
|
+
<span class="toolbar-separator"></span>
|
|
31
|
+
<button onclick="alignPanels('top')" title="Align Top" class="toolbar-btn">
|
|
32
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
33
|
+
<rect x="2" y="2" width="12" height="2"/>
|
|
34
|
+
<rect x="3" y="6" width="3" height="8"/>
|
|
35
|
+
<rect x="9" y="6" width="3" height="5"/>
|
|
36
|
+
</svg>
|
|
37
|
+
</button>
|
|
38
|
+
<button onclick="alignPanels('center_v')" title="Center Vertical" class="toolbar-btn">
|
|
39
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
40
|
+
<rect x="2" y="7" width="12" height="2"/>
|
|
41
|
+
<rect x="3" y="2" width="3" height="12"/>
|
|
42
|
+
<rect x="9" y="4" width="3" height="8"/>
|
|
43
|
+
</svg>
|
|
44
|
+
</button>
|
|
45
|
+
<button onclick="alignPanels('bottom')" title="Align Bottom" class="toolbar-btn">
|
|
46
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
47
|
+
<rect x="2" y="12" width="12" height="2"/>
|
|
48
|
+
<rect x="3" y="2" width="3" height="8"/>
|
|
49
|
+
<rect x="9" y="5" width="3" height="5"/>
|
|
50
|
+
</svg>
|
|
51
|
+
</button>
|
|
52
|
+
<span class="toolbar-separator"></span>
|
|
53
|
+
<span class="toolbar-label">Distribute:</span>
|
|
54
|
+
<button onclick="distributePanels('horizontal')" title="Distribute Horizontally" class="toolbar-btn">
|
|
55
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
56
|
+
<rect x="2" y="4" width="3" height="8"/>
|
|
57
|
+
<rect x="6.5" y="4" width="3" height="8"/>
|
|
58
|
+
<rect x="11" y="4" width="3" height="8"/>
|
|
59
|
+
</svg>
|
|
60
|
+
</button>
|
|
61
|
+
<button onclick="distributePanels('vertical')" title="Distribute Vertically" class="toolbar-btn">
|
|
62
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
63
|
+
<rect x="4" y="2" width="8" height="3"/>
|
|
64
|
+
<rect x="4" y="6.5" width="8" height="3"/>
|
|
65
|
+
<rect x="4" y="11" width="8" height="3"/>
|
|
66
|
+
</svg>
|
|
67
|
+
</button>
|
|
68
|
+
<span class="toolbar-separator"></span>
|
|
69
|
+
<button onclick="smartAlign()" title="Smart Align (auto-align rows and columns)" class="toolbar-btn toolbar-btn-primary">
|
|
70
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
71
|
+
<path d="M8 1l2 3H6l2-3zm0 14l-2-3h4l-2 3zM1 8l3-2v4l-3-2zm14 0l-3 2V6l3 2z"/>
|
|
72
|
+
<rect x="6" y="6" width="4" height="4"/>
|
|
73
|
+
</svg>
|
|
74
|
+
<span>Smart</span>
|
|
75
|
+
</button>
|
|
76
|
+
</div>
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
__all__ = ["HTML_COMPOSITION_TOOLBAR"]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""File browser panel HTML for the figure editor."""
|
|
4
|
+
|
|
5
|
+
HTML_FILE_BROWSER = """
|
|
6
|
+
<!-- File Browser Panel -->
|
|
7
|
+
<div class="file-browser-panel" id="file-browser-panel">
|
|
8
|
+
<div class="file-browser-header">
|
|
9
|
+
<div class="header-title">
|
|
10
|
+
<span>FILES</span>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="file-browser-actions">
|
|
13
|
+
<button id="btn-new-file" class="btn-new-file" title="Create new figure">+</button>
|
|
14
|
+
<button id="btn-refresh-files" title="Refresh file list">↻</button>
|
|
15
|
+
<button id="btn-collapse-browser" class="btn-collapse" title="Collapse panel">❮</button>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="file-tree-container" id="file-tree-container">
|
|
19
|
+
<ul class="file-tree" id="file-tree">
|
|
20
|
+
<!-- File tree items populated by JavaScript -->
|
|
21
|
+
</ul>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="file-browser-footer">
|
|
24
|
+
<a href="https://scitex.ai" target="_blank" class="brand-link" title="FigRecipe - Part of SciTeX">
|
|
25
|
+
<img src="data:image/png;base64,SCITEX_ICON_PLACEHOLDER" alt="SciTeX" class="brand-icon">
|
|
26
|
+
<div class="brand-info">
|
|
27
|
+
<span class="brand-name">FigRecipe</span>
|
|
28
|
+
<span class="brand-version">vVERSION_PLACEHOLDER by SciTeX™</span>
|
|
29
|
+
</div>
|
|
30
|
+
</a>
|
|
31
|
+
<div class="brand-meta" DEBUG_META_DISPLAY_PLACEHOLDER>
|
|
32
|
+
<span class="server-time">Started: SERVER_START_TIME_PLACEHOLDER</span>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="file-browser-resize" id="file-browser-resize"></div>
|
|
36
|
+
</div>
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
__all__ = ["HTML_FILE_BROWSER"]
|
|
40
|
+
|
|
41
|
+
# EOF
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""HTML template component for the datatable panel.
|
|
4
|
+
|
|
5
|
+
This module contains the HTML for the collapsible datatable panel
|
|
6
|
+
that appears on the left side of the editor.
|
|
7
|
+
Plot type options are generated dynamically from the registry.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from .._plot_types_registry import generate_html_options
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_html_datatable_panel() -> str:
|
|
14
|
+
"""Generate HTML for datatable panel with dynamic plot type options."""
|
|
15
|
+
plot_options = generate_html_options()
|
|
16
|
+
|
|
17
|
+
return f"""
|
|
18
|
+
<!-- Datatable Panel (always visible, collapsible) -->
|
|
19
|
+
<div id="datatable-panel" class="datatable-panel">
|
|
20
|
+
<div class="datatable-header">
|
|
21
|
+
<div class="header-title">
|
|
22
|
+
<span>DATA</span>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="datatable-header-actions">
|
|
25
|
+
<button id="btn-shortcuts-info" class="btn-small btn-icon" title="Keyboard shortcuts">⌨</button>
|
|
26
|
+
<button id="btn-collapse-datatable" class="btn-collapse" title="Collapse panel">❮</button>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<!-- Tab bar for multiple datatables -->
|
|
31
|
+
<div class="datatable-tabs">
|
|
32
|
+
<div id="datatable-tab-list" class="datatable-tab-list">
|
|
33
|
+
<!-- Tabs dynamically populated -->
|
|
34
|
+
</div>
|
|
35
|
+
<button id="btn-new-tab" class="btn-new-tab" title="New data tab">+</button>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- Tab content container -->
|
|
39
|
+
<div id="datatable-tab-content" class="datatable-tab-content">
|
|
40
|
+
<!-- Import dropzone -->
|
|
41
|
+
<div class="datatable-import" id="datatable-import-section">
|
|
42
|
+
<div id="datatable-dropzone" class="datatable-import-dropzone">
|
|
43
|
+
<p>Drop CSV, TSV, or JSON file here</p>
|
|
44
|
+
<p class="hint">or click to browse</p>
|
|
45
|
+
<input type="file" id="datatable-file-input" accept=".csv,.tsv,.txt,.json">
|
|
46
|
+
<div class="dropzone-divider">or</div>
|
|
47
|
+
<button class="btn-create-new" onclick="event.stopPropagation(); createNewCSV()">Create New Table</button>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<!-- Toolbar (hidden until data loaded) -->
|
|
52
|
+
<div class="datatable-toolbar" style="display: none;">
|
|
53
|
+
<select id="datatable-plot-type" class="plot-type-select" title="Plot type">
|
|
54
|
+
{plot_options}
|
|
55
|
+
</select>
|
|
56
|
+
<div class="split-btn">
|
|
57
|
+
<button id="btn-datatable-plot" class="btn-plot" disabled title="Create new plot">New</button>
|
|
58
|
+
<button id="btn-plot-dropdown" class="btn-plot-dropdown" title="Add to panel">▼</button>
|
|
59
|
+
<div id="plot-dropdown-menu" class="plot-dropdown-menu">
|
|
60
|
+
<!-- Panels populated dynamically -->
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<!-- Variable assignment (dynamic based on plot type) -->
|
|
66
|
+
<div id="datatable-var-assign" class="datatable-var-assign" style="display: none;">
|
|
67
|
+
<div class="var-assign-header">Assign columns to variables:</div>
|
|
68
|
+
<div id="var-assign-slots" class="var-assign-slots">
|
|
69
|
+
<!-- Slots dynamically populated by JS -->
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<!-- Spreadsheet content -->
|
|
74
|
+
<div id="datatable-content" class="datatable-content"></div>
|
|
75
|
+
|
|
76
|
+
<!-- Selection info -->
|
|
77
|
+
<div id="datatable-selection-info" class="datatable-selection-info">
|
|
78
|
+
<span class="selected-count">0</span> columns selected
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
<!-- Resize handle -->
|
|
82
|
+
<div class="datatable-resize" id="datatable-resize"></div>
|
|
83
|
+
</div>
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
# For backward compatibility
|
|
88
|
+
HTML_DATATABLE_PANEL = get_html_datatable_panel()
|
|
89
|
+
|
|
90
|
+
__all__ = ["HTML_DATATABLE_PANEL", "get_html_datatable_panel"]
|
|
91
|
+
|
|
92
|
+
# EOF
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"""JavaScript modules for the figure editor.
|
|
4
4
|
|
|
5
5
|
This package contains modular JavaScript organized by functionality:
|
|
6
|
+
- _accordion.py: Panel collapse/expand with state persistence
|
|
6
7
|
- _api.py: API calls (save, load, update, download)
|
|
7
8
|
- _colors.py: Color presets and conversion utilities
|
|
8
9
|
- _core.py: State variables and initialization
|
|
@@ -13,32 +14,51 @@ This package contains modular JavaScript organized by functionality:
|
|
|
13
14
|
- _inspector.py: Element inspector debugging
|
|
14
15
|
- _labels.py: Label inputs and axis/legend controls
|
|
15
16
|
- _modals.py: Theme and shortcuts modals
|
|
17
|
+
- _panel_snap.py: Panel snapping (grid, edge, center alignment)
|
|
16
18
|
- _panel_drag.py: Panel drag-to-move (click+drag on empty panel area)
|
|
19
|
+
- _panel_resize.py: Panel divider drag-to-resize
|
|
17
20
|
- _legend_drag.py: Legend drag-to-move (click+drag on legend)
|
|
18
21
|
- _panel_position.py: Panel position editing (left, bottom, width, height)
|
|
22
|
+
- _multi_select.py: Multi-selection with Ctrl+Click
|
|
19
23
|
- _overlays.py: Measurement overlays (ruler, grid, columns)
|
|
24
|
+
- _region_select.py: Region/marquee selection by dragging rectangle
|
|
20
25
|
- _selection.py: Selection drawing and property sync
|
|
21
26
|
- _tabs.py: Tab navigation (Figure/Axis/Element)
|
|
22
27
|
- _view_mode.py: View mode management (all/selected)
|
|
23
28
|
- _zoom.py: Zoom/pan functionality
|
|
29
|
+
- _undo_redo.py: Undo/redo history (Ctrl+Z, Ctrl+Shift+Z)
|
|
24
30
|
"""
|
|
25
31
|
|
|
32
|
+
from ._accordion import SCRIPTS_ACCORDION
|
|
33
|
+
from ._annotation_drag import SCRIPTS_ANNOTATION_DRAG
|
|
26
34
|
from ._api import SCRIPTS_API
|
|
35
|
+
from ._canvas_context_menu import JS_CANVAS_CONTEXT_MENU
|
|
36
|
+
from ._captions import SCRIPTS_CAPTIONS
|
|
27
37
|
from ._colors import SCRIPTS_COLORS
|
|
28
38
|
from ._core import SCRIPTS_CORE
|
|
39
|
+
from ._datatable import SCRIPTS_DATATABLE
|
|
29
40
|
from ._debug_snapshot import SCRIPTS_DEBUG_SNAPSHOT
|
|
30
41
|
from ._element_editor import SCRIPTS_ELEMENT_EDITOR
|
|
31
42
|
from ._files import SCRIPTS_FILES
|
|
43
|
+
from ._files_context_menu import JS_FILES_CONTEXT_MENU
|
|
32
44
|
from ._hitmap import SCRIPTS_HITMAP
|
|
45
|
+
from ._image_drop import SCRIPTS_IMAGE_DROP
|
|
33
46
|
from ._inspector import SCRIPTS_INSPECTOR
|
|
34
47
|
from ._labels import SCRIPTS_LABELS
|
|
35
48
|
from ._legend_drag import SCRIPTS_LEGEND_DRAG
|
|
36
49
|
from ._modals import SCRIPTS_MODALS
|
|
50
|
+
from ._multi_select import SCRIPTS_MULTI_SELECT
|
|
37
51
|
from ._overlays import SCRIPTS_OVERLAYS
|
|
38
52
|
from ._panel_drag import SCRIPTS_PANEL_DRAG
|
|
53
|
+
from ._panel_drag_snapshot import SCRIPTS_PANEL_DRAG_SNAPSHOT
|
|
39
54
|
from ._panel_position import SCRIPTS_PANEL_POSITION
|
|
55
|
+
from ._panel_resize import SCRIPTS_PANEL_RESIZE
|
|
56
|
+
from ._panel_snap import SCRIPTS_PANEL_SNAP
|
|
57
|
+
from ._region_select import SCRIPTS_REGION_SELECT
|
|
40
58
|
from ._selection import SCRIPTS_SELECTION
|
|
59
|
+
from ._sync import SCRIPTS_SYNC
|
|
41
60
|
from ._tabs import SCRIPTS_TABS
|
|
61
|
+
from ._undo_redo import SCRIPTS_UNDO_REDO
|
|
42
62
|
from ._view_mode import SCRIPTS_VIEW_MODE
|
|
43
63
|
from ._zoom import SCRIPTS_ZOOM
|
|
44
64
|
|
|
@@ -52,8 +72,11 @@ SCRIPTS = (
|
|
|
52
72
|
+ SCRIPTS_COLORS
|
|
53
73
|
+ SCRIPTS_HITMAP
|
|
54
74
|
+ SCRIPTS_SELECTION
|
|
75
|
+
+ SCRIPTS_MULTI_SELECT
|
|
76
|
+
+ SCRIPTS_REGION_SELECT
|
|
55
77
|
+ SCRIPTS_ELEMENT_EDITOR
|
|
56
78
|
+ SCRIPTS_LABELS
|
|
79
|
+
+ SCRIPTS_CAPTIONS
|
|
57
80
|
+ SCRIPTS_API
|
|
58
81
|
+ SCRIPTS_MODALS
|
|
59
82
|
+ SCRIPTS_ZOOM
|
|
@@ -61,8 +84,19 @@ SCRIPTS = (
|
|
|
61
84
|
+ SCRIPTS_INSPECTOR
|
|
62
85
|
+ SCRIPTS_FILES
|
|
63
86
|
+ SCRIPTS_PANEL_POSITION
|
|
87
|
+
+ SCRIPTS_PANEL_SNAP
|
|
88
|
+
+ SCRIPTS_PANEL_DRAG_SNAPSHOT
|
|
64
89
|
+ SCRIPTS_PANEL_DRAG
|
|
90
|
+
+ SCRIPTS_PANEL_RESIZE
|
|
91
|
+
+ SCRIPTS_ACCORDION
|
|
65
92
|
+ SCRIPTS_LEGEND_DRAG
|
|
93
|
+
+ SCRIPTS_ANNOTATION_DRAG
|
|
94
|
+
+ SCRIPTS_IMAGE_DROP
|
|
95
|
+
+ SCRIPTS_UNDO_REDO
|
|
96
|
+
+ SCRIPTS_DATATABLE
|
|
97
|
+
+ SCRIPTS_SYNC
|
|
98
|
+
+ JS_CANVAS_CONTEXT_MENU
|
|
99
|
+
+ JS_FILES_CONTEXT_MENU
|
|
66
100
|
)
|
|
67
101
|
|
|
68
102
|
|
|
@@ -75,22 +109,34 @@ def get_all_scripts():
|
|
|
75
109
|
Mapping of script name to script content.
|
|
76
110
|
"""
|
|
77
111
|
return {
|
|
112
|
+
"accordion": SCRIPTS_ACCORDION,
|
|
113
|
+
"annotation_drag": SCRIPTS_ANNOTATION_DRAG,
|
|
78
114
|
"api": SCRIPTS_API,
|
|
115
|
+
"captions": SCRIPTS_CAPTIONS,
|
|
79
116
|
"colors": SCRIPTS_COLORS,
|
|
80
117
|
"core": SCRIPTS_CORE,
|
|
118
|
+
"datatable": SCRIPTS_DATATABLE,
|
|
81
119
|
"debug_snapshot": SCRIPTS_DEBUG_SNAPSHOT,
|
|
82
120
|
"element_editor": SCRIPTS_ELEMENT_EDITOR,
|
|
83
121
|
"files": SCRIPTS_FILES,
|
|
84
122
|
"hitmap": SCRIPTS_HITMAP,
|
|
123
|
+
"image_drop": SCRIPTS_IMAGE_DROP,
|
|
85
124
|
"inspector": SCRIPTS_INSPECTOR,
|
|
86
125
|
"labels": SCRIPTS_LABELS,
|
|
87
126
|
"legend_drag": SCRIPTS_LEGEND_DRAG,
|
|
88
127
|
"modals": SCRIPTS_MODALS,
|
|
89
128
|
"overlays": SCRIPTS_OVERLAYS,
|
|
129
|
+
"multi_select": SCRIPTS_MULTI_SELECT,
|
|
90
130
|
"panel_drag": SCRIPTS_PANEL_DRAG,
|
|
131
|
+
"panel_drag_snapshot": SCRIPTS_PANEL_DRAG_SNAPSHOT,
|
|
91
132
|
"panel_position": SCRIPTS_PANEL_POSITION,
|
|
133
|
+
"panel_resize": SCRIPTS_PANEL_RESIZE,
|
|
134
|
+
"panel_snap": SCRIPTS_PANEL_SNAP,
|
|
135
|
+
"region_select": SCRIPTS_REGION_SELECT,
|
|
92
136
|
"selection": SCRIPTS_SELECTION,
|
|
137
|
+
"sync": SCRIPTS_SYNC,
|
|
93
138
|
"tabs": SCRIPTS_TABS,
|
|
139
|
+
"undo_redo": SCRIPTS_UNDO_REDO,
|
|
94
140
|
"view_mode": SCRIPTS_VIEW_MODE,
|
|
95
141
|
"zoom": SCRIPTS_ZOOM,
|
|
96
142
|
}
|
|
@@ -98,22 +144,34 @@ def get_all_scripts():
|
|
|
98
144
|
|
|
99
145
|
__all__ = [
|
|
100
146
|
"SCRIPTS",
|
|
147
|
+
"SCRIPTS_ACCORDION",
|
|
148
|
+
"SCRIPTS_ANNOTATION_DRAG",
|
|
101
149
|
"SCRIPTS_API",
|
|
150
|
+
"SCRIPTS_CAPTIONS",
|
|
102
151
|
"SCRIPTS_COLORS",
|
|
103
152
|
"SCRIPTS_CORE",
|
|
153
|
+
"SCRIPTS_DATATABLE",
|
|
104
154
|
"SCRIPTS_DEBUG_SNAPSHOT",
|
|
105
155
|
"SCRIPTS_ELEMENT_EDITOR",
|
|
106
156
|
"SCRIPTS_FILES",
|
|
107
157
|
"SCRIPTS_HITMAP",
|
|
158
|
+
"SCRIPTS_IMAGE_DROP",
|
|
108
159
|
"SCRIPTS_INSPECTOR",
|
|
109
160
|
"SCRIPTS_LABELS",
|
|
110
161
|
"SCRIPTS_LEGEND_DRAG",
|
|
111
162
|
"SCRIPTS_MODALS",
|
|
163
|
+
"SCRIPTS_MULTI_SELECT",
|
|
112
164
|
"SCRIPTS_OVERLAYS",
|
|
113
165
|
"SCRIPTS_PANEL_DRAG",
|
|
166
|
+
"SCRIPTS_PANEL_DRAG_SNAPSHOT",
|
|
114
167
|
"SCRIPTS_PANEL_POSITION",
|
|
168
|
+
"SCRIPTS_PANEL_RESIZE",
|
|
169
|
+
"SCRIPTS_PANEL_SNAP",
|
|
170
|
+
"SCRIPTS_REGION_SELECT",
|
|
115
171
|
"SCRIPTS_SELECTION",
|
|
172
|
+
"SCRIPTS_SYNC",
|
|
116
173
|
"SCRIPTS_TABS",
|
|
174
|
+
"SCRIPTS_UNDO_REDO",
|
|
117
175
|
"SCRIPTS_VIEW_MODE",
|
|
118
176
|
"SCRIPTS_ZOOM",
|
|
119
177
|
"get_all_scripts",
|