inklet 4.0.0.dev12__tar.gz → 4.0.0.dev13__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.dev12 → inklet-4.0.0.dev13}/.github/workflows/publish.yml +5 -5
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/CHANGELOG.md +15 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/PKG-INFO +5 -6
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/README.md +4 -5
- inklet-4.0.0.dev13/docs/assets/guides/layout-editor-camera.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/compatibility.md +16 -2
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/development-preview.md +22 -7
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/layout-editor.md +47 -3
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/layout-overrides.md +17 -5
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/release-checks.md +4 -3
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/roadmap.md +2 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/pyproject.toml +1 -1
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/__init__.py +1 -1
- inklet-4.0.0.dev13/src/inklet/document/camera_overrides.py +53 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/layout_overrides.py +16 -12
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/layout_editor/__init__.py +7 -7
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/layout_editor/page.html +16 -3
- inklet-4.0.0.dev13/tests/test_camera_overrides.py +99 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_editor_workspace.py +3 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout_gestures.py +1 -1
- inklet-4.0.0.dev13/tests/test_publish_workflow.py +39 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/check_wheel.py +7 -1
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/.gitattributes +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/.github/workflows/checks.yml +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/.gitignore +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/.readthedocs.yaml +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/CONTRACT.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/CONTRIBUTING.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/LICENSE +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/THIRD_PARTY_NOTICES.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/api.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-icon.svg +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-logo-dark.svg +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-logo-mono.svg +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-logo.svg +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-wordmark.svg +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/examples/quickstart.pdf +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/examples/quickstart.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/examples/quickstart.svg +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/axes-and-scales-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/calibrated-volumes-3.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/channels-and-contours-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/composition-recipes-narrow.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/composition-recipes.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/composition-recipes.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-anchor.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-annotation.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-branch.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-broken-axis.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-callout.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-clipping.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-creases.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-custom-key.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-cutout.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-dates.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-dense.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-elbows.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-facets.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-fit-graph.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-flow-width.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-formula.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-graph.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-halo.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-heatmap.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-hole.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-inline-type.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-inset.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-labels.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-layers.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-letters.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-list.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-matrix.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-page-grid.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-polar.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-protein.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-routes.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-scene.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-series-key.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-span.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-swarm.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-text-path.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-toon.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-twin-axis.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-violin.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/data-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/data-3.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/dense-data-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/diagram-components-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/diagrams-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/editor-studio.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-3.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor-gestures.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor-labels.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor-styles.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-restored.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-restored.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/layout-revised.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/oblique-sections-2.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plot-composition-narrow.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plot-composition.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plot-composition.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plot-quality-after.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plot-quality-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-band.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-bars.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-boxplot.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-errorbars.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-fill-between.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-fill.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-grouped-bars.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-hist.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-horizontal-bars.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-line-errors.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-line.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-markers.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-matrix.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-polar-curve.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-rose.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-scatter.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-series.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-stackarea.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-stacked-bars.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-step.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-swarm.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plots-violin.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plotting-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/plotting-2.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-2.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-3.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-4.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/slabs-and-regions-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/three-images-1.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/guides/three-images-2.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/biology.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-lines-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-lines-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/comparison.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-marker-shapes-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-marker-shapes.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-markers-display.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-markers-hardware.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-scene-viewer.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-viewer-display.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-viewer-export.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-viewer-study.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compositing-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compositing-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/compositing-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/dense-scatter-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/diagram-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/diagram-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/engine-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/engine-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/fluorescence-biology.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/general-plots-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/general-plots.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/hatch-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/hatch-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/hatch-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/label-intensities-native.csv +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/label-intensities.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/lines-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/lines-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-batches.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-browser-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-browser-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/oblique-biology.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/real-biology.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/render-scene-caption.tex +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/revision.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/scenes-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/scenes-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/slab-biology.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/study.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-gpu-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-gpu-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-display.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-profile.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-window-after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-window-before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-window-display.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/after.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/before.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/browser-quality.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/browser-scatter.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/browser-scatter.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/browser-study.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines-masked.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/engineering-report-170mm.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/engineering-report.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/engineering-report.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/faceted-operations.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/faceted-operations.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/linked-dashboard.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/linked-dashboard.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/linked-selection.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/linked-selection.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/mesh-fields-170mm.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/mesh-fields.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/mesh-fields.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/region-shapes.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/region-shapes.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/regional-analysis.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/regional-analysis.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/regional-report-160mm.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/regional-report.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/regional-report.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/scientific-report-170mm.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/scientific-report.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/scientific-report.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/statistical-views.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/statistical-views.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/table-inputs.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/table-inputs.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/time-series.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/time-series.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/transport-map.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/transport-map.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/visual-overrides.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-2019.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-2019.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-2019.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-revisions.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-revisions.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/world-population.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/assets/v4/world-population.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/axes-and-scales.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/bars-and-areas.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/biology-panels.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/blender-scenes.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/brand.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/browser-rendering.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/calibrated-volumes.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/channels-and-contours.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/cli.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/clipping.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/compiled-scenes.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/compiled-viewer.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/complex-scene.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/compositing.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/composition-recipes.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/concepts.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/contours-streamlines.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/cookbook.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/data-revisions.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/data.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/dense-data.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/design/browser-backends.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/design/page_grid.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/design/v2.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/design/v4.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/diagram-components.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/diagram-engine.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/diagrams.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/distributions.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/engineering-report.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/example-library.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/examples.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/export-review.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/fluorescence-biology.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/general-plots.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/geographic-features.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/hatching.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/index.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/installation.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/interactive-documents.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/javascripts/inklet.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/label-intensities.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/label-measurements.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/layout.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/lines-and-points.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/linked-facets.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/linked-maps.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/linked-plots.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/marker-batches.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/marker-culling.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/matrices.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/mesh-fields.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/microscopy-tiff.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/migration.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/oblique-biology.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/oblique-sections.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/plot-quality.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/plot-recipes.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/plot-types.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/plotting-engine.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/plotting.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/polar-plots.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/presets.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/publication-plots.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/quickstart.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/real-biology.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/architecture-sketch.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/architecture.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/attractor.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/helix.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/interference.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/lattice.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/photonics.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/recipes/wave-packets.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/regional-report.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/render-jobs.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/rendering-engine.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/research-preview.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/research-revision.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/research-study.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/scene-annotations.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/scene-paths.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/scene-templates.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/scientific-report.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/showcase.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/slab-biology.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/slabs-and-regions.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/statistical-views.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/stress20.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/stylesheets/code.css +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/stylesheets/inklet.css +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/table-inputs.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/three-images.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/time-series.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/troubleshooting.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/uncertainty.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/v2.5.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/v2.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/v3.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/v4-foundations.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/visual-editing.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/docs/world-map.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/biology/README.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/biology/cells3d.lock.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/biology/data.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/biology/fluorescence.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/biology/organelle.lock.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/biology/requirements.txt +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/biology_panels.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/blender/complex_lab_scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/blender/lab_scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/blender/occlusion_scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/blender/organelle_scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/blender/research_lab_views.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/broken_axis.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/clipping_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/compiled_marker_shapes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/compiled_scene_viewer.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/compositing_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/composition_recipes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/data/general-plots/benchmark.csv +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/data/general-plots/learning.csv +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/data/general-plots/revenue.csv +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/data/general-plots/sensor.csv +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/dense_scatter_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/diagram_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/engine_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/feature_flow.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/fluorescence_biology.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/gallery.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/general_plots.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/graph.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/hatch_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/hello_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/label_intensities.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/layout_editor.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/oblique_biology.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/panels.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/plot_composition.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/plot_engine_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/plot_quality_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/polar.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/preset_formats.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/presets.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/real_biology.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/render_scene_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/render_smoke.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/research_figure_planner.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/research_planner_study.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/research_revision.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/showcase/README.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/showcase/assets.lock.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/showcase/blender_scenes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/showcase/figures.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/slab_biology.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/state_machine.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/stress20.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v25_document.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v2_cases.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v2_document.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v3_complex_scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v3_render_jobs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v3_rendering.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v3_scene_annotations.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v3_scene_passes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v3_scene_paths.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v3_scene_templates.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/README.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/browser_scatter.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/contours_streamlines.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/data/world-countries.geojson +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/data/world-map-source.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/data/world-population.csv +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/engineering_report.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/faceted_operations.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/fixtures/assembly.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/fixtures/manifest.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/fixtures/measurement.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/fixtures/region-shapes.geojson +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/fixtures/regions.csv +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/fixtures/regions.geojson +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/fixtures/transport.geojson +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/linked_dashboard.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/linked_selection.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/linked_selection.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/mesh_fields.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/region_shapes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/regional_analysis.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/regional_report.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/scientific_report.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/statistical_views.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/table_inputs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/time_series.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/transport_map.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/examples/v4/world_population.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/annot.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/bio3d.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/cartoon.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/chem_data.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/chem_fingerprints.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/data/1m17-kinase.pdb +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/data/README.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/drug_discovery.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/mouse_brain_data.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/neural_activity.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/pdbfile.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/showcase_part.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/showcase_process.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/showcase_season.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/structure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/structure_data.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/target.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/figures/trial.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/README.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/biology-panels.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/chem_fingerprints.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/clipping-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/compiled-marker-shapes.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/compiled-scene-viewer.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/compiled-viewer-culling.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/compiled-viewer-deep-zoom.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/compositing-pdf-after.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/compositing-pdf-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/compositing-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/dense-scatter-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/diagram-labels-after.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/diagram-labels-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/diagram-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/engine-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/engine-transparency-after.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/engine-transparency-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/flow.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/fluorescence-biology.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/general-plots-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/general-plots.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/hatch-pdf-after.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/hatch-pdf-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/hatch-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/hatch-svg-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/label-intensities.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/oblique-biology.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/part.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/plot-axis-after.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/plot-axis-before.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/plot-engine-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/plots.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/polar.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/preset-formats.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/presets.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/process.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/real-biology.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/render-scene-data.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/render-scene-initial.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/render-scene-review.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/research-crossing-revision.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/research-figure-planner.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/research-planner-study.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/research-revision.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/season.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-architecture-sketch.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-architecture.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-attractor.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-helix.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-interference.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-lattice.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-photonics.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/showcase-wave-packets.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/slab-biology.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/stress20.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/structure.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/v3-complex-scene.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/v3-render-jobs.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/v3-rendering.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/v3-scene-annotations.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/v3-scene-passes.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/v3-scene-paths.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/gallery/v3-scene-templates.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/mkdocs.yml +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/requirements-ci.txt +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/requirements-docs.txt +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/requirements-tables.txt +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/scripts/bench_svg.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/scripts/rasterise.sh +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/scripts/sanity_typeset.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/__main__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/asset.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/cache.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/cutout.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/deps.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/harmonise.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/lineart.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/mask.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/provenance.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/raster.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/sidecar.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/assets/silhouette.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/cli.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/components.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/batch.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/diagram.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/envelope.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/geom.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/prims.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/style.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/trace.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/core/units.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/abut.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/break_rules.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/color.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/cross.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/image.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/key_rules.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/link_rules.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/path_rules.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/plot_rules.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/report.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/rules.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/diagnostics/three_rules.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/compiler.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/composition.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/data.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/data_io.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/label_overrides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/module.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/presets.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/publication.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/spec.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/document/style_overrides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/annotate.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/bezier_clip.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/clip.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/coords.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/path.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/place.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/draw/shapes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/_table_adapters.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/compiled.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/compiled.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/drawings.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/editor.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/editor.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/fields.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/geography.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/grid.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/images.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/overrides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/page.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/regions.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/runtime.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/series.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/timeaxis.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/channels.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/contours.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/engineering.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/fields.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/figure_planner.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/grid.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/layout_editor/gestures.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/layout_editor/workspace.css +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/layout_editor/workspace.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/measurement.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/measurements.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/planner_geometry.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/regions.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/controls.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/page.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/runtime.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/spatial.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/sections.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/selection.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/slabs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/temporal.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/tiff.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/experimental/volume.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/fit.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/flow.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/graph.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/graph_force.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/graph_layered.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/graph_tree.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/labels.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/layout/sankey.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/links/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/links/curves.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/links/link.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/axis.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/breaks.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/categories.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/facets.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/inset.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/key.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/marks.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/notes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/panel.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/png.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/polar.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/ramp.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/raster.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/ribbon.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/scale.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/scatter_batch.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/scatter_raster.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/series.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/simplify.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/plot/timescale.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/analysis.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/bounds.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/brushes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/bundle.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/composite.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/fontembed.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/glyphs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/hatching.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/outline.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/paint.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/pathdata.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/pdf.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/pdftext.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/preview.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/raster.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/resources.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/revision.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/render/svg.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/themes/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/themes/color.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/themes/palettes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/themes/theme.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/api.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/backend.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/device_worker.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/discover.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/lineart.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/options.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/scene_worker.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/script.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/svgread.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/template_worker.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender/tracing.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/blender_backend.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/camera.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/deps.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/depth.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/devices.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/drill.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/edges.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/hlr.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/linalg.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/mesh.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/occlude.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/order.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/parse.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/place.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/protein.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/quality.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/render_jobs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/scene_annotations.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/scene_pass.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/scene_projection.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/scenes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/shade.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/solids.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/templates.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/three/templates.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/typeset/__init__.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/typeset/fonts.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/typeset/markup.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/typeset/onpath.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/typeset/outline.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/src/inklet/typeset/shaping.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/assets/mouse.inklet.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/assets/mouse.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/dense_graph.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/draw_probe.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/assets/sem.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/assets/tem.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/cell.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/common.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/data.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/imaging.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/kinetics.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/micrograph.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro/system.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/electro_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/fidelity.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/flow.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/hard_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/label_storm.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/mega_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/meshes/README.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/meshes/brain-lh.obj +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/meshes/spot.obj +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/panels/apparatus.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/panels/graphs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/panels/relations.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/panels/responses.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/panels/sections.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/probes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/stress/three_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_alignment_contract.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_annotate.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_annotate_letters.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_assets.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_assets_provenance.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_biology_source.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_blend_scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_compiled.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_facets.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_geography.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_overrides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_regions.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_revision.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_scatter.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_series.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_statistics.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_switching.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_browser_time.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_categories.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_channels_contours.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_chem_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_cli.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_clip_engine.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_components.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_compositing_engine.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_composition_recipes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_contrast_and_labels.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_cookbook.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_core.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_core_amendments.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_csv_input.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_api.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_artwork.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_break_distorts.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_crossing.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_image_contrast.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_ink.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_keys.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_links.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_paths.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagnostics_plot_box.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_diagram_engine.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_docs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_docs_site.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_document.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_document_data.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_document_v25.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_draw_clip.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_draw_path.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_draw_place.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_draw_shapes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_engine_layout.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_engine_rendering.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_engine_scatter.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_engineering_report.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_export_bundle.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_figure_planner.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_fit.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_grid_fields.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_guides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_hatch_engine.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_label_measurements.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_label_overrides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout_editor.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout_graph.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout_graph_fit.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout_origin.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout_overrides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_layout_sankey.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_links.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_links_avoid.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_links_shapes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_marker_batches.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_mesh_fields.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_microscopy_tiff.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_neural_activity.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_output_contract.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_paint_program.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_place_labels.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_axis.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_broken_axis.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_clip.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_engine.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_facets.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_inset.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_key.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_labels.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_legend.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_marks.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_notes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_polar.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_publication.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_quality_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_raster.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_recipes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_ribbon.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_scale.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_swarm.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_plot_time.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_presets.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_publication_limits.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_regional_report.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_release_adversarial.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_devices.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_embed.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_glyphs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_jobs.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_outline.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_pdf.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_pdf_text.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_quality.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_scene.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_style_fields.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_svg_perf.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_render_v3.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_review_v25.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_round4_plot.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_routing_avoid.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scatter_rendering.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scene_annotations.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scene_culling.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scene_pass.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scene_projection.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scene_templates.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scene_viewer.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_scientific_report.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_sections.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_shared_plot_margins.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_showcase_library.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_showcase_round3.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_slabs_regions.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_structure_figure.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_style_overrides.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_svg.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_table_adapters.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_target_pose.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_temporal_adapters.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_text_markup.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_text_on_path.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_theme_font_style.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_themes.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_anchor_pin.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_api.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_backend_blender.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_blender.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_depth_order.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_drill.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_hlr.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_mesh.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_order_vector.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_overlay.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_parse.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_patches.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_place.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_protein.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_ridges.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_sort.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_sort_budget.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_three_view.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_typeset.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_v4_selection.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_volume.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_watch_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/test_world_map_example.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/README.md +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/categories-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/categories-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/components-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/components-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/dense-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/dense-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/fonts.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/inset-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/inset-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/markers-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/markers-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/renderers.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/type-opacity-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/type-opacity-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-dense-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-dense-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-workflow-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v25-document-pdf.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/baseline/v25-document-svg.png +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/fixtures.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tests/visual/v2-budgets.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_batches.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_clipping.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_diagrams.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_engine.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_lines.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_marker_index.mjs +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_scene_culling.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_scene_gpu.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_scene_redraw.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_scene_viewer.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_scene_zoom.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_v2.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/benchmark_v4.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/browser_study.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/check_render_wheel.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/dock_ligand.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_gallery.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_previews.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_previews.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_site.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_theme/404.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_theme/card.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_theme/gallery.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_theme/home.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_theme/main.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/docs_theme/plot-gallery.html +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/gen_api.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/make_culling_review.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/plot_catalog.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/prepare_world_map.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/preset_gallery.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/profile_scene_redraw.js +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/showcase_gallery.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/stress20.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/strip_pdb.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/v3_showcase.py +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/tools/v4-budgets.json +0 -0
- {inklet-4.0.0.dev12 → inklet-4.0.0.dev13}/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.dev13
|
|
10
10
|
type: string
|
|
11
11
|
dry_run:
|
|
12
12
|
description: Validate release files without uploading to PyPI
|
|
@@ -42,8 +42,8 @@ jobs:
|
|
|
42
42
|
GH_REPO: ${{ github.repository }}
|
|
43
43
|
RELEASE_TAG: ${{ inputs.tag }}
|
|
44
44
|
run: |
|
|
45
|
-
[[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?$ ]] || {
|
|
46
|
-
echo 'Expected a stable or
|
|
45
|
+
[[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+|rc[0-9]+)?$ ]] || {
|
|
46
|
+
echo 'Expected a stable, development or RC tag such as v4.0.0, v4.0.0.dev13 or v4.0.0rc1' >&2
|
|
47
47
|
exit 1
|
|
48
48
|
}
|
|
49
49
|
gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
|
|
@@ -53,8 +53,8 @@ jobs:
|
|
|
53
53
|
release = json.loads((Path(os.environ['RUNNER_TEMP']) / 'release.json').read_text())
|
|
54
54
|
if release['isDraft']:
|
|
55
55
|
raise SystemExit('Publish the GitHub release before uploading its assets')
|
|
56
|
-
if release['isPrerelease'] != (
|
|
57
|
-
raise SystemExit('Development tags must be GitHub prereleases; stable tags must not')
|
|
56
|
+
if release['isPrerelease'] != any(marker in os.environ['RELEASE_TAG'] for marker in ('.dev', 'rc')):
|
|
57
|
+
raise SystemExit('Development and RC tags must be GitHub prereleases; stable tags must not')
|
|
58
58
|
PYCODE
|
|
59
59
|
version="${RELEASE_TAG#v}"
|
|
60
60
|
gh release download "$RELEASE_TAG" --dir dist \
|
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 4.0.0.dev13 — 2026-09-13
|
|
6
|
+
|
|
7
|
+
Thirteenth development preview: native camera choices in the composition editor.
|
|
8
|
+
The original 4.0 scope remains open; this is not a release candidate.
|
|
9
|
+
|
|
10
|
+
- Add a Camera inspector for builtin native model/solid components, with orbit
|
|
11
|
+
angles, roll and projection mode. Preserve explicit look-at eye/target vectors.
|
|
12
|
+
- Include camera edits in atomic layout transactions, undo/redo, shared instance
|
|
13
|
+
reconciliation, saved choices and matching SVG/PDF reconstruction.
|
|
14
|
+
- Introduce composition schema 0.5, retaining readers for 0.1–0.4. Report changed
|
|
15
|
+
camera kinds and unsupported replacement renderers as orphaned camera choices.
|
|
16
|
+
- Illustrate the camera workflow and document physical fitting limitations.
|
|
17
|
+
- Accept RC tags in the publishing gate, with tested prerelease/draft checks;
|
|
18
|
+
update the compatibility matrix without claiming broader browser coverage.
|
|
19
|
+
|
|
5
20
|
## 4.0.0.dev12 — 2026-09-13
|
|
6
21
|
|
|
7
22
|
Twelfth development preview: a redesigned local figure workspace.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: inklet
|
|
3
|
-
Version: 4.0.0.
|
|
3
|
+
Version: 4.0.0.dev13
|
|
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,15 @@ their signatures and report schemas may change.
|
|
|
81
81
|
|
|
82
82
|
## 4.0 development preview
|
|
83
83
|
|
|
84
|
-
**4.0.0.
|
|
85
|
-
|
|
86
|
-
keyboard shortcuts and protection for unapplied changes.
|
|
84
|
+
**4.0.0.dev13** adds native 3D camera editing to the studio workspace, with
|
|
85
|
+
shared undo/redo, saved choices and source revision reconciliation.
|
|
87
86
|
```sh
|
|
88
|
-
python -m pip install "inklet==4.0.0.
|
|
87
|
+
python -m pip install "inklet==4.0.0.dev13"
|
|
89
88
|
```
|
|
90
89
|
|
|
91
90
|
[Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
|
|
92
91
|
[4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
|
|
93
|
-
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.
|
|
92
|
+
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev13)
|
|
94
93
|
|
|
95
94
|
This is an opt-in development release. Experimental APIs and saved-state schemas
|
|
96
95
|
may change; 3.1.0 remains the stable release. General browser editing,
|
|
@@ -31,16 +31,15 @@ their signatures and report schemas may change.
|
|
|
31
31
|
|
|
32
32
|
## 4.0 development preview
|
|
33
33
|
|
|
34
|
-
**4.0.0.
|
|
35
|
-
|
|
36
|
-
keyboard shortcuts and protection for unapplied changes.
|
|
34
|
+
**4.0.0.dev13** adds native 3D camera editing to the studio workspace, with
|
|
35
|
+
shared undo/redo, saved choices and source revision reconciliation.
|
|
37
36
|
```sh
|
|
38
|
-
python -m pip install "inklet==4.0.0.
|
|
37
|
+
python -m pip install "inklet==4.0.0.dev13"
|
|
39
38
|
```
|
|
40
39
|
|
|
41
40
|
[Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
|
|
42
41
|
[4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
|
|
43
|
-
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.
|
|
42
|
+
[Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev13)
|
|
44
43
|
|
|
45
44
|
This is an opt-in development release. Experimental APIs and saved-state schemas
|
|
46
45
|
may change; 3.1.0 remains the stable release. General browser editing,
|
|
Binary file
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Compatibility
|
|
2
2
|
|
|
3
|
-
Inklet **3.1**
|
|
3
|
+
Stable Inklet **3.1** and the **4.0 development line** use the environments
|
|
4
|
+
and rendering paths below. Preview-only capabilities are identified separately.
|
|
4
5
|
The matrix distinguishes installed-package checks from full integration tests.
|
|
5
6
|
|
|
6
7
|
## Test coverage
|
|
@@ -48,12 +49,25 @@ Blender. Scene creation and rendering run Blender in a separate process.
|
|
|
48
49
|
### Development-preview table adapters
|
|
49
50
|
|
|
50
51
|
The [pandas and Polars adapters](table-inputs.md) are included in the experimental
|
|
51
|
-
[4.0
|
|
52
|
+
[4.0 development preview](development-preview.md), not in stable 3.1.0. Their `pandas` and `polars` extras are separate
|
|
52
53
|
from core dependencies. The adapter CI jobs use Linux/Python 3.12 with pandas
|
|
53
54
|
2.2.0 / Polars 1.0.0 and the versions pinned in `requirements-tables.txt`.
|
|
54
55
|
Both paths check scalar/identity contracts and saved-state SVG reconstruction.
|
|
55
56
|
The core wheel checks that neither integration is required or imported.
|
|
56
57
|
|
|
58
|
+
### Browser workflows and local editor
|
|
59
|
+
|
|
60
|
+
The 4.0 preview includes standalone linked HTML and a Python-backed composition
|
|
61
|
+
editor. Automated browser integration uses Chromium on Linux. Firefox, Safari,
|
|
62
|
+
mobile browsers and browser interaction on Windows/macOS are not covered by
|
|
63
|
+
that integration matrix. Windows/macOS wheel checks verify installed editor
|
|
64
|
+
assets and representative static exports; they are not browser certification.
|
|
65
|
+
|
|
66
|
+
The composition editor requires a running local Python session and binds to
|
|
67
|
+
loopback. Its saved choices are JSON overrides for an existing Python recipe,
|
|
68
|
+
not a standalone project. Linked HTML has a separate saved-selection format.
|
|
69
|
+
See [the editor](layout-editor.md) and [saved layouts](layout-overrides.md).
|
|
70
|
+
|
|
57
71
|
### Rendering
|
|
58
72
|
|
|
59
73
|
The legacy vector line-art backend uses Blender's pre-4.3 Grease Pencil API.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Inklet 4.0.0.
|
|
1
|
+
# Inklet 4.0.0.dev13
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The thirteenth 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.dev13"
|
|
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.dev13"
|
|
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.dev13"
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
The core preview needs no browser server, NumPy, pandas, Polars or Blender.
|
|
@@ -29,7 +29,22 @@ 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
|
+
## Native camera editing in dev13
|
|
33
|
+
|
|
34
|
+
The [Camera tab](layout-editor.md#edit-a-native-3d-camera) edits native model and
|
|
35
|
+
solid components: orbit angles, roll and projection mode, with undo/redo and
|
|
36
|
+
matching saved SVG/PDF output. Explicit look-at views retain eye and target.
|
|
37
|
+
Schema 0.5 adds camera choices; 0.1–0.4 still load. Source geometry can change
|
|
38
|
+
without losing compatible camera edits. Incompatible camera kinds are reported.
|
|
39
|
+
|
|
40
|
+

|
|
41
|
+
|
|
42
|
+
This is another development increment, not RC1. The original 4.0 scope remains
|
|
43
|
+
in force: asset manifests, shared object relationships and the other roadmap
|
|
44
|
+
gates still need implementation and acceptance evidence. Publishing now supports
|
|
45
|
+
RC tags when those gates are ready.
|
|
46
|
+
|
|
47
|
+
## Studio workspace retained from dev12
|
|
33
48
|
|
|
34
49
|
The [composition editor](layout-editor.md) now has a searchable object navigator,
|
|
35
50
|
a central figure canvas and a focused inspector. Layout, Labels and Styles use
|
|
@@ -238,7 +253,7 @@ The wheel contains the library. To obtain recipes and fixtures, use the matching
|
|
|
238
253
|
release checkout or source archive:
|
|
239
254
|
|
|
240
255
|
```sh
|
|
241
|
-
git clone --branch v4.0.0.
|
|
256
|
+
git clone --branch v4.0.0.dev13 https://github.com/Mapika/inklet.git
|
|
242
257
|
cd inklet
|
|
243
258
|
python -m pip install -e '.[render]'
|
|
244
259
|
python examples/v4/regional_report.py --renderer compiled --editor --output out/regional
|
|
@@ -22,7 +22,7 @@ sharing a finished document without a Python process.
|
|
|
22
22
|
## A workspace for your figure
|
|
23
23
|
|
|
24
24
|
The desktop workspace has a searchable object navigator, a central canvas and
|
|
25
|
-
an inspector with **Layout**, **Labels** and **
|
|
25
|
+
an inspector with **Layout**, **Labels**, **Styles** and **Camera** tabs. Select an object
|
|
26
26
|
from the navigator or directly on the figure. Nested objects retain their
|
|
27
27
|
hierarchy, and the inspector shows the exact source path. On smaller screens,
|
|
28
28
|
a **Content** selector replaces the navigator; on phones the inspector sits
|
|
@@ -191,7 +191,7 @@ Explicit discard removes that style target's edits while preserving compatible
|
|
|
191
191
|
labels and placements on the chart.
|
|
192
192
|
|
|
193
193
|
Styles use the same named path, key and kind contracts as labels. New saved
|
|
194
|
-
files use schema 0.
|
|
194
|
+
files use schema 0.5; 0.1 through 0.4 files still load. This unifies authoring
|
|
195
195
|
within the composition editor. The separate [linked-table style inspector](visual-editing.md)
|
|
196
196
|
retains its own source-bound format; its files are not interchangeable. Plot
|
|
197
197
|
titles, axes, bars, arbitrary factories, gradients and camera/material settings
|
|
@@ -286,7 +286,51 @@ starts and closes the server automatically; keep that context alive during
|
|
|
286
286
|
browser use.
|
|
287
287
|
|
|
288
288
|
The inspector edits named composition layout and artwork scale. Label content,
|
|
289
|
-
individual plot marks, camera
|
|
289
|
+
individual plot marks, camera dragging, and file watching are not part of this interface.
|
|
290
290
|
The separate [linked-plot appearance editor](visual-editing.md) retains its
|
|
291
291
|
existing scope. Broader authoring and identity work remains on the
|
|
292
292
|
[4.0 roadmap](roadmap.md).
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
## Edit a native 3D camera
|
|
296
|
+
|
|
297
|
+
Select a named `i.component(i.model, ...)` or `i.component(i.solid, ...)` and open
|
|
298
|
+
**Camera**. Native orbit cameras expose azimuth, elevation and roll in degrees,
|
|
299
|
+
and perspective. Apply recompiles the figure through Python;
|
|
300
|
+
undo, saved choices and SVG/PDF exports include the same camera decision.
|
|
301
|
+
Canvas zoom and pan remain view-only controls.
|
|
302
|
+
|
|
303
|
+

|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
import inklet as i
|
|
307
|
+
from inklet.experimental.layout_editor import LayoutEditor
|
|
308
|
+
|
|
309
|
+
study = i.composition(100, 70)
|
|
310
|
+
study.add('model', i.component(i.solid, 'cube', width=35, style='shaded'),
|
|
311
|
+
x=15, y=15)
|
|
312
|
+
editor = LayoutEditor(study)
|
|
313
|
+
editor.command('edit', {'path': '/model', 'cameras': {'view': {
|
|
314
|
+
'kind': 'native-orbit', 'azimuth': 15, 'elevation': 20,
|
|
315
|
+
'perspective': True,
|
|
316
|
+
}}})
|
|
317
|
+
choices = editor.overrides()
|
|
318
|
+
reopened = LayoutEditor(study)
|
|
319
|
+
reopened.command('load', choices)
|
|
320
|
+
assert reopened.figure.to_svg() == editor.figure.to_svg()
|
|
321
|
+
editor.figure.save('camera-study.svg', 'camera-study.pdf')
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Only edited fields are saved. Replacing the source mesh keeps the camera edits;
|
|
325
|
+
unedited source camera fields remain live. Explicit `Camera.look_at` views
|
|
326
|
+
retain eye, target and up vectors and expose roll and perspective.
|
|
327
|
+
Changing between orbit and look-at cameras reports incompatible saved camera
|
|
328
|
+
choices. Review before explicitly discarding them on refresh.
|
|
329
|
+
|
|
330
|
+
This inspector supports the builtin native model renderer. It does not edit
|
|
331
|
+
Blender scene cameras, standalone linked-HTML cameras, arbitrary prebuilt
|
|
332
|
+
Diagrams, or eye/target vectors. Camera dragging and depth-aware selection remain
|
|
333
|
+
open work. Elevation is limited to −90 through 90 degrees.
|
|
334
|
+
The native renderer fits models to their physical width/height, which cancels
|
|
335
|
+
the focal scale of a field-of-view change at a fixed eye position. The inspector
|
|
336
|
+
therefore preserves the source field of view without exposing an ineffective control.
|
|
@@ -66,7 +66,7 @@ A saved label entry includes its kind and only the fields that changed:
|
|
|
66
66
|
{"schema":"inklet.composition-layout/0.4","targets":{"/caption":{"labels":{"label":{"kind":"module-label","text":"Reviewed response"}}}}}
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
Readers accept legacy schemas 0.1, 0.2 and 0.
|
|
69
|
+
Readers accept legacy schemas 0.1, 0.2, 0.3 and 0.4. New captures use 0.5; older readers
|
|
70
70
|
must be upgraded before opening them. Label fields are rejected under older
|
|
71
71
|
schema identifiers. Removed/incompatible labels appear as `path#key` in the
|
|
72
72
|
orphan report. Explicit `missing='drop'` retains compatible edits on that path.
|
|
@@ -156,12 +156,13 @@ of 32 operations. Malformed files, nonfinite numbers, invalid properties and
|
|
|
156
156
|
contradictory edits to a shared nested definition are rejected, including when
|
|
157
157
|
`missing='drop'` is used.
|
|
158
158
|
|
|
159
|
-
New files use `inklet.composition-layout/0.
|
|
159
|
+
New files use `inklet.composition-layout/0.5`, adding named camera decisions.
|
|
160
160
|
The loader also accepts 0.1 files from dev7/dev8 (without scale), 0.2 files from
|
|
161
|
-
dev9 (without labels)
|
|
162
|
-
|
|
161
|
+
dev9 (without labels), 0.3 files from dev10 (without styles) and 0.4 files from
|
|
162
|
+
dev11/dev12 (without cameras). Unknown schemas
|
|
163
|
+
are rejected. Upgrade older readers before opening a 0.5 file. The JSON object
|
|
163
164
|
contains `schema` and `targets`; each target has changed `placement`, `page`,
|
|
164
|
-
`labels` and/or `
|
|
165
|
+
`labels`, `styles` and/or `cameras` fields. This development-preview format is not a general
|
|
165
166
|
Python object serializer or an asset manifest.
|
|
166
167
|
|
|
167
168
|
## Review revised content
|
|
@@ -176,3 +177,14 @@ in `out/composition-recipes/`. PNG generation requires the render extras.
|
|
|
176
177
|
|
|
177
178
|
In dev8, the [local layout editor](layout-editor.md) provides browser controls,
|
|
178
179
|
undo/redo and Python-compiled previews using this saved format.
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
## Saved camera choices
|
|
183
|
+
|
|
184
|
+
Schema 0.5 adds `cameras` alongside layout, labels and styles. The `view` key has
|
|
185
|
+
kind `native-orbit` or `native-look-at`, and only changed fields are recorded.
|
|
186
|
+
[Camera editing](layout-editor.md#edit-a-native-3d-camera) documents the supported
|
|
187
|
+
native components and controls. Orbit/look-at changes and unsupported replacement
|
|
188
|
+
renderers report an orphan such as `/model#camera:view`. Explicitly dropping that
|
|
189
|
+
orphan preserves compatible placement, label and style choices on the object.
|
|
190
|
+
Schemas 0.1–0.4 remain readable but cannot contain camera edits.
|
|
@@ -98,7 +98,8 @@ the wheel and source archive from an existing, published GitHub release.
|
|
|
98
98
|
It verifies the release's `SHA256SUMS` and runs Twine's strict metadata checks.
|
|
99
99
|
It does not rebuild the packages, so GitHub and PyPI receive identical files.
|
|
100
100
|
The workflow accepts stable tags such as `v3.1.0` and developmental tags such as
|
|
101
|
-
`v4.0.0.dev1`, and
|
|
101
|
+
`v4.0.0.dev1`, and release candidates such as `v4.0.0rc1`, and runs from
|
|
102
|
+
`master`. Development and RC tags must be marked as GitHub
|
|
102
103
|
prereleases; stable tags must not. Both archives' package name/version metadata
|
|
103
104
|
must match the tag.
|
|
104
105
|
|
|
@@ -139,9 +140,9 @@ publishing workflow. PyPI does not permit replacing an uploaded distribution;
|
|
|
139
140
|
package changes require a new version.
|
|
140
141
|
|
|
141
142
|
|
|
142
|
-
For a development snapshot, mark the GitHub release as a prerelease and keep it
|
|
143
|
+
For a development snapshot or release candidate, mark the GitHub release as a prerelease and keep it
|
|
143
144
|
out of GitHub's latest stable release slot (`gh release create --prerelease
|
|
144
|
-
--latest=false`). Use an exact PEP 440 version, for example `4.0.0.dev1`, in both
|
|
145
|
+
--latest=false`). Use an exact PEP 440 version, for example `4.0.0.dev1` or `4.0.0rc1`, in both
|
|
145
146
|
`pyproject.toml` and `inklet.__version__`. The same checksum, metadata and
|
|
146
147
|
isolated-package checks apply; run the workflow first with `dry_run=true`, then
|
|
147
148
|
publish the same attached files with `dry_run=false`. Users opt in with an exact
|
|
@@ -67,6 +67,8 @@ to that same layout/label history, saved state and reconciliation workflow,
|
|
|
67
67
|
with data-driven marker fields protected from constant overrides. Dev12 adds
|
|
68
68
|
the studio workspace: object navigation, focused controls, zoom/pan, shortcuts
|
|
69
69
|
and protection for pending edits.
|
|
70
|
+
The next increment adds native orbit/look-at camera choices to the same editor,
|
|
71
|
+
saved schema and source reconciliation; general camera manipulation remains open.
|
|
70
72
|
Serialized project templates, asset manifests, shared selection
|
|
71
73
|
relationships, axis-label/camera editing and finer-grained manipulation remain open. Subsequent work
|
|
72
74
|
should extend authoring and cross-content identity beyond this bounded inspector.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Saved native 3D camera choices without replacing source geometry."""
|
|
2
|
+
from dataclasses import replace
|
|
3
|
+
import math
|
|
4
|
+
|
|
5
|
+
from .spec import ComponentSpec
|
|
6
|
+
from ..three.camera import as_camera
|
|
7
|
+
|
|
8
|
+
_FIELDS = {'azimuth', 'elevation', 'roll', 'perspective'}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def targets(item):
|
|
12
|
+
from .. import model, solid
|
|
13
|
+
if not isinstance(item, ComponentSpec) or item.factory not in (model, solid):
|
|
14
|
+
return {}
|
|
15
|
+
if item.kwargs.get('backend', 'builtin') != 'builtin':
|
|
16
|
+
return {}
|
|
17
|
+
camera = as_camera(item.kwargs.get('view'))
|
|
18
|
+
# Explicit look-at cameras retain their eye, target and up vector. Angle
|
|
19
|
+
# fields would be ignored by that camera and must not appear editable.
|
|
20
|
+
fields = _FIELDS if camera.eye is None else _FIELDS - {'azimuth', 'elevation'}
|
|
21
|
+
kind = 'native-orbit' if camera.eye is None else 'native-look-at'
|
|
22
|
+
return {'view': ({'kind': kind, **{key: getattr(camera, key) for key in sorted(fields)}}, camera)}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def validate(value):
|
|
26
|
+
if not isinstance(value, dict) or not value:
|
|
27
|
+
raise ValueError('cameras must be a nonempty object')
|
|
28
|
+
result = {}
|
|
29
|
+
for key, fields in value.items():
|
|
30
|
+
if key != 'view' or not isinstance(fields, dict):
|
|
31
|
+
raise ValueError('camera choices require a view field object')
|
|
32
|
+
kind = fields.get('kind')
|
|
33
|
+
allowed = _FIELDS if kind == 'native-orbit' else _FIELDS - {'azimuth', 'elevation'}
|
|
34
|
+
if kind not in ('native-orbit', 'native-look-at') or len(fields) < 2 or not set(fields) <= {'kind', *allowed}:
|
|
35
|
+
raise ValueError('invalid camera kind or fields')
|
|
36
|
+
for name, val in fields.items():
|
|
37
|
+
if name == 'kind':
|
|
38
|
+
continue
|
|
39
|
+
if name == 'perspective':
|
|
40
|
+
if type(val) is not bool:
|
|
41
|
+
raise ValueError('camera perspective must be a boolean')
|
|
42
|
+
elif type(val) not in (int, float) or not math.isfinite(val):
|
|
43
|
+
raise ValueError('camera angles must be finite numbers')
|
|
44
|
+
elif name == 'elevation' and not -90 <= val <= 90:
|
|
45
|
+
raise ValueError('camera elevation must be between -90 and 90 degrees')
|
|
46
|
+
result[key] = dict(fields)
|
|
47
|
+
return result
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def apply(item, edits):
|
|
51
|
+
camera = as_camera(item.kwargs.get('view'))
|
|
52
|
+
changes = {key: val for key, val in edits['view'].items() if key != 'kind'}
|
|
53
|
+
item.kwargs = {**item.kwargs, 'view': replace(camera, **changes)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Portable layout, text and
|
|
1
|
+
"""Portable layout, text, appearance and camera decisions for named composition recipes."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import math
|
|
@@ -6,10 +6,11 @@ import re
|
|
|
6
6
|
|
|
7
7
|
from .compiler import LayoutError
|
|
8
8
|
from .spec import length
|
|
9
|
-
from . import label_overrides as labels, style_overrides as styles
|
|
10
|
-
_EDITORS = {"labels":labels, "styles":styles}
|
|
9
|
+
from . import label_overrides as labels, style_overrides as styles, camera_overrides as cameras
|
|
10
|
+
_EDITORS = {"labels":labels, "styles":styles, "cameras":cameras}
|
|
11
11
|
|
|
12
|
-
SCHEMA = 'inklet.composition-layout/0.
|
|
12
|
+
SCHEMA = 'inklet.composition-layout/0.5'
|
|
13
|
+
STYLE_SCHEMA = 'inklet.composition-layout/0.4'
|
|
13
14
|
LABEL_SCHEMA = 'inklet.composition-layout/0.3'
|
|
14
15
|
SCALE_SCHEMA = 'inklet.composition-layout/0.2'
|
|
15
16
|
LEGACY_SCHEMA = 'inklet.composition-layout/0.1'
|
|
@@ -95,7 +96,7 @@ def _page(values):
|
|
|
95
96
|
|
|
96
97
|
|
|
97
98
|
def capture(recipe, reference):
|
|
98
|
-
"""Record changed layout and compatible named labels/styles; keep unedited fields live."""
|
|
99
|
+
"""Record changed layout and compatible named labels/styles/cameras; keep unedited fields live."""
|
|
99
100
|
from .composition import Composition
|
|
100
101
|
if not isinstance(reference,Composition): raise TypeError('reference must be a Composition')
|
|
101
102
|
current, before = _targets(recipe), _targets(reference)
|
|
@@ -141,7 +142,7 @@ def apply(recipe, value, *, missing='error'):
|
|
|
141
142
|
"""Validate all edits, reconcile stable names, then edit an independent copy."""
|
|
142
143
|
from .composition import Composition
|
|
143
144
|
if missing not in ('error','drop'): raise ValueError('missing policy must be error or drop')
|
|
144
|
-
if (not isinstance(value,dict) or set(value)!={'schema','targets'} or value['schema'] not in (SCHEMA,LABEL_SCHEMA,SCALE_SCHEMA,LEGACY_SCHEMA)
|
|
145
|
+
if (not isinstance(value,dict) or set(value)!={'schema','targets'} or value['schema'] not in (SCHEMA,STYLE_SCHEMA,LABEL_SCHEMA,SCALE_SCHEMA,LEGACY_SCHEMA)
|
|
145
146
|
or not isinstance(value['targets'],dict)):
|
|
146
147
|
raise ValueError('invalid composition layout overrides')
|
|
147
148
|
targets = _targets(recipe)
|
|
@@ -149,7 +150,7 @@ def apply(recipe, value, *, missing='error'):
|
|
|
149
150
|
for path,entry in value['targets'].items():
|
|
150
151
|
if not isinstance(path,str) or not re.fullmatch(r'/(?:'+_NAME+r'(?:/'+_NAME+r')*)?',path):
|
|
151
152
|
raise ValueError('layout targets require absolute named composition paths')
|
|
152
|
-
if not isinstance(entry,dict) or not entry or not set(entry)<={'placement','page','labels','styles'}:
|
|
153
|
+
if not isinstance(entry,dict) or not entry or not set(entry)<={'placement','page','labels','styles','cameras'}:
|
|
153
154
|
raise ValueError(f'invalid layout target properties: {path}')
|
|
154
155
|
options = {}
|
|
155
156
|
if 'placement' in entry:
|
|
@@ -158,11 +159,14 @@ def apply(recipe, value, *, missing='error'):
|
|
|
158
159
|
raise ValueError('scale requires composition layout schema 0.2')
|
|
159
160
|
if 'page' in entry: options['page'] = _page(entry['page'])
|
|
160
161
|
if 'labels' in entry:
|
|
161
|
-
if value['schema'] not in (SCHEMA,LABEL_SCHEMA): raise ValueError('labels require composition layout schema 0.3')
|
|
162
|
+
if value['schema'] not in (SCHEMA,STYLE_SCHEMA,LABEL_SCHEMA): raise ValueError('labels require composition layout schema 0.3')
|
|
162
163
|
options['labels'] = labels.validate(entry['labels'])
|
|
163
164
|
if 'styles' in entry:
|
|
164
|
-
if value['schema']
|
|
165
|
+
if value['schema'] not in (SCHEMA,STYLE_SCHEMA): raise ValueError('styles require composition layout schema 0.4')
|
|
165
166
|
options['styles'] = styles.validate(entry['styles'])
|
|
167
|
+
if 'cameras' in entry:
|
|
168
|
+
if value['schema']!=SCHEMA: raise ValueError('cameras require composition layout schema 0.5')
|
|
169
|
+
options['cameras'] = cameras.validate(entry['cameras'])
|
|
166
170
|
target = targets.get(path)
|
|
167
171
|
invalid = target is None
|
|
168
172
|
if target is not None:
|
|
@@ -179,8 +183,8 @@ def apply(recipe, value, *, missing='error'):
|
|
|
179
183
|
compatible = {}
|
|
180
184
|
for key,fields in options[group].items():
|
|
181
185
|
if (key not in available or fields['kind']!=available[key][0]['kind']
|
|
182
|
-
or (group
|
|
183
|
-
orphaned.append(path+('#style:'
|
|
186
|
+
or (group in ('styles','cameras') and not (set(fields)-{'kind'})<=set(available[key][0]))):
|
|
187
|
+
orphaned.append(path+({'styles':'#style:', 'cameras':'#camera:'}.get(group, '#'))+key)
|
|
184
188
|
else: compatible[key] = fields
|
|
185
189
|
if compatible: options[group] = compatible
|
|
186
190
|
else: options.pop(group)
|
|
@@ -193,7 +197,7 @@ def apply(recipe, value, *, missing='error'):
|
|
|
193
197
|
for path,options in prepared.items():
|
|
194
198
|
parent,part,item = targets[path]
|
|
195
199
|
for group,fields in options.items():
|
|
196
|
-
owner = (id(item),None) if group in
|
|
200
|
+
owner = (id(item),None) if (group=='page' or group in _EDITORS) else (id(parent),part.name)
|
|
197
201
|
if group in _EDITORS:
|
|
198
202
|
fields = {(label,key):val for label,edits in fields.items() for key,val in edits.items()}
|
|
199
203
|
for key,val in fields.items():
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Local browser editing of composition layouts, labels and
|
|
1
|
+
"""Local browser editing of composition layouts, labels, styles and cameras through Python."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import copy
|
|
@@ -17,7 +17,7 @@ from ...document.layout_overrides import SCHEMA, _targets, _placement, _expressi
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class LayoutEditor:
|
|
20
|
-
"""Edit a live Composition layout, labels and
|
|
20
|
+
"""Edit a live Composition layout, labels, styles and cameras with matching Python exports.
|
|
21
21
|
|
|
22
22
|
Use as a context manager and open url while the context stays alive. The
|
|
23
23
|
source recipe is retained but never edited. Refresh explicitly after source
|
|
@@ -145,14 +145,14 @@ class LayoutEditor:
|
|
|
145
145
|
targets=_targets(self._recipe)
|
|
146
146
|
if path not in targets:return [path]
|
|
147
147
|
parent,part,item=targets[path]
|
|
148
|
-
if group in
|
|
148
|
+
if (group=='page' or group in _EDITORS):return [name for name,(_,_,child) in targets.items() if child is item]
|
|
149
149
|
return [name for name,(owner,other,_) in targets.items()
|
|
150
150
|
if owner is parent and other is not None and part is not None and other.name==part.name]
|
|
151
151
|
|
|
152
152
|
def command(self, action, value=None, *, revision=None, missing='error'):
|
|
153
153
|
"""Compile a command atomically; a stale revision or failed build changes nothing.
|
|
154
154
|
|
|
155
|
-
Actions: gesture (figure-space move/uniform scale), edit (placement/page/labels/styles), reset, load
|
|
155
|
+
Actions: gesture (figure-space move/uniform scale), edit (placement/page/labels/styles/cameras), reset, load
|
|
156
156
|
(override JSON), undo, redo and refresh (current source; clears history).
|
|
157
157
|
Refresh may explicitly drop removed targets with missing='drop'.
|
|
158
158
|
"""
|
|
@@ -166,8 +166,8 @@ class LayoutEditor:
|
|
|
166
166
|
candidate=copy.deepcopy(self._value)
|
|
167
167
|
if action=='edit':
|
|
168
168
|
if (not isinstance(value,dict) or 'path' not in value or
|
|
169
|
-
not set(value)<={'path','placement','page'
|
|
170
|
-
raise ValueError('edit needs a path and placement/page/labels/styles fields')
|
|
169
|
+
not set(value)<={'path','placement','page',*_EDITORS} or len(value)<2):
|
|
170
|
+
raise ValueError('edit needs a path and placement/page/labels/styles/cameras fields')
|
|
171
171
|
path=value['path']
|
|
172
172
|
if not isinstance(path,str):raise ValueError('edit path must be a string')
|
|
173
173
|
for group,fields in value.items():
|
|
@@ -181,7 +181,7 @@ class LayoutEditor:
|
|
|
181
181
|
else: destination.update(fields)
|
|
182
182
|
elif action=='reset':
|
|
183
183
|
if not isinstance(value,str) or value not in _targets(self._recipe):raise ValueError('unknown reset target')
|
|
184
|
-
for group in ('placement','page'
|
|
184
|
+
for group in ('placement','page',*_EDITORS):
|
|
185
185
|
for alias in self._aliases(value,group):
|
|
186
186
|
entry=candidate['targets'].get(alias,{})
|
|
187
187
|
entry.pop(group,None)
|