inklet 4.0.0.dev11__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.
Files changed (1002) hide show
  1. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/.github/workflows/publish.yml +5 -5
  2. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/CHANGELOG.md +31 -0
  3. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/PKG-INFO +5 -6
  4. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/README.md +4 -5
  5. inklet-4.0.0.dev13/docs/assets/guides/editor-studio.png +0 -0
  6. inklet-4.0.0.dev13/docs/assets/guides/layout-editor-camera.png +0 -0
  7. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/compatibility.md +16 -2
  8. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/development-preview.md +40 -7
  9. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/layout-editor.md +89 -14
  10. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/layout-overrides.md +17 -5
  11. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/release-checks.md +4 -3
  12. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/roadmap.md +5 -1
  13. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/pyproject.toml +1 -1
  14. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/__init__.py +1 -1
  15. inklet-4.0.0.dev13/src/inklet/document/camera_overrides.py +53 -0
  16. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/layout_overrides.py +16 -12
  17. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/layout_editor/__init__.py +11 -9
  18. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/layout_editor/gestures.js +3 -3
  19. inklet-4.0.0.dev13/src/inklet/experimental/layout_editor/page.html +97 -0
  20. inklet-4.0.0.dev13/src/inklet/experimental/layout_editor/workspace.css +156 -0
  21. inklet-4.0.0.dev13/src/inklet/experimental/layout_editor/workspace.js +71 -0
  22. inklet-4.0.0.dev13/tests/test_camera_overrides.py +99 -0
  23. inklet-4.0.0.dev13/tests/test_editor_workspace.py +48 -0
  24. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout_gestures.py +3 -3
  25. inklet-4.0.0.dev13/tests/test_publish_workflow.py +39 -0
  26. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/check_wheel.py +8 -1
  27. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_gallery.json +3 -3
  28. inklet-4.0.0.dev11/src/inklet/experimental/layout_editor/page.html +0 -80
  29. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/.gitattributes +0 -0
  30. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/.github/workflows/checks.yml +0 -0
  31. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/.gitignore +0 -0
  32. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/.readthedocs.yaml +0 -0
  33. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/CONTRACT.md +0 -0
  34. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/CONTRIBUTING.md +0 -0
  35. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/LICENSE +0 -0
  36. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/THIRD_PARTY_NOTICES.md +0 -0
  37. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/api.md +0 -0
  38. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-icon.svg +0 -0
  39. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-logo-dark.svg +0 -0
  40. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-logo-mono.svg +0 -0
  41. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-logo.svg +0 -0
  42. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/brand/inklet-wordmark.svg +0 -0
  43. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/examples/quickstart.pdf +0 -0
  44. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/examples/quickstart.png +0 -0
  45. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/examples/quickstart.svg +0 -0
  46. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/axes-and-scales-1.png +0 -0
  47. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/calibrated-volumes-3.png +0 -0
  48. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/channels-and-contours-1.png +0 -0
  49. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/composition-recipes-narrow.png +0 -0
  50. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/composition-recipes.html +0 -0
  51. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/composition-recipes.png +0 -0
  52. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-anchor.png +0 -0
  53. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-annotation.png +0 -0
  54. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
  55. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-branch.png +0 -0
  56. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-broken-axis.png +0 -0
  57. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-callout.png +0 -0
  58. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-clipping.png +0 -0
  59. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-creases.png +0 -0
  60. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-custom-key.png +0 -0
  61. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-cutout.png +0 -0
  62. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-dates.png +0 -0
  63. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-dense.png +0 -0
  64. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-elbows.png +0 -0
  65. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
  66. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-facets.png +0 -0
  67. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-fit-graph.png +0 -0
  68. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-flow-width.png +0 -0
  69. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-formula.png +0 -0
  70. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-graph.png +0 -0
  71. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-halo.png +0 -0
  72. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-heatmap.png +0 -0
  73. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-hole.png +0 -0
  74. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-inline-type.png +0 -0
  75. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-inset.png +0 -0
  76. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-labels.png +0 -0
  77. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-layers.png +0 -0
  78. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-letters.png +0 -0
  79. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-list.png +0 -0
  80. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-matrix.png +0 -0
  81. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-page-grid.png +0 -0
  82. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-polar.png +0 -0
  83. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-protein.png +0 -0
  84. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-routes.png +0 -0
  85. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
  86. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-scene.png +0 -0
  87. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-series-key.png +0 -0
  88. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-span.png +0 -0
  89. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
  90. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-swarm.png +0 -0
  91. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-text-path.png +0 -0
  92. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-toon.png +0 -0
  93. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-twin-axis.png +0 -0
  94. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
  95. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-violin.png +0 -0
  96. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
  97. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/data-1.png +0 -0
  98. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/data-3.png +0 -0
  99. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/dense-data-1.png +0 -0
  100. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/diagram-components-1.png +0 -0
  101. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/diagrams-1.png +0 -0
  102. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-3.png +0 -0
  103. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor-gestures.png +0 -0
  104. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor-labels.png +0 -0
  105. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor-styles.png +0 -0
  106. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-editor.png +0 -0
  107. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-restored.html +0 -0
  108. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-restored.png +0 -0
  109. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/layout-revised.png +0 -0
  110. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/oblique-sections-2.png +0 -0
  111. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plot-composition-narrow.png +0 -0
  112. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plot-composition.html +0 -0
  113. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plot-composition.png +0 -0
  114. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plot-quality-after.png +0 -0
  115. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plot-quality-before.png +0 -0
  116. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-band.png +0 -0
  117. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-bars.png +0 -0
  118. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-boxplot.png +0 -0
  119. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-errorbars.png +0 -0
  120. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-fill-between.png +0 -0
  121. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-fill.png +0 -0
  122. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-grouped-bars.png +0 -0
  123. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-hist.png +0 -0
  124. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-horizontal-bars.png +0 -0
  125. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-line-errors.png +0 -0
  126. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-line.png +0 -0
  127. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-markers.png +0 -0
  128. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-matrix.png +0 -0
  129. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-polar-curve.png +0 -0
  130. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-rose.png +0 -0
  131. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-scatter.png +0 -0
  132. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-series.png +0 -0
  133. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-stackarea.png +0 -0
  134. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-stacked-bars.png +0 -0
  135. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-step.png +0 -0
  136. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-swarm.png +0 -0
  137. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plots-violin.png +0 -0
  138. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plotting-1.png +0 -0
  139. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/plotting-2.png +0 -0
  140. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-1.png +0 -0
  141. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-2.png +0 -0
  142. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-3.png +0 -0
  143. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/publication-plots-4.png +0 -0
  144. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/slabs-and-regions-1.png +0 -0
  145. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/three-images-1.png +0 -0
  146. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/guides/three-images-2.png +0 -0
  147. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/biology.json +0 -0
  148. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-after.json +0 -0
  149. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-before.json +0 -0
  150. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-caption.tex +0 -0
  151. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-lines-after.json +0 -0
  152. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/clipping-lines-before.json +0 -0
  153. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/comparison.json +0 -0
  154. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-marker-shapes-caption.tex +0 -0
  155. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-marker-shapes.html +0 -0
  156. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-markers-display.json +0 -0
  157. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-markers-hardware.json +0 -0
  158. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-scene-viewer.html +0 -0
  159. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-viewer-display.json +0 -0
  160. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-viewer-export.json +0 -0
  161. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compiled-viewer-study.json +0 -0
  162. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compositing-after.json +0 -0
  163. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compositing-before.json +0 -0
  164. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/compositing-caption.tex +0 -0
  165. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/dense-scatter-caption.tex +0 -0
  166. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/diagram-after.json +0 -0
  167. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/diagram-before.json +0 -0
  168. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
  169. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/engine-after.json +0 -0
  170. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/engine-before.json +0 -0
  171. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/engine-review-caption.tex +0 -0
  172. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/fluorescence-biology.json +0 -0
  173. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/general-plots-caption.tex +0 -0
  174. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/general-plots.json +0 -0
  175. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/hatch-after.json +0 -0
  176. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/hatch-before.json +0 -0
  177. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/hatch-caption.tex +0 -0
  178. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
  179. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/label-intensities-native.csv +0 -0
  180. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/label-intensities.json +0 -0
  181. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/lines-after.json +0 -0
  182. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/lines-before.json +0 -0
  183. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-batches.json +0 -0
  184. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-after.json +0 -0
  185. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-before.json +0 -0
  186. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-browser-after.json +0 -0
  187. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/marker-index-browser-before.json +0 -0
  188. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/oblique-biology.json +0 -0
  189. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
  190. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/real-biology.json +0 -0
  191. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/render-scene-caption.tex +0 -0
  192. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/revision.json +0 -0
  193. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/scenes-after.json +0 -0
  194. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/scenes-before.json +0 -0
  195. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/slab-biology.json +0 -0
  196. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/study.json +0 -0
  197. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-after.json +0 -0
  198. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-before.json +0 -0
  199. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-gpu-after.json +0 -0
  200. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-culling-gpu-before.json +0 -0
  201. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-after.json +0 -0
  202. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-before.json +0 -0
  203. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-display.json +0 -0
  204. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-redraw-profile.json +0 -0
  205. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-window-after.json +0 -0
  206. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-window-before.json +0 -0
  207. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/research-preview/viewer-window-display.json +0 -0
  208. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/after.json +0 -0
  209. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/before.json +0 -0
  210. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/browser-quality.json +0 -0
  211. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/browser-scatter.html +0 -0
  212. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/browser-scatter.png +0 -0
  213. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/browser-study.json +0 -0
  214. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
  215. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines-masked.png +0 -0
  216. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines.html +0 -0
  217. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/contours-streamlines.png +0 -0
  218. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/engineering-report-170mm.png +0 -0
  219. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/engineering-report.html +0 -0
  220. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/engineering-report.png +0 -0
  221. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/faceted-operations.html +0 -0
  222. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/faceted-operations.png +0 -0
  223. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/linked-dashboard.html +0 -0
  224. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/linked-dashboard.png +0 -0
  225. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/linked-selection.html +0 -0
  226. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/linked-selection.png +0 -0
  227. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/mesh-fields-170mm.png +0 -0
  228. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/mesh-fields.html +0 -0
  229. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/mesh-fields.png +0 -0
  230. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/region-shapes.html +0 -0
  231. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/region-shapes.png +0 -0
  232. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/regional-analysis.html +0 -0
  233. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/regional-analysis.png +0 -0
  234. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/regional-report-160mm.png +0 -0
  235. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/regional-report.html +0 -0
  236. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/regional-report.png +0 -0
  237. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/scientific-report-170mm.png +0 -0
  238. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/scientific-report.html +0 -0
  239. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/scientific-report.png +0 -0
  240. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/statistical-views.html +0 -0
  241. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/statistical-views.png +0 -0
  242. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/table-inputs.html +0 -0
  243. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/table-inputs.png +0 -0
  244. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/time-series.html +0 -0
  245. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/time-series.png +0 -0
  246. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/transport-map.html +0 -0
  247. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/transport-map.png +0 -0
  248. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/visual-overrides.png +0 -0
  249. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-2019.html +0 -0
  250. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-2019.json +0 -0
  251. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-2019.png +0 -0
  252. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-revisions.html +0 -0
  253. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/world-population-revisions.png +0 -0
  254. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/world-population.html +0 -0
  255. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/assets/v4/world-population.png +0 -0
  256. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/axes-and-scales.md +0 -0
  257. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/bars-and-areas.md +0 -0
  258. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/biology-panels.md +0 -0
  259. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/blender-scenes.md +0 -0
  260. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/brand.md +0 -0
  261. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/browser-rendering.md +0 -0
  262. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/calibrated-volumes.md +0 -0
  263. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/channels-and-contours.md +0 -0
  264. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/cli.md +0 -0
  265. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/clipping.md +0 -0
  266. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/compiled-scenes.md +0 -0
  267. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/compiled-viewer.md +0 -0
  268. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/complex-scene.md +0 -0
  269. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/compositing.md +0 -0
  270. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/composition-recipes.md +0 -0
  271. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/concepts.md +0 -0
  272. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/contours-streamlines.md +0 -0
  273. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/cookbook.md +0 -0
  274. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/data-revisions.md +0 -0
  275. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/data.md +0 -0
  276. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/dense-data.md +0 -0
  277. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/design/browser-backends.md +0 -0
  278. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/design/page_grid.md +0 -0
  279. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/design/v2.md +0 -0
  280. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/design/v4.md +0 -0
  281. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/diagram-components.md +0 -0
  282. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/diagram-engine.md +0 -0
  283. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/diagrams.md +0 -0
  284. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/distributions.md +0 -0
  285. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/engineering-report.md +0 -0
  286. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/example-library.md +0 -0
  287. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/examples.md +0 -0
  288. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/export-review.md +0 -0
  289. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/fluorescence-biology.md +0 -0
  290. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/general-plots.md +0 -0
  291. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/geographic-features.md +0 -0
  292. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/hatching.md +0 -0
  293. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/index.md +0 -0
  294. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/installation.md +0 -0
  295. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/interactive-documents.md +0 -0
  296. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/javascripts/inklet.js +0 -0
  297. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/label-intensities.md +0 -0
  298. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/label-measurements.md +0 -0
  299. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/layout.md +0 -0
  300. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/lines-and-points.md +0 -0
  301. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/linked-facets.md +0 -0
  302. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/linked-maps.md +0 -0
  303. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/linked-plots.md +0 -0
  304. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/marker-batches.md +0 -0
  305. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/marker-culling.md +0 -0
  306. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/matrices.md +0 -0
  307. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/mesh-fields.md +0 -0
  308. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/microscopy-tiff.md +0 -0
  309. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/migration.md +0 -0
  310. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/oblique-biology.md +0 -0
  311. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/oblique-sections.md +0 -0
  312. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/plot-quality.md +0 -0
  313. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/plot-recipes.md +0 -0
  314. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/plot-types.md +0 -0
  315. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/plotting-engine.md +0 -0
  316. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/plotting.md +0 -0
  317. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/polar-plots.md +0 -0
  318. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/presets.md +0 -0
  319. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/publication-plots.md +0 -0
  320. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/quickstart.md +0 -0
  321. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/real-biology.md +0 -0
  322. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/architecture-sketch.md +0 -0
  323. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/architecture.md +0 -0
  324. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/attractor.md +0 -0
  325. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/helix.md +0 -0
  326. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/interference.md +0 -0
  327. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/lattice.md +0 -0
  328. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/photonics.md +0 -0
  329. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/recipes/wave-packets.md +0 -0
  330. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/regional-report.md +0 -0
  331. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/render-jobs.md +0 -0
  332. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/rendering-engine.md +0 -0
  333. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/research-preview.md +0 -0
  334. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/research-revision.md +0 -0
  335. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/research-study.md +0 -0
  336. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/scene-annotations.md +0 -0
  337. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/scene-paths.md +0 -0
  338. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/scene-templates.md +0 -0
  339. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/scientific-report.md +0 -0
  340. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/showcase.md +0 -0
  341. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/slab-biology.md +0 -0
  342. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/slabs-and-regions.md +0 -0
  343. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/statistical-views.md +0 -0
  344. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/stress20.md +0 -0
  345. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/stylesheets/code.css +0 -0
  346. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/stylesheets/inklet.css +0 -0
  347. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/table-inputs.md +0 -0
  348. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/three-images.md +0 -0
  349. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/time-series.md +0 -0
  350. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/troubleshooting.md +0 -0
  351. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/uncertainty.md +0 -0
  352. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/v2.5.md +0 -0
  353. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/v2.md +0 -0
  354. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/v3.md +0 -0
  355. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/v4-foundations.md +0 -0
  356. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/visual-editing.md +0 -0
  357. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/docs/world-map.md +0 -0
  358. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/biology/README.md +0 -0
  359. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/biology/cells3d.lock.json +0 -0
  360. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/biology/data.py +0 -0
  361. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/biology/fluorescence.py +0 -0
  362. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/biology/organelle.lock.json +0 -0
  363. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/biology/requirements.txt +0 -0
  364. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/biology_panels.py +0 -0
  365. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/blender/complex_lab_scene.py +0 -0
  366. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/blender/lab_scene.py +0 -0
  367. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/blender/occlusion_scene.py +0 -0
  368. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/blender/organelle_scene.py +0 -0
  369. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/blender/research_lab_views.py +0 -0
  370. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/broken_axis.py +0 -0
  371. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/clipping_review.py +0 -0
  372. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/compiled_marker_shapes.py +0 -0
  373. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/compiled_scene_viewer.py +0 -0
  374. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/compositing_review.py +0 -0
  375. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/composition_recipes.py +0 -0
  376. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/data/general-plots/benchmark.csv +0 -0
  377. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/data/general-plots/learning.csv +0 -0
  378. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/data/general-plots/revenue.csv +0 -0
  379. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/data/general-plots/sensor.csv +0 -0
  380. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/dense_scatter_review.py +0 -0
  381. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/diagram_review.py +0 -0
  382. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/engine_review.py +0 -0
  383. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/feature_flow.py +0 -0
  384. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/fluorescence_biology.py +0 -0
  385. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/gallery.py +0 -0
  386. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/general_plots.py +0 -0
  387. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/graph.py +0 -0
  388. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/hatch_review.py +0 -0
  389. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/hello_figure.py +0 -0
  390. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/label_intensities.py +0 -0
  391. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/layout_editor.py +0 -0
  392. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/oblique_biology.py +0 -0
  393. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/panels.py +0 -0
  394. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/plot_composition.py +0 -0
  395. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/plot_engine_review.py +0 -0
  396. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/plot_quality_review.py +0 -0
  397. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/polar.py +0 -0
  398. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/preset_formats.py +0 -0
  399. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/presets.py +0 -0
  400. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/real_biology.py +0 -0
  401. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/render_scene_review.py +0 -0
  402. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/render_smoke.py +0 -0
  403. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/research_figure_planner.py +0 -0
  404. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/research_planner_study.py +0 -0
  405. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/research_revision.py +0 -0
  406. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/showcase/README.md +0 -0
  407. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/showcase/assets.lock.json +0 -0
  408. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/showcase/blender_scenes.py +0 -0
  409. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/showcase/figures.py +0 -0
  410. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/slab_biology.py +0 -0
  411. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/state_machine.py +0 -0
  412. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/stress20.py +0 -0
  413. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v25_document.py +0 -0
  414. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v2_cases.py +0 -0
  415. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v2_document.py +0 -0
  416. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v3_complex_scene.py +0 -0
  417. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v3_render_jobs.py +0 -0
  418. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v3_rendering.py +0 -0
  419. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v3_scene_annotations.py +0 -0
  420. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v3_scene_passes.py +0 -0
  421. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v3_scene_paths.py +0 -0
  422. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v3_scene_templates.py +0 -0
  423. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/README.md +0 -0
  424. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/browser_scatter.py +0 -0
  425. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/contours_streamlines.py +0 -0
  426. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/data/world-countries.geojson +0 -0
  427. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/data/world-map-source.json +0 -0
  428. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/data/world-population.csv +0 -0
  429. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/engineering_report.py +0 -0
  430. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/faceted_operations.py +0 -0
  431. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/fixtures/assembly.json +0 -0
  432. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/fixtures/manifest.json +0 -0
  433. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/fixtures/measurement.json +0 -0
  434. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/fixtures/region-shapes.geojson +0 -0
  435. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/fixtures/regions.csv +0 -0
  436. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/fixtures/regions.geojson +0 -0
  437. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/fixtures/transport.geojson +0 -0
  438. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/linked_dashboard.py +0 -0
  439. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/linked_selection.html +0 -0
  440. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/linked_selection.py +0 -0
  441. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/mesh_fields.py +0 -0
  442. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/region_shapes.py +0 -0
  443. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/regional_analysis.py +0 -0
  444. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/regional_report.py +0 -0
  445. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/scientific_report.py +0 -0
  446. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/statistical_views.py +0 -0
  447. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/table_inputs.py +0 -0
  448. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/time_series.py +0 -0
  449. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/transport_map.py +0 -0
  450. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/examples/v4/world_population.py +0 -0
  451. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/annot.py +0 -0
  452. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/bio3d.py +0 -0
  453. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/cartoon.py +0 -0
  454. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/chem_data.py +0 -0
  455. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/chem_fingerprints.py +0 -0
  456. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/data/1m17-kinase.pdb +0 -0
  457. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/data/README.md +0 -0
  458. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/drug_discovery.py +0 -0
  459. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/mouse_brain_data.py +0 -0
  460. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/neural_activity.py +0 -0
  461. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/pdbfile.py +0 -0
  462. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/showcase_part.py +0 -0
  463. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/showcase_process.py +0 -0
  464. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/showcase_season.py +0 -0
  465. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/structure.py +0 -0
  466. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/structure_data.py +0 -0
  467. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/target.py +0 -0
  468. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/figures/trial.py +0 -0
  469. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/README.md +0 -0
  470. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/biology-panels.png +0 -0
  471. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/chem_fingerprints.png +0 -0
  472. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/clipping-review.png +0 -0
  473. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/compiled-marker-shapes.png +0 -0
  474. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/compiled-scene-viewer.png +0 -0
  475. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/compiled-viewer-culling.png +0 -0
  476. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/compiled-viewer-deep-zoom.png +0 -0
  477. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/compositing-pdf-after.png +0 -0
  478. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/compositing-pdf-before.png +0 -0
  479. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/compositing-review.png +0 -0
  480. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/dense-scatter-review.png +0 -0
  481. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/diagram-labels-after.png +0 -0
  482. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/diagram-labels-before.png +0 -0
  483. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/diagram-review.png +0 -0
  484. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/engine-review.png +0 -0
  485. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/engine-transparency-after.png +0 -0
  486. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/engine-transparency-before.png +0 -0
  487. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/flow.png +0 -0
  488. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/fluorescence-biology.png +0 -0
  489. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/general-plots-before.png +0 -0
  490. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/general-plots.png +0 -0
  491. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/hatch-pdf-after.png +0 -0
  492. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/hatch-pdf-before.png +0 -0
  493. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/hatch-review.png +0 -0
  494. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/hatch-svg-before.png +0 -0
  495. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/label-intensities.png +0 -0
  496. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/oblique-biology.png +0 -0
  497. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/part.png +0 -0
  498. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/plot-axis-after.png +0 -0
  499. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/plot-axis-before.png +0 -0
  500. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/plot-engine-review.png +0 -0
  501. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/plots.png +0 -0
  502. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/polar.png +0 -0
  503. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/preset-formats.png +0 -0
  504. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/presets.png +0 -0
  505. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/process.png +0 -0
  506. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/real-biology.png +0 -0
  507. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/render-scene-data.png +0 -0
  508. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/render-scene-initial.png +0 -0
  509. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/render-scene-review.png +0 -0
  510. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/research-crossing-revision.png +0 -0
  511. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/research-figure-planner.png +0 -0
  512. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/research-planner-study.png +0 -0
  513. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/research-revision.png +0 -0
  514. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/season.png +0 -0
  515. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-architecture-sketch.png +0 -0
  516. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-architecture.png +0 -0
  517. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-attractor.png +0 -0
  518. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-helix.png +0 -0
  519. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-interference.png +0 -0
  520. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-lattice.png +0 -0
  521. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-photonics.png +0 -0
  522. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/showcase-wave-packets.png +0 -0
  523. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/slab-biology.png +0 -0
  524. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/stress20.png +0 -0
  525. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/structure.png +0 -0
  526. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/v3-complex-scene.png +0 -0
  527. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/v3-render-jobs.png +0 -0
  528. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/v3-rendering.png +0 -0
  529. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/v3-scene-annotations.png +0 -0
  530. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/v3-scene-passes.png +0 -0
  531. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/v3-scene-paths.png +0 -0
  532. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/gallery/v3-scene-templates.png +0 -0
  533. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/mkdocs.yml +0 -0
  534. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/requirements-ci.txt +0 -0
  535. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/requirements-docs.txt +0 -0
  536. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/requirements-tables.txt +0 -0
  537. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/scripts/bench_svg.py +0 -0
  538. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/scripts/rasterise.sh +0 -0
  539. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/scripts/sanity_typeset.py +0 -0
  540. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/__main__.py +0 -0
  541. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/__init__.py +0 -0
  542. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/asset.py +0 -0
  543. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/cache.py +0 -0
  544. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/cutout.py +0 -0
  545. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/deps.py +0 -0
  546. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/harmonise.py +0 -0
  547. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/lineart.py +0 -0
  548. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/mask.py +0 -0
  549. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/provenance.py +0 -0
  550. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/raster.py +0 -0
  551. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/sidecar.py +0 -0
  552. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/assets/silhouette.py +0 -0
  553. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/cli.py +0 -0
  554. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/components.py +0 -0
  555. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/__init__.py +0 -0
  556. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/batch.py +0 -0
  557. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/diagram.py +0 -0
  558. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/envelope.py +0 -0
  559. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/geom.py +0 -0
  560. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/prims.py +0 -0
  561. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/style.py +0 -0
  562. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/trace.py +0 -0
  563. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/core/units.py +0 -0
  564. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/__init__.py +0 -0
  565. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/abut.py +0 -0
  566. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/break_rules.py +0 -0
  567. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/color.py +0 -0
  568. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/cross.py +0 -0
  569. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/image.py +0 -0
  570. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/key_rules.py +0 -0
  571. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/link_rules.py +0 -0
  572. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/path_rules.py +0 -0
  573. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/plot_rules.py +0 -0
  574. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/report.py +0 -0
  575. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/rules.py +0 -0
  576. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/diagnostics/three_rules.py +0 -0
  577. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/__init__.py +0 -0
  578. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/compiler.py +0 -0
  579. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/composition.py +0 -0
  580. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/data.py +0 -0
  581. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/data_io.py +0 -0
  582. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/label_overrides.py +0 -0
  583. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/module.py +0 -0
  584. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/presets.py +0 -0
  585. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/publication.py +0 -0
  586. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/spec.py +0 -0
  587. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/document/style_overrides.py +0 -0
  588. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/__init__.py +0 -0
  589. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/annotate.py +0 -0
  590. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/bezier_clip.py +0 -0
  591. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/clip.py +0 -0
  592. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/coords.py +0 -0
  593. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/path.py +0 -0
  594. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/place.py +0 -0
  595. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/draw/shapes.py +0 -0
  596. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/__init__.py +0 -0
  597. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/_table_adapters.py +0 -0
  598. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/__init__.py +0 -0
  599. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/compiled.js +0 -0
  600. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/compiled.py +0 -0
  601. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/drawings.py +0 -0
  602. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/editor.html +0 -0
  603. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/editor.js +0 -0
  604. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/fields.py +0 -0
  605. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/geography.py +0 -0
  606. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/grid.py +0 -0
  607. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/images.py +0 -0
  608. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/overrides.py +0 -0
  609. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/page.html +0 -0
  610. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/regions.py +0 -0
  611. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/runtime.js +0 -0
  612. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/series.py +0 -0
  613. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/browser/timeaxis.py +0 -0
  614. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/channels.py +0 -0
  615. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/contours.py +0 -0
  616. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/engineering.py +0 -0
  617. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/fields.py +0 -0
  618. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/figure_planner.py +0 -0
  619. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/grid.py +0 -0
  620. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/measurement.py +0 -0
  621. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/measurements.py +0 -0
  622. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/planner_geometry.py +0 -0
  623. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/regions.py +0 -0
  624. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/__init__.py +0 -0
  625. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/controls.js +0 -0
  626. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/page.html +0 -0
  627. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/runtime.js +0 -0
  628. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/scene_viewer/spatial.js +0 -0
  629. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/sections.py +0 -0
  630. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/selection.py +0 -0
  631. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/slabs.py +0 -0
  632. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/temporal.py +0 -0
  633. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/tiff.py +0 -0
  634. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/experimental/volume.py +0 -0
  635. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/figure.py +0 -0
  636. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/__init__.py +0 -0
  637. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/fit.py +0 -0
  638. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/flow.py +0 -0
  639. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/graph.py +0 -0
  640. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/graph_force.py +0 -0
  641. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/graph_layered.py +0 -0
  642. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/graph_tree.py +0 -0
  643. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/labels.py +0 -0
  644. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/layout/sankey.py +0 -0
  645. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/links/__init__.py +0 -0
  646. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/links/curves.py +0 -0
  647. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/links/link.py +0 -0
  648. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/__init__.py +0 -0
  649. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/axis.py +0 -0
  650. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/breaks.py +0 -0
  651. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/categories.py +0 -0
  652. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/facets.py +0 -0
  653. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/inset.py +0 -0
  654. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/key.py +0 -0
  655. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/marks.py +0 -0
  656. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/notes.py +0 -0
  657. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/panel.py +0 -0
  658. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/png.py +0 -0
  659. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/polar.py +0 -0
  660. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/ramp.py +0 -0
  661. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/raster.py +0 -0
  662. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/ribbon.py +0 -0
  663. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/scale.py +0 -0
  664. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/scatter_batch.py +0 -0
  665. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/scatter_raster.py +0 -0
  666. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/series.py +0 -0
  667. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/simplify.py +0 -0
  668. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/plot/timescale.py +0 -0
  669. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/__init__.py +0 -0
  670. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/analysis.py +0 -0
  671. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/bounds.py +0 -0
  672. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/brushes.py +0 -0
  673. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/bundle.py +0 -0
  674. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/composite.py +0 -0
  675. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/fontembed.py +0 -0
  676. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/glyphs.py +0 -0
  677. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/hatching.py +0 -0
  678. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/outline.py +0 -0
  679. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/paint.py +0 -0
  680. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/pathdata.py +0 -0
  681. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/pdf.py +0 -0
  682. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/pdftext.py +0 -0
  683. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/preview.py +0 -0
  684. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/raster.py +0 -0
  685. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/resources.py +0 -0
  686. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/review.py +0 -0
  687. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/revision.py +0 -0
  688. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/scene.py +0 -0
  689. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/render/svg.py +0 -0
  690. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/themes/__init__.py +0 -0
  691. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/themes/color.py +0 -0
  692. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/themes/palettes.py +0 -0
  693. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/themes/theme.py +0 -0
  694. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/__init__.py +0 -0
  695. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/api.py +0 -0
  696. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/backend.py +0 -0
  697. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/__init__.py +0 -0
  698. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/device_worker.py +0 -0
  699. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/discover.py +0 -0
  700. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/lineart.py +0 -0
  701. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/options.py +0 -0
  702. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/scene_worker.py +0 -0
  703. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/script.py +0 -0
  704. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/svgread.py +0 -0
  705. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/template_worker.py +0 -0
  706. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender/tracing.py +0 -0
  707. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/blender_backend.py +0 -0
  708. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/camera.py +0 -0
  709. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/deps.py +0 -0
  710. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/depth.py +0 -0
  711. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/devices.py +0 -0
  712. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/drill.py +0 -0
  713. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/edges.py +0 -0
  714. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/hlr.py +0 -0
  715. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/linalg.py +0 -0
  716. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/mesh.py +0 -0
  717. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/occlude.py +0 -0
  718. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/order.py +0 -0
  719. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/parse.py +0 -0
  720. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/place.py +0 -0
  721. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/protein.py +0 -0
  722. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/quality.py +0 -0
  723. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/render_jobs.py +0 -0
  724. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/scene_annotations.py +0 -0
  725. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/scene_pass.py +0 -0
  726. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/scene_projection.py +0 -0
  727. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/scenes.py +0 -0
  728. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/shade.py +0 -0
  729. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/solids.py +0 -0
  730. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/templates.json +0 -0
  731. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/three/templates.py +0 -0
  732. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/typeset/__init__.py +0 -0
  733. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/typeset/fonts.py +0 -0
  734. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/typeset/markup.py +0 -0
  735. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/typeset/onpath.py +0 -0
  736. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/typeset/outline.py +0 -0
  737. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/src/inklet/typeset/shaping.py +0 -0
  738. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/assets/mouse.inklet.json +0 -0
  739. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/assets/mouse.png +0 -0
  740. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/dense_graph.py +0 -0
  741. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/draw_probe.py +0 -0
  742. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/assets/sem.png +0 -0
  743. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/assets/tem.png +0 -0
  744. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/cell.py +0 -0
  745. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/common.py +0 -0
  746. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/data.py +0 -0
  747. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/imaging.py +0 -0
  748. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/kinetics.py +0 -0
  749. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/micrograph.py +0 -0
  750. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro/system.py +0 -0
  751. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/electro_figure.py +0 -0
  752. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/fidelity.py +0 -0
  753. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/flow.py +0 -0
  754. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/hard_figure.py +0 -0
  755. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/label_storm.py +0 -0
  756. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/mega_figure.py +0 -0
  757. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/meshes/README.md +0 -0
  758. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/meshes/brain-lh.obj +0 -0
  759. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/meshes/spot.obj +0 -0
  760. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/panels/apparatus.py +0 -0
  761. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/panels/graphs.py +0 -0
  762. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/panels/relations.py +0 -0
  763. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/panels/responses.py +0 -0
  764. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/panels/sections.py +0 -0
  765. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/probes.py +0 -0
  766. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/stress/three_figure.py +0 -0
  767. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_alignment_contract.py +0 -0
  768. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_annotate.py +0 -0
  769. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_annotate_letters.py +0 -0
  770. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_assets.py +0 -0
  771. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_assets_provenance.py +0 -0
  772. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_biology_source.py +0 -0
  773. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_blend_scene.py +0 -0
  774. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_compiled.py +0 -0
  775. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_facets.py +0 -0
  776. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_figure.py +0 -0
  777. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_geography.py +0 -0
  778. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_overrides.py +0 -0
  779. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_regions.py +0 -0
  780. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_revision.py +0 -0
  781. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_scatter.py +0 -0
  782. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_series.py +0 -0
  783. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_statistics.py +0 -0
  784. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_switching.py +0 -0
  785. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_browser_time.py +0 -0
  786. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_categories.py +0 -0
  787. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_channels_contours.py +0 -0
  788. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_chem_figure.py +0 -0
  789. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_cli.py +0 -0
  790. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_clip_engine.py +0 -0
  791. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_components.py +0 -0
  792. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_compositing_engine.py +0 -0
  793. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_composition_recipes.py +0 -0
  794. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_contrast_and_labels.py +0 -0
  795. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_cookbook.py +0 -0
  796. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_core.py +0 -0
  797. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_core_amendments.py +0 -0
  798. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_csv_input.py +0 -0
  799. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics.py +0 -0
  800. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_api.py +0 -0
  801. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_artwork.py +0 -0
  802. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_break_distorts.py +0 -0
  803. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_crossing.py +0 -0
  804. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_image_contrast.py +0 -0
  805. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_ink.py +0 -0
  806. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_keys.py +0 -0
  807. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_links.py +0 -0
  808. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_paths.py +0 -0
  809. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagnostics_plot_box.py +0 -0
  810. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_diagram_engine.py +0 -0
  811. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_docs.py +0 -0
  812. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_docs_site.py +0 -0
  813. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_document.py +0 -0
  814. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_document_data.py +0 -0
  815. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_document_v25.py +0 -0
  816. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_draw_clip.py +0 -0
  817. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_draw_path.py +0 -0
  818. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_draw_place.py +0 -0
  819. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_draw_shapes.py +0 -0
  820. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_engine_layout.py +0 -0
  821. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_engine_rendering.py +0 -0
  822. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_engine_scatter.py +0 -0
  823. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_engineering_report.py +0 -0
  824. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_export_bundle.py +0 -0
  825. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_figure.py +0 -0
  826. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_figure_planner.py +0 -0
  827. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_fit.py +0 -0
  828. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_grid_fields.py +0 -0
  829. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_guides.py +0 -0
  830. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_hatch_engine.py +0 -0
  831. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_label_measurements.py +0 -0
  832. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_label_overrides.py +0 -0
  833. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout.py +0 -0
  834. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout_editor.py +0 -0
  835. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout_graph.py +0 -0
  836. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout_graph_fit.py +0 -0
  837. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout_origin.py +0 -0
  838. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout_overrides.py +0 -0
  839. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_layout_sankey.py +0 -0
  840. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_links.py +0 -0
  841. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_links_avoid.py +0 -0
  842. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_links_shapes.py +0 -0
  843. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_marker_batches.py +0 -0
  844. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_mesh_fields.py +0 -0
  845. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_microscopy_tiff.py +0 -0
  846. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_neural_activity.py +0 -0
  847. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_output_contract.py +0 -0
  848. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_paint_program.py +0 -0
  849. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_place_labels.py +0 -0
  850. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_axis.py +0 -0
  851. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_broken_axis.py +0 -0
  852. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_clip.py +0 -0
  853. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_engine.py +0 -0
  854. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_facets.py +0 -0
  855. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_inset.py +0 -0
  856. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_key.py +0 -0
  857. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_labels.py +0 -0
  858. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_legend.py +0 -0
  859. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_marks.py +0 -0
  860. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_notes.py +0 -0
  861. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_polar.py +0 -0
  862. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_publication.py +0 -0
  863. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_quality_review.py +0 -0
  864. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_raster.py +0 -0
  865. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_recipes.py +0 -0
  866. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_ribbon.py +0 -0
  867. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_scale.py +0 -0
  868. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_swarm.py +0 -0
  869. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_plot_time.py +0 -0
  870. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_presets.py +0 -0
  871. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_publication_limits.py +0 -0
  872. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_regional_report.py +0 -0
  873. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_release_adversarial.py +0 -0
  874. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_devices.py +0 -0
  875. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_embed.py +0 -0
  876. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_glyphs.py +0 -0
  877. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_jobs.py +0 -0
  878. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_outline.py +0 -0
  879. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_pdf.py +0 -0
  880. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_pdf_text.py +0 -0
  881. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_quality.py +0 -0
  882. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_scene.py +0 -0
  883. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_style_fields.py +0 -0
  884. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_svg_perf.py +0 -0
  885. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_render_v3.py +0 -0
  886. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_review_v25.py +0 -0
  887. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_round4_plot.py +0 -0
  888. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_routing_avoid.py +0 -0
  889. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scatter_rendering.py +0 -0
  890. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scene_annotations.py +0 -0
  891. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scene_culling.py +0 -0
  892. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scene_pass.py +0 -0
  893. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scene_projection.py +0 -0
  894. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scene_templates.py +0 -0
  895. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scene_viewer.py +0 -0
  896. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_scientific_report.py +0 -0
  897. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_sections.py +0 -0
  898. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_shared_plot_margins.py +0 -0
  899. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_showcase_library.py +0 -0
  900. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_showcase_round3.py +0 -0
  901. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_slabs_regions.py +0 -0
  902. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_structure_figure.py +0 -0
  903. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_style_overrides.py +0 -0
  904. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_svg.py +0 -0
  905. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_table_adapters.py +0 -0
  906. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_target_pose.py +0 -0
  907. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_temporal_adapters.py +0 -0
  908. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_text_markup.py +0 -0
  909. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_text_on_path.py +0 -0
  910. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_theme_font_style.py +0 -0
  911. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_themes.py +0 -0
  912. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_anchor_pin.py +0 -0
  913. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_api.py +0 -0
  914. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_backend_blender.py +0 -0
  915. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_blender.py +0 -0
  916. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_depth_order.py +0 -0
  917. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_drill.py +0 -0
  918. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_hlr.py +0 -0
  919. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_mesh.py +0 -0
  920. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_order_vector.py +0 -0
  921. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_overlay.py +0 -0
  922. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_parse.py +0 -0
  923. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_patches.py +0 -0
  924. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_place.py +0 -0
  925. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_protein.py +0 -0
  926. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_ridges.py +0 -0
  927. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_sort.py +0 -0
  928. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_sort_budget.py +0 -0
  929. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_three_view.py +0 -0
  930. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_typeset.py +0 -0
  931. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_v4_selection.py +0 -0
  932. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_volume.py +0 -0
  933. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_watch_review.py +0 -0
  934. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/test_world_map_example.py +0 -0
  935. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/README.md +0 -0
  936. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/categories-pdf.png +0 -0
  937. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/categories-svg.png +0 -0
  938. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/components-pdf.png +0 -0
  939. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/components-svg.png +0 -0
  940. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/dense-pdf.png +0 -0
  941. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/dense-svg.png +0 -0
  942. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/fonts.json +0 -0
  943. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/inset-pdf.png +0 -0
  944. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/inset-svg.png +0 -0
  945. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/markers-pdf.png +0 -0
  946. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/markers-svg.png +0 -0
  947. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/renderers.json +0 -0
  948. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/type-opacity-pdf.png +0 -0
  949. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/type-opacity-svg.png +0 -0
  950. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
  951. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
  952. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-dense-pdf.png +0 -0
  953. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-dense-svg.png +0 -0
  954. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
  955. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
  956. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
  957. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
  958. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
  959. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
  960. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
  961. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v2-workflow-svg.png +0 -0
  962. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v25-document-pdf.png +0 -0
  963. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/baseline/v25-document-svg.png +0 -0
  964. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/fixtures.py +0 -0
  965. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tests/visual/v2-budgets.json +0 -0
  966. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_batches.py +0 -0
  967. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_clipping.py +0 -0
  968. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_diagrams.py +0 -0
  969. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_engine.py +0 -0
  970. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_lines.py +0 -0
  971. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_marker_index.mjs +0 -0
  972. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_scene_culling.js +0 -0
  973. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_scene_gpu.js +0 -0
  974. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_scene_redraw.js +0 -0
  975. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_scene_viewer.js +0 -0
  976. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_scene_zoom.js +0 -0
  977. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_v2.py +0 -0
  978. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/benchmark_v4.py +0 -0
  979. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/browser_study.js +0 -0
  980. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/check_render_wheel.py +0 -0
  981. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/dock_ligand.py +0 -0
  982. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_previews.json +0 -0
  983. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_previews.py +0 -0
  984. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_site.py +0 -0
  985. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_theme/404.html +0 -0
  986. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_theme/card.html +0 -0
  987. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_theme/gallery.html +0 -0
  988. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_theme/home.html +0 -0
  989. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_theme/main.html +0 -0
  990. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/docs_theme/plot-gallery.html +0 -0
  991. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/gen_api.py +0 -0
  992. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/make_culling_review.py +0 -0
  993. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/plot_catalog.json +0 -0
  994. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/prepare_world_map.py +0 -0
  995. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/preset_gallery.py +0 -0
  996. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/profile_scene_redraw.js +0 -0
  997. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/showcase_gallery.py +0 -0
  998. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/stress20.py +0 -0
  999. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/strip_pdb.py +0 -0
  1000. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/v3_showcase.py +0 -0
  1001. {inklet-4.0.0.dev11 → inklet-4.0.0.dev13}/tools/v4-budgets.json +0 -0
  1002. {inklet-4.0.0.dev11 → 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.dev11
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 development tag such as v3.1.0 or v4.0.0.dev11' >&2
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'] != ('.dev' in os.environ['RELEASE_TAG']):
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,37 @@
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
+
20
+ ## 4.0.0.dev12 — 2026-09-13
21
+
22
+ Twelfth development preview: a redesigned local figure workspace.
23
+ 3.1.0 remains the stable release.
24
+
25
+ - Add searchable object navigation, a large canvas, focused inspector tabs,
26
+ fixed apply/discard controls, header exports and revision feedback.
27
+ - Add fitted zoom, wheel zoom, pan tools and Space/middle-button dragging without
28
+ changing authored geometry. Preserve object gesture coordinates across zooms.
29
+ - Add native colour pickers, exact-value fields, keyboard shortcuts and a help
30
+ dialog; retain native text undo and adapt the workspace to smaller screens.
31
+ - Protect unapplied fields during selection and file/source actions; highlight
32
+ pending changes and offer explicit discard. Keep schema 0.4 and Python exports.
33
+ - Review real pointer capture and mobile overflow, extend browser regressions,
34
+ and update the illustrated editor guide.
35
+
5
36
  ## 4.0.0.dev11 — 2026-09-12
6
37
 
7
38
  Eleventh development preview: unified composition layout, labels and appearance.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inklet
3
- Version: 4.0.0.dev11
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.dev11** connects layout, label and appearance editing in the local
85
- composition editor. Adjust supported plot, text and module styles alongside
86
- layout, undo changes together, and save choices that reproduce through Python.
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.dev11"
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.dev11)
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.dev11** connects layout, label and appearance editing in the local
35
- composition editor. Adjust supported plot, text and module styles alongside
36
- layout, undo changes together, and save choices that reproduce through Python.
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.dev11"
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.dev11)
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,
@@ -1,6 +1,7 @@
1
1
  # Compatibility
