inklet 4.0.0.dev12__tar.gz → 4.0.0.dev13__tar.gz

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