inklet 4.0.0.dev11__tar.gz → 4.0.0.dev12__tar.gz
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.
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.github/workflows/publish.yml +2 -2
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/CHANGELOG.md +16 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/PKG-INFO +6 -6
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/README.md +5 -5
- inklet-4.0.0.dev12/docs/assets/guides/editor-studio.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/development-preview.md +25 -7
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/layout-editor.md +43 -12
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/roadmap.md +3 -1
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/pyproject.toml +1 -1
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/__init__.py +1 -1
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/layout_editor/__init__.py +4 -2
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/layout_editor/gestures.js +3 -3
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/layout_editor/page.html +29 -25
- inklet-4.0.0.dev12/src/inklet/experimental/layout_editor/workspace.css +156 -0
- inklet-4.0.0.dev12/src/inklet/experimental/layout_editor/workspace.js +71 -0
- inklet-4.0.0.dev12/tests/test_editor_workspace.py +45 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_gestures.py +2 -2
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/check_wheel.py +1 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_gallery.json +3 -3
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.gitattributes +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.github/workflows/checks.yml +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.gitignore +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.readthedocs.yaml +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/CONTRACT.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/CONTRIBUTING.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/LICENSE +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/THIRD_PARTY_NOTICES.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/api.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-icon.svg +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-logo-dark.svg +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-logo-mono.svg +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-logo.svg +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-wordmark.svg +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/examples/quickstart.pdf +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/examples/quickstart.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/examples/quickstart.svg +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/axes-and-scales-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/calibrated-volumes-3.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/channels-and-contours-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/composition-recipes-narrow.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/composition-recipes.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/composition-recipes.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-anchor.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-annotation.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-branch.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-broken-axis.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-callout.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-clipping.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-creases.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-custom-key.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-cutout.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-dates.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-dense.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-elbows.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-facets.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-fit-graph.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-flow-width.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-formula.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-graph.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-halo.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-heatmap.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-hole.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-inline-type.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-inset.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-labels.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-layers.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-letters.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-list.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-matrix.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-page-grid.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-polar.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-protein.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-routes.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-scene.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-series-key.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-span.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-swarm.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-text-path.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-toon.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-twin-axis.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-violin.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/data-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/data-3.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/dense-data-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/diagram-components-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/diagrams-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-3.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor-gestures.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor-labels.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor-styles.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-restored.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-restored.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-revised.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/oblique-sections-2.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-composition-narrow.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-composition.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-composition.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-quality-after.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-quality-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-band.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-bars.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-boxplot.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-errorbars.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-fill-between.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-fill.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-grouped-bars.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-hist.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-horizontal-bars.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-line-errors.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-line.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-markers.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-matrix.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-polar-curve.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-rose.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-scatter.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-series.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-stackarea.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-stacked-bars.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-step.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-swarm.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-violin.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plotting-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plotting-2.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-2.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-3.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-4.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/slabs-and-regions-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/three-images-1.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/three-images-2.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/biology.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-lines-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-lines-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/comparison.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-marker-shapes-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-marker-shapes.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-markers-display.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-markers-hardware.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-scene-viewer.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-viewer-display.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-viewer-export.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-viewer-study.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compositing-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compositing-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compositing-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/dense-scatter-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/diagram-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/diagram-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/engine-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/engine-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/fluorescence-biology.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/general-plots-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/general-plots.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/hatch-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/hatch-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/hatch-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/label-intensities-native.csv +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/label-intensities.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/lines-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/lines-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-batches.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-browser-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-browser-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/oblique-biology.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/real-biology.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/render-scene-caption.tex +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/revision.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/scenes-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/scenes-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/slab-biology.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/study.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-gpu-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-gpu-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-display.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-profile.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-window-after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-window-before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-window-display.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/after.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/before.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-quality.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-scatter.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-scatter.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-study.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines-masked.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/engineering-report-170mm.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/engineering-report.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/engineering-report.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/faceted-operations.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/faceted-operations.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-dashboard.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-dashboard.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-selection.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-selection.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/mesh-fields-170mm.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/mesh-fields.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/mesh-fields.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/region-shapes.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/region-shapes.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-analysis.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-analysis.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-report-160mm.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-report.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-report.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/scientific-report-170mm.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/scientific-report.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/scientific-report.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/statistical-views.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/statistical-views.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/table-inputs.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/table-inputs.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/time-series.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/time-series.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/transport-map.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/transport-map.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/visual-overrides.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-2019.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-2019.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-2019.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-revisions.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-revisions.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/axes-and-scales.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/bars-and-areas.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/biology-panels.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/blender-scenes.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/brand.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/browser-rendering.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/calibrated-volumes.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/channels-and-contours.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/cli.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/clipping.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compatibility.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compiled-scenes.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compiled-viewer.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/complex-scene.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compositing.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/composition-recipes.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/concepts.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/contours-streamlines.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/cookbook.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/data-revisions.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/data.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/dense-data.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/browser-backends.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/page_grid.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/v2.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/v4.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/diagram-components.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/diagram-engine.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/diagrams.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/distributions.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/engineering-report.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/example-library.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/examples.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/export-review.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/fluorescence-biology.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/general-plots.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/geographic-features.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/hatching.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/index.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/installation.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/interactive-documents.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/javascripts/inklet.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/label-intensities.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/label-measurements.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/layout-overrides.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/layout.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/lines-and-points.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/linked-facets.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/linked-maps.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/linked-plots.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/marker-batches.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/marker-culling.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/matrices.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/mesh-fields.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/microscopy-tiff.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/migration.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/oblique-biology.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/oblique-sections.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plot-quality.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plot-recipes.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plot-types.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plotting-engine.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plotting.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/polar-plots.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/presets.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/publication-plots.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/quickstart.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/real-biology.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/architecture-sketch.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/architecture.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/attractor.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/helix.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/interference.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/lattice.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/photonics.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/wave-packets.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/regional-report.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/release-checks.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/render-jobs.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/rendering-engine.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/research-preview.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/research-revision.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/research-study.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scene-annotations.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scene-paths.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scene-templates.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scientific-report.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/showcase.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/slab-biology.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/slabs-and-regions.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/statistical-views.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/stress20.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/stylesheets/code.css +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/stylesheets/inklet.css +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/table-inputs.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/three-images.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/time-series.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/troubleshooting.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/uncertainty.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v2.5.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v2.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v3.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v4-foundations.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/visual-editing.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/world-map.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/README.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/cells3d.lock.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/data.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/fluorescence.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/organelle.lock.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/requirements.txt +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology_panels.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/complex_lab_scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/lab_scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/occlusion_scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/organelle_scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/research_lab_views.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/broken_axis.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/clipping_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/compiled_marker_shapes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/compiled_scene_viewer.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/compositing_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/composition_recipes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/benchmark.csv +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/learning.csv +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/revenue.csv +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/sensor.csv +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/dense_scatter_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/diagram_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/engine_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/feature_flow.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/fluorescence_biology.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/gallery.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/general_plots.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/graph.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/hatch_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/hello_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/label_intensities.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/layout_editor.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/oblique_biology.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/panels.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/plot_composition.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/plot_engine_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/plot_quality_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/polar.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/preset_formats.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/presets.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/real_biology.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/render_scene_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/render_smoke.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/research_figure_planner.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/research_planner_study.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/research_revision.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/README.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/assets.lock.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/blender_scenes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/figures.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/slab_biology.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/state_machine.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/stress20.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v25_document.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v2_cases.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v2_document.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_complex_scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_render_jobs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_rendering.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_annotations.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_passes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_paths.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_templates.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/README.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/browser_scatter.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/contours_streamlines.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/data/world-countries.geojson +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/data/world-map-source.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/data/world-population.csv +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/engineering_report.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/faceted_operations.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/assembly.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/manifest.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/measurement.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/region-shapes.geojson +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/regions.csv +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/regions.geojson +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/transport.geojson +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/linked_dashboard.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/linked_selection.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/linked_selection.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/mesh_fields.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/region_shapes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/regional_analysis.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/regional_report.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/scientific_report.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/statistical_views.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/table_inputs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/time_series.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/transport_map.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/world_population.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/annot.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/bio3d.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/cartoon.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/chem_data.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/chem_fingerprints.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/data/1m17-kinase.pdb +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/data/README.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/drug_discovery.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/mouse_brain_data.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/neural_activity.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/pdbfile.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/showcase_part.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/showcase_process.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/showcase_season.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/structure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/structure_data.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/target.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/trial.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/README.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/biology-panels.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/chem_fingerprints.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/clipping-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-marker-shapes.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-scene-viewer.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-viewer-culling.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-viewer-deep-zoom.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compositing-pdf-after.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compositing-pdf-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compositing-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/dense-scatter-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/diagram-labels-after.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/diagram-labels-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/diagram-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/engine-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/engine-transparency-after.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/engine-transparency-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/flow.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/fluorescence-biology.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/general-plots-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/general-plots.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-pdf-after.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-pdf-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-svg-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/label-intensities.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/oblique-biology.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/part.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plot-axis-after.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plot-axis-before.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plot-engine-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plots.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/polar.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/preset-formats.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/presets.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/process.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/real-biology.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/render-scene-data.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/render-scene-initial.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/render-scene-review.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-crossing-revision.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-figure-planner.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-planner-study.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-revision.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/season.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-architecture-sketch.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-architecture.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-attractor.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-helix.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-interference.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-lattice.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-photonics.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-wave-packets.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/slab-biology.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/stress20.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/structure.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-complex-scene.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-render-jobs.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-rendering.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-annotations.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-passes.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-paths.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-templates.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/mkdocs.yml +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/requirements-ci.txt +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/requirements-docs.txt +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/requirements-tables.txt +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/scripts/bench_svg.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/scripts/rasterise.sh +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/scripts/sanity_typeset.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/__main__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/asset.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/cache.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/cutout.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/deps.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/harmonise.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/lineart.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/mask.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/provenance.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/raster.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/sidecar.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/silhouette.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/cli.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/components.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/batch.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/diagram.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/envelope.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/geom.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/prims.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/style.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/trace.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/units.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/abut.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/break_rules.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/color.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/cross.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/image.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/key_rules.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/link_rules.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/path_rules.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/plot_rules.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/report.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/rules.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/three_rules.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/compiler.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/composition.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/data.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/data_io.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/label_overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/layout_overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/module.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/presets.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/publication.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/spec.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/style_overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/annotate.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/bezier_clip.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/clip.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/coords.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/path.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/place.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/shapes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/_table_adapters.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/compiled.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/compiled.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/drawings.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/editor.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/editor.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/fields.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/geography.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/grid.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/images.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/page.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/regions.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/runtime.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/series.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/timeaxis.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/channels.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/contours.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/engineering.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/fields.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/figure_planner.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/grid.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/measurement.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/measurements.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/planner_geometry.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/regions.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/controls.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/page.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/runtime.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/spatial.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/sections.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/selection.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/slabs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/temporal.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/tiff.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/volume.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/fit.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/flow.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph_force.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph_layered.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph_tree.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/labels.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/sankey.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/links/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/links/curves.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/links/link.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/axis.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/breaks.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/categories.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/facets.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/inset.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/key.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/marks.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/notes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/panel.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/png.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/polar.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/ramp.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/raster.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/ribbon.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/scale.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/scatter_batch.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/scatter_raster.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/series.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/simplify.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/timescale.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/analysis.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/bounds.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/brushes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/bundle.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/composite.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/fontembed.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/glyphs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/hatching.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/outline.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/paint.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/pathdata.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/pdf.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/pdftext.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/preview.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/raster.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/resources.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/revision.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/svg.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/color.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/palettes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/theme.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/api.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/backend.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/device_worker.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/discover.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/lineart.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/options.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/scene_worker.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/script.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/svgread.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/template_worker.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/tracing.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender_backend.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/camera.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/deps.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/depth.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/devices.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/drill.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/edges.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/hlr.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/linalg.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/mesh.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/occlude.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/order.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/parse.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/place.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/protein.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/quality.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/render_jobs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scene_annotations.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scene_pass.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scene_projection.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scenes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/shade.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/solids.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/templates.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/templates.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/__init__.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/fonts.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/markup.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/onpath.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/outline.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/shaping.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/assets/mouse.inklet.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/assets/mouse.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/dense_graph.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/draw_probe.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/assets/sem.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/assets/tem.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/cell.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/common.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/data.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/imaging.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/kinetics.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/micrograph.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/system.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/fidelity.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/flow.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/hard_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/label_storm.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/mega_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/meshes/README.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/meshes/brain-lh.obj +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/meshes/spot.obj +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/apparatus.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/graphs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/relations.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/responses.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/sections.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/probes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/three_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_alignment_contract.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_annotate.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_annotate_letters.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_assets.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_assets_provenance.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_biology_source.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_blend_scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_compiled.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_facets.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_geography.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_regions.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_revision.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_scatter.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_series.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_statistics.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_switching.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_time.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_categories.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_channels_contours.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_chem_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_cli.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_clip_engine.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_components.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_compositing_engine.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_composition_recipes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_contrast_and_labels.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_cookbook.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_core.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_core_amendments.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_csv_input.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_api.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_artwork.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_break_distorts.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_crossing.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_image_contrast.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_ink.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_keys.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_links.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_paths.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_plot_box.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagram_engine.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_docs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_docs_site.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_document.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_document_data.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_document_v25.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_clip.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_path.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_place.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_shapes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engine_layout.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engine_rendering.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engine_scatter.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engineering_report.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_export_bundle.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_figure_planner.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_fit.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_grid_fields.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_guides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_hatch_engine.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_label_measurements.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_label_overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_editor.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_graph.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_graph_fit.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_origin.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_sankey.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_links.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_links_avoid.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_links_shapes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_marker_batches.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_mesh_fields.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_microscopy_tiff.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_neural_activity.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_output_contract.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_paint_program.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_place_labels.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_axis.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_broken_axis.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_clip.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_engine.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_facets.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_inset.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_key.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_labels.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_legend.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_marks.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_notes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_polar.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_publication.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_quality_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_raster.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_recipes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_ribbon.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_scale.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_swarm.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_time.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_presets.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_publication_limits.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_regional_report.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_release_adversarial.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_devices.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_embed.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_glyphs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_jobs.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_outline.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_pdf.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_pdf_text.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_quality.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_scene.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_style_fields.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_svg_perf.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_v3.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_review_v25.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_round4_plot.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_routing_avoid.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scatter_rendering.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_annotations.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_culling.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_pass.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_projection.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_templates.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_viewer.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scientific_report.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_sections.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_shared_plot_margins.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_showcase_library.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_showcase_round3.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_slabs_regions.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_structure_figure.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_style_overrides.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_svg.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_table_adapters.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_target_pose.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_temporal_adapters.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_text_markup.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_text_on_path.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_theme_font_style.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_themes.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_anchor_pin.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_api.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_backend_blender.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_blender.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_depth_order.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_drill.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_hlr.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_mesh.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_order_vector.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_overlay.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_parse.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_patches.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_place.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_protein.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_ridges.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_sort.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_sort_budget.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_view.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_typeset.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_v4_selection.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_volume.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_watch_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_world_map_example.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/README.md +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/categories-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/categories-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/components-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/components-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/dense-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/dense-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/fonts.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/inset-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/inset-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/markers-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/markers-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/renderers.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/type-opacity-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/type-opacity-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-dense-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-dense-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-workflow-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v25-document-pdf.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v25-document-svg.png +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/fixtures.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/v2-budgets.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_batches.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_clipping.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_diagrams.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_engine.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_lines.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_marker_index.mjs +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_culling.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_gpu.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_redraw.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_viewer.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_zoom.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_v2.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_v4.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/browser_study.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/check_render_wheel.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/dock_ligand.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_previews.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_previews.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_site.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/404.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/card.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/gallery.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/home.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/main.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/plot-gallery.html +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/gen_api.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/make_culling_review.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/plot_catalog.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/prepare_world_map.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/preset_gallery.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/profile_scene_redraw.js +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/showcase_gallery.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/stress20.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/strip_pdb.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/v3_showcase.py +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/v4-budgets.json +0 -0
- {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/visual_check.py +0 -0
|
@@ -6,7 +6,7 @@ on:
|
|
|
6
6
|
tag:
|
|
7
7
|
description: Published GitHub release tag
|
|
8
8
|
required: true
|
|
9
|
-
default: v4.0.0.
|
|
9
|
+
default: v4.0.0.dev12
|
|
10
10
|
type: string
|
|
11
11
|
dry_run:
|
|
12
12
|
description: Validate release files without uploading to PyPI
|
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
RELEASE_TAG: ${{ inputs.tag }}
|
|
44
44
|
run: |
|
|
45
45
|
[[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?$ ]] || {
|
|
46
|
-
echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.
|
|
46
|
+
echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev12' >&2
|
|
47
47
|
exit 1
|
|
48
48
|
}
|
|
49
49
|
gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
|
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 4.0.0.dev12 — 2026-09-13
|
|
6
|
+
|
|
7
|
+
Twelfth development preview: a redesigned local figure workspace.
|
|
8
|
+
3.1.0 remains the stable release.
|
|
9
|
+
|
|
10
|
+
- Add searchable object navigation, a large canvas, focused inspector tabs,
|
|
11
|
+
fixed apply/discard controls, header exports and revision feedback.
|
|
12
|
+
- Add fitted zoom, wheel zoom, pan tools and Space/middle-button dragging without
|
|
13
|
+
changing authored geometry. Preserve object gesture coordinates across zooms.
|
|
14
|
+
- Add native colour pickers, exact-value fields, keyboard shortcuts and a help
|
|
15
|
+
dialog; retain native text undo and adapt the workspace to smaller screens.
|
|
16
|
+
- Protect unapplied fields during selection and file/source actions; highlight
|
|
17
|
+
pending changes and offer explicit discard. Keep schema 0.4 and Python exports.
|
|
18
|
+
- Review real pointer capture and mobile overflow, extend browser regressions,
|
|
19
|
+
and update the illustrated editor guide.
|
|
20
|
+
|
|
5
21
|
## 4.0.0.dev11 — 2026-09-12
|
|
6
22
|
|
|
7
23
|
Eleventh development preview: unified composition layout, labels and appearance.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: inklet
|
|
3
|
-
Version: 4.0.0.
|
|
3
|
+
Version: 4.0.0.dev12
|
|
4
4
|
Summary: Scientific figures with live data, measured layout, and consistent vector exports.
|
|
5
5
|
Project-URL: Repository, https://github.com/Mapika/inklet
|
|
6
6
|
Project-URL: Documentation, https://inklet.readthedocs.io/en/latest/
|
|
@@ -81,16 +81,16 @@ their signatures and report schemas may change.
|
|
|
81
81
|
|
|
82
82
|
## 4.0 development preview
|
|
83
83
|
|
|
84
|
-
**4.0.0.
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
**4.0.0.dev12** redesigns the local editor as a figure workspace with object
|
|
85
|
+
navigation, a larger canvas, focused inspector tabs, zoom/pan, colour pickers,
|
|
86
|
+
keyboard shortcuts and protection for unapplied changes.
|
|
87
87
|
```sh
|
|
88
|
-
python -m pip install "inklet==4.0.0.
|
|
88
|
+
python -m pip install "inklet==4.0.0.dev12"
|
|
89
89
|
```
|
|
90
90
|
|
|
91
91
|
[Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
|
|
92
92
|
[4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
|
|
93
|
-
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.
|
|
93
|
+
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev12)
|
|
94
94
|
|
|
95
95
|
This is an opt-in development release. Experimental APIs and saved-state schemas
|
|
96
96
|
may change; 3.1.0 remains the stable release. General browser editing,
|
|
@@ -31,16 +31,16 @@ their signatures and report schemas may change.
|
|
|
31
31
|
|
|
32
32
|
## 4.0 development preview
|
|
33
33
|
|
|
34
|
-
**4.0.0.
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
**4.0.0.dev12** redesigns the local editor as a figure workspace with object
|
|
35
|
+
navigation, a larger canvas, focused inspector tabs, zoom/pan, colour pickers,
|
|
36
|
+
keyboard shortcuts and protection for unapplied changes.
|
|
37
37
|
```sh
|
|
38
|
-
python -m pip install "inklet==4.0.0.
|
|
38
|
+
python -m pip install "inklet==4.0.0.dev12"
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
[Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
|
|
42
42
|
[4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
|
|
43
|
-
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.
|
|
43
|
+
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev12)
|
|
44
44
|
|
|
45
45
|
This is an opt-in development release. Experimental APIs and saved-state schemas
|
|
46
46
|
may change; 3.1.0 remains the stable release. General browser editing,
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Inklet 4.0.0.
|
|
1
|
+
# Inklet 4.0.0.dev12
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The twelfth 4.0 development release includes the linked plotting, mapping,
|
|
4
4
|
engineering and scientific workflows developed since 3.1.0. It is an installable
|
|
5
5
|
snapshot for trying real examples and reporting problems. **3.1.0 remains the
|
|
6
6
|
stable release.** The [4.0 roadmap](roadmap.md) still has open work.
|
|
@@ -8,7 +8,7 @@ stable release.** The [4.0 roadmap](roadmap.md) still has open work.
|
|
|
8
8
|
```sh
|
|
9
9
|
python -m venv .venv
|
|
10
10
|
source .venv/bin/activate
|
|
11
|
-
python -m pip install "inklet==4.0.0.
|
|
11
|
+
python -m pip install "inklet==4.0.0.dev12"
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
On Windows PowerShell, activate with `.venv\Scripts\Activate.ps1` instead.
|
|
@@ -19,9 +19,9 @@ stable releases; see its [installation documentation](https://pip.pypa.io/en/sta
|
|
|
19
19
|
Optional extras can be installed with the same pin:
|
|
20
20
|
|
|
21
21
|
```sh
|
|
22
|
-
python -m pip install "inklet[render,pandas,polars]==4.0.0.
|
|
22
|
+
python -m pip install "inklet[render,pandas,polars]==4.0.0.dev12"
|
|
23
23
|
# Add calibrated volumes and TIFF workflows when needed:
|
|
24
|
-
python -m pip install "inklet[volume,render]==4.0.0.
|
|
24
|
+
python -m pip install "inklet[volume,render]==4.0.0.dev12"
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
The core preview needs no browser server, NumPy, pandas, Polars or Blender.
|
|
@@ -29,7 +29,25 @@ Opening the generated HTML requires a browser. PNG/PDF exports from browser
|
|
|
29
29
|
figures use separate Chrome/Chromium and Pillow; native Diagram exports retain
|
|
30
30
|
their existing requirements. See [installation](installation.md).
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## Studio workspace in dev12
|
|
33
|
+
|
|
34
|
+
The [composition editor](layout-editor.md) now has a searchable object navigator,
|
|
35
|
+
a central figure canvas and a focused inspector. Layout, Labels and Styles use
|
|
36
|
+
compact tabs, colour swatches and visible pending-change feedback. Apply/discard
|
|
37
|
+
controls stay accessible; save/export and undo/redo move to the header.
|
|
38
|
+
|
|
39
|
+

|
|
40
|
+
|
|
41
|
+
Zoom, Fit and pan explore the canvas without changing the authored figure.
|
|
42
|
+
Object gestures retain their figure coordinates at different zoom levels.
|
|
43
|
+
Keyboard shortcuts cover apply, save and undo/redo; the help dialog lists the
|
|
44
|
+
full set. Pending edits are protected during selection, source refresh and
|
|
45
|
+
file actions. The layout adapts to tablet and phone screens.
|
|
46
|
+
|
|
47
|
+
This is a UI change: existing schema 0.4 files and the Python compiler remain
|
|
48
|
+
the source of saved choices and SVG/PDF exports.
|
|
49
|
+
|
|
50
|
+
## Unified composition authoring retained from dev11
|
|
33
51
|
|
|
34
52
|
The [composition editor](layout-editor.md#edit-appearance-alongside-layout) now
|
|
35
53
|
combines Layout, Labels and Styles sections. Pending changes across sections
|
|
@@ -220,7 +238,7 @@ The wheel contains the library. To obtain recipes and fixtures, use the matching
|
|
|
220
238
|
release checkout or source archive:
|
|
221
239
|
|
|
222
240
|
```sh
|
|
223
|
-
git clone --branch v4.0.0.
|
|
241
|
+
git clone --branch v4.0.0.dev12 https://github.com/Mapika/inklet.git
|
|
224
242
|
cd inklet
|
|
225
243
|
python -m pip install -e '.[render]'
|
|
226
244
|
python examples/v4/regional_report.py --renderer compiled --editor --output out/regional
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Local layout editor
|
|
2
2
|
|
|
3
|
-
Available since **4.0.0.dev8**, with
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
Available since **4.0.0.dev8**, with the redesigned studio workspace in
|
|
4
|
+
**4.0.0.dev12**, under `inklet.experimental.layout_editor`. Arrange named
|
|
5
|
+
content, edit labels and appearance, and review the actual Python-compiled
|
|
6
|
+
figure. Downloaded SVG/PDF files use that same successful preview.
|
|
7
7
|
|
|
8
|
-

|
|
9
9
|
|
|
10
10
|
The [complete example](../examples/layout_editor.py) opens the reusable report
|
|
11
11
|
from [composition recipes](composition-recipes.md). From the checkout, run:
|
|
@@ -19,6 +19,37 @@ press Ctrl+C to stop it. This is a local editor, not a standalone HTML editing
|
|
|
19
19
|
file. Ordinary [figure viewers](compiled-viewer.md) remain available for
|
|
20
20
|
sharing a finished document without a Python process.
|
|
21
21
|
|
|
22
|
+
## A workspace for your figure
|
|
23
|
+
|
|
24
|
+
The desktop workspace has a searchable object navigator, a central canvas and
|
|
25
|
+
an inspector with **Layout**, **Labels** and **Styles** tabs. Select an object
|
|
26
|
+
from the navigator or directly on the figure. Nested objects retain their
|
|
27
|
+
hierarchy, and the inspector shows the exact source path. On smaller screens,
|
|
28
|
+
a **Content** selector replaces the navigator; on phones the inspector sits
|
|
29
|
+
below the canvas.
|
|
30
|
+
|
|
31
|
+
Use **+**, **−** and **Fit** to explore the figure. The zoom percentage is
|
|
32
|
+
relative to the fitted view, not a physical-size preview. Ctrl/Cmd + wheel also
|
|
33
|
+
zooms. Use the pan tool, middle-button dragging, or hold Space and drag to move
|
|
34
|
+
the viewport. View changes never resize the authored figure or enter its undo
|
|
35
|
+
history. Object movements and corner scaling still use figure coordinates at
|
|
36
|
+
any zoom level.
|
|
37
|
+
|
|
38
|
+
Changed fields are highlighted and counted. Switch inspector tabs to combine
|
|
39
|
+
edits, then **Apply changes** as one undo step. **Discard** clears unapplied
|
|
40
|
+
fields. Selecting another object, refreshing, undoing, opening a file, saving
|
|
41
|
+
or exporting asks you to apply or discard pending changes first; browser
|
|
42
|
+
navigation also warns about pending edits. Applied changes still need **Save
|
|
43
|
+
choices** to download a portable file.
|
|
44
|
+
|
|
45
|
+
Colour swatches open the native picker, while the adjacent field accepts exact
|
|
46
|
+
colour values. Automatic/transparent values use a muted swatch. Undo/redo and
|
|
47
|
+
file actions stay in the header; **Export** offers SVG and PDF. The footer shows
|
|
48
|
+
compile feedback and the current revision. The **Shortcuts** dialog documents
|
|
49
|
+
all controls, including Ctrl/Cmd + Enter to apply, Ctrl/Cmd + Z to undo,
|
|
50
|
+
Ctrl/Cmd + Shift + Z to redo and Ctrl/Cmd + S to save applied choices. Text inputs
|
|
51
|
+
retain native text undo.
|
|
52
|
+
|
|
22
53
|
## Start with your composition
|
|
23
54
|
|
|
24
55
|
```python
|
|
@@ -79,7 +110,7 @@ top-fitting behavior; dependent content can reflow when the compiler rebuilds.
|
|
|
79
110
|
|
|
80
111
|

|
|
81
112
|
|
|
82
|
-
Select a composition child, choose **Labels**
|
|
113
|
+
Select a composition child, choose the **Labels** tab, then change its fields and choose **Apply
|
|
83
114
|
changes**. The editor supports text components created with `component(i.text,
|
|
84
115
|
...)`, string module captions, and plot `title`, `text` and `annotate`
|
|
85
116
|
instructions with an explicit string `key`. For composition callouts, supply a
|
|
@@ -119,9 +150,9 @@ Undo/redo, reset, saved JSON and SVG/PDF exports include the label edits.
|
|
|
119
150
|
|
|
120
151
|

|
|
121
152
|
|
|
122
|
-
Choose **Styles**
|
|
153
|
+
Choose the **Styles** tab. Layout, Labels and Styles retain their pending
|
|
123
154
|
changes when switching sections; **Apply changes** compiles them together as
|
|
124
|
-
one undo step.
|
|
155
|
+
one undo step. Apply or discard pending fields before selecting another content target.
|
|
125
156
|
|
|
126
157
|
| Named content | Available appearance controls |
|
|
127
158
|
| --- | --- |
|
|
@@ -168,7 +199,7 @@ are outside this style-control subset.
|
|
|
168
199
|
|
|
169
200
|
## Edit and review
|
|
170
201
|
|
|
171
|
-
Choose a named path in **Content** and
|
|
202
|
+
Choose a named path in **Content** and an inspector tab, enter the fields you want to change, then
|
|
172
203
|
select **Apply changes**. Other fields retain their definitions.
|
|
173
204
|
|
|
174
205
|
- Child placement fields are X, Y, anchor, width, height and uniform scale. Numbers use the
|
|
@@ -196,12 +227,12 @@ appears. Distinct placements of that shared content remain independently editabl
|
|
|
196
227
|
|
|
197
228
|
## Save, reopen and export
|
|
198
229
|
|
|
199
|
-
**Save
|
|
200
|
-
[saved layout choices](layout-overrides.md). **Open
|
|
230
|
+
**Save choices** downloads the versioned JSON described in
|
|
231
|
+
[saved layout choices](layout-overrides.md). **Open** loads that
|
|
201
232
|
same format. The file contains changed layout, label and supported style fields.
|
|
202
233
|
Other source content, assets and undo history stay outside the file. Keep it alongside the recipe.
|
|
203
234
|
|
|
204
|
-
**
|
|
235
|
+
**Export → SVG** and **Export → PDF** export the successful preview revision.
|
|
205
236
|
If another editor tab changes the session first, stale commands and export
|
|
206
237
|
links are rejected. Use **Reload editor** to obtain the current shared state.
|
|
207
238
|
|
|
@@ -64,7 +64,9 @@ choices. Dev10 adds saved named text and callout editing across modules, text
|
|
|
64
64
|
components, keyed plot instructions and composition annotations, including typed
|
|
65
65
|
identity reconciliation. Dev11 connects supported plot, text and module styles
|
|
66
66
|
to that same layout/label history, saved state and reconciliation workflow,
|
|
67
|
-
with data-driven marker fields protected from constant overrides.
|
|
67
|
+
with data-driven marker fields protected from constant overrides. Dev12 adds
|
|
68
|
+
the studio workspace: object navigation, focused controls, zoom/pan, shortcuts
|
|
69
|
+
and protection for pending edits.
|
|
68
70
|
Serialized project templates, asset manifests, shared selection
|
|
69
71
|
relationships, axis-label/camera editing and finer-grained manipulation remain open. Subsequent work
|
|
70
72
|
should extend authoring and cross-content identity beyond this bounded inspector.
|
|
@@ -207,8 +207,10 @@ class LayoutEditor:
|
|
|
207
207
|
return self.snapshot()
|
|
208
208
|
|
|
209
209
|
def _html(self):
|
|
210
|
-
return (Path(__file__).with_name('page.html').read_text().replace('__TOKEN__',self._token)
|
|
211
|
-
.replace('
|
|
210
|
+
return (Path(__file__).with_name('page.html').read_text(encoding='utf-8').replace('__TOKEN__',self._token)
|
|
211
|
+
.replace('/*WORKSPACE_CSS*/',Path(__file__).with_name('workspace.css').read_text(encoding='utf-8'))
|
|
212
|
+
.replace('<!--WORKSPACE-->',Path(__file__).with_name('workspace.js').read_text(encoding='utf-8'))
|
|
213
|
+
.replace('<!--GESTURES-->',Path(__file__).with_name('gestures.js').read_text(encoding='utf-8')))
|
|
212
214
|
|
|
213
215
|
def start(self, *, port=0):
|
|
214
216
|
"""Start a loopback-only editor server; port=0 chooses a free local port."""
|
|
@@ -23,11 +23,11 @@ function pointerPoint(event){const point=overlay.createSVGPoint();point.x=event.
|
|
|
23
23
|
function cancelGesture(){if(!gesture)return;const id=gesture.pointerId;gesture=null;if(overlay.hasPointerCapture(id))overlay.releasePointerCapture(id);lock(false);drawOverlay();status('Drag cancelled.');}
|
|
24
24
|
overlay.addEventListener('pointerdown',event=>{
|
|
25
25
|
if(busy||gesture||!previewReady||event.button!==0||event.isPrimary===false)return;
|
|
26
|
-
const hit=event.target.closest('[data-path]');if(!hit)return;
|
|
26
|
+
const hit=event.target.closest('[data-path]');if(!hit){selectTarget('/');return;}
|
|
27
27
|
let path=hit.dataset.path,corner=hit.dataset.corner;
|
|
28
28
|
if(event.altKey){const parent=path.slice(0,path.lastIndexOf('/'));if(state.geometry[parent]){path=parent;corner=null;}}
|
|
29
29
|
const box=state.geometry[path]?.box;if(!box||box[2]<=0||box[3]<=0)return;
|
|
30
|
-
event.preventDefault();
|
|
30
|
+
event.preventDefault();if(!selectTarget(path))return;overlay.focus({preventScroll:true});
|
|
31
31
|
const point=pointerPoint(event);gesture={path,corner,box:[...box],start:point,client:[event.clientX,event.clientY],pointerId:event.pointerId,dx:0,dy:0,factor:1,moved:false};
|
|
32
32
|
overlay.setPointerCapture(event.pointerId);lock(true);status(corner?'Scale artwork; release to apply. Escape cancels.':'Move content; release to apply. Escape cancels.');
|
|
33
33
|
});
|
|
@@ -56,7 +56,7 @@ overlay.addEventListener('pointercancel',cancelGesture);
|
|
|
56
56
|
overlay.addEventListener('lostpointercapture',()=>{if(gesture)cancelGesture();});
|
|
57
57
|
document.addEventListener('keydown',event=>{if(event.key==='Escape'&&gesture){event.preventDefault();cancelGesture();}});
|
|
58
58
|
overlay.addEventListener('keydown',event=>{
|
|
59
|
-
if(busy||gesture||!previewReady)return;const path=byId('target').value;if(!state.geometry[path])return;
|
|
59
|
+
if(busy||gesture||!previewReady||dirty.size)return;const path=byId('target').value;if(!state.geometry[path])return;
|
|
60
60
|
const step=event.shiftKey?10:1,keys={ArrowLeft:[-step,0],ArrowRight:[step,0],ArrowUp:[0,-step],ArrowDown:[0,step]};
|
|
61
61
|
if(keys[event.key]){event.preventDefault();request('gesture',{path,dx:keys[event.key][0],dy:keys[event.key][1]});}
|
|
62
62
|
});
|
|
@@ -1,24 +1,27 @@
|
|
|
1
|
-
<!doctype html
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<
|
|
6
|
-
<
|
|
7
|
-
<div class="actions"><button id="
|
|
8
|
-
|
|
9
|
-
<
|
|
10
|
-
<
|
|
11
|
-
<label
|
|
12
|
-
<div
|
|
13
|
-
<button id="
|
|
14
|
-
|
|
15
|
-
<
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
3
|
+
<title>Inklet · Layout editor</title><style>/*WORKSPACE_CSS*/</style></head>
|
|
4
|
+
<body><header class="topbar">
|
|
5
|
+
<div class="brand"><svg width="26" height="26" viewBox="0 0 26 26" aria-hidden="true"><rect width="26" height="26" rx="7" fill="currentColor"/><path d="M8 7h4v12H8zm7 0h3v3h-3zm0 5h3v7h-3z" fill="white"/></svg><strong>inklet<span>studio</span></strong></div>
|
|
6
|
+
<div class="project"><span class="project-name">Figure workspace</span><span class="connection"><i></i>Local session</span></div>
|
|
7
|
+
<div class="top-actions"><button id="undo" class="icon-button" title="Undo · Ctrl/Cmd Z" aria-label="Undo">↶</button><button id="redo" class="icon-button" title="Redo · Ctrl/Cmd Shift Z" aria-label="Redo">↷</button><span class="divider"></span><button id="open-file" class="open-button">Open</button><input id="load" type="file" accept=".json,application/json" hidden><a id="save" class="button" href="/layout.json">Save choices</a><details class="export-menu"><summary class="button primary">Export <span>↗</span></summary><div class="popover"><a id="svg" href="/figure.svg">SVG <small>Editable vector</small></a><a id="pdf" href="/figure.pdf">PDF <small>Ready for print</small></a></div></details></div>
|
|
8
|
+
</header>
|
|
9
|
+
<main class="workspace">
|
|
10
|
+
<aside class="navigator"><div class="panel-heading"><h2>Objects</h2><span id="object-count" class="count"></span></div><label class="search"><span aria-hidden="true">⌕</span><input id="search" type="search" placeholder="Find an object…" aria-label="Find an object"></label><nav id="object-tree" aria-label="Composition objects"></nav><div class="navigator-bottom"><span class="eyebrow">SOURCE CONNECTION</span><p>Your Python recipe stays in control.</p><button id="refresh">↻ Refresh source</button><button id="reload" class="quiet">Reload editor</button><small>Refresh rebuilds the figure and clears undo history.</small></div></aside>
|
|
11
|
+
<section class="canvas-panel" aria-label="Figure workspace"><div class="canvas-bar"><div><span class="eyebrow">COMPOSITION</span><span id="page-size"></span></div><button id="help-button" class="quiet" aria-label="Keyboard shortcuts" title="Keyboard shortcuts">? <span>Shortcuts</span></button></div>
|
|
12
|
+
<div id="viewport"><div id="canvas-space"><div id="stage"><img id="preview" alt="Compiled composition preview"><svg id="overlay" tabindex="0" role="application" aria-label="Figure layout canvas. Select content, drag to move, or use arrow keys. Corner handles scale artwork."></svg></div></div></div>
|
|
13
|
+
<div class="canvas-tools"><div class="tool-group"><button id="select-tool" class="active" aria-pressed="true" title="Select and move objects" aria-label="Select tool">↖</button><button id="pan-tool" aria-pressed="false" title="Pan canvas · hold Space" aria-label="Pan tool">✥</button></div><span class="divider"></span><button id="zoom-out" aria-label="Zoom out">−</button><output id="zoom-label">100%</output><button id="zoom-in" aria-label="Zoom in">+</button><span class="divider"></span><button id="fit" title="Fit figure to workspace">Fit</button></div>
|
|
14
|
+
<div class="canvas-caption"><span id="selection-size">Whole composition</span><span>Drag to move · corners to scale</span></div></section>
|
|
15
|
+
<aside class="inspector-panel"><div class="inspector-title"><span class="eyebrow">INSPECTOR</span><h1 id="selection-name">Composition</h1><span id="selection-path">/</span></div><label class="target-picker">Content<select id="target"></select></label><label class="sr-only" aria-hidden="true">Edit<select id="inspector" tabindex="-1"><option value="layout">Layout</option><option value="labels">Labels</option><option value="styles">Styles</option></select></label><div class="inspector-tabs" role="group" aria-label="Inspector section"><button data-tab="layout" aria-pressed="true">Layout</button><button data-tab="labels" aria-pressed="false">Labels</button><button data-tab="styles" aria-pressed="false">Styles</button></div><div class="inspector-scroll"><div id="fields"></div><div id="empty" hidden><span>◇</span><h3>Nothing to edit here</h3><p>Choose another section or object.</p></div><p class="inspector-hint" id="inspector-hint">Measured positions follow your recipe. Enter a value to place them explicitly.</p><button id="reset" class="quiet reset">Reset object to source</button><button id="drop" class="danger" hidden>Discard removed targets and refresh</button></div><div class="apply-bar"><div><span id="pending-label">Up to date</span><button id="discard" class="quiet" hidden>Discard</button></div><button id="apply" class="primary">Apply changes <kbd>⌘ ↵</kbd></button></div></aside>
|
|
16
|
+
</main>
|
|
17
|
+
<footer class="statusbar"><span id="status" role="status" aria-live="polite">Connecting to your figure…</span><span>Python-backed preview <span class="status-dot">●</span> <span id="revision-label">Revision 0</span></span></footer>
|
|
18
|
+
<dialog id="help"><div class="panel-heading"><h2>Make room for your ideas.</h2><button id="close-help" aria-label="Close shortcuts">×</button></div><p>Every applied edit rebuilds the actual figure.</p><dl><dt>Move an object</dt><dd>Drag / arrow keys</dd><dt>Move 10 mm</dt><dd>Shift + arrow</dd><dt>Select a containing group</dt><dd>Alt + click</dd><dt>Pan the workspace</dt><dd>Space + drag / pan tool</dd><dt>Zoom</dt><dd>Ctrl/Cmd + wheel</dd><dt>Apply pending changes</dt><dd>Ctrl/Cmd + Enter</dd><dt>Undo / redo</dt><dd>Ctrl/Cmd + Z / Shift + Z</dd><dt>Save applied choices</dt><dd>Ctrl/Cmd + S</dd><dt>Cancel a drag</dt><dd>Escape</dd></dl><p class="note">Keep the local Python session running. Saved choices accompany your recipe; exports contain the applied figure.</p></dialog>
|
|
16
19
|
<script>
|
|
17
20
|
'use strict';
|
|
18
21
|
const token='__TOKEN__',byId=id=>document.getElementById(id);
|
|
19
22
|
let state=null,busy=false,previewURL=null,previewReady=false;const dirty=new Map();
|
|
20
23
|
function status(text,error=false){byId('status').textContent=text;byId('status').classList.toggle('error',error);}
|
|
21
|
-
function lock(value){busy=value;document.querySelectorAll('button,input,textarea,select').forEach(el=>el.disabled=value);
|
|
24
|
+
function lock(value){busy=value;document.querySelectorAll('button,input,textarea,select').forEach(el=>el.disabled=value);syncUI();}
|
|
22
25
|
function fields(){dirty.clear();const container=byId('fields');container.replaceChildren();const target=state.targets[byId('target').value];
|
|
23
26
|
for(const [group,values] of Object.entries(target)){
|
|
24
27
|
if(group==='styles'){
|
|
@@ -30,7 +33,7 @@ function fields(){dirty.clear();const container=byId('fields');container.replace
|
|
|
30
33
|
label.append(document.createTextNode(({fill:'Fill colour',stroke:'Line colour',color:'Marker colour',stroke_width:'Line width (mm)',size:styleValues.kind==='plot-scatter'?'Marker diameter (mm)':'Text size (mm)',opacity:'Opacity'})[field]));
|
|
31
34
|
input.type=['fill','stroke','color'].includes(field)?'text':'number';input.step='any';input.value=typeof value==='number'?Number(value.toPrecision(6)):value??'';input.placeholder=input.type==='text'?'Automatic / #RRGGBB':'Automatic';
|
|
32
35
|
input.dataset.group=group;input.dataset.label=key;input.dataset.key=field;input.dataset.kind=styleValues.kind;
|
|
33
|
-
const changed=()=>
|
|
36
|
+
const changed=()=>markDirty(JSON.stringify([group,key,field]),input);input.addEventListener('input',changed);input.addEventListener('change',changed);label.append(input);box.append(label);
|
|
34
37
|
}container.append(box);
|
|
35
38
|
}continue;
|
|
36
39
|
}
|
|
@@ -46,7 +49,7 @@ function fields(){dirty.clear();const container=byId('fields');container.replace
|
|
|
46
49
|
else if(field==='clear'){input.type='number';input.min=0;input.step='any';input.value=value??'';input.placeholder='Automatic';}
|
|
47
50
|
else{input.rows=3;input.value=value;}
|
|
48
51
|
input.dataset.group=group;input.dataset.label=key;input.dataset.key=field;input.dataset.kind=labelValues.kind;
|
|
49
|
-
const changed=()=>
|
|
52
|
+
const changed=()=>markDirty(JSON.stringify([group,key,field]),input);input.addEventListener('input',changed);input.addEventListener('change',changed);label.append(input);box.append(label);
|
|
50
53
|
}container.append(box);
|
|
51
54
|
}continue;
|
|
52
55
|
}
|
|
@@ -55,26 +58,27 @@ function fields(){dirty.clear();const container=byId('fields');container.replace
|
|
|
55
58
|
if(key==='fit_top'){input.type='checkbox';input.checked=value;}
|
|
56
59
|
else if(key==='anchor'){input.type='text';input.value=value??'';input.placeholder='Local origin';}
|
|
57
60
|
else{input.type='number';input.step='any';if(typeof value==='number')input.value=Number(value.toPrecision(6));else input.placeholder=value===null?'Authored size':'Measured';}
|
|
58
|
-
input.addEventListener('input',()=>
|
|
61
|
+
input.addEventListener('input',()=>markDirty(group+'.'+key,input));label.append(input);box.append(label);
|
|
59
62
|
}container.append(box);
|
|
60
63
|
}
|
|
61
|
-
showSection();drawOverlay();
|
|
64
|
+
showSection();decorateFields();syncUI();drawOverlay();
|
|
62
65
|
}
|
|
63
|
-
function showSection(){const selected=byId('inspector').value;let shown=0;byId('fields').querySelectorAll('fieldset').forEach(box=>{box.hidden=(selected==='layout'?!['placement','page'].includes(box.dataset.section):box.dataset.section!==selected);if(!box.hidden)shown++;});byId('empty').hidden=shown>0;}
|
|
66
|
+
function showSection(){const selected=byId('inspector').value;let shown=0;byId('fields').querySelectorAll('fieldset').forEach(box=>{box.hidden=(selected==='layout'?!['placement','page'].includes(box.dataset.section):box.dataset.section!==selected);if(!box.hidden)shown++;});byId('empty').hidden=shown>0;document.querySelectorAll('[data-tab]').forEach(button=>button.setAttribute('aria-pressed',button.dataset.tab===selected));byId('inspector-hint').textContent=({layout:'Measured positions follow your recipe. Enter a value to place them explicitly.',labels:'Text is remeasured when you apply. Connected content follows its new size.',styles:'Blank fields use automatic styling. Sizes and line widths use millimetres.'})[selected];}
|
|
64
67
|
byId('inspector').addEventListener('change',showSection);
|
|
65
68
|
function render(next){previewReady=false;state=next;const selected=byId('target').value;byId('target').replaceChildren();for(const path of Object.keys(state.targets)){const option=document.createElement('option');option.value=path;option.textContent=path==='/'?'Whole composition':path;byId('target').append(option);}if(Object.hasOwn(state.targets,selected))byId('target').value=selected;fields();
|
|
66
|
-
if(previewURL)URL.revokeObjectURL(previewURL);previewURL=URL.createObjectURL(new Blob([state.svg],{type:'image/svg+xml'}));const currentURL=previewURL;byId('preview').style.aspectRatio=state.viewbox[2]+'/'+state.viewbox[3];byId('preview').onload=()=>{if(byId('preview').src===currentURL){previewReady=true;drawOverlay();}};byId('preview').src=previewURL;
|
|
69
|
+
if(previewURL)URL.revokeObjectURL(previewURL);previewURL=URL.createObjectURL(new Blob([state.svg],{type:'image/svg+xml'}));const currentURL=previewURL;byId('preview').style.aspectRatio=state.viewbox[2]+'/'+state.viewbox[3];byId('preview').onload=()=>{if(byId('preview').src===currentURL){previewReady=true;sizeCanvas();drawOverlay();}};byId('preview').src=previewURL;
|
|
67
70
|
for(const [id,path] of [['save','layout.json'],['svg','figure.svg'],['pdf','figure.pdf']])byId(id).href='/'+path+'?revision='+state.revision;
|
|
68
71
|
byId('drop').hidden=true;lock(false);
|
|
69
72
|
}
|
|
70
|
-
async function request(action,value,missing='error'){if(busy)return;lock(true);status('Compiling…');try{
|
|
73
|
+
async function request(action,value,missing='error'){if(busy)return;if(dirty.size&&action!=='edit'){status('Apply or discard pending changes first.',true);return;}lock(true);status('Compiling…');try{
|
|
71
74
|
const response=await fetch('/command',{method:'POST',headers:{'Content-Type':'application/json','X-Inklet-Token':token},body:JSON.stringify({action,value,missing,revision:state.revision})});const result=await response.json();if(!response.ok)throw new Error(result.error);render(result);const removed=result.report.orphaned_targets;status(removed.length?'Discarded removed targets: '+removed.join(', '):'Layout ready.');
|
|
72
75
|
}catch(error){status(error.message,true);if(action==='refresh'&&error.message.includes('orphaned layout targets'))byId('drop').hidden=false;}finally{lock(false);}}
|
|
73
|
-
async function reload(){if(busy)return;lock(true);try{const response=await fetch('/state');const result=await response.json();if(!response.ok)throw new Error(result.error);render(result);status('Layout ready.');}catch(error){status(error.message,true);}finally{lock(false);}}
|
|
74
|
-
byId('target').addEventListener('change',
|
|
76
|
+
async function reload(){if(busy)return;if(dirty.size){status('Apply or discard pending changes first.',true);return;}lock(true);try{const response=await fetch('/state');const result=await response.json();if(!response.ok)throw new Error(result.error);render(result);status('Layout ready.');}catch(error){status(error.message,true);}finally{lock(false);}}
|
|
77
|
+
byId('target').addEventListener('change',()=>selectTarget(byId('target').value));
|
|
75
78
|
byId('apply').onclick=()=>{try{if(!dirty.size){status('No layout changes entered.');return;}const value={path:byId('target').value};for(const input of dirty.values()){const {group,key}=input.dataset;let field;if(input.type==='checkbox')field=input.checked;else if(group==='styles'&&input.value==='')field=null;else if(group==='styles'&&input.type==='text')field=input.value;else if(group==='labels'&&(key==='text'||key==='side'))field=input.value;else if(group==='labels'&&key==='clear'&&input.value===''&&input.dataset.kind==='plot-annotate')field=null;else if(key==='anchor')field=input.value||null;else if(input.value===''&&(key==='width'||key==='height')&&group==='placement')field=null;else{field=Number(input.value);if(input.value===''||!Number.isFinite(field))throw new Error('Enter a finite value for '+key);} if(group==='labels'||group==='styles'){const label=(value[group]??=Object.create(null))[input.dataset.label]??={kind:input.dataset.kind};label[key]=field;}else (value[group]??={})[key]=field;}request('edit',value);}catch(error){status(error.message,true);}};
|
|
76
79
|
byId('reset').onclick=()=>request('reset',byId('target').value);byId('undo').onclick=()=>request('undo');byId('redo').onclick=()=>request('redo');byId('refresh').onclick=()=>request('refresh');byId('drop').onclick=()=>request('refresh',null,'drop');byId('reload').onclick=reload;
|
|
77
80
|
byId('load').onchange=async event=>{const file=event.target.files[0];if(!file||busy)return;lock(true);try{if(file.size>1000000)throw new Error('Layout file is too large');const value=JSON.parse(await file.text());lock(false);await request('load',value);}catch(error){status(error.message,true);}finally{event.target.value='';lock(false);}};
|
|
81
|
+
<!--WORKSPACE-->
|
|
78
82
|
<!--GESTURES-->
|
|
79
83
|
reload();
|
|
80
84
|
</script></body></html>
|