inklet 4.0.0.dev9__tar.gz → 4.0.0.dev10__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.dev9 → inklet-4.0.0.dev10}/.github/workflows/publish.yml +2 -2
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/CHANGELOG.md +16 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/PKG-INFO +6 -6
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/README.md +5 -5
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/api.md +2 -2
- inklet-4.0.0.dev10/docs/assets/guides/layout-editor-labels.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/development-preview.md +29 -10
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/layout-editor.md +42 -2
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/layout-overrides.md +28 -8
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/roadmap.md +4 -2
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/layout_editor.py +1 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/pyproject.toml +1 -1
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/__init__.py +1 -1
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/composition.py +8 -3
- inklet-4.0.0.dev10/src/inklet/document/label_overrides.py +91 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/layout_overrides.py +32 -7
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/layout_editor/__init__.py +15 -10
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/layout_editor/page.html +23 -6
- inklet-4.0.0.dev10/tests/test_label_overrides.py +187 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout_gestures.py +2 -2
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/check_wheel.py +7 -1
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_gallery.json +3 -3
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/.gitattributes +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/.github/workflows/checks.yml +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/.gitignore +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/.readthedocs.yaml +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/CONTRACT.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/CONTRIBUTING.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/LICENSE +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/THIRD_PARTY_NOTICES.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-icon.svg +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-logo-dark.svg +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-logo-mono.svg +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-logo.svg +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-wordmark.svg +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/examples/quickstart.pdf +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/examples/quickstart.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/examples/quickstart.svg +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/axes-and-scales-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/calibrated-volumes-3.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/channels-and-contours-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/composition-recipes-narrow.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/composition-recipes.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/composition-recipes.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-anchor.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-annotation.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-branch.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-broken-axis.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-callout.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-clipping.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-creases.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-custom-key.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-cutout.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-dates.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-dense.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-elbows.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-facets.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-fit-graph.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-flow-width.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-formula.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-graph.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-halo.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-heatmap.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-hole.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-inline-type.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-inset.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-labels.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-layers.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-letters.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-list.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-matrix.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-page-grid.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-polar.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-protein.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-routes.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-scene.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-series-key.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-span.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-swarm.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-text-path.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-toon.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-twin-axis.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-violin.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/data-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/data-3.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/dense-data-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/diagram-components-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/diagrams-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/layout-3.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/layout-editor-gestures.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/layout-editor.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/layout-restored.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/layout-restored.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/layout-revised.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/oblique-sections-2.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plot-composition-narrow.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plot-composition.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plot-composition.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plot-quality-after.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plot-quality-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-band.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-bars.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-boxplot.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-errorbars.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-fill-between.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-fill.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-grouped-bars.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-hist.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-horizontal-bars.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-line-errors.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-line.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-markers.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-matrix.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-polar-curve.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-rose.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-scatter.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-series.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-stackarea.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-stacked-bars.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-step.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-swarm.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plots-violin.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plotting-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/plotting-2.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-2.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-3.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-4.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/slabs-and-regions-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/three-images-1.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/guides/three-images-2.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/biology.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-lines-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-lines-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/comparison.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-marker-shapes-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-marker-shapes.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-markers-display.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-markers-hardware.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-scene-viewer.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-viewer-display.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-viewer-export.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-viewer-study.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compositing-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compositing-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/compositing-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/dense-scatter-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/diagram-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/diagram-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/engine-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/engine-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/fluorescence-biology.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/general-plots-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/general-plots.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/hatch-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/hatch-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/hatch-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/label-intensities-native.csv +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/label-intensities.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/lines-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/lines-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-batches.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-browser-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-browser-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/oblique-biology.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/real-biology.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/render-scene-caption.tex +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/revision.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/scenes-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/scenes-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/slab-biology.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/study.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-gpu-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-gpu-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-display.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-profile.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-window-after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-window-before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-window-display.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/after.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/before.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/browser-quality.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/browser-scatter.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/browser-scatter.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/browser-study.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines-masked.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/engineering-report-170mm.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/engineering-report.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/engineering-report.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/faceted-operations.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/faceted-operations.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/linked-dashboard.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/linked-dashboard.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/linked-selection.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/linked-selection.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/mesh-fields-170mm.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/mesh-fields.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/mesh-fields.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/region-shapes.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/region-shapes.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/regional-analysis.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/regional-analysis.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/regional-report-160mm.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/regional-report.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/regional-report.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/scientific-report-170mm.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/scientific-report.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/scientific-report.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/statistical-views.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/statistical-views.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/table-inputs.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/table-inputs.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/time-series.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/time-series.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/transport-map.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/transport-map.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/visual-overrides.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-2019.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-2019.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-2019.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-revisions.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-revisions.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/world-population.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/assets/v4/world-population.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/axes-and-scales.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/bars-and-areas.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/biology-panels.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/blender-scenes.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/brand.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/browser-rendering.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/calibrated-volumes.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/channels-and-contours.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/cli.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/clipping.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/compatibility.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/compiled-scenes.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/compiled-viewer.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/complex-scene.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/compositing.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/composition-recipes.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/concepts.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/contours-streamlines.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/cookbook.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/data-revisions.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/data.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/dense-data.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/design/browser-backends.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/design/page_grid.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/design/v2.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/design/v4.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/diagram-components.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/diagram-engine.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/diagrams.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/distributions.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/engineering-report.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/example-library.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/examples.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/export-review.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/fluorescence-biology.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/general-plots.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/geographic-features.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/hatching.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/index.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/installation.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/interactive-documents.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/javascripts/inklet.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/label-intensities.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/label-measurements.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/layout.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/lines-and-points.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/linked-facets.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/linked-maps.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/linked-plots.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/marker-batches.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/marker-culling.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/matrices.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/mesh-fields.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/microscopy-tiff.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/migration.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/oblique-biology.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/oblique-sections.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/plot-quality.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/plot-recipes.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/plot-types.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/plotting-engine.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/plotting.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/polar-plots.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/presets.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/publication-plots.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/quickstart.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/real-biology.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/architecture-sketch.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/architecture.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/attractor.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/helix.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/interference.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/lattice.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/photonics.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/recipes/wave-packets.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/regional-report.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/release-checks.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/render-jobs.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/rendering-engine.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/research-preview.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/research-revision.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/research-study.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/scene-annotations.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/scene-paths.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/scene-templates.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/scientific-report.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/showcase.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/slab-biology.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/slabs-and-regions.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/statistical-views.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/stress20.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/stylesheets/code.css +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/stylesheets/inklet.css +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/table-inputs.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/three-images.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/time-series.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/troubleshooting.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/uncertainty.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/v2.5.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/v2.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/v3.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/v4-foundations.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/visual-editing.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/docs/world-map.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/biology/README.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/biology/cells3d.lock.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/biology/data.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/biology/fluorescence.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/biology/organelle.lock.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/biology/requirements.txt +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/biology_panels.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/blender/complex_lab_scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/blender/lab_scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/blender/occlusion_scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/blender/organelle_scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/blender/research_lab_views.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/broken_axis.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/clipping_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/compiled_marker_shapes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/compiled_scene_viewer.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/compositing_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/composition_recipes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/data/general-plots/benchmark.csv +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/data/general-plots/learning.csv +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/data/general-plots/revenue.csv +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/data/general-plots/sensor.csv +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/dense_scatter_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/diagram_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/engine_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/feature_flow.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/fluorescence_biology.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/gallery.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/general_plots.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/graph.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/hatch_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/hello_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/label_intensities.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/oblique_biology.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/panels.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/plot_composition.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/plot_engine_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/plot_quality_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/polar.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/preset_formats.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/presets.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/real_biology.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/render_scene_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/render_smoke.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/research_figure_planner.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/research_planner_study.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/research_revision.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/showcase/README.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/showcase/assets.lock.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/showcase/blender_scenes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/showcase/figures.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/slab_biology.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/state_machine.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/stress20.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v25_document.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v2_cases.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v2_document.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v3_complex_scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v3_render_jobs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v3_rendering.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v3_scene_annotations.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v3_scene_passes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v3_scene_paths.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v3_scene_templates.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/README.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/browser_scatter.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/contours_streamlines.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/data/world-countries.geojson +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/data/world-map-source.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/data/world-population.csv +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/engineering_report.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/faceted_operations.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/fixtures/assembly.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/fixtures/manifest.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/fixtures/measurement.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/fixtures/region-shapes.geojson +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/fixtures/regions.csv +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/fixtures/regions.geojson +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/fixtures/transport.geojson +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/linked_dashboard.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/linked_selection.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/linked_selection.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/mesh_fields.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/region_shapes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/regional_analysis.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/regional_report.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/scientific_report.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/statistical_views.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/table_inputs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/time_series.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/transport_map.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/examples/v4/world_population.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/annot.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/bio3d.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/cartoon.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/chem_data.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/chem_fingerprints.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/data/1m17-kinase.pdb +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/data/README.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/drug_discovery.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/mouse_brain_data.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/neural_activity.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/pdbfile.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/showcase_part.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/showcase_process.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/showcase_season.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/structure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/structure_data.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/target.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/figures/trial.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/README.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/biology-panels.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/chem_fingerprints.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/clipping-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/compiled-marker-shapes.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/compiled-scene-viewer.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/compiled-viewer-culling.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/compiled-viewer-deep-zoom.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/compositing-pdf-after.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/compositing-pdf-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/compositing-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/dense-scatter-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/diagram-labels-after.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/diagram-labels-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/diagram-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/engine-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/engine-transparency-after.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/engine-transparency-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/flow.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/fluorescence-biology.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/general-plots-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/general-plots.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/hatch-pdf-after.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/hatch-pdf-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/hatch-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/hatch-svg-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/label-intensities.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/oblique-biology.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/part.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/plot-axis-after.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/plot-axis-before.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/plot-engine-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/plots.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/polar.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/preset-formats.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/presets.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/process.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/real-biology.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/render-scene-data.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/render-scene-initial.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/render-scene-review.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/research-crossing-revision.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/research-figure-planner.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/research-planner-study.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/research-revision.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/season.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-architecture-sketch.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-architecture.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-attractor.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-helix.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-interference.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-lattice.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-photonics.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/showcase-wave-packets.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/slab-biology.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/stress20.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/structure.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/v3-complex-scene.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/v3-render-jobs.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/v3-rendering.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/v3-scene-annotations.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/v3-scene-passes.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/v3-scene-paths.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/gallery/v3-scene-templates.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/mkdocs.yml +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/requirements-ci.txt +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/requirements-docs.txt +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/requirements-tables.txt +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/scripts/bench_svg.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/scripts/rasterise.sh +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/scripts/sanity_typeset.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/__main__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/asset.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/cache.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/cutout.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/deps.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/harmonise.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/lineart.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/mask.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/provenance.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/raster.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/sidecar.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/assets/silhouette.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/cli.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/components.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/batch.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/diagram.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/envelope.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/geom.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/prims.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/style.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/trace.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/core/units.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/abut.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/break_rules.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/color.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/cross.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/image.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/key_rules.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/link_rules.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/path_rules.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/plot_rules.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/report.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/rules.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/diagnostics/three_rules.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/compiler.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/data.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/data_io.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/module.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/presets.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/publication.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/document/spec.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/annotate.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/bezier_clip.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/clip.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/coords.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/path.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/place.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/draw/shapes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/_table_adapters.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/compiled.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/compiled.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/drawings.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/editor.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/editor.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/fields.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/geography.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/grid.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/images.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/overrides.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/page.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/regions.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/runtime.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/series.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/timeaxis.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/channels.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/contours.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/engineering.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/fields.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/figure_planner.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/grid.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/layout_editor/gestures.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/measurement.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/measurements.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/planner_geometry.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/regions.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/controls.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/page.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/runtime.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/spatial.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/sections.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/selection.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/slabs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/temporal.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/tiff.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/experimental/volume.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/fit.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/flow.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/graph.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/graph_force.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/graph_layered.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/graph_tree.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/labels.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/layout/sankey.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/links/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/links/curves.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/links/link.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/axis.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/breaks.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/categories.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/facets.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/inset.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/key.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/marks.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/notes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/panel.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/png.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/polar.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/ramp.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/raster.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/ribbon.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/scale.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/scatter_batch.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/scatter_raster.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/series.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/simplify.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/plot/timescale.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/analysis.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/bounds.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/brushes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/bundle.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/composite.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/fontembed.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/glyphs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/hatching.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/outline.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/paint.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/pathdata.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/pdf.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/pdftext.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/preview.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/raster.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/resources.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/revision.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/render/svg.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/themes/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/themes/color.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/themes/palettes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/themes/theme.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/api.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/backend.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/device_worker.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/discover.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/lineart.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/options.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/scene_worker.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/script.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/svgread.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/template_worker.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender/tracing.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/blender_backend.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/camera.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/deps.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/depth.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/devices.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/drill.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/edges.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/hlr.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/linalg.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/mesh.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/occlude.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/order.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/parse.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/place.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/protein.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/quality.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/render_jobs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/scene_annotations.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/scene_pass.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/scene_projection.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/scenes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/shade.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/solids.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/templates.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/three/templates.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/typeset/__init__.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/typeset/fonts.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/typeset/markup.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/typeset/onpath.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/typeset/outline.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/src/inklet/typeset/shaping.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/assets/mouse.inklet.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/assets/mouse.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/dense_graph.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/draw_probe.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/assets/sem.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/assets/tem.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/cell.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/common.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/data.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/imaging.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/kinetics.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/micrograph.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro/system.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/electro_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/fidelity.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/flow.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/hard_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/label_storm.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/mega_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/meshes/README.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/meshes/brain-lh.obj +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/meshes/spot.obj +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/panels/apparatus.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/panels/graphs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/panels/relations.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/panels/responses.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/panels/sections.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/probes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/stress/three_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_alignment_contract.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_annotate.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_annotate_letters.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_assets.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_assets_provenance.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_biology_source.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_blend_scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_compiled.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_facets.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_geography.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_overrides.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_regions.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_revision.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_scatter.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_series.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_statistics.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_switching.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_browser_time.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_categories.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_channels_contours.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_chem_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_cli.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_clip_engine.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_components.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_compositing_engine.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_composition_recipes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_contrast_and_labels.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_cookbook.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_core.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_core_amendments.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_csv_input.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_api.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_artwork.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_break_distorts.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_crossing.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_image_contrast.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_ink.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_keys.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_links.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_paths.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagnostics_plot_box.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_diagram_engine.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_docs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_docs_site.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_document.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_document_data.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_document_v25.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_draw_clip.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_draw_path.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_draw_place.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_draw_shapes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_engine_layout.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_engine_rendering.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_engine_scatter.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_engineering_report.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_export_bundle.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_figure_planner.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_fit.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_grid_fields.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_guides.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_hatch_engine.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_label_measurements.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout_editor.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout_graph.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout_graph_fit.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout_origin.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout_overrides.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_layout_sankey.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_links.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_links_avoid.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_links_shapes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_marker_batches.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_mesh_fields.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_microscopy_tiff.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_neural_activity.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_output_contract.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_paint_program.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_place_labels.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_axis.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_broken_axis.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_clip.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_engine.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_facets.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_inset.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_key.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_labels.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_legend.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_marks.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_notes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_polar.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_publication.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_quality_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_raster.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_recipes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_ribbon.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_scale.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_swarm.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_plot_time.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_presets.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_publication_limits.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_regional_report.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_release_adversarial.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_devices.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_embed.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_glyphs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_jobs.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_outline.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_pdf.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_pdf_text.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_quality.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_scene.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_style_fields.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_svg_perf.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_render_v3.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_review_v25.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_round4_plot.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_routing_avoid.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scatter_rendering.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scene_annotations.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scene_culling.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scene_pass.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scene_projection.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scene_templates.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scene_viewer.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_scientific_report.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_sections.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_shared_plot_margins.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_showcase_library.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_showcase_round3.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_slabs_regions.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_structure_figure.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_svg.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_table_adapters.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_target_pose.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_temporal_adapters.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_text_markup.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_text_on_path.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_theme_font_style.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_themes.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_anchor_pin.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_api.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_backend_blender.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_blender.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_depth_order.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_drill.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_hlr.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_mesh.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_order_vector.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_overlay.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_parse.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_patches.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_place.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_protein.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_ridges.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_sort.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_sort_budget.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_three_view.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_typeset.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_v4_selection.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_volume.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_watch_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/test_world_map_example.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/README.md +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/categories-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/categories-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/components-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/components-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/dense-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/dense-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/fonts.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/inset-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/inset-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/markers-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/markers-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/renderers.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/type-opacity-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/type-opacity-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-dense-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-dense-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-workflow-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v25-document-pdf.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/baseline/v25-document-svg.png +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/fixtures.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tests/visual/v2-budgets.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_batches.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_clipping.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_diagrams.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_engine.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_lines.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_marker_index.mjs +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_scene_culling.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_scene_gpu.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_scene_redraw.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_scene_viewer.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_scene_zoom.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_v2.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/benchmark_v4.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/browser_study.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/check_render_wheel.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/dock_ligand.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_previews.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_previews.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_site.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_theme/404.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_theme/card.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_theme/gallery.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_theme/home.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_theme/main.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/docs_theme/plot-gallery.html +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/gen_api.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/make_culling_review.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/plot_catalog.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/prepare_world_map.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/preset_gallery.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/profile_scene_redraw.js +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/showcase_gallery.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/stress20.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/strip_pdb.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/v3_showcase.py +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/tools/v4-budgets.json +0 -0
- {inklet-4.0.0.dev9 → inklet-4.0.0.dev10}/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.dev10
|
|
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.dev10' >&2
|
|
47
47
|
exit 1
|
|
48
48
|
}
|
|
49
49
|
gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
|
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 4.0.0.dev10 — 2026-09-12
|
|
6
|
+
|
|
7
|
+
Tenth development preview: reproducible named label and callout editing.
|
|
8
|
+
3.1.0 remains the stable release.
|
|
9
|
+
|
|
10
|
+
- Edit string module captions, text components, keyed plot titles/text/callouts
|
|
11
|
+
and named composition annotations in the local layout editor.
|
|
12
|
+
- Expose callout text, preferred side, physical clearance and leader visibility;
|
|
13
|
+
remeasure content and dependent connections through the Python compiler.
|
|
14
|
+
- Save typed label identities and changed fields in layout schema 0.3, accepting
|
|
15
|
+
legacy 0.1/0.2 files, undo/redo, independent copies and shared definitions.
|
|
16
|
+
- Report removed or incompatible labels individually; explicit discard preserves
|
|
17
|
+
compatible edits on the same object. Leave unedited source decisions live.
|
|
18
|
+
- Add browser controls, source revision and two-width SVG/PDF roundtrip checks,
|
|
19
|
+
installed-package coverage and an illustrated guide and example.
|
|
20
|
+
|
|
5
21
|
## 4.0.0.dev9 — 2026-09-12
|
|
6
22
|
|
|
7
23
|
Ninth development preview: mouse movement and proportional artwork scaling.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: inklet
|
|
3
|
-
Version: 4.0.0.
|
|
3
|
+
Version: 4.0.0.dev10
|
|
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.dev10** adds named label and callout editing to the local layout
|
|
85
|
+
editor. Edit text and callout preferences, move and scale content, undo changes,
|
|
86
|
+
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.dev10"
|
|
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.dev10)
|
|
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.dev10** adds named label and callout editing to the local layout
|
|
35
|
+
editor. Edit text and callout preferences, move and scale content, undo changes,
|
|
36
|
+
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.dev10"
|
|
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.dev10)
|
|
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,
|
|
@@ -225,12 +225,12 @@ A figure assembled from named children and measured expressions.
|
|
|
225
225
|
* `instantiate(**items)` -- Create an independent recipe, filling required slots and replacing defaults.
|
|
226
226
|
* `configure(*, width=None, height=None, unit=None, fit_top=None)` -- Atomically update authored page dimensions or coordinate units.
|
|
227
227
|
* `place(name, **placement)` -- Edit a child's placement without replacing its content or named links.
|
|
228
|
-
* `layout_overrides(reference)` -- Capture changed
|
|
228
|
+
* `layout_overrides(reference)` -- Capture changed layout and compatible named labels against a reference.
|
|
229
229
|
* `with_layout_overrides(value, *, missing='error')` -- Return an independent edited recipe and a reconciliation report.
|
|
230
230
|
* `port(name, target)` -- Expose a child's name:anchor as a reusable composition attachment point.
|
|
231
231
|
* `constrain(value, *, minimum=0, message='composition needs more space')` -- Require an expression to meet a minimum; fail before drawing.
|
|
232
232
|
* `link(source, target, **options)` -- Route a branch or return between named children (`name:port`).
|
|
233
|
-
* `annotate(target, text, **options)` -- Place a measured callout
|
|
233
|
+
* `annotate(target, text, **options)` -- Place a measured callout; a unique name enables saved label editing.
|
|
234
234
|
* `signature(trail=())`
|
|
235
235
|
* `render(context, width=None, height=None)`
|
|
236
236
|
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Inklet 4.0.0.
|
|
1
|
+
# Inklet 4.0.0.dev10
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The tenth 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.dev10"
|
|
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.dev10"
|
|
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.dev10"
|
|
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
|
+
## Named labels and callouts in dev10
|
|
33
|
+
|
|
34
|
+
The [local layout editor](layout-editor.md#edit-labels-and-callouts) now edits
|
|
35
|
+
string module captions, text components, keyed plot titles/text/callouts and
|
|
36
|
+
named composition annotations. Callouts expose preferred side, physical
|
|
37
|
+
clearance and leader visibility. Text changes remeasure content and update
|
|
38
|
+
dependent layout and connections through Python.
|
|
39
|
+
|
|
40
|
+
Saved choices contain explicit label keys and kinds. Reordering instructions
|
|
41
|
+
preserves identity; removing a key or changing its kind reports an incompatible
|
|
42
|
+
label. Explicit discard retains compatible edits on the same object. Shared
|
|
43
|
+
definitions share text decisions, while unedited source fields remain live.
|
|
44
|
+
|
|
45
|
+

|
|
46
|
+
|
|
47
|
+
New files use layout schema 0.3; schemas 0.1 and 0.2 still load. Undo/redo,
|
|
48
|
+
reopening and matching SVG/PDF export include text edits. Axis labels, individual
|
|
49
|
+
callout dragging, camera editing and general object relationships remain open.
|
|
50
|
+
|
|
51
|
+
## Mouse movement and scaling retained from dev9
|
|
33
52
|
|
|
34
53
|
The [layout editor](layout-editor.md) now supports direct mouse movement and
|
|
35
54
|
proportional corner scaling of named objects and groups. Alt-click selects a
|
|
@@ -44,7 +63,7 @@ retain their separate typography-preserving layout behavior.
|
|
|
44
63
|
|
|
45
64
|

|
|
46
65
|
|
|
47
|
-
|
|
66
|
+
Dev9 introduced schema 0.2 for explicit artwork scale. Dev7/dev8 schema 0.1
|
|
48
67
|
files still load. Named composition objects are editable; individual plot marks,
|
|
49
68
|
axis labels, connector segments and camera parameters remain outside this scope.
|
|
50
69
|
|
|
@@ -63,8 +82,8 @@ remain consistent across repeated edits and resets.
|
|
|
63
82
|
|
|
64
83
|

|
|
65
84
|
|
|
66
|
-
This inspector requires its local Python session.
|
|
67
|
-
|
|
85
|
+
This inspector requires its local Python session. Named label editing is added
|
|
86
|
+
in dev10; individual plot marks and cameras remain separate work.
|
|
68
87
|
The existing standalone viewers and linked-plot appearance editor retain their
|
|
69
88
|
current scope.
|
|
70
89
|
|
|
@@ -181,7 +200,7 @@ The wheel contains the library. To obtain recipes and fixtures, use the matching
|
|
|
181
200
|
release checkout or source archive:
|
|
182
201
|
|
|
183
202
|
```sh
|
|
184
|
-
git clone --branch v4.0.0.
|
|
203
|
+
git clone --branch v4.0.0.dev10 https://github.com/Mapika/inklet.git
|
|
185
204
|
cd inklet
|
|
186
205
|
python -m pip install -e '.[render]'
|
|
187
206
|
python examples/v4/regional_report.py --renderer compiled --editor --output out/regional
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Local layout editor
|
|
2
2
|
|
|
3
|
-
Available since **4.0.0.dev8**, with mouse gestures in **4.0.0.dev9**, under `inklet.experimental.layout_editor`. Adjust
|
|
3
|
+
Available since **4.0.0.dev8**, with mouse gestures in **4.0.0.dev9** and named label editing in **4.0.0.dev10**, 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.
|
|
@@ -75,10 +75,50 @@ marks, ticks, axis labels and connector segments remain part of their owning
|
|
|
75
75
|
plot or diagram. Scaling and movement do not remove authored constraints or
|
|
76
76
|
top-fitting behavior; dependent content can reflow when the compiler rebuilds.
|
|
77
77
|
|
|
78
|
+
## Edit labels and callouts
|
|
79
|
+
|
|
80
|
+

|
|
81
|
+
|
|
82
|
+
Select a composition child, then edit its **Label** fields and choose **Apply
|
|
83
|
+
changes**. The editor supports text components created with `component(i.text,
|
|
84
|
+
...)`, string module captions, and plot `title`, `text` and `annotate`
|
|
85
|
+
instructions with an explicit string `key`. For composition callouts, supply a
|
|
86
|
+
unique `name` and select the composition that owns the callout.
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
recipe['chart'].annotate(1, 2, 'Reference observation', key='observation', side='s', clear=4)
|
|
90
|
+
recipe.annotate('caption', 'Measured response', name='response-note', side='e', clear=3)
|
|
91
|
+
editor.command('refresh')
|
|
92
|
+
editor.command('edit', {
|
|
93
|
+
'path': '/chart',
|
|
94
|
+
'labels': {'observation': {'kind': 'plot-annotate', 'text': 'Reviewed observation', 'side': 'sw'}},
|
|
95
|
+
})
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Callouts expose their preferred compass side, clearance in physical millimetres,
|
|
99
|
+
and leader visibility. Automatic placement can choose another side to avoid
|
|
100
|
+
conflicts. Plot clearance can be left blank to use its automatic value. This
|
|
101
|
+
increment edits callout content and placement preferences; it does not add free
|
|
102
|
+
mouse dragging of individual callouts or axis-label editing.
|
|
103
|
+
|
|
104
|
+
A label's identity is its composition path, explicit key and kind. For example,
|
|
105
|
+
`/chart` plus `observation` identifies a plot annotation even when its instruction
|
|
106
|
+
moves in the recipe. Replacing that key with a different instruction kind is an
|
|
107
|
+
incompatible target. A removed or incompatible label is reported as
|
|
108
|
+
`/chart#observation`; explicit discard drops that label's edits while retaining
|
|
109
|
+
compatible placement and label edits on the same chart. Renaming a path or key
|
|
110
|
+
changes its identity. Reusing the same key and kind declares the same label.
|
|
111
|
+
|
|
112
|
+
Text changes are measured by the Python compiler: longer module captions can
|
|
113
|
+
move dependent modules and reroute their connections. Unedited labels, data
|
|
114
|
+
coordinates, styling and other source choices remain live. Shared definitions
|
|
115
|
+
share label edits; use an independent recipe copy for independent captions.
|
|
116
|
+
Undo/redo, reset, saved JSON and SVG/PDF exports include the label edits.
|
|
117
|
+
|
|
78
118
|
## Edit and review
|
|
79
119
|
|
|
80
120
|
Choose a named path in **Content**, enter the fields you want to change, then
|
|
81
|
-
select **Apply
|
|
121
|
+
select **Apply changes**. Other fields retain their definitions.
|
|
82
122
|
|
|
83
123
|
- Child placement fields are X, Y, anchor, width, height and uniform scale. Numbers use the
|
|
84
124
|
containing composition's coordinate unit. For plots, width and height describe
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Save and restore layout choices
|
|
2
2
|
|
|
3
|
-
Available since **4.0.0.dev7**; uniform artwork scale is added in **dev9**. Save placement and dimension edits separately from
|
|
3
|
+
Available since **4.0.0.dev7**; uniform artwork scale is added in **dev9**, named text and callout decisions in **dev10**. 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.
|
|
@@ -21,7 +21,7 @@ Python APIs below or the [local inspector](layout-editor.md) in dev8. This forma
|
|
|
21
21
|
|
|
22
22
|
Keep a reference recipe, copy it, then edit placements. The reference and edited
|
|
23
23
|
recipe must have the same named composition structure when capturing changes.
|
|
24
|
-
|
|
24
|
+
Supported named label differences are captured too. Other content and styles are not serialized into the layout file.
|
|
25
25
|
|
|
26
26
|
```python
|
|
27
27
|
import json
|
|
@@ -52,6 +52,25 @@ identity within the recipe hierarchy. Renaming or moving a target changes its
|
|
|
52
52
|
identity. Definitions hidden inside component factories or other BuildSpecs
|
|
53
53
|
are not traversed.
|
|
54
54
|
|
|
55
|
+
## Named label decisions
|
|
56
|
+
|
|
57
|
+
Changed string module captions and text components are captured alongside layout.
|
|
58
|
+
Plot titles, text and annotations require explicit string instruction keys;
|
|
59
|
+
composition annotations require unique names. See the [label editor](layout-editor.md#edit-labels-and-callouts)
|
|
60
|
+
for controls, identity rules and an executable example. Captures compare only
|
|
61
|
+
matching label keys and kinds; they do not serialize added or removed content.
|
|
62
|
+
|
|
63
|
+
A saved label entry includes its kind and only the fields that changed:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{"schema":"inklet.composition-layout/0.3","targets":{"/caption":{"labels":{"label":{"kind":"module-label","text":"Reviewed response"}}}}}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Readers accept legacy schemas 0.1 and 0.2. New captures use 0.3; older readers
|
|
70
|
+
must be upgraded before opening them. Label fields are rejected under older
|
|
71
|
+
schema identifiers. Removed/incompatible labels appear as `path#key` in the
|
|
72
|
+
orphan report. Explicit `missing='drop'` retains compatible edits on that path.
|
|
73
|
+
|
|
55
74
|
## Restore on the current recipe
|
|
56
75
|
|
|
57
76
|
```python
|
|
@@ -85,7 +104,7 @@ updated_figure = render(updated)
|
|
|
85
104
|
updated_figure.save('updated.svg')
|
|
86
105
|
```
|
|
87
106
|
|
|
88
|
-
The file stores layout decisions, not
|
|
107
|
+
The file stores layout and supported label decisions, not datasets, plot styles,
|
|
89
108
|
links, ports, constraints, factories or camera parameters. Keep the Python
|
|
90
109
|
recipe and its assets alongside it. The containing document can supply its own
|
|
91
110
|
render dimensions; restoring authored page dimensions does not override that
|
|
@@ -123,11 +142,12 @@ of 32 operations. Malformed files, nonfinite numbers, invalid properties and
|
|
|
123
142
|
contradictory edits to a shared nested definition are rejected, including when
|
|
124
143
|
`missing='drop'` is used.
|
|
125
144
|
|
|
126
|
-
New files use `inklet.composition-layout/0.
|
|
127
|
-
artwork scale. The loader also accepts
|
|
128
|
-
|
|
129
|
-
Upgrade older readers before opening a
|
|
130
|
-
|
|
145
|
+
New files use `inklet.composition-layout/0.3`, adding named label decisions to
|
|
146
|
+
0.2's positive uniform artwork scale. The loader also accepts 0.1 files from
|
|
147
|
+
dev7/dev8 (without scale) and 0.2 files from dev9 (without labels). Unknown
|
|
148
|
+
schemas are rejected. Upgrade older readers before opening a 0.3 file.
|
|
149
|
+
The JSON object contains `schema` and `targets`; each target has changed
|
|
150
|
+
`placement`, `page` and/or `labels` fields. This development-preview format is
|
|
131
151
|
not a general Python object serializer or an asset manifest.
|
|
132
152
|
|
|
133
153
|
## Review revised content
|
|
@@ -60,8 +60,10 @@ 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
61
|
Dev9 adds mouse movement, proportional artwork scaling and keyboard nudges
|
|
62
62
|
for named composition children, with preserved measured positions and saved
|
|
63
|
-
choices.
|
|
64
|
-
|
|
63
|
+
choices. Dev10 adds saved named text and callout editing across modules, text
|
|
64
|
+
components, keyed plot instructions and composition annotations, including typed
|
|
65
|
+
identity reconciliation. Serialized project templates, asset manifests, shared selection
|
|
66
|
+
relationships, axis-label/camera editing and finer-grained manipulation remain open. Subsequent work
|
|
65
67
|
should extend authoring and cross-content identity beyond this bounded inspector.
|
|
66
68
|
|
|
67
69
|
## Who this should serve
|
|
@@ -10,6 +10,7 @@ def main():
|
|
|
10
10
|
parser.add_argument('--port',type=int,default=0,help='Local port; 0 chooses an available port')
|
|
11
11
|
args=parser.parse_args()
|
|
12
12
|
reports,_=make_reports()
|
|
13
|
+
reports[0]['chart'].annotate(2,3,'Reference observation',key='observation',side='s',clear=4)
|
|
13
14
|
with LayoutEditor(reports[0],preset='scientific.general').start(port=args.port) as editor:
|
|
14
15
|
print(f'Open {editor.url} — press Ctrl+C to stop.',flush=True)
|
|
15
16
|
try:threading.Event().wait()
|
|
@@ -193,10 +193,10 @@ class Composition(BuildSpec):
|
|
|
193
193
|
raise KeyError(name)
|
|
194
194
|
|
|
195
195
|
def layout_overrides(self, reference):
|
|
196
|
-
"""Capture changed
|
|
196
|
+
"""Capture changed layout and compatible named labels against a reference.
|
|
197
197
|
|
|
198
198
|
Return JSON-compatible, versioned decisions keyed by named child paths.
|
|
199
|
-
|
|
199
|
+
Other content, styles, data, links and constraints remain in Python.
|
|
200
200
|
"""
|
|
201
201
|
from .layout_overrides import capture
|
|
202
202
|
return capture(self, reference)
|
|
@@ -234,7 +234,12 @@ class Composition(BuildSpec):
|
|
|
234
234
|
return self
|
|
235
235
|
|
|
236
236
|
def annotate(self, target, text, **options):
|
|
237
|
-
"""Place a measured callout
|
|
237
|
+
"""Place a measured callout; a unique name enables saved label editing."""
|
|
238
|
+
name = options.get('name')
|
|
239
|
+
if name is not None:
|
|
240
|
+
if not isinstance(name,str) or not name: raise ValueError('annotation name must be a nonempty string')
|
|
241
|
+
if any(opts.get('name')==name for _,_,opts in self._annotations):
|
|
242
|
+
raise LayoutError(f'duplicate annotation name {name!r}')
|
|
238
243
|
self._annotations.append((target, text, freeze(options)))
|
|
239
244
|
return self
|
|
240
245
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Explicit text targets within named recipes; never infer identity from ink."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import math
|
|
5
|
+
|
|
6
|
+
from .spec import ComponentSpec, PlotSpec
|
|
7
|
+
from .module import ModuleSpec
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def targets(item):
|
|
11
|
+
"""Return keyed, typed label controls and internal replacement locations."""
|
|
12
|
+
from .. import text
|
|
13
|
+
from .composition import Composition
|
|
14
|
+
found = {}
|
|
15
|
+
|
|
16
|
+
def add(key, kind, value, location, options=None):
|
|
17
|
+
if not isinstance(key, str) or not key or not isinstance(value, str): return
|
|
18
|
+
if key in found: raise ValueError(f'duplicate editable label key {key!r}')
|
|
19
|
+
fields = dict(kind=kind, text=value)
|
|
20
|
+
if options is not None:
|
|
21
|
+
from ..core import mm
|
|
22
|
+
clear = options.get('clear')
|
|
23
|
+
fields.update(side=options.get('side', 'n'), leader=options.get('leader', True))
|
|
24
|
+
# A measured clearance remains authored until explicitly replaced.
|
|
25
|
+
from .composition import LayoutValue
|
|
26
|
+
if not isinstance(clear, LayoutValue): fields['clear'] = None if clear is None else mm(clear)
|
|
27
|
+
found[key] = (fields, location)
|
|
28
|
+
|
|
29
|
+
if isinstance(item, ModuleSpec): add('label', 'module-label', item.label, ('module',))
|
|
30
|
+
elif isinstance(item, ComponentSpec) and item.factory is text:
|
|
31
|
+
add('text', 'component-text', item.args[0] if item.args else item.kwargs.get('content'), ('component',))
|
|
32
|
+
elif isinstance(item, PlotSpec):
|
|
33
|
+
for index, (key, method, args, options) in enumerate(item._steps):
|
|
34
|
+
if method not in ('title', 'text', 'annotate'): continue
|
|
35
|
+
position = 0 if method == 'title' else 2
|
|
36
|
+
keyword = 'text' if method == 'annotate' else 'content'
|
|
37
|
+
value = args[position] if len(args)>position else options.get(keyword)
|
|
38
|
+
add(key, 'plot-'+method, value, ('plot', index, position, keyword),
|
|
39
|
+
options if method == 'annotate' else None)
|
|
40
|
+
elif isinstance(item, Composition):
|
|
41
|
+
for index, (_, value, options) in enumerate(item._annotations):
|
|
42
|
+
add(options.get('name'), 'composition-annotation', value, ('annotation', index),
|
|
43
|
+
{'clear':2, **options})
|
|
44
|
+
return found
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def validate(value):
|
|
48
|
+
if not isinstance(value, dict) or not value: raise ValueError('labels must be a nonempty object')
|
|
49
|
+
result = {}
|
|
50
|
+
for key, fields in value.items():
|
|
51
|
+
if not isinstance(key, str) or not key or not isinstance(fields, dict):
|
|
52
|
+
raise ValueError('labels require nonempty string keys and field objects')
|
|
53
|
+
kind = fields.get('kind')
|
|
54
|
+
allowed = {'kind', 'text'}
|
|
55
|
+
if kind in ('plot-annotate', 'composition-annotation'): allowed |= {'side', 'clear', 'leader'}
|
|
56
|
+
if (kind not in ('module-label','component-text','plot-title','plot-text','plot-annotate','composition-annotation')
|
|
57
|
+
or not set(fields)<=allowed or len(fields)<2):
|
|
58
|
+
raise ValueError('invalid label kind or fields')
|
|
59
|
+
for name, val in fields.items():
|
|
60
|
+
if name=='text' and not isinstance(val, str): raise ValueError('label text must be a string')
|
|
61
|
+
if name=='side' and val not in ('n','ne','e','se','s','sw','w','nw'):
|
|
62
|
+
raise ValueError('invalid annotation side')
|
|
63
|
+
if name=='leader' and type(val) is not bool: raise ValueError('label leader must be a boolean')
|
|
64
|
+
if name=='clear' and not (val is None and kind=='plot-annotate'):
|
|
65
|
+
if type(val) not in (int,float) or not math.isfinite(val) or val<0:
|
|
66
|
+
raise ValueError('label clearance must be finite nonnegative millimetres')
|
|
67
|
+
result[key] = dict(fields)
|
|
68
|
+
return result
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def apply(item, edits):
|
|
72
|
+
available = targets(item)
|
|
73
|
+
for key, fields in edits.items():
|
|
74
|
+
current, location = available[key]
|
|
75
|
+
changes = {k:v for k,v in fields.items() if k!='kind'}
|
|
76
|
+
value = changes.pop('text', current['text'])
|
|
77
|
+
if location[0]=='module': item.configure(value)
|
|
78
|
+
elif location[0]=='component':
|
|
79
|
+
if item.args: item.args = (value, *item.args[1:])
|
|
80
|
+
else: item.kwargs['content'] = value
|
|
81
|
+
elif location[0]=='plot':
|
|
82
|
+
_, index, position, keyword = location
|
|
83
|
+
found, method, args, kwargs = item._steps[index]
|
|
84
|
+
args, kwargs = list(args), dict(kwargs)
|
|
85
|
+
if len(args)>position: args[position] = value
|
|
86
|
+
else: kwargs[keyword] = value
|
|
87
|
+
item._steps[index] = (found, method, tuple(args), kwargs | changes)
|
|
88
|
+
else:
|
|
89
|
+
_, index = location
|
|
90
|
+
target, _, options = item._annotations[index]
|
|
91
|
+
item._annotations[index] = (target, value, options | changes)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Portable
|
|
1
|
+
"""Portable layout and text decisions for named composition recipes."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import math
|
|
@@ -6,8 +6,10 @@ import re
|
|
|
6
6
|
|
|
7
7
|
from .compiler import LayoutError
|
|
8
8
|
from .spec import length
|
|
9
|
+
from . import label_overrides as labels
|
|
9
10
|
|
|
10
|
-
SCHEMA = 'inklet.composition-layout/0.
|
|
11
|
+
SCHEMA = 'inklet.composition-layout/0.3'
|
|
12
|
+
SCALE_SCHEMA = 'inklet.composition-layout/0.2'
|
|
11
13
|
LEGACY_SCHEMA = 'inklet.composition-layout/0.1'
|
|
12
14
|
_PLACEMENT = {'x', 'y', 'anchor', 'width', 'height', 'scale'}
|
|
13
15
|
_PAGE = {'width', 'height', 'unit', 'fit_top'}
|
|
@@ -91,7 +93,7 @@ def _page(values):
|
|
|
91
93
|
|
|
92
94
|
|
|
93
95
|
def capture(recipe, reference):
|
|
94
|
-
"""Record
|
|
96
|
+
"""Record changed layout and compatible named labels; keep unedited fields live."""
|
|
95
97
|
from .composition import Composition
|
|
96
98
|
if not isinstance(reference,Composition): raise TypeError('reference must be a Composition')
|
|
97
99
|
current, before = _targets(recipe), _targets(reference)
|
|
@@ -113,6 +115,13 @@ def capture(recipe, reference):
|
|
|
113
115
|
old = _page({k:getattr(old_item,k) for k in sorted(_PAGE)})
|
|
114
116
|
changed = {k:v for k,v in now.items() if v!=old[k]}
|
|
115
117
|
if changed: entry['page'] = changed
|
|
118
|
+
current_labels, old_labels = labels.targets(item), labels.targets(old_item)
|
|
119
|
+
changed_labels = {}
|
|
120
|
+
for key,(fields,_) in current_labels.items():
|
|
121
|
+
if key not in old_labels or fields['kind']!=old_labels[key][0]['kind']: continue
|
|
122
|
+
changed = {k:v for k,v in fields.items() if k!='kind' and v!=old_labels[key][0].get(k, object())}
|
|
123
|
+
if changed: changed_labels[key] = {'kind':fields['kind'], **changed}
|
|
124
|
+
if changed_labels: entry['labels'] = changed_labels
|
|
116
125
|
if entry: edits[path] = entry
|
|
117
126
|
return {'schema':SCHEMA,'targets':edits}
|
|
118
127
|
|
|
@@ -129,7 +138,7 @@ def apply(recipe, value, *, missing='error'):
|
|
|
129
138
|
"""Validate all edits, reconcile stable names, then edit an independent copy."""
|
|
130
139
|
from .composition import Composition
|
|
131
140
|
if missing not in ('error','drop'): raise ValueError('missing policy must be error or drop')
|
|
132
|
-
if (not isinstance(value,dict) or set(value)!={'schema','targets'} or value['schema'] not in (SCHEMA,LEGACY_SCHEMA)
|
|
141
|
+
if (not isinstance(value,dict) or set(value)!={'schema','targets'} or value['schema'] not in (SCHEMA,SCALE_SCHEMA,LEGACY_SCHEMA)
|
|
133
142
|
or not isinstance(value['targets'],dict)):
|
|
134
143
|
raise ValueError('invalid composition layout overrides')
|
|
135
144
|
targets = _targets(recipe)
|
|
@@ -137,7 +146,7 @@ def apply(recipe, value, *, missing='error'):
|
|
|
137
146
|
for path,entry in value['targets'].items():
|
|
138
147
|
if not isinstance(path,str) or not re.fullmatch(r'/(?:'+_NAME+r'(?:/'+_NAME+r')*)?',path):
|
|
139
148
|
raise ValueError('layout targets require absolute named composition paths')
|
|
140
|
-
if not isinstance(entry,dict) or not entry or not set(entry)<={'placement','page'}:
|
|
149
|
+
if not isinstance(entry,dict) or not entry or not set(entry)<={'placement','page','labels'}:
|
|
141
150
|
raise ValueError(f'invalid layout target properties: {path}')
|
|
142
151
|
options = {}
|
|
143
152
|
if 'placement' in entry:
|
|
@@ -145,6 +154,9 @@ def apply(recipe, value, *, missing='error'):
|
|
|
145
154
|
if value['schema']==LEGACY_SCHEMA and 'scale' in options['placement']:
|
|
146
155
|
raise ValueError('scale requires composition layout schema 0.2')
|
|
147
156
|
if 'page' in entry: options['page'] = _page(entry['page'])
|
|
157
|
+
if 'labels' in entry:
|
|
158
|
+
if value['schema']!=SCHEMA: raise ValueError('labels require composition layout schema 0.3')
|
|
159
|
+
options['labels'] = labels.validate(entry['labels'])
|
|
148
160
|
target = targets.get(path)
|
|
149
161
|
invalid = target is None
|
|
150
162
|
if target is not None:
|
|
@@ -154,7 +166,17 @@ def apply(recipe, value, *, missing='error'):
|
|
|
154
166
|
names = {p.name for p in parent._parts}
|
|
155
167
|
invalid |= any(ref not in names for val in options['placement'].values() for ref in _references(val))
|
|
156
168
|
if invalid: orphaned.append(path)
|
|
157
|
-
else:
|
|
169
|
+
else:
|
|
170
|
+
if 'labels' in options:
|
|
171
|
+
available = labels.targets(item)
|
|
172
|
+
compatible = {}
|
|
173
|
+
for key,fields in options['labels'].items():
|
|
174
|
+
if key not in available or fields['kind']!=available[key][0]['kind']:
|
|
175
|
+
orphaned.append(path+'#'+key)
|
|
176
|
+
else: compatible[key] = fields
|
|
177
|
+
if compatible: options['labels'] = compatible
|
|
178
|
+
else: options.pop('labels')
|
|
179
|
+
if options: prepared[path] = options
|
|
158
180
|
orphaned.sort()
|
|
159
181
|
if orphaned and missing=='error': raise LayoutError('orphaned layout targets: '+', '.join(orphaned))
|
|
160
182
|
# One nested definition may occur at several named paths. Contradictory
|
|
@@ -163,7 +185,9 @@ def apply(recipe, value, *, missing='error'):
|
|
|
163
185
|
for path,options in prepared.items():
|
|
164
186
|
parent,part,item = targets[path]
|
|
165
187
|
for group,fields in options.items():
|
|
166
|
-
owner = (id(item),None) if group
|
|
188
|
+
owner = (id(item),None) if group in ('page','labels') else (id(parent),part.name)
|
|
189
|
+
if group=='labels':
|
|
190
|
+
fields = {(label,key):val for label,edits in fields.items() for key,val in edits.items()}
|
|
167
191
|
for key,val in fields.items():
|
|
168
192
|
identity = (*owner,group,key)
|
|
169
193
|
if identity in assigned and assigned[identity]!=val:
|
|
@@ -173,6 +197,7 @@ def apply(recipe, value, *, missing='error'):
|
|
|
173
197
|
copied = _targets(result)
|
|
174
198
|
for path,options in prepared.items():
|
|
175
199
|
parent,part,item = copied[path]
|
|
200
|
+
if 'labels' in options: labels.apply(item,options['labels'])
|
|
176
201
|
if 'page' in options: item.configure(**options['page'])
|
|
177
202
|
if 'placement' in options: parent.place(part.name,**options['placement'])
|
|
178
203
|
return result, {'orphaned_targets':orphaned,'missing_policy':missing}
|