@micheeeeel/yinyangapp 3.0.0 → 3.1.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 (110) hide show
  1. package/dist/bundle.css +1 -0
  2. package/dist/bundle.js +1 -2
  3. package/dist/types/adapters/yasuniCauseAdapter.d.ts +3 -0
  4. package/dist/types/adapters/yinYangAdapter.d.ts +7 -0
  5. package/dist/types/animations/AnimationsMngr.d.ts +69 -15
  6. package/dist/types/animations/FrameScheduler.d.ts +99 -0
  7. package/dist/types/animations/rotationMotion.d.ts +43 -0
  8. package/dist/types/api.d.ts +17 -2
  9. package/dist/types/benchmark/runner.d.ts +20 -0
  10. package/dist/types/benchmark/scenarios.d.ts +55 -6
  11. package/dist/types/components/controller/YinYangController.d.ts +104 -14
  12. package/dist/types/components/controller/action-stack/ActionStackController.d.ts +16 -1
  13. package/dist/types/components/controller/action-stack/ActionStackDragHandler.d.ts +4 -0
  14. package/dist/types/components/controller/action-stack/ActionStackManager.d.ts +13 -2
  15. package/dist/types/components/controller/action-stack/ActionStackState.d.ts +8 -5
  16. package/dist/types/components/controller/action-stack/StackFocusController.d.ts +8 -7
  17. package/dist/types/components/controller/action-stack/stackChromePalette.d.ts +20 -0
  18. package/dist/types/components/controller/actions/ActionProjectionService.d.ts +16 -1
  19. package/dist/types/components/controller/actions/ChildActionMenuController.d.ts +74 -32
  20. package/dist/types/components/controller/actions/KeyEventController.d.ts +78 -70
  21. package/dist/types/components/controller/actions/{CoreEventMenuController.d.ts → KeyEventMenuController.d.ts} +28 -33
  22. package/dist/types/components/controller/actions/radialItemMenu.d.ts +43 -5
  23. package/dist/types/components/controller/children/ChildInteractionController.d.ts +4 -0
  24. package/dist/types/components/controller/children/ChildrenBuilder.d.ts +3 -1
  25. package/dist/types/components/controller/children/ComponentSwitchCoordinator.d.ts +3 -1
  26. package/dist/types/components/controller/children/IdleFacettesController.d.ts +151 -0
  27. package/dist/types/components/controller/children/idleTabLayout.d.ts +95 -0
  28. package/dist/types/components/controller/children/idleTabMorph.d.ts +45 -0
  29. package/dist/types/components/controller/force-field/EventFieldLifecycleController.d.ts +14 -0
  30. package/dist/types/components/controller/force-field/EventFieldRenderer.d.ts +3 -3
  31. package/dist/types/components/controller/force-field/ForceFieldCanvasPainter.d.ts +99 -0
  32. package/dist/types/components/controller/force-field/ForceFieldComputationService.d.ts +9 -0
  33. package/dist/types/components/controller/force-field/ForceFieldDetailsPanel.d.ts +28 -57
  34. package/dist/types/components/controller/force-field/ForceFieldDetailsPresenter.d.ts +4 -1
  35. package/dist/types/components/controller/force-field/ForceFieldLifecycleController.d.ts +16 -1
  36. package/dist/types/components/controller/force-field/ForceFieldRenderer.d.ts +10 -18
  37. package/dist/types/components/controller/force-field/IncomingForceFieldService.d.ts +2 -2
  38. package/dist/types/components/controller/force-field/PropagationAnimator.d.ts +2 -0
  39. package/dist/types/components/controller/force-field/keyEventPresentation.d.ts +47 -0
  40. package/dist/types/components/controller/force-field/propagation-viz/PropagationCometPlayer.d.ts +4 -0
  41. package/dist/types/components/controller/force-field/propagation-viz/propagationVizLists.d.ts +4 -2
  42. package/dist/types/components/controller/force-field/propagation-viz/propagationVizModel.d.ts +1 -0
  43. package/dist/types/components/controller/force-field/shieldViewModel.d.ts +6 -2
  44. package/dist/types/components/controller/force-field/types.d.ts +2 -1
  45. package/dist/types/components/controller/labels/ChildScoresDeltaRenderer.d.ts +7 -0
  46. package/dist/types/components/controller/labels/ComponentTitlePresenter.d.ts +13 -0
  47. package/dist/types/components/controller/labels/ContextLabelsRenderer.d.ts +16 -0
  48. package/dist/types/components/controller/labels/WeightPreviewRingRenderer.d.ts +6 -0
  49. package/dist/types/components/controller/odd/ChildrenOrbitManager.d.ts +76 -25
  50. package/dist/types/components/controller/odd/OddHighlightEffects.d.ts +2 -0
  51. package/dist/types/components/controller/odd/OddViewManager.d.ts +7 -3
  52. package/dist/types/components/controller/odd/childHighlightStyles.d.ts +45 -3
  53. package/dist/types/components/controller/search/SearchPanelSynchronizer.d.ts +8 -5
  54. package/dist/types/components/controller/settings/ControllerSettingsApplier.d.ts +4 -4
  55. package/dist/types/components/controller/state/ControllerSession.d.ts +3 -3
  56. package/dist/types/components/controller/state/ControllerUiCallbacks.d.ts +10 -0
  57. package/dist/types/components/controller/state/YinYangControllerState.d.ts +20 -9
  58. package/dist/types/components/controller/types.d.ts +9 -2
  59. package/dist/types/components/controller/utils/actionCatalog.d.ts +1 -1
  60. package/dist/types/components/controller/utils/eventFieldTargets.d.ts +19 -13
  61. package/dist/types/components/controller/utils/keyEventPropagationContext.d.ts +4 -0
  62. package/dist/types/components/controller/utils/keyEventTargetBreakdowns.d.ts +4 -0
  63. package/dist/types/components/controller/utils/svgTransform.d.ts +16 -0
  64. package/dist/types/components/controls/VizControlsPanel.d.ts +3 -1
  65. package/dist/types/components/panel/PanelManager.d.ts +92 -22
  66. package/dist/types/components/search/GlobalSearchController.d.ts +13 -6
  67. package/dist/types/components/view/BorderDrawer.d.ts +40 -14
  68. package/dist/types/components/view/IdleTabGridDrawer.d.ts +15 -0
  69. package/dist/types/components/view/SpikeDrawer.d.ts +18 -0
  70. package/dist/types/components/view/ViewInitializer.d.ts +53 -13
  71. package/dist/types/components/view/YinYangDrawer.d.ts +139 -40
  72. package/dist/types/components/view/borderColorCycle.d.ts +76 -0
  73. package/dist/types/components/workspace/facetWeightRuleSetting.d.ts +10 -0
  74. package/dist/types/components/workspace/workspaceTemplate.d.ts +1 -1
  75. package/dist/types/config/animationConfig.d.ts +10 -1
  76. package/dist/types/data/adverse-action-planner.d.ts +3 -3
  77. package/dist/types/data/amplifier-engine.d.ts +6 -6
  78. package/dist/types/data/key-event-effects.d.ts +30 -0
  79. package/dist/types/data/key-event-eligibility.d.ts +24 -0
  80. package/dist/types/data/key-event-propagation.d.ts +13 -0
  81. package/dist/types/data/key-event-types.d.ts +48 -0
  82. package/dist/types/data/key-event-validation.d.ts +11 -0
  83. package/dist/types/data/stability-shield.d.ts +14 -0
  84. package/dist/types/data/yasuni_adverse_key_events.d.ts +1 -1
  85. package/dist/types/data/yasuni_cause.d.ts +7 -0
  86. package/dist/types/data/yasuni_key_events.d.ts +4 -60
  87. package/dist/types/interfaces/ICauseModel.d.ts +12 -1
  88. package/dist/types/interfaces/IGraphicsStrategy.d.ts +9 -2
  89. package/dist/types/interfaces/IPropagationGraph.d.ts +14 -0
  90. package/dist/types/interfaces/IViewData.d.ts +10 -0
  91. package/dist/types/interfaces/IYinYangController.d.ts +25 -7
  92. package/dist/types/interfaces/IYinYangInternalModel.d.ts +5 -0
  93. package/dist/types/main.d.ts +0 -1
  94. package/dist/types/utils/actionIconFit.d.ts +23 -0
  95. package/dist/types/utils/actionPropagation.d.ts +6 -4
  96. package/dist/types/utils/causeMetrics.d.ts +50 -0
  97. package/dist/types/utils/chainCardHeight.d.ts +87 -4
  98. package/dist/types/utils/collapseAnimation.d.ts +39 -0
  99. package/dist/types/utils/d3/D3GraphicsStrategy.d.ts +28 -5
  100. package/dist/types/utils/deltaChips.d.ts +0 -4
  101. package/dist/types/utils/exportControls.d.ts +8 -0
  102. package/dist/types/utils/facetWeightLabel.d.ts +13 -0
  103. package/dist/types/utils/facetteImages.d.ts +6 -0
  104. package/dist/types/utils/glowHalo.d.ts +74 -0
  105. package/dist/types/utils/hierBadge.d.ts +1 -1
  106. package/dist/types/utils/keyEventImages.d.ts +1 -1
  107. package/dist/types/utils/menuIconSize.d.ts +17 -0
  108. package/dist/types/utils/spreadAngles.d.ts +8 -0
  109. package/package.json +4 -1
  110. package/dist/bundle.js.LICENSE.txt +0 -1
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Animation commune des replis/déploiements : la bascule d'état reste
3
+ * synchrone (classe, attribut `hidden`…), seule la hauteur de l'élément est
4
+ * interpolée de l'ancienne valeur à la nouvelle (mesure avant/après, Web
5
+ * Animations). L'état logique est donc à jour dès le clic — un re-rendu ou
6
+ * une mesure lit la valeur finale, jamais une valeur différée.
7
+ *
8
+ * Au repli, le contenu masqué par la bascule (display:none, hidden, line-clamp)
9
+ * disparaîtrait d'un coup et l'élément se refermerait sur du vide : `hold`
10
+ * le garde visible le temps de l'animation et rend la fonction qui le relâche.
11
+ *
12
+ * Pendant l'animation, l'élément porte `data-collapse-anim` ; à la fin il
13
+ * émet COLLAPSE_ANIM_END (bulle), ce qui permet aux calculs de mise en page
14
+ * (chainCardHeight) d'ignorer les hauteurs intermédiaires et de se recaler.
15
+ *
16
+ * Les zones défilantes qui ne débordaient pas avant la bascule (panneau
17
+ * parent, liste interne) gardent leur barre de défilement masquée pendant
18
+ * l'animation : une hauteur intermédiaire peut les faire déborder un instant.
19
+ */
20
+ export declare const COLLAPSE_ANIM_DURATION_MS = 240;
21
+ export declare const COLLAPSE_ANIM_END = "collapseanimend";
22
+ export declare const COLLAPSE_ANIM_ATTR = "data-collapse-anim";
23
+ export interface HeightAnimationOptions {
24
+ /** Repli : garde visible le contenu sortant, rend la fonction qui le relâche. */
25
+ hold?: () => (() => void) | void;
26
+ /** Élément dont l'opacité suit le mouvement (contenu entrant / sortant). */
27
+ fade?: HTMLElement | null;
28
+ duration?: number;
29
+ }
30
+ export declare function prefersReducedMotion(): boolean;
31
+ /**
32
+ * Applique `mutate` (la bascule d'état) et anime la hauteur de `el` de sa
33
+ * valeur courante — éventuellement en cours d'animation, un double clic
34
+ * repart donc d'où il en est — à sa nouvelle valeur.
35
+ */
36
+ export declare function animateHeightChange(el: HTMLElement, mutate: () => void, options?: HeightAnimationOptions): void;
37
+ /** Apparition d'un contenu révélé autrement que par la hauteur (ex. carte qui
38
+ * s'élargit) : fondu seul. */
39
+ export declare function fadeIn(el: HTMLElement | null | undefined): void;
@@ -10,6 +10,8 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
10
10
  private arcMaskCache;
