inklet 4.0.0.dev8__tar.gz → 4.0.0.dev10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (991) hide show
  1. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/.github/workflows/publish.yml +2 -2
  2. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/CHANGELOG.md +31 -0
  3. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/PKG-INFO +6 -6
  4. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/README.md +5 -5
  5. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/api.md +3 -3
  6. inklet-4.0.0.dev10/docs/assets/guides/layout-editor-gestures.png +0 -0
  7. inklet-4.0.0.dev10/docs/assets/guides/layout-editor-labels.png +0 -0
  8. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/compatibility.md +1 -1
  9. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/composition-recipes.md +3 -1
  10. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/development-preview.md +47 -9
  11. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/installation.md +3 -3
  12. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/layout-editor.md +81 -8
  13. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/layout-overrides.md +29 -7
  14. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/roadmap.md +6 -2
  15. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/layout_editor.py +1 -0
  16. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/pyproject.toml +1 -1
  17. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/__init__.py +1 -1
  18. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/composition.py +31 -9
  19. inklet-4.0.0.dev10/src/inklet/document/label_overrides.py +91 -0
  20. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/layout_overrides.py +42 -10
  21. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/layout_editor/__init__.py +89 -14
  22. inklet-4.0.0.dev10/src/inklet/experimental/layout_editor/gestures.js +63 -0
  23. inklet-4.0.0.dev10/src/inklet/experimental/layout_editor/page.html +65 -0
  24. inklet-4.0.0.dev10/tests/test_label_overrides.py +187 -0
  25. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_layout_editor.py +1 -1
  26. inklet-4.0.0.dev10/tests/test_layout_gestures.py +146 -0
  27. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/check_wheel.py +8 -0
  28. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_gallery.json +3 -3
  29. inklet-4.0.0.dev8/src/inklet/experimental/layout_editor/page.html +0 -46
  30. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/.gitattributes +0 -0
  31. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/.github/workflows/checks.yml +0 -0
  32. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/.gitignore +0 -0
  33. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/.readthedocs.yaml +0 -0
  34. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/CONTRACT.md +0 -0
  35. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/CONTRIBUTING.md +0 -0
  36. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/LICENSE +0 -0
  37. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/THIRD_PARTY_NOTICES.md +0 -0
  38. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-icon.svg +0 -0
  39. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-logo-dark.svg +0 -0
  40. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-logo-mono.svg +0 -0
  41. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-logo.svg +0 -0
  42. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/brand/inklet-wordmark.svg +0 -0
  43. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/examples/quickstart.pdf +0 -0
  44. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/examples/quickstart.png +0 -0
  45. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/examples/quickstart.svg +0 -0
  46. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/axes-and-scales-1.png +0 -0
  47. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/calibrated-volumes-3.png +0 -0
  48. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/channels-and-contours-1.png +0 -0
  49. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/composition-recipes-narrow.png +0 -0
  50. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/composition-recipes.html +0 -0
  51. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/composition-recipes.png +0 -0
  52. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-anchor.png +0 -0
  53. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-annotation.png +0 -0
  54. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
  55. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-branch.png +0 -0
  56. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-broken-axis.png +0 -0
  57. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-callout.png +0 -0
  58. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-clipping.png +0 -0
  59. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-creases.png +0 -0
  60. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-custom-key.png +0 -0
  61. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-cutout.png +0 -0
  62. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-dates.png +0 -0
  63. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-dense.png +0 -0
  64. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-elbows.png +0 -0
  65. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
  66. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-facets.png +0 -0
  67. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-fit-graph.png +0 -0
  68. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-flow-width.png +0 -0
  69. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-formula.png +0 -0
  70. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-graph.png +0 -0
  71. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-halo.png +0 -0
  72. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-heatmap.png +0 -0
  73. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-hole.png +0 -0
  74. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-inline-type.png +0 -0
  75. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-inset.png +0 -0
  76. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-labels.png +0 -0
  77. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-layers.png +0 -0
  78. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-letters.png +0 -0
  79. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-list.png +0 -0
  80. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-matrix.png +0 -0
  81. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-page-grid.png +0 -0
  82. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-polar.png +0 -0
  83. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-protein.png +0 -0
  84. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-routes.png +0 -0
  85. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
  86. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-scene.png +0 -0
  87. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-series-key.png +0 -0
  88. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-span.png +0 -0
  89. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
  90. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-swarm.png +0 -0
  91. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-text-path.png +0 -0
  92. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-toon.png +0 -0
  93. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-twin-axis.png +0 -0
  94. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
  95. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-violin.png +0 -0
  96. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
  97. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/data-1.png +0 -0
  98. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/data-3.png +0 -0
  99. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/dense-data-1.png +0 -0
  100. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/diagram-components-1.png +0 -0
  101. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/diagrams-1.png +0 -0
  102. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/layout-3.png +0 -0
  103. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/layout-editor.png +0 -0
  104. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/layout-restored.html +0 -0
  105. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/layout-restored.png +0 -0
  106. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/layout-revised.png +0 -0
  107. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/oblique-sections-2.png +0 -0
  108. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plot-composition-narrow.png +0 -0
  109. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plot-composition.html +0 -0
  110. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plot-composition.png +0 -0
  111. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plot-quality-after.png +0 -0
  112. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plot-quality-before.png +0 -0
  113. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-band.png +0 -0
  114. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-bars.png +0 -0
  115. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-boxplot.png +0 -0
  116. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-errorbars.png +0 -0
  117. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-fill-between.png +0 -0
  118. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-fill.png +0 -0
  119. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-grouped-bars.png +0 -0
  120. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-hist.png +0 -0
  121. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-horizontal-bars.png +0 -0
  122. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-line-errors.png +0 -0
  123. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-line.png +0 -0
  124. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-markers.png +0 -0
  125. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-matrix.png +0 -0
  126. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-polar-curve.png +0 -0
  127. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-rose.png +0 -0
  128. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-scatter.png +0 -0
  129. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-series.png +0 -0
  130. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-stackarea.png +0 -0
  131. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-stacked-bars.png +0 -0
  132. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-step.png +0 -0
  133. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-swarm.png +0 -0
  134. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plots-violin.png +0 -0
  135. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plotting-1.png +0 -0
  136. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/plotting-2.png +0 -0
  137. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-1.png +0 -0
  138. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-2.png +0 -0
  139. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-3.png +0 -0
  140. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/publication-plots-4.png +0 -0
  141. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/slabs-and-regions-1.png +0 -0
  142. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/three-images-1.png +0 -0
  143. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/guides/three-images-2.png +0 -0
  144. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/biology.json +0 -0
  145. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-after.json +0 -0
  146. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-before.json +0 -0
  147. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-caption.tex +0 -0
  148. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-lines-after.json +0 -0
  149. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/clipping-lines-before.json +0 -0
  150. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/comparison.json +0 -0
  151. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-marker-shapes-caption.tex +0 -0
  152. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-marker-shapes.html +0 -0
  153. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-markers-display.json +0 -0
  154. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-markers-hardware.json +0 -0
  155. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-scene-viewer.html +0 -0
  156. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-viewer-display.json +0 -0
  157. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-viewer-export.json +0 -0
  158. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compiled-viewer-study.json +0 -0
  159. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compositing-after.json +0 -0
  160. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compositing-before.json +0 -0
  161. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/compositing-caption.tex +0 -0
  162. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/dense-scatter-caption.tex +0 -0
  163. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/diagram-after.json +0 -0
  164. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/diagram-before.json +0 -0
  165. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
  166. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/engine-after.json +0 -0
  167. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/engine-before.json +0 -0
  168. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/engine-review-caption.tex +0 -0
  169. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/fluorescence-biology.json +0 -0
  170. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/general-plots-caption.tex +0 -0
  171. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/general-plots.json +0 -0
  172. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/hatch-after.json +0 -0
  173. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/hatch-before.json +0 -0
  174. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/hatch-caption.tex +0 -0
  175. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
  176. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/label-intensities-native.csv +0 -0
  177. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/label-intensities.json +0 -0
  178. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/lines-after.json +0 -0
  179. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/lines-before.json +0 -0
  180. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-batches.json +0 -0
  181. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-after.json +0 -0
  182. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-before.json +0 -0
  183. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-browser-after.json +0 -0
  184. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/marker-index-browser-before.json +0 -0
  185. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/oblique-biology.json +0 -0
  186. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
  187. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/real-biology.json +0 -0
  188. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/render-scene-caption.tex +0 -0
  189. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/revision.json +0 -0
  190. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/scenes-after.json +0 -0
  191. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/scenes-before.json +0 -0
  192. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/slab-biology.json +0 -0
  193. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/study.json +0 -0
  194. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-after.json +0 -0
  195. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-before.json +0 -0
  196. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-gpu-after.json +0 -0
  197. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-culling-gpu-before.json +0 -0
  198. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-after.json +0 -0
  199. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-before.json +0 -0
  200. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-display.json +0 -0
  201. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-redraw-profile.json +0 -0
  202. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-window-after.json +0 -0
  203. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-window-before.json +0 -0
  204. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/research-preview/viewer-window-display.json +0 -0
  205. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/after.json +0 -0
  206. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/before.json +0 -0
  207. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/browser-quality.json +0 -0
  208. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/browser-scatter.html +0 -0
  209. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/browser-scatter.png +0 -0
  210. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/browser-study.json +0 -0
  211. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
  212. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines-masked.png +0 -0
  213. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines.html +0 -0
  214. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/contours-streamlines.png +0 -0
  215. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/engineering-report-170mm.png +0 -0
  216. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/engineering-report.html +0 -0
  217. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/engineering-report.png +0 -0
  218. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/faceted-operations.html +0 -0
  219. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/faceted-operations.png +0 -0
  220. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/linked-dashboard.html +0 -0
  221. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/linked-dashboard.png +0 -0
  222. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/linked-selection.html +0 -0
  223. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/linked-selection.png +0 -0
  224. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/mesh-fields-170mm.png +0 -0
  225. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/mesh-fields.html +0 -0
  226. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/mesh-fields.png +0 -0
  227. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/region-shapes.html +0 -0
  228. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/region-shapes.png +0 -0
  229. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/regional-analysis.html +0 -0
  230. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/regional-analysis.png +0 -0
  231. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/regional-report-160mm.png +0 -0
  232. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/regional-report.html +0 -0
  233. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/regional-report.png +0 -0
  234. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/scientific-report-170mm.png +0 -0
  235. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/scientific-report.html +0 -0
  236. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/scientific-report.png +0 -0
  237. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/statistical-views.html +0 -0
  238. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/statistical-views.png +0 -0
  239. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/table-inputs.html +0 -0
  240. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/table-inputs.png +0 -0
  241. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/time-series.html +0 -0
  242. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/time-series.png +0 -0
  243. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/transport-map.html +0 -0
  244. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/transport-map.png +0 -0
  245. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/visual-overrides.png +0 -0
  246. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-2019.html +0 -0
  247. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-2019.json +0 -0
  248. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-2019.png +0 -0
  249. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-revisions.html +0 -0
  250. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/world-population-revisions.png +0 -0
  251. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/world-population.html +0 -0
  252. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/assets/v4/world-population.png +0 -0
  253. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/axes-and-scales.md +0 -0
  254. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/bars-and-areas.md +0 -0
  255. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/biology-panels.md +0 -0
  256. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/blender-scenes.md +0 -0
  257. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/brand.md +0 -0
  258. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/browser-rendering.md +0 -0
  259. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/calibrated-volumes.md +0 -0
  260. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/channels-and-contours.md +0 -0
  261. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/cli.md +0 -0
  262. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/clipping.md +0 -0
  263. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/compiled-scenes.md +0 -0
  264. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/compiled-viewer.md +0 -0
  265. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/complex-scene.md +0 -0
  266. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/compositing.md +0 -0
  267. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/concepts.md +0 -0
  268. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/contours-streamlines.md +0 -0
  269. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/cookbook.md +0 -0
  270. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/data-revisions.md +0 -0
  271. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/data.md +0 -0
  272. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/dense-data.md +0 -0
  273. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/design/browser-backends.md +0 -0
  274. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/design/page_grid.md +0 -0
  275. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/design/v2.md +0 -0
  276. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/design/v4.md +0 -0
  277. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/diagram-components.md +0 -0
  278. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/diagram-engine.md +0 -0
  279. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/diagrams.md +0 -0
  280. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/distributions.md +0 -0
  281. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/engineering-report.md +0 -0
  282. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/example-library.md +0 -0
  283. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/examples.md +0 -0
  284. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/export-review.md +0 -0
  285. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/fluorescence-biology.md +0 -0
  286. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/general-plots.md +0 -0
  287. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/geographic-features.md +0 -0
  288. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/hatching.md +0 -0
  289. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/index.md +0 -0
  290. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/interactive-documents.md +0 -0
  291. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/javascripts/inklet.js +0 -0
  292. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/label-intensities.md +0 -0
  293. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/label-measurements.md +0 -0
  294. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/layout.md +0 -0
  295. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/lines-and-points.md +0 -0
  296. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/linked-facets.md +0 -0
  297. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/linked-maps.md +0 -0
  298. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/linked-plots.md +0 -0
  299. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/marker-batches.md +0 -0
  300. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/marker-culling.md +0 -0
  301. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/matrices.md +0 -0
  302. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/mesh-fields.md +0 -0
  303. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/microscopy-tiff.md +0 -0
  304. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/migration.md +0 -0
  305. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/oblique-biology.md +0 -0
  306. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/oblique-sections.md +0 -0
  307. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/plot-quality.md +0 -0
  308. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/plot-recipes.md +0 -0
  309. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/plot-types.md +0 -0
  310. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/plotting-engine.md +0 -0
  311. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/plotting.md +0 -0
  312. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/polar-plots.md +0 -0
  313. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/presets.md +0 -0
  314. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/publication-plots.md +0 -0
  315. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/quickstart.md +0 -0
  316. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/real-biology.md +0 -0
  317. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/architecture-sketch.md +0 -0
  318. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/architecture.md +0 -0
  319. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/attractor.md +0 -0
  320. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/helix.md +0 -0
  321. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/interference.md +0 -0
  322. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/lattice.md +0 -0
  323. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/photonics.md +0 -0
  324. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/recipes/wave-packets.md +0 -0
  325. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/regional-report.md +0 -0
  326. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/release-checks.md +0 -0
  327. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/render-jobs.md +0 -0
  328. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/rendering-engine.md +0 -0
  329. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/research-preview.md +0 -0
  330. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/research-revision.md +0 -0
  331. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/research-study.md +0 -0
  332. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/scene-annotations.md +0 -0
  333. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/scene-paths.md +0 -0
  334. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/scene-templates.md +0 -0
  335. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/scientific-report.md +0 -0
  336. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/showcase.md +0 -0
  337. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/slab-biology.md +0 -0
  338. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/slabs-and-regions.md +0 -0
  339. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/statistical-views.md +0 -0
  340. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/stress20.md +0 -0
  341. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/stylesheets/code.css +0 -0
  342. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/stylesheets/inklet.css +0 -0
  343. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/table-inputs.md +0 -0
  344. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/three-images.md +0 -0
  345. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/time-series.md +0 -0
  346. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/troubleshooting.md +0 -0
  347. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/uncertainty.md +0 -0
  348. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/v2.5.md +0 -0
  349. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/v2.md +0 -0
  350. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/v3.md +0 -0
  351. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/v4-foundations.md +0 -0
  352. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/visual-editing.md +0 -0
  353. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/docs/world-map.md +0 -0
  354. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/biology/README.md +0 -0
  355. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/biology/cells3d.lock.json +0 -0
  356. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/biology/data.py +0 -0
  357. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/biology/fluorescence.py +0 -0
  358. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/biology/organelle.lock.json +0 -0
  359. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/biology/requirements.txt +0 -0
  360. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/biology_panels.py +0 -0
  361. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/blender/complex_lab_scene.py +0 -0
  362. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/blender/lab_scene.py +0 -0
  363. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/blender/occlusion_scene.py +0 -0
  364. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/blender/organelle_scene.py +0 -0
  365. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/blender/research_lab_views.py +0 -0
  366. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/broken_axis.py +0 -0
  367. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/clipping_review.py +0 -0
  368. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/compiled_marker_shapes.py +0 -0
  369. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/compiled_scene_viewer.py +0 -0
  370. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/compositing_review.py +0 -0
  371. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/composition_recipes.py +0 -0
  372. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/data/general-plots/benchmark.csv +0 -0
  373. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/data/general-plots/learning.csv +0 -0
  374. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/data/general-plots/revenue.csv +0 -0
  375. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/data/general-plots/sensor.csv +0 -0
  376. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/dense_scatter_review.py +0 -0
  377. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/diagram_review.py +0 -0
  378. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/engine_review.py +0 -0
  379. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/feature_flow.py +0 -0
  380. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/fluorescence_biology.py +0 -0
  381. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/gallery.py +0 -0
  382. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/general_plots.py +0 -0
  383. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/graph.py +0 -0
  384. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/hatch_review.py +0 -0
  385. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/hello_figure.py +0 -0
  386. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/label_intensities.py +0 -0
  387. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/oblique_biology.py +0 -0
  388. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/panels.py +0 -0
  389. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/plot_composition.py +0 -0
  390. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/plot_engine_review.py +0 -0
  391. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/plot_quality_review.py +0 -0
  392. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/polar.py +0 -0
  393. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/preset_formats.py +0 -0
  394. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/presets.py +0 -0
  395. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/real_biology.py +0 -0
  396. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/render_scene_review.py +0 -0
  397. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/render_smoke.py +0 -0
  398. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/research_figure_planner.py +0 -0
  399. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/research_planner_study.py +0 -0
  400. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/research_revision.py +0 -0
  401. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/showcase/README.md +0 -0
  402. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/showcase/assets.lock.json +0 -0
  403. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/showcase/blender_scenes.py +0 -0
  404. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/showcase/figures.py +0 -0
  405. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/slab_biology.py +0 -0
  406. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/state_machine.py +0 -0
  407. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/stress20.py +0 -0
  408. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v25_document.py +0 -0
  409. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v2_cases.py +0 -0
  410. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v2_document.py +0 -0
  411. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v3_complex_scene.py +0 -0
  412. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v3_render_jobs.py +0 -0
  413. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v3_rendering.py +0 -0
  414. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v3_scene_annotations.py +0 -0
  415. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v3_scene_passes.py +0 -0
  416. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v3_scene_paths.py +0 -0
  417. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v3_scene_templates.py +0 -0
  418. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/README.md +0 -0
  419. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/browser_scatter.py +0 -0
  420. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/contours_streamlines.py +0 -0
  421. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/data/world-countries.geojson +0 -0
  422. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/data/world-map-source.json +0 -0
  423. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/data/world-population.csv +0 -0
  424. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/engineering_report.py +0 -0
  425. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/faceted_operations.py +0 -0
  426. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/fixtures/assembly.json +0 -0
  427. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/fixtures/manifest.json +0 -0
  428. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/fixtures/measurement.json +0 -0
  429. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/fixtures/region-shapes.geojson +0 -0
  430. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/fixtures/regions.csv +0 -0
  431. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/fixtures/regions.geojson +0 -0
  432. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/fixtures/transport.geojson +0 -0
  433. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/linked_dashboard.py +0 -0
  434. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/linked_selection.html +0 -0
  435. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/linked_selection.py +0 -0
  436. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/mesh_fields.py +0 -0
  437. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/region_shapes.py +0 -0
  438. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/regional_analysis.py +0 -0
  439. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/regional_report.py +0 -0
  440. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/scientific_report.py +0 -0
  441. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/statistical_views.py +0 -0
  442. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/table_inputs.py +0 -0
  443. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/time_series.py +0 -0
  444. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/transport_map.py +0 -0
  445. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/examples/v4/world_population.py +0 -0
  446. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/annot.py +0 -0
  447. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/bio3d.py +0 -0
  448. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/cartoon.py +0 -0
  449. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/chem_data.py +0 -0
  450. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/chem_fingerprints.py +0 -0
  451. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/data/1m17-kinase.pdb +0 -0
  452. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/data/README.md +0 -0
  453. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/drug_discovery.py +0 -0
  454. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/mouse_brain_data.py +0 -0
  455. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/neural_activity.py +0 -0
  456. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/pdbfile.py +0 -0
  457. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/showcase_part.py +0 -0
  458. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/showcase_process.py +0 -0
  459. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/showcase_season.py +0 -0
  460. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/structure.py +0 -0
  461. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/structure_data.py +0 -0
  462. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/target.py +0 -0
  463. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/figures/trial.py +0 -0
  464. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/README.md +0 -0
  465. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/biology-panels.png +0 -0
  466. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/chem_fingerprints.png +0 -0
  467. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/clipping-review.png +0 -0
  468. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/compiled-marker-shapes.png +0 -0
  469. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/compiled-scene-viewer.png +0 -0
  470. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/compiled-viewer-culling.png +0 -0
  471. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/compiled-viewer-deep-zoom.png +0 -0
  472. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/compositing-pdf-after.png +0 -0
  473. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/compositing-pdf-before.png +0 -0
  474. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/compositing-review.png +0 -0
  475. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/dense-scatter-review.png +0 -0
  476. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/diagram-labels-after.png +0 -0
  477. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/diagram-labels-before.png +0 -0
  478. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/diagram-review.png +0 -0
  479. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/engine-review.png +0 -0
  480. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/engine-transparency-after.png +0 -0
  481. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/engine-transparency-before.png +0 -0
  482. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/flow.png +0 -0
  483. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/fluorescence-biology.png +0 -0
  484. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/general-plots-before.png +0 -0
  485. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/general-plots.png +0 -0
  486. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/hatch-pdf-after.png +0 -0
  487. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/hatch-pdf-before.png +0 -0
  488. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/hatch-review.png +0 -0
  489. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/hatch-svg-before.png +0 -0
  490. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/label-intensities.png +0 -0
  491. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/oblique-biology.png +0 -0
  492. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/part.png +0 -0
  493. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/plot-axis-after.png +0 -0
  494. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/plot-axis-before.png +0 -0
  495. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/plot-engine-review.png +0 -0
  496. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/plots.png +0 -0
  497. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/polar.png +0 -0
  498. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/preset-formats.png +0 -0
  499. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/presets.png +0 -0
  500. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/process.png +0 -0
  501. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/real-biology.png +0 -0
  502. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/render-scene-data.png +0 -0
  503. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/render-scene-initial.png +0 -0
  504. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/render-scene-review.png +0 -0
  505. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/research-crossing-revision.png +0 -0
  506. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/research-figure-planner.png +0 -0
  507. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/research-planner-study.png +0 -0
  508. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/research-revision.png +0 -0
  509. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/season.png +0 -0
  510. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-architecture-sketch.png +0 -0
  511. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-architecture.png +0 -0
  512. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-attractor.png +0 -0
  513. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-helix.png +0 -0
  514. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-interference.png +0 -0
  515. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-lattice.png +0 -0
  516. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-photonics.png +0 -0
  517. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/showcase-wave-packets.png +0 -0
  518. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/slab-biology.png +0 -0
  519. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/stress20.png +0 -0
  520. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/structure.png +0 -0
  521. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/v3-complex-scene.png +0 -0
  522. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/v3-render-jobs.png +0 -0
  523. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/v3-rendering.png +0 -0
  524. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/v3-scene-annotations.png +0 -0
  525. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/v3-scene-passes.png +0 -0
  526. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/v3-scene-paths.png +0 -0
  527. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/gallery/v3-scene-templates.png +0 -0
  528. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/mkdocs.yml +0 -0
  529. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/requirements-ci.txt +0 -0
  530. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/requirements-docs.txt +0 -0
  531. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/requirements-tables.txt +0 -0
  532. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/scripts/bench_svg.py +0 -0
  533. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/scripts/rasterise.sh +0 -0
  534. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/scripts/sanity_typeset.py +0 -0
  535. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/__main__.py +0 -0
  536. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/__init__.py +0 -0
  537. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/asset.py +0 -0
  538. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/cache.py +0 -0
  539. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/cutout.py +0 -0
  540. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/deps.py +0 -0
  541. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/harmonise.py +0 -0
  542. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/lineart.py +0 -0
  543. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/mask.py +0 -0
  544. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/provenance.py +0 -0
  545. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/raster.py +0 -0
  546. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/sidecar.py +0 -0
  547. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/assets/silhouette.py +0 -0
  548. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/cli.py +0 -0
  549. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/components.py +0 -0
  550. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/__init__.py +0 -0
  551. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/batch.py +0 -0
  552. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/diagram.py +0 -0
  553. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/envelope.py +0 -0
  554. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/geom.py +0 -0
  555. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/prims.py +0 -0
  556. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/style.py +0 -0
  557. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/trace.py +0 -0
  558. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/core/units.py +0 -0
  559. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/__init__.py +0 -0
  560. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/abut.py +0 -0
  561. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/break_rules.py +0 -0
  562. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/color.py +0 -0
  563. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/cross.py +0 -0
  564. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/image.py +0 -0
  565. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/key_rules.py +0 -0
  566. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/link_rules.py +0 -0
  567. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/path_rules.py +0 -0
  568. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/plot_rules.py +0 -0
  569. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/report.py +0 -0
  570. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/rules.py +0 -0
  571. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/diagnostics/three_rules.py +0 -0
  572. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/__init__.py +0 -0
  573. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/compiler.py +0 -0
  574. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/data.py +0 -0
  575. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/data_io.py +0 -0
  576. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/module.py +0 -0
  577. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/presets.py +0 -0
  578. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/publication.py +0 -0
  579. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/document/spec.py +0 -0
  580. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/__init__.py +0 -0
  581. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/annotate.py +0 -0
  582. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/bezier_clip.py +0 -0
  583. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/clip.py +0 -0
  584. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/coords.py +0 -0
  585. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/path.py +0 -0
  586. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/place.py +0 -0
  587. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/draw/shapes.py +0 -0
  588. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/__init__.py +0 -0
  589. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/_table_adapters.py +0 -0
  590. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/__init__.py +0 -0
  591. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/compiled.js +0 -0
  592. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/compiled.py +0 -0
  593. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/drawings.py +0 -0
  594. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/editor.html +0 -0
  595. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/editor.js +0 -0
  596. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/fields.py +0 -0
  597. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/geography.py +0 -0
  598. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/grid.py +0 -0
  599. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/images.py +0 -0
  600. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/overrides.py +0 -0
  601. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/page.html +0 -0
  602. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/regions.py +0 -0
  603. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/runtime.js +0 -0
  604. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/series.py +0 -0
  605. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/browser/timeaxis.py +0 -0
  606. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/channels.py +0 -0
  607. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/contours.py +0 -0
  608. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/engineering.py +0 -0
  609. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/fields.py +0 -0
  610. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/figure_planner.py +0 -0
  611. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/grid.py +0 -0
  612. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/measurement.py +0 -0
  613. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/measurements.py +0 -0
  614. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/planner_geometry.py +0 -0
  615. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/regions.py +0 -0
  616. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/__init__.py +0 -0
  617. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/controls.js +0 -0
  618. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/page.html +0 -0
  619. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/runtime.js +0 -0
  620. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/scene_viewer/spatial.js +0 -0
  621. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/sections.py +0 -0
  622. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/selection.py +0 -0
  623. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/slabs.py +0 -0
  624. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/temporal.py +0 -0
  625. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/tiff.py +0 -0
  626. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/experimental/volume.py +0 -0
  627. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/figure.py +0 -0
  628. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/__init__.py +0 -0
  629. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/fit.py +0 -0
  630. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/flow.py +0 -0
  631. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/graph.py +0 -0
  632. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/graph_force.py +0 -0
  633. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/graph_layered.py +0 -0
  634. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/graph_tree.py +0 -0
  635. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/labels.py +0 -0
  636. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/layout/sankey.py +0 -0
  637. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/links/__init__.py +0 -0
  638. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/links/curves.py +0 -0
  639. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/links/link.py +0 -0
  640. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/__init__.py +0 -0
  641. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/axis.py +0 -0
  642. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/breaks.py +0 -0
  643. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/categories.py +0 -0
  644. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/facets.py +0 -0
  645. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/inset.py +0 -0
  646. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/key.py +0 -0
  647. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/marks.py +0 -0
  648. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/notes.py +0 -0
  649. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/panel.py +0 -0
  650. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/png.py +0 -0
  651. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/polar.py +0 -0
  652. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/ramp.py +0 -0
  653. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/raster.py +0 -0
  654. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/ribbon.py +0 -0
  655. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/scale.py +0 -0
  656. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/scatter_batch.py +0 -0
  657. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/scatter_raster.py +0 -0
  658. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/series.py +0 -0
  659. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/simplify.py +0 -0
  660. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/plot/timescale.py +0 -0
  661. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/__init__.py +0 -0
  662. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/analysis.py +0 -0
  663. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/bounds.py +0 -0
  664. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/brushes.py +0 -0
  665. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/bundle.py +0 -0
  666. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/composite.py +0 -0
  667. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/fontembed.py +0 -0
  668. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/glyphs.py +0 -0
  669. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/hatching.py +0 -0
  670. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/outline.py +0 -0
  671. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/paint.py +0 -0
  672. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/pathdata.py +0 -0
  673. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/pdf.py +0 -0
  674. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/pdftext.py +0 -0
  675. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/preview.py +0 -0
  676. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/raster.py +0 -0
  677. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/resources.py +0 -0
  678. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/review.py +0 -0
  679. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/revision.py +0 -0
  680. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/scene.py +0 -0
  681. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/render/svg.py +0 -0
  682. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/themes/__init__.py +0 -0
  683. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/themes/color.py +0 -0
  684. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/themes/palettes.py +0 -0
  685. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/themes/theme.py +0 -0
  686. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/__init__.py +0 -0
  687. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/api.py +0 -0
  688. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/backend.py +0 -0
  689. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/__init__.py +0 -0
  690. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/device_worker.py +0 -0
  691. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/discover.py +0 -0
  692. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/lineart.py +0 -0
  693. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/options.py +0 -0
  694. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/scene_worker.py +0 -0
  695. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/script.py +0 -0
  696. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/svgread.py +0 -0
  697. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/template_worker.py +0 -0
  698. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender/tracing.py +0 -0
  699. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/blender_backend.py +0 -0
  700. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/camera.py +0 -0
  701. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/deps.py +0 -0
  702. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/depth.py +0 -0
  703. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/devices.py +0 -0
  704. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/drill.py +0 -0
  705. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/edges.py +0 -0
  706. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/hlr.py +0 -0
  707. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/linalg.py +0 -0
  708. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/mesh.py +0 -0
  709. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/occlude.py +0 -0
  710. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/order.py +0 -0
  711. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/parse.py +0 -0
  712. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/place.py +0 -0
  713. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/protein.py +0 -0
  714. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/quality.py +0 -0
  715. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/render_jobs.py +0 -0
  716. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/scene_annotations.py +0 -0
  717. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/scene_pass.py +0 -0
  718. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/scene_projection.py +0 -0
  719. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/scenes.py +0 -0
  720. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/shade.py +0 -0
  721. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/solids.py +0 -0
  722. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/templates.json +0 -0
  723. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/three/templates.py +0 -0
  724. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/typeset/__init__.py +0 -0
  725. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/typeset/fonts.py +0 -0
  726. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/typeset/markup.py +0 -0
  727. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/typeset/onpath.py +0 -0
  728. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/typeset/outline.py +0 -0
  729. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/src/inklet/typeset/shaping.py +0 -0
  730. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/assets/mouse.inklet.json +0 -0
  731. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/assets/mouse.png +0 -0
  732. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/dense_graph.py +0 -0
  733. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/draw_probe.py +0 -0
  734. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/assets/sem.png +0 -0
  735. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/assets/tem.png +0 -0
  736. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/cell.py +0 -0
  737. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/common.py +0 -0
  738. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/data.py +0 -0
  739. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/imaging.py +0 -0
  740. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/kinetics.py +0 -0
  741. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/micrograph.py +0 -0
  742. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro/system.py +0 -0
  743. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/electro_figure.py +0 -0
  744. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/fidelity.py +0 -0
  745. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/flow.py +0 -0
  746. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/hard_figure.py +0 -0
  747. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/label_storm.py +0 -0
  748. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/mega_figure.py +0 -0
  749. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/meshes/README.md +0 -0
  750. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/meshes/brain-lh.obj +0 -0
  751. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/meshes/spot.obj +0 -0
  752. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/panels/apparatus.py +0 -0
  753. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/panels/graphs.py +0 -0
  754. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/panels/relations.py +0 -0
  755. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/panels/responses.py +0 -0
  756. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/panels/sections.py +0 -0
  757. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/probes.py +0 -0
  758. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/stress/three_figure.py +0 -0
  759. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_alignment_contract.py +0 -0
  760. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_annotate.py +0 -0
  761. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_annotate_letters.py +0 -0
  762. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_assets.py +0 -0
  763. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_assets_provenance.py +0 -0
  764. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_biology_source.py +0 -0
  765. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_blend_scene.py +0 -0
  766. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_compiled.py +0 -0
  767. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_facets.py +0 -0
  768. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_figure.py +0 -0
  769. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_geography.py +0 -0
  770. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_overrides.py +0 -0
  771. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_regions.py +0 -0
  772. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_revision.py +0 -0
  773. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_scatter.py +0 -0
  774. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_series.py +0 -0
  775. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_statistics.py +0 -0
  776. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_switching.py +0 -0
  777. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_browser_time.py +0 -0
  778. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_categories.py +0 -0
  779. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_channels_contours.py +0 -0
  780. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_chem_figure.py +0 -0
  781. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_cli.py +0 -0
  782. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_clip_engine.py +0 -0
  783. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_components.py +0 -0
  784. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_compositing_engine.py +0 -0
  785. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_composition_recipes.py +0 -0
  786. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_contrast_and_labels.py +0 -0
  787. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_cookbook.py +0 -0
  788. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_core.py +0 -0
  789. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_core_amendments.py +0 -0
  790. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_csv_input.py +0 -0
  791. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics.py +0 -0
  792. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_api.py +0 -0
  793. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_artwork.py +0 -0
  794. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_break_distorts.py +0 -0
  795. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_crossing.py +0 -0
  796. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_image_contrast.py +0 -0
  797. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_ink.py +0 -0
  798. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_keys.py +0 -0
  799. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_links.py +0 -0
  800. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_paths.py +0 -0
  801. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagnostics_plot_box.py +0 -0
  802. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_diagram_engine.py +0 -0
  803. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_docs.py +0 -0
  804. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_docs_site.py +0 -0
  805. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_document.py +0 -0
  806. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_document_data.py +0 -0
  807. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_document_v25.py +0 -0
  808. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_draw_clip.py +0 -0
  809. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_draw_path.py +0 -0
  810. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_draw_place.py +0 -0
  811. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_draw_shapes.py +0 -0
  812. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_engine_layout.py +0 -0
  813. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_engine_rendering.py +0 -0
  814. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_engine_scatter.py +0 -0
  815. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_engineering_report.py +0 -0
  816. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_export_bundle.py +0 -0
  817. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_figure.py +0 -0
  818. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_figure_planner.py +0 -0
  819. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_fit.py +0 -0
  820. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_grid_fields.py +0 -0
  821. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_guides.py +0 -0
  822. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_hatch_engine.py +0 -0
  823. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_label_measurements.py +0 -0
  824. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_layout.py +0 -0
  825. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_layout_graph.py +0 -0
  826. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_layout_graph_fit.py +0 -0
  827. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_layout_origin.py +0 -0
  828. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_layout_overrides.py +0 -0
  829. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_layout_sankey.py +0 -0
  830. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_links.py +0 -0
  831. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_links_avoid.py +0 -0
  832. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_links_shapes.py +0 -0
  833. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_marker_batches.py +0 -0
  834. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_mesh_fields.py +0 -0
  835. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_microscopy_tiff.py +0 -0
  836. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_neural_activity.py +0 -0
  837. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_output_contract.py +0 -0
  838. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_paint_program.py +0 -0
  839. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_place_labels.py +0 -0
  840. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_axis.py +0 -0
  841. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_broken_axis.py +0 -0
  842. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_clip.py +0 -0
  843. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_engine.py +0 -0
  844. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_facets.py +0 -0
  845. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_inset.py +0 -0
  846. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_key.py +0 -0
  847. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_labels.py +0 -0
  848. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_legend.py +0 -0
  849. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_marks.py +0 -0
  850. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_notes.py +0 -0
  851. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_polar.py +0 -0
  852. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_publication.py +0 -0
  853. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_quality_review.py +0 -0
  854. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_raster.py +0 -0
  855. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_recipes.py +0 -0
  856. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_ribbon.py +0 -0
  857. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_scale.py +0 -0
  858. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_swarm.py +0 -0
  859. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_plot_time.py +0 -0
  860. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_presets.py +0 -0
  861. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_publication_limits.py +0 -0
  862. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_regional_report.py +0 -0
  863. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_release_adversarial.py +0 -0
  864. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_devices.py +0 -0
  865. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_embed.py +0 -0
  866. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_glyphs.py +0 -0
  867. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_jobs.py +0 -0
  868. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_outline.py +0 -0
  869. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_pdf.py +0 -0
  870. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_pdf_text.py +0 -0
  871. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_quality.py +0 -0
  872. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_scene.py +0 -0
  873. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_style_fields.py +0 -0
  874. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_svg_perf.py +0 -0
  875. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_render_v3.py +0 -0
  876. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_review_v25.py +0 -0
  877. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_round4_plot.py +0 -0
  878. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_routing_avoid.py +0 -0
  879. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scatter_rendering.py +0 -0
  880. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scene_annotations.py +0 -0
  881. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scene_culling.py +0 -0
  882. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scene_pass.py +0 -0
  883. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scene_projection.py +0 -0
  884. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scene_templates.py +0 -0
  885. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scene_viewer.py +0 -0
  886. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_scientific_report.py +0 -0
  887. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_sections.py +0 -0
  888. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_shared_plot_margins.py +0 -0
  889. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_showcase_library.py +0 -0
  890. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_showcase_round3.py +0 -0
  891. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_slabs_regions.py +0 -0
  892. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_structure_figure.py +0 -0
  893. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_svg.py +0 -0
  894. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_table_adapters.py +0 -0
  895. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_target_pose.py +0 -0
  896. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_temporal_adapters.py +0 -0
  897. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_text_markup.py +0 -0
  898. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_text_on_path.py +0 -0
  899. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_theme_font_style.py +0 -0
  900. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_themes.py +0 -0
  901. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_anchor_pin.py +0 -0
  902. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_api.py +0 -0
  903. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_backend_blender.py +0 -0
  904. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_blender.py +0 -0
  905. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_depth_order.py +0 -0
  906. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_drill.py +0 -0
  907. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_hlr.py +0 -0
  908. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_mesh.py +0 -0
  909. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_order_vector.py +0 -0
  910. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_overlay.py +0 -0
  911. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_parse.py +0 -0
  912. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_patches.py +0 -0
  913. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_place.py +0 -0
  914. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_protein.py +0 -0
  915. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_ridges.py +0 -0
  916. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_sort.py +0 -0
  917. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_sort_budget.py +0 -0
  918. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_three_view.py +0 -0
  919. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_typeset.py +0 -0
  920. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_v4_selection.py +0 -0
  921. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_volume.py +0 -0
  922. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_watch_review.py +0 -0
  923. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/test_world_map_example.py +0 -0
  924. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/README.md +0 -0
  925. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/categories-pdf.png +0 -0
  926. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/categories-svg.png +0 -0
  927. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/components-pdf.png +0 -0
  928. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/components-svg.png +0 -0
  929. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/dense-pdf.png +0 -0
  930. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/dense-svg.png +0 -0
  931. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/fonts.json +0 -0
  932. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/inset-pdf.png +0 -0
  933. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/inset-svg.png +0 -0
  934. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/markers-pdf.png +0 -0
  935. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/markers-svg.png +0 -0
  936. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/renderers.json +0 -0
  937. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/type-opacity-pdf.png +0 -0
  938. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/type-opacity-svg.png +0 -0
  939. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
  940. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
  941. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-dense-pdf.png +0 -0
  942. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-dense-svg.png +0 -0
  943. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
  944. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
  945. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
  946. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
  947. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
  948. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
  949. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
  950. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v2-workflow-svg.png +0 -0
  951. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v25-document-pdf.png +0 -0
  952. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/baseline/v25-document-svg.png +0 -0
  953. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/fixtures.py +0 -0
  954. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tests/visual/v2-budgets.json +0 -0
  955. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_batches.py +0 -0
  956. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_clipping.py +0 -0
  957. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_diagrams.py +0 -0
  958. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_engine.py +0 -0
  959. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_lines.py +0 -0
  960. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_marker_index.mjs +0 -0
  961. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_scene_culling.js +0 -0
  962. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_scene_gpu.js +0 -0
  963. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_scene_redraw.js +0 -0
  964. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_scene_viewer.js +0 -0
  965. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_scene_zoom.js +0 -0
  966. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_v2.py +0 -0
  967. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/benchmark_v4.py +0 -0
  968. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/browser_study.js +0 -0
  969. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/check_render_wheel.py +0 -0
  970. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/dock_ligand.py +0 -0
  971. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_previews.json +0 -0
  972. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_previews.py +0 -0
  973. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_site.py +0 -0
  974. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_theme/404.html +0 -0
  975. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_theme/card.html +0 -0
  976. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_theme/gallery.html +0 -0
  977. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_theme/home.html +0 -0
  978. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_theme/main.html +0 -0
  979. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/docs_theme/plot-gallery.html +0 -0
  980. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/gen_api.py +0 -0
  981. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/make_culling_review.py +0 -0
  982. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/plot_catalog.json +0 -0
  983. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/prepare_world_map.py +0 -0
  984. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/preset_gallery.py +0 -0
  985. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/profile_scene_redraw.js +0 -0
  986. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/showcase_gallery.py +0 -0
  987. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/stress20.py +0 -0
  988. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/strip_pdb.py +0 -0
  989. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/v3_showcase.py +0 -0
  990. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/v4-budgets.json +0 -0
  991. {inklet-4.0.0.dev8 → inklet-4.0.0.dev10}/tools/visual_check.py +0 -0
