react-cheminfo 0.22.0 → 0.23.0

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 (206) hide show
  1. package/README.md +13 -3
  2. package/lib/overlay/core/index.d.ts +2 -2
  3. package/lib/overlay/core/index.d.ts.map +1 -1
  4. package/lib/overlay/core/index.js +1 -1
  5. package/lib/overlay/core/index.js.map +1 -1
  6. package/lib/overlay/core/overlayMarks.d.ts +20 -5
  7. package/lib/overlay/core/overlayMarks.d.ts.map +1 -1
  8. package/lib/overlay/core/overlayMarks.js +31 -5
  9. package/lib/overlay/core/overlayMarks.js.map +1 -1
  10. package/lib/overlay/ui/OverlayLegendMark.js +5 -0
  11. package/lib/overlay/ui/OverlayLegendMark.js.map +1 -1
  12. package/lib/projection/core/index.d.ts +4 -4
  13. package/lib/projection/core/index.d.ts.map +1 -1
  14. package/lib/projection/core/index.js +2 -2
  15. package/lib/projection/core/index.js.map +1 -1
  16. package/lib/projection/core/projectionCopy.d.ts +2 -0
  17. package/lib/projection/core/projectionCopy.d.ts.map +1 -1
  18. package/lib/projection/core/projectionCopy.js +1 -0
  19. package/lib/projection/core/projectionCopy.js.map +1 -1
  20. package/lib/projection/core/projectionGroupings.d.ts +44 -0
  21. package/lib/projection/core/projectionGroupings.d.ts.map +1 -0
  22. package/lib/projection/core/projectionGroupings.js +132 -0
  23. package/lib/projection/core/projectionGroupings.js.map +1 -0
  24. package/lib/projection/core/projectionOptions.d.ts +16 -6
  25. package/lib/projection/core/projectionOptions.d.ts.map +1 -1
  26. package/lib/projection/core/projectionOptions.js +7 -1
  27. package/lib/projection/core/projectionOptions.js.map +1 -1
  28. package/lib/projection/core/projectionPanelWords.d.ts +6 -0
  29. package/lib/projection/core/projectionPanelWords.d.ts.map +1 -1
  30. package/lib/projection/core/projectionPanelWords.js +4 -0
  31. package/lib/projection/core/projectionPanelWords.js.map +1 -1
  32. package/lib/projection/core/projectionSamples.d.ts +63 -32
  33. package/lib/projection/core/projectionSamples.d.ts.map +1 -1
  34. package/lib/projection/core/projectionSamples.js +1 -80
  35. package/lib/projection/core/projectionSamples.js.map +1 -1
  36. package/lib/projection/core/projectionStrings.d.ts +2 -0
  37. package/lib/projection/core/projectionStrings.d.ts.map +1 -1
  38. package/lib/projection/core/projectionStrings.js +10 -1
  39. package/lib/projection/core/projectionStrings.js.map +1 -1
  40. package/lib/projection/core/resolveProjectionOptions.d.ts +8 -3
  41. package/lib/projection/core/resolveProjectionOptions.d.ts.map +1 -1
  42. package/lib/projection/core/resolveProjectionOptions.js +58 -5
  43. package/lib/projection/core/resolveProjectionOptions.js.map +1 -1
  44. package/lib/projection/ui/ProjectionBar.d.ts +1 -1
  45. package/lib/projection/ui/ProjectionBar.d.ts.map +1 -1
  46. package/lib/projection/ui/ProjectionBar.js +3 -1
  47. package/lib/projection/ui/ProjectionBar.js.map +1 -1
  48. package/lib/projection/ui/ProjectionGroupingPickers.d.ts +38 -0
  49. package/lib/projection/ui/ProjectionGroupingPickers.d.ts.map +1 -0
  50. package/lib/projection/ui/ProjectionGroupingPickers.js +33 -0
  51. package/lib/projection/ui/ProjectionGroupingPickers.js.map +1 -0
  52. package/lib/projection/ui/ProjectionMapControls.d.ts +6 -7
  53. package/lib/projection/ui/ProjectionMapControls.d.ts.map +1 -1
  54. package/lib/projection/ui/ProjectionMapControls.js +11 -9
  55. package/lib/projection/ui/ProjectionMapControls.js.map +1 -1
  56. package/lib/projection/ui/ProjectionMapLegend.d.ts.map +1 -1
  57. package/lib/projection/ui/ProjectionMapLegend.js +1 -1
  58. package/lib/projection/ui/ProjectionMapLegend.js.map +1 -1
  59. package/lib/projection/ui/ProjectionMapMore.d.ts +2 -2
  60. package/lib/projection/ui/ProjectionMapMore.d.ts.map +1 -1
  61. package/lib/projection/ui/ProjectionMapMore.js +7 -5
  62. package/lib/projection/ui/ProjectionMapMore.js.map +1 -1
  63. package/lib/projection/ui/ProjectionMapTab.d.ts +15 -6
  64. package/lib/projection/ui/ProjectionMapTab.d.ts.map +1 -1
  65. package/lib/projection/ui/ProjectionMapTab.js +11 -7
  66. package/lib/projection/ui/ProjectionMapTab.js.map +1 -1
  67. package/lib/projection/ui/ProjectionPairsMore.d.ts +3 -7
  68. package/lib/projection/ui/ProjectionPairsMore.d.ts.map +1 -1
  69. package/lib/projection/ui/ProjectionPairsMore.js +4 -5
  70. package/lib/projection/ui/ProjectionPairsMore.js.map +1 -1
  71. package/lib/projection/ui/ProjectionPairsTab.d.ts.map +1 -1
  72. package/lib/projection/ui/ProjectionPairsTab.js +2 -2
  73. package/lib/projection/ui/ProjectionPairsTab.js.map +1 -1
  74. package/lib/projection/ui/ProjectionPanel.d.ts +1 -1
  75. package/lib/projection/ui/ProjectionPanel.d.ts.map +1 -1
  76. package/lib/projection/ui/ProjectionPanel.js +1 -1
  77. package/lib/projection/ui/ProjectionPanel.js.map +1 -1
  78. package/lib/projection/ui/ProjectionReadout.d.ts +7 -1
  79. package/lib/projection/ui/ProjectionReadout.d.ts.map +1 -1
  80. package/lib/projection/ui/ProjectionReadout.js +19 -7
  81. package/lib/projection/ui/ProjectionReadout.js.map +1 -1
  82. package/lib/projection/ui/ProjectionSpaceControls.d.ts +3 -5
  83. package/lib/projection/ui/ProjectionSpaceControls.d.ts.map +1 -1
  84. package/lib/projection/ui/ProjectionSpaceControls.js +9 -7
  85. package/lib/projection/ui/ProjectionSpaceControls.js.map +1 -1
  86. package/lib/projection/ui/ProjectionSpaceMore.d.ts +2 -2
  87. package/lib/projection/ui/ProjectionSpaceMore.d.ts.map +1 -1
  88. package/lib/projection/ui/ProjectionSpaceMore.js +5 -4
  89. package/lib/projection/ui/ProjectionSpaceMore.js.map +1 -1
  90. package/lib/projection/ui/ProjectionSpaceTab.d.ts +11 -3
  91. package/lib/projection/ui/ProjectionSpaceTab.d.ts.map +1 -1
  92. package/lib/projection/ui/ProjectionSpaceTab.js +7 -4
  93. package/lib/projection/ui/ProjectionSpaceTab.js.map +1 -1
  94. package/lib/projection/ui/ProjectionViewer.d.ts.map +1 -1
  95. package/lib/projection/ui/ProjectionViewer.js +1 -0
  96. package/lib/projection/ui/ProjectionViewer.js.map +1 -1
  97. package/lib/projection/ui/projectionBarReadings.d.ts +4 -1
  98. package/lib/projection/ui/projectionBarReadings.d.ts.map +1 -1
  99. package/lib/projection/ui/projectionBarReadings.js +14 -4
  100. package/lib/projection/ui/projectionBarReadings.js.map +1 -1
  101. package/lib/projection/ui/projectionBarSlots.d.ts +4 -2
  102. package/lib/projection/ui/projectionBarSlots.d.ts.map +1 -1
  103. package/lib/projection/ui/projectionBarSlots.js +3 -7
  104. package/lib/projection/ui/projectionBarSlots.js.map +1 -1
  105. package/lib/projection/ui/projectionMapChoices.d.ts +31 -6
  106. package/lib/projection/ui/projectionMapChoices.d.ts.map +1 -1
  107. package/lib/projection/ui/projectionMapChoices.js +58 -9
  108. package/lib/projection/ui/projectionMapChoices.js.map +1 -1
  109. package/lib/projection/ui/projectionMapChrome.d.ts +3 -9
  110. package/lib/projection/ui/projectionMapChrome.d.ts.map +1 -1
  111. package/lib/projection/ui/projectionMapChrome.js +41 -27
  112. package/lib/projection/ui/projectionMapChrome.js.map +1 -1
  113. package/lib/projection/ui/projectionMapCorner.d.ts +25 -0
  114. package/lib/projection/ui/projectionMapCorner.d.ts.map +1 -0
  115. package/lib/projection/ui/projectionMapCorner.js +46 -0
  116. package/lib/projection/ui/projectionMapCorner.js.map +1 -0
  117. package/lib/projection/ui/projectionMapModel.d.ts +9 -18
  118. package/lib/projection/ui/projectionMapModel.d.ts.map +1 -1
  119. package/lib/projection/ui/projectionMapModel.js +14 -39
  120. package/lib/projection/ui/projectionMapModel.js.map +1 -1
  121. package/lib/projection/ui/projectionMapView.d.ts +3 -1
  122. package/lib/projection/ui/projectionMapView.d.ts.map +1 -1
  123. package/lib/projection/ui/projectionMapView.js +9 -4
  124. package/lib/projection/ui/projectionMapView.js.map +1 -1
  125. package/lib/projection/ui/projectionSelectionSentence.d.ts +10 -0
  126. package/lib/projection/ui/projectionSelectionSentence.d.ts.map +1 -0
  127. package/lib/projection/ui/projectionSelectionSentence.js +18 -0
  128. package/lib/projection/ui/projectionSelectionSentence.js.map +1 -0
  129. package/lib/projection/ui/projectionStateApi.d.ts +47 -0
  130. package/lib/projection/ui/projectionStateApi.d.ts.map +1 -0
  131. package/lib/projection/ui/projectionStateApi.js +9 -0
  132. package/lib/projection/ui/projectionStateApi.js.map +1 -0
  133. package/lib/projection/ui/projectionTabModels.js +1 -1
  134. package/lib/projection/ui/projectionTabModels.js.map +1 -1
  135. package/lib/projection/ui/useProjectionState.d.ts +1 -29
  136. package/lib/projection/ui/useProjectionState.d.ts.map +1 -1
  137. package/lib/projection/ui/useProjectionState.js +13 -5
  138. package/lib/projection/ui/useProjectionState.js.map +1 -1
  139. package/lib/scatter/core/index.d.ts +1 -0
  140. package/lib/scatter/core/index.d.ts.map +1 -1
  141. package/lib/scatter/core/index.js +1 -0
  142. package/lib/scatter/core/index.js.map +1 -1
  143. package/lib/scatter/core/pointShape.d.ts +18 -0
  144. package/lib/scatter/core/pointShape.d.ts.map +1 -0
  145. package/lib/scatter/core/pointShape.js +70 -0
  146. package/lib/scatter/core/pointShape.js.map +1 -0
  147. package/lib/scatter/ui/ScatterPlot.d.ts.map +1 -1
  148. package/lib/scatter/ui/ScatterPlot.js +3 -2
  149. package/lib/scatter/ui/ScatterPlot.js.map +1 -1
  150. package/lib/scatter/ui/ScatterPointLayer.d.ts +14 -1
  151. package/lib/scatter/ui/ScatterPointLayer.d.ts.map +1 -1
  152. package/lib/scatter/ui/ScatterPointLayer.js +15 -3
  153. package/lib/scatter/ui/ScatterPointLayer.js.map +1 -1
  154. package/lib/scatter/ui/scatterFigureProps.d.ts +13 -0
  155. package/lib/scatter/ui/scatterFigureProps.d.ts.map +1 -1
  156. package/lib/scatter/ui/scatterMarkGlyph.d.ts +2 -1
  157. package/lib/scatter/ui/scatterMarkGlyph.d.ts.map +1 -1
  158. package/lib/scatter/ui/scatterMarkGlyph.js +7 -1
  159. package/lib/scatter/ui/scatterMarkGlyph.js.map +1 -1
  160. package/lib/scatter3d/ui/ScatterCloud.d.ts.map +1 -1
  161. package/lib/scatter3d/ui/ScatterCloud.js +2 -1
  162. package/lib/scatter3d/ui/ScatterCloud.js.map +1 -1
  163. package/package.json +1 -1
  164. package/src/overlay/core/index.ts +6 -2
  165. package/src/overlay/core/overlayMarks.ts +51 -6
  166. package/src/overlay/ui/OverlayLegendMark.tsx +5 -0
  167. package/src/projection/core/index.ts +11 -3
  168. package/src/projection/core/projectionCopy.ts +3 -0
  169. package/src/projection/core/projectionGroupings.ts +174 -0
  170. package/src/projection/core/projectionOptions.ts +18 -7
  171. package/src/projection/core/projectionPanelWords.ts +10 -0
  172. package/src/projection/core/projectionSamples.ts +62 -120
  173. package/src/projection/core/projectionStrings.ts +12 -1
  174. package/src/projection/core/resolveProjectionOptions.ts +66 -4
  175. package/src/projection/ui/ProjectionBar.tsx +4 -2
  176. package/src/projection/ui/ProjectionGroupingPickers.tsx +91 -0
  177. package/src/projection/ui/ProjectionMapControls.tsx +29 -32
  178. package/src/projection/ui/ProjectionMapLegend.tsx +1 -1
  179. package/src/projection/ui/ProjectionMapMore.tsx +14 -4
  180. package/src/projection/ui/ProjectionMapTab.tsx +27 -9
  181. package/src/projection/ui/ProjectionPairsMore.tsx +12 -21
  182. package/src/projection/ui/ProjectionPairsTab.tsx +5 -2
  183. package/src/projection/ui/ProjectionPanel.tsx +7 -3
  184. package/src/projection/ui/ProjectionReadout.tsx +28 -8
  185. package/src/projection/ui/ProjectionSpaceControls.tsx +20 -27
  186. package/src/projection/ui/ProjectionSpaceMore.tsx +12 -3
  187. package/src/projection/ui/ProjectionSpaceTab.tsx +23 -6
  188. package/src/projection/ui/ProjectionViewer.tsx +1 -0
  189. package/src/projection/ui/projectionBarReadings.ts +24 -8
  190. package/src/projection/ui/projectionBarSlots.tsx +10 -9
  191. package/src/projection/ui/projectionMapChoices.ts +71 -14
  192. package/src/projection/ui/projectionMapChrome.ts +55 -30
  193. package/src/projection/ui/projectionMapCorner.ts +67 -0
  194. package/src/projection/ui/projectionMapModel.ts +20 -59
  195. package/src/projection/ui/projectionMapView.ts +15 -8
  196. package/src/projection/ui/projectionSelectionSentence.ts +22 -0
  197. package/src/projection/ui/projectionStateApi.ts +57 -0
  198. package/src/projection/ui/projectionTabModels.ts +1 -1
  199. package/src/projection/ui/useProjectionState.ts +33 -37
  200. package/src/scatter/core/index.ts +1 -0
  201. package/src/scatter/core/pointShape.ts +80 -0
  202. package/src/scatter/ui/ScatterPlot.tsx +4 -1
  203. package/src/scatter/ui/ScatterPointLayer.tsx +39 -11
  204. package/src/scatter/ui/scatterFigureProps.ts +13 -0
  205. package/src/scatter/ui/scatterMarkGlyph.tsx +9 -1
  206. package/src/scatter3d/ui/ScatterCloud.tsx +3 -0