2
2
 
3
- Inklet **3.1** supports the environments and rendering paths below.
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.0.dev9 preview](development-preview.md), not in stable 3.1.0. Their `pandas` and `polars` extras are separate
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.dev11
1
+ # Inklet 4.0.0.dev13
2
2
 
3
- The eleventh 4.0 development release includes the linked plotting, mapping,
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.dev11"
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.dev11"
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.dev11"
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,40 @@ 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
- ## Unified composition authoring in dev11
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
+ ![Native camera editing](assets/guides/layout-editor-camera.png)
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
48
+
49
+ The [composition editor](layout-editor.md) now has a searchable object navigator,
50
+ a central figure canvas and a focused inspector. Layout, Labels and Styles use
51
+ compact tabs, colour swatches and visible pending-change feedback. Apply/discard
52
+ controls stay accessible; save/export and undo/redo move to the header.
53
+
54
+ ![Inklet studio workspace](assets/guides/editor-studio.png)
55
+
56
+ Zoom, Fit and pan explore the canvas without changing the authored figure.
57
+ Object gestures retain their figure coordinates at different zoom levels.
58
+ Keyboard shortcuts cover apply, save and undo/redo; the help dialog lists the
59
+ full set. Pending edits are protected during selection, source refresh and
60
+ file actions. The layout adapts to tablet and phone screens.
61
+
62
+ This is a UI change: existing schema 0.4 files and the Python compiler remain
63
+ the source of saved choices and SVG/PDF exports.
64
+
65
+ ## Unified composition authoring retained from dev11
33
66
 
34
67
  The [composition editor](layout-editor.md#edit-appearance-alongside-layout) now
35
68
  combines Layout, Labels and Styles sections. Pending changes across sections
@@ -220,7 +253,7 @@ The wheel contains the library. To obtain recipes and fixtures, use the matching
220
253
  release checkout or source archive:
221
254
 
222
255
  ```sh
223
- git clone --branch v4.0.0.dev11 https://github.com/Mapika/inklet.git
256
+ git clone --branch v4.0.0.dev13 https://github.com/Mapika/inklet.git
224
257
  cd inklet
225
258
  python -m pip install -e '.[render]'
226
259
  python examples/v4/regional_report.py --renderer compiled --editor --output out/regional
@@ -1,11 +1,11 @@
1
1
  # Local layout editor
2
2
 
3
- Available since **4.0.0.dev8**, with mouse gestures in **4.0.0.dev9**, named label editing in **4.0.0.dev10**, and unified style controls in **4.0.0.dev11**, under `inklet.experimental.layout_editor`. Adjust
4
- named placements and dimensions in a browser while Python recompiles the
5
- actual composition. The preview and downloaded SVG/PDF come from the same
6
- compiled figure, including plots, nested diagrams and native 3D content.
3
+ Available since **4.0.0.dev8**, with the redesigned studio workspace in
4
+ **4.0.0.dev12**, under `inklet.experimental.layout_editor`. Arrange named
5
+ content, edit labels and appearance, and review the actual Python-compiled
6
+ figure. Downloaded SVG/PDF files use that same successful preview.
7
7
 
8
- ![Mouse selection and proportional scaling handles on a native 3D object](assets/guides/layout-editor-gestures.png)
8
+ ![Inklet studio with object navigation, a large figure canvas and focused style controls](assets/guides/editor-studio.png)
9
9
 
10
10
  The [complete example](../examples/layout_editor.py) opens the reusable report
11
11
  from [composition recipes](composition-recipes.md). From the checkout, run:
@@ -19,6 +19,37 @@ press Ctrl+C to stop it. This is a local editor, not a standalone HTML editing
19
19
  file. Ordinary [figure viewers](compiled-viewer.md) remain available for
20
20
  sharing a finished document without a Python process.
21
21
 
22
+ ## A workspace for your figure
23
+
24
+ The desktop workspace has a searchable object navigator, a central canvas and
25
+ an inspector with **Layout**, **Labels**, **Styles** and **Camera** tabs. Select an object
26
+ from the navigator or directly on the figure. Nested objects retain their
27
+ hierarchy, and the inspector shows the exact source path. On smaller screens,
28
+ a **Content** selector replaces the navigator; on phones the inspector sits
29
+ below the canvas.
30
+
31
+ Use **+**, **−** and **Fit** to explore the figure. The zoom percentage is
32
+ relative to the fitted view, not a physical-size preview. Ctrl/Cmd + wheel also
33
+ zooms. Use the pan tool, middle-button dragging, or hold Space and drag to move
34
+ the viewport. View changes never resize the authored figure or enter its undo
35
+ history. Object movements and corner scaling still use figure coordinates at
36
+ any zoom level.
37
+
38
+ Changed fields are highlighted and counted. Switch inspector tabs to combine
39
+ edits, then **Apply changes** as one undo step. **Discard** clears unapplied
40
+ fields. Selecting another object, refreshing, undoing, opening a file, saving
41
+ or exporting asks you to apply or discard pending changes first; browser
42
+ navigation also warns about pending edits. Applied changes still need **Save
43
+ choices** to download a portable file.
44
+
45
+ Colour swatches open the native picker, while the adjacent field accepts exact
46
+ colour values. Automatic/transparent values use a muted swatch. Undo/redo and
47
+ file actions stay in the header; **Export** offers SVG and PDF. The footer shows
48
+ compile feedback and the current revision. The **Shortcuts** dialog documents
49
+ all controls, including Ctrl/Cmd + Enter to apply, Ctrl/Cmd + Z to undo,
50
+ Ctrl/Cmd + Shift + Z to redo and Ctrl/Cmd + S to save applied choices. Text inputs
51
+ retain native text undo.
52
+
22
53
  ## Start with your composition
23
54
 
24
55
  ```python
@@ -79,7 +110,7 @@ top-fitting behavior; dependent content can reflow when the compiler rebuilds.
79
110
 
80
111
  ![Editing a named plot callout with text, side, clearance and leader controls](assets/guides/layout-editor-labels.png)
81
112
 
82
- Select a composition child, choose **Labels** in **Edit**, then change its fields and choose **Apply
113
+ Select a composition child, choose the **Labels** tab, then change its fields and choose **Apply
83
114
  changes**. The editor supports text components created with `component(i.text,
84
115
  ...)`, string module captions, and plot `title`, `text` and `annotate`
85
116
  instructions with an explicit string `key`. For composition callouts, supply a
@@ -119,9 +150,9 @@ Undo/redo, reset, saved JSON and SVG/PDF exports include the label edits.
119
150
 
120
151
  ![Named line and marker styles edited in the composition inspector](assets/guides/layout-editor-styles.png)
121
152
 
122
- Choose **Styles** in **Edit**. Layout, Labels and Styles retain their pending
153
+ Choose the **Styles** tab. Layout, Labels and Styles retain their pending
123
154
  changes when switching sections; **Apply changes** compiles them together as
124
- one undo step. Selecting another content target discards unapplied fields.
155
+ one undo step. Apply or discard pending fields before selecting another content target.
125
156
 
126
157
  | Named content | Available appearance controls |
127
158
  | --- | --- |
@@ -160,7 +191,7 @@ Explicit discard removes that style target's edits while preserving compatible
160
191
  labels and placements on the chart.
161
192
 
162
193
  Styles use the same named path, key and kind contracts as labels. New saved
163
- files use schema 0.4; 0.1, 0.2 and 0.3 files still load. This unifies authoring
194
+ files use schema 0.5; 0.1 through 0.4 files still load. This unifies authoring
164
195
  within the composition editor. The separate [linked-table style inspector](visual-editing.md)
165
196
  retains its own source-bound format; its files are not interchangeable. Plot
166
197
  titles, axes, bars, arbitrary factories, gradients and camera/material settings
@@ -168,7 +199,7 @@ are outside this style-control subset.
168
199
 
169
200
  ## Edit and review
170
201
 
171
- Choose a named path in **Content** and a section in **Edit**, enter the fields you want to change, then
202
+ Choose a named path in **Content** and an inspector tab, enter the fields you want to change, then
172
203
  select **Apply changes**. Other fields retain their definitions.
173
204
 
174
205
  - Child placement fields are X, Y, anchor, width, height and uniform scale. Numbers use the
@@ -196,12 +227,12 @@ appears. Distinct placements of that shared content remain independently editabl
196
227
 
197
228
  ## Save, reopen and export
198
229
 
199
- **Save layout** downloads the versioned JSON described in
200
- [saved layout choices](layout-overrides.md). **Open layout choices** loads that
230
+ **Save choices** downloads the versioned JSON described in
231
+ [saved layout choices](layout-overrides.md). **Open** loads that
201
232
  same format. The file contains changed layout, label and supported style fields.
202
233
  Other source content, assets and undo history stay outside the file. Keep it alongside the recipe.
203
234
 
204
- **Download SVG** and **Download PDF** export the successful preview revision.
235
+ **Export → SVG** and **Export → PDF** export the successful preview revision.
205
236
  If another editor tab changes the session first, stale commands and export
206
237
  links are rejected. Use **Reload editor** to obtain the current shared state.
207
238
 
@@ -255,7 +286,51 @@ starts and closes the server automatically; keep that context alive during
255
286
  browser use.
256
287
 
257
288
  The inspector edits named composition layout and artwork scale. Label content,
258
- individual plot marks, camera controls, and file watching are not part of this interface.
289
+ individual plot marks, camera dragging, and file watching are not part of this interface.
259
290
  The separate [linked-plot appearance editor](visual-editing.md) retains its
260
291
  existing scope. Broader authoring and identity work remains on the
261
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
+ ![Native camera controls and the recompiled composition](assets/guides/layout-editor-camera.png)
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.3. New captures use 0.4; older readers
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.4`, adding named appearance decisions.
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) and 0.3 files from dev10 (without styles). Unknown schemas
162
- are rejected. Upgrade older readers before opening a 0.4 file. The JSON object
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 `styles` fields. This development-preview format is not a general
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 runs from `master`. Development tags must be marked as GitHub
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
@@ -64,7 +64,11 @@ choices. Dev10 adds saved named text and callout editing across modules, text
64
64
  components, keyed plot instructions and composition annotations, including typed
65
65
  identity reconciliation. Dev11 connects supported plot, text and module styles
66
66
  to that same layout/label history, saved state and reconciliation workflow,
67
- with data-driven marker fields protected from constant overrides.
67
+ with data-driven marker fields protected from constant overrides. Dev12 adds
68
+ the studio workspace: object navigation, focused controls, zoom/pan, shortcuts
69
+ and protection for pending edits.
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.
68
72
  Serialized project templates, asset manifests, shared selection
69
73
  relationships, axis-label/camera editing and finer-grained manipulation remain open. Subsequent work
70
74
  should extend authoring and cross-content identity beyond this bounded inspector.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "inklet"
3
- version = "4.0.0.dev11"
3
+ version = "4.0.0.dev13"
4
4
  description = "Scientific figures with live data, measured layout, and consistent vector exports."
5
5
  readme = "README.md"
6
6
  authors = [{name = "Mark Marosi"}]
@@ -470,4 +470,4 @@ __all__ = [
470
470
  "mm", "pt", "COLUMN_SINGLE", "COLUMN_DOUBLE",
471
471
  ]
472
472
 
473
- __version__ = "4.0.0.dev11"
473
+ __version__ = "4.0.0.dev13"
@@ -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 appearance decisions for named composition recipes."""
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.4'
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']!=SCHEMA: raise ValueError('styles require composition layout schema 0.4')
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=='styles' and not (set(fields)-{'kind'})<=set(available[key][0]))):
183
- orphaned.append(path+('#style:' if group=='styles' else '#')+key)
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 ('page','labels','styles') else (id(parent),part.name)
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():