@@ -6,7 +6,7 @@ on:
6
6
  tag:
7
7
  description: Published GitHub release tag
8
8
  required: true
9
- default: v4.0.0.dev8
9
+ default: v4.0.0.dev10
10
10
  type: string
11
11
  dry_run:
12
12
  description: Validate release files without uploading to PyPI
@@ -43,7 +43,7 @@ jobs:
43
43
  RELEASE_TAG: ${{ inputs.tag }}
44
44
  run: |
45
45
  [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?$ ]] || {
46
- echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev8' >&2
46
+ echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev10' >&2
47
47
  exit 1
48
48
  }
49
49
  gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
@@ -2,6 +2,37 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.0.0.dev10 — 2026-09-12
6
+
7
+ Tenth development preview: reproducible named label and callout editing.
8
+ 3.1.0 remains the stable release.
9
+
10
+ - Edit string module captions, text components, keyed plot titles/text/callouts
11
+ and named composition annotations in the local layout editor.
12
+ - Expose callout text, preferred side, physical clearance and leader visibility;
13
+ remeasure content and dependent connections through the Python compiler.
14
+ - Save typed label identities and changed fields in layout schema 0.3, accepting
15
+ legacy 0.1/0.2 files, undo/redo, independent copies and shared definitions.
16
+ - Report removed or incompatible labels individually; explicit discard preserves
17
+ compatible edits on the same object. Leave unedited source decisions live.
18
+ - Add browser controls, source revision and two-width SVG/PDF roundtrip checks,
19
+ installed-package coverage and an illustrated guide and example.
20
+
21
+ ## 4.0.0.dev9 — 2026-09-12
22
+
23
+ Ninth development preview: mouse movement and proportional artwork scaling.
24
+ 3.1.0 remains the stable release.
25
+
26
+ - Add click/drag selection and movement, corner scale handles, containing-group
27
+ selection, keyboard nudges and cancellable pointer gestures to LayoutEditor.
28
+ - Map gestures through nested physical coordinate units and scales. Preserve
29
+ measured positions with folded offsets and keep the opposite scale corner fixed.
30
+ - Add explicit Composition child scale, preserving registered ports and scaling
31
+ complete artwork. Width/height fitting retains its separate layout semantics.
32
+ - Save scale in composition-layout schema 0.2; continue loading schema 0.1 files.
33
+ - Cover geometry, ports, all four corners, undo/reopen, nested transforms,
34
+ invalid gestures and browser/Python export agreement; update the editor guide.
35
+
5
36
  ## 4.0.0.dev8 — 2026-09-12
