@figtreejs/core 0.0.1-alpha.0 → 0.0.1-beta.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 (36) hide show
  1. package/dist/index.cjs +2 -0
  2. package/dist/index.d.ts +802 -0
  3. package/dist/index.mjs +7218 -0
  4. package/package.json +7 -4
  5. package/src/bauble-makers/set-up-baubles.ts +1 -1
  6. package/src/components/baubles/clades/highlight.tsx +1 -1
  7. package/src/components/decorations/axis/polar-axis.tsx +1 -1
  8. package/src/components/decorations/axis/rectangular-axis.tsx +1 -1
  9. package/src/components/figtree/figtree.tsx +1 -1
  10. package/src/components/hoc/with-node.tsx +1 -1
  11. package/src/evo/tree/normalized-tree/immutable-tree-helpers.ts +2 -2
  12. package/src/evo/tree/normalized-tree/immutable-tree.test.ts +1 -1
  13. package/src/evo/tree/normalized-tree/immutable-tree.ts +2 -2
  14. package/src/evo/tree/parsers/newick-character-parser.ts +1 -1
  15. package/src/evo/tree/parsers/parsing.test.ts +1 -1
  16. package/src/evo/tree/parsers/stream-reader/nexus-importer.ts +1 -1
  17. package/src/evo/tree/parsers/stream-reader/nexus-tokenizer.ts +1 -1
  18. package/src/evo/tree/taxa/helper-functions.ts +2 -2
  19. package/src/evo/tree/taxa/taxon.ts +1 -1
  20. package/src/index.ts +1 -1
  21. package/src/layouts/functional/radial-layout.ts +1 -1
  22. package/src/layouts/functional/rectangular-layout.ts +1 -1
  23. package/src/path.helpers.ts +76 -59
  24. package/src/tests/clades/cartoon.test.tsx +1 -1
  25. package/src/tests/clades/highlight.test.tsx +1 -1
  26. package/src/tests/layouts/rectangularlayout.test.ts +1 -1
  27. package/src/tests/shapes/label.test.tsx +1 -1
  28. package/src/utils/dateUtils.ts +41 -0
  29. package/src/utils/index.ts +2 -0
  30. package/src/utils/maybe.ts +67 -0
  31. package/CHANGELOG.md +0 -9
  32. package/eslint.config.js +0 -9
  33. package/src/utils.ts +0 -57
  34. package/tsconfig.json +0 -12
  35. package/vite.config.ts +0 -34
  36. package/vitetest.config.ts +0 -11