11
11
  private underlyingGradientCache;
12
12
  private maskIdCurrentCacheKey;
13
+ private gradientIdCurrentCacheKey;
14
+ private liveDefNodes;
13
15
  /**
14
16
  * Initializes the SVG element and appends it to the given selector.
15
17
  * Also creates a 'defs' section for reusable graphical elements like gradients.
@@ -26,6 +28,8 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
26
28
  drawCircle(parent: D3Element, cx: number, cy: number, radius: number, fill: string, opacity?: number): D3Element;
27
29
  private escapeAttributeValue;
28
30
  private getDefById;
31
+ private getLiveDefById;
32
+ removeDefsByIds(ids: Iterable<string>): void;
29
33
  private defExists;
30
34
  private getCacheKey;
31
35
  /**
@@ -56,13 +60,26 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
56
60
  */
57
61
  createYinOrYangArcMask(maskId: string, cx: number, cy: number, innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, type: "yin" | "yang", blendOpacity?: number): string;
58
62
  /**
59
- * Creates a mask for the border with a radial gradient to simulate fading edges.
63
+ * Géométrie d'un masque d'arc (createYinOrYangArcMask) : deux bandes en
64
+ * dégradé aux bords de l'arc (fondu des extrémités) et l'arc plein. Partagée
65
+ * par la création et la mise à jour en place (updateYinOrYangArcMask), pour
66
+ * qu'une frame de transition écrive exactement les attributs qu'un rendu
67
+ * complet aurait posés.
60
68
  */
