@micheeeeel/yinyangapp 1.0.6 → 2.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 (118) hide show
  1. package/README.md +105 -0
  2. package/dist/bundle.js +2 -1
  3. package/dist/bundle.js.LICENSE.txt +1 -0
  4. package/dist/types/adapters/yinYangAdapter.d.ts +10 -0
  5. package/dist/types/animations/AnimationsMngr.d.ts +7 -19
  6. package/dist/types/api-film.d.ts +22 -0
  7. package/dist/types/api.d.ts +48 -0
  8. package/dist/types/benchmark/runner.d.ts +5 -0
  9. package/dist/types/benchmark/scenarios.d.ts +118 -0
  10. package/dist/types/components/action-image/ActionImageModal.d.ts +42 -0
  11. package/dist/types/components/controller/YinYangController.d.ts +946 -18
  12. package/dist/types/components/controller/action-stack/ActionStackController.d.ts +149 -0
  13. package/dist/types/components/controller/action-stack/ActionStackDragHandler.d.ts +111 -0
  14. package/dist/types/components/controller/action-stack/ActionStackManager.d.ts +118 -0
  15. package/dist/types/components/controller/action-stack/ActionStackState.d.ts +169 -0
  16. package/dist/types/components/controller/actions/ActionProjectionService.d.ts +73 -0
  17. package/dist/types/components/controller/actions/ChildActionMenuController.d.ts +83 -0
  18. package/dist/types/components/controller/actions/CoreEventMenuController.d.ts +90 -0
  19. package/dist/types/components/controller/actions/radialItemMenu.d.ts +117 -0
  20. package/dist/types/components/controller/children/ChildInteractionController.d.ts +38 -0
  21. package/dist/types/components/controller/children/ChildrenOrbitService.d.ts +14 -0
  22. package/dist/types/components/controller/force-field/EventFieldLifecycleController.d.ts +104 -0
  23. package/dist/types/components/controller/force-field/EventFieldRenderer.d.ts +86 -0
  24. package/dist/types/components/controller/force-field/ForceFieldComputationService.d.ts +50 -0
  25. package/dist/types/components/controller/force-field/ForceFieldDetailsPanel.d.ts +639 -0
  26. package/dist/types/components/controller/force-field/ForceFieldLifecycleController.d.ts +53 -0
  27. package/dist/types/components/controller/force-field/ForceFieldRenderer.d.ts +67 -0
  28. package/dist/types/components/controller/force-field/types.d.ts +42 -0
  29. package/dist/types/components/controller/labels/ChildScoresDeltaRenderer.d.ts +33 -0
  30. package/dist/types/components/controller/labels/ContextLabelsRenderer.d.ts +155 -0
  31. package/dist/types/components/controller/labels/WeightPreviewRingRenderer.d.ts +61 -0
  32. package/dist/types/components/controller/odd/ChildrenOrbitManager.d.ts +25 -0
  33. package/dist/types/components/controller/odd/OddViewManager.d.ts +44 -0
  34. package/dist/types/components/controller/search/SearchPanelSynchronizer.d.ts +125 -0
  35. package/dist/types/components/controller/settings/ControllerSettingsApplier.d.ts +50 -0
  36. package/dist/types/components/controller/state/BlockingAnimationTracker.d.ts +17 -0
  37. package/dist/types/components/controller/state/YinYangControllerState.d.ts +176 -0
  38. package/dist/types/components/controller/utils/actionStackMath.d.ts +13 -0
  39. package/dist/types/components/controller/utils/actionStackReorder.d.ts +7 -0
  40. package/dist/types/components/controller/utils/childrenOrbit.d.ts +18 -0
  41. package/dist/types/components/controller/utils/cuttingLabels.d.ts +9 -0
  42. package/dist/types/components/controller/utils/eventFieldStyle.d.ts +13 -0
  43. package/dist/types/components/controller/utils/eventFieldTargets.d.ts +47 -0
  44. package/dist/types/components/controller/utils/forceFieldMetadata.d.ts +4 -0
  45. package/dist/types/components/controller/utils/forceFieldPresentation.d.ts +9 -0
  46. package/dist/types/components/controller/utils/forceFieldStyle.d.ts +10 -0
  47. package/dist/types/components/controller/utils/labelGeometry.d.ts +5 -0
  48. package/dist/types/components/controller/utils/oddCutting.d.ts +2 -0
  49. package/dist/types/components/controller/utils/svgCoordinates.d.ts +9 -0
  50. package/dist/types/components/controller/utils/svgTransform.d.ts +5 -0
  51. package/dist/types/components/controller/utils/textLayout.d.ts +2 -0
  52. package/dist/types/components/controls/VizControlsPanel.d.ts +14 -0
  53. package/dist/types/components/factory/YinYangAppFactory.d.ts +4 -6
  54. package/dist/types/components/model/YinYangModel.d.ts +4 -30
  55. package/dist/types/components/panel/DiagramPanelBridge.d.ts +34 -0
  56. package/dist/types/components/panel/PanelManager.d.ts +150 -0
  57. package/dist/types/components/search/GlobalSearchController.d.ts +396 -0
  58. package/dist/types/components/stack-nav/StackNavOverlay.d.ts +82 -0
  59. package/dist/types/components/view/BorderDrawer.d.ts +203 -13
  60. package/dist/types/components/view/SpikeDrawer.d.ts +37 -31
  61. package/dist/types/components/view/ViewInitializer.d.ts +438 -2
  62. package/dist/types/components/view/YinYangDrawer.d.ts +414 -11
  63. package/dist/types/config/animationConfig.d.ts +37 -0
  64. package/dist/types/config/deltaColors.d.ts +64 -0
  65. package/dist/types/config/labelStyleConfig.d.ts +50 -0
  66. package/dist/types/data/OddCategoryColors.d.ts +12 -2
  67. package/dist/types/data/adverse-action-planner.d.ts +51 -0
  68. package/dist/types/data/adverse-action-planner.test.d.ts +1 -0
  69. package/dist/types/data/amplifier-engine.d.ts +107 -0
  70. package/dist/types/data/amplifier-engine.test.d.ts +1 -0
  71. package/dist/types/data/combo-engine.d.ts +94 -0
  72. package/dist/types/data/combo-engine.test.d.ts +1 -0
  73. package/dist/types/data/odd_generic_descriptions.d.ts +4 -0
  74. package/dist/types/data/odd_labels.d.ts +5 -0
  75. package/dist/types/data/yasuni_actions.d.ts +47 -0
  76. package/dist/types/data/yasuni_adverse_actions.d.ts +2 -0
  77. package/dist/types/data/yasuni_adverse_key_events.d.ts +2 -0
  78. package/dist/types/data/yasuni_cause.d.ts +33 -0
  79. package/dist/types/data/yasuni_graph.d.ts +22 -0
  80. package/dist/types/data/yasuni_key_events.d.ts +61 -0
  81. package/dist/types/data/yasuni_propagation_layers.d.ts +3 -0
  82. package/dist/types/interfaces/IActions.d.ts +1 -0
  83. package/dist/types/interfaces/ICauseGraph.d.ts +9 -0
  84. package/dist/types/interfaces/ICauseModel.d.ts +33 -0
  85. package/dist/types/interfaces/IGraphicsStrategy.d.ts +9 -5
  86. package/dist/types/interfaces/IPropagationLayers.d.ts +27 -0
  87. package/dist/types/interfaces/IViewData.d.ts +12 -0
  88. package/dist/types/interfaces/IYinYangAppFactory.d.ts +3 -3
  89. package/dist/types/interfaces/IYinYangController.d.ts +301 -6
  90. package/dist/types/interfaces/IYinYangGeometry.d.ts +43 -0
  91. package/dist/types/interfaces/IYinYangInternalModel.d.ts +34 -0
  92. package/dist/types/interfaces/IYinYangModel.d.ts +3 -11
  93. package/dist/types/main.d.ts +9 -0
  94. package/dist/types/utils/actionImages.d.ts +14 -0
  95. package/dist/types/utils/actionPropagation.d.ts +74 -0
  96. package/dist/types/utils/appMode.d.ts +5 -0
  97. package/dist/types/utils/causeGraph.d.ts +6 -0
  98. package/dist/types/utils/causeMetrics.d.ts +26 -0
  99. package/dist/types/utils/chainCardHeight.d.ts +27 -0
  100. package/dist/types/utils/d3/D3Element.d.ts +2 -2
  101. package/dist/types/utils/d3/D3GraphicsStrategy.d.ts +21 -4
  102. package/dist/types/utils/deltaChips.d.ts +15 -0
  103. package/dist/types/utils/deltaLabels.d.ts +54 -0
  104. package/dist/types/utils/facetteImages.d.ts +1 -0
  105. package/dist/types/utils/geometryUtils.d.ts +0 -1
  106. package/dist/types/utils/hierBadge.d.ts +44 -0
  107. package/dist/types/utils/idleSphereImage.d.ts +8 -0
  108. package/dist/types/utils/keyEventImages.d.ts +41 -0
  109. package/dist/types/utils/oddLegend.d.ts +30 -0
  110. package/dist/types/utils/positionalEfficiency.d.ts +16 -0
  111. package/dist/types/utils/yinYangWatermark.d.ts +29 -0
  112. package/package.json +27 -12
  113. package/dist/index.html +0 -1
  114. package/dist/types/data/coupe_rase_Orangs-outans/data_Kalimantan.d.ts +0 -3
  115. package/dist/types/data/coupe_rase_Orangs-outans/data_PT_Mayawana_Persada.d.ts +0 -3
  116. package/dist/types/data/data_institu_bancaire.d.ts +0 -3
  117. package/dist/types/interfaces/IOddItem.d.ts +0 -6
  118. package/dist/types/script.d.ts +0 -13