6
37
 
7
38
  Eighth development preview: local browser layout editing with Python compilation.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inklet
3
- Version: 4.0.0.dev8
3
+ Version: 4.0.0.dev10
4
4
  Summary: Scientific figures with live data, measured layout, and consistent vector exports.
5
5
  Project-URL: Repository, https://github.com/Mapika/inklet
6
6
  Project-URL: Documentation, https://inklet.readthedocs.io/en/latest/
@@ -81,16 +81,16 @@ their signatures and report schemas may change.
81
81
 
82
82
  ## 4.0 development preview
83
83
 
84
- **4.0.0.dev8** adds a local browser layout inspector backed by the Python
85
- compiler. Edit named placements and dimensions, undo/redo changes, save layout
86
- choices, and export the same compiled preview to SVG or PDF.
84
+ **4.0.0.dev10** adds named label and callout editing to the local layout
85
+ editor. Edit text and callout preferences, move and scale content, undo changes,
86
+ and save choices that reproduce through the Python compiler.
87
87
  ```sh
88
- python -m pip install "inklet==4.0.0.dev8"
88
+ python -m pip install "inklet==4.0.0.dev10"
89
89
  ```
90
90
 
91
91
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
92
92
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
93
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev8)
93
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev10)
94
94
 
95
95
  This is an opt-in development release. Experimental APIs and saved-state schemas