61
- createBorderMask(id: string, centerX: number, centerY: number, innerRadius: number, outerRadius: number): void;
69
+ private computeArcMaskShape;
70
+ /**
71
+ * Met à jour EN PLACE un masque posé par createYinOrYangArcMask (mêmes
72
+ * paramètres) : attributs des deux bandes, de l'arc et opacité de fondu,
73
+ * sans rien retirer ni ajouter au <defs>. Sert aux frames de transition de
74
+ * facette (YinYangDrawer.updateSwitchFrame). Renvoie false si le masque
75
+ * n'existe pas ou n'a pas la structure attendue : l'appelant repasse alors
76
+ * par un rendu complet.
77
+ */
78
+ updateYinOrYangArcMask(maskId: string, cx: number, cy: number, innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, type: "yin" | "yang", blendOpacity?: number): boolean;
62
79
  /**
63
- * Changes the colors of a border gradient over time using an animation.
80
+ * Creates a mask for the border with a radial gradient to simulate fading edges.
64
81
  */
65
- changeBorderColors(gradient: D3Element, duration: number, colors: string[]): void;
82
+ createBorderMask(id: string, centerX: number, centerY: number, innerRadius: number, outerRadius: number): void;
66
83
  /**
67
84
  * Draws a line with a gradient stroke.
68
85
  */
