react-msaview 8.4.0 → 9.0.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 (87) hide show
  1. package/bundle/index.js +503 -89
  2. package/bundle/index.js.map +4 -4
  3. package/dist/components/MSAView.js +2 -2
  4. package/dist/components/MSAView.js.map +1 -1
  5. package/dist/components/MSAViewer.d.ts +1 -3
  6. package/dist/components/MSAViewer.js +1 -2
  7. package/dist/components/MSAViewer.js.map +1 -1
  8. package/dist/components/ResizeHandles.js +1 -1
  9. package/dist/components/ResizeHandles.js.map +1 -1
  10. package/dist/components/Track.js +1 -1
  11. package/dist/components/Track.js.map +1 -1
  12. package/dist/components/dialogs/ExportSVGDialog.js +2 -2
  13. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  14. package/dist/components/header/GoToBox.d.ts +332 -0
  15. package/dist/components/header/GoToBox.js +14 -4
  16. package/dist/components/header/GoToBox.js.map +1 -1
  17. package/dist/components/header/settingsMenuItems.js +4 -1
  18. package/dist/components/header/settingsMenuItems.js.map +1 -1
  19. package/dist/components/tree/CladeLabels.js +3 -3
  20. package/dist/components/tree/CladeLabels.js.map +1 -1
  21. package/dist/components/tree/TreeCanvas.js +4 -4
  22. package/dist/components/tree/TreeCanvas.js.map +1 -1
  23. package/dist/components/tree/TreeCanvasBlock.js +4 -4
  24. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  25. package/dist/components/tree/TreeOverview.js +10 -5
  26. package/dist/components/tree/TreeOverview.js.map +1 -1
  27. package/dist/components/tree/TreePanel.js +6 -2
  28. package/dist/components/tree/TreePanel.js.map +1 -1
  29. package/dist/components/tree/TreeRuler.js +2 -2
  30. package/dist/components/tree/TreeRuler.js.map +1 -1
  31. package/dist/components/tree/cladeBrackets.d.ts +8 -10
  32. package/dist/components/tree/cladeBrackets.js +7 -6
  33. package/dist/components/tree/cladeBrackets.js.map +1 -1
  34. package/dist/components/tree/clickMap.d.ts +2 -0
  35. package/dist/components/tree/clickMap.js.map +1 -1
  36. package/dist/components/tree/ellipsize.d.ts +8 -0
  37. package/dist/components/tree/ellipsize.js +20 -0
  38. package/dist/components/tree/ellipsize.js.map +1 -0
  39. package/dist/components/tree/renderTreeCanvas.js +30 -26
  40. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  41. package/dist/components/tree/renderTreeMouseover.js +1 -1
  42. package/dist/components/tree/renderTreeMouseover.js.map +1 -1
  43. package/dist/constants.d.ts +6 -3
  44. package/dist/constants.js +16 -6
  45. package/dist/constants.js.map +1 -1
  46. package/dist/measureTextCanvas.js +2 -2
  47. package/dist/measureTextCanvas.js.map +1 -1
  48. package/dist/model/treeModel.d.ts +14 -20
  49. package/dist/model/treeModel.js +16 -23
  50. package/dist/model/treeModel.js.map +1 -1
  51. package/dist/model.d.ts +192 -213
  52. package/dist/model.js +112 -104
  53. package/dist/model.js.map +1 -1
  54. package/dist/renderToSvg.js +24 -22
  55. package/dist/renderToSvg.js.map +1 -1
  56. package/dist/svgTestUtil.d.ts +252 -356
  57. package/dist/tipLabels.d.ts +8 -0
  58. package/dist/tipLabels.js +46 -0
  59. package/dist/tipLabels.js.map +1 -0
  60. package/dist/version.d.ts +1 -1
  61. package/dist/version.js +1 -1
  62. package/package.json +6 -6
  63. package/src/components/MSAView.tsx +2 -2
  64. package/src/components/MSAViewer.tsx +1 -5
  65. package/src/components/ResizeHandles.tsx +1 -1
  66. package/src/components/Track.tsx +1 -1
  67. package/src/components/dialogs/ExportSVGDialog.tsx +2 -2
  68. package/src/components/header/GoToBox.tsx +18 -4
  69. package/src/components/header/settingsMenuItems.ts +8 -0
  70. package/src/components/tree/CladeLabels.tsx +3 -3
  71. package/src/components/tree/TreeCanvas.tsx +10 -4
  72. package/src/components/tree/TreeCanvasBlock.tsx +4 -4
  73. package/src/components/tree/TreeOverview.tsx +10 -5
  74. package/src/components/tree/TreePanel.tsx +8 -2
  75. package/src/components/tree/TreeRuler.tsx +7 -3
  76. package/src/components/tree/cladeBrackets.ts +10 -17
  77. package/src/components/tree/clickMap.ts +2 -0
  78. package/src/components/tree/ellipsize.ts +24 -0
  79. package/src/components/tree/renderTreeCanvas.ts +42 -30
  80. package/src/components/tree/renderTreeMouseover.ts +1 -1
  81. package/src/constants.ts +17 -6
  82. package/src/measureTextCanvas.ts +2 -2
  83. package/src/model/treeModel.ts +17 -27
  84. package/src/model.ts +133 -128
  85. package/src/renderToSvg.tsx +24 -22
  86. package/src/tipLabels.ts +51 -0
  87. package/src/version.ts +1 -1