96
96
  may change; 3.1.0 remains the stable release. General browser editing,
@@ -31,16 +31,16 @@ their signatures and report schemas may change.
31
31
 
32
32
  ## 4.0 development preview
33
33
 
34
- **4.0.0.dev8** adds a local browser layout inspector backed by the Python
35
- compiler. Edit named placements and dimensions, undo/redo changes, save layout
36
- choices, and export the same compiled preview to SVG or PDF.
34
+ **4.0.0.dev10** adds named label and callout editing to the local layout
35
+ editor. Edit text and callout preferences, move and scale content, undo changes,
36
+ and save choices that reproduce through the Python compiler.
37
37
  ```sh
38
- python -m pip install "inklet==4.0.0.dev8"
38
+ python -m pip install "inklet==4.0.0.dev10"
39
39
  ```
40
40
 
41
41
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
42
42
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
43
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev8)
43
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev10)
44
44
 
45
45
  This is an opt-in development release. Experimental APIs and saved-state schemas
46
46
  may change; 3.1.0 remains the stable release. General browser editing,
@@ -218,19 +218,19 @@ A figure assembled from named children and measured expressions.
218
218
 
219
219
  * `measure(name, dimension='width')` -- Reference a child's measured width or height, in composition units.
220
220
  * `point(name, anchor='center')` -- Reference a placed child's compass point or registered port.