package/README.md CHANGED
@@ -82,7 +82,7 @@ through a wildcard subpath exactly as `react-science` serves its own.
82
82
  | **Slideshows** | `parseTalk`, `splitDemoLinks`, `slideActionForKey`, `parseTalkOrigin`, `buildTalkManifest` (all `/slides`) | `Slideshow`, `SlideView`, `TalkList`, `BackToSlides` (all `/slides`), `cheminfoTalks` (`/vite`) |
83
83
  | **Token guard** | `findTokenViolations` | `cheminfo-check-tokens` (the bin) |
84
84
  | **Figures** | `chartScale`, `chartAxisScale`, `chartAxisTitle`, `chartShare`, `chartColumnExtent`, `chartBinCounts`, `chartSeriesColor`, `rowMatrix`, `stackedMatrix`, `emptiestCorner`, `placeOverlayCard`, `overlayMetrics` | `ChartFrame`, `ChartAxis`, `TrackedLineChart`, `OverlayBar`, `OverlaySelect`, `OverlaySegmented`, `OverlayToggle`, `OverlayNumber`, `OverlayLegend`, `OverlayCaption`, `OverlayReadout` |
85
- | **Projections** | `pcaResult`, `embeddingResult`, `projectionTabs`, `loadingProfiles`, `explainedShares`, `confidenceEllipse`, `projectEllipse`, `pointsInPolygon`, `resolveProjectionGroups`, `PROJECTION_COPY` | `PcaViewer`, `ProjectionViewer`, `ScatterPlot`, `ScatterMatrix` |
85
+ | **Projections** | `pcaResult`, `embeddingResult`, `projectionTabs`, `loadingProfiles`, `explainedShares`, `confidenceEllipse`, `projectEllipse`, `pointsInPolygon`, `resolveProjectionGroups`, `resolveProjectionShapes`, `PROJECTION_COPY` | `PcaViewer`, `ProjectionViewer`, `ScatterPlot`, `ScatterMatrix` |
86
86
  | **Parallel coordinates** | `parallelAxisOf`, `parallelAxisLayouts`, `parallelIncludedMask`, `parallelKeptCount`, `parallelNearestRow`, `parallelSegmentAt`, `parallelBandAt`, `parallelRangeOf`, `parallelPalette`, `parallelColorSteps`, `paintParallelLines` | `ParallelCoordinates` |
