inklet 4.0.0.dev11__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 (997) hide show
  1. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.github/workflows/publish.yml +2 -2
  2. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/CHANGELOG.md +16 -0
  3. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/PKG-INFO +6 -6
  4. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/README.md +5 -5
  5. inklet-4.0.0.dev12/docs/assets/guides/editor-studio.png +0 -0
  6. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/development-preview.md +25 -7
  7. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/layout-editor.md +43 -12
  8. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/roadmap.md +3 -1
  9. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/pyproject.toml +1 -1
  10. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/__init__.py +1 -1
  11. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/layout_editor/__init__.py +4 -2
  12. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/layout_editor/gestures.js +3 -3
  13. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/layout_editor/page.html +29 -25
  14. inklet-4.0.0.dev12/src/inklet/experimental/layout_editor/workspace.css +156 -0
  15. inklet-4.0.0.dev12/src/inklet/experimental/layout_editor/workspace.js +71 -0
  16. inklet-4.0.0.dev12/tests/test_editor_workspace.py +45 -0
  17. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_gestures.py +2 -2
  18. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/check_wheel.py +1 -0
  19. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_gallery.json +3 -3
  20. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.gitattributes +0 -0
  21. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.github/workflows/checks.yml +0 -0
  22. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.gitignore +0 -0
  23. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/.readthedocs.yaml +0 -0
  24. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/CONTRACT.md +0 -0
  25. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/CONTRIBUTING.md +0 -0
  26. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/LICENSE +0 -0
  27. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/THIRD_PARTY_NOTICES.md +0 -0
  28. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/api.md +0 -0
  29. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-icon.svg +0 -0
  30. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-logo-dark.svg +0 -0
  31. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-logo-mono.svg +0 -0
  32. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-logo.svg +0 -0
  33. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/brand/inklet-wordmark.svg +0 -0
  34. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/examples/quickstart.pdf +0 -0
  35. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/examples/quickstart.png +0 -0
  36. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/examples/quickstart.svg +0 -0
  37. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/axes-and-scales-1.png +0 -0
  38. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/calibrated-volumes-3.png +0 -0
  39. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/channels-and-contours-1.png +0 -0
  40. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/composition-recipes-narrow.png +0 -0
  41. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/composition-recipes.html +0 -0
  42. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/composition-recipes.png +0 -0
  43. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-anchor.png +0 -0
  44. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-annotation.png +0 -0
  45. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
  46. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-branch.png +0 -0
  47. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-broken-axis.png +0 -0
  48. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-callout.png +0 -0
  49. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-clipping.png +0 -0
  50. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-creases.png +0 -0
  51. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-custom-key.png +0 -0
  52. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-cutout.png +0 -0
  53. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-dates.png +0 -0
  54. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-dense.png +0 -0
  55. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-elbows.png +0 -0
  56. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
  57. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-facets.png +0 -0
  58. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-fit-graph.png +0 -0
  59. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-flow-width.png +0 -0
  60. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-formula.png +0 -0
  61. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-graph.png +0 -0
  62. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-halo.png +0 -0
  63. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-heatmap.png +0 -0
  64. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-hole.png +0 -0
  65. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-inline-type.png +0 -0
  66. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-inset.png +0 -0
  67. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-labels.png +0 -0
  68. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-layers.png +0 -0
  69. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-letters.png +0 -0
  70. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-list.png +0 -0
  71. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-matrix.png +0 -0
  72. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-page-grid.png +0 -0
  73. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-polar.png +0 -0
  74. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-protein.png +0 -0
  75. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-routes.png +0 -0
  76. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
  77. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-scene.png +0 -0
  78. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-series-key.png +0 -0
  79. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-span.png +0 -0
  80. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
  81. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-swarm.png +0 -0
  82. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-text-path.png +0 -0
  83. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-toon.png +0 -0
  84. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-twin-axis.png +0 -0
  85. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
  86. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-violin.png +0 -0
  87. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
  88. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/data-1.png +0 -0
  89. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/data-3.png +0 -0
  90. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/dense-data-1.png +0 -0
  91. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/diagram-components-1.png +0 -0
  92. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/diagrams-1.png +0 -0
  93. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-3.png +0 -0
  94. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor-gestures.png +0 -0
  95. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor-labels.png +0 -0
  96. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor-styles.png +0 -0
  97. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-editor.png +0 -0
  98. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-restored.html +0 -0
  99. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-restored.png +0 -0
  100. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/layout-revised.png +0 -0
  101. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/oblique-sections-2.png +0 -0
  102. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-composition-narrow.png +0 -0
  103. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-composition.html +0 -0
  104. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-composition.png +0 -0
  105. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-quality-after.png +0 -0
  106. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plot-quality-before.png +0 -0
  107. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-band.png +0 -0
  108. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-bars.png +0 -0
  109. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-boxplot.png +0 -0
  110. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-errorbars.png +0 -0
  111. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-fill-between.png +0 -0
  112. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-fill.png +0 -0
  113. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-grouped-bars.png +0 -0
  114. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-hist.png +0 -0
  115. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-horizontal-bars.png +0 -0
  116. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-line-errors.png +0 -0
  117. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-line.png +0 -0
  118. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-markers.png +0 -0
  119. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-matrix.png +0 -0
  120. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-polar-curve.png +0 -0
  121. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-rose.png +0 -0
  122. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-scatter.png +0 -0
  123. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-series.png +0 -0
  124. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-stackarea.png +0 -0
  125. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-stacked-bars.png +0 -0
  126. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-step.png +0 -0
  127. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-swarm.png +0 -0
  128. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plots-violin.png +0 -0
  129. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plotting-1.png +0 -0
  130. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/plotting-2.png +0 -0
  131. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-1.png +0 -0
  132. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-2.png +0 -0
  133. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-3.png +0 -0
  134. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/publication-plots-4.png +0 -0
  135. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/slabs-and-regions-1.png +0 -0
  136. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/three-images-1.png +0 -0
  137. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/guides/three-images-2.png +0 -0
  138. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/biology.json +0 -0
  139. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-after.json +0 -0
  140. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-before.json +0 -0
  141. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-caption.tex +0 -0
  142. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-lines-after.json +0 -0
  143. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/clipping-lines-before.json +0 -0
  144. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/comparison.json +0 -0
  145. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-marker-shapes-caption.tex +0 -0
  146. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-marker-shapes.html +0 -0
  147. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-markers-display.json +0 -0
  148. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-markers-hardware.json +0 -0
  149. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-scene-viewer.html +0 -0
  150. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-viewer-display.json +0 -0
  151. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-viewer-export.json +0 -0
  152. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compiled-viewer-study.json +0 -0
  153. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compositing-after.json +0 -0
  154. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compositing-before.json +0 -0
  155. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/compositing-caption.tex +0 -0
  156. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/dense-scatter-caption.tex +0 -0
  157. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/diagram-after.json +0 -0
  158. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/diagram-before.json +0 -0
  159. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
  160. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/engine-after.json +0 -0
  161. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/engine-before.json +0 -0
  162. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/engine-review-caption.tex +0 -0
  163. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/fluorescence-biology.json +0 -0
  164. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/general-plots-caption.tex +0 -0
  165. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/general-plots.json +0 -0
  166. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/hatch-after.json +0 -0
  167. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/hatch-before.json +0 -0
  168. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/hatch-caption.tex +0 -0
  169. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
  170. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/label-intensities-native.csv +0 -0
  171. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/label-intensities.json +0 -0
  172. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/lines-after.json +0 -0
  173. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/lines-before.json +0 -0
  174. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-batches.json +0 -0
  175. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-after.json +0 -0
  176. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-before.json +0 -0
  177. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-browser-after.json +0 -0
  178. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/marker-index-browser-before.json +0 -0
  179. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/oblique-biology.json +0 -0
  180. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
  181. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/real-biology.json +0 -0
  182. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/render-scene-caption.tex +0 -0
  183. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/revision.json +0 -0
  184. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/scenes-after.json +0 -0
  185. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/scenes-before.json +0 -0
  186. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/slab-biology.json +0 -0
  187. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/study.json +0 -0
  188. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-after.json +0 -0
  189. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-before.json +0 -0
  190. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-gpu-after.json +0 -0
  191. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-culling-gpu-before.json +0 -0
  192. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-after.json +0 -0
  193. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-before.json +0 -0
  194. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-display.json +0 -0
  195. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-redraw-profile.json +0 -0
  196. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-window-after.json +0 -0
  197. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-window-before.json +0 -0
  198. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/research-preview/viewer-window-display.json +0 -0
  199. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/after.json +0 -0
  200. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/before.json +0 -0
  201. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-quality.json +0 -0
  202. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-scatter.html +0 -0
  203. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-scatter.png +0 -0
  204. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/browser-study.json +0 -0
  205. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
  206. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines-masked.png +0 -0
  207. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines.html +0 -0
  208. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/contours-streamlines.png +0 -0
  209. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/engineering-report-170mm.png +0 -0
  210. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/engineering-report.html +0 -0
  211. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/engineering-report.png +0 -0
  212. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/faceted-operations.html +0 -0
  213. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/faceted-operations.png +0 -0
  214. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-dashboard.html +0 -0
  215. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-dashboard.png +0 -0
  216. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-selection.html +0 -0
  217. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/linked-selection.png +0 -0
  218. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/mesh-fields-170mm.png +0 -0
  219. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/mesh-fields.html +0 -0
  220. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/mesh-fields.png +0 -0
  221. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/region-shapes.html +0 -0
  222. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/region-shapes.png +0 -0
  223. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-analysis.html +0 -0
  224. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-analysis.png +0 -0
  225. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-report-160mm.png +0 -0
  226. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-report.html +0 -0
  227. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/regional-report.png +0 -0
  228. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/scientific-report-170mm.png +0 -0
  229. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/scientific-report.html +0 -0
  230. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/scientific-report.png +0 -0
  231. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/statistical-views.html +0 -0
  232. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/statistical-views.png +0 -0
  233. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/table-inputs.html +0 -0
  234. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/table-inputs.png +0 -0
  235. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/time-series.html +0 -0
  236. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/time-series.png +0 -0
  237. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/transport-map.html +0 -0
  238. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/transport-map.png +0 -0
  239. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/visual-overrides.png +0 -0
  240. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-2019.html +0 -0
  241. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-2019.json +0 -0
  242. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-2019.png +0 -0
  243. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-revisions.html +0 -0
  244. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population-revisions.png +0 -0
  245. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population.html +0 -0
  246. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/assets/v4/world-population.png +0 -0
  247. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/axes-and-scales.md +0 -0
  248. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/bars-and-areas.md +0 -0
  249. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/biology-panels.md +0 -0
  250. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/blender-scenes.md +0 -0
  251. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/brand.md +0 -0
  252. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/browser-rendering.md +0 -0
  253. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/calibrated-volumes.md +0 -0
  254. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/channels-and-contours.md +0 -0
  255. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/cli.md +0 -0
  256. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/clipping.md +0 -0
  257. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compatibility.md +0 -0
  258. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compiled-scenes.md +0 -0
  259. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compiled-viewer.md +0 -0
  260. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/complex-scene.md +0 -0
  261. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/compositing.md +0 -0
  262. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/composition-recipes.md +0 -0
  263. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/concepts.md +0 -0
  264. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/contours-streamlines.md +0 -0
  265. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/cookbook.md +0 -0
  266. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/data-revisions.md +0 -0
  267. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/data.md +0 -0
  268. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/dense-data.md +0 -0
  269. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/browser-backends.md +0 -0
  270. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/page_grid.md +0 -0
  271. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/v2.md +0 -0
  272. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/design/v4.md +0 -0
  273. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/diagram-components.md +0 -0
  274. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/diagram-engine.md +0 -0
  275. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/diagrams.md +0 -0
  276. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/distributions.md +0 -0
  277. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/engineering-report.md +0 -0
  278. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/example-library.md +0 -0
  279. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/examples.md +0 -0
  280. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/export-review.md +0 -0
  281. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/fluorescence-biology.md +0 -0
  282. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/general-plots.md +0 -0
  283. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/geographic-features.md +0 -0
  284. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/hatching.md +0 -0
  285. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/index.md +0 -0
  286. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/installation.md +0 -0
  287. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/interactive-documents.md +0 -0
  288. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/javascripts/inklet.js +0 -0
  289. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/label-intensities.md +0 -0
  290. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/label-measurements.md +0 -0
  291. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/layout-overrides.md +0 -0
  292. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/layout.md +0 -0
  293. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/lines-and-points.md +0 -0
  294. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/linked-facets.md +0 -0
  295. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/linked-maps.md +0 -0
  296. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/linked-plots.md +0 -0
  297. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/marker-batches.md +0 -0
  298. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/marker-culling.md +0 -0
  299. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/matrices.md +0 -0
  300. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/mesh-fields.md +0 -0
  301. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/microscopy-tiff.md +0 -0
  302. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/migration.md +0 -0
  303. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/oblique-biology.md +0 -0
  304. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/oblique-sections.md +0 -0
  305. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plot-quality.md +0 -0
  306. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plot-recipes.md +0 -0
  307. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plot-types.md +0 -0
  308. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plotting-engine.md +0 -0
  309. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/plotting.md +0 -0
  310. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/polar-plots.md +0 -0
  311. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/presets.md +0 -0
  312. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/publication-plots.md +0 -0
  313. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/quickstart.md +0 -0
  314. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/real-biology.md +0 -0
  315. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/architecture-sketch.md +0 -0
  316. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/architecture.md +0 -0
  317. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/attractor.md +0 -0
  318. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/helix.md +0 -0
  319. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/interference.md +0 -0
  320. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/lattice.md +0 -0
  321. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/photonics.md +0 -0
  322. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/recipes/wave-packets.md +0 -0
  323. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/regional-report.md +0 -0
  324. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/release-checks.md +0 -0
  325. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/render-jobs.md +0 -0
  326. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/rendering-engine.md +0 -0
  327. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/research-preview.md +0 -0
  328. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/research-revision.md +0 -0
  329. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/research-study.md +0 -0
  330. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scene-annotations.md +0 -0
  331. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scene-paths.md +0 -0
  332. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scene-templates.md +0 -0
  333. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/scientific-report.md +0 -0
  334. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/showcase.md +0 -0
  335. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/slab-biology.md +0 -0
  336. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/slabs-and-regions.md +0 -0
  337. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/statistical-views.md +0 -0
  338. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/stress20.md +0 -0
  339. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/stylesheets/code.css +0 -0
  340. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/stylesheets/inklet.css +0 -0
  341. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/table-inputs.md +0 -0
  342. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/three-images.md +0 -0
  343. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/time-series.md +0 -0
  344. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/troubleshooting.md +0 -0
  345. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/uncertainty.md +0 -0
  346. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v2.5.md +0 -0
  347. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v2.md +0 -0
  348. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v3.md +0 -0
  349. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/v4-foundations.md +0 -0
  350. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/visual-editing.md +0 -0
  351. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/docs/world-map.md +0 -0
  352. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/README.md +0 -0
  353. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/cells3d.lock.json +0 -0
  354. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/data.py +0 -0
  355. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/fluorescence.py +0 -0
  356. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/organelle.lock.json +0 -0
  357. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology/requirements.txt +0 -0
  358. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/biology_panels.py +0 -0
  359. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/complex_lab_scene.py +0 -0
  360. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/lab_scene.py +0 -0
  361. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/occlusion_scene.py +0 -0
  362. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/organelle_scene.py +0 -0
  363. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/blender/research_lab_views.py +0 -0
  364. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/broken_axis.py +0 -0
  365. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/clipping_review.py +0 -0
  366. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/compiled_marker_shapes.py +0 -0
  367. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/compiled_scene_viewer.py +0 -0
  368. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/compositing_review.py +0 -0
  369. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/composition_recipes.py +0 -0
  370. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/benchmark.csv +0 -0
  371. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/learning.csv +0 -0
  372. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/revenue.csv +0 -0
  373. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/data/general-plots/sensor.csv +0 -0
  374. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/dense_scatter_review.py +0 -0
  375. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/diagram_review.py +0 -0
  376. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/engine_review.py +0 -0
  377. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/feature_flow.py +0 -0
  378. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/fluorescence_biology.py +0 -0
  379. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/gallery.py +0 -0
  380. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/general_plots.py +0 -0
  381. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/graph.py +0 -0
  382. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/hatch_review.py +0 -0
  383. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/hello_figure.py +0 -0
  384. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/label_intensities.py +0 -0
  385. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/layout_editor.py +0 -0
  386. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/oblique_biology.py +0 -0
  387. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/panels.py +0 -0
  388. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/plot_composition.py +0 -0
  389. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/plot_engine_review.py +0 -0
  390. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/plot_quality_review.py +0 -0
  391. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/polar.py +0 -0
  392. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/preset_formats.py +0 -0
  393. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/presets.py +0 -0
  394. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/real_biology.py +0 -0
  395. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/render_scene_review.py +0 -0
  396. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/render_smoke.py +0 -0
  397. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/research_figure_planner.py +0 -0
  398. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/research_planner_study.py +0 -0
  399. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/research_revision.py +0 -0
  400. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/README.md +0 -0
  401. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/assets.lock.json +0 -0
  402. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/blender_scenes.py +0 -0
  403. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/showcase/figures.py +0 -0
  404. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/slab_biology.py +0 -0
  405. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/state_machine.py +0 -0
  406. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/stress20.py +0 -0
  407. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v25_document.py +0 -0
  408. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v2_cases.py +0 -0
  409. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v2_document.py +0 -0
  410. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_complex_scene.py +0 -0
  411. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_render_jobs.py +0 -0
  412. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_rendering.py +0 -0
  413. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_annotations.py +0 -0
  414. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_passes.py +0 -0
  415. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_paths.py +0 -0
  416. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v3_scene_templates.py +0 -0
  417. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/README.md +0 -0
  418. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/browser_scatter.py +0 -0
  419. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/contours_streamlines.py +0 -0
  420. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/data/world-countries.geojson +0 -0
  421. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/data/world-map-source.json +0 -0
  422. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/data/world-population.csv +0 -0
  423. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/engineering_report.py +0 -0
  424. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/faceted_operations.py +0 -0
  425. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/assembly.json +0 -0
  426. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/manifest.json +0 -0
  427. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/measurement.json +0 -0
  428. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/region-shapes.geojson +0 -0
  429. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/regions.csv +0 -0
  430. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/regions.geojson +0 -0
  431. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/fixtures/transport.geojson +0 -0
  432. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/linked_dashboard.py +0 -0
  433. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/linked_selection.html +0 -0
  434. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/linked_selection.py +0 -0
  435. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/mesh_fields.py +0 -0
  436. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/region_shapes.py +0 -0
  437. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/regional_analysis.py +0 -0
  438. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/regional_report.py +0 -0
  439. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/scientific_report.py +0 -0
  440. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/statistical_views.py +0 -0
  441. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/table_inputs.py +0 -0
  442. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/time_series.py +0 -0
  443. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/transport_map.py +0 -0
  444. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/examples/v4/world_population.py +0 -0
  445. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/annot.py +0 -0
  446. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/bio3d.py +0 -0
  447. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/cartoon.py +0 -0
  448. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/chem_data.py +0 -0
  449. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/chem_fingerprints.py +0 -0
  450. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/data/1m17-kinase.pdb +0 -0
  451. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/data/README.md +0 -0
  452. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/drug_discovery.py +0 -0
  453. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/mouse_brain_data.py +0 -0
  454. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/neural_activity.py +0 -0
  455. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/pdbfile.py +0 -0
  456. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/showcase_part.py +0 -0
  457. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/showcase_process.py +0 -0
  458. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/showcase_season.py +0 -0
  459. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/structure.py +0 -0
  460. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/structure_data.py +0 -0
  461. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/target.py +0 -0
  462. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/figures/trial.py +0 -0
  463. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/README.md +0 -0
  464. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/biology-panels.png +0 -0
  465. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/chem_fingerprints.png +0 -0
  466. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/clipping-review.png +0 -0
  467. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-marker-shapes.png +0 -0
  468. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-scene-viewer.png +0 -0
  469. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-viewer-culling.png +0 -0
  470. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compiled-viewer-deep-zoom.png +0 -0
  471. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compositing-pdf-after.png +0 -0
  472. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compositing-pdf-before.png +0 -0
  473. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/compositing-review.png +0 -0
  474. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/dense-scatter-review.png +0 -0
  475. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/diagram-labels-after.png +0 -0
  476. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/diagram-labels-before.png +0 -0
  477. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/diagram-review.png +0 -0
  478. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/engine-review.png +0 -0
  479. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/engine-transparency-after.png +0 -0
  480. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/engine-transparency-before.png +0 -0
  481. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/flow.png +0 -0
  482. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/fluorescence-biology.png +0 -0
  483. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/general-plots-before.png +0 -0
  484. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/general-plots.png +0 -0
  485. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-pdf-after.png +0 -0
  486. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-pdf-before.png +0 -0
  487. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-review.png +0 -0
  488. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/hatch-svg-before.png +0 -0
  489. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/label-intensities.png +0 -0
  490. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/oblique-biology.png +0 -0
  491. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/part.png +0 -0
  492. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plot-axis-after.png +0 -0
  493. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plot-axis-before.png +0 -0
  494. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plot-engine-review.png +0 -0
  495. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/plots.png +0 -0
  496. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/polar.png +0 -0
  497. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/preset-formats.png +0 -0
  498. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/presets.png +0 -0
  499. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/process.png +0 -0
  500. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/real-biology.png +0 -0
  501. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/render-scene-data.png +0 -0
  502. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/render-scene-initial.png +0 -0
  503. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/render-scene-review.png +0 -0
  504. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-crossing-revision.png +0 -0
  505. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-figure-planner.png +0 -0
  506. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-planner-study.png +0 -0
  507. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/research-revision.png +0 -0
  508. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/season.png +0 -0
  509. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-architecture-sketch.png +0 -0
  510. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-architecture.png +0 -0
  511. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-attractor.png +0 -0
  512. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-helix.png +0 -0
  513. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-interference.png +0 -0
  514. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-lattice.png +0 -0
  515. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-photonics.png +0 -0
  516. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/showcase-wave-packets.png +0 -0
  517. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/slab-biology.png +0 -0
  518. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/stress20.png +0 -0
  519. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/structure.png +0 -0
  520. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-complex-scene.png +0 -0
  521. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-render-jobs.png +0 -0
  522. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-rendering.png +0 -0
  523. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-annotations.png +0 -0
  524. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-passes.png +0 -0
  525. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-paths.png +0 -0
  526. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/gallery/v3-scene-templates.png +0 -0
  527. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/mkdocs.yml +0 -0
  528. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/requirements-ci.txt +0 -0
  529. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/requirements-docs.txt +0 -0
  530. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/requirements-tables.txt +0 -0
  531. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/scripts/bench_svg.py +0 -0
  532. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/scripts/rasterise.sh +0 -0
  533. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/scripts/sanity_typeset.py +0 -0
  534. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/__main__.py +0 -0
  535. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/__init__.py +0 -0
  536. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/asset.py +0 -0
  537. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/cache.py +0 -0
  538. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/cutout.py +0 -0
  539. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/deps.py +0 -0
  540. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/harmonise.py +0 -0
  541. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/lineart.py +0 -0
  542. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/mask.py +0 -0
  543. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/provenance.py +0 -0
  544. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/raster.py +0 -0
  545. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/sidecar.py +0 -0
  546. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/assets/silhouette.py +0 -0
  547. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/cli.py +0 -0
  548. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/components.py +0 -0
  549. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/__init__.py +0 -0
  550. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/batch.py +0 -0
  551. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/diagram.py +0 -0
  552. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/envelope.py +0 -0
  553. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/geom.py +0 -0
  554. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/prims.py +0 -0
  555. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/style.py +0 -0
  556. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/trace.py +0 -0
  557. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/core/units.py +0 -0
  558. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/__init__.py +0 -0
  559. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/abut.py +0 -0
  560. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/break_rules.py +0 -0
  561. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/color.py +0 -0
  562. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/cross.py +0 -0
  563. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/image.py +0 -0
  564. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/key_rules.py +0 -0
  565. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/link_rules.py +0 -0
  566. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/path_rules.py +0 -0
  567. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/plot_rules.py +0 -0
  568. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/report.py +0 -0
  569. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/rules.py +0 -0
  570. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/diagnostics/three_rules.py +0 -0
  571. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/__init__.py +0 -0
  572. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/compiler.py +0 -0
  573. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/composition.py +0 -0
  574. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/data.py +0 -0
  575. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/data_io.py +0 -0
  576. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/label_overrides.py +0 -0
  577. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/layout_overrides.py +0 -0
  578. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/module.py +0 -0
  579. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/presets.py +0 -0
  580. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/publication.py +0 -0
  581. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/spec.py +0 -0
  582. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/document/style_overrides.py +0 -0
  583. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/__init__.py +0 -0
  584. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/annotate.py +0 -0
  585. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/bezier_clip.py +0 -0
  586. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/clip.py +0 -0
  587. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/coords.py +0 -0
  588. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/path.py +0 -0
  589. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/place.py +0 -0
  590. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/draw/shapes.py +0 -0
  591. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/__init__.py +0 -0
  592. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/_table_adapters.py +0 -0
  593. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/__init__.py +0 -0
  594. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/compiled.js +0 -0
  595. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/compiled.py +0 -0
  596. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/drawings.py +0 -0
  597. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/editor.html +0 -0
  598. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/editor.js +0 -0
  599. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/fields.py +0 -0
  600. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/geography.py +0 -0
  601. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/grid.py +0 -0
  602. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/images.py +0 -0
  603. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/overrides.py +0 -0
  604. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/page.html +0 -0
  605. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/regions.py +0 -0
  606. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/runtime.js +0 -0
  607. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/series.py +0 -0
  608. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/browser/timeaxis.py +0 -0
  609. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/channels.py +0 -0
  610. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/contours.py +0 -0
  611. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/engineering.py +0 -0
  612. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/fields.py +0 -0
  613. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/figure_planner.py +0 -0
  614. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/grid.py +0 -0
  615. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/measurement.py +0 -0
  616. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/measurements.py +0 -0
  617. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/planner_geometry.py +0 -0
  618. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/regions.py +0 -0
  619. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/__init__.py +0 -0
  620. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/controls.js +0 -0
  621. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/page.html +0 -0
  622. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/runtime.js +0 -0
  623. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/scene_viewer/spatial.js +0 -0
  624. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/sections.py +0 -0
  625. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/selection.py +0 -0
  626. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/slabs.py +0 -0
  627. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/temporal.py +0 -0
  628. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/tiff.py +0 -0
  629. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/experimental/volume.py +0 -0
  630. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/figure.py +0 -0
  631. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/__init__.py +0 -0
  632. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/fit.py +0 -0
  633. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/flow.py +0 -0
  634. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph.py +0 -0
  635. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph_force.py +0 -0
  636. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph_layered.py +0 -0
  637. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/graph_tree.py +0 -0
  638. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/labels.py +0 -0
  639. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/layout/sankey.py +0 -0
  640. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/links/__init__.py +0 -0
  641. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/links/curves.py +0 -0
  642. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/links/link.py +0 -0
  643. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/__init__.py +0 -0
  644. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/axis.py +0 -0
  645. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/breaks.py +0 -0
  646. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/categories.py +0 -0
  647. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/facets.py +0 -0
  648. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/inset.py +0 -0
  649. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/key.py +0 -0
  650. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/marks.py +0 -0
  651. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/notes.py +0 -0
  652. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/panel.py +0 -0
  653. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/png.py +0 -0
  654. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/polar.py +0 -0
  655. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/ramp.py +0 -0
  656. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/raster.py +0 -0
  657. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/ribbon.py +0 -0
  658. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/scale.py +0 -0
  659. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/scatter_batch.py +0 -0
  660. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/scatter_raster.py +0 -0
  661. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/series.py +0 -0
  662. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/simplify.py +0 -0
  663. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/plot/timescale.py +0 -0
  664. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/__init__.py +0 -0
  665. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/analysis.py +0 -0
  666. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/bounds.py +0 -0
  667. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/brushes.py +0 -0
  668. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/bundle.py +0 -0
  669. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/composite.py +0 -0
  670. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/fontembed.py +0 -0
  671. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/glyphs.py +0 -0
  672. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/hatching.py +0 -0
  673. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/outline.py +0 -0
  674. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/paint.py +0 -0
  675. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/pathdata.py +0 -0
  676. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/pdf.py +0 -0
  677. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/pdftext.py +0 -0
  678. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/preview.py +0 -0
  679. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/raster.py +0 -0
  680. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/resources.py +0 -0
  681. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/review.py +0 -0
  682. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/revision.py +0 -0
  683. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/scene.py +0 -0
  684. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/render/svg.py +0 -0
  685. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/__init__.py +0 -0
  686. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/color.py +0 -0
  687. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/palettes.py +0 -0
  688. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/themes/theme.py +0 -0
  689. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/__init__.py +0 -0
  690. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/api.py +0 -0
  691. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/backend.py +0 -0
  692. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/__init__.py +0 -0
  693. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/device_worker.py +0 -0
  694. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/discover.py +0 -0
  695. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/lineart.py +0 -0
  696. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/options.py +0 -0
  697. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/scene_worker.py +0 -0
  698. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/script.py +0 -0
  699. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/svgread.py +0 -0
  700. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/template_worker.py +0 -0
  701. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender/tracing.py +0 -0
  702. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/blender_backend.py +0 -0
  703. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/camera.py +0 -0
  704. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/deps.py +0 -0
  705. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/depth.py +0 -0
  706. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/devices.py +0 -0
  707. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/drill.py +0 -0
  708. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/edges.py +0 -0
  709. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/hlr.py +0 -0
  710. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/linalg.py +0 -0
  711. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/mesh.py +0 -0
  712. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/occlude.py +0 -0
  713. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/order.py +0 -0
  714. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/parse.py +0 -0
  715. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/place.py +0 -0
  716. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/protein.py +0 -0
  717. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/quality.py +0 -0
  718. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/render_jobs.py +0 -0
  719. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scene_annotations.py +0 -0
  720. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scene_pass.py +0 -0
  721. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scene_projection.py +0 -0
  722. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/scenes.py +0 -0
  723. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/shade.py +0 -0
  724. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/solids.py +0 -0
  725. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/templates.json +0 -0
  726. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/three/templates.py +0 -0
  727. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/__init__.py +0 -0
  728. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/fonts.py +0 -0
  729. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/markup.py +0 -0
  730. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/onpath.py +0 -0
  731. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/outline.py +0 -0
  732. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/src/inklet/typeset/shaping.py +0 -0
  733. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/assets/mouse.inklet.json +0 -0
  734. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/assets/mouse.png +0 -0
  735. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/dense_graph.py +0 -0
  736. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/draw_probe.py +0 -0
  737. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/assets/sem.png +0 -0
  738. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/assets/tem.png +0 -0
  739. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/cell.py +0 -0
  740. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/common.py +0 -0
  741. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/data.py +0 -0
  742. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/imaging.py +0 -0
  743. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/kinetics.py +0 -0
  744. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/micrograph.py +0 -0
  745. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro/system.py +0 -0
  746. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/electro_figure.py +0 -0
  747. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/fidelity.py +0 -0
  748. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/flow.py +0 -0
  749. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/hard_figure.py +0 -0
  750. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/label_storm.py +0 -0
  751. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/mega_figure.py +0 -0
  752. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/meshes/README.md +0 -0
  753. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/meshes/brain-lh.obj +0 -0
  754. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/meshes/spot.obj +0 -0
  755. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/apparatus.py +0 -0
  756. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/graphs.py +0 -0
  757. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/relations.py +0 -0
  758. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/responses.py +0 -0
  759. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/panels/sections.py +0 -0
  760. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/probes.py +0 -0
  761. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/stress/three_figure.py +0 -0
  762. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_alignment_contract.py +0 -0
  763. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_annotate.py +0 -0
  764. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_annotate_letters.py +0 -0
  765. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_assets.py +0 -0
  766. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_assets_provenance.py +0 -0
  767. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_biology_source.py +0 -0
  768. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_blend_scene.py +0 -0
  769. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_compiled.py +0 -0
  770. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_facets.py +0 -0
  771. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_figure.py +0 -0
  772. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_geography.py +0 -0
  773. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_overrides.py +0 -0
  774. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_regions.py +0 -0
  775. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_revision.py +0 -0
  776. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_scatter.py +0 -0
  777. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_series.py +0 -0
  778. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_statistics.py +0 -0
  779. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_switching.py +0 -0
  780. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_browser_time.py +0 -0
  781. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_categories.py +0 -0
  782. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_channels_contours.py +0 -0
  783. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_chem_figure.py +0 -0
  784. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_cli.py +0 -0
  785. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_clip_engine.py +0 -0
  786. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_components.py +0 -0
  787. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_compositing_engine.py +0 -0
  788. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_composition_recipes.py +0 -0
  789. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_contrast_and_labels.py +0 -0
  790. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_cookbook.py +0 -0
  791. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_core.py +0 -0
  792. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_core_amendments.py +0 -0
  793. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_csv_input.py +0 -0
  794. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics.py +0 -0
  795. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_api.py +0 -0
  796. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_artwork.py +0 -0
  797. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_break_distorts.py +0 -0
  798. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_crossing.py +0 -0
  799. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_image_contrast.py +0 -0
  800. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_ink.py +0 -0
  801. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_keys.py +0 -0
  802. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_links.py +0 -0
  803. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_paths.py +0 -0
  804. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagnostics_plot_box.py +0 -0
  805. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_diagram_engine.py +0 -0
  806. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_docs.py +0 -0
  807. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_docs_site.py +0 -0
  808. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_document.py +0 -0
  809. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_document_data.py +0 -0
  810. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_document_v25.py +0 -0
  811. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_clip.py +0 -0
  812. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_path.py +0 -0
  813. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_place.py +0 -0
  814. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_draw_shapes.py +0 -0
  815. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engine_layout.py +0 -0
  816. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engine_rendering.py +0 -0
  817. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engine_scatter.py +0 -0
  818. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_engineering_report.py +0 -0
  819. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_export_bundle.py +0 -0
  820. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_figure.py +0 -0
  821. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_figure_planner.py +0 -0
  822. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_fit.py +0 -0
  823. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_grid_fields.py +0 -0
  824. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_guides.py +0 -0
  825. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_hatch_engine.py +0 -0
  826. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_label_measurements.py +0 -0
  827. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_label_overrides.py +0 -0
  828. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout.py +0 -0
  829. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_editor.py +0 -0
  830. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_graph.py +0 -0
  831. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_graph_fit.py +0 -0
  832. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_origin.py +0 -0
  833. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_overrides.py +0 -0
  834. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_layout_sankey.py +0 -0
  835. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_links.py +0 -0
  836. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_links_avoid.py +0 -0
  837. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_links_shapes.py +0 -0
  838. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_marker_batches.py +0 -0
  839. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_mesh_fields.py +0 -0
  840. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_microscopy_tiff.py +0 -0
  841. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_neural_activity.py +0 -0
  842. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_output_contract.py +0 -0
  843. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_paint_program.py +0 -0
  844. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_place_labels.py +0 -0
  845. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_axis.py +0 -0
  846. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_broken_axis.py +0 -0
  847. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_clip.py +0 -0
  848. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_engine.py +0 -0
  849. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_facets.py +0 -0
  850. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_inset.py +0 -0
  851. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_key.py +0 -0
  852. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_labels.py +0 -0
  853. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_legend.py +0 -0
  854. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_marks.py +0 -0
  855. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_notes.py +0 -0
  856. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_polar.py +0 -0
  857. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_publication.py +0 -0
  858. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_quality_review.py +0 -0
  859. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_raster.py +0 -0
  860. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_recipes.py +0 -0
  861. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_ribbon.py +0 -0
  862. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_scale.py +0 -0
  863. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_swarm.py +0 -0
  864. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_plot_time.py +0 -0
  865. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_presets.py +0 -0
  866. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_publication_limits.py +0 -0
  867. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_regional_report.py +0 -0
  868. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_release_adversarial.py +0 -0
  869. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_devices.py +0 -0
  870. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_embed.py +0 -0
  871. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_glyphs.py +0 -0
  872. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_jobs.py +0 -0
  873. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_outline.py +0 -0
  874. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_pdf.py +0 -0
  875. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_pdf_text.py +0 -0
  876. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_quality.py +0 -0
  877. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_scene.py +0 -0
  878. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_style_fields.py +0 -0
  879. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_svg_perf.py +0 -0
  880. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_render_v3.py +0 -0
  881. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_review_v25.py +0 -0
  882. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_round4_plot.py +0 -0
  883. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_routing_avoid.py +0 -0
  884. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scatter_rendering.py +0 -0
  885. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_annotations.py +0 -0
  886. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_culling.py +0 -0
  887. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_pass.py +0 -0
  888. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_projection.py +0 -0
  889. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_templates.py +0 -0
  890. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scene_viewer.py +0 -0
  891. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_scientific_report.py +0 -0
  892. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_sections.py +0 -0
  893. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_shared_plot_margins.py +0 -0
  894. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_showcase_library.py +0 -0
  895. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_showcase_round3.py +0 -0
  896. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_slabs_regions.py +0 -0
  897. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_structure_figure.py +0 -0
  898. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_style_overrides.py +0 -0
  899. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_svg.py +0 -0
  900. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_table_adapters.py +0 -0
  901. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_target_pose.py +0 -0
  902. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_temporal_adapters.py +0 -0
  903. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_text_markup.py +0 -0
  904. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_text_on_path.py +0 -0
  905. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_theme_font_style.py +0 -0
  906. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_themes.py +0 -0
  907. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_anchor_pin.py +0 -0
  908. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_api.py +0 -0
  909. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_backend_blender.py +0 -0
  910. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_blender.py +0 -0
  911. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_depth_order.py +0 -0
  912. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_drill.py +0 -0
  913. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_hlr.py +0 -0
  914. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_mesh.py +0 -0
  915. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_order_vector.py +0 -0
  916. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_overlay.py +0 -0
  917. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_parse.py +0 -0
  918. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_patches.py +0 -0
  919. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_place.py +0 -0
  920. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_protein.py +0 -0
  921. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_ridges.py +0 -0
  922. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_sort.py +0 -0
  923. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_sort_budget.py +0 -0
  924. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_three_view.py +0 -0
  925. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_typeset.py +0 -0
  926. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_v4_selection.py +0 -0
  927. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_volume.py +0 -0
  928. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_watch_review.py +0 -0
  929. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/test_world_map_example.py +0 -0
  930. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/README.md +0 -0
  931. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/categories-pdf.png +0 -0
  932. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/categories-svg.png +0 -0
  933. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/components-pdf.png +0 -0
  934. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/components-svg.png +0 -0
  935. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/dense-pdf.png +0 -0
  936. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/dense-svg.png +0 -0
  937. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/fonts.json +0 -0
  938. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/inset-pdf.png +0 -0
  939. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/inset-svg.png +0 -0
  940. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/markers-pdf.png +0 -0
  941. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/markers-svg.png +0 -0
  942. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/renderers.json +0 -0
  943. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/type-opacity-pdf.png +0 -0
  944. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/type-opacity-svg.png +0 -0
  945. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
  946. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
  947. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-dense-pdf.png +0 -0
  948. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-dense-svg.png +0 -0
  949. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
  950. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
  951. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
  952. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
  953. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
  954. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
  955. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
  956. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v2-workflow-svg.png +0 -0
  957. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v25-document-pdf.png +0 -0
  958. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/baseline/v25-document-svg.png +0 -0
  959. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/fixtures.py +0 -0
  960. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tests/visual/v2-budgets.json +0 -0
  961. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_batches.py +0 -0
  962. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_clipping.py +0 -0
  963. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_diagrams.py +0 -0
  964. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_engine.py +0 -0
  965. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_lines.py +0 -0
  966. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_marker_index.mjs +0 -0
  967. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_culling.js +0 -0
  968. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_gpu.js +0 -0
  969. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_redraw.js +0 -0
  970. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_viewer.js +0 -0
  971. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_scene_zoom.js +0 -0
  972. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_v2.py +0 -0
  973. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/benchmark_v4.py +0 -0
  974. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/browser_study.js +0 -0
  975. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/check_render_wheel.py +0 -0
  976. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/dock_ligand.py +0 -0
  977. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_previews.json +0 -0
  978. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_previews.py +0 -0
  979. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_site.py +0 -0
  980. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/404.html +0 -0
  981. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/card.html +0 -0
  982. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/gallery.html +0 -0
  983. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/home.html +0 -0
  984. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/main.html +0 -0
  985. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/docs_theme/plot-gallery.html +0 -0
  986. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/gen_api.py +0 -0
  987. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/make_culling_review.py +0 -0
  988. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/plot_catalog.json +0 -0
  989. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/prepare_world_map.py +0 -0
  990. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/preset_gallery.py +0 -0
  991. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/profile_scene_redraw.js +0 -0
  992. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/showcase_gallery.py +0 -0
  993. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/stress20.py +0 -0
  994. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/strip_pdb.py +0 -0
  995. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/v3_showcase.py +0 -0
  996. {inklet-4.0.0.dev11 → inklet-4.0.0.dev12}/tools/v4-budgets.json +0 -0
  997. {inklet-4.0.0.dev11 → 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.dev11
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.dev11' >&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,22 @@
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
+
5
21
  ## 4.0.0.dev11 — 2026-09-12
6
22
 
7
23
  Eleventh development preview: unified composition layout, labels and appearance.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inklet
3
- Version: 4.0.0.dev11
3
+ Version: 4.0.0.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.dev11** connects layout, label and appearance editing in the local
85
- composition editor. Adjust supported plot, text and module styles alongside
86
- layout, undo changes together, and save choices that reproduce through Python.
84
+ **4.0.0.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.dev11"
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.dev11)
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.dev11** connects layout, label and appearance editing in the local
35
- composition editor. Adjust supported plot, text and module styles alongside
36
- layout, undo changes together, and save choices that reproduce through Python.
34
+ **4.0.0.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.dev11"
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.dev11)
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,
@@ -1,6 +1,6 @@
1
- # Inklet 4.0.0.dev11
1
+ # Inklet 4.0.0.dev12
2
2
 