@@ -1,21 +1,53 @@
1
+ import { IGraphicElement } from "../../interfaces/IGraphicElement";
1
2
  import { ViewInitializer } from "./ViewInitializer";
2
3
  export declare class BorderDrawer {
3
4
  private ViewInitializer;
5
+ private readonly debugTag;
4
6
  private viewData;
5
7
  private yinYangGroup;
8
+ private borderArcsGroup;
9
+ private facetteImageBackgroundGroup;
6
10
  private graphicStrategy;
7
- private positionX;
8
- private positionY;
9
- private innerRadius;
10
- private outerRadius;
11
- private borderThickness;
12
- private categories;
13
- private isChild;
11
+ private geometry;
14
12
  private containerId;
15
13
  private key;
14
+ private borderSegmentElements;
15
+ private lastActiveIndex;
16
+ private currentBeaconIndex;
17
+ private persistentSourceIndex;
18
+ private beaconPulseActive;
19
+ private arcsInitialized;
20
+ private facetteImageRingGroup;
21
+ private readonly facetteImageElements;
22
+ private readonly facetteImagePositions;
23
+ private revealedFacetteImageIndex;
24
+ /** Default "voile terne" filter applied to every facette image — lifted
25
+ * (see revealFacetteImage) only for the facette the outer spark is
26
+ * currently sweeping over. */
27
+ private readonly facetteImageVeilFilter;
28
+ private _hoverSegmentIndex;
29
+ /** Segment currently under the mouse pointer, tracked separately from
30
+ * _hoverSegmentIndex (which comes from the Recherche tree) so neither
31
+ * source clears the other's lift. */
32
+ private _pointerHoverIndex;
33
+ /** Callback déclenché quand la souris entre/sort d'un arc de bordure. */
34
+ private _onBorderHoverCb;
35
+ setOnBorderHover(cb: (index: number | null) => void): void;
36
+ private readonly segmentOutlineWidth;
37
+ /** Single def shared by every segment's bevel overlay — see
38
+ * createSegmentBevelGradient. */
39
+ private readonly bevelGradientId;
40
+ private readonly activeOutlineWidth;
41
+ private readonly inactiveOutlineColor;
42
+ private readonly activeOutlineColor;
43
+ private readonly sourceBeaconColor;
44
+ private borderGhostGroupNode;
45
+ private borderGhostEntries;
46
+ private borderGhostFrameId;
16
47
  constructor(ViewInitializer: ViewInitializer);
17
48
  /**
18
49
  * Initializes the properties needed for drawing borders based on the ViewInitializer data.
50
+ * Uses borderArcsGroup for the persistent per-component border arcs.
19
51
  */
20
52
  initialize(): void;
21
53
  /**
@@ -25,18 +57,176 @@ export declare class BorderDrawer {
25
57
  createBorders(): void;
26
58
  /**
27
59
  * Draws an individual border around the Yin Yang pattern using a gradient or mask.
60
+ * For the main pattern, the border is rendered as transparent with only the black gradient relief.
28
61
  *
29
62
  * @param innerRadius - The inner radius of the border.
30
63
  * @param outerRadius - The outer radius of the border.
31
64
  * @param index - Index of the border, used for generating unique identifiers.
32
65
  */
33
- drawBorder(innerRadius: number, outerRadius: number, index?: number): void;
66
+ drawBorder(innerRadius: number, outerRadius: number, _index?: number, container?: IGraphicElement): void;
34
67
  /**
35
- * Creates a mask and a linear gradient for the borders. The gradient animates the border colors.
68
+ * Creates border segment elements once in borderArcsGroup.
69
+ * These elements persist across redraws (never destroyed) and event listeners stay intact.
70
+ * Only called once via the arcsInitialized flag.
71
+ */
72
+ private createBorderSegmentElements;
73
+ /** Corner rounding applied to every segment arc, derived from the live
74
+ * `borderSegmentCornerRadius` control: 0 keeps the raw pie-slice corners,
75
+ * 1 turns each arc into a capsule (radius = half the band thickness). */
76
+ private getSegmentCornerRadius;
77
+ /** Shared bevel gradient for every segment: a radial gradient centred on the
78
+ * sphere, in user space, so a single def shades all arcs identically
79
+ * whatever their angle — dark at the inner edge, neutral in the middle,
80
+ * lit crest at the resting outer edge. Its outer extent covers the fully
81
+ * expanded radius an active arc reaches, and fades back to transparent
82
+ * past the resting rim, so a growing arc looks like it swells out from
83
+ * under the glass rather than dragging a flat white slab with it. */
84
+ private createSegmentBevelGradient;
85
+ /** Extra outer radius an active segment may grow by. Shared by the width
86
+ * animation and the bevel gradient so both agree on where the resting rim
87
+ * sits inside the gradient. */
88
+ private getMaxOuterRadiusIncrease;
89
+ /** Applies the radial hover lift to every segment: an arc pointed at by the
90
+ * cursor — or highlighted from the Recherche tree via setHoverSegment —
91
+ * slides outward along its own mid-angle, which is the physical "this is a
92
+ * button" affordance the flat ring was missing. Driven off the whole hover
93
+ * state rather than a single index so the two sources can't cancel each
94
+ * other out. */
95
+ private refreshSegmentLifts;
96
+ /**
97
+ * Draws the border-ring ghost overlay from ViewInitializer.borderSegmentsGhost:
98
+ * a dashed gold arc at each facette's projected boundary (filled wash if
99
+ * the facette grows, outline only if it shrinks — same asymmetry as
100
+ * WeightPreviewRingRenderer), plus a traveling wave arc sweeping between
101
+ * the real and projected boundary. Because buildGhostBorderSegments
102
+ * renormalizes the whole ring, every facette is redrawn here, not just the
103
+ * one whose own weightDelta actually changed. No-op on children — border
104
+ * segments (and their ghosts) only exist on the parent sphere.
105
+ */
106
+ drawBorderSegmentGhosts(): void;
107
+ private getBorderGhostRadii;
108
+ private drawBorderGhostArcs;
109
+ private ensureBorderGhostLoop;
110
+ private stopBorderGhostLoop;
111
+ /** Traveling wave that sweeps each boundary angle between its real
112
+ * position and its projected ghost position, on the same lap
113
+ * duration/easing as the yin/yang tension ghost's wave (see
114
+ * YinYangDrawer.updateGhostWaveAnimation and
115
+ * ViewInitializer.waveTravelDurationSec). Boundaries are shared between
116
+ * adjacent facette segments (segment[i].endAngle === segment[i+1].startAngle
117
+ * in both the base and ghost sets), so interpolating every segment with
118
+ * the same phase keeps the ring visually contiguous throughout. */
119
+ private updateBorderGhostWave;
120
+ /**
121
+ * Handles a click on a composante's border arc segment (or its image
122
+ * thumbnail — see createFacetteImageRing): toggles satellite visibility if
123
+ * it's already the current segment, otherwise switches the diagram to it.
124
+ */
125
+ handleSegmentClick(segmentIndex: number, category: string): void;
126
+ /**
127
+ * Creates one clickable circular thumbnail per composante, positioned along
128
+ * the radial axis of its border-arc segment, just outside the ring. Created
129
+ * once (persists across redraws, like the border segments themselves) —
130
+ * it lives in borderArcsGroup so it scales along with the rest of the
131
+ * pattern when resizeWholePattern() shrinks the diagram for satellites.
36
132
  *
37
- * @param innerRadius - The inner radius of the border.
38
- * @param outerRadius - The outer radius of the border.
39
- * @param index - Index of the border, used for generating unique identifiers.
133
+ * Sized to fill whatever room is actually left between the ring and the
134
+ * container edge: resizeWholePattern() (applyChildrenFitScale, reserving
135
+ * room for satellites) has already run by the time this is called see
136
+ * YinYangController.createFacetteImageRing() — so patternScale reflects the
137
+ * real shrink. Everything here is expressed in the pre-scale coordinate
138
+ * space (like the rest of borderArcsGroup), so the "available" reach up to
139
+ * the container edge in that space is containerRadius / patternScale.
140
+ */
141
+ createFacetteImageRing(): void;
142
+ /** Tears down and recreates the facette image ring so live-tuned parameters
143
+ * (margin, fade start/opacity — see the "Images facette" dev controls) take
144
+ * effect immediately. */
145
+ rebuildFacetteImageRing(): void;
146
+ /** Lifts the "voile terne" on one facette's image, veiling every other one
147
+ * — only one can be unveiled at a time. Driven by the outer spark
148
+ * sweeping across border arcs. Veils *all* others rather than just the
149
+ * previously-tracked index, so this also correctly restores the
150
+ * single-spotlight invariant the first time it's called after Idle
151
+ * (where every image starts unveiled, not just one). */
152
+ revealFacetteImage(segmentIndex: number): void;
153
+ /** Center + radius (pre-scale coordinate space) of a facette's image
154
+ * thumbnail, so labels can be anchored onto the image instead of
155
+ * floating radially around the sphere. */
156
+ getFacetteImagePosition(segmentIndex: number): {
157
+ x: number;
158
+ y: number;
159
+ radius: number;
160
+ } | undefined;
161
+ private getSegmentMidAngle;
162
+ private getPointOnAngle;
163
+ /**
164
+ * Immediately activates the gold outline + width-expansion style on the given
165
+ * segment index, mirroring what happens on a manual arc click.
166
+ * Call this whenever a component switch is triggered programmatically
167
+ * (e.g. from the action stack) so the border stays in sync from the very
168
+ * start of the transition animation.
169
+ */
170
+ activateSegment(segmentIndex: number): void;
171
+ /** Resets all arc segments to inactive style (e.g. when satellites are
172
+ * folded) and returns to Idle: every facette image goes back to full
173
+ * color, exactly like a fresh load. */
174
+ deactivateSegment(): void;
175
+ /** Restores every facette image to full color — the Idle visual, reached
176
+ * both at true init and whenever no facette is currently active (e.g.
177
+ * after deselecting one via deactivateSegment). */
178
+ revealAllFacetteImages(): void;
179
+ /**
180
+ * Highlights the source component border arc with a temporary beacon.
181
+ * Used during a component switch when the active action has no visible force field.
182
+ */
183
+ flashSourceBeacon(segmentIndex: number): void;
184
+ /**
185
+ * Clears the persistent source highlight when the action context is removed.
186
+ */
187
+ clearSourceBeacon(): void;
188
+ /**
189
+ * Applique un survol léger sur un segment de bordure (hover depuis l'arbre Recherche).
190
+ * N'affecte pas l'index actif — simple classe CSS ajoutée/retirée.
191
+ */
192
+ setHoverSegment(segmentIndex: number | null): void;
193
+ /** Rebuilds every border segment so the live-tuned shape parameters (corner
194
+ * radius, bevel intensity) take effect immediately — the arcs themselves
195
+ * are otherwise built exactly once, at init. Mirrors
196
+ * rebuildFacetteImageRing. The active/beacon state is re-applied at the
197
+ * end so a rebuild is visually invisible apart from the tuned parameter. */
198
+ rebuildBorderSegments(): void;
199
+ /**
200
+ * Updates the style of border segments based on active index (lightweight, no redraw)
201
+ * Only updates if the active index has actually changed
202
+ */
203
+ private updateBorderSegmentStyles;
204
+ private applySegmentStyle;
205
+ private getTotalBordersGroup;
206
+ /**
207
+ * Applies color animation to a segment's gradient, making it cycle through category colors
208
+ */
209
+ private applySegmentColorAnimation;
210
+ /**
211
+ * Removes color animation from a segment's gradient
212
+ */
213
+ private removeSegmentColorAnimation;
214
+ /**
215
+ * Applies an animation that only increases the segment outer radius.
216
+ * The inner radius remains unchanged.
217
+ */
218
+ private applySegmentOuterWidthAnimation;
219
+ private startBeaconPulse;
220
+ private toRgba;
221
+ /**
222
+ * Builds the ODD gradient painted inside one facette's arc.
223
+ *
224
+ * The gradient axis is the chord running from the start of the arc to its
225
+ * end, taken at mid-thickness, in the arc's own (origin-centred) user space
226
+ * — so the ODDs are read *along the button*, first to last, wherever the
227
+ * facette sits on the ring. It used to be a bounding-box gradient running
228
+ * plain left-to-right, which happened to read correctly only for arcs near
229
+ * the top of the circle and ran across the arc for the ones on the sides.
40
230
  */
41
- private CreateBorderMaskAndGradient;
231
+ private createSegmentGradient;
42
232
  }
@@ -1,17 +1,13 @@
1
- import { ICategory } from "../../interfaces/ICategory";
2
1
  import { ViewInitializer } from "./ViewInitializer";
3
- import { IYinOrYangPattern } from "../../interfaces/IYinOrYangPattern";
4
2
  export declare class SpikeDrawer {
5
3
  private ViewInitializer;
6
- private categories;
7
- private isChild;
8
- private yinOrYangGroup;
9
- private sortedData;
10
- private positionX;
11
- private viewData;
4
+ private geometry;
12
5
  private containerId;
13
6
  private key;
14
7
  private graphicStrategy;
8
+ spikesEnabled: boolean;
9
+ private spikeGhostEntries;
10
+ private spikeGhostFrameId;
15
11
  constructor(ViewInitializer: ViewInitializer);
16
12
  /**
17
13
  * Initializes the necessary data for drawing spikes.
@@ -23,32 +19,42 @@ export declare class SpikeDrawer {
23
19
  */
24
20
  createSpikes(): void;
25
21
  /**
26
- * Loops through both Yin and Yang groups and calls the spike drawing function for each.
22
+ * Refreshes spikes: clears existing ones and redraws if enabled.
27
23
  */
28
- drawYinYangSpikes(yinOrYangGroup: {
29
- yin: IYinOrYangPattern;
30
- yang: IYinOrYangPattern;
31
- }): void;
24
+ refreshSpikes(): void;
25
+ private clearSpikes;
26
+ private drawSpikes;
27
+ private drawSpike;
32
28
  /**
33
- * Draws spikes for either Yin or Yang based on the data.
34
- * The spikes are drawn for each category, with different sizes and positions.
35
- *
36
- * @param centerY - The Y coordinate of the center.
37
- * @param radius - The radius of the element (Yin or Yang).
38
- * @param type - Whether the element is "yin" or "yang".
29
+ * Draws the weightDelta ghost overlay from ViewInitializer.spikesGhost on
30
+ * both yin and yang: a dashed gold line to each targeted spike's projected
31
+ * tip (same asymmetric dash as the border/ODD-arc ghosts, though a spike
32
+ * has no fill to speak of), plus a dot that travels between the real and
33
+ * projected tip. Unlike the arc ghosts, only spikes with an active
34
+ * weightDelta appear here a spike's length never depends on its
35
+ * siblings. Called after every drawSpikes (so it always reflects the
36
+ * latest real spikes) and standalone from ViewInitializer.updateSpikeGhost
37
+ * for weight-only preview updates.
39
38
  */
40
- drawYinOrYangSpikes(centerY: number, radius: number, type: "yin" | "yang"): void;
39
+ drawSpikeGhosts(): void;
40
+ private drawSpikeGhostsForType;
41
+ private drawSpikeGhostLines;
42
+ private ensureSpikeGhostLoop;
43
+ private stopSpikeGhostLoop;
44
+ /** Dot that travels between a spike's real tip and its projected tip, on
45
+ * the same lap duration/easing as the border-segment and ODD-arc ghost
46
+ * waves (see ViewInitializer.waveTravelDurationSec) — the line-segment
47
+ * analog of their traveling arcs. Re-queries the layer node each frame
48
+ * instead of caching it, since a full redraw can replace it between
49
+ * frames. */
50
+ private updateSpikeGhostWave;
41
51
  /**
42
- * Draws individual spikes based on the data, angle, and category.
43
- * Each spike's length is determined by the score of the associated data item.
44
- *
45
- * @param cat - The category of the data item.
46
- * @param centerY - The Y coordinate of the center.
47
- * @param smallRadius - The radius of the inner circle.
48
- * @param radius - The radius of the outer circle.
49
- * @param type - Whether the element is "yin" or "yang".
50
- * @param startAngle - The starting angle of the spike.
51
- * @param endAngle - The ending angle of the spike.
52
+ * Highlights the spikes (yin + yang) corresponding to a given ODD and cutting index
53
+ * with a glow effect similar to the active child style.
52
54
  */
53
- drawSpikes(cat: ICategory, centerY: number, smallRadius: number, radius: number, type: "yin" | "yang", startAngle: number, endAngle: number): void;
55
+ highlightSpikeByCuttingIndex(oddId: string, cuttingIndex: number): void;
56
+ /**
57
+ * Restores all spikes to their default appearance.
58
+ */
59
+ unhighlightSpikes(): void;
54
60
  }