@@ -71,8 +88,14 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
71
88
  * Creates a radial gradient for an underlying circle.
72
89
  */
73
90
  createUnderlyingCircleGradient(id: string, color: string, spread?: number, intensity?: number): string;
91
+ /**
92
+ * Repeint en place un dégradé posé par createUnderlyingCircleGradient
93
+ * (mêmes étalement et intensité) : seule la couleur de ses arrêts change.
94
+ * Renvoie false s'il n'existe plus (l'appelant repasse par un rendu complet).
95
+ */
96
+ updateUnderlyingCircleGradientColor(id: string, color: string, spread?: number, intensity?: number): boolean;
74
97
  /**
75
98
  * Creates an underlying circle with a gradient and applies an arc mask.
76
99
  */
77
- createUnderlyingCircleWithArcMask(maskId: string | undefined, gradientId: string, parent: D3Element, cx: number, cy: number, radius: number): void;
100
+ createUnderlyingCircleWithArcMask(maskId: string | undefined, gradientId: string, parent: D3Element, cx: number, cy: number, radius: number): D3Element;
78
101
  }
@@ -1,4 +1,3 @@
1
- import type { KeyEventEffect } from "../data/yasuni_key_events";
2
1
  /** Ce dont une chip a besoin — sous-ensemble d'ActionDefinition. */