3
- The eleventh 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.dev11"
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.dev11"
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.dev11"
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,25 @@ Opening the generated HTML requires a browser. PNG/PDF exports from browser
29
29
  figures use separate Chrome/Chromium and Pillow; native Diagram exports retain
30
30
  their existing requirements. See [installation](installation.md).
31
31
 
32
- ## Unified composition authoring in dev11
32
+ ## 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
33
51
 
34
52
  The [composition editor](layout-editor.md#edit-appearance-alongside-layout) now
35
53
  combines Layout, Labels and Styles sections. Pending changes across sections
@@ -220,7 +238,7 @@ The wheel contains the library. To obtain recipes and fixtures, use the matching
220
238
  release checkout or source archive:
221
239
 
222
240
  ```sh
223
- git clone --branch v4.0.0.dev11 https://github.com/Mapika/inklet.git
241
+ git clone --branch v4.0.0.dev12 https://github.com/Mapika/inklet.git
224
242
  cd inklet
225
243
  python -m pip install -e '.[render]'
226
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**, named label editing in **4.0.0.dev10**, and unified style controls in **4.0.0.dev11**, under `inklet.experimental.layout_editor`. Adjust
4
- named placements and dimensions in a browser while Python recompiles the
5
- actual composition. The preview and downloaded SVG/PDF come from the same
6
- compiled figure, including plots, nested diagrams and native 3D content.
3
+ Available since **4.0.0.dev8**, with the redesigned studio workspace in
4
+ **4.0.0.dev12**, under `inklet.experimental.layout_editor`. Arrange named
5
+ content, edit labels and appearance, and review the actual Python-compiled
6
+ figure. Downloaded SVG/PDF files use that same successful preview.
7
7
 
8
- ![Mouse selection and proportional scaling handles on a native 3D object](assets/guides/layout-editor-gestures.png)
8
+ ![Inklet studio with object navigation, a large figure canvas and focused style controls](assets/guides/editor-studio.png)
9
9
 
10
10
  The [complete example](../examples/layout_editor.py) opens the reusable report
11
11
  from [composition recipes](composition-recipes.md). From the checkout, run:
@@ -19,6 +19,37 @@ press Ctrl+C to stop it. This is a local editor, not a standalone HTML editing
19
19
  file. Ordinary [figure viewers](compiled-viewer.md) remain available for
20
20
  sharing a finished document without a Python process.
21
21
 
22
+ ## A workspace for your figure
23
+
24
+ The desktop workspace has a searchable object navigator, a central canvas and
25
+ an inspector with **Layout**, **Labels** 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, choose **Labels** in **Edit**, then change its fields and choose **Apply
113
+ Select a composition child, choose the **Labels** tab, then change its fields and choose **Apply
83
114
  changes**. The editor supports text components created with `component(i.text,
84
115
  ...)`, string module captions, and plot `title`, `text` and `annotate`
85
116
  instructions with an explicit string `key`. For composition callouts, supply a
@@ -119,9 +150,9 @@ Undo/redo, reset, saved JSON and SVG/PDF exports include the label edits.
119
150
 
120
151
  ![Named line and marker styles edited in the composition inspector](assets/guides/layout-editor-styles.png)
121
152
 
122
- Choose **Styles** in **Edit**. Layout, Labels and Styles retain their pending
153
+ Choose the **Styles** tab. Layout, Labels and Styles retain their pending
123
154
  changes when switching sections; **Apply changes** compiles them together as
124
- one undo step. Selecting another content target discards unapplied fields.
155
+ one undo step. Apply or discard pending fields before selecting another content target.
125
156
 
126
157
  | Named content | Available appearance controls |
127
158
  | --- | --- |
@@ -168,7 +199,7 @@ are outside this style-control subset.
168
199
 
169
200
  ## Edit and review
170
201
 
171
- Choose a named path in **Content** and a section in **Edit**, enter the fields you want to change, then
202
+ Choose a named path in **Content** and an inspector tab, enter the fields you want to change, then
172
203
  select **Apply changes**. Other fields retain their definitions.
173
204
 
174
205
  - Child placement fields are X, Y, anchor, width, height and uniform scale. Numbers use the
@@ -196,12 +227,12 @@ appears. Distinct placements of that shared content remain independently editabl
196
227
 
197
228
  ## Save, reopen and export
198
229
 
199
- **Save layout** downloads the versioned JSON described in
200
- [saved layout choices](layout-overrides.md). **Open layout choices** loads that
230
+ **Save choices** downloads the versioned JSON described in
231
+ [saved layout choices](layout-overrides.md). **Open** loads that
201
232
  same format. The file contains changed layout, label and supported style fields.
202
233
  Other source content, assets and undo history stay outside the file. Keep it alongside the recipe.
203
234
 
204
- **Download SVG** and **Download PDF** export the successful preview revision.
235
+ **Export → SVG** and **Export → PDF** export the successful preview revision.
205
236
  If another editor tab changes the session first, stale commands and export
206
237
  links are rejected. Use **Reload editor** to obtain the current shared state.
207
238
 
@@ -64,7 +64,9 @@ choices. Dev10 adds saved named text and callout editing across modules, text
64
64
  components, keyed plot instructions and composition annotations, including typed
65
65
  identity reconciliation. Dev11 connects supported plot, text and module styles
66
66
  to that same layout/label history, saved state and reconciliation workflow,
67
- with data-driven marker fields protected from constant overrides.
67
+ with data-driven marker fields protected from constant overrides. Dev12 adds
68
+ the studio workspace: object navigation, focused controls, zoom/pan, shortcuts
69
+ and protection for pending edits.
68
70
  Serialized project templates, asset manifests, shared selection
69
71
  relationships, axis-label/camera editing and finer-grained manipulation remain open. Subsequent work
70
72
  should extend authoring and cross-content identity beyond this bounded inspector.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "inklet"
3
- version = "4.0.0.dev11"
3
+ version = "4.0.0.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.dev11"
473
+ __version__ = "4.0.0.dev12"
@@ -207,8 +207,10 @@ class LayoutEditor:
207
207
  return self.snapshot()
208
208
 
209
209
  def _html(self):
210
- return (Path(__file__).with_name('page.html').read_text().replace('__TOKEN__',self._token)
211
- .replace('<!--GESTURES-->',Path(__file__).with_name('gestures.js').read_text()))
210
+ return (Path(__file__).with_name('page.html').read_text(encoding='utf-8').replace('__TOKEN__',self._token)
211
+ .replace('/*WORKSPACE_CSS*/',Path(__file__).with_name('workspace.css').read_text(encoding='utf-8'))
212
+ .replace('<!--WORKSPACE-->',Path(__file__).with_name('workspace.js').read_text(encoding='utf-8'))
213
+ .replace('<!--GESTURES-->',Path(__file__).with_name('gestures.js').read_text(encoding='utf-8')))
212
214
 
213
215
  def start(self, *, port=0):
214
216
  """Start a loopback-only editor server; port=0 chooses a free local port."""
@@ -23,11 +23,11 @@ function pointerPoint(event){const point=overlay.createSVGPoint();point.x=event.
23
23
  function cancelGesture(){if(!gesture)return;const id=gesture.pointerId;gesture=null;if(overlay.hasPointerCapture(id))overlay.releasePointerCapture(id);lock(false);drawOverlay();status('Drag cancelled.');}
24
24
  overlay.addEventListener('pointerdown',event=>{
25
25
  if(busy||gesture||!previewReady||event.button!==0||event.isPrimary===false)return;
26
- const hit=event.target.closest('[data-path]');if(!hit)return;
26
+ const hit=event.target.closest('[data-path]');if(!hit){selectTarget('/');return;}
27
27
  let path=hit.dataset.path,corner=hit.dataset.corner;
28
28
  if(event.altKey){const parent=path.slice(0,path.lastIndexOf('/'));if(state.geometry[parent]){path=parent;corner=null;}}
29
29
  const box=state.geometry[path]?.box;if(!box||box[2]<=0||box[3]<=0)return;
30
- event.preventDefault();byId('target').value=path;fields();overlay.focus();
30
+ event.preventDefault();if(!selectTarget(path))return;overlay.focus({preventScroll:true});
31
31
  const point=pointerPoint(event);gesture={path,corner,box:[...box],start:point,client:[event.clientX,event.clientY],pointerId:event.pointerId,dx:0,dy:0,factor:1,moved:false};
32
32
  overlay.setPointerCapture(event.pointerId);lock(true);status(corner?'Scale artwork; release to apply. Escape cancels.':'Move content; release to apply. Escape cancels.');
33
33
  });
@@ -56,7 +56,7 @@ overlay.addEventListener('pointercancel',cancelGesture);
56
56
  overlay.addEventListener('lostpointercapture',()=>{if(gesture)cancelGesture();});
57
57
  document.addEventListener('keydown',event=>{if(event.key==='Escape'&&gesture){event.preventDefault();cancelGesture();}});
58
58
  overlay.addEventListener('keydown',event=>{
59
- if(busy||gesture||!previewReady)return;const path=byId('target').value;if(!state.geometry[path])return;
59
+ if(busy||gesture||!previewReady||dirty.size)return;const path=byId('target').value;if(!state.geometry[path])return;
60
60
  const step=event.shiftKey?10:1,keys={ArrowLeft:[-step,0],ArrowRight:[step,0],ArrowUp:[0,-step],ArrowDown:[0,step]};
61
61
  if(keys[event.key]){event.preventDefault();request('gesture',{path,dx:keys[event.key][0],dy:keys[event.key][1]});}
62
62
  });
@@ -1,24 +1,27 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
2
- <title>Inklet layout editor</title><style>
3
- *{box-sizing:border-box}body{margin:0;font:15px/1.5 system-ui;color:#20312f;background:#f5f7f6}header{padding:20px 28px;border-bottom:1px solid #d2dcda;background:white}h1{font-size:23px;margin:0}header p{margin:4px 0 0;color:#52635f}main{display:grid;grid-template-columns:300px minmax(0,1fr);gap:24px;padding:24px}aside{background:white;border:1px solid #d2dcda;border-radius:8px;padding:18px;align-self:start}label{display:block;margin:8px 0}input,textarea,select,button,.download{font:inherit;padding:7px;border:1px solid #9cafa9;border-radius:4px;background:white;color:inherit}input:not([type=checkbox]),textarea,select{width:100%}button,.download{cursor:pointer}button:hover,.download:hover{background:#e8efec}button:disabled{cursor:default;opacity:.5}.primary{background:#246b59;color:white}.primary:hover{background:#195440}fieldset{margin:16px 0;padding:8px 12px;border:1px solid #d2dcda}legend{font-weight:600}.actions{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.download{text-decoration:none;display:inline-block}#stage{position:relative;border:1px solid #d2dcda}#overlay{position:absolute;inset:0;width:100%;height:100%;overflow:visible;touch-action:none}#overlay .hit{fill:transparent;cursor:move}#overlay .hit:hover{stroke:#568e80;stroke-width:1;vector-effect:non-scaling-stroke}#overlay .selection{fill:none;stroke:#246b59;stroke-width:2;vector-effect:non-scaling-stroke;pointer-events:stroke;cursor:move}#overlay .handle{fill:white;stroke:#246b59;stroke-width:2;vector-effect:non-scaling-stroke;cursor:nwse-resize}#overlay .ghost{stroke-dasharray:5 3}#preview{display:block;width:100%;height:auto;background:white;border:0}#status{min-height:24px;white-space:pre-wrap}.error{color:#a12626}.note{font-size:13px;color:#52635f}.upload{display:inline-block}input[type=file]{font-size:12px}section{min-width:0}@media(max-width:760px){main{grid-template-columns:1fr;padding:12px;gap:16px}header{padding:16px}aside{width:100%}}
4
- </style></head><body><header><h1>Layout editor</h1><p>Adjust named content and review the compiled figure.</p></header><main><aside>
5
- <label>Content<select id="target"></select></label><label>Edit<select id="inspector"><option value="layout">Layout</option><option value="labels">Labels</option><option value="styles">Styles</option></select></label><div id="fields"></div><p id="empty" class="note" hidden>No editable fields in this section for the selected content.</p>
6
- <p id="status" role="status" aria-live="polite"></p>
7
- <div class="actions"><button id="apply" class="primary">Apply changes</button><button id="reset">Reset target</button></div>
8
- <div class="actions"><button id="undo">Undo</button><button id="redo">Redo</button></div>
9
- <div class="actions"><button id="refresh">Refresh source</button><button id="reload">Reload editor</button></div>
10
- <p class="note">Measured fields follow the recipe until you enter a fixed value. Reset target restores its source layout, labels and styles. Refresh source rebuilds from Python and clears undo history.</p>
11
- <label>Open layout choices<input id="load" type="file" accept=".json,application/json"></label>
12
- <div class="actions"><a class="download" id="save" href="/layout.json">Save layout</a></div>
13
- <button id="drop" hidden>Refresh and discard removed targets</button>
14
- </aside><section><div class="actions"><a class="download" id="svg" href="/figure.svg">Download SVG</a><a class="download" id="pdf" href="/figure.pdf">Download PDF</a></div>
15
- <p class="note">Drag objects to move them. Drag corner handles to scale artwork. Alt-click selects a containing group. Escape cancels a drag.</p><div id="stage"><img id="preview" alt="Compiled composition preview"><svg id="overlay" tabindex="0" role="application" aria-label="Figure layout canvas. Select content, drag to move, or use arrow keys. Corner handles scale artwork."></svg></div><p class="note">This editor needs its local Python session. Saved layout JSON can be reopened here or applied in Python.</p></section></main>
1
+ <!doctype html>
2
+ <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
3
+ <title>Inklet · Layout editor</title><style>/*WORKSPACE_CSS*/</style></head>
4
+ <body><header class="topbar">
5
+ <div class="brand"><svg width="26" height="26" viewBox="0 0 26 26" aria-hidden="true"><rect width="26" height="26" rx="7" fill="currentColor"/><path d="M8 7h4v12H8zm7 0h3v3h-3zm0 5h3v7h-3z" fill="white"/></svg><strong>inklet<span>studio</span></strong></div>
6
+ <div class="project"><span class="project-name">Figure workspace</span><span class="connection"><i></i>Local session</span></div>
7
+ <div class="top-actions"><button id="undo" class="icon-button" title="Undo · Ctrl/Cmd Z" aria-label="Undo">↶</button><button id="redo" class="icon-button" title="Redo · Ctrl/Cmd Shift Z" aria-label="Redo">↷</button><span class="divider"></span><button id="open-file" class="open-button">Open</button><input id="load" type="file" accept=".json,application/json" hidden><a id="save" class="button" href="/layout.json">Save choices</a><details class="export-menu"><summary class="button primary">Export <span>↗</span></summary><div class="popover"><a id="svg" href="/figure.svg">SVG <small>Editable vector</small></a><a id="pdf" href="/figure.pdf">PDF <small>Ready for print</small></a></div></details></div>
8
+ </header>
9
+ <main class="workspace">
10
+ <aside class="navigator"><div class="panel-heading"><h2>Objects</h2><span id="object-count" class="count"></span></div><label class="search"><span aria-hidden="true">⌕</span><input id="search" type="search" placeholder="Find an object…" aria-label="Find an object"></label><nav id="object-tree" aria-label="Composition objects"></nav><div class="navigator-bottom"><span class="eyebrow">SOURCE CONNECTION</span><p>Your Python recipe stays in control.</p><button id="refresh">↻ Refresh source</button><button id="reload" class="quiet">Reload editor</button><small>Refresh rebuilds the figure and clears undo history.</small></div></aside>
11
+ <section class="canvas-panel" aria-label="Figure workspace"><div class="canvas-bar"><div><span class="eyebrow">COMPOSITION</span><span id="page-size"></span></div><button id="help-button" class="quiet" aria-label="Keyboard shortcuts" title="Keyboard shortcuts">? <span>Shortcuts</span></button></div>
12
+ <div id="viewport"><div id="canvas-space"><div id="stage"><img id="preview" alt="Compiled composition preview"><svg id="overlay" tabindex="0" role="application" aria-label="Figure layout canvas. Select content, drag to move, or use arrow keys. Corner handles scale artwork."></svg></div></div></div>
13
+ <div class="canvas-tools"><div class="tool-group"><button id="select-tool" class="active" aria-pressed="true" title="Select and move objects" aria-label="Select tool">↖</button><button id="pan-tool" aria-pressed="false" title="Pan canvas · hold Space" aria-label="Pan tool">✥</button></div><span class="divider"></span><button id="zoom-out" aria-label="Zoom out">−</button><output id="zoom-label">100%</output><button id="zoom-in" aria-label="Zoom in">+</button><span class="divider"></span><button id="fit" title="Fit figure to workspace">Fit</button></div>
14
+ <div class="canvas-caption"><span id="selection-size">Whole composition</span><span>Drag to move · corners to scale</span></div></section>
15
+ <aside class="inspector-panel"><div class="inspector-title"><span class="eyebrow">INSPECTOR</span><h1 id="selection-name">Composition</h1><span id="selection-path">/</span></div><label class="target-picker">Content<select id="target"></select></label><label class="sr-only" aria-hidden="true">Edit<select id="inspector" tabindex="-1"><option value="layout">Layout</option><option value="labels">Labels</option><option value="styles">Styles</option></select></label><div class="inspector-tabs" role="group" aria-label="Inspector section"><button data-tab="layout" aria-pressed="true">Layout</button><button data-tab="labels" aria-pressed="false">Labels</button><button data-tab="styles" aria-pressed="false">Styles</button></div><div class="inspector-scroll"><div id="fields"></div><div id="empty" hidden><span>◇</span><h3>Nothing to edit here</h3><p>Choose another section or object.</p></div><p class="inspector-hint" id="inspector-hint">Measured positions follow your recipe. Enter a value to place them explicitly.</p><button id="reset" class="quiet reset">Reset object to source</button><button id="drop" class="danger" hidden>Discard removed targets and refresh</button></div><div class="apply-bar"><div><span id="pending-label">Up to date</span><button id="discard" class="quiet" hidden>Discard</button></div><button id="apply" class="primary">Apply changes <kbd>⌘ ↵</kbd></button></div></aside>
16
+ </main>
17
+ <footer class="statusbar"><span id="status" role="status" aria-live="polite">Connecting to your figure…</span><span>Python-backed preview <span class="status-dot">●</span> <span id="revision-label">Revision 0</span></span></footer>
18
+ <dialog id="help"><div class="panel-heading"><h2>Make room for your ideas.</h2><button id="close-help" aria-label="Close shortcuts">×</button></div><p>Every applied edit rebuilds the actual figure.</p><dl><dt>Move an object</dt><dd>Drag / arrow keys</dd><dt>Move 10 mm</dt><dd>Shift + arrow</dd><dt>Select a containing group</dt><dd>Alt + click</dd><dt>Pan the workspace</dt><dd>Space + drag / pan tool</dd><dt>Zoom</dt><dd>Ctrl/Cmd + wheel</dd><dt>Apply pending changes</dt><dd>Ctrl/Cmd + Enter</dd><dt>Undo / redo</dt><dd>Ctrl/Cmd + Z / Shift + Z</dd><dt>Save applied choices</dt><dd>Ctrl/Cmd + S</dd><dt>Cancel a drag</dt><dd>Escape</dd></dl><p class="note">Keep the local Python session running. Saved choices accompany your recipe; exports contain the applied figure.</p></dialog>
16
19
  <script>
17
20
  'use strict';
18
21
  const token='__TOKEN__',byId=id=>document.getElementById(id);
19
22
  let state=null,busy=false,previewURL=null,previewReady=false;const dirty=new Map();
20
23
  function status(text,error=false){byId('status').textContent=text;byId('status').classList.toggle('error',error);}
21
- function lock(value){busy=value;document.querySelectorAll('button,input,textarea,select').forEach(el=>el.disabled=value);if(!value&&state){byId('undo').disabled=!state.undo;byId('redo').disabled=!state.redo;}}
24
+ function lock(value){busy=value;document.querySelectorAll('button,input,textarea,select').forEach(el=>el.disabled=value);syncUI();}
22
25
  function fields(){dirty.clear();const container=byId('fields');container.replaceChildren();const target=state.targets[byId('target').value];
23
26
  for(const [group,values] of Object.entries(target)){
24
27
  if(group==='styles'){
@@ -30,7 +33,7 @@ function fields(){dirty.clear();const container=byId('fields');container.replace
30
33
  label.append(document.createTextNode(({fill:'Fill colour',stroke:'Line colour',color:'Marker colour',stroke_width:'Line width (mm)',size:styleValues.kind==='plot-scatter'?'Marker diameter (mm)':'Text size (mm)',opacity:'Opacity'})[field]));
31
34
  input.type=['fill','stroke','color'].includes(field)?'text':'number';input.step='any';input.value=typeof value==='number'?Number(value.toPrecision(6)):value??'';input.placeholder=input.type==='text'?'Automatic / #RRGGBB':'Automatic';
32
35
  input.dataset.group=group;input.dataset.label=key;input.dataset.key=field;input.dataset.kind=styleValues.kind;
33
- const changed=()=>dirty.set(JSON.stringify([group,key,field]),input);input.addEventListener('input',changed);input.addEventListener('change',changed);label.append(input);box.append(label);
36
+ const changed=()=>markDirty(JSON.stringify([group,key,field]),input);input.addEventListener('input',changed);input.addEventListener('change',changed);label.append(input);box.append(label);
34
37
  }container.append(box);
35
38
  }continue;
36
39
  }
@@ -46,7 +49,7 @@ function fields(){dirty.clear();const container=byId('fields');container.replace
46
49
  else if(field==='clear'){input.type='number';input.min=0;input.step='any';input.value=value??'';input.placeholder='Automatic';}
47
50
  else{input.rows=3;input.value=value;}
48
51
  input.dataset.group=group;input.dataset.label=key;input.dataset.key=field;input.dataset.kind=labelValues.kind;
49
- const changed=()=>dirty.set(JSON.stringify([group,key,field]),input);input.addEventListener('input',changed);input.addEventListener('change',changed);label.append(input);box.append(label);
52
+ const changed=()=>markDirty(JSON.stringify([group,key,field]),input);input.addEventListener('input',changed);input.addEventListener('change',changed);label.append(input);box.append(label);
50
53
  }container.append(box);
51
54
  }continue;
52
55
  }
@@ -55,26 +58,27 @@ function fields(){dirty.clear();const container=byId('fields');container.replace
55
58
  if(key==='fit_top'){input.type='checkbox';input.checked=value;}
56
59
  else if(key==='anchor'){input.type='text';input.value=value??'';input.placeholder='Local origin';}
57
60
  else{input.type='number';input.step='any';if(typeof value==='number')input.value=Number(value.toPrecision(6));else input.placeholder=value===null?'Authored size':'Measured';}
58
- input.addEventListener('input',()=>dirty.set(group+'.'+key,input));label.append(input);box.append(label);
61
+ input.addEventListener('input',()=>markDirty(group+'.'+key,input));label.append(input);box.append(label);
59
62
  }container.append(box);
60
63
  }
61
- showSection();drawOverlay();
64
+ showSection();decorateFields();syncUI();drawOverlay();
62
65
  }
63
- function showSection(){const selected=byId('inspector').value;let shown=0;byId('fields').querySelectorAll('fieldset').forEach(box=>{box.hidden=(selected==='layout'?!['placement','page'].includes(box.dataset.section):box.dataset.section!==selected);if(!box.hidden)shown++;});byId('empty').hidden=shown>0;}
66
+ function showSection(){const selected=byId('inspector').value;let shown=0;byId('fields').querySelectorAll('fieldset').forEach(box=>{box.hidden=(selected==='layout'?!['placement','page'].includes(box.dataset.section):box.dataset.section!==selected);if(!box.hidden)shown++;});byId('empty').hidden=shown>0;document.querySelectorAll('[data-tab]').forEach(button=>button.setAttribute('aria-pressed',button.dataset.tab===selected));byId('inspector-hint').textContent=({layout:'Measured positions follow your recipe. Enter a value to place them explicitly.',labels:'Text is remeasured when you apply. Connected content follows its new size.',styles:'Blank fields use automatic styling. Sizes and line widths use millimetres.'})[selected];}
64
67
  byId('inspector').addEventListener('change',showSection);
65
68
  function render(next){previewReady=false;state=next;const selected=byId('target').value;byId('target').replaceChildren();for(const path of Object.keys(state.targets)){const option=document.createElement('option');option.value=path;option.textContent=path==='/'?'Whole composition':path;byId('target').append(option);}if(Object.hasOwn(state.targets,selected))byId('target').value=selected;fields();
66
- if(previewURL)URL.revokeObjectURL(previewURL);previewURL=URL.createObjectURL(new Blob([state.svg],{type:'image/svg+xml'}));const currentURL=previewURL;byId('preview').style.aspectRatio=state.viewbox[2]+'/'+state.viewbox[3];byId('preview').onload=()=>{if(byId('preview').src===currentURL){previewReady=true;drawOverlay();}};byId('preview').src=previewURL;
69
+ if(previewURL)URL.revokeObjectURL(previewURL);previewURL=URL.createObjectURL(new Blob([state.svg],{type:'image/svg+xml'}));const currentURL=previewURL;byId('preview').style.aspectRatio=state.viewbox[2]+'/'+state.viewbox[3];byId('preview').onload=()=>{if(byId('preview').src===currentURL){previewReady=true;sizeCanvas();drawOverlay();}};byId('preview').src=previewURL;
67
70
  for(const [id,path] of [['save','layout.json'],['svg','figure.svg'],['pdf','figure.pdf']])byId(id).href='/'+path+'?revision='+state.revision;
68
71
  byId('drop').hidden=true;lock(false);
69
72
  }
70
- async function request(action,value,missing='error'){if(busy)return;lock(true);status('Compiling…');try{
73
+ async function request(action,value,missing='error'){if(busy)return;if(dirty.size&&action!=='edit'){status('Apply or discard pending changes first.',true);return;}lock(true);status('Compiling…');try{
71
74
  const response=await fetch('/command',{method:'POST',headers:{'Content-Type':'application/json','X-Inklet-Token':token},body:JSON.stringify({action,value,missing,revision:state.revision})});const result=await response.json();if(!response.ok)throw new Error(result.error);render(result);const removed=result.report.orphaned_targets;status(removed.length?'Discarded removed targets: '+removed.join(', '):'Layout ready.');
72
75
  }catch(error){status(error.message,true);if(action==='refresh'&&error.message.includes('orphaned layout targets'))byId('drop').hidden=false;}finally{lock(false);}}
73
- async function reload(){if(busy)return;lock(true);try{const response=await fetch('/state');const result=await response.json();if(!response.ok)throw new Error(result.error);render(result);status('Layout ready.');}catch(error){status(error.message,true);}finally{lock(false);}}
74
- byId('target').addEventListener('change',fields);
76
+ async function reload(){if(busy)return;if(dirty.size){status('Apply or discard pending changes first.',true);return;}lock(true);try{const response=await fetch('/state');const result=await response.json();if(!response.ok)throw new Error(result.error);render(result);status('Layout ready.');}catch(error){status(error.message,true);}finally{lock(false);}}
77
+ byId('target').addEventListener('change',()=>selectTarget(byId('target').value));
75
78
  byId('apply').onclick=()=>{try{if(!dirty.size){status('No layout changes entered.');return;}const value={path:byId('target').value};for(const input of dirty.values()){const {group,key}=input.dataset;let field;if(input.type==='checkbox')field=input.checked;else if(group==='styles'&&input.value==='')field=null;else if(group==='styles'&&input.type==='text')field=input.value;else if(group==='labels'&&(key==='text'||key==='side'))field=input.value;else if(group==='labels'&&key==='clear'&&input.value===''&&input.dataset.kind==='plot-annotate')field=null;else if(key==='anchor')field=input.value||null;else if(input.value===''&&(key==='width'||key==='height')&&group==='placement')field=null;else{field=Number(input.value);if(input.value===''||!Number.isFinite(field))throw new Error('Enter a finite value for '+key);} if(group==='labels'||group==='styles'){const label=(value[group]??=Object.create(null))[input.dataset.label]??={kind:input.dataset.kind};label[key]=field;}else (value[group]??={})[key]=field;}request('edit',value);}catch(error){status(error.message,true);}};
76
79
  byId('reset').onclick=()=>request('reset',byId('target').value);byId('undo').onclick=()=>request('undo');byId('redo').onclick=()=>request('redo');byId('refresh').onclick=()=>request('refresh');byId('drop').onclick=()=>request('refresh',null,'drop');byId('reload').onclick=reload;
77
80
  byId('load').onchange=async event=>{const file=event.target.files[0];if(!file||busy)return;lock(true);try{if(file.size>1000000)throw new Error('Layout file is too large');const value=JSON.parse(await file.text());lock(false);await request('load',value);}catch(error){status(error.message,true);}finally{event.target.value='';lock(false);}};
81
+ <!--WORKSPACE-->
78
82
  <!--GESTURES-->
79
83
  reload();
80
84
  </script></body></html>