@@ -0,0 +1,802 @@
1
+ import { immerable } from 'immer';
2
+ import { JSX as JSX_2 } from 'react/jsx-runtime';
3
+ import { ScaleContinuousNumeric } from 'd3-scale';
4
+
5
+ /** A single, generic annotation, discriminated by `type`. */
6
+ export declare type AbstractAnnotation<T extends BaseAnnotationType> = {
7
+ id: string;
8
+ type: T;
9
+ value: ValueOf<T>;
10
+ };
11
+
12
+ export declare interface AbstractAnnotationSummary<T extends BaseAnnotationType> {
13
+ id: string;
14
+ type: T;
15
+ domain: DomainOf<T>;
16
+ }
17
+
18
+ export declare type Annotation = {
19
+ [K in BaseAnnotationType]: AbstractAnnotation<K>;
20
+ }[BaseAnnotationType];
21
+
22
+ export declare type AnnotationDomain = {
23
+ [K in BaseAnnotationType]: DomainOf<K>;
24
+ }[BaseAnnotationType];
25
+
26
+ export declare type AnnotationSummary = {
27
+ [K in BaseAnnotationType]: AbstractAnnotationSummary<K>;
28
+ }[BaseAnnotationType];
29
+
30
+ export declare type AnnotationValue = {
31
+ [K in BaseAnnotationType]: ValueOf<K>;
32
+ }[BaseAnnotationType];
33
+
34
+ export declare interface ArbitraryVertex {
35
+ hidden: boolean;
36
+ labelHidden: boolean;
37
+ number: number;
38
+ x: number;
39
+ y: number;
40
+ level: number;
41
+ theta?: number;
42
+ pathPoints: {
43
+ x: number;
44
+ y: number;
45
+ }[];
46
+ nodeLabel: {
47
+ dx: number;
48
+ dy: number;
49
+ alignmentBaseline: string;
50
+ textAnchor: string;
51
+ rotation?: number;
52
+ };
53
+ }
54
+
55
+ export declare interface ArbitraryVertices {
56
+ vertices: ArbitraryVertex[];
57
+ extent: {
58
+ x: [number, number];
59
+ y: [number, number];
60
+ };
61
+ }
62
+
63
+ /** Attribute as they are passed internally to possibly animated svg elements */
64
+ declare type Attrs = Record<string, number | string>;
65
+
66
+ declare type AxisBarOptions = Omit<AxisBarsProps, "axisY" | "type" | "tickValues" | "scale" | "figureScale" | "layoutClass">;
67
+
68
+ declare interface AxisBarsProps {
69
+ evenFill?: string;
70
+ oddFill?: string;
71
+ attrs?: Attrs;
72
+ lift?: number;
73
+ type?: "Rectangular" | "Polar";
74
+ tickValues: number[];
75
+ scale: ScaleContinuousNumeric<number, number>;
76
+ axisY: number;
77
+ }
78
+
79
+ declare type AxisOrientation = "horizontal" | "vertical" | "polar";
80
+
81
+ declare interface AxisProps {
82
+ offsetBy?: number;
83
+ scaleBy?: number;
84
+ reverse?: boolean;
85
+ gap?: number;
86
+ title?: {
87
+ text: string;
88
+ padding: number;
89
+ style: Attrs;
90
+ };
91
+ ticks?: AxisTicksOptions;
92
+ direction?: AxisOrientation;
93
+ scale?: ScaleContinuousNumeric<number, number>;
94
+ attrs: Attrs;
95
+ type?: "Polar" | "Rectangular";
96
+ bars?: AxisBarOptions;
97
+ }
98
+
99
+ declare type AxisTicksOptions = {
100
+ number?: number;
101
+ format?: (value: number) => string;
102
+ padding?: number;
103
+ style?: {
104
+ [key: string]: number | string;
105
+ };
106
+ length?: number;
107
+ values?: number[];
108
+ };
109
+
110
+ export declare enum BaseAnnotationType {
111
+ DISCRETE = "DISCRETE",// string could also be stringy numbers
112
+ BOOLEAN = "BOOLEAN",// true false
113
+ NUMERICAL = "NUMERICAL",// float
114
+ NUMERICAL_SET = "NUMERICAL_SET",// number[]
115
+ DISCRETE_SET = "DISCRETE_SET",// string[]
116
+ MARKOV_JUMPS = "MARKOV_JUMPS",// {from: to: time:}
117
+ DENSITIES = "DENSITIES"
118
+ }
119
+
120
+ declare type BaseBaubleOptions<A> = {
121
+ id?: string;
122
+ attrs: A;
123
+ interactions?: InteractionType;
124
+ } & (filterOption | nodeOption);
125
+
126
+ declare type BaseCircleDOMProps = Omit<React.ComponentProps<"circle">, "ref"> & {
127
+ ref?: React.Ref<SVGCircleElement>;
128
+ };
129
+
130
+ declare type BasePathDOMProps = Omit<React.ComponentProps<"path">, "ref"> & {
131
+ ref?: React.Ref<SVGPathElement>;
132
+ };
133
+
134
+ /**
135
+ * Rectangle attributes for styling and rendering a rectangle.
136
+ * These will be stripped and trickle up to the user
137
+ */
138
+ declare type BaseRectangleDOMProps = Omit<React.ComponentProps<"rect">, "ref"> & {
139
+ ref?: React.Ref<SVGRectElement>;
140
+ };
141
+
142
+ /**
143
+ * Label attributes for styling and rendering labels.
144
+ * These will be stripped and trickle up to the user
145
+ */
146
+ declare type BaseTextDOMProps = Omit<React.ComponentProps<"text">, "ref"> & {
147
+ ref?: React.Ref<SVGTextElement>;
148
+ };
149
+
150
+ declare enum BaubleTarget {
151
+ Node = 0,
152
+ Branch = 1,
153
+ NodeLabel = 2,
154
+ BranchLabel = 3,
155
+ Clade = 4,
156
+ Axis = 5
157
+ }
158
+
159
+ declare type BranchAttrs = ExposedAttrs<PathAttrs>;
160
+
161
+ /**
162
+ * This function takes options from the user about the branches they would like in the figure
163
+ * and passes it to the figure. It is a nice functional API.
164
+ *
165
+ */
166
+ export declare function Branches(options: BranchOptions): InternalBranchOptions;
167
+
168
+ export declare function BranchLabels(options: ExternalLabelOptions): InternalLabelOptions;
169
+
170
+ export declare type BranchOptions = BaseBaubleOptions<BranchAttrs> & {
171
+ curvature?: number;
172
+ };
173
+
174
+ declare type CartoonAttrs = ExposedAttrs<PathAttrs>;
175
+
176
+ export declare function CartoonClades(options: CartoonOptions): InternalCladeOptions;
177
+
178
+ export declare interface CartoonData {
179
+ cartooned: boolean;
180
+ collapseFactor: number;
181
+ }
182
+
183
+ export declare type CartoonOptions = BaseBaubleOptions<CartoonAttrs>;
184
+
185
+ declare type CircleAttrs = Omit<BaseCircleDOMProps, "cx" | "cy"> & {
186
+ r: number;
187
+ };
188
+
189
+ declare type CircleNodeAttrs = ExposedAttrs<CircleAttrs>;
190
+
191
+ export declare type CircleNodeOptions = BaseBaubleOptions<CircleNodeAttrs>;
192
+
193
+ export declare function CircleNodes(options: CircleNodeOptions): InternalNodeOptions;
194
+
195
+ declare enum CladeShapes {
196
+ Cartoon = 0,
197
+ Highlight = 1
198
+ }
199
+
200
+ /**
201
+ * A function that converts a date into a decimal.
202
+ * @param date
203
+ * @return {number}
204
+ */
205
+ export declare function dateToDecimal(date: Date): number;
206
+
207
+ /**
208
+ * A function which converts a decimal float into a date object
209
+ * @param decimalDate
210
+ * @return {Date}
211
+ */
212
+ export declare function decimalToDate(decimal: number): Date;
213
+
214
+ export declare const defaultInternalLayoutOptions: {
215
+ width: number;
216
+ height: number;
217
+ rootLength: number;
218
+ rootAngle: number;
219
+ angleRange: number;
220
+ tipSpace: () => number;
221
+ curvature: number;
222
+ showRoot: boolean;
223
+ spread: number;
224
+ fishEye: {
225
+ x: number;
226
+ y: number;
227
+ scale: number;
228
+ };
229
+ cartoonedNodes: Map<any, any>;
230
+ pollard: number;
231
+ padding: number;
232
+ invert: boolean;
233
+ minRadius: number;
234
+ };
235
+
236
+ export declare type DomainOf<T extends BaseAnnotationType> = T extends BaseAnnotationType.DISCRETE ? string[] : T extends BaseAnnotationType.BOOLEAN ? [boolean, boolean] : T extends BaseAnnotationType.NUMERICAL ? [number, number] : T extends BaseAnnotationType.NUMERICAL_SET ? [number, number] : T extends BaseAnnotationType.DISCRETE_SET ? string[] | number[] : T extends BaseAnnotationType.MARKOV_JUMPS ? string[] : T extends BaseAnnotationType.DENSITIES ? string[] : never;
237
+
238
+ declare type ExposedAttrs<A> = {
239
+ [K in keyof A]: A[K] | ((n: NodeRef) => A[K]);
240
+ };
241
+
242
+ export declare type ExternalLabelOptions = Omit<LabelOptions, "attrs"> & {
243
+ attrs?: LabelAttrs;
244
+ };
245
+
246
+ export declare function FigTree(props: FigtreeProps): JSX_2.Element;
247
+
248
+ export declare interface FigtreeProps {
249
+ width: number;
250
+ height: number;
251
+ layout: layoutFunction;
252
+ tree: ImmutableTree;
253
+ margins?: Margins;
254
+ baubles?: InternalBaubleOptions[];
255
+ opts?: layoutOptions;
256
+ animated?: boolean;
257
+ x?: number;
258
+ y?: number;
259
+ axis?: AxisProps;
260
+ }
261
+
262
+ declare type filterOption = {
263
+ filter?: (n: NodeRef) => boolean;
264
+ };
265
+
266
+ declare type fishEyeOptions = {
267
+ x: number;
268
+ y: number;
269
+ scale: number;
270
+ };
271
+
272
+ export declare interface FunctionalVertex extends simpleVertex {
273
+ layoutClass: layoutClass;
274
+ nodeLabel?: NodeLabelType;
275
+ }
276
+
277
+ declare type HighlightAttrs = ExposedAttrs<HighlightRectAttrs>;
278
+
279
+ export declare function HighlightClades(options: HighlightOptions): InternalCladeOptions;
280
+
281
+ export declare type HighlightOptions = BaseBaubleOptions<HighlightAttrs>;
282
+
283
+ declare type HighlightRectAttrs = Omit<RectAttrs, "width" | "height">;
284
+
285
+ export declare class ImmutableTree implements Tree, TaxonSetInterface {
286
+ [immerable]: boolean;
287
+ _data: ImmutableTreeData;
288
+ taxonSet: TaxonSet;
289
+ constructor(input?: {
290
+ data?: ImmutableTreeData;
291
+ taxonSet?: TaxonSet;
292
+ });
293
+ lockTaxa(): TaxonSetInterface;
294
+ addTaxon(taxonOrName: string | Taxon): this;
295
+ getTaxonCount(): number;
296
+ getTaxonSet(): TaxonSetInterface;
297
+ static fromNewick(newick: string, options?: newickParsingOptions): ImmutableTree;
298
+ static fromNexus(nexus: string, options?: newickParsingOptions): ImmutableTree;
299
+ static fromString(string: string, options?: newickParsingOptions): ImmutableTree;
300
+ static fromTree(tree: ImmutableTree, rootNode: NodeRef): ImmutableTree;
301
+ static _addNodeWithMetadata(tree: ImmutableTree, node: NodeRef, newTree: ImmutableTree): ImmutableTree;
302
+ static _copyNodeMetadata(tree: ImmutableTree, node: NodeRef, newTree: ImmutableTree, newNode: NodeRef): ImmutableTree;
303
+ isRooted(): boolean;
304
+ getAnnotationType(name: string): BaseAnnotationType;
305
+ getAnnotationKeys(): string[];
306
+ getRoot(): NodeRef;
307
+ getNodeCount(): number;
308
+ getInternalNodeCount(): number;
309
+ getExternalNodeCount(): number;
310
+ getInternalNodes(): NodeRef[];
311
+ getExternalNodes(): NodeRef[];
312
+ getNodes(): NodeRef[];
313
+ getNode(i: nodeIndex): NodeRef;
314
+ getNodeByTaxon(taxon: Taxon): NodeRef;
315
+ getTaxonByName(name: string): Taxon;
316
+ getNodeByLabel(label: string): NodeRef;
317
+ hasTaxon(node: NodeRef): boolean;
318
+ getTaxonFromNode(node: NodeRef): Taxon;
319
+ getTaxon(id: number | NodeRef | string): Taxon;
320
+ hasNodeHeights(): boolean;
321
+ getHeight(node: NodeRef): number;
322
+ hasBranchLength(node: NodeRef): boolean;
323
+ getLength(node: NodeRef): number;
324
+ hasLengths(): boolean;
325
+ _toString(node: NodeRef, options?: {
326
+ blFormat: (value: number) => string;
327
+ includeAnnotations: boolean;
328
+ }): string;
329
+ _writeAnnotations(node: NodeRef): string;
330
+ toNewick(node?: NodeRef, options?: {
331
+ blFormat?: (value: number) => string;
332
+ includeAnnotations?: boolean;
333
+ }): string;
334
+ getMRCA(node1: NodeRef | NodeRef[], node2?: NodeRef): NodeRef;
335
+ getPath(node1: NodeRef, node2: NodeRef): NodeRef[];
336
+ getPathLength(node1: NodeRef, node2: NodeRef): number;
337
+ getPathToRoot(node: NodeRef): Generator<NodeRef>;
338
+ getNextSibling(node: NodeRef): NodeRef;
339
+ hasRightSibling(node: NodeRef): boolean;
340
+ getRightSibling(node: NodeRef): NodeRef;
341
+ hasLeftSibling(node: NodeRef): boolean;
342
+ getLeftSibling(node: NodeRef): NodeRef;
343
+ getDivergence(node: NodeRef): number;
344
+ getChildCount(node: NodeRef): number;
345
+ getChild(node: NodeRef, index: number): NodeRef;
346
+ getParent(node: NodeRef): NodeRef;
347
+ getChildren(node: NodeRef): NodeRef[];
348
+ hasLabel(node: NodeRef): boolean;
349
+ getLabel(node: NodeRef): string;
350
+ isExternal(node: NodeRef): boolean;
351
+ isInternal(node: NodeRef): boolean;
352
+ isRoot(node: NodeRef): boolean;
353
+ addNodes(n?: number): {
354
+ tree: ImmutableTree;
355
+ nodes: NodeRef[];
356
+ };
357
+ setTaxon(node: NodeRef, taxon: Taxon): this;
358
+ getAnnotationSummary(name: string): AnnotationSummary;
359
+ getAnnotations(): AnnotationSummary[];
360
+ getAnnotation(node: NodeRef, name: string, d?: AnnotationValue): AnnotationValue;
361
+ getFullNodeAnnotation(node: NodeRef, name: string): Annotation;
362
+ hasAnnotation(node: NodeRef, name: string): boolean;
363
+ annotateNode(node: NodeRef, name: string, value: RawAnnotationValue): Tree;
364
+ annotateNode(node: NodeRef, annotation: Record<string, RawAnnotationValue>): Tree;
365
+ setHeight(node: NodeRef, height: number): this;
366
+ setLength(node: NodeRef, length: number): this;
367
+ deleteLength(node: NodeRef): this;
368
+ setDivergence(node: NodeRef, divergence: number): this;
369
+ setLabel(node: NodeRef, label: string): this;
370
+ insertNode(n: NodeRef, proportion?: number): this;
371
+ unroot(_n: NodeRef): ImmutableTree;
372
+ deleteNode(_n: NodeRef): ImmutableTree;
373
+ deleteClade(_n: NodeRef): ImmutableTree;
374
+ orderNodesByDensity(down: boolean, node?: NodeRef): this;
375
+ rotate(nodeRef: NodeRef, recursive?: boolean): this;
376
+ reroot(node: NodeRef, proportion?: number): this;
377
+ removeChild(parent: NodeRef, child: NodeRef): this;
378
+ sortChildren(node: NodeRef, compare: (a: NodeRef, b: NodeRef) => number): this;
379
+ addChild(parent: NodeRef, child: NodeRef): this;
380
+ setRoot(node: NodeRef): this;
381
+ }
382
+
383
+ export declare interface ImmutableTreeData {
384
+ nodes: {
385
+ allNodes: Node_2[];
386
+ byTaxon: number[];
387
+ byLabel: {
388
+ [label: string]: number;
389
+ };
390
+ };
391
+ heights: [];
392
+ nodeToTaxon: number[];
393
+ rootNode: number;
394
+ is_rooted: boolean;
395
+ hasLengths: boolean;
396
+ annotations: {
397
+ [annotation: string]: AnnotationSummary;
398
+ };
399
+ }
400
+
401
+ declare type InteractionType = {
402
+ onClick?: (n: NodeRef) => void;
403
+ OnMouseOver?: (n: NodeRef) => void;
404
+ onEnter?: (n: NodeRef) => void;
405
+ onExit?: (n: NodeRef) => void;
406
+ };
407
+
408
+ declare type InternalBaubleOptions = InternalNodeOptions | InternalBranchOptions | InternalLabelOptions | InternalCladeOptions;
409
+
410
+ export declare type InternalBranchOptions = BranchOptions & {
411
+ target: BaubleTarget.Branch;
412
+ };
413
+
414
+ export declare type InternalCladeOptions = ((HighlightOptions & {
415
+ shape: CladeShapes.Highlight;
416
+ }) | (CartoonOptions & {
417
+ shape: CladeShapes.Cartoon;
418
+ })) & {
419
+ target: BaubleTarget.Clade;
420
+ };
421
+
422
+ export declare type InternalLabelOptions = LabelOptions & ({
423
+ target: BaubleTarget.NodeLabel;
424
+ aligned?: boolean;
425
+ } | {
426
+ target: BaubleTarget.BranchLabel;
427
+ });
428
+
429
+ export declare interface internalLayoutOptions extends layoutOptions {
430
+ width?: number;
431
+ height?: number;
432
+ }
433
+
434
+ export declare type InternalNodeOptions = ((CircleNodeOptions & {
435
+ shape: NodeShapes.Circle;
436
+ }) | (RectangleNodeOptions & {
437
+ shape: NodeShapes.Rectangle;
438
+ })) & {
439
+ target: BaubleTarget.Node;
440
+ };
441
+
442
+ export declare interface Label {
443
+ x: number;
444
+ y: number;
445
+ alignmentBaseline: string;
446
+ textAnchor: string;
447
+ rotation: number;
448
+ alignedPos?: {
449
+ x: number;
450
+ y: number;
451
+ };
452
+ }
453
+
454
+ declare type LabelAttrs = ExposedAttrs<LabelSpecificTextAttrs>;
455
+
456
+ declare type LabelOptions = BaseBaubleOptions<LabelAttrs> & ExposedAttrs<{
457
+ text: string;
458
+ }>;
459
+
460
+ declare type LabelSpecificTextAttrs = Omit<TextAttrs, "text">;
461
+
462
+ export declare enum layoutClass {
463
+ Rectangular = "Rectangular",
464
+ Polar = "Polar",
465
+ Radial = "Radial"
466
+ }
467
+
468
+ declare type layoutFunction = (tree: ImmutableTree, options?: layoutOptions) => (node: NodeRef) => FunctionalVertex;
469
+
470
+ declare interface layoutOptions {
471
+ rootLength?: number;
472
+ rootAngle?: number;
473
+ angleRange?: number;
474
+ showRoot?: boolean;
475
+ spread?: number;
476
+ fishEye?: fishEyeOptions;
477
+ pollard: number;
478
+ invert?: boolean;
479
+ minRadius?: number;
480
+ padding?: number;
481
+ }
482
+
483
+ /**
484
+ * Helper function to determine if the provided year is a leap year
485
+ * @param year
486
+ * @return {boolean}
487
+ */
488
+ export declare function leapYear(year: number): boolean;
489
+
490
+ declare interface Margins {
491
+ top: number;
492
+ bottom: number;
493
+ left: number;
494
+ right: number;
495
+ }
496
+
497
+ export declare type MarkovJumpValue = {
498
+ from: string;
499
+ to: string;
500
+ time?: number;
501
+ };
502
+
503
+ declare type Maybe<T> = Some<T> | Nothing;
504
+
505
+ export declare type maybeNodeIndex = Maybe<nodeIndex>;
506
+
507
+ declare enum MaybeType {
508
+ Some = "some",
509
+ Nothing = "nothing"
510
+ }
511
+
512
+ export declare interface newickParsingOptions {
513
+ dateFormat?: string;
514
+ datePrefix?: string;
515
+ labelName?: string;
516
+ parseAnnotations?: boolean;
517
+ tipNameMap?: Map<string, string>;
518
+ taxonSet?: TaxonSet;
519
+ }
520
+
521
+ export declare class NexusImporter {
522
+ reader: ReadableStreamDefaultReader<string>;
523
+ taxonSet: TaxonSet;
524
+ currentBlock: string | undefined;
525
+ hasTree: boolean | undefined;
526
+ options: {
527
+ labelName?: string;
528
+ };
529
+ translateTaxonMap: Map<string, string> | undefined;
530
+ constructor(stream: ReadableStream<BufferSource>, options?: {
531
+ labelName?: string;
532
+ });
533
+ getTrees(): AsyncIterableIterator<ImmutableTree>;
534
+ private parseNextBlock;
535
+ private nextToken;
536
+ private skipSemiColon;
537
+ private getNextBlockName;
538
+ private readToEndOfBlock;
539
+ private skipUntil;
540
+ private readUntil;
541
+ private parseTaxaBlock;
542
+ private parseTreesBlock;
543
+ }
544
+
545
+ declare interface Node_2 extends NodeRef {
546
+ number: number;
547
+ taxon: number | undefined;
548
+ label: string | undefined;
549
+ children: number[];
550
+ parent: number | undefined;
551
+ length: number | undefined;
552
+ annotations: {
553
+ [annotation: string]: Annotation;
554
+ };
555
+ _id: string;
556
+ }
557
+ export { Node_2 as Node }
558
+
559
+ export declare type nodeIndex = string | number | Taxon;
560
+
561
+ export declare function NodeLabels(options: ExternalLabelOptions & {
562
+ aligned?: boolean;
563
+ }): InternalLabelOptions;
564
+
565
+ export declare type NodeLabelType = {
566
+ alignmentBaseline: React.SVGAttributes<SVGTextElement>["alignmentBaseline"];
567
+ textAnchor: React.SVGAttributes<SVGTextElement>["textAnchor"];
568
+ dxFactor: number;
569
+ dyFactor: number;
570
+ rotation: number;
571
+ };
572
+
573
+ declare type nodeOption = {
574
+ nodes: NodeRef[];
575
+ };
576
+
577
+ export declare interface NodeRef {
578
+ number: number;
579
+ _id: string;
580
+ }
581
+
582
+ declare enum NodeShapes {
583
+ Circle = 0,
584
+ Rectangle = 1
585
+ }
586
+
587
+ declare type Nothing = {
588
+ type: typeof MaybeType.Nothing;
589
+ };
590
+
591
+ declare const Nothing: () => Nothing;
592
+
593
+ declare type PathAttrs = Omit<BasePathDOMProps, "d">;
594
+
595
+ export declare function pathToRootIterator(tree: Tree, node: NodeRef): Generator<NodeRef>;
596
+
597
+ export declare const polarLayout: (tree: ImmutableTree) => (node: NodeRef) => FunctionalVertex;
598
+
599
+ export declare interface PolarVertex extends simplePolarVertex {
600
+ layoutClass: layoutClass.Polar;
601
+ nodeLabel?: NodeLabelType;
602
+ }
603
+
604
+ export declare function postOrderIterator(tree: Tree, node?: NodeRef | undefined): Generator<NodeRef>;
605
+
606
+ export declare function preOrderIterator(tree: Tree, node?: NodeRef | undefined): Generator<NodeRef>;
607
+
608
+ export declare class PreOrderTraversalCache implements TreeTraversal {
609
+ _forwardCache: Map<NodeRef, NodeRef>;
610
+ _reverseCache: Map<NodeRef, NodeRef>;
611
+ constructor();
612
+ traverse(tree: Tree, node?: NodeRef): Generator<NodeRef>;
613
+ getNext(tree: Tree, node: NodeRef): NodeRef | undefined;
614
+ getPrevious(tree: Tree, node: NodeRef): NodeRef | undefined;
615
+ }
616
+
617
+ export declare function psuedoRootPostOrderIterator(tree: Tree, node?: NodeRef | undefined, sort?: (a: NodeRef, b: NodeRef) => number): Generator<NodeRef>;
618
+
619
+ export declare function psuedoRootPreOrderIterator(tree: Tree, node?: NodeRef | undefined, sort?: (a: NodeRef, b: NodeRef) => number): Generator<NodeRef>;
620
+
621
+ export declare function radialLayout(tree: ImmutableTree, options?: {
622
+ spread?: number;
623
+ }): (node: NodeRef) => FunctionalVertex;
624
+
625
+ export declare type RawAnnotationValue = {
626
+ [K in BaseAnnotationType]: RawValueOf<K>;
627
+ }[BaseAnnotationType];
628
+
629
+ export declare type RawValueOf<T extends BaseAnnotationType> = T extends BaseAnnotationType.DISCRETE ? string : T extends BaseAnnotationType.BOOLEAN ? boolean : T extends BaseAnnotationType.NUMERICAL ? number : T extends BaseAnnotationType.NUMERICAL_SET ? number[] : T extends BaseAnnotationType.DISCRETE_SET ? string[] : T extends BaseAnnotationType.MARKOV_JUMPS ? [number, string, string][] | [string, string, string][] : T extends BaseAnnotationType.DENSITIES ? Record<string, number> : never;
630
+
631
+ declare type RectangleNodeAttrs = ExposedAttrs<RectAttrs>;
632
+
633
+ export declare type RectangleNodeOptions = BaseBaubleOptions<RectangleNodeAttrs>;
634
+
635
+ export declare function RectangleNodes(options: RectangleNodeOptions): InternalNodeOptions;
636
+
637
+ export declare const rectangularLayout: (tree: ImmutableTree) => (node: NodeRef) => FunctionalVertex;
638
+
639
+ declare type RectAttrs = BaseRectangleDOMProps & {
640
+ width: number;
641
+ height: number;
642
+ };
643
+
644
+ export declare interface simplePolarVertex extends simpleVertex {
645
+ theta: number;
646
+ r: number;
647
+ }
648
+
649
+ export declare interface simpleVertex {
650
+ x: number;
651
+ y: number;
652
+ }
653
+
654
+ declare type Some<T> = {
655
+ type: typeof MaybeType.Some;
656
+ value: T;
657
+ };
658
+
659
+ declare const Some: <T>(value: T) => Some<T>;
660
+
661
+ export declare interface Taxon {
662
+ name: string;
663
+ number: number;
664
+ annotations: {
665
+ [annotation: string]: string | string[] | number | number[];
666
+ };
667
+ }
668
+
669
+ export declare class TaxonSet implements TaxonSetInterface {
670
+ _data: TaxonSetData;
671
+ constructor(taxonSetData?: TaxonSetData);
672
+ lockTaxa(): TaxonSetInterface;
673
+ addTaxon(taxonOrName: string | Taxon): this;
674
+ getTaxon(id: number): Taxon;
675
+ getTaxonByName(name: string): Taxon;
676
+ hasTaxon(id: string): boolean;
677
+ getTaxonCount(): number;
678
+ get isFinalized(): boolean;
679
+ }
680
+
681
+ export declare interface TaxonSetData {
682
+ allNames: string[];
683
+ byName: {
684
+ [taxon: string]: Taxon;
685
+ };
686
+ finalized: boolean;
687
+ }
688
+
689
+ export declare interface TaxonSetInterface {
690
+ addTaxon(name: string): TaxonSetInterface;
691
+ getTaxon(id: number): Taxon | undefined;
692
+ getTaxonByName(name: string): Taxon;
693
+ getTaxonCount(): number;
694
+ lockTaxa(): TaxonSetInterface;
695
+ }
696
+
697
+ declare type TextAttrs = BaseTextDOMProps & {
698
+ text: string;
699
+ };
700
+
701
+ export declare function tipIterator(tree: Tree, node?: NodeRef): Generator<NodeRef>;
702
+
703
+ export declare interface Tree {
704
+ getRoot(): NodeRef;
705
+ isRooted(): boolean;
706
+ getNodeCount(): number;
707
+ getInternalNodeCount(): number;
708
+ getExternalNodeCount(): number;
709
+ getNode(i: string | Taxon | number): NodeRef;
710
+ getInternalNodes(): NodeRef[];
711
+ getExternalNodes(): NodeRef[];
712
+ getNodes(): NodeRef[];
713
+ getTaxon(id: number | NodeRef): Taxon;
714
+ isExternal(node: NodeRef): boolean;
715
+ isInternal(node: NodeRef): boolean;
716
+ isRoot(node: NodeRef): boolean;
717
+ getChildCount(node: NodeRef): number;
718
+ getChild(node: NodeRef, i: number): NodeRef;
719
+ getNodeByTaxon(taxon: Taxon): NodeRef;
720
+ getNodeByLabel(label: string): NodeRef;
721
+ getDivergence(node: NodeRef): number;
722
+ getHeight(node: NodeRef): number;
723
+ getLength(node: NodeRef): number;
724
+ getParent(node: NodeRef): NodeRef;
725
+ getChildren(node: NodeRef): NodeRef[];
726
+ getAnnotation(node: NodeRef, name: string, d?: AnnotationValue): AnnotationValue;
727
+ annotateNode(node: NodeRef, name: string, value: RawAnnotationValue): Tree;
728
+ annotateNode(node: NodeRef, annotation: Record<string, RawAnnotationValue>): Tree;
729
+ getLabel(node: NodeRef): string;
730
+ hasLabel(node: NodeRef): boolean;
731
+ getAnnotationKeys(): string[];
732
+ getAnnotationType(name: string): BaseAnnotationType;
733
+ getAnnotations(): AnnotationSummary[];
734
+ getAnnotationSummary(name: string): AnnotationSummary;
735
+ addNodes(n?: number): {
736
+ tree: Tree;
737
+ nodes: NodeRef[];
738
+ };
739
+ deleteNode(n: NodeRef): Tree;
740
+ removeChild(parent: NodeRef, child: NodeRef): Tree;
741
+ deleteClade(n: NodeRef): Tree;
742
+ getNextSibling(node: NodeRef): NodeRef;
743
+ hasRightSibling(node: NodeRef): boolean;
744
+ getRightSibling(node: NodeRef): NodeRef;
745
+ hasLeftSibling(node: NodeRef): boolean;
746
+ getLeftSibling(node: NodeRef): NodeRef;
747
+ setHeight(node: NodeRef, height: number): Tree;
748
+ setDivergence(node: NodeRef, divergence: number): Tree;
749
+ setLength(node: NodeRef, length: number): Tree;
750
+ setTaxon(node: NodeRef, taxon: Taxon): Tree;
751
+ setLabel(node: NodeRef, label: string): Tree;
752
+ addChild(parent: NodeRef, child: NodeRef): Tree;
753
+ unroot(node: NodeRef): Tree;
754
+ toNewick(node?: NodeRef, options?: {
755
+ includeAnnotations: boolean;
756
+ }): string;
757
+ orderNodesByDensity(down: boolean): Tree;
758
+ sortChildren(node: NodeRef, compare: (a: NodeRef, b: NodeRef) => number): Tree;
759
+ isRoot(node: NodeRef): boolean;
760
+ getMRCA(node1: NodeRef, node2: NodeRef): NodeRef;
761
+ getMRCA(nodes: NodeRef[]): NodeRef;
762
+ rotate(node: NodeRef, recursive: boolean): Tree;
763
+ reroot(node: NodeRef, proportion: number): Tree;
764
+ }
765
+
766
+ export declare type TreeListener = (tree: Tree, node: NodeRef) => void;
767
+
768
+ declare interface TreeTraversal {
769
+ getNext(tree: Tree, node: NodeRef): NodeRef | undefined;
770
+ getPrevious(tree: Tree, node: NodeRef): NodeRef | undefined;
771
+ }
772
+
773
+ export declare type ValueOf<T extends BaseAnnotationType> = T extends BaseAnnotationType.DISCRETE ? string : T extends BaseAnnotationType.BOOLEAN ? boolean : T extends BaseAnnotationType.NUMERICAL ? number : T extends BaseAnnotationType.NUMERICAL_SET ? number[] : T extends BaseAnnotationType.DISCRETE_SET ? string[] : T extends BaseAnnotationType.MARKOV_JUMPS ? MarkovJumpValue[] : T extends BaseAnnotationType.DENSITIES ? Record<string, number> : never;
774
+
775
+ export declare interface Vertex {
776
+ number: number;
777
+ x: number;
778
+ y: number;
779
+ hidden: boolean | undefined;
780
+ labelHidden: boolean | undefined;
781
+ level: number;
782
+ branch?: {
783
+ d: string;
784
+ label: Label;
785
+ };
786
+ theta?: number;
787
+ r?: number;
788
+ nodeLabel: Label;
789
+ }
790
+
791
+ export declare interface Vertices {
792
+ type: "Rectangular" | "Polar" | "Radial";
793
+ vertices: Vertex[];
794
+ origin?: {
795
+ x: number;
796
+ y: number;
797
+ };
798
+ theta?: [number, number];
799
+ axisLength?: number;
800
+ }
801
+
802
+ export { }