3
2
  export interface ChipDeltas {
4
3
  baseDelta: number;
@@ -10,6 +9,3 @@ export declare function formatDelta(value: number): string;
10
9
  export declare function formatSignedDelta(value: number): string;
11
10
  /** Deltas du catalogue, sur une ligne Action. */
12
11
  export declare function buildActionChipsHtml(action: ChipDeltas): string;
13
- /** Bonus d'un Événement Clé — points ajoutés aux actions amplifiées. Sert
14
- * aussi au malus d'une action adverse (mêmes champs, signe négatif). */
15
- export declare function buildKeyEventChipsHtml(effect: KeyEventEffect): string;
@@ -0,0 +1,8 @@
1
+ /** Utilitaire pour exporter et copier les contrôles du panneau debug */
2
+ export interface ExportOptions {
3
+ selectedIds?: Set<string>;
4
+ showPreview?: boolean;
5
+ }
6
+ export declare function generateControlsCode(snapshot: Record<string, unknown>, selectedIds?: Set<string>): string;
7
+ export declare function copyToClipboard(text: string): Promise<boolean>;
8
+ export declare function showToast(message: string, duration?: number): void;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Libellé de la pastille de poids d'une facette ou d'une catégorie (ODD),
3
+ * pour une cause comme pour un contact. Règle `mean` (défaut, POC-05A4) :
4
+ * moyenne des poids de tous ses satellites, arrondie à un chiffre après la
5
+ * virgule, avec une virgule décimale — « 7,2 », sur 10. Règle `sum`
6
+ * (ancienne, voir `FacetWeightRule`) : somme entière — « 61 », sur
7
+ * « satellites × 10 ». `max` ne s'affiche qu'avec le suffixe
8
+ * (`facetteLabelSuffixVisible`).
9
+ */
10
+ export declare function facetWeightLabel(weights: readonly number[]): {
11
+ value: string;
12
+ max: number;
13
+ };
@@ -1,2 +1,8 @@
1
1
  export declare function hasFacetteImage(composanteId: string): boolean;
2
+ /**
3
+ * Les originaux (1254×1254, ~6 Mo décodés) ne sont jamais affichés tels quels :
4
+ * on sert une miniature de 512 px et sa variante « voilée » pré-rendue (voir
5
+ * scripts/generate-facette-thumbs.py).
6
+ */
2
7
  export declare function getFacetteImageUrl(composanteId: string): string;
8
+ export declare function getFacetteVeiledImageUrl(composanteId: string): string;
@@ -0,0 +1,74 @@
1
+ export type GlowStrokeLayer = {
2
+ /** Débord du trait de halo au-delà du bord de la forme, en px. */
3
+ spread: number;
4
+ /** Opacité propre de ce trait (les traits se superposent). */
5
+ opacity: number;
6
+ };
7
+ /**
8
+ * Traits superposés équivalant à `drop-shadow(0 0 ${blur}px couleur)` d'alpha
9
+ * `alpha` : à peindre du plus large au plus étroit, chacun de largeur
10
+ * `largeurDeBase + 2 × spread`, même couleur, `stroke-opacity` = `opacity`.
11
+ */
12
+ export declare function glowStrokeLayers(blur: number, alpha?: number): GlowStrokeLayer[];
13
+ /** Débord total (px) du halo de `glowStrokeLayers(blur)`. */
14
+ export declare function glowStrokeReach(blur: number): number;
15
+ /**
16
+ * Crée (ou recâble) dans `group` les traits d'un halo de chemin. `tag` est
17
+ * l'élément copié (`path`, `line`…) ; la géométrie est posée ensuite par
18
+ * l'appelant sur chaque trait (`d`, `x1`…), via `forEachStroke`.
19
+ */
20
+ export declare function ensureGlowStrokes(group: SVGGElement, tag: "path" | "line" | "circle", layerCount?: number): SVGElement[];
21
+ /**
22
+ * Habille les traits d'un halo : couleur, largeurs et opacités équivalant à
23
+ * un `drop-shadow(0 0 ${blur}px color)` posé sur une forme dont le trait fait
24
+ * `baseWidth` (0 pour une forme seulement remplie).
25
+ */
26
+ export declare function styleGlowStrokes(strokes: readonly SVGElement[], options: {
27
+ color: string;
28
+ blur: number;
29
+ alpha?: number;
30
+ baseWidth?: number;
31
+ }): void;
32
+ export type SoftEdgeLayer = {
33
+ /** Décalage du bord de la couche (px) : > 0 vers l'extérieur. */
34
+ offset: number;
35
+ opacity: number;
36
+ };
37
+ /**
38
+ * Couches superposées équivalant à une forme pleine d'alpha `alpha` floutée
39
+ * par `filter: blur(${sigma}px)` (σ = l'argument de blur()) : à peindre dans
40
+ * l'ordre, chacune agrandie de `offset` (ou réduite si négatif), même
41
+ * couleur, `fill-opacity` = `opacity`.
42
+ */
43
+ export declare function softEdgeLayers(sigma: number, alpha?: number): SoftEdgeLayer[];
44
+ /** Rayon du disque de halo d'un cercle de rayon `radius`. */
45
+ export declare function circleGlowRadius(radius: number, blur: number): number;
46
+ /**
47
+ * `fill` d'un disque de rayon `circleGlowRadius(radius, blur)` centré sur un
48
+ * cercle de rayon `radius`, équivalant à `drop-shadow(0 0 ${blur}px color)`
49
+ * de ce cercle. Le dégradé (objectBoundingBox) est partagé par tous les
50
+ * cercles de même couleur et de même rapport rayon / flou, et recréé s'il a
51
+ * été purgé des defs.
52
+ */
53
+ export declare function circleGlowFill(svg: SVGSVGElement, color: string, radius: number, blur: number): string;
54
+ /** Une lueur : équivalent de `drop-shadow(0 0 ${blur}px color)` d'alpha `alpha`. */
55
+ export type GlowSpec = {
56
+ color: string;
57
+ blur: number;
58
+ alpha?: number;
59
+ };
60
+ /**
61
+ * Pose (ou retire, `glows` null) un halo d'une forme : un `<g>` inséré
62
+ * avant elle (donc peint dessous), qui contient des copies de sa géométrie
63
+ * en traits de lueur (voir styleGlowStrokes). Plusieurs lueurs s'empilent,
64
+ * la plus large d'abord. `baseWidth` : largeur du trait de la forme. `slot`
65
+ * distingue plusieurs halos indépendants sur la même forme. Renvoie le
66
+ * groupe du halo (null s'il est retiré).
67
+ */
68
+ export declare function syncShapeGlow(shape: SVGElement, glows: readonly GlowSpec[] | null, baseWidth?: number, slot?: string): SVGGElement | null;
69
+ /** Recopie la géométrie d'une forme sur ses halos, s'il y en a — à appeler
70
+ * quand la forme est modifiée en place. */
71
+ export declare function syncShapeGlowGeometry(shape: SVGElement): void;
72
+ /** Pose un attribut de géométrie sur les halos d'une forme (quand la forme
73
+ * elle-même le reçoit plus tard, p. ex. dans un attrTween d3). */
74
+ export declare function setShapeGlowAttribute(shape: Element, name: string, value: string): void;
@@ -22,7 +22,7 @@ export declare function buildOddDotHtml(oddColor: string): string;
22
22
  * couvert). `isKeyEvent` ajoute le médaillon (plaque + anneau doré +
23
23
  * Yin/Yang en filigrane, voir `.ke-medallion` dans details-panel.css) qui