87
87
  | **Periodic table** | `PERIODIC_ELEMENTS`, `elementBySymbol`, `elementByAtomicNumber`, `cellOf`, `placedElements`, `elementByArrowKey`, `categorySwatch`, `CATEGORY_LABELS` | `PeriodicTable`, `ElementCell`, `CategoryLegend` |
88
88
 
@@ -390,8 +390,11 @@ const pca = new PCA(rows, { scale: true });
390
390
  }}
391
391
  samples={{
392
392
  ids,
393
- groups: species,
394
- groupLabel: 'Species',
393
+ labels: names, // what the card and the map write; `ids` stay the keys
394
+ groupings: [
395
+ { id: 'species', label: 'Species', groups: species }, // colours the dots
396
+ { id: 'cluster', label: 'Cluster', groups: clusters }, // shapes them
397
+ ],
395
398
  fields: (index) => [
396
399
  { label: 'Sepal length', value: `${rows[index][0]} cm` },
397
400
  ],
@@ -427,6 +430,13 @@ const pca = new PCA(rows, { scale: true });
427
430
  sample helped choose where the axes point and is bound to land somewhere
428
431
  reasonable, while a projected one can land anywhere — and landing far out is
429
432
  the finding, not a fault.
433
+ - **Two groupings of the same samples, on one picture.** `samples.groupings` is a
434
+ list: the first colours the dots and the second shapes them, and the reader
435
+ can give either to any grouping from the bar and the cog. A grouping of more
436
+ groups than there are shapes is refused as a whole rather than drawn with two
437
+ groups under one mark, and the hover card names every grouping. It is what a
438
+ clustering is read with: the clusters it found in colour, the classes you gave
439
+ as shapes.
430
440
  - **Colour means one thing per tab and the legend says which.** Groups on the map
431
441
  and the pair grid, components on the other two, drawn from two orders of the
432
442
  Okabe–Ito palette that are disjoint over their first four, so blue-is-setosa on
@@ -10,8 +10,8 @@ export type { EmptiestCornerOptions } from './emptiestCorner.ts';
10
10
  export { emptiestCorner } from './emptiestCorner.ts';
11
11
  export type { OverlayBarFoldOptions } from './overlayCollapse.ts';
12
12
  export { overlayBarFolded, shouldCollapseOverlay } from './overlayCollapse.ts';
13
- export type { OverlayMarkShape } from './overlayMarks.ts';
14
- export { OVERLAY_MARK_SHAPES, isFilledMark } from './overlayMarks.ts';
13
+ export type { OverlayMarkShape, OverlaySampleShape } from './overlayMarks.ts';
14
+ export { OVERLAY_MARK_SHAPES, OVERLAY_SAMPLE_SHAPES, isFilledMark, } from './overlayMarks.ts';
15
15
  export type { OverlayDensity, OverlayMetrics, OverlayPointerKind, } from './overlayMetrics.ts';
16
16
  export { overlayMetrics } from './overlayMetrics.ts';
17
17
  export type { OverlayCorner, OverlayCornerStyle, OverlayPlacement, } from './overlayPlacement.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtE,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EACV,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EACV,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -8,7 +8,7 @@
8
8
  */
9
9
  export { emptiestCorner } from "./emptiestCorner.js";
10
10
  export { overlayBarFolded, shouldCollapseOverlay } from "./overlayCollapse.js";
11
- export { OVERLAY_MARK_SHAPES, isFilledMark } from "./overlayMarks.js";
11
+ export { OVERLAY_MARK_SHAPES, OVERLAY_SAMPLE_SHAPES, isFilledMark, } from "./overlayMarks.js";
12
12
  export { overlayMetrics } from "./overlayMetrics.js";
13
13
  export { overlayCornerStyle } from "./overlayPlacement.js";
14
14
  export { overlayTier, overlayTierWidths } from "./overlayTiers.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -8,16 +8,31 @@
8
8
  * describe its own marks without a `core` module reaching into a `ui` one.
9
9
  */
10
10
  /** Which mark a legend entry, a marker or a series stands for. */
11
- export type OverlayMarkShape = 'dot' | 'ring' | 'square' | 'line' | 'dashed' | 'cross';
11
+ export type OverlayMarkShape = 'dot' | 'ring' | 'square' | 'triangle' | 'diamond' | 'triangle-down' | 'line' | 'dashed' | 'cross';
12
+ /**
13
+ * The shapes a sample's own dot can take, which is how a second grouping of
14
+ * the same samples is drawn while colour keeps the first.
15
+ */
16
+ export type OverlaySampleShape = Extract<OverlayMarkShape, 'dot' | 'square' | 'triangle' | 'diamond' | 'triangle-down'>;
12
17
  /**
13
18
  * Every mark, in the order a picker offers them.
14
19
  *
15
- * The first three separate one filled thing from another by colour alone; the
16
- * last three carry a second meaning on one figure — a line for a component
17
- * beside dots for the samples — which is what keeps a figure readable when the
18
- * colours run out or the reader does not separate two of them.
20
+ * The filled ones come first and separate one thing from another by colour or
21
+ * by outline alone; the last three carry a second meaning on one figure — a
22
+ * line for a component beside dots for the samples — which is what keeps a
23
+ * figure readable when the colours run out or the reader does not separate two
24
+ * of them.
19
25
  */
20
26
  export declare const OVERLAY_MARK_SHAPES: readonly OverlayMarkShape[];
27
+ /**
28
+ * The shapes a second grouping is given, in the order its groups are listed.
29
+ *
30
+ * Five, because that is about where a reader stops telling small shapes apart
31
+ * at a glance. None of them is a ring or a cross: a ring is a sample placed
32
+ * into a finished model and a cross is a group's average, and a sample drawn
33
+ * as either would be read as one of those.
34
+ */
35
+ export declare const OVERLAY_SAMPLE_SHAPES: readonly OverlaySampleShape[];
21
36
  /**
22
37
  * Whether a mark is drawn as a solid area rather than as a stroke.
23
38
  *
@@ -1 +1 @@
1
- {"version":3,"file":"overlayMarks.d.ts","sourceRoot":"","sources":["../../../src/overlay/core/overlayMarks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kEAAkE;AAClE,MAAM,MAAM,gBAAgB,GAC1B,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAO1D,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"overlayMarks.d.ts","sourceRoot":"","sources":["../../../src/overlay/core/overlayMarks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kEAAkE;AAClE,MAAM,MAAM,gBAAgB,GACxB,KAAK,GACL,MAAM,GACN,QAAQ,GACR,UAAU,GACV,SAAS,GACT,eAAe,GACf,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACtC,gBAAgB,EAChB,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,eAAe,CAC5D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAU1D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAM9D,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAE7D"}
@@ -10,19 +10,38 @@
10
10
  /**
11
11
  * Every mark, in the order a picker offers them.
12
12
  *
13
- * The first three separate one filled thing from another by colour alone; the
14
- * last three carry a second meaning on one figure — a line for a component
15
- * beside dots for the samples — which is what keeps a figure readable when the
16
- * colours run out or the reader does not separate two of them.
13
+ * The filled ones come first and separate one thing from another by colour or
14
+ * by outline alone; the last three carry a second meaning on one figure — a
15
+ * line for a component beside dots for the samples — which is what keeps a
16
+ * figure readable when the colours run out or the reader does not separate two
17
+ * of them.
17
18
  */
18
19
  export const OVERLAY_MARK_SHAPES = [
19
20
  'dot',
20
21
  'ring',
21
22
  'square',
23
+ 'triangle',
24
+ 'diamond',
25
+ 'triangle-down',
22
26
  'line',
23
27
  'dashed',
24
28
  'cross',
25
29
  ];
30
+ /**
31
+ * The shapes a second grouping is given, in the order its groups are listed.
32
+ *
33
+ * Five, because that is about where a reader stops telling small shapes apart
34
+ * at a glance. None of them is a ring or a cross: a ring is a sample placed
35
+ * into a finished model and a cross is a group's average, and a sample drawn
36
+ * as either would be read as one of those.
37
+ */
38
+ export const OVERLAY_SAMPLE_SHAPES = [
39
+ 'dot',
40
+ 'square',
41
+ 'triangle',
42
+ 'diamond',
43
+ 'triangle-down',
44
+ ];
26
45
  /**
27
46
  * Whether a mark is drawn as a solid area rather than as a stroke.
28
47
  *
@@ -33,6 +52,13 @@ export const OVERLAY_MARK_SHAPES = [
33
52
  * @returns `true` for the filled marks, `false` for the drawn ones.
34
53
  */
35
54
  export function isFilledMark(shape) {
36
- return shape === 'dot' || shape === 'square';
55
+ return FILLED_MARKS.has(shape);
37
56
  }
57
+ const FILLED_MARKS = new Set([
58
+ 'dot',
59
+ 'square',
60
+ 'triangle',
61
+ 'diamond',
62
+ 'triangle-down',
63
+ ]);
38
64
  //# sourceMappingURL=overlayMarks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"overlayMarks.js","sourceRoot":"","sources":["../../../src/overlay/core/overlayMarks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,KAAK;IACL,MAAM;IACN,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,OAAO;CACR,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAuB;IAClD,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"overlayMarks.js","sourceRoot":"","sources":["../../../src/overlay/core/overlayMarks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAuBH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,KAAK;IACL,MAAM;IACN,QAAQ;IACR,UAAU;IACV,SAAS;IACT,eAAe;IACf,MAAM;IACN,QAAQ;IACR,OAAO;CACR,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAkC;IAClE,KAAK;IACL,QAAQ;IACR,UAAU;IACV,SAAS;IACT,eAAe;CAChB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAuB;IAClD,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,YAAY,GAAkC,IAAI,GAAG,CAAmB;IAC5E,KAAK;IACL,QAAQ;IACR,UAAU;IACV,SAAS;IACT,eAAe;CAChB,CAAC,CAAC"}
@@ -30,6 +30,11 @@ const MARK_GEOMETRY = {
30
30
  dot: _jsx("circle", { cx: "6", cy: "6", r: "4.2" }),
31
31
  ring: _jsx("circle", { cx: "6", cy: "6", r: "3.4", strokeWidth: "2.2" }),
32
32
  square: _jsx("rect", { x: "2", y: "2", width: "8", height: "8", rx: "1.5" }),
33
+ // Balanced on the centre of the box, as the dots they name are balanced on
34
+ // their samples.
35
+ triangle: _jsx("path", { d: "M6 0.8L10.5 8.6L1.5 8.6Z" }),
36
+ diamond: _jsx("path", { d: "M6 1L11 6L6 11L1 6Z" }),
37
+ 'triangle-down': _jsx("path", { d: "M1.5 3.4L10.5 3.4L6 11.2Z" }),
33
38
  line: _jsx("line", { x1: "0.5", y1: "6", x2: "11.5", y2: "6", strokeWidth: "2.8" }),
34
39
  dashed: (_jsx("line", { x1: "0.5", y1: "6", x2: "11.5", y2: "6", strokeWidth: "2.8", strokeDasharray: "3.4 2.6" })),
35
40
  cross: _jsx("path", { d: "M2.2 2.2 L9.8 9.8 M9.8 2.2 L2.2 9.8", strokeWidth: "2.4" }),
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayLegendMark.js","sourceRoot":"","sources":["../../../src/overlay/ui/OverlayLegendMark.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAuBvD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEnC,OAAO,CACL,cACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,iBACP,MAAM,EAClB,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE;YACL,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACnC,YAED,YACE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAC7B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAC/B,aAAa,EAAC,OAAO,YAEpB,aAAa,CAAC,KAAK,CAAC,GACnB,GACA,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,aAAa,GAA2C;IAC5D,GAAG,EAAE,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,KAAK,GAAG;IACrC,IAAI,EAAE,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,KAAK,EAAC,WAAW,EAAC,KAAK,GAAG;IACxD,MAAM,EAAE,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,EAAC,EAAE,EAAC,KAAK,GAAG;IAC1D,IAAI,EAAE,eAAM,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,GAAG,EAAC,WAAW,EAAC,KAAK,GAAG;IACjE,MAAM,EAAE,CACN,eACE,EAAE,EAAC,KAAK,EACR,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,MAAM,EACT,EAAE,EAAC,GAAG,EACN,WAAW,EAAC,KAAK,EACjB,eAAe,EAAC,SAAS,GACzB,CACH;IACD,KAAK,EAAE,eAAM,CAAC,EAAC,qCAAqC,EAAC,WAAW,EAAC,KAAK,GAAG;CAC1E,CAAC;AAEF;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"OverlayLegendMark.js","sourceRoot":"","sources":["../../../src/overlay/ui/OverlayLegendMark.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAuBvD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEnC,OAAO,CACL,cACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,iBACP,MAAM,EAClB,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE;YACL,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACnC,YAED,YACE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAC7B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAC/B,aAAa,EAAC,OAAO,YAEpB,aAAa,CAAC,KAAK,CAAC,GACnB,GACA,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,aAAa,GAA2C;IAC5D,GAAG,EAAE,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,KAAK,GAAG;IACrC,IAAI,EAAE,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,KAAK,EAAC,WAAW,EAAC,KAAK,GAAG;IACxD,MAAM,EAAE,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,EAAC,EAAE,EAAC,KAAK,GAAG;IAC1D,2EAA2E;IAC3E,iBAAiB;IACjB,QAAQ,EAAE,eAAM,CAAC,EAAC,0BAA0B,GAAG;IAC/C,OAAO,EAAE,eAAM,CAAC,EAAC,qBAAqB,GAAG;IACzC,eAAe,EAAE,eAAM,CAAC,EAAC,2BAA2B,GAAG;IACvD,IAAI,EAAE,eAAM,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,GAAG,EAAC,WAAW,EAAC,KAAK,GAAG;IACjE,MAAM,EAAE,CACN,eACE,EAAE,EAAC,KAAK,EACR,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,MAAM,EACT,EAAE,EAAC,GAAG,EACN,WAAW,EAAC,KAAK,EACjB,eAAe,EAAC,SAAS,GACzB,CACH;IACD,KAAK,EAAE,eAAM,CAAC,EAAC,qCAAqC,EAAC,WAAW,EAAC,KAAK,GAAG;CAC1E,CAAC;AAEF;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,CAAC"}
@@ -25,13 +25,13 @@ export { pcaResult } from './pcaResult.ts';
25
25
  export type { ProjectionCopy } from './projectionCopy.ts';
26
26
  export { PROJECTION_COPY } from './projectionCopy.ts';
27
27
  export type { ProjectionCopyPatch } from './projectionCopyPatch.ts';
28
- export type { ProjectionColorBy, ProjectionOptionId, ProjectionOptions, ProjectionVariablesView, } from './projectionOptions.ts';
28
+ export type { ProjectionOptionId, ProjectionOptions, ProjectionVariablesView, } from './projectionOptions.ts';
29
29
  export { mergeProjectionCopy } from './mergeProjectionCopy.ts';
30
- export { DEFAULT_PROJECTION_OPTIONS } from './projectionOptions.ts';
30
+ export { DEFAULT_PROJECTION_OPTIONS, NO_GROUPING, } from './projectionOptions.ts';
31
31
  export type { ProjectionChoiceWords, ProjectionOutlineWords, ProjectionPanelWords, ProjectionReasonWords, } from './projectionPanelWords.ts';
32
32
  export type { ProjectionAxis, ProjectionLoadings, ProjectionMarker, ProjectionResult, } from './projectionResult.ts';
33
- export type { ProjectionField, ProjectionSamples, ResolvedProjectionGroups, } from './projectionSamples.ts';
34
- export { resolveProjectionGroups } from './projectionSamples.ts';
33
+ export type { ProjectionField, ProjectionGrouping, ProjectionSamples, ResolvedProjectionGroups, ResolvedProjectionShapes, } from './projectionSamples.ts';
34
+ export { projectionGrouping, resolveProjectionGroups, resolveProjectionShapes, } from './projectionGroupings.ts';
35
35
  export type { ProjectionBarWords, ProjectionHelp, ProjectionHelpExample, } from './projectionStrings.ts';
36
36
  export { PROJECTION_HELP } from './projectionStrings.ts';
37
37
  export type { ProjectionTab } from './projectionTabs.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/projection/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/projection/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
@@ -19,8 +19,8 @@ export { fillCopy } from "./fillCopy.js";
19
19
  export { pcaResult } from "./pcaResult.js";
20
20
  export { PROJECTION_COPY } from "./projectionCopy.js";
21
21
  export { mergeProjectionCopy } from "./mergeProjectionCopy.js";
22
- export { DEFAULT_PROJECTION_OPTIONS } from "./projectionOptions.js";
23
- export { resolveProjectionGroups } from "./projectionSamples.js";
22
+ export { DEFAULT_PROJECTION_OPTIONS, NO_GROUPING, } from "./projectionOptions.js";
23
+ export { projectionGrouping, resolveProjectionGroups, resolveProjectionShapes, } from "./projectionGroupings.js";
24
24
  export { PROJECTION_HELP } from "./projectionStrings.js";
25
25
  export { projectionTabs } from "./projectionTabs.js";
26
26
  export { resolveProjectionOptions } from "./resolveProjectionOptions.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/projection/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAkBpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAMjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAOzE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/projection/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAoBhC,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAOzE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
@@ -66,6 +66,8 @@ export interface ProjectionCopy {
66
66
  projected: string;
67
67
  /** The title of a key whose colour stands for nothing, so only shape is left. */
68
68
  shapes: string;
69
+ /** What the shape stands for, after what the colour does. Carries `{shapes}`. */
70
+ shapedBy: string;
69
71
  };
70
72
  /** The sentences the viewer builds from the data. */
71
73
  sentence: {
@@ -1 +1 @@
1
- {"version":3,"file":"projectionCopy.d.ts","sourceRoot":"","sources":["../../../src/projection/core/projectionCopy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectionCopy.d.ts","sourceRoot":"","sources":["../../../src/projection/core/projectionCopy.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,7 @@ export const PROJECTION_COPY = {
47
47
  notOutlined: 'Not outlined: too few samples.',
48
48
  projected: 'Hollow = added after the map was built',
49
49
  shapes: 'Shape = what each mark is.',
50
+ shapedBy: 'Shape = {shapes}.',
50
51
  },
51
52
  sentence: {
52
53
  sharesFirst: 'Component 1 accounts for {percent} of the differences between your samples.',
@@ -1 +1 @@
1
- {"version":3,"file":"projectionCopy.js","sourceRoot":"","sources":["../../../src/projection/core/projectionCopy.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAKnC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAgIhC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,GAAG,EAAE;QACH,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,wBAAwB;KACjC;IACD,QAAQ,EAAE,oBAAoB;IAC9B,GAAG,EAAE,oBAAoB;IACzB,KAAK,EAAE,sBAAsB;IAC7B,MAAM,EAAE,uBAAuB;IAC/B,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,wBAAwB;IACjC,KAAK,EAAE;QACL,GAAG,EAAE,mLAAmL;QACxL,KAAK,EACH,+PAA+P;QACjQ,KAAK,EACH,gHAAgH;QAClH,mBAAmB,EACjB,mHAAmH;QACrH,cAAc,EACZ,8HAA8H;QAChI,eAAe,EACb,2JAA2J;QAC7J,eAAe,EACb,6GAA6G;QAC/G,MAAM,EACJ,8IAA8I;KACjJ;IACD,MAAM,EAAE;QACN,GAAG,EAAE,mHAAmH;QACxH,KAAK,EACH,gPAAgP;QAClP,YAAY,EAAE,oBAAoB;QAClC,KAAK,EACH,mHAAmH;QACrH,eAAe,EACb,sGAAsG;QACxG,gBAAgB,EACd,6GAA6G;QAC/G,iBAAiB,EACf,uHAAuH;QACzH,eAAe,EACb,8FAA8F;QAChG,MAAM,EACJ,sGAAsG;QACxG,WAAW,EAAE,gCAAgC;QAC7C,SAAS,EAAE,wCAAwC;QACnD,MAAM,EAAE,4BAA4B;KACrC;IACD,QAAQ,EAAE;QACR,WAAW,EACT,6EAA6E;QAC/E,YAAY,EACV,gHAAgH;QAClH,cAAc,EACZ,4GAA4G;QAC9G,SAAS,EAAE,sCAAsC;QACjD,aAAa,EAAE,kDAAkD;QACjE,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,qBAAqB;QAC/B,WAAW,EAAE,yBAAyB;QACtC,aAAa,EAAE,wCAAwC;QACvD,SAAS,EACP,8HAA8H;QAChI,YAAY,EAAE,0BAA0B;QACxC,SAAS,EACP,kFAAkF;KACrF;IACD,MAAM,EAAE;QACN,eAAe,EAAE,mBAAmB;QACpC,SAAS,EAAE,YAAY;QACvB,cAAc,EAAE,iBAAiB;QACjC,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,SAAS;KACnB;IACD,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE;QACL,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE,QAAQ;KACjB;CACF,CAAC"}
1
+ {"version":3,"file":"projectionCopy.js","sourceRoot":"","sources":["../../../src/projection/core/projectionCopy.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAKnC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAkIhC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,GAAG,EAAE;QACH,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,wBAAwB;KACjC;IACD,QAAQ,EAAE,oBAAoB;IAC9B,GAAG,EAAE,oBAAoB;IACzB,KAAK,EAAE,sBAAsB;IAC7B,MAAM,EAAE,uBAAuB;IAC/B,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,wBAAwB;IACjC,KAAK,EAAE;QACL,GAAG,EAAE,mLAAmL;QACxL,KAAK,EACH,+PAA+P;QACjQ,KAAK,EACH,gHAAgH;QAClH,mBAAmB,EACjB,mHAAmH;QACrH,cAAc,EACZ,8HAA8H;QAChI,eAAe,EACb,2JAA2J;QAC7J,eAAe,EACb,6GAA6G;QAC/G,MAAM,EACJ,8IAA8I;KACjJ;IACD,MAAM,EAAE;QACN,GAAG,EAAE,mHAAmH;QACxH,KAAK,EACH,gPAAgP;QAClP,YAAY,EAAE,oBAAoB;QAClC,KAAK,EACH,mHAAmH;QACrH,eAAe,EACb,sGAAsG;QACxG,gBAAgB,EACd,6GAA6G;QAC/G,iBAAiB,EACf,uHAAuH;QACzH,eAAe,EACb,8FAA8F;QAChG,MAAM,EACJ,sGAAsG;QACxG,WAAW,EAAE,gCAAgC;QAC7C,SAAS,EAAE,wCAAwC;QACnD,MAAM,EAAE,4BAA4B;QACpC,QAAQ,EAAE,mBAAmB;KAC9B;IACD,QAAQ,EAAE;QACR,WAAW,EACT,6EAA6E;QAC/E,YAAY,EACV,gHAAgH;QAClH,cAAc,EACZ,4GAA4G;QAC9G,SAAS,EAAE,sCAAsC;QACjD,aAAa,EAAE,kDAAkD;QACjE,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,qBAAqB;QAC/B,WAAW,EAAE,yBAAyB;QACtC,aAAa,EAAE,wCAAwC;QACvD,SAAS,EACP,8HAA8H;QAChI,YAAY,EAAE,0BAA0B;QACxC,SAAS,EACP,kFAAkF;KACrF;IACD,MAAM,EAAE;QACN,eAAe,EAAE,mBAAmB;QACpC,SAAS,EAAE,YAAY;QACvB,cAAc,EAAE,iBAAiB;QACjC,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,SAAS;KACnB;IACD,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE;QACL,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE,QAAQ;KACjB;CACF,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * How the groupings a page hands in become what a figure draws: the one that
3
+ * colours the dots, painted from the shared palette, and the one that shapes
4
+ * them, given one shape per group.
5
+ *
6
+ * Both are cut the same way — the page's own order first, then every group in
7
+ * the order its first row names it — so a group keeps its colour and its shape
8
+ * however the rows are filtered.
9
+ */
10
+ import type { ProjectionGrouping, ProjectionSamples, ResolvedProjectionGroups, ResolvedProjectionShapes } from './projectionSamples.ts';
11
+ /**
12
+ * The grouping a set of samples is coloured by, in a shape a legend and a plot
13
+ * can both read.
14
+ *
15
+ * A group named in `order` but held by no row is kept, so a legend does not
16
+ * reshuffle when a filter empties one; a row naming a group that is not in
17
+ * `order` is appended in the order it appears.
18
+ * @param grouping - The grouping, or nothing when the dots are not coloured.
19
+ * @param count - How many rows there are, which is the score matrix's height.
20
+ * @returns The resolved groups. No grouping gives no entries at all, and every
21
+ * row lands at `-1`.
22
+ */
23
+ export declare function resolveProjectionGroups(grouping: ProjectionGrouping | undefined, count: number): ResolvedProjectionGroups;
24
+ /**
25
+ * The grouping a set of samples is shaped by, one shape per group.
26
+ *
27
+ * A grouping of more groups than there are shapes is refused as a whole rather
28
+ * than drawn with two groups sharing a shape, or with the last ones falling
29
+ * back to a disc: either would put two groups under one mark, which is the one
30
+ * thing a key cannot undo.
31
+ * @param grouping - The grouping, or nothing when the dots are not shaped.
32
+ * @param count - How many rows there are, which is the score matrix's height.
33
+ * @returns The resolved shapes, or `null` when there is no grouping or its
34
+ * groups outnumber the shapes.
35
+ */
36
+ export declare function resolveProjectionShapes(grouping: ProjectionGrouping | undefined, count: number): ResolvedProjectionShapes | null;
37
+ /**
38
+ * The grouping carrying an id.
39
+ * @param samples - Who the rows are.
40
+ * @param id - The id asked for.
41
+ * @returns The grouping, or `undefined` when none carries it.
42
+ */
43
+ export declare function projectionGrouping(samples: ProjectionSamples, id: string): ProjectionGrouping | undefined;
44
+ //# sourceMappingURL=projectionGroupings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectionGroupings.d.ts","sourceRoot":"","sources":["../../../src/projection/core/projectionGroupings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,KAAK,EAAE,MAAM,GACZ,wBAAwB,CAK1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,KAAK,EAAE,MAAM,GACZ,wBAAwB,GAAG,IAAI,CASjC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,EAAE,EAAE,MAAM,GACT,kBAAkB,GAAG,SAAS,CAKhC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * How the groupings a page hands in become what a figure draws: the one that
3
+ * colours the dots, painted from the shared palette, and the one that shapes
4
+ * them, given one shape per group.
5
+ *
6
+ * Both are cut the same way — the page's own order first, then every group in
7
+ * the order its first row names it — so a group keeps its colour and its shape
8
+ * however the rows are filtered.
9
+ */
10
+ import { CHART_SERIES_COLORS, chartSeriesColor, } from "../../chart/core/chartPalette.js";
11
+ import { OVERLAY_SAMPLE_SHAPES } from "../../overlay/core/overlayMarks.js";
12
+ /**
13
+ * The grouping a set of samples is coloured by, in a shape a legend and a plot
14
+ * can both read.
15
+ *
16
+ * A group named in `order` but held by no row is kept, so a legend does not
17
+ * reshuffle when a filter empties one; a row naming a group that is not in
18
+ * `order` is appended in the order it appears.
19
+ * @param grouping - The grouping, or nothing when the dots are not coloured.
20
+ * @param count - How many rows there are, which is the score matrix's height.
21
+ * @returns The resolved groups. No grouping gives no entries at all, and every
22
+ * row lands at `-1`.
23
+ */
24
+ export function resolveProjectionGroups(grouping, count) {
25
+ const { label, entries, rowOf } = partition(grouping, count);
26
+ const colored = entries.map((entry) => ({ ...entry, color: '' }));
27
+ paintGroups(colored, grouping?.colors);
28
+ return { label, entries: colored, groupOf: rowOf };
29
+ }
30
+ /**
31
+ * The grouping a set of samples is shaped by, one shape per group.
32
+ *
33
+ * A grouping of more groups than there are shapes is refused as a whole rather
34
+ * than drawn with two groups sharing a shape, or with the last ones falling
35
+ * back to a disc: either would put two groups under one mark, which is the one
36
+ * thing a key cannot undo.
37
+ * @param grouping - The grouping, or nothing when the dots are not shaped.
38
+ * @param count - How many rows there are, which is the score matrix's height.
39
+ * @returns The resolved shapes, or `null` when there is no grouping or its
40
+ * groups outnumber the shapes.
41
+ */
42
+ export function resolveProjectionShapes(grouping, count) {
43
+ if (grouping === undefined)
44
+ return null;
45
+ const { label, entries, rowOf } = partition(grouping, count);
46
+ if (entries.length > OVERLAY_SAMPLE_SHAPES.length)
47
+ return null;
48
+ const shaped = entries.map((entry, index) => ({
49
+ ...entry,
50
+ shape: OVERLAY_SAMPLE_SHAPES[index] ?? 'dot',
51
+ }));
52
+ return { label, entries: shaped, shapeOf: rowOf };
53
+ }
54
+ /**
55
+ * The grouping carrying an id.
56
+ * @param samples - Who the rows are.
57
+ * @param id - The id asked for.
58
+ * @returns The grouping, or `undefined` when none carries it.
59
+ */
60
+ export function projectionGrouping(samples, id) {
61
+ for (const grouping of samples.groupings ?? NO_GROUPINGS) {
62
+ if (grouping.id === id)
63
+ return grouping;
64
+ }
65
+ return undefined;
66
+ }
67
+ const NO_GROUP = -1;
68
+ const DEFAULT_GROUP_LABEL = 'Group';
69
+ const NO_GROUPINGS = [];
70
+ function partition(grouping, count) {
71
+ const rowCount = Number.isFinite(count) ? Math.max(0, Math.floor(count)) : 0;
72
+ const label = grouping?.label ?? DEFAULT_GROUP_LABEL;
73
+ const rowOf = new Int32Array(rowCount).fill(NO_GROUP);
74
+ const entries = [];
75
+ if (grouping === undefined)
76
+ return { label, entries, rowOf };
77
+ const indexOfGroup = new Map();
78
+ for (const id of grouping.order ?? []) {
79
+ appendGroup(entries, indexOfGroup, id);
80
+ }
81
+ for (let row = 0; row < rowCount; row++) {
82
+ const id = grouping.groups[row];
83
+ if (id === undefined)
84
+ continue;
85
+ const at = appendGroup(entries, indexOfGroup, id);
86
+ rowOf[row] = at;
87
+ const entry = entries[at];
88
+ if (entry !== undefined)
89
+ entry.count++;
90
+ }
91
+ return { label, entries, rowOf };
92
+ }
93
+ function appendGroup(entries, indexOfGroup, id) {
94
+ const known = indexOfGroup.get(id);
95
+ if (known !== undefined)
96
+ return known;
97
+ const at = entries.length;
98
+ indexOfGroup.set(id, at);
99
+ entries.push({ id, label: id, count: 0 });
100
+ return at;
101
+ }
102
+ function paintGroups(entries, pinned) {
103
+ // Every pinned colour is taken out of the palette before any group draws
104
+ // from it, so pinning the third group's hue onto the first does not leave
105
+ // two groups wearing it.
106
+ const taken = new Set();
107
+ if (pinned !== undefined) {
108
+ for (const entry of entries) {
109
+ const color = pinned[entry.id];
110
+ if (color !== undefined)
111
+ taken.add(color.toLowerCase());
112
+ }
113
+ }
114
+ let cursor = 0;
115
+ for (const entry of entries) {
116
+ const own = pinned?.[entry.id];
117
+ if (own !== undefined) {
118
+ entry.color = own;
119
+ continue;
120
+ }
121
+ let color = chartSeriesColor(cursor, 'group');
122
+ while (cursor < CHART_SERIES_COLORS.length &&
123
+ taken.has(color.toLowerCase())) {
124
+ cursor++;
125
+ color = chartSeriesColor(cursor, 'group');
126
+ }
127
+ cursor++;
128
+ taken.add(color.toLowerCase());
129
+ entry.color = color;
130
+ }
131
+ }
132
+ //# sourceMappingURL=projectionGroupings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectionGroupings.js","sourceRoot":"","sources":["../../../src/projection/core/projectionGroupings.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,10 @@ export type ProjectionVariablesView =
12
12
  /** The one selected sample, rebuilt from the components shown. */
13
13
  | 'sample';
14
14
  /**
15
- * What decides a dot's colour on the map: `'group'`, `'none'`, or nothing else
16
- * in this release.
15
+ * The word for "no grouping" wherever an option names one, which is why no
16
+ * grouping may be called it.
17
17
  */
18
- export type ProjectionColorBy = 'group' | 'none';
18
+ export declare const NO_GROUPING = "none";
19
19
  /** What the figure is currently showing. Every field is a control in the floating bar. */
20
20
  export interface ProjectionOptions {
21
21
  /**
@@ -40,10 +40,20 @@ export interface ProjectionOptions {
40
40
  */
41
41
  cloudGesture: CloudGesture;
42
42
  /**
43
- * What decides a dot's colour.
44
- * @default 'group'
43
+ * Which grouping colours the dots, by its id, or `'none'`. An id no grouping
44
+ * carries — the empty string, or one saved on other data — takes the first
45
+ * grouping.
46
+ * @default ''
45
47
  */
46
- colorBy: ProjectionColorBy;
48
+ colorBy: string;
49
+ /**
50
+ * Which grouping gives the dots their shapes, by its id, or `'none'`. An id
51
+ * no grouping carries takes the second grouping — the first when the colour
52
+ * has taken the second — and a grouping of more groups than there are
53
+ * shapes is not drawn.
54
+ * @default ''
55
+ */
56
+ shapeBy: string;
47
57
  /**
48
58
  * How large the group outlines are, or `null` for none.
49
59
  * @default { kind: 'coverage', probability: 0.95 }
@@ -1 +1 @@
1
- {"version":3,"file":"projectionOptions.d.ts","sourceRoot":"","sources":["../../../src/projection/core/projectionOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE,2CAA2C;AAC3C,MAAM,MAAM,uBAAuB;AACjC,uFAAuF;AACrF,QAAQ;AACV,4EAA4E;GAC1E,SAAS;AACX,qFAAqF;GACnF,UAAU;AACZ,kEAAkE;GAChE,QAAQ,CAAC;AAEb;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjD,0FAA0F;AAC1F,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B;;;OAGG;IACH,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;;OAGG;IACH,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,aAAa,EAAE,uBAAuB,CAAC;IACvC;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,aAAa,EAAE,UAAU,GAAG,WAAW,CAAC;IACxC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC;AAEzD,2DAA2D;AAC3D,eAAO,MAAM,0BAA0B,EAAE,iBAoBxC,CAAC"}
1
+ {"version":3,"file":"projectionOptions.d.ts","sourceRoot":"","sources":["../../../src/projection/core/projectionOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE,2CAA2C;AAC3C,MAAM,MAAM,uBAAuB;AACjC,uFAAuF;AACrF,QAAQ;AACV,4EAA4E;GAC1E,SAAS;AACX,qFAAqF;GACnF,UAAU;AACZ,kEAAkE;GAChE,QAAQ,CAAC;AAEb;;;GAGG;AACH,eAAO,MAAM,WAAW,SAAS,CAAC;AAElC,0FAA0F;AAC1F,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,aAAa,EAAE,uBAAuB,CAAC;IACvC;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,aAAa,EAAE,UAAU,GAAG,WAAW,CAAC;IACxC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC;AAEzD,2DAA2D;AAC3D,eAAO,MAAM,0BAA0B,EAAE,iBAqBxC,CAAC"}
@@ -1,10 +1,16 @@
1
+ /**
2
+ * The word for "no grouping" wherever an option names one, which is why no
3
+ * grouping may be called it.
4
+ */
5
+ export const NO_GROUPING = 'none';
1
6
  /** What the figure shows when a site overrides nothing. */
2
7
  export const DEFAULT_PROJECTION_OPTIONS = {
3
8
  xAxis: 0,
4
9
  yAxis: 1,
5
10
  zAxis: 2,
6
11
  cloudGesture: 'turn',
7
- colorBy: 'group',
12
+ colorBy: '',
13
+ shapeBy: '',
8
14
  ellipse: { kind: 'coverage', probability: 0.95 },
9
15
  pointRadius: 3.5,
10
16
  showGroupMeans: false,
@@ -1 +1 @@
1
- {"version":3,"file":"projectionOptions.js","sourceRoot":"","sources":["../../../src/projection/core/projectionOptions.ts"],"names":[],"mappings":"AAkIA,2DAA2D;AAC3D,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE;IAChD,WAAW,EAAE,GAAG;IAChB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,KAAK;IACtB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,CAAC;IACZ,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,CAAC;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,UAAU;IACzB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,SAAS;CACtB,CAAC"}
1
+ {"version":3,"file":"projectionOptions.js","sourceRoot":"","sources":["../../../src/projection/core/projectionOptions.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC;AAyHlC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE;IAChD,WAAW,EAAE,GAAG;IAChB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,KAAK;IACtB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,CAAC;IACZ,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,CAAC;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,UAAU;IACzB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,SAAS;CACtB,CAAC"}
@@ -38,6 +38,12 @@ export interface ProjectionPanelWords {
38
38
  export interface ProjectionReasonWords {
39
39
  /** Why the colour cannot be set: the samples carry no groups. */
40
40
  noGroups: string;
41
+ /** Why the shape cannot be set: the samples carry no groups. */
42
+ noGroupsToShape: string;
43
+ /** Why a grouping is greyed in the shape picker: the colour already draws it. */
44
+ shapeIsColour: string;
45
+ /** Why a grouping is greyed in the shape picker: it has more groups than shapes. */
46
+ tooManyShapes: string;
41
47
  /** Why the map's outlines cannot be set while nothing is coloured. */
42
48
  uncolouredOutlines: string;
43
49
  /** Why the cloud's shells cannot be set while nothing is coloured. */
@@ -1 +1 @@
1
- {"version":3,"file":"projectionPanelWords.d.ts","sourceRoot":"","sources":["../../../src/projection/core/projectionPanelWords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,IAAI,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACzC;;;;;OAKG;IACH,OAAO,EAAE;QACP,2EAA2E;QAC3E,IAAI,EAAE,MAAM,CAAC;QACb,0CAA0C;QAC1C,OAAO,EAAE,MAAM,CAAC;QAChB,yDAAyD;QACzD,SAAS,EAAE,MAAM,CAAC;QAClB,gFAAgF;QAChF,QAAQ,EAAE,MAAM,CAAC;QACjB,sEAAsE;QACtE,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oEAAoE;AACpE,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACjD,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,gFAAgF;AAChF,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,EAAE,oBA6BpC,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,EAAE,qBAYrC,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,EAAE,qBAIrC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,EAAE,sBAKtC,CAAC"}
1
+ {"version":3,"file":"projectionPanelWords.d.ts","sourceRoot":"","sources":["../../../src/projection/core/projectionPanelWords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,IAAI,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACzC;;;;;OAKG;IACH,OAAO,EAAE;QACP,2EAA2E;QAC3E,IAAI,EAAE,MAAM,CAAC;QACb,0CAA0C;QAC1C,OAAO,EAAE,MAAM,CAAC;QAChB,yDAAyD;QACzD,SAAS,EAAE,MAAM,CAAC;QAClB,gFAAgF;QAChF,QAAQ,EAAE,MAAM,CAAC;QACjB,sEAAsE;QACtE,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,eAAe,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oEAAoE;AACpE,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACjD,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,gFAAgF;AAChF,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,EAAE,oBA8BpC,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,EAAE,qBAerC,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,EAAE,qBAIrC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,EAAE,sBAKtC,CAAC"}