221
- * `add(name, item, *, x=0, y=0, anchor=None, width=None, height=None)`
221
+ * `add(name, item, *, x=0, y=0, anchor=None, width=None, height=None, scale=1)`
222
222
  * `replace(name, item)` -- Replace a child while preserving its placement and dependent references.
223
223
  * `slot(name, **placement)` -- Declare a required content input with the same placement options as add().
224
224
  * `copy()` -- Copy nested compositions, plots, modules and component instructions.
225
225
  * `instantiate(**items)` -- Create an independent recipe, filling required slots and replacing defaults.
226
226
  * `configure(*, width=None, height=None, unit=None, fit_top=None)` -- Atomically update authored page dimensions or coordinate units.
227
227
  * `place(name, **placement)` -- Edit a child's placement without replacing its content or named links.
228
- * `layout_overrides(reference)` -- Capture changed placements and page fields against a matching reference.
228
+ * `layout_overrides(reference)` -- Capture changed layout and compatible named labels against a reference.
229
229
  * `with_layout_overrides(value, *, missing='error')` -- Return an independent edited recipe and a reconciliation report.
230
230
  * `port(name, target)` -- Expose a child's name:anchor as a reusable composition attachment point.
231
231
  * `constrain(value, *, minimum=0, message='composition needs more space')` -- Require an expression to meet a minimum; fail before drawing.
232
232
  * `link(source, target, **options)` -- Route a branch or return between named children (`name:port`).
233
- * `annotate(target, text, **options)` -- Place a measured callout after every child and connection exists.
233
+ * `annotate(target, text, **options)` -- Place a measured callout; a unique name enables saved label editing.
234
234
  * `signature(trail=())`
235
235
  * `render(context, width=None, height=None)`
236
236
 
@@ -48,7 +48,7 @@ Blender. Scene creation and rendering run Blender in a separate process.
48
48
  ### Development-preview table adapters
49
49
 
50
50
  The [pandas and Polars adapters](table-inputs.md) are included in the experimental
51
- [4.0.0.dev8 preview](development-preview.md), not in stable 3.1.0. Their `pandas` and `polars` extras are separate
51
+ [4.0.0.dev9 preview](development-preview.md), not in stable 3.1.0. Their `pandas` and `polars` extras are separate
52
52
  from core dependencies. The adapter CI jobs use Linux/Python 3.12 with pandas
53
53
  2.2.0 / Polars 1.0.0 and the versions pinned in `requirements-tables.txt`.
54
54
  Both paths check scalar/identity contracts and saved-state SVG reconstruction.
@@ -86,7 +86,9 @@ assert before.to_svg() == old_svg
86
86
  assert doc.compile() is after
87
87
  ```
88
88
 
89
- `place()` changes only placement fields: `x`, `y`, `anchor`, `width`, `height`.
89
+ `place()` changes placement fields: `x`, `y`, `anchor`, `width`, `height` and
90
+ `scale`. Explicit `scale` (dev9) uniformly scales complete artwork, including
91
+ text and strokes; it is separate from fitting a plot to a new width/height.
90
92
  Set `anchor`, `width` or `height` to `None` to restore their unspecified behavior.
91
93
  `replace()` replaces content and keeps its placement and named relationships.
92
94
  Dimension updates through `configure()` validate before mutation; expressions,
@@ -1,6 +1,6 @@
1
- # Inklet 4.0.0.dev8
1
+ # Inklet 4.0.0.dev10
2
2
 
3
- The eighth 4.0 development release includes the linked plotting, mapping,
3
+ The tenth 4.0 development release includes the linked plotting, mapping,
4
4
  engineering and scientific workflows developed since 3.1.0. It is an installable
5
5
  snapshot for trying real examples and reporting problems. **3.1.0 remains the
6
6
  stable release.** The [4.0 roadmap](roadmap.md) still has open work.
@@ -8,7 +8,7 @@ stable release.** The [4.0 roadmap](roadmap.md) still has open work.
8
8
  ```sh
9
9
  python -m venv .venv
10
10
  source .venv/bin/activate
11
- python -m pip install "inklet==4.0.0.dev8"
11
+ python -m pip install "inklet==4.0.0.dev10"
12
12
  ```
13
13
 
14
14
  On Windows PowerShell, activate with `.venv\Scripts\Activate.ps1` instead.
@@ -19,9 +19,9 @@ stable releases; see its [installation documentation](https://pip.pypa.io/en/sta
19
19
  Optional extras can be installed with the same pin:
20
20
 
21
21
  ```sh
22
- python -m pip install "inklet[render,pandas,polars]==4.0.0.dev8"
22
+ python -m pip install "inklet[render,pandas,polars]==4.0.0.dev10"
23
23
  # Add calibrated volumes and TIFF workflows when needed:
24
- python -m pip install "inklet[volume,render]==4.0.0.dev8"
24
+ python -m pip install "inklet[volume,render]==4.0.0.dev10"
25
25
  ```
26
26
 
27
27
  The core preview needs no browser server, NumPy, pandas, Polars or Blender.
@@ -29,7 +29,45 @@ 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
- ## Local layout inspector in dev8
32
+ ## Named labels and callouts in dev10
33
+
34
+ The [local layout editor](layout-editor.md#edit-labels-and-callouts) now edits
35
+ string module captions, text components, keyed plot titles/text/callouts and
36
+ named composition annotations. Callouts expose preferred side, physical
37
+ clearance and leader visibility. Text changes remeasure content and update
38
+ dependent layout and connections through Python.
39
+
40
+ Saved choices contain explicit label keys and kinds. Reordering instructions
41
+ preserves identity; removing a key or changing its kind reports an incompatible
42
+ label. Explicit discard retains compatible edits on the same object. Shared
43
+ definitions share text decisions, while unedited source fields remain live.
44
+
45
+ ![Named callout controls and the compiled figure](assets/guides/layout-editor-labels.png)
46
+
47
+ New files use layout schema 0.3; schemas 0.1 and 0.2 still load. Undo/redo,
48
+ reopening and matching SVG/PDF export include text edits. Axis labels, individual
49
+ callout dragging, camera editing and general object relationships remain open.
50
+
51
+ ## Mouse movement and scaling retained from dev9
52
+
53
+ The [layout editor](layout-editor.md) now supports direct mouse movement and
54
+ proportional corner scaling of named objects and groups. Alt-click selects a
55
+ containing group, arrow keys nudge, and Escape cancels. A drag shows an outline;
56
+ release compiles the actual figure and updates dependent links.
57
+
58
+ Moves preserve measured positions by adding offsets. Scaling keeps the opposite
59
+ corner fixed, including inside scaled groups with different coordinate units.
60
+ Each completed edit participates in undo/redo and saved-layout reconstruction.
61
+ Uniform artwork scaling includes text and strokes; plot width/height controls
62
+ retain their separate typography-preserving layout behavior.
63
+
64
+ ![Mouse selection and proportional scaling in the local editor](assets/guides/layout-editor-gestures.png)
65
+
66
+ Dev9 introduced schema 0.2 for explicit artwork scale. Dev7/dev8 schema 0.1
67
+ files still load. Named composition objects are editable; individual plot marks,
68
+ axis labels, connector segments and camera parameters remain outside this scope.
69
+
70
+ ## Local layout inspector retained from dev8
33
71
 
34
72
  The [local layout editor](layout-editor.md) turns saved composition choices into
35
73
  a browser workflow. Edit named placements and dimensions, preview the actual
@@ -44,8 +82,8 @@ remain consistent across repeated edits and resets.
44
82
 
45
83
  ![The local browser layout inspector](assets/guides/layout-editor.png)
46
84
 
47
- This inspector requires its local Python session. It covers composition layout;
48
- drag handles, label content, plot styling and cameras remain separate work.
85
+ This inspector requires its local Python session. Named label editing is added
86
+ in dev10; individual plot marks and cameras remain separate work.
49
87
  The existing standalone viewers and linked-plot appearance editor retain their
50
88
  current scope.
51
89
 
@@ -162,7 +200,7 @@ The wheel contains the library. To obtain recipes and fixtures, use the matching
162
200
  release checkout or source archive:
163
201
 
164
202
  ```sh
165
- git clone --branch v4.0.0.dev8 https://github.com/Mapika/inklet.git
203
+ git clone --branch v4.0.0.dev10 https://github.com/Mapika/inklet.git
166
204
  cd inklet
167
205
  python -m pip install -e '.[render]'
168
206
  python examples/v4/regional_report.py --renderer compiled --editor --output out/regional
@@ -3,7 +3,7 @@
3
3
  Inklet requires Python 3.11 or later and an installed TrueType/OpenType font.
4
4
  The core Python dependencies are HarfBuzz bindings and fontTools.
5
5
 
6
- This page covers stable **Inklet 3.1** and the opt-in **4.0.0.dev8 preview**. See the
6
+ This page covers stable **Inklet 3.1** and the opt-in **4.0.0.dev9 preview**. See the
7
7
  [compatibility matrix](compatibility.md) for tested platforms and Blender versions.
8
8
 
9
9
  ## From PyPI
@@ -24,9 +24,9 @@ Activate the environment or prefix commands with `.venv/bin/` on Linux/macOS.
24
24
  ## 4.0 development preview
25
25
 
26
26
  ```sh
27
- python -m pip install "inklet==4.0.0.dev8"
27
+ python -m pip install "inklet==4.0.0.dev9"
28
28
  # Optional rendering and DataFrame adapters:
29
- python -m pip install "inklet[render,pandas,polars]==4.0.0.dev8"
29
+ python -m pip install "inklet[render,pandas,polars]==4.0.0.dev9"
30
30
  ```
31
31
 
32
32
  Use a separate virtual environment when trying the preview. Experimental APIs
@@ -1,11 +1,11 @@
1
1
  # Local layout editor
2
2
 
3
- Available in **4.0.0.dev8**, under `inklet.experimental.layout_editor`. Adjust
3
+ Available since **4.0.0.dev8**, with mouse gestures in **4.0.0.dev9** and named label editing in **4.0.0.dev10**, under `inklet.experimental.layout_editor`. Adjust
4
4
  named placements and dimensions in a browser while Python recompiles the
5
5
  actual composition. The preview and downloaded SVG/PDF come from the same
6
6
  compiled figure, including plots, nested diagrams and native 3D content.
7
7
 
8
- ![The local layout inspector editing a mixed-content report](assets/guides/layout-editor.png)
8
+ ![Mouse selection and proportional scaling handles on a native 3D object](assets/guides/layout-editor-gestures.png)
9
9
 
10
10
  The [complete example](../examples/layout_editor.py) opens the reusable report
11
11
  from [composition recipes](composition-recipes.md). From the checkout, run:
@@ -45,12 +45,82 @@ width and height, including its coordinate unit. Optional `width=` and
45
45
  `height=` arguments fix the containing document's dimensions in millimetres;
46
46
  those dimensions remain authoritative when the authored page size changes.
47
47
 
48
+ ## Move and scale with the mouse
49
+
50
+ Click a named object in the preview and drag it to move. Corner handles scale
51
+ its complete artwork proportionally, keeping the opposite corner fixed. This
52
+ works for plots, modules, text, images, native 3D components and nested
53
+ compositions. A dashed outline follows the pointer; release to compile the
54
+ result and update dependent links. Escape or a cancelled pointer gesture leaves
55
+ the figure unchanged. A simple click selects without making an edit.
56
+
57
+ Use Alt-click to select a containing group, or choose its path in **Content**.
58
+ Drag a selected group's outline to move the group. With the canvas focused,
59
+ arrow keys move the selected object by 1 mm in figure space; Shift changes that
60
+ to 10 mm. Mouse and pointer gestures use the same coordinates even inside
61
+ scaled groups or compositions with different coordinate units.
62
+
63
+ Each completed edit is one undo step. Movements add offsets to measured
64
+ positions instead of discarding their relationships. Repeated offsets are
65
+ combined, so a long editing session does not grow ever-deeper expressions.
66
+ Saved layout files retain movement and scaling for Python reconstruction.
67
+
68
+ **Scaling artwork also scales its text and strokes.** To resize a plot's data
69
+ region while retaining physical typography, use the width/height controls
70
+ below. The **Uniform scale** field gives an exact artwork scale factor; Reset
71
+ target restores the original factor and placement.
72
+
73
+ The selectable units are named composition children and groups. Individual
74
+ marks, ticks, axis labels and connector segments remain part of their owning
75
+ plot or diagram. Scaling and movement do not remove authored constraints or
76
+ top-fitting behavior; dependent content can reflow when the compiler rebuilds.
77
+
78
+ ## Edit labels and callouts
79
+
80
+ ![Editing a named plot callout with text, side, clearance and leader controls](assets/guides/layout-editor-labels.png)
81
+
82
+ Select a composition child, then edit its **Label** fields and choose **Apply
83
+ changes**. The editor supports text components created with `component(i.text,
84
+ ...)`, string module captions, and plot `title`, `text` and `annotate`
85
+ instructions with an explicit string `key`. For composition callouts, supply a
86
+ unique `name` and select the composition that owns the callout.
87
+
88
+ ```python
89
+ recipe['chart'].annotate(1, 2, 'Reference observation', key='observation', side='s', clear=4)
90
+ recipe.annotate('caption', 'Measured response', name='response-note', side='e', clear=3)
91
+ editor.command('refresh')
92
+ editor.command('edit', {
93
+ 'path': '/chart',
94
+ 'labels': {'observation': {'kind': 'plot-annotate', 'text': 'Reviewed observation', 'side': 'sw'}},
95
+ })
96
+ ```
97
+
98
+ Callouts expose their preferred compass side, clearance in physical millimetres,
99
+ and leader visibility. Automatic placement can choose another side to avoid
100
+ conflicts. Plot clearance can be left blank to use its automatic value. This
101
+ increment edits callout content and placement preferences; it does not add free
102
+ mouse dragging of individual callouts or axis-label editing.
103
+
104
+ A label's identity is its composition path, explicit key and kind. For example,
105
+ `/chart` plus `observation` identifies a plot annotation even when its instruction
106
+ moves in the recipe. Replacing that key with a different instruction kind is an
107
+ incompatible target. A removed or incompatible label is reported as
108
+ `/chart#observation`; explicit discard drops that label's edits while retaining
109
+ compatible placement and label edits on the same chart. Renaming a path or key
110
+ changes its identity. Reusing the same key and kind declares the same label.
111
+
112
+ Text changes are measured by the Python compiler: longer module captions can
113
+ move dependent modules and reroute their connections. Unedited labels, data
114
+ coordinates, styling and other source choices remain live. Shared definitions
115
+ share label edits; use an independent recipe copy for independent captions.
116
+ Undo/redo, reset, saved JSON and SVG/PDF exports include the label edits.
117
+
48
118
  ## Edit and review
49
119
 
50
120
  Choose a named path in **Content**, enter the fields you want to change, then
51
- select **Apply layout**. Other fields retain their definitions.
121
+ select **Apply changes**. Other fields retain their definitions.
52
122
 
53
- - Child placement fields are X, Y, anchor, width and height. Numbers use the
123
+ - Child placement fields are X, Y, anchor, width, height and uniform scale. Numbers use the
54
124
  containing composition's coordinate unit. For plots, width and height describe
55
125
  the data region; changing them does not scale text or strokes.
56
126
  - A field marked **Measured** still follows its layout expression. Entering a
@@ -91,6 +161,7 @@ import json
91
161
  from pathlib import Path
92
162
 
93
163
  editor.command('edit', {'path': '/chart', 'placement': {'height': 35}})
164
+ editor.command('gesture', {'path': '/chart', 'dx': 2, 'dy': 1})
94
165
  Path('layout-overrides.json').write_text(json.dumps(editor.overrides(), indent=2))
95
166
  editor.figure.save('edited.svg', 'edited.pdf')
96
167
  restored, report = recipe.with_layout_overrides(editor.overrides())
@@ -100,8 +171,10 @@ assert report['orphaned_targets'] == []
100
171
  `editor.figure` is the last successful compiled snapshot and supports the normal
101
172
  [export APIs](export-review.md), including PNG when render dependencies are
102
173
  installed. `overrides()` and `snapshot()` return independently owned data.
103
- Programmatic `command()` accepts `edit`, `reset`, `load`, `undo`, `redo` and
104
- `refresh`; an optional `revision=` rejects stale callers.
174
+ Programmatic `command()` accepts `gesture`, `edit`, `reset`, `load`, `undo`,
175
+ `redo` and `refresh`; an optional `revision=` rejects stale callers. A gesture
176
+ uses figure-space `dx`/`dy` in millimetres. Optional `factor` and `corner`
177
+ (`nw`, `ne`, `sw`, `se`) scale from the opposite corner.
105
178
 
106
179
  ## Refresh changed source content
107
180
 
@@ -130,8 +203,8 @@ remain accessible in Python. The `with LayoutEditor(recipe) as editor:` form
130
203
  starts and closes the server automatically; keep that context alive during
131
204
  browser use.
132
205
 
133
- This first inspector edits composition layout. Drag handles, label content,
134
- plot styling, camera controls, and file watching are not part of this interface.
206
+ The inspector edits named composition layout and artwork scale. Label content,
207
+ individual plot marks, camera controls, and file watching are not part of this interface.
135
208
  The separate [linked-plot appearance editor](visual-editing.md) retains its
136
209
  existing scope. Broader authoring and identity work remains on the
137
210
  [4.0 roadmap](roadmap.md).
@@ -1,6 +1,6 @@
1
1
  # Save and restore layout choices
2
2
 
3
- Available in **4.0.0.dev7**. Save placement and dimension edits separately from
3
+ Available since **4.0.0.dev7**; uniform artwork scale is added in **dev9**, named text and callout decisions in **dev10**. Save placement and dimension edits separately from
4
4
  a [composition recipe](composition-recipes.md), then restore those choices
5
5
  when its data, labels or content change. The saved JSON records only differences
6
6
  from a reference recipe. Unedited source decisions remain in control.
@@ -21,7 +21,7 @@ Python APIs below or the [local inspector](layout-editor.md) in dev8. This forma
21
21
 
22
22
  Keep a reference recipe, copy it, then edit placements. The reference and edited
23
23
  recipe must have the same named composition structure when capturing changes.
24
- Content and styles can differ; they are not serialized into the layout file.
24
+ Supported named label differences are captured too. Other content and styles are not serialized into the layout file.
25
25
 
26
26
  ```python
27
27
  import json
@@ -41,7 +41,7 @@ Path('layout.json').write_text(json.dumps(state, indent=2, allow_nan=False))
41
41
  ```
42
42
 
43
43
  `layout_overrides(reference)` captures changed `x`, `y`, `anchor`, `width` and
44
- `height` fields on children, plus `width`, `height`, `unit` and `fit_top` on
44
+ `height` and uniform `scale` fields on children, plus `width`, `height`, `unit` and `fit_top` on
45
45
  compositions. It visits nested compositions through their named children.
46
46
  Measured expressions remain expressions, so page resizing and dependent
47
47
  content measurements still work after reopening.
@@ -52,6 +52,25 @@ identity within the recipe hierarchy. Renaming or moving a target changes its
52
52
  identity. Definitions hidden inside component factories or other BuildSpecs
53
53
  are not traversed.
54
54
 