24
24
  * distingue un Événement d'une Action à la silhouette seule. */
25
- export declare function buildItemIconHtml(iconUrl: string, isKeyEvent?: boolean): string;
25
+ export declare function buildItemIconHtml(iconUrl: string, isKeyEvent?: boolean, lazy?: boolean): string;
26
26
  /** Pastille d'état (score /100) affichée après le nom, dans le champ
27
27
  * "élément sélectionné" tout en haut du panneau — uniquement quand cet
28
28
  * élément est un satellite. Pas de delta : jugé trop chargé visuellement à
@@ -6,7 +6,7 @@ export type KeyEventImageSize = "thumb" | "full";
6
6
  */
7
7
  export declare function getKeyEventImageUrl(keyEventId: string, size: KeyEventImageSize): string;
8
8
  /**
9
- * Icône vectorielle courte (bulle du menu radial du cercle central, badge
9
+ * Icône vectorielle courte (bulle du menu radial du satellite-facette, badge
10
10
  * de carte), même convention de nommage.
11
11
  */
12
12
  export declare function getKeyEventIconUrl(keyEventId: string): string;
@@ -0,0 +1,17 @@
1
+ /** Utilitaire centralisé pour calculer la taille des icônes dans les menus radiaux
2
+ * (actions et événements clés). Assure l'harmonie visuelle entre les deux. */
3
+ /** Ratio de taille de l'icône quand elle est active (en focus/sélectionnée) */
4
+ export declare const ACTIVE_ICON_SIZE_RATIO = 1.85;
5
+ /** Ratio de taille de l'icône quand elle est inactive */
6
+ export declare const INACTIVE_ICON_SIZE_RATIO = 1.65;
7
+ /**
8
+ * Calcule la taille d'une icône dans un menu radial (bulle).
9
+ * Harmonise le dimensionnement entre les actions et les événements clés.
10
+ *
11
+ * @param bubbleRadius - Rayon de la bulle contenant l'icône
12
+ * @param isActive - L'icône est-elle en focus/active?
13
+ * @param iconFontScale - Facteur d'échelle du debug pour l'icône (slider utilisateur)
14
+ * @param applyFitScale - Appliquer le plafonnement fitScale (pour ne pas dépasser du cercle)?
15
+ * @returns Taille de l'icône en pixels
16
+ */
17
+ export declare function calculateMenuIconSize(bubbleRadius: number, isActive: boolean, iconFontScale?: number, applyFitScale?: boolean): number;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Écarte des angles (radians) placés sur un cercle de rayon `distance` pour
3
+ * que des disques de rayons `radii` centrés dessus ne se chevauchent pas,
4
+ * en déplaçant le moins possible chaque angle de sa position d'origine :
5
+ * chaque paire voisine trop serrée est écartée symétriquement, sur quelques
6
+ * passes. Renvoie les angles dans l'ordre d'entrée.
7
+ */
8
+ export declare function spreadAngles(angles: number[], radii: number[], distance: number, gap: number): number[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micheeeeel/yinyangapp",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
4
4
  "description": "A program to visualize human activity balance to reach Sustainable Development Objectives",
5
5
  "main": "dist/bundle.js",
6
6
  "types": "dist/types/main.d.ts",
@@ -14,6 +14,8 @@
14
14
  "analyze": "ANALYZE=true webpack --mode production && tsc -p tsconfig.types.json",
15
15
  "benchmark:compare": "node benchmarks/compare.js",
16
16
  "catalogue:matrix": "npx tsx scripts/catalogue-matrix.ts",
17
+ "events:balance": "node scripts/key-event-balance.cjs",
18
+ "events:adverse-balance": "node scripts/adverse-event-balance.cjs",
17
19
  "propagation:cycles-audit": "npx tsx scripts/propagation-cycles-audit.ts"
18
20
  },
19
21
  "author": "Thomas MICHEL",
@@ -47,6 +49,7 @@
47
49
  "files": [
48
50
  "dist/bundle.js",
49
51
  "dist/bundle.js.LICENSE.txt",
52
+ "dist/bundle.css",
50
53
  "dist/types",
51
54
  "README.md",
52
55
  "LICENSE"
@@ -1 +0,0 @@
1
- /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */