inklet 4.0.0.dev8__tar.gz → 4.0.0.dev9__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.dev8 → inklet-4.0.0.dev9}/.github/workflows/publish.yml +2 -2
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/CHANGELOG.md +15 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/PKG-INFO +6 -6
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/README.md +5 -5
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/api.md +1 -1
- inklet-4.0.0.dev9/docs/assets/guides/layout-editor-gestures.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/compatibility.md +1 -1
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/composition-recipes.md +3 -1
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/development-preview.md +27 -8
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/installation.md +3 -3
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/layout-editor.md +40 -7
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/layout-overrides.md +6 -4
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/roadmap.md +4 -2
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/pyproject.toml +1 -1
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/__init__.py +1 -1
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/composition.py +23 -6
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/layout_overrides.py +12 -5
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/layout_editor/__init__.py +75 -5
- inklet-4.0.0.dev9/src/inklet/experimental/layout_editor/gestures.js +63 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/layout_editor/page.html +9 -7
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_layout_editor.py +1 -1
- inklet-4.0.0.dev9/tests/test_layout_gestures.py +146 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/check_wheel.py +2 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_gallery.json +3 -3
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/.gitattributes +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/.github/workflows/checks.yml +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/.gitignore +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/.readthedocs.yaml +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/CONTRACT.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/CONTRIBUTING.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/LICENSE +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/THIRD_PARTY_NOTICES.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/brand/inklet-icon.svg +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/brand/inklet-logo-dark.svg +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/brand/inklet-logo-mono.svg +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/brand/inklet-logo.svg +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/brand/inklet-wordmark.svg +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/examples/quickstart.pdf +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/examples/quickstart.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/examples/quickstart.svg +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/axes-and-scales-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/calibrated-volumes-3.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/channels-and-contours-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/composition-recipes-narrow.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/composition-recipes.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/composition-recipes.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-anchor.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-annotation.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-branch.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-broken-axis.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-callout.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-clipping.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-creases.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-custom-key.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-cutout.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-dates.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-dense.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-elbows.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-facets.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-fit-graph.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-flow-width.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-formula.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-graph.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-halo.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-heatmap.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-hole.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-inline-type.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-inset.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-labels.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-layers.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-letters.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-list.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-matrix.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-page-grid.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-polar.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-protein.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-routes.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-scene.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-series-key.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-span.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-swarm.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-text-path.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-toon.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-twin-axis.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-violin.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/data-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/data-3.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/dense-data-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/diagram-components-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/diagrams-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/layout-3.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/layout-editor.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/layout-restored.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/layout-restored.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/layout-revised.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/oblique-sections-2.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plot-composition-narrow.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plot-composition.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plot-composition.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plot-quality-after.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plot-quality-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-band.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-bars.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-boxplot.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-errorbars.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-fill-between.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-fill.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-grouped-bars.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-hist.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-horizontal-bars.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-line-errors.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-line.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-markers.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-matrix.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-polar-curve.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-rose.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-scatter.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-series.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-stackarea.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-stacked-bars.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-step.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-swarm.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plots-violin.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plotting-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/plotting-2.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/publication-plots-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/publication-plots-2.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/publication-plots-3.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/publication-plots-4.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/slabs-and-regions-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/three-images-1.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/guides/three-images-2.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/biology.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/clipping-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/clipping-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/clipping-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/clipping-lines-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/clipping-lines-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/comparison.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-marker-shapes-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-marker-shapes.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-markers-display.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-markers-hardware.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-scene-viewer.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-viewer-display.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-viewer-export.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compiled-viewer-study.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compositing-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compositing-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/compositing-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/dense-scatter-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/diagram-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/diagram-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/engine-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/engine-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/fluorescence-biology.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/general-plots-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/general-plots.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/hatch-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/hatch-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/hatch-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/label-intensities-native.csv +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/label-intensities.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/lines-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/lines-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/marker-batches.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/marker-index-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/marker-index-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/marker-index-browser-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/marker-index-browser-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/oblique-biology.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/real-biology.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/render-scene-caption.tex +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/revision.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/scenes-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/scenes-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/slab-biology.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/study.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-culling-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-culling-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-culling-gpu-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-culling-gpu-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-redraw-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-redraw-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-redraw-display.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-redraw-profile.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-window-after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-window-before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/research-preview/viewer-window-display.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/after.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/before.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/browser-quality.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/browser-scatter.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/browser-scatter.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/browser-study.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/contours-streamlines-masked.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/contours-streamlines.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/contours-streamlines.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/engineering-report-170mm.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/engineering-report.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/engineering-report.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/faceted-operations.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/faceted-operations.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/linked-dashboard.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/linked-dashboard.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/linked-selection.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/linked-selection.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/mesh-fields-170mm.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/mesh-fields.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/mesh-fields.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/region-shapes.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/region-shapes.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/regional-analysis.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/regional-analysis.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/regional-report-160mm.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/regional-report.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/regional-report.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/scientific-report-170mm.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/scientific-report.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/scientific-report.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/statistical-views.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/statistical-views.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/table-inputs.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/table-inputs.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/time-series.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/time-series.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/transport-map.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/transport-map.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/visual-overrides.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/world-population-2019.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/world-population-2019.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/world-population-2019.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/world-population-revisions.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/world-population-revisions.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/world-population.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/assets/v4/world-population.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/axes-and-scales.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/bars-and-areas.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/biology-panels.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/blender-scenes.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/brand.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/browser-rendering.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/calibrated-volumes.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/channels-and-contours.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/cli.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/clipping.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/compiled-scenes.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/compiled-viewer.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/complex-scene.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/compositing.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/concepts.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/contours-streamlines.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/cookbook.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/data-revisions.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/data.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/dense-data.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/design/browser-backends.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/design/page_grid.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/design/v2.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/design/v4.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/diagram-components.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/diagram-engine.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/diagrams.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/distributions.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/engineering-report.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/example-library.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/examples.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/export-review.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/fluorescence-biology.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/general-plots.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/geographic-features.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/hatching.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/index.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/interactive-documents.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/javascripts/inklet.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/label-intensities.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/label-measurements.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/layout.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/lines-and-points.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/linked-facets.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/linked-maps.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/linked-plots.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/marker-batches.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/marker-culling.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/matrices.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/mesh-fields.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/microscopy-tiff.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/migration.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/oblique-biology.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/oblique-sections.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/plot-quality.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/plot-recipes.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/plot-types.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/plotting-engine.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/plotting.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/polar-plots.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/presets.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/publication-plots.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/quickstart.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/real-biology.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/architecture-sketch.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/architecture.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/attractor.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/helix.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/interference.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/lattice.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/photonics.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/recipes/wave-packets.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/regional-report.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/release-checks.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/render-jobs.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/rendering-engine.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/research-preview.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/research-revision.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/research-study.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/scene-annotations.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/scene-paths.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/scene-templates.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/scientific-report.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/showcase.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/slab-biology.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/slabs-and-regions.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/statistical-views.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/stress20.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/stylesheets/code.css +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/stylesheets/inklet.css +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/table-inputs.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/three-images.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/time-series.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/troubleshooting.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/uncertainty.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/v2.5.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/v2.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/v3.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/v4-foundations.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/visual-editing.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/docs/world-map.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/biology/README.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/biology/cells3d.lock.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/biology/data.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/biology/fluorescence.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/biology/organelle.lock.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/biology/requirements.txt +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/biology_panels.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/blender/complex_lab_scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/blender/lab_scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/blender/occlusion_scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/blender/organelle_scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/blender/research_lab_views.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/broken_axis.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/clipping_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/compiled_marker_shapes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/compiled_scene_viewer.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/compositing_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/composition_recipes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/data/general-plots/benchmark.csv +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/data/general-plots/learning.csv +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/data/general-plots/revenue.csv +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/data/general-plots/sensor.csv +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/dense_scatter_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/diagram_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/engine_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/feature_flow.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/fluorescence_biology.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/gallery.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/general_plots.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/graph.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/hatch_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/hello_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/label_intensities.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/layout_editor.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/oblique_biology.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/panels.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/plot_composition.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/plot_engine_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/plot_quality_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/polar.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/preset_formats.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/presets.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/real_biology.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/render_scene_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/render_smoke.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/research_figure_planner.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/research_planner_study.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/research_revision.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/showcase/README.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/showcase/assets.lock.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/showcase/blender_scenes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/showcase/figures.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/slab_biology.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/state_machine.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/stress20.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v25_document.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v2_cases.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v2_document.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v3_complex_scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v3_render_jobs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v3_rendering.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v3_scene_annotations.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v3_scene_passes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v3_scene_paths.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v3_scene_templates.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/README.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/browser_scatter.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/contours_streamlines.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/data/world-countries.geojson +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/data/world-map-source.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/data/world-population.csv +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/engineering_report.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/faceted_operations.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/fixtures/assembly.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/fixtures/manifest.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/fixtures/measurement.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/fixtures/region-shapes.geojson +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/fixtures/regions.csv +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/fixtures/regions.geojson +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/fixtures/transport.geojson +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/linked_dashboard.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/linked_selection.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/linked_selection.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/mesh_fields.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/region_shapes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/regional_analysis.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/regional_report.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/scientific_report.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/statistical_views.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/table_inputs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/time_series.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/transport_map.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/examples/v4/world_population.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/annot.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/bio3d.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/cartoon.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/chem_data.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/chem_fingerprints.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/data/1m17-kinase.pdb +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/data/README.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/drug_discovery.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/mouse_brain_data.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/neural_activity.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/pdbfile.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/showcase_part.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/showcase_process.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/showcase_season.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/structure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/structure_data.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/target.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/figures/trial.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/README.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/biology-panels.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/chem_fingerprints.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/clipping-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/compiled-marker-shapes.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/compiled-scene-viewer.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/compiled-viewer-culling.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/compiled-viewer-deep-zoom.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/compositing-pdf-after.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/compositing-pdf-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/compositing-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/dense-scatter-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/diagram-labels-after.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/diagram-labels-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/diagram-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/engine-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/engine-transparency-after.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/engine-transparency-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/flow.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/fluorescence-biology.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/general-plots-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/general-plots.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/hatch-pdf-after.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/hatch-pdf-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/hatch-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/hatch-svg-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/label-intensities.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/oblique-biology.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/part.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/plot-axis-after.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/plot-axis-before.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/plot-engine-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/plots.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/polar.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/preset-formats.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/presets.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/process.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/real-biology.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/render-scene-data.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/render-scene-initial.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/render-scene-review.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/research-crossing-revision.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/research-figure-planner.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/research-planner-study.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/research-revision.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/season.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-architecture-sketch.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-architecture.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-attractor.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-helix.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-interference.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-lattice.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-photonics.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/showcase-wave-packets.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/slab-biology.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/stress20.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/structure.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/v3-complex-scene.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/v3-render-jobs.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/v3-rendering.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/v3-scene-annotations.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/v3-scene-passes.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/v3-scene-paths.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/gallery/v3-scene-templates.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/mkdocs.yml +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/requirements-ci.txt +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/requirements-docs.txt +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/requirements-tables.txt +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/scripts/bench_svg.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/scripts/rasterise.sh +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/scripts/sanity_typeset.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/__main__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/asset.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/cache.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/cutout.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/deps.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/harmonise.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/lineart.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/mask.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/provenance.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/raster.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/sidecar.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/assets/silhouette.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/cli.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/components.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/batch.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/diagram.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/envelope.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/geom.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/prims.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/style.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/trace.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/core/units.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/abut.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/break_rules.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/color.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/cross.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/image.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/key_rules.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/link_rules.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/path_rules.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/plot_rules.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/report.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/rules.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/diagnostics/three_rules.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/compiler.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/data.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/data_io.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/module.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/presets.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/publication.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/document/spec.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/annotate.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/bezier_clip.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/clip.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/coords.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/path.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/place.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/draw/shapes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/_table_adapters.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/compiled.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/compiled.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/drawings.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/editor.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/editor.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/fields.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/geography.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/grid.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/images.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/overrides.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/page.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/regions.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/runtime.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/series.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/browser/timeaxis.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/channels.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/contours.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/engineering.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/fields.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/figure_planner.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/grid.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/measurement.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/measurements.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/planner_geometry.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/regions.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/scene_viewer/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/scene_viewer/controls.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/scene_viewer/page.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/scene_viewer/runtime.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/scene_viewer/spatial.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/sections.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/selection.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/slabs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/temporal.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/tiff.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/experimental/volume.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/fit.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/flow.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/graph.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/graph_force.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/graph_layered.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/graph_tree.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/labels.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/layout/sankey.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/links/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/links/curves.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/links/link.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/axis.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/breaks.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/categories.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/facets.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/inset.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/key.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/marks.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/notes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/panel.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/png.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/polar.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/ramp.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/raster.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/ribbon.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/scale.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/scatter_batch.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/scatter_raster.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/series.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/simplify.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/plot/timescale.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/analysis.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/bounds.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/brushes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/bundle.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/composite.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/fontembed.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/glyphs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/hatching.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/outline.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/paint.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/pathdata.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/pdf.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/pdftext.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/preview.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/raster.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/resources.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/revision.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/render/svg.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/themes/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/themes/color.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/themes/palettes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/themes/theme.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/api.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/backend.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/device_worker.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/discover.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/lineart.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/options.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/scene_worker.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/script.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/svgread.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/template_worker.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender/tracing.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/blender_backend.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/camera.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/deps.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/depth.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/devices.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/drill.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/edges.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/hlr.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/linalg.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/mesh.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/occlude.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/order.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/parse.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/place.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/protein.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/quality.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/render_jobs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/scene_annotations.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/scene_pass.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/scene_projection.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/scenes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/shade.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/solids.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/templates.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/three/templates.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/typeset/__init__.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/typeset/fonts.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/typeset/markup.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/typeset/onpath.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/typeset/outline.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/src/inklet/typeset/shaping.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/assets/mouse.inklet.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/assets/mouse.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/dense_graph.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/draw_probe.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/assets/sem.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/assets/tem.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/cell.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/common.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/data.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/imaging.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/kinetics.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/micrograph.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro/system.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/electro_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/fidelity.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/flow.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/hard_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/label_storm.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/mega_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/meshes/README.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/meshes/brain-lh.obj +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/meshes/spot.obj +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/panels/apparatus.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/panels/graphs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/panels/relations.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/panels/responses.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/panels/sections.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/probes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/stress/three_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_alignment_contract.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_annotate.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_annotate_letters.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_assets.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_assets_provenance.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_biology_source.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_blend_scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_compiled.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_facets.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_geography.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_overrides.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_regions.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_revision.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_scatter.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_series.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_statistics.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_switching.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_browser_time.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_categories.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_channels_contours.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_chem_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_cli.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_clip_engine.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_components.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_compositing_engine.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_composition_recipes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_contrast_and_labels.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_cookbook.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_core.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_core_amendments.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_csv_input.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_api.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_artwork.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_break_distorts.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_crossing.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_image_contrast.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_ink.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_keys.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_links.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_paths.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagnostics_plot_box.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_diagram_engine.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_docs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_docs_site.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_document.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_document_data.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_document_v25.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_draw_clip.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_draw_path.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_draw_place.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_draw_shapes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_engine_layout.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_engine_rendering.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_engine_scatter.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_engineering_report.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_export_bundle.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_figure_planner.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_fit.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_grid_fields.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_guides.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_hatch_engine.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_label_measurements.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_layout.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_layout_graph.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_layout_graph_fit.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_layout_origin.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_layout_overrides.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_layout_sankey.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_links.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_links_avoid.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_links_shapes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_marker_batches.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_mesh_fields.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_microscopy_tiff.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_neural_activity.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_output_contract.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_paint_program.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_place_labels.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_axis.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_broken_axis.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_clip.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_engine.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_facets.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_inset.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_key.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_labels.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_legend.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_marks.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_notes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_polar.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_publication.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_quality_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_raster.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_recipes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_ribbon.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_scale.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_swarm.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_plot_time.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_presets.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_publication_limits.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_regional_report.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_release_adversarial.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_devices.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_embed.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_glyphs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_jobs.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_outline.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_pdf.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_pdf_text.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_quality.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_scene.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_style_fields.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_svg_perf.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_render_v3.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_review_v25.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_round4_plot.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_routing_avoid.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scatter_rendering.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scene_annotations.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scene_culling.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scene_pass.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scene_projection.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scene_templates.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scene_viewer.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_scientific_report.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_sections.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_shared_plot_margins.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_showcase_library.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_showcase_round3.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_slabs_regions.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_structure_figure.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_svg.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_table_adapters.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_target_pose.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_temporal_adapters.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_text_markup.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_text_on_path.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_theme_font_style.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_themes.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_anchor_pin.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_api.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_backend_blender.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_blender.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_depth_order.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_drill.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_hlr.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_mesh.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_order_vector.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_overlay.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_parse.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_patches.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_place.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_protein.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_ridges.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_sort.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_sort_budget.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_three_view.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_typeset.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_v4_selection.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_volume.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_watch_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/test_world_map_example.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/README.md +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/categories-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/categories-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/components-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/components-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/dense-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/dense-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/fonts.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/inset-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/inset-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/markers-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/markers-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/renderers.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/type-opacity-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/type-opacity-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-dense-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-dense-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v2-workflow-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v25-document-pdf.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/baseline/v25-document-svg.png +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/fixtures.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tests/visual/v2-budgets.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_batches.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_clipping.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_diagrams.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_engine.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_lines.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_marker_index.mjs +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_scene_culling.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_scene_gpu.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_scene_redraw.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_scene_viewer.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_scene_zoom.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_v2.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/benchmark_v4.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/browser_study.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/check_render_wheel.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/dock_ligand.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_previews.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_previews.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_site.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_theme/404.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_theme/card.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_theme/gallery.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_theme/home.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_theme/main.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/docs_theme/plot-gallery.html +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/gen_api.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/make_culling_review.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/plot_catalog.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/prepare_world_map.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/preset_gallery.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/profile_scene_redraw.js +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/showcase_gallery.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/stress20.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/strip_pdb.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/v3_showcase.py +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/tools/v4-budgets.json +0 -0
- {inklet-4.0.0.dev8 → inklet-4.0.0.dev9}/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.dev9
|
|
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.dev9' >&2
|
|
47
47
|
exit 1
|
|
48
48
|
}
|
|
49
49
|
gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
|
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 4.0.0.dev9 — 2026-09-12
|
|
6
|
+
|
|
7
|
+
Ninth development preview: mouse movement and proportional artwork scaling.
|
|
8
|
+
3.1.0 remains the stable release.
|
|
9
|
+
|
|
10
|
+
- Add click/drag selection and movement, corner scale handles, containing-group
|
|
11
|
+
selection, keyboard nudges and cancellable pointer gestures to LayoutEditor.
|
|
12
|
+
- Map gestures through nested physical coordinate units and scales. Preserve
|
|
13
|
+
measured positions with folded offsets and keep the opposite scale corner fixed.
|
|
14
|
+
- Add explicit Composition child scale, preserving registered ports and scaling
|
|
15
|
+
complete artwork. Width/height fitting retains its separate layout semantics.
|
|
16
|
+
- Save scale in composition-layout schema 0.2; continue loading schema 0.1 files.
|
|
17
|
+
- Cover geometry, ports, all four corners, undo/reopen, nested transforms,
|
|
18
|
+
invalid gestures and browser/Python export agreement; update the editor guide.
|
|
19
|
+
|
|
5
20
|
## 4.0.0.dev8 — 2026-09-12
|
|
6
21
|
|
|
7
22
|
Eighth development preview: local browser layout editing with Python compilation.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: inklet
|
|
3
|
-
Version: 4.0.0.
|
|
3
|
+
Version: 4.0.0.dev9
|
|
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.dev9** adds mouse movement and proportional artwork scaling to the
|
|
85
|
+
local layout editor. Drag named objects and groups, use corner handles, undo
|
|
86
|
+
gestures, and save choices that reproduce through the Python compiler.
|
|
87
87
|
```sh
|
|
88
|
-
python -m pip install "inklet==4.0.0.
|
|
88
|
+
python -m pip install "inklet==4.0.0.dev9"
|
|
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.dev9)
|
|
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.dev9** adds mouse movement and proportional artwork scaling to the
|
|
35
|
+
local layout editor. Drag named objects and groups, use corner handles, undo
|
|
36
|
+
gestures, and save choices that reproduce through the Python compiler.
|
|
37
37
|
```sh
|
|
38
|
-
python -m pip install "inklet==4.0.0.
|
|
38
|
+
python -m pip install "inklet==4.0.0.dev9"
|
|
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.dev9)
|
|
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,
|
|
@@ -218,7 +218,7 @@ A figure assembled from named children and measured expressions.
|
|
|
218
218
|
|
|
219
219
|
* `measure(name, dimension='width')` -- Reference a child's measured width or height, in composition units.
|
|
220
220
|
* `point(name, anchor='center')` -- Reference a placed child's compass point or registered port.
|
|
221
|
-
* `add(name, item, *, x=0, y=0, anchor=None, width=None, height=None)`
|
|
221
|
+
* `add(name, item, *, x=0, y=0, anchor=None, width=None, height=None, scale=1)`
|
|
222
222
|
* `replace(name, item)` -- Replace a child while preserving its placement and dependent references.
|
|
223
223
|
* `slot(name, **placement)` -- Declare a required content input with the same placement options as add().
|
|
224
224
|
* `copy()` -- Copy nested compositions, plots, modules and component instructions.
|
|
Binary file
|
|
@@ -48,7 +48,7 @@ Blender. Scene creation and rendering run Blender in a separate process.
|
|
|
48
48
|
### Development-preview table adapters
|
|
49
49
|
|
|
50
50
|
The [pandas and Polars adapters](table-inputs.md) are included in the experimental
|
|
51
|
-
[4.0.0.
|
|
51
|
+
[4.0.0.dev9 preview](development-preview.md), not in stable 3.1.0. Their `pandas` and `polars` extras are separate
|
|
52
52
|
from core dependencies. The adapter CI jobs use Linux/Python 3.12 with pandas
|
|
53
53
|
2.2.0 / Polars 1.0.0 and the versions pinned in `requirements-tables.txt`.
|
|
54
54
|
Both paths check scalar/identity contracts and saved-state SVG reconstruction.
|
|
@@ -86,7 +86,9 @@ assert before.to_svg() == old_svg
|
|
|
86
86
|
assert doc.compile() is after
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
`place()` changes
|
|
89
|
+
`place()` changes placement fields: `x`, `y`, `anchor`, `width`, `height` and
|
|
90
|
+
`scale`. Explicit `scale` (dev9) uniformly scales complete artwork, including
|
|
91
|
+
text and strokes; it is separate from fitting a plot to a new width/height.
|
|
90
92
|
Set `anchor`, `width` or `height` to `None` to restore their unspecified behavior.
|
|
91
93
|
`replace()` replaces content and keeps its placement and named relationships.
|
|
92
94
|
Dimension updates through `configure()` validate before mutation; expressions,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Inklet 4.0.0.
|
|
1
|
+
# Inklet 4.0.0.dev9
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The ninth 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.dev9"
|
|
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.dev9"
|
|
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.dev9"
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
The core preview needs no browser server, NumPy, pandas, Polars or Blender.
|
|
@@ -29,7 +29,26 @@ 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
|
+
## Mouse movement and scaling in dev9
|
|
33
|
+
|
|
34
|
+
The [layout editor](layout-editor.md) now supports direct mouse movement and
|
|
35
|
+
proportional corner scaling of named objects and groups. Alt-click selects a
|
|
36
|
+
containing group, arrow keys nudge, and Escape cancels. A drag shows an outline;
|
|
37
|
+
release compiles the actual figure and updates dependent links.
|
|
38
|
+
|
|
39
|
+
Moves preserve measured positions by adding offsets. Scaling keeps the opposite
|
|
40
|
+
corner fixed, including inside scaled groups with different coordinate units.
|
|
41
|
+
Each completed edit participates in undo/redo and saved-layout reconstruction.
|
|
42
|
+
Uniform artwork scaling includes text and strokes; plot width/height controls
|
|
43
|
+
retain their separate typography-preserving layout behavior.
|
|
44
|
+
|
|
45
|
+

|
|
46
|
+
|
|
47
|
+
New layout files use schema 0.2 for explicit artwork scale. Dev7/dev8 schema 0.1
|
|
48
|
+
files still load. Named composition objects are editable; individual plot marks,
|
|
49
|
+
axis labels, connector segments and camera parameters remain outside this scope.
|
|
50
|
+
|
|
51
|
+
## Local layout inspector retained from dev8
|
|
33
52
|
|
|
34
53
|
The [local layout editor](layout-editor.md) turns saved composition choices into
|
|
35
54
|
a browser workflow. Edit named placements and dimensions, preview the actual
|
|
@@ -45,7 +64,7 @@ remain consistent across repeated edits and resets.
|
|
|
45
64
|

|
|
46
65
|
|
|
47
66
|
This inspector requires its local Python session. It covers composition layout;
|
|
48
|
-
|
|
67
|
+
label content, individual plot marks and cameras remain separate work.
|
|
49
68
|
The existing standalone viewers and linked-plot appearance editor retain their
|
|
50
69
|
current scope.
|
|
51
70
|
|
|
@@ -162,7 +181,7 @@ The wheel contains the library. To obtain recipes and fixtures, use the matching
|
|
|
162
181
|
release checkout or source archive:
|
|
163
182
|
|
|
164
183
|
```sh
|
|
165
|
-
git clone --branch v4.0.0.
|
|
184
|
+
git clone --branch v4.0.0.dev9 https://github.com/Mapika/inklet.git
|
|
166
185
|
cd inklet
|
|
167
186
|
python -m pip install -e '.[render]'
|
|
168
187
|
python examples/v4/regional_report.py --renderer compiled --editor --output out/regional
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Inklet requires Python 3.11 or later and an installed TrueType/OpenType font.
|
|
4
4
|
The core Python dependencies are HarfBuzz bindings and fontTools.
|
|
5
5
|
|
|
6
|
-
This page covers stable **Inklet 3.1** and the opt-in **4.0.0.
|
|
6
|
+
This page covers stable **Inklet 3.1** and the opt-in **4.0.0.dev9 preview**. See the
|
|
7
7
|
[compatibility matrix](compatibility.md) for tested platforms and Blender versions.
|
|
8
8
|
|
|
9
9
|
## From PyPI
|
|
@@ -24,9 +24,9 @@ Activate the environment or prefix commands with `.venv/bin/` on Linux/macOS.
|
|
|
24
24
|
## 4.0 development preview
|
|
25
25
|
|
|
26
26
|
```sh
|
|
27
|
-
python -m pip install "inklet==4.0.0.
|
|
27
|
+
python -m pip install "inklet==4.0.0.dev9"
|
|
28
28
|
# Optional rendering and DataFrame adapters:
|
|
29
|
-
python -m pip install "inklet[render,pandas,polars]==4.0.0.
|
|
29
|
+
python -m pip install "inklet[render,pandas,polars]==4.0.0.dev9"
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
Use a separate virtual environment when trying the preview. Experimental APIs
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Local layout editor
|
|
2
2
|
|
|
3
|
-
Available
|
|
3
|
+
Available since **4.0.0.dev8**, with mouse gestures in **4.0.0.dev9**, under `inklet.experimental.layout_editor`. Adjust
|
|
4
4
|
named placements and dimensions in a browser while Python recompiles the
|
|
5
5
|
actual composition. The preview and downloaded SVG/PDF come from the same
|
|
6
6
|
compiled figure, including plots, nested diagrams and native 3D content.
|
|
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:
|
|
@@ -45,12 +45,42 @@ width and height, including its coordinate unit. Optional `width=` and
|
|
|
45
45
|
`height=` arguments fix the containing document's dimensions in millimetres;
|
|
46
46
|
those dimensions remain authoritative when the authored page size changes.
|
|
47
47
|
|
|
48
|
+
## Move and scale with the mouse
|
|
49
|
+
|
|
50
|
+
Click a named object in the preview and drag it to move. Corner handles scale
|
|
51
|
+
its complete artwork proportionally, keeping the opposite corner fixed. This
|
|
52
|
+
works for plots, modules, text, images, native 3D components and nested
|
|
53
|
+
compositions. A dashed outline follows the pointer; release to compile the
|
|
54
|
+
result and update dependent links. Escape or a cancelled pointer gesture leaves
|
|
55
|
+
the figure unchanged. A simple click selects without making an edit.
|
|
56
|
+
|
|
57
|
+
Use Alt-click to select a containing group, or choose its path in **Content**.
|
|
58
|
+
Drag a selected group's outline to move the group. With the canvas focused,
|
|
59
|
+
arrow keys move the selected object by 1 mm in figure space; Shift changes that
|
|
60
|
+
to 10 mm. Mouse and pointer gestures use the same coordinates even inside
|
|
61
|
+
scaled groups or compositions with different coordinate units.
|
|
62
|
+
|
|
63
|
+
Each completed edit is one undo step. Movements add offsets to measured
|
|
64
|
+
positions instead of discarding their relationships. Repeated offsets are
|
|
65
|
+
combined, so a long editing session does not grow ever-deeper expressions.
|
|
66
|
+
Saved layout files retain movement and scaling for Python reconstruction.
|
|
67
|
+
|
|
68
|
+
**Scaling artwork also scales its text and strokes.** To resize a plot's data
|
|
69
|
+
region while retaining physical typography, use the width/height controls
|
|
70
|
+
below. The **Uniform scale** field gives an exact artwork scale factor; Reset
|
|
71
|
+
target restores the original factor and placement.
|
|
72
|
+
|
|
73
|
+
The selectable units are named composition children and groups. Individual
|
|
74
|
+
marks, ticks, axis labels and connector segments remain part of their owning
|
|
75
|
+
plot or diagram. Scaling and movement do not remove authored constraints or
|
|
76
|
+
top-fitting behavior; dependent content can reflow when the compiler rebuilds.
|
|
77
|
+
|
|
48
78
|
## Edit and review
|
|
49
79
|
|
|
50
80
|
Choose a named path in **Content**, enter the fields you want to change, then
|
|
51
81
|
select **Apply layout**. Other fields retain their definitions.
|
|
52
82
|
|
|
53
|
-
- Child placement fields are X, Y, anchor, width and
|
|
83
|
+
- Child placement fields are X, Y, anchor, width, height and uniform scale. Numbers use the
|
|
54
84
|
containing composition's coordinate unit. For plots, width and height describe
|
|
55
85
|
the data region; changing them does not scale text or strokes.
|
|
56
86
|
- A field marked **Measured** still follows its layout expression. Entering a
|
|
@@ -91,6 +121,7 @@ import json
|
|
|
91
121
|
from pathlib import Path
|
|
92
122
|
|
|
93
123
|
editor.command('edit', {'path': '/chart', 'placement': {'height': 35}})
|
|
124
|
+
editor.command('gesture', {'path': '/chart', 'dx': 2, 'dy': 1})
|
|
94
125
|
Path('layout-overrides.json').write_text(json.dumps(editor.overrides(), indent=2))
|
|
95
126
|
editor.figure.save('edited.svg', 'edited.pdf')
|
|
96
127
|
restored, report = recipe.with_layout_overrides(editor.overrides())
|
|
@@ -100,8 +131,10 @@ assert report['orphaned_targets'] == []
|
|
|
100
131
|
`editor.figure` is the last successful compiled snapshot and supports the normal
|
|
101
132
|
[export APIs](export-review.md), including PNG when render dependencies are
|
|
102
133
|
installed. `overrides()` and `snapshot()` return independently owned data.
|
|
103
|
-
Programmatic `command()` accepts `edit`, `reset`, `load`, `undo`,
|
|
104
|
-
`refresh`; an optional `revision=` rejects stale callers.
|
|
134
|
+
Programmatic `command()` accepts `gesture`, `edit`, `reset`, `load`, `undo`,
|
|
135
|
+
`redo` and `refresh`; an optional `revision=` rejects stale callers. A gesture
|
|
136
|
+
uses figure-space `dx`/`dy` in millimetres. Optional `factor` and `corner`
|
|
137
|
+
(`nw`, `ne`, `sw`, `se`) scale from the opposite corner.
|
|
105
138
|
|
|
106
139
|
## Refresh changed source content
|
|
107
140
|
|
|
@@ -130,8 +163,8 @@ remain accessible in Python. The `with LayoutEditor(recipe) as editor:` form
|
|
|
130
163
|
starts and closes the server automatically; keep that context alive during
|
|
131
164
|
browser use.
|
|
132
165
|
|
|
133
|
-
|
|
134
|
-
plot
|
|
166
|
+
The inspector edits named composition layout and artwork scale. Label content,
|
|
167
|
+
individual plot marks, camera controls, and file watching are not part of this interface.
|
|
135
168
|
The separate [linked-plot appearance editor](visual-editing.md) retains its
|
|
136
169
|
existing scope. Broader authoring and identity work remains on the
|
|
137
170
|
[4.0 roadmap](roadmap.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Save and restore layout choices
|
|
2
2
|
|
|
3
|
-
Available
|
|
3
|
+
Available since **4.0.0.dev7**; uniform artwork scale is added in **dev9**. Save placement and dimension edits separately from
|
|
4
4
|
a [composition recipe](composition-recipes.md), then restore those choices
|
|
5
5
|
when its data, labels or content change. The saved JSON records only differences
|
|
6
6
|
from a reference recipe. Unedited source decisions remain in control.
|
|
@@ -41,7 +41,7 @@ Path('layout.json').write_text(json.dumps(state, indent=2, allow_nan=False))
|
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
`layout_overrides(reference)` captures changed `x`, `y`, `anchor`, `width` and
|
|
44
|
-
`height` fields on children, plus `width`, `height`, `unit` and `fit_top` on
|
|
44
|
+
`height` and uniform `scale` fields on children, plus `width`, `height`, `unit` and `fit_top` on
|
|
45
45
|
compositions. It visits nested compositions through their named children.
|
|
46
46
|
Measured expressions remain expressions, so page resizing and dependent
|
|
47
47
|
content measurements still work after reopening.
|
|
@@ -123,8 +123,10 @@ of 32 operations. Malformed files, nonfinite numbers, invalid properties and
|
|
|
123
123
|
contradictory edits to a shared nested definition are rejected, including when
|
|
124
124
|
`missing='drop'` is used.
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
New files use `inklet.composition-layout/0.2`, which adds a positive uniform
|
|
127
|
+
artwork scale. The loader also accepts `inklet.composition-layout/0.1` files
|
|
128
|
+
from dev7/dev8; those cannot contain scale fields. Unknown schemas are rejected.
|
|
129
|
+
Upgrade older readers before opening a new 0.2 file. The file is a JSON object with `schema` and `targets`; each target has
|
|
128
130
|
changed `placement` and/or `page` fields. It is a development-preview format,
|
|
129
131
|
not a general Python object serializer or an asset manifest.
|
|
130
132
|
|
|
@@ -58,8 +58,10 @@ Dev7 adds [saved layout overrides](layout-overrides.md) keyed by named paths,
|
|
|
58
58
|
with measured expressions, independent restoration and explicit orphan reports.
|
|
59
59
|
Dev8 adds a [local layout inspector](layout-editor.md) backed by Python
|
|
60
60
|
compilation, with saved choices, undo/redo and explicit source refresh.
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
Dev9 adds mouse movement, proportional artwork scaling and keyboard nudges
|
|
62
|
+
for named composition children, with preserved measured positions and saved
|
|
63
|
+
choices. Serialized project templates, asset manifests, shared selection
|
|
64
|
+
relationships, label/camera editing and finer-grained manipulation remain open. Subsequent work
|
|
63
65
|
should extend authoring and cross-content identity beyond this bounded inspector.
|
|
64
66
|
|
|
65
67
|
## Who this should serve
|
|
@@ -12,6 +12,12 @@ from .spec import BuildSpec, ComponentSpec, fingerprint, freeze, length
|
|
|
12
12
|
from .compiler import LayoutError
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
def _scale(value):
|
|
16
|
+
if type(value) not in (int,float) or not math.isfinite(value) or value<=0:
|
|
17
|
+
raise ValueError('component scale must be a finite positive number')
|
|
18
|
+
return float(value)
|
|
19
|
+
|
|
20
|
+
|
|
15
21
|
@dataclass(frozen=True)
|
|
16
22
|
class _Slot(BuildSpec):
|
|
17
23
|
name: str
|
|
@@ -66,6 +72,7 @@ class _Part:
|
|
|
66
72
|
anchor: str | None = None
|
|
67
73
|
width: object = None
|
|
68
74
|
height: object = None
|
|
75
|
+
scale: float = 1
|
|
69
76
|
|
|
70
77
|
|
|
71
78
|
@dataclass(eq=False)
|
|
@@ -76,7 +83,8 @@ class Composition(BuildSpec):
|
|
|
76
83
|
and height describe data regions. Other children retain their authored size
|
|
77
84
|
unless explicit dimensions are provided. `anchor=None` preserves the local
|
|
78
85
|
coordinate frame; `nw`, `center`, registered ports and `area-nw` align a
|
|
79
|
-
measured point to (x, y).
|
|
86
|
+
measured point to (x, y). Dimension fitting never scales text or strokes. Explicit scale uniformly
|
|
87
|
+
scales the complete child artwork, including typography and strokes.
|
|
80
88
|
"""
|
|
81
89
|
width: float
|
|
82
90
|
height: float
|
|
@@ -109,11 +117,11 @@ class Composition(BuildSpec):
|
|
|
109
117
|
"""Reference a placed child's compass point or registered port."""
|
|
110
118
|
return tuple(LayoutValue('point', (name, anchor, axis)) for axis in ('x', 'y'))
|
|
111
119
|
|
|
112
|
-
def add(self, name, item, *, x=0, y=0, anchor=None, width=None, height=None):
|
|
120
|
+
def add(self, name, item, *, x=0, y=0, anchor=None, width=None, height=None, scale=1):
|
|
113
121
|
if not isinstance(name, str) or not re.fullmatch(r'[A-Za-z][A-Za-z0-9_-]*', name):
|
|
114
122
|
raise ValueError('component names start with a letter and contain letters, digits, underscores or hyphens')
|
|
115
123
|
if any(part.name == name for part in self._parts): raise LayoutError(f'duplicate component {name!r}')
|
|
116
|
-
self._parts.append(_Part(name, item, x, y, anchor, width, height))
|
|
124
|
+
self._parts.append(_Part(name, item, x, y, anchor, width, height, _scale(scale)))
|
|
117
125
|
return item
|
|
118
126
|
|
|
119
127
|
def __getitem__(self, name):
|
|
@@ -171,12 +179,13 @@ class Composition(BuildSpec):
|
|
|
171
179
|
def place(self, name, **placement):
|
|
172
180
|
"""Edit a child's placement without replacing its content or named links.
|
|
173
181
|
|
|
174
|
-
Accepts x, y, anchor, width and
|
|
182
|
+
Accepts x, y, anchor, width, height and uniform scale as in add(). Expressions and
|
|
175
183
|
resulting geometry are validated during compilation.
|
|
176
184
|
"""
|
|
177
185
|
from dataclasses import replace
|
|
178
|
-
unknown = placement.keys() - {'x','y','anchor','width','height'}
|
|
186
|
+
unknown = placement.keys() - {'x','y','anchor','width','height','scale'}
|
|
179
187
|
if unknown: raise TypeError(f'unknown placement options: {", ".join(sorted(unknown))}')
|
|
188
|
+
if 'scale' in placement: placement['scale'] = _scale(placement['scale'])
|
|
180
189
|
for index,part in enumerate(self._parts):
|
|
181
190
|
if part.name == name:
|
|
182
191
|
self._parts[index] = replace(part, **freeze(placement))
|
|
@@ -282,7 +291,15 @@ class Composition(BuildSpec):
|
|
|
282
291
|
item = ComponentSpec(item.factory, evaluate(item.args), evaluate(item.kwargs), item.responsive)
|
|
283
292
|
w = None if part.width is None else length(evaluate(part.width), 'child width')*self.unit
|
|
284
293
|
h = None if part.height is None else length(evaluate(part.height), 'child height')*self.unit
|
|
285
|
-
|
|
294
|
+
node = context.build(item, w, h).copy()
|
|
295
|
+
factor = _scale(part.scale)
|
|
296
|
+
if factor != 1:
|
|
297
|
+
scaled = node.scaled(factor)
|
|
298
|
+
# Keep registered ports directly available to measured
|
|
299
|
+
# placement; their coordinates precede the new scale.
|
|
300
|
+
for key in node.anchors: scaled.anchors[key] = placed_anchor(node,key)
|
|
301
|
+
node = scaled
|
|
302
|
+
return node
|
|
286
303
|
built[name] = guarded('measure', name, perform)
|
|
287
304
|
return built[name]
|
|
288
305
|
|
|
@@ -7,8 +7,9 @@ import re
|
|
|
7
7
|
from .compiler import LayoutError
|
|
8
8
|
from .spec import length
|
|
9
9
|
|
|
10
|
-
SCHEMA = 'inklet.composition-layout/0.
|
|
11
|
-
|
|
10
|
+
SCHEMA = 'inklet.composition-layout/0.2'
|
|
11
|
+
LEGACY_SCHEMA = 'inklet.composition-layout/0.1'
|
|
12
|
+
_PLACEMENT = {'x', 'y', 'anchor', 'width', 'height', 'scale'}
|
|
12
13
|
_PAGE = {'width', 'height', 'unit', 'fit_top'}
|
|
13
14
|
_NAME = r'[A-Za-z][A-Za-z0-9_-]*'
|
|
14
15
|
|
|
@@ -58,7 +59,10 @@ def _placement(values, *, encode=False):
|
|
|
58
59
|
if not isinstance(values,dict) or not values or not set(values)<=_PLACEMENT:
|
|
59
60
|
raise ValueError('invalid placement override properties')
|
|
60
61
|
for key,value in values.items():
|
|
61
|
-
if key=='
|
|
62
|
+
if key=='scale':
|
|
63
|
+
from .composition import _scale
|
|
64
|
+
result[key] = _scale(value)
|
|
65
|
+
elif key=='anchor':
|
|
62
66
|
if value is not None and (not isinstance(value,str) or not value):
|
|
63
67
|
raise ValueError('placement anchors must be nonempty strings or null')
|
|
64
68
|
result[key] = value
|
|
@@ -125,7 +129,7 @@ def apply(recipe, value, *, missing='error'):
|
|
|
125
129
|
"""Validate all edits, reconcile stable names, then edit an independent copy."""
|
|
126
130
|
from .composition import Composition
|
|
127
131
|
if missing not in ('error','drop'): raise ValueError('missing policy must be error or drop')
|
|
128
|
-
if (not isinstance(value,dict) or set(value)!={'schema','targets'} or value['schema']
|
|
132
|
+
if (not isinstance(value,dict) or set(value)!={'schema','targets'} or value['schema'] not in (SCHEMA,LEGACY_SCHEMA)
|
|
129
133
|
or not isinstance(value['targets'],dict)):
|
|
130
134
|
raise ValueError('invalid composition layout overrides')
|
|
131
135
|
targets = _targets(recipe)
|
|
@@ -136,7 +140,10 @@ def apply(recipe, value, *, missing='error'):
|
|
|
136
140
|
if not isinstance(entry,dict) or not entry or not set(entry)<={'placement','page'}:
|
|
137
141
|
raise ValueError(f'invalid layout target properties: {path}')
|
|
138
142
|
options = {}
|
|
139
|
-
if 'placement' in entry:
|
|
143
|
+
if 'placement' in entry:
|
|
144
|
+
options['placement'] = _placement(entry['placement'])
|
|
145
|
+
if value['schema']==LEGACY_SCHEMA and 'scale' in options['placement']:
|
|
146
|
+
raise ValueError('scale requires composition layout schema 0.2')
|
|
140
147
|
if 'page' in entry: options['page'] = _page(entry['page'])
|
|
141
148
|
target = targets.get(path)
|
|
142
149
|
invalid = target is None
|
|
@@ -3,6 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import copy
|
|
5
5
|
import json
|
|
6
|
+
import math
|
|
7
|
+
import xml.etree.ElementTree as ET
|
|
6
8
|
from pathlib import Path
|
|
7
9
|
import secrets
|
|
8
10
|
import threading
|
|
@@ -10,7 +12,7 @@ from urllib.parse import urlsplit, parse_qs
|
|
|
10
12
|
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
|
|
11
13
|
|
|
12
14
|
from ...document import Composition, document
|
|
13
|
-
from ...document.layout_overrides import SCHEMA, _targets, _placement
|
|
15
|
+
from ...document.layout_overrides import SCHEMA, _targets, _placement, _expression
|
|
14
16
|
|
|
15
17
|
|
|
16
18
|
class LayoutEditor:
|
|
@@ -57,6 +59,68 @@ class LayoutEditor:
|
|
|
57
59
|
"""Return independently owned JSON-compatible saved layout choices."""
|
|
58
60
|
with self._lock:return copy.deepcopy(self._value)
|
|
59
61
|
|
|
62
|
+
def _geometry(self):
|
|
63
|
+
from ...core import Vec2
|
|
64
|
+
from ...draw.coords import placed_anchor, plot_area
|
|
65
|
+
root,resolved=self._figure.build()
|
|
66
|
+
targets=_targets(self._recipe)
|
|
67
|
+
geometry={}
|
|
68
|
+
def visit(node,path=''):
|
|
69
|
+
if node.kind=='composition-part' and node.name:
|
|
70
|
+
path=path+'/'+node.name
|
|
71
|
+
if path in targets:
|
|
72
|
+
parent,part,_=targets[path]
|
|
73
|
+
placement=resolved[node.id];box=placement.bbox
|
|
74
|
+
child=node.children[0]
|
|
75
|
+
if part.anchor=='area-nw':
|
|
76
|
+
area=plot_area(child);point=Vec2(area.x0,area.y0)
|
|
77
|
+
elif part.anchor is None:point=Vec2(0,0)
|
|
78
|
+
else:point=placed_anchor(child,part.anchor)
|
|
79
|
+
anchor=placement.world.apply(point)
|
|
80
|
+
inverse=placement.world.inverse()
|
|
81
|
+
if box is not None:
|
|
82
|
+
geometry[path]=dict(box=[box.x0,box.y0,box.width,box.height],
|
|
83
|
+
anchor=[anchor.x,anchor.y],
|
|
84
|
+
inverse=[inverse.a/parent.unit,inverse.b/parent.unit,
|
|
85
|
+
inverse.c/parent.unit,inverse.d/parent.unit])
|
|
86
|
+
for child in node.children:visit(child,path)
|
|
87
|
+
visit(root)
|
|
88
|
+
return geometry
|
|
89
|
+
|
|
90
|
+
def _gesture(self,value):
|
|
91
|
+
from ...document.composition import LayoutValue, _scale
|
|
92
|
+
if (not isinstance(value,dict) or not {'path','dx','dy'}<=set(value) or
|
|
93
|
+
not set(value)<={'path','dx','dy','factor','corner'}):
|
|
94
|
+
raise ValueError('gesture needs path and finite figure-space dx/dy')
|
|
95
|
+
for key in ('dx','dy'):
|
|
96
|
+
if type(value[key]) not in (int,float) or not math.isfinite(value[key]):
|
|
97
|
+
raise ValueError('gesture displacement must be finite')
|
|
98
|
+
path=value['path'];geometry=self._geometry()
|
|
99
|
+
if not isinstance(path,str) or path not in geometry:raise ValueError('unknown gesture target')
|
|
100
|
+
_,part,_=_targets(self._recipe)[path]
|
|
101
|
+
box=geometry[path]['box'];anchor=geometry[path]['anchor']
|
|
102
|
+
dx,dy=value['dx'],value['dy'];fields={}
|
|
103
|
+
if 'factor' in value:
|
|
104
|
+
factor=_scale(value['factor'])
|
|
105
|
+
corner=value.get('corner','se')
|
|
106
|
+
if corner not in ('nw','ne','sw','se'):raise ValueError('invalid scale corner')
|
|
107
|
+
# The opposite corner remains fixed even for custom placement ports.
|
|
108
|
+
px=box[0]+(box[2] if 'w' in corner else 0)
|
|
109
|
+
py=box[1]+(box[3] if 'n' in corner else 0)
|
|
110
|
+
dx+=(1-factor)*(px-anchor[0]);dy+=(1-factor)*(py-anchor[1])
|
|
111
|
+
fields['scale']=part.scale*factor
|
|
112
|
+
elif 'corner' in value:raise ValueError('scale corner requires a factor')
|
|
113
|
+
a,b,c,d=geometry[path]['inverse'];ux,uy=a*dx+c*dy,b*dx+d*dy
|
|
114
|
+
def offset(current,delta):
|
|
115
|
+
if type(current) in (int,float):return current+delta
|
|
116
|
+
# Fold repeated mouse offsets instead of growing expression depth.
|
|
117
|
+
if isinstance(current,LayoutValue) and current.operation=='+' and type(current.args[1]) in (int,float):
|
|
118
|
+
return LayoutValue('+',(current.args[0],current.args[1]+delta))
|
|
119
|
+
return LayoutValue('+',(current,delta))
|
|
120
|
+
for key,delta in (('x',ux),('y',uy)):
|
|
121
|
+
if abs(delta)>1e-10:fields[key]=_expression(offset(getattr(part,key),delta),encode=True)
|
|
122
|
+
return dict(path=path,placement=fields) if fields else None
|
|
123
|
+
|
|
60
124
|
def snapshot(self):
|
|
61
125
|
"""Return current controls, revision and preview without rebuilding."""
|
|
62
126
|
with self._lock:
|
|
@@ -64,13 +128,14 @@ class LayoutEditor:
|
|
|
64
128
|
for path,(_,part,item) in _targets(self._recipe).items():
|
|
65
129
|
entry={}
|
|
66
130
|
if part is not None:
|
|
67
|
-
entry['placement']=_placement({k:getattr(part,k) for k in ('x','y','anchor','width','height')},encode=True)
|
|
131
|
+
entry['placement']=_placement({k:getattr(part,k) for k in ('x','y','anchor','width','height','scale')},encode=True)
|
|
68
132
|
if isinstance(item,Composition):
|
|
69
133
|
entry['page']={k:getattr(item,k) for k in ('width','height','unit','fit_top')}
|
|
70
134
|
targets[path]=entry
|
|
71
135
|
return dict(revision=self._revision,targets=targets,overrides=self.overrides(),
|
|
72
136
|
undo=bool(self._undo),redo=bool(self._redo),report=copy.deepcopy(self._report),
|
|
73
|
-
svg=self._figure.to_svg())
|
|
137
|
+
svg=self._figure.to_svg(),geometry=self._geometry(),
|
|
138
|
+
viewbox=[float(x) for x in ET.fromstring(self._figure.to_svg()).attrib['viewBox'].split()])
|
|
74
139
|
|
|
75
140
|
def _aliases(self, path, group):
|
|
76
141
|
targets=_targets(self._recipe)
|
|
@@ -83,13 +148,17 @@ class LayoutEditor:
|
|
|
83
148
|
def command(self, action, value=None, *, revision=None, missing='error'):
|
|
84
149
|
"""Compile a command atomically; a stale revision or failed build changes nothing.
|
|
85
150
|
|
|
86
|
-
Actions:
|
|
151
|
+
Actions: gesture (figure-space move/uniform scale), edit (placement/page), reset, load
|
|
87
152
|
(override JSON), undo, redo and refresh (current source; clears history).
|
|
88
153
|
Refresh may explicitly drop removed targets with missing='drop'.
|
|
89
154
|
"""
|
|
90
155
|
with self._lock:
|
|
91
156
|
if revision is not None and (type(revision) is not int or revision!=self._revision):
|
|
92
157
|
raise ValueError('stale editor revision; reload the current editor state')
|
|
158
|
+
if action=='gesture':
|
|
159
|
+
value=self._gesture(value)
|
|
160
|
+
if value is None:return self.snapshot()
|
|
161
|
+
action='edit'
|
|
93
162
|
candidate=copy.deepcopy(self._value)
|
|
94
163
|
if action=='edit':
|
|
95
164
|
if (not isinstance(value,dict) or 'path' not in value or
|
|
@@ -132,7 +201,8 @@ class LayoutEditor:
|
|
|
132
201
|
return self.snapshot()
|
|
133
202
|
|
|
134
203
|
def _html(self):
|
|
135
|
-
return Path(__file__).with_name('page.html').read_text().replace('__TOKEN__',self._token)
|
|
204
|
+
return (Path(__file__).with_name('page.html').read_text().replace('__TOKEN__',self._token)
|
|
205
|
+
.replace('<!--GESTURES-->',Path(__file__).with_name('gestures.js').read_text()))
|
|
136
206
|
|
|
137
207
|
def start(self, *, port=0):
|
|
138
208
|
"""Start a loopback-only editor server; port=0 chooses a free local port."""
|