figrecipe 0.6.0__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.
Files changed (269) hide show
  1. figrecipe/__init__.py +161 -1030
  2. figrecipe/__main__.py +12 -0
  3. figrecipe/_api/__init__.py +48 -0
  4. figrecipe/_api/_extract.py +108 -0
  5. figrecipe/_api/_notebook.py +61 -0
  6. figrecipe/_api/_panel.py +113 -0
  7. figrecipe/_api/_save.py +287 -0
  8. figrecipe/_api/_seaborn_proxy.py +34 -0
  9. figrecipe/_api/_style_manager.py +153 -0
  10. figrecipe/_api/_subplots.py +333 -0
  11. figrecipe/_api/_validate.py +82 -0
  12. figrecipe/_cli/__init__.py +7 -0
  13. figrecipe/_cli/_compose.py +87 -0
  14. figrecipe/_cli/_convert.py +117 -0
  15. figrecipe/_cli/_crop.py +82 -0
  16. figrecipe/_cli/_edit.py +70 -0
  17. figrecipe/_cli/_extract.py +128 -0
  18. figrecipe/_cli/_fonts.py +47 -0
  19. figrecipe/_cli/_info.py +67 -0
  20. figrecipe/_cli/_main.py +58 -0
  21. figrecipe/_cli/_reproduce.py +79 -0
  22. figrecipe/_cli/_style.py +77 -0
  23. figrecipe/_cli/_validate.py +66 -0
  24. figrecipe/_cli/_version.py +50 -0
  25. figrecipe/_composition/__init__.py +32 -0
  26. figrecipe/_composition/_alignment.py +452 -0
  27. figrecipe/_composition/_compose.py +179 -0
  28. figrecipe/_composition/_import_axes.py +127 -0
  29. figrecipe/_composition/_visibility.py +125 -0
  30. figrecipe/_dev/__init__.py +4 -93
  31. figrecipe/_dev/_plotters.py +76 -0
  32. figrecipe/_dev/_run_demos.py +56 -0
  33. figrecipe/_dev/browser/__init__.py +69 -0
  34. figrecipe/_dev/browser/_audio.py +240 -0
  35. figrecipe/_dev/browser/_caption.py +356 -0
  36. figrecipe/_dev/browser/_click_effect.py +146 -0
  37. figrecipe/_dev/browser/_cursor.py +196 -0
  38. figrecipe/_dev/browser/_highlight.py +105 -0
  39. figrecipe/_dev/browser/_narration.py +237 -0
  40. figrecipe/_dev/browser/_recorder.py +446 -0
  41. figrecipe/_dev/browser/_utils.py +178 -0
  42. figrecipe/_dev/browser/_video_trim/__init__.py +152 -0
  43. figrecipe/_dev/browser/_video_trim/_detection.py +223 -0
  44. figrecipe/_dev/browser/_video_trim/_markers.py +140 -0
  45. figrecipe/_dev/demo_plotters/__init__.py +35 -166
  46. figrecipe/_dev/demo_plotters/_categories.py +81 -0
  47. figrecipe/_dev/demo_plotters/_figure_creators.py +119 -0
  48. figrecipe/_dev/demo_plotters/_helpers.py +31 -0
  49. figrecipe/_dev/demo_plotters/_registry.py +50 -0
  50. figrecipe/_dev/demo_plotters/bar_categorical/__init__.py +4 -0
  51. figrecipe/_dev/demo_plotters/contour_surface/__init__.py +4 -0
  52. figrecipe/_dev/demo_plotters/distribution/__init__.py +4 -0
  53. figrecipe/_dev/demo_plotters/image_matrix/__init__.py +4 -0
  54. figrecipe/_dev/demo_plotters/line_curve/__init__.py +4 -0
  55. figrecipe/_dev/demo_plotters/{plot_plot.py → line_curve/plot_plot.py} +3 -2
  56. figrecipe/_dev/demo_plotters/scatter_points/__init__.py +4 -0
  57. figrecipe/_dev/demo_plotters/special/__init__.py +4 -0
  58. figrecipe/_dev/demo_plotters/{plot_pie.py → special/plot_pie.py} +5 -1
  59. figrecipe/_dev/demo_plotters/spectral_signal/__init__.py +4 -0
  60. figrecipe/_dev/demo_plotters/vector_flow/__init__.py +4 -0
  61. figrecipe/_editor/__init__.py +61 -13
  62. figrecipe/_editor/_bbox/__init__.py +43 -0
  63. figrecipe/_editor/_bbox/_collections.py +177 -0
  64. figrecipe/_editor/_bbox/_elements.py +159 -0
  65. figrecipe/_editor/_bbox/_extract.py +402 -0
  66. figrecipe/_editor/_bbox/_extract_axes.py +370 -0
  67. figrecipe/_editor/_bbox/_extract_text.py +466 -0
  68. figrecipe/_editor/_bbox/_lines.py +173 -0
  69. figrecipe/_editor/_bbox/_transforms.py +146 -0
  70. figrecipe/_editor/_call_overrides.py +183 -0
  71. figrecipe/_editor/_datatable_plot_handlers.py +249 -0
  72. figrecipe/_editor/_figure_layout.py +211 -0
  73. figrecipe/_editor/_flask_app.py +200 -1030
  74. figrecipe/_editor/_helpers.py +251 -0
  75. figrecipe/_editor/_hitmap/__init__.py +76 -0
  76. figrecipe/_editor/_hitmap/_artists/__init__.py +21 -0
  77. figrecipe/_editor/_hitmap/_artists/_collections.py +345 -0
  78. figrecipe/_editor/_hitmap/_artists/_images.py +68 -0
  79. figrecipe/_editor/_hitmap/_artists/_lines.py +107 -0
  80. figrecipe/_editor/_hitmap/_artists/_patches.py +163 -0
  81. figrecipe/_editor/_hitmap/_artists/_text.py +190 -0
  82. figrecipe/_editor/_hitmap/_colors.py +181 -0
  83. figrecipe/_editor/_hitmap/_detect.py +194 -0
  84. figrecipe/_editor/_hitmap/_restore.py +154 -0
  85. figrecipe/_editor/_hitmap_main.py +182 -0
  86. figrecipe/_editor/_overrides.py +4 -1
  87. figrecipe/_editor/_plot_types_registry.py +190 -0
  88. figrecipe/_editor/_preferences.py +135 -0
  89. figrecipe/_editor/_render_overrides.py +507 -0
  90. figrecipe/_editor/_renderer.py +81 -186
  91. figrecipe/_editor/_routes_annotation.py +114 -0
  92. figrecipe/_editor/_routes_axis.py +482 -0
  93. figrecipe/_editor/_routes_captions.py +130 -0
  94. figrecipe/_editor/_routes_composition.py +270 -0
  95. figrecipe/_editor/_routes_core.py +126 -0
  96. figrecipe/_editor/_routes_datatable.py +364 -0
  97. figrecipe/_editor/_routes_element.py +335 -0
  98. figrecipe/_editor/_routes_files.py +443 -0
  99. figrecipe/_editor/_routes_image.py +200 -0
  100. figrecipe/_editor/_routes_snapshot.py +94 -0
  101. figrecipe/_editor/_routes_style.py +243 -0
  102. figrecipe/_editor/_templates/__init__.py +116 -1
  103. figrecipe/_editor/_templates/_html.py +154 -64
  104. figrecipe/_editor/_templates/_html_components/__init__.py +13 -0
  105. figrecipe/_editor/_templates/_html_components/_composition_toolbar.py +79 -0
  106. figrecipe/_editor/_templates/_html_components/_file_browser.py +41 -0
  107. figrecipe/_editor/_templates/_html_datatable.py +92 -0
  108. figrecipe/_editor/_templates/_scripts/__init__.py +178 -0
  109. figrecipe/_editor/_templates/_scripts/_accordion.py +328 -0
  110. figrecipe/_editor/_templates/_scripts/_annotation_drag.py +504 -0
  111. figrecipe/_editor/_templates/_scripts/_api.py +228 -0
  112. figrecipe/_editor/_templates/_scripts/_canvas_context_menu.py +182 -0
  113. figrecipe/_editor/_templates/_scripts/_captions.py +231 -0
  114. figrecipe/_editor/_templates/_scripts/_colors.py +485 -0
  115. figrecipe/_editor/_templates/_scripts/_composition.py +283 -0
  116. figrecipe/_editor/_templates/_scripts/_core.py +493 -0
  117. figrecipe/_editor/_templates/_scripts/_datatable/__init__.py +59 -0
  118. figrecipe/_editor/_templates/_scripts/_datatable/_cell_edit.py +97 -0
  119. figrecipe/_editor/_templates/_scripts/_datatable/_clipboard.py +164 -0
  120. figrecipe/_editor/_templates/_scripts/_datatable/_context_menu.py +221 -0
  121. figrecipe/_editor/_templates/_scripts/_datatable/_core.py +150 -0
  122. figrecipe/_editor/_templates/_scripts/_datatable/_editable.py +511 -0
  123. figrecipe/_editor/_templates/_scripts/_datatable/_import.py +161 -0
  124. figrecipe/_editor/_templates/_scripts/_datatable/_plot.py +261 -0
  125. figrecipe/_editor/_templates/_scripts/_datatable/_selection.py +438 -0
  126. figrecipe/_editor/_templates/_scripts/_datatable/_table.py +256 -0
  127. figrecipe/_editor/_templates/_scripts/_datatable/_tabs.py +354 -0
  128. figrecipe/_editor/_templates/_scripts/_debug_snapshot.py +186 -0
  129. figrecipe/_editor/_templates/_scripts/_element_editor.py +325 -0
  130. figrecipe/_editor/_templates/_scripts/_files.py +429 -0
  131. figrecipe/_editor/_templates/_scripts/_files_context_menu.py +240 -0
  132. figrecipe/_editor/_templates/_scripts/_hitmap.py +512 -0
  133. figrecipe/_editor/_templates/_scripts/_image_drop.py +428 -0
  134. figrecipe/_editor/_templates/_scripts/_inspector.py +315 -0
  135. figrecipe/_editor/_templates/_scripts/_labels.py +464 -0
  136. figrecipe/_editor/_templates/_scripts/_legend_drag.py +270 -0
  137. figrecipe/_editor/_templates/_scripts/_modals.py +226 -0
  138. figrecipe/_editor/_templates/_scripts/_multi_select.py +198 -0
  139. figrecipe/_editor/_templates/_scripts/_overlays.py +292 -0
  140. figrecipe/_editor/_templates/_scripts/_panel_drag.py +505 -0
  141. figrecipe/_editor/_templates/_scripts/_panel_drag_snapshot.py +33 -0
  142. figrecipe/_editor/_templates/_scripts/_panel_position.py +463 -0
  143. figrecipe/_editor/_templates/_scripts/_panel_resize.py +230 -0
  144. figrecipe/_editor/_templates/_scripts/_panel_snap.py +307 -0
  145. figrecipe/_editor/_templates/_scripts/_region_select.py +255 -0
  146. figrecipe/_editor/_templates/_scripts/_selection.py +244 -0
  147. figrecipe/_editor/_templates/_scripts/_sync.py +242 -0
  148. figrecipe/_editor/_templates/_scripts/_tabs.py +89 -0
  149. figrecipe/_editor/_templates/_scripts/_undo_redo.py +348 -0
  150. figrecipe/_editor/_templates/_scripts/_view_mode.py +107 -0
  151. figrecipe/_editor/_templates/_scripts/_zoom.py +212 -0
  152. figrecipe/_editor/_templates/_styles/__init__.py +78 -0
  153. figrecipe/_editor/_templates/_styles/_base.py +111 -0
  154. figrecipe/_editor/_templates/_styles/_buttons.py +327 -0
  155. figrecipe/_editor/_templates/_styles/_color_input.py +123 -0
  156. figrecipe/_editor/_templates/_styles/_composition.py +87 -0
  157. figrecipe/_editor/_templates/_styles/_controls.py +430 -0
  158. figrecipe/_editor/_templates/_styles/_datatable/__init__.py +40 -0
  159. figrecipe/_editor/_templates/_styles/_datatable/_editable.py +203 -0
  160. figrecipe/_editor/_templates/_styles/_datatable/_panel.py +268 -0
  161. figrecipe/_editor/_templates/_styles/_datatable/_table.py +479 -0
  162. figrecipe/_editor/_templates/_styles/_datatable/_toolbar.py +384 -0
  163. figrecipe/_editor/_templates/_styles/_datatable/_vars.py +123 -0
  164. figrecipe/_editor/_templates/_styles/_dynamic_props.py +144 -0
  165. figrecipe/_editor/_templates/_styles/_file_browser.py +466 -0
  166. figrecipe/_editor/_templates/_styles/_forms.py +224 -0
  167. figrecipe/_editor/_templates/_styles/_hitmap.py +191 -0
  168. figrecipe/_editor/_templates/_styles/_inspector.py +90 -0
  169. figrecipe/_editor/_templates/_styles/_labels.py +118 -0
  170. figrecipe/_editor/_templates/_styles/_modals.py +127 -0
  171. figrecipe/_editor/_templates/_styles/_overlays.py +130 -0
  172. figrecipe/_editor/_templates/_styles/_preview.py +430 -0
  173. figrecipe/_editor/_templates/_styles/_selection.py +73 -0
  174. figrecipe/_editor/_templates/_styles/_spinner.py +117 -0
  175. figrecipe/_editor/static/audio/click.mp3 +0 -0
  176. figrecipe/_editor/static/click.mp3 +0 -0
  177. figrecipe/_editor/static/icons/favicon.ico +0 -0
  178. figrecipe/_integrations/__init__.py +17 -0
  179. figrecipe/_integrations/_scitex_stats.py +298 -0
  180. figrecipe/_params/_DECORATION_METHODS.py +8 -0
  181. figrecipe/_recorder.py +63 -109
  182. figrecipe/_recorder_utils.py +124 -0
  183. figrecipe/_reproducer/__init__.py +18 -0
  184. figrecipe/_reproducer/_core.py +509 -0
  185. figrecipe/_reproducer/_custom_plots.py +279 -0
  186. figrecipe/_reproducer/_seaborn.py +100 -0
  187. figrecipe/_reproducer/_violin.py +186 -0
  188. figrecipe/_signatures/_kwargs.py +273 -0
  189. figrecipe/_signatures/_loader.py +21 -423
  190. figrecipe/_signatures/_parsing.py +147 -0
  191. figrecipe/_utils/__init__.py +3 -0
  192. figrecipe/_utils/_bundle.py +205 -0
  193. figrecipe/_wrappers/_axes.py +252 -895
  194. figrecipe/_wrappers/_axes_helpers.py +136 -0
  195. figrecipe/_wrappers/_axes_plots.py +418 -0
  196. figrecipe/_wrappers/_axes_seaborn.py +157 -0
  197. figrecipe/_wrappers/_caption_generator.py +218 -0
  198. figrecipe/_wrappers/_figure.py +188 -1
  199. figrecipe/_wrappers/_panel_labels.py +127 -0
  200. figrecipe/_wrappers/_plot_helpers.py +143 -0
  201. figrecipe/_wrappers/_stat_annotation.py +274 -0
  202. figrecipe/_wrappers/_violin_helpers.py +180 -0
  203. figrecipe/styles/__init__.py +8 -6
  204. figrecipe/styles/_dotdict.py +72 -0
  205. figrecipe/styles/_finalize.py +134 -0
  206. figrecipe/styles/_fonts.py +77 -0
  207. figrecipe/styles/_kwargs_converter.py +178 -0
  208. figrecipe/styles/_plot_styles.py +209 -0
  209. figrecipe/styles/_style_applier.py +42 -480
  210. figrecipe/styles/_style_loader.py +16 -192
  211. figrecipe/styles/_themes.py +151 -0
  212. figrecipe/styles/presets/MATPLOTLIB.yaml +2 -1
  213. figrecipe/styles/presets/SCITEX.yaml +40 -28
  214. figrecipe-0.9.0.dist-info/METADATA +427 -0
  215. figrecipe-0.9.0.dist-info/RECORD +277 -0
  216. figrecipe-0.9.0.dist-info/entry_points.txt +2 -0
  217. figrecipe/_editor/_bbox.py +0 -978
  218. figrecipe/_editor/_hitmap.py +0 -937
  219. figrecipe/_editor/_templates/_scripts.py +0 -2778
  220. figrecipe/_editor/_templates/_styles.py +0 -1326
  221. figrecipe/_reproducer.py +0 -975
  222. figrecipe-0.6.0.dist-info/METADATA +0 -394
  223. figrecipe-0.6.0.dist-info/RECORD +0 -90
  224. /figrecipe/_dev/demo_plotters/{plot_bar.py → bar_categorical/plot_bar.py} +0 -0
  225. /figrecipe/_dev/demo_plotters/{plot_barh.py → bar_categorical/plot_barh.py} +0 -0
  226. /figrecipe/_dev/demo_plotters/{plot_contour.py → contour_surface/plot_contour.py} +0 -0
  227. /figrecipe/_dev/demo_plotters/{plot_contourf.py → contour_surface/plot_contourf.py} +0 -0
  228. /figrecipe/_dev/demo_plotters/{plot_tricontour.py → contour_surface/plot_tricontour.py} +0 -0
  229. /figrecipe/_dev/demo_plotters/{plot_tricontourf.py → contour_surface/plot_tricontourf.py} +0 -0
  230. /figrecipe/_dev/demo_plotters/{plot_tripcolor.py → contour_surface/plot_tripcolor.py} +0 -0
  231. /figrecipe/_dev/demo_plotters/{plot_triplot.py → contour_surface/plot_triplot.py} +0 -0
  232. /figrecipe/_dev/demo_plotters/{plot_boxplot.py → distribution/plot_boxplot.py} +0 -0
  233. /figrecipe/_dev/demo_plotters/{plot_ecdf.py → distribution/plot_ecdf.py} +0 -0
  234. /figrecipe/_dev/demo_plotters/{plot_hist.py → distribution/plot_hist.py} +0 -0
  235. /figrecipe/_dev/demo_plotters/{plot_hist2d.py → distribution/plot_hist2d.py} +0 -0
  236. /figrecipe/_dev/demo_plotters/{plot_violinplot.py → distribution/plot_violinplot.py} +0 -0
  237. /figrecipe/_dev/demo_plotters/{plot_hexbin.py → image_matrix/plot_hexbin.py} +0 -0
  238. /figrecipe/_dev/demo_plotters/{plot_imshow.py → image_matrix/plot_imshow.py} +0 -0
  239. /figrecipe/_dev/demo_plotters/{plot_matshow.py → image_matrix/plot_matshow.py} +0 -0
  240. /figrecipe/_dev/demo_plotters/{plot_pcolor.py → image_matrix/plot_pcolor.py} +0 -0
  241. /figrecipe/_dev/demo_plotters/{plot_pcolormesh.py → image_matrix/plot_pcolormesh.py} +0 -0
  242. /figrecipe/_dev/demo_plotters/{plot_spy.py → image_matrix/plot_spy.py} +0 -0
  243. /figrecipe/_dev/demo_plotters/{plot_errorbar.py → line_curve/plot_errorbar.py} +0 -0
  244. /figrecipe/_dev/demo_plotters/{plot_fill.py → line_curve/plot_fill.py} +0 -0
  245. /figrecipe/_dev/demo_plotters/{plot_fill_between.py → line_curve/plot_fill_between.py} +0 -0
  246. /figrecipe/_dev/demo_plotters/{plot_fill_betweenx.py → line_curve/plot_fill_betweenx.py} +0 -0
  247. /figrecipe/_dev/demo_plotters/{plot_stackplot.py → line_curve/plot_stackplot.py} +0 -0
  248. /figrecipe/_dev/demo_plotters/{plot_stairs.py → line_curve/plot_stairs.py} +0 -0
  249. /figrecipe/_dev/demo_plotters/{plot_step.py → line_curve/plot_step.py} +0 -0
  250. /figrecipe/_dev/demo_plotters/{plot_scatter.py → scatter_points/plot_scatter.py} +0 -0
  251. /figrecipe/_dev/demo_plotters/{plot_eventplot.py → special/plot_eventplot.py} +0 -0
  252. /figrecipe/_dev/demo_plotters/{plot_loglog.py → special/plot_loglog.py} +0 -0
  253. /figrecipe/_dev/demo_plotters/{plot_semilogx.py → special/plot_semilogx.py} +0 -0
  254. /figrecipe/_dev/demo_plotters/{plot_semilogy.py → special/plot_semilogy.py} +0 -0
  255. /figrecipe/_dev/demo_plotters/{plot_stem.py → special/plot_stem.py} +0 -0
  256. /figrecipe/_dev/demo_plotters/{plot_acorr.py → spectral_signal/plot_acorr.py} +0 -0
  257. /figrecipe/_dev/demo_plotters/{plot_angle_spectrum.py → spectral_signal/plot_angle_spectrum.py} +0 -0
  258. /figrecipe/_dev/demo_plotters/{plot_cohere.py → spectral_signal/plot_cohere.py} +0 -0
  259. /figrecipe/_dev/demo_plotters/{plot_csd.py → spectral_signal/plot_csd.py} +0 -0
  260. /figrecipe/_dev/demo_plotters/{plot_magnitude_spectrum.py → spectral_signal/plot_magnitude_spectrum.py} +0 -0
  261. /figrecipe/_dev/demo_plotters/{plot_phase_spectrum.py → spectral_signal/plot_phase_spectrum.py} +0 -0
  262. /figrecipe/_dev/demo_plotters/{plot_psd.py → spectral_signal/plot_psd.py} +0 -0
  263. /figrecipe/_dev/demo_plotters/{plot_specgram.py → spectral_signal/plot_specgram.py} +0 -0
  264. /figrecipe/_dev/demo_plotters/{plot_xcorr.py → spectral_signal/plot_xcorr.py} +0 -0
  265. /figrecipe/_dev/demo_plotters/{plot_barbs.py → vector_flow/plot_barbs.py} +0 -0
  266. /figrecipe/_dev/demo_plotters/{plot_quiver.py → vector_flow/plot_quiver.py} +0 -0
  267. /figrecipe/_dev/demo_plotters/{plot_streamplot.py → vector_flow/plot_streamplot.py} +0 -0
  268. {figrecipe-0.6.0.dist-info → figrecipe-0.9.0.dist-info}/WHEEL +0 -0
  269. {figrecipe-0.6.0.dist-info → figrecipe-0.9.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """CSS styles for the figure editor.
4
+
5
+ This package contains modular CSS styles organized by component:
6
+ - base: CSS variables, reset, container
7
+ - preview: Preview panel, branding, zoom controls
8
+ - hitmap: Hitregion overlay shapes
9
+ - selection: Selection overlay shapes
10
+ - dynamic_props: Dynamic call properties panel
11
+ - controls: Controls panel, tabs, sections
12
+ - forms: Form elements and inputs
13
+ - buttons: Button styles, download dropdown
14
+ - color_input: Color picker components
15
+ - labels: Axis type toggle, label inputs, legend
16
+ - overlays: Ruler, grid, column overlays
17
+ - modals: Shortcuts modal, kbd styling
18
+ - inspector: Element inspector overlay
19
+ """
20
+
21
+ from ._base import STYLES_BASE
22
+ from ._buttons import STYLES_BUTTONS
23
+ from ._color_input import STYLES_COLOR_INPUT
24
+ from ._controls import STYLES_CONTROLS
25
+ from ._datatable import STYLES_DATATABLE
26
+ from ._dynamic_props import STYLES_DYNAMIC_PROPS
27
+ from ._file_browser import STYLES_FILE_BROWSER
28
+ from ._forms import STYLES_FORMS
29
+ from ._hitmap import STYLES_HITMAP
30
+ from ._inspector import STYLES_INSPECTOR
31
+ from ._labels import STYLES_LABELS
32
+ from ._modals import STYLES_MODALS
33
+ from ._overlays import STYLES_OVERLAYS
34
+ from ._preview import STYLES_PREVIEW
35
+ from ._selection import STYLES_SELECTION
36
+ from ._spinner import STYLES_SPINNER
37
+
38
+ # Combined STYLES constant for backward compatibility
39
+ STYLES = (
40
+ STYLES_BASE
41
+ + STYLES_FILE_BROWSER
42
+ + STYLES_PREVIEW
43
+ + STYLES_HITMAP
44
+ + STYLES_SELECTION
45
+ + STYLES_DYNAMIC_PROPS
46
+ + STYLES_CONTROLS
47
+ + STYLES_FORMS
48
+ + STYLES_BUTTONS
49
+ + STYLES_COLOR_INPUT
50
+ + STYLES_LABELS
51
+ + STYLES_OVERLAYS
52
+ + STYLES_MODALS
53
+ + STYLES_INSPECTOR
54
+ + STYLES_SPINNER
55
+ + STYLES_DATATABLE
56
+ )
57
+
58
+ __all__ = [
59
+ "STYLES",
60
+ "STYLES_BASE",
61
+ "STYLES_FILE_BROWSER",
62
+ "STYLES_PREVIEW",
63
+ "STYLES_HITMAP",
64
+ "STYLES_SELECTION",
65
+ "STYLES_DYNAMIC_PROPS",
66
+ "STYLES_CONTROLS",
67
+ "STYLES_FORMS",
68
+ "STYLES_BUTTONS",
69
+ "STYLES_COLOR_INPUT",
70
+ "STYLES_LABELS",
71
+ "STYLES_OVERLAYS",
72
+ "STYLES_MODALS",
73
+ "STYLES_INSPECTOR",
74
+ "STYLES_SPINNER",
75
+ "STYLES_DATATABLE",
76
+ ]
77
+
78
+ # EOF
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """Base CSS styles for the figure editor.
4
+
5
+ This module contains CSS for:
6
+ - CSS variables (light and dark theme)
7
+ - Reset and base styles
8
+ - Main container layout
9
+ """
10
+
11
+ STYLES_BASE = """
12
+ /* CSS Variables for theming */
13
+ :root {
14
+ --bg-primary: #ffffff;
15
+ --bg-secondary: #f5f5f5;
16
+ --bg-tertiary: #e8e8e8;
17
+ --text-primary: #1a1a1a;
18
+ --text-secondary: #666666;
19
+ --border-color: #d0d0d0;
20
+ --accent-color: #2563eb;
21
+ --accent-hover: #1d4ed8;
22
+ --success-color: #10b981;
23
+ --error-color: #ef4444;
24
+ --selection-color: rgba(37, 99, 235, 0.3);
25
+ /* Solid selection colors for tables (opaque, theme-aware) */
26
+ --cell-selected-bg: #dbeafe;
27
+ --cell-hover-bg: #f0f4f8;
28
+ --header-bg: #e8e8e8;
29
+ --header-input-bg: #f5f5f5;
30
+ --row-num-bg: #f0f0f0;
31
+ /* Variable-linked column colors (light mode) */
32
+ --var-linked-bg: #c7d9f0;
33
+ --var-linked-cell-bg: #e8f0fa;
34
+ /* Consistent panel header styling */
35
+ --panel-header-height: 42px;
36
+ --panel-header-bg: var(--bg-tertiary);
37
+ }
38
+
39
+ [data-theme="dark"] {
40
+ --bg-primary: #1a1a1a;
41
+ --bg-secondary: #252525;
42
+ --bg-tertiary: #333333;
43
+ --text-primary: #e8e8e8;
44
+ --text-secondary: #a0a0a0;
45
+ --border-color: #404040;
46
+ --accent-color: #3b82f6;
47
+ --accent-hover: #60a5fa;
48
+ --selection-color: rgba(59, 130, 246, 0.3);
49
+ /* Solid selection colors for tables (opaque, theme-aware) */
50
+ --cell-selected-bg: #1e3a5f;
51
+ --cell-hover-bg: #2a2a35;
52
+ --header-bg: #2a2a2a;
53
+ --header-input-bg: #333333;
54
+ --row-num-bg: #1e1e1e;
55
+ /* Variable-linked column colors (dark mode) */
56
+ --var-linked-bg: #2a4a6a;
57
+ --var-linked-cell-bg: #1a3045;
58
+ }
59
+
60
+ /* Reset and base */
61
+ * {
62
+ box-sizing: border-box;
63
+ margin: 0;
64
+ padding: 0;
65
+ }
66
+
67
+ body {
68
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
69
+ font-size: 14px;
70
+ background: var(--bg-primary);
71
+ color: var(--text-primary);
72
+ height: 100vh;
73
+ overflow: hidden;
74
+ }
75
+
76
+ /* Main container */
77
+ .editor-container {
78
+ display: flex;
79
+ height: 100vh;
80
+ }
81
+
82
+ /* Global scrollbar styling - thin and theme-responsive */
83
+ ::-webkit-scrollbar {
84
+ width: 6px;
85
+ height: 6px;
86
+ }
87
+
88
+ ::-webkit-scrollbar-track {
89
+ background: var(--bg-secondary);
90
+ border-radius: 3px;
91
+ }
92
+
93
+ ::-webkit-scrollbar-thumb {
94
+ background: var(--border-color);
95
+ border-radius: 3px;
96
+ }
97
+
98
+ ::-webkit-scrollbar-thumb:hover {
99
+ background: var(--text-secondary);
100
+ }
101
+
102
+ /* Firefox scrollbar */
103
+ * {
104
+ scrollbar-width: thin;
105
+ scrollbar-color: var(--border-color) var(--bg-secondary);
106
+ }
107
+ """
108
+
109
+ __all__ = ["STYLES_BASE"]
110
+
111
+ # EOF
@@ -0,0 +1,327 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """Button CSS styles for the figure editor.
4
+
5
+ This module contains CSS for:
6
+ - Base button styles
7
+ - Primary, secondary, warning buttons
8
+ - Theme toggle and style info
9
+ - Download dropdown
10
+ """
11
+
12
+ STYLES_BUTTONS = """
13
+ /* Buttons */
14
+ button {
15
+ padding: 8px 16px;
16
+ border: 1px solid var(--border-color);
17
+ border-radius: 4px;
18
+ background: var(--bg-primary);
19
+ color: var(--text-primary);
20
+ font-size: 13px;
21
+ cursor: pointer;
22
+ transition: all 0.2s;
23
+ }
24
+
25
+ button:hover {
26
+ background: var(--bg-secondary);
27
+ }
28
+
29
+ .btn-primary {
30
+ background: var(--accent-color);
31
+ border-color: var(--accent-color);
32
+ color: white;
33
+ }
34
+
35
+ .btn-primary:hover {
36
+ background: var(--accent-hover);
37
+ border-color: var(--accent-hover);
38
+ }
39
+
40
+ .btn-secondary {
41
+ background: var(--bg-secondary);
42
+ }
43
+
44
+ .btn-warning {
45
+ background: #f59e0b;
46
+ border-color: #f59e0b;
47
+ color: white;
48
+ }
49
+
50
+ .btn-warning:hover {
51
+ background: #d97706;
52
+ border-color: #d97706;
53
+ }
54
+
55
+ .style-info {
56
+ padding: 8px 16px;
57
+ background: var(--bg-secondary);
58
+ border-bottom: 1px solid var(--border-color);
59
+ font-size: 12px;
60
+ display: flex;
61
+ align-items: center;
62
+ gap: 8px;
63
+ flex-wrap: wrap;
64
+ }
65
+
66
+ .style-label {
67
+ color: var(--text-secondary);
68
+ }
69
+
70
+ .style-name {
71
+ color: var(--accent-color);
72
+ font-weight: 600;
73
+ font-family: monospace;
74
+ }
75
+
76
+ .theme-selector {
77
+ padding: 4px 8px;
78
+ border: 1px solid var(--border-color);
79
+ border-radius: 4px;
80
+ background: var(--bg-primary);
81
+ color: var(--accent-color);
82
+ font-weight: 600;
83
+ font-family: monospace;
84
+ font-size: 12px;
85
+ cursor: pointer;
86
+ }
87
+
88
+ .theme-selector:hover {
89
+ border-color: var(--accent-color);
90
+ }
91
+
92
+ .theme-selector:focus {
93
+ outline: none;
94
+ border-color: var(--accent-color);
95
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
96
+ }
97
+
98
+ .theme-actions {
99
+ display: flex;
100
+ gap: 4px;
101
+ margin-left: auto;
102
+ }
103
+
104
+ .btn-small {
105
+ padding: 4px 8px;
106
+ font-size: 11px;
107
+ border-radius: 3px;
108
+ }
109
+
110
+ /* Split dropdown for download button */
111
+ .download-dropdown {
112
+ position: relative;
113
+ display: flex;
114
+ }
115
+
116
+ .download-main {
117
+ border-radius: 4px 0 0 4px;
118
+ padding: 8px 16px;
119
+ font-weight: 500;
120
+ }
121
+
122
+ .download-toggle {
123
+ border-radius: 0 4px 4px 0;
124
+ padding: 8px 8px;
125
+ border-left: 1px solid rgba(255, 255, 255, 0.2);
126
+ font-size: 10px;
127
+ }
128
+
129
+ .download-menu {
130
+ display: none;
131
+ position: absolute;
132
+ top: 100%;
133
+ left: 0;
134
+ right: 0;
135
+ background: var(--bg-primary);
136
+ border: 1px solid var(--border-color);
137
+ border-radius: 4px;
138
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
139
+ z-index: 100;
140
+ margin-top: 4px;
141
+ overflow: hidden;
142
+ }
143
+
144
+ .download-menu.open {
145
+ display: block;
146
+ }
147
+
148
+ .download-option {
149
+ display: block;
150
+ width: 100%;
151
+ padding: 10px 16px;
152
+ text-align: left;
153
+ border: none;
154
+ background: transparent;
155
+ cursor: pointer;
156
+ font-size: 13px;
157
+ border-radius: 0;
158
+ }
159
+
160
+ .download-option:hover {
161
+ background: var(--bg-secondary);
162
+ }
163
+
164
+ .download-option.active {
165
+ background: var(--accent-color);
166
+ color: white;
167
+ }
168
+
169
+ .download-option.active:hover {
170
+ background: var(--accent-hover);
171
+ }
172
+
173
+ /* Legacy download buttons (kept for compatibility) */
174
+ .download-buttons {
175
+ display: flex;
176
+ gap: 8px;
177
+ }
178
+
179
+ .download-buttons button {
180
+ flex: 1;
181
+ }
182
+
183
+ /* Theme toggle button */
184
+ .btn-theme {
185
+ width: 36px;
186
+ height: 32px;
187
+ padding: 0;
188
+ font-size: 16px;
189
+ border: 1px solid var(--border-color);
190
+ background: var(--bg-secondary);
191
+ border-radius: 4px;
192
+ cursor: pointer;
193
+ transition: all 0.15s;
194
+ }
195
+
196
+ .btn-theme:hover {
197
+ background: var(--bg-tertiary);
198
+ border-color: var(--accent-color);
199
+ }
200
+
201
+ /* Icon buttons (Undo/Redo) */
202
+ .btn-icon {
203
+ width: 32px;
204
+ height: 32px;
205
+ padding: 0;
206
+ font-size: 16px;
207
+ border: 1px solid var(--border-color);
208
+ background: var(--bg-secondary);
209
+ border-radius: 4px;
210
+ cursor: pointer;
211
+ transition: all 0.15s;
212
+ }
213
+
214
+ .btn-icon:hover:not(:disabled) {
215
+ background: var(--bg-tertiary);
216
+ border-color: var(--accent-color);
217
+ }
218
+
219
+ .btn-icon:disabled {
220
+ opacity: 0.4;
221
+ cursor: not-allowed;
222
+ }
223
+
224
+ /* Context Menu Styles */
225
+ .canvas-context-menu,
226
+ .files-context-menu,
227
+ .datatable-context-menu {
228
+ position: fixed;
229
+ min-width: 180px;
230
+ background: var(--bg-primary);
231
+ border: 1px solid var(--border-color);
232
+ border-radius: 6px;
233
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
234
+ z-index: 10000;
235
+ padding: 4px 0;
236
+ font-size: 13px;
237
+ }
238
+
239
+ .context-menu-item {
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: space-between;
243
+ padding: 8px 12px;
244
+ cursor: pointer;
245
+ color: var(--text-primary);
246
+ transition: background 0.1s;
247
+ }
248
+
249
+ .context-menu-item:hover {
250
+ background: var(--bg-secondary);
251
+ }
252
+
253
+ .context-menu-item .shortcut {
254
+ font-size: 11px;
255
+ color: var(--text-tertiary);
256
+ margin-left: 16px;
257
+ }
258
+
259
+ .context-menu-divider {
260
+ height: 1px;
261
+ background: var(--border-color);
262
+ margin: 4px 8px;
263
+ }
264
+
265
+ .context-menu-danger {
266
+ color: #ef4444;
267
+ }
268
+
269
+ .context-menu-danger:hover {
270
+ background: rgba(239, 68, 68, 0.1);
271
+ }
272
+
273
+ /* Toast notification */
274
+ .toast-notification {
275
+ position: fixed;
276
+ bottom: 20px;
277
+ left: 50%;
278
+ transform: translateX(-50%);
279
+ padding: 10px 20px;
280
+ background: var(--bg-primary);
281
+ border: 1px solid var(--border-color);
282
+ border-radius: 6px;
283
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
284
+ z-index: 10001;
285
+ font-size: 13px;
286
+ }
287
+
288
+ .toast-notification.success {
289
+ border-color: var(--success-color);
290
+ }
291
+
292
+ .toast-notification.error {
293
+ border-color: #ef4444;
294
+ color: #ef4444;
295
+ }
296
+
297
+ /* Inline checkbox */
298
+ .checkbox-inline {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 6px;
302
+ cursor: pointer;
303
+ font-size: 12px;
304
+ color: var(--text-secondary);
305
+ margin-left: auto;
306
+ }
307
+
308
+ .checkbox-inline input {
309
+ width: 14px;
310
+ height: 14px;
311
+ cursor: pointer;
312
+ }
313
+
314
+ .checkbox-inline span {
315
+ user-select: none;
316
+ }
317
+
318
+ /* Loading state */
319
+ .loading {
320
+ opacity: 0.6;
321
+ pointer-events: none;
322
+ }
323
+ """
324
+
325
+ __all__ = ["STYLES_BUTTONS"]
326
+
327
+ # EOF
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """Color input component CSS styles for the figure editor.
4
+
5
+ This module contains CSS for:
6
+ - Color swatches and pickers
7
+ - RGB display
8
+ - Custom color inputs
9
+ """
10
+
11
+ STYLES_COLOR_INPUT = """
12
+ /* Color Input Component */
13
+ .color-input-wrapper {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 8px;
17
+ flex: 1;
18
+ flex-wrap: wrap;
19
+ }
20
+
21
+ .color-swatch {
22
+ width: 28px;
23
+ height: 28px;
24
+ border: 2px solid var(--border-color);
25
+ border-radius: 4px;
26
+ cursor: pointer;
27
+ flex-shrink: 0;
28
+ transition: border-color 0.15s;
29
+ }
30
+
31
+ .color-swatch:hover {
32
+ border-color: var(--accent-color);
33
+ }
34
+
35
+ .color-text-input {
36
+ flex: 1;
37
+ min-width: 80px;
38
+ }
39
+
40
+ .rgb-display {
41
+ font-size: 10px;
42
+ color: var(--text-secondary);
43
+ font-family: monospace;
44
+ white-space: nowrap;
45
+ }
46
+
47
+ .color-preset-select {
48
+ padding: 4px;
49
+ border: 1px solid var(--border-color);
50
+ border-radius: 4px;
51
+ background: var(--bg-primary);
52
+ font-size: 10px;
53
+ cursor: pointer;
54
+ }
55
+
56
+ .color-picker-hidden {
57
+ position: absolute;
58
+ opacity: 0;
59
+ pointer-events: none;
60
+ width: 0;
61
+ height: 0;
62
+ }
63
+
64
+ .color-custom-input {
65
+ padding: 4px 8px;
66
+ border: 1px solid var(--border-color);
67
+ border-radius: 4px;
68
+ background: var(--bg-primary);
69
+ font-size: 11px;
70
+ min-width: 100px;
71
+ }
72
+
73
+ .color-custom-input:focus {
74
+ outline: none;
75
+ border-color: var(--accent-color);
76
+ }
77
+
78
+ .color-select {
79
+ padding: 4px 6px;
80
+ border: 1px solid var(--border-color);
81
+ border-radius: 4px;
82
+ background: var(--bg-primary);
83
+ font-size: 11px;
84
+ min-width: 70px;
85
+ cursor: pointer;
86
+ }
87
+
88
+ /* Color List Component (for pie chart colors array) */
89
+ .color-list-wrapper {
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: 4px;
93
+ flex: 1;
94
+ }
95
+
96
+ .color-list-item {
97
+ display: flex;
98
+ align-items: center;
99
+ gap: 6px;
100
+ }
101
+
102
+ .color-list-index {
103
+ font-size: 10px;
104
+ color: var(--text-secondary);
105
+ min-width: 18px;
106
+ }
107
+
108
+ .color-swatch-small {
109
+ width: 18px;
110
+ height: 18px;
111
+ border-width: 1px;
112
+ }
113
+
114
+ .color-select-small {
115
+ padding: 2px 4px;
116
+ font-size: 10px;
117
+ min-width: 60px;
118
+ }
119
+ """
120
+
121
+ __all__ = ["STYLES_COLOR_INPUT"]
122
+
123
+ # EOF
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """CSS styles for composition toolbar."""
4
+
5
+ STYLES_COMPOSITION = """
6
+ /* Composition Toolbar */
7
+ .composition-toolbar {
8
+ display: flex;
9
+ align-items: center;
10
+ gap: 4px;
11
+ padding: 6px 12px;
12
+ background: var(--bg-secondary);
13
+ border-bottom: 1px solid var(--border-color);
14
+ flex-wrap: wrap;
15
+ }
16
+
17
+ .composition-toolbar .toolbar-label {
18
+ font-size: 11px;
19
+ color: var(--text-secondary);
20
+ margin-right: 4px;
21
+ }
22
+
23
+ .composition-toolbar .toolbar-separator {
24
+ width: 1px;
25
+ height: 20px;
26
+ background: var(--border-color);
27
+ margin: 0 6px;
28
+ }
29
+
30
+ .composition-toolbar .toolbar-btn {
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ gap: 4px;
35
+ padding: 4px 6px;
36
+ background: var(--bg-tertiary);
37
+ border: 1px solid var(--border-color);
38
+ border-radius: 4px;
39
+ color: var(--text-primary);
40
+ cursor: pointer;
41
+ transition: all 0.15s ease;
42
+ min-width: 28px;
43
+ height: 28px;
44
+ }
45
+
46
+ .composition-toolbar .toolbar-btn:hover {
47
+ background: var(--bg-hover);
48
+ border-color: var(--accent-color);
49
+ }
50
+
51
+ .composition-toolbar .toolbar-btn:active {
52
+ transform: scale(0.95);
53
+ }
54
+
55
+ .composition-toolbar .toolbar-btn svg {
56
+ width: 16px;
57
+ height: 16px;
58
+ }
59
+
60
+ .composition-toolbar .toolbar-btn-primary {
61
+ background: var(--accent-color);
62
+ color: white;
63
+ border-color: var(--accent-color);
64
+ padding: 4px 10px;
65
+ }
66
+
67
+ .composition-toolbar .toolbar-btn-primary:hover {
68
+ background: var(--accent-hover);
69
+ border-color: var(--accent-hover);
70
+ }
71
+
72
+ .composition-toolbar .toolbar-btn span {
73
+ font-size: 11px;
74
+ font-weight: 500;
75
+ }
76
+
77
+ /* Dark mode adjustments */
78
+ [data-theme="dark"] .composition-toolbar {
79
+ background: var(--bg-secondary);
80
+ }
81
+
82
+ [data-theme="dark"] .composition-toolbar .toolbar-btn {
83
+ background: var(--bg-tertiary);
84
+ }
85
+ """
86
+
87
+ __all__ = ["STYLES_COMPOSITION"]