55
+ ## Named label decisions
56
+
57
+ Changed string module captions and text components are captured alongside layout.
58
+ Plot titles, text and annotations require explicit string instruction keys;
59
+ composition annotations require unique names. See the [label editor](layout-editor.md#edit-labels-and-callouts)
60
+ for controls, identity rules and an executable example. Captures compare only
61
+ matching label keys and kinds; they do not serialize added or removed content.
62
+
63
+ A saved label entry includes its kind and only the fields that changed:
64
+
65
+ ```json
66
+ {"schema":"inklet.composition-layout/0.3","targets":{"/caption":{"labels":{"label":{"kind":"module-label","text":"Reviewed response"}}}}}
67
+ ```
68
+
69
+ Readers accept legacy schemas 0.1 and 0.2. New captures use 0.3; older readers
70
+ must be upgraded before opening them. Label fields are rejected under older
71
+ schema identifiers. Removed/incompatible labels appear as `path#key` in the
72
+ orphan report. Explicit `missing='drop'` retains compatible edits on that path.
73
+
55
74
  ## Restore on the current recipe
56
75
 
57
76
  ```python
@@ -85,7 +104,7 @@ updated_figure = render(updated)
85
104
  updated_figure.save('updated.svg')
86
105
  ```
87
106
 
88
- The file stores layout decisions, not content, datasets, labels, plot styles,
107
+ The file stores layout and supported label decisions, not datasets, plot styles,
89
108
  links, ports, constraints, factories or camera parameters. Keep the Python
90
109
  recipe and its assets alongside it. The containing document can supply its own
91
110
  render dimensions; restoring authored page dimensions does not override that
@@ -123,9 +142,12 @@ of 32 operations. Malformed files, nonfinite numbers, invalid properties and
123
142
  contradictory edits to a shared nested definition are rejected, including when
124
143
  `missing='drop'` is used.
125
144
 
126
- The schema identifier is `inklet.composition-layout/0.1`. Unknown schemas are
127
- rejected. The file is a JSON object with `schema` and `targets`; each target has
128
- changed `placement` and/or `page` fields. It is a development-preview format,
145
+ New files use `inklet.composition-layout/0.3`, adding named label decisions to
146
+ 0.2's positive uniform artwork scale. The loader also accepts 0.1 files from
147
+ dev7/dev8 (without scale) and 0.2 files from dev9 (without labels). Unknown
148
+ schemas are rejected. Upgrade older readers before opening a 0.3 file.
149
+ The JSON object contains `schema` and `targets`; each target has changed
150
+ `placement`, `page` and/or `labels` fields. This development-preview format is
129
151
  not a general Python object serializer or an asset manifest.
130
152
 
131
153
  ## Review revised content
@@ -58,8 +58,12 @@ Dev7 adds [saved layout overrides](layout-overrides.md) keyed by named paths,
58
58
  with measured expressions, independent restoration and explicit orphan reports.
59
59
  Dev8 adds a [local layout inspector](layout-editor.md) backed by Python
60
60
  compilation, with saved choices, undo/redo and explicit source refresh.
61
- Serialized project templates, asset manifests, shared selection relationships,
62
- label/camera editing and direct manipulation remain open. Subsequent work
61
+ Dev9 adds mouse movement, proportional artwork scaling and keyboard nudges
62
+ for named composition children, with preserved measured positions and saved
63
+ choices. Dev10 adds saved named text and callout editing across modules, text
64
+ components, keyed plot instructions and composition annotations, including typed
65
+ identity reconciliation. Serialized project templates, asset manifests, shared selection
66
+ relationships, axis-label/camera editing and finer-grained manipulation remain open. Subsequent work
63
67
  should extend authoring and cross-content identity beyond this bounded inspector.
64
68
 
65
69
  ## Who this should serve
@@ -10,6 +10,7 @@ def main():
10
10
  parser.add_argument('--port',type=int,default=0,help='Local port; 0 chooses an available port')
11
11
  args=parser.parse_args()
12
12
  reports,_=make_reports()
13
+ reports[0]['chart'].annotate(2,3,'Reference observation',key='observation',side='s',clear=4)
13
14
  with LayoutEditor(reports[0],preset='scientific.general').start(port=args.port) as editor:
14
15
  print(f'Open {editor.url} — press Ctrl+C to stop.',flush=True)
15
16
  try:threading.Event().wait()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "inklet"
3
- version = "4.0.0.dev8"
3
+ version = "4.0.0.dev10"
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.dev8"
473
+ __version__ = "4.0.0.dev10"
@@ -12,6 +12,12 @@ from .spec import BuildSpec, ComponentSpec, fingerprint, freeze, length
12
12
  from .compiler import LayoutError
13
13
 
14
14
 
15
+ def _scale(value):
16
+ if type(value) not in (int,float) or not math.isfinite(value) or value<=0:
17
+ raise ValueError('component scale must be a finite positive number')
18
+ return float(value)
19
+
20
+
15
21
  @dataclass(frozen=True)
16
22
  class _Slot(BuildSpec):
17
23
  name: str
@@ -66,6 +72,7 @@ class _Part:
66
72
  anchor: str | None = None
67
73
  width: object = None
68
74
  height: object = None
75
+ scale: float = 1
69
76
 
70
77
 
71
78
  @dataclass(eq=False)
@@ -76,7 +83,8 @@ class Composition(BuildSpec):
76
83
  and height describe data regions. Other children retain their authored size
77
84
  unless explicit dimensions are provided. `anchor=None` preserves the local
78
85
  coordinate frame; `nw`, `center`, registered ports and `area-nw` align a
79
- measured point to (x, y). Layout never scales text or strokes.
86
+ measured point to (x, y). Dimension fitting never scales text or strokes. Explicit scale uniformly
87
+ scales the complete child artwork, including typography and strokes.
80
88
  """
81
89
  width: float
82
90
  height: float
@@ -109,11 +117,11 @@ class Composition(BuildSpec):
109
117
  """Reference a placed child's compass point or registered port."""
110
118
  return tuple(LayoutValue('point', (name, anchor, axis)) for axis in ('x', 'y'))
111
119
 
112
- def add(self, name, item, *, x=0, y=0, anchor=None, width=None, height=None):
120
+ def add(self, name, item, *, x=0, y=0, anchor=None, width=None, height=None, scale=1):
113
121
  if not isinstance(name, str) or not re.fullmatch(r'[A-Za-z][A-Za-z0-9_-]*', name):
114
122
  raise ValueError('component names start with a letter and contain letters, digits, underscores or hyphens')
115
123
  if any(part.name == name for part in self._parts): raise LayoutError(f'duplicate component {name!r}')
116
- self._parts.append(_Part(name, item, x, y, anchor, width, height))
124
+ self._parts.append(_Part(name, item, x, y, anchor, width, height, _scale(scale)))
117
125
  return item
118
126
 
119
127
  def __getitem__(self, name):
@@ -171,12 +179,13 @@ class Composition(BuildSpec):
171
179
  def place(self, name, **placement):
172
180
  """Edit a child's placement without replacing its content or named links.
173
181
 
174
- Accepts x, y, anchor, width and height as in add(). Expressions and
182
+ Accepts x, y, anchor, width, height and uniform scale as in add(). Expressions and
175
183
  resulting geometry are validated during compilation.
176
184
  """
177
185
  from dataclasses import replace
178
- unknown = placement.keys() - {'x','y','anchor','width','height'}
186
+ unknown = placement.keys() - {'x','y','anchor','width','height','scale'}
179
187
  if unknown: raise TypeError(f'unknown placement options: {", ".join(sorted(unknown))}')
188
+ if 'scale' in placement: placement['scale'] = _scale(placement['scale'])
180
189
  for index,part in enumerate(self._parts):
181
190
  if part.name == name:
182
191
  self._parts[index] = replace(part, **freeze(placement))
@@ -184,10 +193,10 @@ class Composition(BuildSpec):
184
193
  raise KeyError(name)
185
194
 
186
195
  def layout_overrides(self, reference):
187
- """Capture changed placements and page fields against a matching reference.
196
+ """Capture changed layout and compatible named labels against a reference.
188
197
 
189
198
  Return JSON-compatible, versioned decisions keyed by named child paths.
190
- Content, styles, data, links and constraints remain in the Python recipe.
199
+ Other content, styles, data, links and constraints remain in Python.
191
200
  """
192
201
  from .layout_overrides import capture
193
202
  return capture(self, reference)
@@ -225,7 +234,12 @@ class Composition(BuildSpec):
225
234
  return self
226
235
 
227
236
  def annotate(self, target, text, **options):
228
- """Place a measured callout after every child and connection exists."""
237
+ """Place a measured callout; a unique name enables saved label editing."""
238
+ name = options.get('name')
239
+ if name is not None:
240
+ if not isinstance(name,str) or not name: raise ValueError('annotation name must be a nonempty string')
241
+ if any(opts.get('name')==name for _,_,opts in self._annotations):
242
+ raise LayoutError(f'duplicate annotation name {name!r}')
229
243
  self._annotations.append((target, text, freeze(options)))
230
244
  return self
231
245
 
@@ -282,7 +296,15 @@ class Composition(BuildSpec):
282
296
  item = ComponentSpec(item.factory, evaluate(item.args), evaluate(item.kwargs), item.responsive)
283
297
  w = None if part.width is None else length(evaluate(part.width), 'child width')*self.unit
284
298
  h = None if part.height is None else length(evaluate(part.height), 'child height')*self.unit
285
- return context.build(item, w, h).copy()
299
+ node = context.build(item, w, h).copy()
300
+ factor = _scale(part.scale)
301
+ if factor != 1:
302
+ scaled = node.scaled(factor)
303
+ # Keep registered ports directly available to measured
304
+ # placement; their coordinates precede the new scale.
305
+ for key in node.anchors: scaled.anchors[key] = placed_anchor(node,key)
306
+ node = scaled
307
+ return node
286
308
  built[name] = guarded('measure', name, perform)
287
309
  return built[name]
288
310