@@ -56,7 +56,7 @@ export function msaSettingsMenuItems(model) {
56
56
  ];
57
57
  }
58
58
  export function treeSettingsMenuItems(model) {
59
- const { drawTree, showBranchLen, labelsAlignRight, drawNodeBubbles, drawNodeLabels, drawLabels, showTreeOverview, treeOrder, treeRoot, rotated, } = model;
59
+ const { drawTree, showBranchLen, labelsAlignRight, drawNodeBubbles, drawNodeLabels, drawLabels, treeAreaWidth, showTreeOverview, treeOrder, treeRoot, rotated, } = model;
60
60
  return [
61
61
  {
62
62
  label: 'Order',
@@ -119,6 +119,9 @@ export function treeSettingsMenuItems(model) {
119
119
  toggle('Draw labels', drawLabels, arg => {
120
120
  model.setDrawLabels(arg);
121
121
  }),
122
+ toggle('Fit tree area to labels and tree', treeAreaWidth === undefined, arg => {
123
+ model.setTreeAreaWidth(arg ? undefined : model.effectiveTreeAreaWidth);
124
+ }),
122
125
  ];
123
126
  }
124
127
  //# sourceMappingURL=settingsMenuItems.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settingsMenuItems.js","sourceRoot":"","sources":["../../../src/components/header/settingsMenuItems.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settingsMenuItems.js","sourceRoot":"","sources":["../../../src/components/header/settingsMenuItems.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,12 @@ import { bracketGap, cladeHeight, cladeInGutter, cladeLabelHorizontal, cladeLabe
9
9
  * the same labels with a `rotate(-90)`.
10
10
  */
11
11
  const CladeLabels = observer(function ({ model }) {
12
- const { resolvedClades, cladeGutterWidth, rowHeight, treeAreaWidth, fontSize, } = model;
12
+ const { resolvedClades, cladeGutterWidth, rowHeight, effectiveTreeAreaWidth, fontSize, } = model;
13
13
  const theme = useTheme();
14
14
  if (cladeGutterWidth === 0) {
15
15
  return null;
16
16
  }
17
- const gutterLeft = treeAreaWidth - cladeGutterWidth;
17
+ const gutterLeft = effectiveTreeAreaWidth - cladeGutterWidth;
18
18
  return (React.createElement(React.Fragment, null, resolvedClades.map((clade, index) => {
19
19
  const { label, markColor, rows } = clade;
20
20
  if (!label || !cladeInGutter(clade)) {
@@ -26,7 +26,7 @@ const CladeLabels = observer(function ({ model }) {
26
26
  position: 'absolute',
27
27
  left,
28
28
  top: rows[0] * rowHeight,
29
- width: treeAreaWidth - left - bracketGap,
29
+ width: effectiveTreeAreaWidth - left - bracketGap,
30
30
  height: cladeHeight(clade, rowHeight),
31
31
  display: 'flex',
32
32
  alignItems: 'center',
@@ -1 +1 @@
1
- {"version":3,"file":"CladeLabels.js","sourceRoot":"","sources":["../../../src/components/tree/CladeLabels.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAI3B;;;;;GAKG;AACH,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACvE,MAAM,EACJ,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,QAAQ,GACT,GAAG,KAAK,CAAA;IACT,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAA;IACnD,OAAO,CACL,0CACG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;QACnE,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,EACrC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,IAAI;gBACJ,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS;gBACxB,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,UAAU;gBACxC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC;gBACrC,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;gBAC9C,QAAQ;gBACR,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,UAAU;gBACxB,UAAU,EAAE,QAAQ;gBACpB,aAAa,EAAE,MAAM;gBACrB,8DAA8D;gBAC9D,kDAAkD;gBAClD,GAAG,CAAC,UAAU;oBACZ,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;aACjE,IAEA,KAAK,CACF,CACP,CAAA;IACH,CAAC,CAAC,CACD,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"CladeLabels.js","sourceRoot":"","sources":["../../../src/components/tree/CladeLabels.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAI3B;;;;;GAKG;AACH,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACvE,MAAM,EACJ,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,sBAAsB,EACtB,QAAQ,GACT,GAAG,KAAK,CAAA;IACT,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,UAAU,GAAG,sBAAsB,GAAG,gBAAgB,CAAA;IAC5D,OAAO,CACL,0CACG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;QACnE,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,EACrC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,IAAI;gBACJ,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS;gBACxB,KAAK,EAAE,sBAAsB,GAAG,IAAI,GAAG,UAAU;gBACjD,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC;gBACrC,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;gBAC9C,QAAQ;gBACR,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,UAAU;gBACxB,UAAU,EAAE,QAAQ;gBACpB,aAAa,EAAE,MAAM;gBACrB,8DAA8D;gBAC9D,kDAAkD;gBAClD,GAAG,CAAC,UAAU;oBACZ,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;aACjE,IAEA,KAAK,CACF,CACP,CAAA;IACH,CAAC,CAAC,CACD,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,WAAW,CAAA"}
@@ -8,12 +8,12 @@ import TreeCanvasBlock from './TreeCanvasBlock.js';
8
8
  import { renderTreeMouseover } from './renderTreeMouseover.js';
9
9
  const TreeCanvas = observer(function ({ model }) {
10
10
  const ref = useRef(null);
11
- const { height, blocksY, treeAreaWidth, scrollY, highResScaleFactor } = model;
11
+ const { height, blocksY, effectiveTreeAreaWidth, scrollY, highResScaleFactor, } = model;
12
12
  const onScrollY = useCallback((d) => {
13
13
  model.doScrollY(d);
14
14
  }, [model]);
15
15
  const { onMouseDown, onMouseUp } = useWheelScroll({ ref, onScrollY });
16
- const canvasWidth = treeAreaWidth * highResScaleFactor;
16
+ const canvasWidth = effectiveTreeAreaWidth * highResScaleFactor;
17
17
  const canvasHeight = height * highResScaleFactor;
18
18
  const mouseoverRef = useCanvasAutorun({
19
19
  draw: ctx => {
@@ -28,7 +28,7 @@ const TreeCanvas = observer(function ({ model }) {
28
28
  return (React.createElement("div", { ref: ref, onMouseDown: onMouseDown, onMouseUp: onMouseUp, style: {
29
29
  height,
30
30
  position: 'relative',
31
- width: treeAreaWidth,
31
+ width: effectiveTreeAreaWidth,
32
32
  } },
33
33
  React.createElement("div", { style: {
34
34
  position: 'absolute',
@@ -43,7 +43,7 @@ const TreeCanvas = observer(function ({ model }) {
43
43
  position: 'absolute',
44
44
  top: 0,
45
45
  left: 0,
46
- width: treeAreaWidth,
46
+ width: effectiveTreeAreaWidth,
47
47
  height,
48
48
  zIndex: 1000,
49
49
  pointerEvents: 'none',
@@ -1 +1 @@
1
- {"version":3,"file":"TreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,WAAW,MAAM,kBAAmB,CAAA;AAC3C,OAAO,eAAe,MAAM,sBAAuB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAI9D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACtE,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IAC7E,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;IAErE,MAAM,WAAW,GAAG,aAAa,GAAG,kBAAkB,CAAA;IACtD,MAAM,YAAY,GAAG,MAAM,GAAG,kBAAkB,CAAA;IAChD,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,mBAAmB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,CAAC,KAAK,CAAC;KACd,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,MAAM;YACN,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,aAAa;SACrB;QAID,6BACE,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,cAAc,OAAO,KAAK;gBACrC,UAAU,EAAE,WAAW;aACxB;YAEA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACpB,oBAAC,eAAe,IAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAI,CAC9D,CAAC;YACF,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,CACzB;QACN,gCACE,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,aAAa;gBACpB,MAAM;gBACN,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,MAAM;aACtB,GACD,CACE,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"TreeCanvas.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,WAAW,MAAM,kBAAmB,CAAA;AAC3C,OAAO,eAAe,MAAM,sBAAuB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAI9D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACtE,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,EACJ,MAAM,EACN,OAAO,EACP,sBAAsB,EACtB,OAAO,EACP,kBAAkB,GACnB,GAAG,KAAK,CAAA;IACT,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAS,EAAE,EAAE;QACZ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;IAErE,MAAM,WAAW,GAAG,sBAAsB,GAAG,kBAAkB,CAAA;IAC/D,MAAM,YAAY,GAAG,MAAM,GAAG,kBAAkB,CAAA;IAChD,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,mBAAmB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,CAAC,KAAK,CAAC;KACd,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,MAAM;YACN,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,sBAAsB;SAC9B;QAID,6BACE,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,cAAc,OAAO,KAAK;gBACrC,UAAU,EAAE,WAAW;aACxB;YAEA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACpB,oBAAC,eAAe,IAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAI,CAC9D,CAAC;YACF,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,CACzB;QACN,gCACE,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,sBAAsB;gBAC7B,MAAM;gBACN,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,MAAM;aACtB,GACD,CACE,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,UAAU,CAAA"}
@@ -21,9 +21,9 @@ const TreeCanvasBlock = observer(function ({ model, offsetY, }) {
21
21
  const [menu, setMenu] = useState();
22
22
  const { clickMap, anchor, hitTest, onMouseMove, onMouseLeave } = useTreeHover({ model, offsetY });
23
23
  const hovered = anchor?.value;
24
- const { treeAreaWidth, blockSize, highResScaleFactor } = model;
25
- // TreePanel clips to treeAreaWidth, so a wider canvas is wasted backing store
26
- const width = treeAreaWidth;
24
+ const { effectiveTreeAreaWidth, blockSize, highResScaleFactor } = model;
25
+ // TreePanel clips to the tree area, so a wider canvas is wasted backing store
26
+ const width = effectiveTreeAreaWidth;
27
27
  const height = blockSize;
28
28
  const canvasWidth = width * highResScaleFactor;
29
29
  const canvasHeight = height * highResScaleFactor;
@@ -76,7 +76,7 @@ const TreeCanvasBlock = observer(function ({ model, offsetY, }) {
76
76
  width: hovered.maxX - hovered.minX,
77
77
  height: hovered.maxY - hovered.minY,
78
78
  } })) : null,
79
- anchor ? (React.createElement(BaseTooltip, { clientPoint: anchor.clientPoint }, anchor.value.name)) : null));
79
+ anchor ? (React.createElement(BaseTooltip, { clientPoint: anchor.clientPoint }, anchor.value.label ?? anchor.value.name)) : null));
80
80
  });
81
81
  export default TreeCanvasBlock;
82
82
  //# sourceMappingURL=TreeCanvasBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeCanvasBlock.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvasBlock.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeCanvasBlock.js","sourceRoot":"","sources":["../../../src/components/tree/TreeCanvasBlock.tsx"],"names":[],"mappings":"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"}
@@ -12,10 +12,10 @@ import { drawTreeOverview, drawTreeOverviewBox, treeOverviewImage, } from './ren
12
12
  * moving across it costs are a blit and two boxes.
13
13
  */
14
14
  const TreeOverview = observer(function ({ model }) {
15
- const { treeAreaWidth, overviewHeight, highResScaleFactor } = model;
15
+ const { effectiveTreeAreaWidth, overviewHeight, highResScaleFactor } = model;
16
16
  const theme = useTheme();
17
17
  const [hover, setHover] = useState();
18
- const width = Math.round(treeAreaWidth * highResScaleFactor);
18
+ const width = Math.round(effectiveTreeAreaWidth * highResScaleFactor);
19
19
  const height = Math.round(overviewHeight * highResScaleFactor);
20
20
  const ref = useCanvasAutorun({
21
21
  draw: ctx => {
@@ -24,12 +24,17 @@ const TreeOverview = observer(function ({ model }) {
24
24
  const image = treeOverviewImage({
25
25
  model,
26
26
  theme,
27
- width: treeAreaWidth,
27
+ width: effectiveTreeAreaWidth,
28
28
  height: overviewHeight,
29
29
  scale: highResScaleFactor,
30
30
  });
31
31
  ctx.scale(highResScaleFactor, highResScaleFactor);
32
- const box = { model, ctx, width: treeAreaWidth, height: overviewHeight };
32
+ const box = {
33
+ model,
34
+ ctx,
35
+ width: effectiveTreeAreaWidth,
36
+ height: overviewHeight,
37
+ };
33
38
  if (image) {
34
39
  ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, box.width, box.height);
35
40
  }
@@ -60,7 +65,7 @@ const TreeOverview = observer(function ({ model }) {
60
65
  display: 'block',
61
66
  flexShrink: 0,
62
67
  cursor: 'pointer',
63
- width: treeAreaWidth,
68
+ width: effectiveTreeAreaWidth,
64
69
  height: overviewHeight,
65
70
  }, onMouseMove: event => {
66
71
  const hit = model.treeOverviewHit(event.nativeEvent.offsetY);
@@ -1 +1 @@
1
- {"version":3,"file":"TreeOverview.js","sourceRoot":"","sources":["../../../src/components/tree/TreeOverview.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeOverview.js","sourceRoot":"","sources":["../../../src/components/tree/TreeOverview.tsx"],"names":[],"mappings":"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"}
@@ -2,8 +2,12 @@ import React from 'react';
2
2
  import { observer } from 'mobx-react';
3
3
  import TreeCanvas from './TreeCanvas.js';
4
4
  const TreePanel = observer(function ({ model }) {
5
- const { treeAreaWidth } = model;
6
- return (React.createElement("div", { style: { overflow: 'hidden', flexShrink: 0, width: treeAreaWidth } },
5
+ const { effectiveTreeAreaWidth } = model;
6
+ return (React.createElement("div", { style: {
7
+ overflow: 'hidden',
8
+ flexShrink: 0,
9
+ width: effectiveTreeAreaWidth,
10
+ } },
7
11
  React.createElement(TreeCanvas, { model: model })));
8
12
  });
9
13
  export default TreePanel;
@@ -1 +1 @@
1
- {"version":3,"file":"TreePanel.js","sourceRoot":"","sources":["../../../src/components/tree/TreePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,UAAU,MAAM,iBAAkB,CAAA;AAIzC,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACrE,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAA;IAC/B,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE;QACrE,oBAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,CACxB,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"TreePanel.js","sourceRoot":"","sources":["../../../src/components/tree/TreePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,UAAU,MAAM,iBAAkB,CAAA;AAIzC,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAA2B;IACrE,MAAM,EAAE,sBAAsB,EAAE,GAAG,KAAK,CAAA;IACxC,OAAO,CACL,6BACE,KAAK,EAAE;YACL,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,sBAAsB;SAC9B;QAED,oBAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,CACxB,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -8,9 +8,9 @@ import ScaleBarSVG from './ScaleBarSVG.js';
8
8
  // scale bar: without one the branch lengths are drawn to a scale nothing
9
9
  // states.
10
10
  const TreeRuler = observer(({ model }) => {
11
- const { treeAreaWidth, marginLeft, treeScaleBar: bar } = model;
11
+ const { effectiveTreeAreaWidth, marginLeft, treeScaleBar: bar } = model;
12
12
  const theme = useTheme();
13
- return (React.createElement("div", { style: { flexShrink: 0, width: treeAreaWidth } }, bar ? (React.createElement("svg", { width: treeAreaWidth, height: h, style: { display: 'block' } },
13
+ return (React.createElement("div", { style: { flexShrink: 0, width: effectiveTreeAreaWidth } }, bar ? (React.createElement("svg", { width: effectiveTreeAreaWidth, height: h, style: { display: 'block' } },
14
14
  React.createElement(ScaleBarSVG, { bar: bar, marginLeft: marginLeft, y: h, color: theme.palette.text.primary }))) : null));
15
15
  });
16
16
  export default TreeRuler;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeRuler.js","sourceRoot":"","sources":["../../../src/components/tree/TreeRuler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,kBAAkB,IAAI,CAAC,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,WAAW,MAAM,kBAAmB,CAAA;AAI3C,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,UAAU;AACV,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAA2B,EAAE,EAAE;IAChE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IAC9D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAChD,GAAG,CAAC,CAAC,CAAC,CACL,6BAAK,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;QAC/D,oBAAC,WAAW,IACV,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GACjC,CACE,CACP,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"TreeRuler.js","sourceRoot":"","sources":["../../../src/components/tree/TreeRuler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,kBAAkB,IAAI,CAAC,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,WAAW,MAAM,kBAAmB,CAAA;AAI3C,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,UAAU;AACV,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAA2B,EAAE,EAAE;IAChE,MAAM,EAAE,sBAAsB,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IACvE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,IACzD,GAAG,CAAC,CAAC,CAAC,CACL,6BACE,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;QAE3B,oBAAC,WAAW,IACV,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GACjC,CACE,CACP,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -1,9 +1,9 @@
1
- import type { ResolvedClade } from '../../types.ts';
1
+ import type { Clade, ResolvedClade } from '../../types.ts';
2
2
  export declare const bracketBarWidth = 3;
3
3
  export declare const bracketGap = 4;
4
4
  export declare const maxCladeGutterWidth = 140;
5
5
  /** whether a clade draws in the gutter: a bracket, or a highlight with a label */
6
- export declare function cladeInGutter(clade: ResolvedClade): boolean;
6
+ export declare function cladeInGutter(clade: Pick<Clade, 'mark' | 'label'>): boolean;
7
7
  /** the pixel height of the rows a clade covers */
8
8
  export declare function cladeHeight(clade: ResolvedClade, rowHeight: number): number;
9
9
  /**
@@ -12,14 +12,12 @@ export declare function cladeHeight(clade: ResolvedClade, rowHeight: number): nu
12
12
  */
13
13
  export declare function cladeLabelHorizontal(clade: ResolvedClade, rowHeight: number, fontSize: number): boolean;
14
14
  /** the px between the left edge of the gutter and the label's own column */
15
- export declare function cladeLabelOffset(clade: ResolvedClade): number;
15
+ export declare function cladeLabelOffset(clade: Pick<Clade, 'mark'>): number;
16
16
  /**
17
17
  * The gutter the bracket mark needs at the right of the tree area: the bar plus
18
- * the widest label at the tree font, zero where no clade draws there, and at
19
- * most maxCladeGutterWidth.
18
+ * the widest label read across at labelFitFontSize, zero where no clade draws
19
+ * there, and at most maxCladeGutterWidth. The records size it, so a zoom, a
20
+ * collapse or a focus leaves it as it is, and a renderer clips a label that
21
+ * outgrows it.
20
22
  */
21
- export declare function cladeGutterWidth({ clades, rowHeight, fontSize, }: {
22
- clades: ResolvedClade[];
23
- rowHeight: number;
24
- fontSize: number;
25
- }): number;
23
+ export declare function cladeGutterWidth(clades: Pick<Clade, 'mark' | 'label'>[]): number;
@@ -1,3 +1,4 @@
1
+ import { labelFitFontSize } from '../../constants.js';
1
2
  import { measureTextCanvas } from '../../measureTextCanvas.js';
2
3
  // The bar of the bracket mark and the space around it, in px.
3
4
  export const bracketBarWidth = 3;
@@ -28,19 +29,19 @@ export function cladeLabelOffset(clade) {
28
29
  }
29
30
  /**
30
31
  * The gutter the bracket mark needs at the right of the tree area: the bar plus
31
- * the widest label at the tree font, zero where no clade draws there, and at
32
- * most maxCladeGutterWidth.
32
+ * the widest label read across at labelFitFontSize, zero where no clade draws
33
+ * there, and at most maxCladeGutterWidth. The records size it, so a zoom, a
34
+ * collapse or a focus leaves it as it is, and a renderer clips a label that
35
+ * outgrows it.
33
36
  */
34
- export function cladeGutterWidth({ clades, rowHeight, fontSize, }) {
37
+ export function cladeGutterWidth(clades) {
35
38
  let widest = 0;
36
39
  for (const clade of clades) {
37
40
  if (!cladeInGutter(clade)) {
38
41
  continue;
39
42
  }
40
43
  const text = clade.label
41
- ? cladeLabelHorizontal(clade, rowHeight, fontSize)
42
- ? measureTextCanvas(clade.label, fontSize)
43
- : fontSize
44
+ ? measureTextCanvas(clade.label, labelFitFontSize)
44
45
  : 0;
45
46
  widest = Math.max(widest, cladeLabelOffset(clade) + text + bracketGap);
46
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cladeBrackets.js","sourceRoot":"","sources":["../../../src/components/tree/cladeBrackets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAI9D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAA;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAA;AAE3B,8EAA8E;AAC9E,kDAAkD;AAClD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAEtC,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,KAAoB;IAChD,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAC1E,CAAA;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,SAAiB;IACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAA;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAoB,EACpB,SAAiB,EACjB,QAAgB;IAEhB,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAA;AAClD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACnD,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;QAC7B,CAAC,CAAC,UAAU,GAAG,eAAe,GAAG,UAAU;QAC3C,CAAC,CAAC,UAAU,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,QAAQ,GAKT;IACC,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;YACtB,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;gBAChD,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC1C,CAAC,CAAC,QAAQ;YACZ,CAAC,CAAC,CAAC,CAAA;QACL,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAA;IACxE,CAAC;IACD,4EAA4E;IAC5E,4CAA4C;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACzD,CAAC"}
1
+ {"version":3,"file":"cladeBrackets.js","sourceRoot":"","sources":["../../../src/components/tree/cladeBrackets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAI9D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAA;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAA;AAE3B,8EAA8E;AAC9E,kDAAkD;AAClD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAEtC,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,KAAoC;IAChE,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAC1E,CAAA;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,SAAiB;IACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAA;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAoB,EACpB,SAAiB,EACjB,QAAgB;IAEhB,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAA;AAClD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,KAA0B;IACzD,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;QAC7B,CAAC,CAAC,UAAU,GAAG,eAAe,GAAG,UAAU;QAC3C,CAAC,CAAC,UAAU,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuC;IACtE,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;YACtB,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC;YAClD,CAAC,CAAC,CAAC,CAAA;QACL,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAA;IACxE,CAAC;IACD,4EAA4E;IAC5E,4CAA4C;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACzD,CAAC"}
@@ -1,5 +1,7 @@
1
1
  export interface ClickEntry {
2
2
  name: string;
3
+ /** the text a tip label draws, which may be cut short */
4
+ label?: string;
3
5
  id: string;
4
6
  branch?: boolean;
5
7
  minX: number;
@@ -1 +1 @@
1
- {"version":3,"file":"clickMap.js","sourceRoot":"","sources":["../../../src/components/tree/clickMap.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAmB/B,uEAAuE;AACvE,+EAA+E;AAC/E,6DAA6D;AAC7D,MAAM,OAAO,aAAa;IAChB,QAAQ,GAAoB,IAAI,CAAA;IAChC,OAAO,GAAiB,EAAE,CAAA;IAElC,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACnE,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAQ;QACb,OAAO,CACL,IAAI,CAAC,QAAQ;YACX,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;aAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CACpC,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"clickMap.js","sourceRoot":"","sources":["../../../src/components/tree/clickMap.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAqB/B,uEAAuE;AACvE,+EAA+E;AAC/E,6DAA6D;AAC7D,MAAM,OAAO,aAAa;IAChB,QAAQ,GAAoB,IAAI,CAAA;IAChC,OAAO,GAAiB,EAAE,CAAA;IAElC,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACnE,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAQ;QACb,OAAO,CACL,IAAI,CAAC,QAAQ;YACX,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;aAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CACpC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * the longest prefix of `text`, plus an ellipsis, that measures at most
3
+ * `room` px
4
+ */
5
+ export declare function ellipsize(measure: (text: string) => number, text: string, room: number): {
6
+ text: string;
7
+ width: number;
8
+ };
@@ -0,0 +1,20 @@
1
+ const ellipsis = '…';
2
+ /**
3
+ * the longest prefix of `text`, plus an ellipsis, that measures at most
4
+ * `room` px
5
+ */
6
+ export function ellipsize(measure, text, room) {
7
+ const width = measure(text);
8
+ if (width <= room) {
9
+ return { text, width };
10
+ }
11
+ for (let n = Math.floor((text.length * room) / width); n > 0; n--) {
12
+ const truncated = text.slice(0, n).trimEnd() + ellipsis;
13
+ const truncatedWidth = measure(truncated);
14
+ if (truncatedWidth <= room) {
15
+ return { text: truncated, width: truncatedWidth };
16
+ }
17
+ }
18
+ return { text: '', width: 0 };
19
+ }
20
+ //# sourceMappingURL=ellipsize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsize.js","sourceRoot":"","sources":["../../../src/components/tree/ellipsize.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,GAAG,CAAA;AAEpB;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,OAAiC,EACjC,IAAY,EACZ,IAAY;IAEZ,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACxB,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAA;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;QACnD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;AAC/B,CAAC"}
@@ -4,6 +4,7 @@ import { getVisibleLeaves } from '../getVisibleLeaves.js';
4
4
  import { drawHighlightLabel, highlightLabelHeight, highlightRowFill, } from '../msa/renderHighlights.js';
5
5
  import { referenceColor } from '../overlayColors.js';
6
6
  import { bracketBarWidth, bracketGap } from './cladeBrackets.js';
7
+ import { ellipsize } from './ellipsize.js';
7
8
  const radius = 2.5;
8
9
  const d = radius * 2;
9
10
  // How far outside a block a node's row-center can sit and still draw into it: a
@@ -219,7 +220,8 @@ function renderNodeLabels({ ctx, theme, offsetY, model, tipX, maxDepthToLeaf, bl
219
220
  setFontSize(ctx, fontSize);
220
221
  }
221
222
  function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, tipX, maxDepthToLeaf, blockSizeYOverride, collapsedSet, }) {
222
- const { fontSize, showBranchLenEffective: showBranchLen, tipLabelColors, blockSize, labelsAlignRight, drawTree, treeAreaWidthMinusMargin, marginLeft, noTree, labelWidthMap, labelWidthScale, } = model;
223
+ const { fontSize, showBranchLenEffective: showBranchLen, tipLabelColors, blockSize, labelsAlignRight, drawTree, treeAreaWidthMinusMargin, marginLeft, noTree, } = model;
224
+ const treeDrawn = drawTree && !noTree;
223
225
  const by = blockSizeYOverride ?? blockSize;
224
226
  // labels only exist for leaves, which are laid out top to bottom, so take the
225
227
  // same slice the MSA renderer uses instead of walking every tip per block
@@ -245,19 +247,18 @@ function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, tipX, maxDepth
245
247
  // fontSize/4 below the row center, the baseline the alignment letters
246
248
  // share
247
249
  const yp = y + fontSize / 4;
248
- let xp = 0;
249
- if (!noTree) {
250
- xp = getNodeX(node, showBranchLen, tipX, maxDepthToLeaf) ?? 0;
251
- }
252
- const measured = labelWidthMap.get(name);
253
- const width = measured === undefined
254
- ? ctx.measureText(displayName).width
255
- : measured * labelWidthScale;
250
+ const xp = treeDrawn
251
+ ? (getNodeX(node, showBranchLen, tipX, maxDepthToLeaf) ?? 0)
252
+ : 0;
253
+ const fit = (room) => ellipsize(text => ctx.measureText(text).width, displayName, room);
254
+ // a label cut to nothing still gets a click box the font size wide
255
+ const boxWidth = (width) => Math.max(width, fontSize);
256
256
  ctx.fillStyle = tipLabelColors?.get(name) ?? theme.palette.text.primary;
257
257
  if (labelsAlignRight) {
258
258
  const smallPadding = 2;
259
259
  const offset = treeAreaWidthMinusMargin - smallPadding;
260
- if (drawTree && !noTree) {
260
+ const { text, width } = fit(offset - (treeDrawn ? xp + radius + 2 + smallPadding : 0));
261
+ if (treeDrawn) {
261
262
  // beginPath is load-bearing: without it every leader line re-strokes
262
263
  // all the ones before it, which is quadratic in the label count
263
264
  ctx.beginPath();
@@ -265,29 +266,32 @@ function renderTreeLabels({ theme, model, offsetY, ctx, clickMap, tipX, maxDepth
265
266
  ctx.lineTo(offset - smallPadding - width, y);
266
267
  ctx.stroke();
267
268
  }
268
- ctx.fillText(displayName, offset, yp);
269
+ ctx.fillText(text, offset, yp);
269
270
  // everything here is drawn under translate(marginLeft), so the click box
270
271
  // has to be the text's own right edge in that same space -- taking
271
- // treeAreaWidth instead put the target smallPadding off the label
272
+ // the tree area width instead put the target smallPadding off the label
272
273
  const labelRight = offset + marginLeft;
273
274
  clickMap?.insert({
274
- minX: labelRight - width,
275
+ minX: labelRight - boxWidth(width),
275
276
  maxX: labelRight,
276
277
  minY: yp - emHeight,
277
278
  maxY: yp,
278
279
  name,
280
+ label: displayName,
279
281
  id,
280
282
  });
281
283
  }
282
284
  else {
283
- const labelX = noTree ? 2 : xp + d;
284
- ctx.fillText(displayName, labelX, yp);
285
+ const labelX = treeDrawn ? xp + d : 2;
286
+ const { text, width } = fit(treeAreaWidthMinusMargin - labelX);
287
+ ctx.fillText(text, labelX, yp);
285
288
  clickMap?.insert({
286
289
  minX: labelX + marginLeft,
287
- maxX: labelX + width + marginLeft,
290
+ maxX: labelX + boxWidth(width) + marginLeft,
288
291
  minY: yp - emHeight,
289
292
  maxY: yp,
290
293
  name,
294
+ label: displayName,
291
295
  id,
292
296
  });
293
297
  }
@@ -312,9 +316,9 @@ function firstRow(rowIndices) {
312
316
  // branches. A clade spanning hundreds of rows crosses several blocks, so each
313
317
  // block draws the whole rectangle and the canvas takes the part that is its.
314
318
  function renderCladeHighlights({ ctx, model, offsetY, tipX, maxDepthToLeaf, blockSizeYOverride, }) {
315
- const { resolvedClades, hierarchy, showBranchLenEffective: showBranchLen, rowHeight, treeAreaWidth, marginLeft, blockSize, } = model;
319
+ const { resolvedClades, hierarchy, showBranchLenEffective: showBranchLen, rowHeight, effectiveTreeAreaWidth, marginLeft, blockSize, } = model;
316
320
  const by = blockSizeYOverride ?? blockSize;
317
- const right = treeAreaWidth - marginLeft;
321
+ const right = effectiveTreeAreaWidth - marginLeft;
318
322
  for (const { rows, color, mark } of resolvedClades) {
319
323
  if (mark !== 'highlight') {
320
324
  continue;
@@ -334,12 +338,12 @@ function renderCladeHighlights({ ctx, model, offsetY, tipX, maxDepthToLeaf, bloc
334
338
  // right of the tree area. The label beside it is DOM text on screen and a
335
339
  // <text> in the export, since the canvas layer has no rotation.
336
340
  function renderCladeBrackets({ ctx, model, theme, offsetY, blockSizeYOverride, }) {
337
- const { resolvedClades, cladeGutterWidth, rowHeight, treeAreaWidth, marginLeft, blockSize, } = model;
341
+ const { resolvedClades, cladeGutterWidth, rowHeight, effectiveTreeAreaWidth, marginLeft, blockSize, } = model;
338
342
  if (cladeGutterWidth === 0) {
339
343
  return;
340
344
  }
341
345
  const by = blockSizeYOverride ?? blockSize;
342
- const x = treeAreaWidth -
346
+ const x = effectiveTreeAreaWidth -
343
347
  marginLeft -
344
348
  cladeGutterWidth +
345
349
  bracketGap +
@@ -364,12 +368,12 @@ function renderCladeBrackets({ ctx, model, theme, offsetY, blockSizeYOverride, }
364
368
  // washed across the tree area under the labels, with each set's label in the
365
369
  // gutter at its first row
366
370
  function renderRowHighlights({ ctx, model, theme, offsetY, blockSizeYOverride, }) {
367
- const { resolvedHighlights, rowTints, referenceRowIndex, rowHeight, treeAreaWidth, marginLeft, blockSize, } = model;
371
+ const { resolvedHighlights, rowTints, referenceRowIndex, rowHeight, effectiveTreeAreaWidth, marginLeft, blockSize, } = model;
368
372
  const by = blockSizeYOverride ?? blockSize;
369
373
  const pad = blockPad(model);
370
374
  const placed = [];
371
375
  const fillRow = (index) => {
372
- ctx.fillRect(-marginLeft, index * rowHeight, treeAreaWidth, rowHeight);
376
+ ctx.fillRect(-marginLeft, index * rowHeight, effectiveTreeAreaWidth, rowHeight);
373
377
  };
374
378
  if (rowTints) {
375
379
  const top = Math.max(0, Math.floor((offsetY - pad) / rowHeight));
@@ -403,8 +407,8 @@ function renderRowHighlights({ ctx, model, theme, offsetY, blockSizeYOverride, }
403
407
  label,
404
408
  x: -marginLeft + 2,
405
409
  y: first * rowHeight,
406
- spanWidth: treeAreaWidth,
407
- bounds: { min: -marginLeft, max: treeAreaWidth - marginLeft },
410
+ spanWidth: effectiveTreeAreaWidth,
411
+ bounds: { min: -marginLeft, max: effectiveTreeAreaWidth - marginLeft },
408
412
  placed,
409
413
  });
410
414
  }
@@ -424,13 +428,13 @@ export function renderTreeCanvas({ model, clickMap, ctx, offsetY, theme, highRes
424
428
  setFontSize(ctx, fontSize);
425
429
  // memoized on the model and shared across the tree/bubble/label passes (and
426
430
  // across all tree blocks) rather than re-traversing the hierarchy in each
427
- const { maxBranchLength, maxDepthToLeaf, showBranchLenEffective, treeWidth } = model;
431
+ const { maxBranchLength, maxDepthToLeaf, showBranchLenEffective, effectiveTreeWidth, } = model;
428
432
  // pixel x of the tips. A phylogram scales branch lengths so the longest
429
433
  // root-to-tip path lands at maxBranchLength; a cladogram ignores lengths and
430
434
  // spreads topological depth across the whole tree area instead. Reusing
431
435
  // maxBranchLength for the cladogram would pin every node to x=0 for a tree
432
436
  // with no branch lengths -- which is exactly what forces cladogram mode.
433
- const tipX = showBranchLenEffective ? maxBranchLength : treeWidth;
437
+ const tipX = showBranchLenEffective ? maxBranchLength : effectiveTreeWidth;
434
438
  // built once for all three passes: each of them asks about a different node on
435
439
  // every block of every redraw, and `collapsed` is a list
436
440
  const collapsedSet = new Set(model.collapsed);