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