@micheeeeel/yinyangapp 3.0.1 → 3.1.1
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.
- package/dist/bundle.css +1 -0
- package/dist/bundle.js +1 -2
- package/dist/types/adapters/yasuniCauseAdapter.d.ts +13 -2
- package/dist/types/adapters/yinYangAdapter.d.ts +7 -0
- package/dist/types/animations/AnimationsMngr.d.ts +69 -15
- package/dist/types/animations/FrameScheduler.d.ts +99 -0
- package/dist/types/animations/rotationMotion.d.ts +43 -0
- package/dist/types/api.d.ts +31 -3
- package/dist/types/benchmark/runner.d.ts +20 -0
- package/dist/types/benchmark/scenarios.d.ts +55 -6
- package/dist/types/components/controller/YinYangController.d.ts +109 -14
- package/dist/types/components/controller/action-stack/ActionStackController.d.ts +16 -1
- package/dist/types/components/controller/action-stack/ActionStackDragHandler.d.ts +4 -0
- package/dist/types/components/controller/action-stack/ActionStackManager.d.ts +13 -2
- package/dist/types/components/controller/action-stack/ActionStackState.d.ts +8 -5
- package/dist/types/components/controller/action-stack/StackFocusController.d.ts +8 -7
- package/dist/types/components/controller/action-stack/stackChromePalette.d.ts +20 -0
- package/dist/types/components/controller/actions/ActionProjectionService.d.ts +12 -1
- package/dist/types/components/controller/actions/ChildActionMenuController.d.ts +74 -32
- package/dist/types/components/controller/actions/KeyEventController.d.ts +78 -70
- package/dist/types/components/controller/actions/{CoreEventMenuController.d.ts → KeyEventMenuController.d.ts} +28 -33
- package/dist/types/components/controller/actions/radialItemMenu.d.ts +43 -5
- package/dist/types/components/controller/children/ChildInteractionController.d.ts +4 -0
- package/dist/types/components/controller/children/ChildrenBuilder.d.ts +19 -22
- package/dist/types/components/controller/children/ComponentSwitchCoordinator.d.ts +3 -1
- package/dist/types/components/controller/children/IdleFacettesController.d.ts +205 -0
- package/dist/types/components/controller/children/facetModulation.d.ts +49 -0
- package/dist/types/components/controller/children/idleTabLayout.d.ts +95 -0
- package/dist/types/components/controller/children/idleTabMorph.d.ts +45 -0
- package/dist/types/components/controller/children/signatureLook.d.ts +10 -0
- package/dist/types/components/controller/force-field/EventFieldLifecycleController.d.ts +14 -0
- package/dist/types/components/controller/force-field/EventFieldRenderer.d.ts +3 -3
- package/dist/types/components/controller/force-field/ForceFieldCanvasPainter.d.ts +99 -0
- package/dist/types/components/controller/force-field/ForceFieldComputationService.d.ts +9 -0
- package/dist/types/components/controller/force-field/ForceFieldDetailsPanel.d.ts +28 -57
- package/dist/types/components/controller/force-field/ForceFieldDetailsPresenter.d.ts +4 -1
- package/dist/types/components/controller/force-field/ForceFieldLifecycleController.d.ts +16 -1
- package/dist/types/components/controller/force-field/ForceFieldRenderer.d.ts +10 -18
- package/dist/types/components/controller/force-field/IncomingForceFieldService.d.ts +2 -2
- package/dist/types/components/controller/force-field/PropagationAnimator.d.ts +2 -0
- package/dist/types/components/controller/force-field/keyEventPresentation.d.ts +47 -0
- package/dist/types/components/controller/force-field/propagation-viz/PropagationCometPlayer.d.ts +4 -0
- package/dist/types/components/controller/force-field/propagation-viz/propagationVizLists.d.ts +4 -2
- package/dist/types/components/controller/force-field/propagation-viz/propagationVizModel.d.ts +1 -0
- package/dist/types/components/controller/force-field/shieldViewModel.d.ts +6 -2
- package/dist/types/components/controller/force-field/types.d.ts +2 -1
- package/dist/types/components/controller/labels/ChildScoresDeltaRenderer.d.ts +7 -0
- package/dist/types/components/controller/labels/ComponentTitlePresenter.d.ts +13 -0
- package/dist/types/components/controller/labels/ContextLabelsRenderer.d.ts +16 -0
- package/dist/types/components/controller/labels/WeightPreviewRingRenderer.d.ts +33 -0
- package/dist/types/components/controller/odd/ChildrenOrbitManager.d.ts +76 -25
- package/dist/types/components/controller/odd/OddHighlightEffects.d.ts +2 -0
- package/dist/types/components/controller/odd/OddViewManager.d.ts +7 -3
- package/dist/types/components/controller/odd/childHighlightStyles.d.ts +45 -3
- package/dist/types/components/controller/search/SearchPanelSynchronizer.d.ts +8 -5
- package/dist/types/components/controller/settings/ControllerSettingsApplier.d.ts +4 -4
- package/dist/types/components/controller/state/ControllerSession.d.ts +3 -3
- package/dist/types/components/controller/state/ControllerUiCallbacks.d.ts +10 -0
- package/dist/types/components/controller/state/YinYangControllerState.d.ts +20 -9
- package/dist/types/components/controller/types.d.ts +9 -2
- package/dist/types/components/controller/utils/actionCatalog.d.ts +1 -1
- package/dist/types/components/controller/utils/eventFieldTargets.d.ts +19 -13
- package/dist/types/components/controller/utils/keyEventPropagationContext.d.ts +4 -0
- package/dist/types/components/controller/utils/keyEventTargetBreakdowns.d.ts +4 -0
- package/dist/types/components/controller/utils/svgTransform.d.ts +16 -0
- package/dist/types/components/controls/ObstacleDemoControl.d.ts +3 -0
- package/dist/types/components/controls/VizControlsPanel.d.ts +3 -1
- package/dist/types/components/panel/PanelManager.d.ts +92 -22
- package/dist/types/components/search/GlobalSearchController.d.ts +13 -6
- package/dist/types/components/view/BorderDrawer.d.ts +40 -14
- package/dist/types/components/view/IdleTabGridDrawer.d.ts +15 -0
- package/dist/types/components/view/SpikeDrawer.d.ts +18 -0
- package/dist/types/components/view/ViewInitializer.d.ts +45 -7
- package/dist/types/components/view/YinYangDrawer.d.ts +132 -30
- package/dist/types/components/view/borderColorCycle.d.ts +76 -0
- package/dist/types/components/workspace/facetWeightRuleSetting.d.ts +10 -0
- package/dist/types/components/workspace/workspaceTemplate.d.ts +1 -1
- package/dist/types/config/animationConfig.d.ts +10 -1
- package/dist/types/data/activeDiagram.d.ts +6 -2
- package/dist/types/data/adverse-action-planner.d.ts +3 -3
- package/dist/types/data/amplifier-engine.d.ts +6 -6
- package/dist/types/data/contacts/demoObstacle.d.ts +3 -0
- package/dist/types/data/contacts/index.d.ts +3 -0
- package/dist/types/data/contacts/obstacleSignature.d.ts +56 -0
- package/dist/types/data/key-event-effects.d.ts +30 -0
- package/dist/types/data/key-event-eligibility.d.ts +24 -0
- package/dist/types/data/key-event-propagation.d.ts +13 -0
- package/dist/types/data/key-event-types.d.ts +48 -0
- package/dist/types/data/key-event-validation.d.ts +11 -0
- package/dist/types/data/stability-shield.d.ts +14 -0
- package/dist/types/data/yasuni_adverse_key_events.d.ts +1 -1
- package/dist/types/data/yasuni_cause.d.ts +7 -0
- package/dist/types/data/yasuni_key_events.d.ts +4 -60
- package/dist/types/interfaces/ICauseModel.d.ts +16 -1
- package/dist/types/interfaces/IGraphicsStrategy.d.ts +9 -2
- package/dist/types/interfaces/IPropagationGraph.d.ts +14 -0
- package/dist/types/interfaces/IViewData.d.ts +19 -3
- package/dist/types/interfaces/IYinYangController.d.ts +35 -7
- package/dist/types/interfaces/IYinYangInternalModel.d.ts +7 -0
- package/dist/types/main.d.ts +1 -1
- package/dist/types/utils/actionIconFit.d.ts +23 -0
- package/dist/types/utils/actionPropagation.d.ts +6 -4
- package/dist/types/utils/causeMetrics.d.ts +29 -11
- package/dist/types/utils/chainCardHeight.d.ts +87 -4
- package/dist/types/utils/collapseAnimation.d.ts +39 -0
- package/dist/types/utils/d3/D3GraphicsStrategy.d.ts +28 -5
- package/dist/types/utils/deltaChips.d.ts +0 -4
- package/dist/types/utils/exportControls.d.ts +8 -0
- package/dist/types/utils/facetWeightLabel.d.ts +6 -4
- package/dist/types/utils/facetteImages.d.ts +6 -0
- package/dist/types/utils/glowHalo.d.ts +74 -0
- package/dist/types/utils/hierBadge.d.ts +1 -1
- package/dist/types/utils/keyEventImages.d.ts +1 -1
- package/dist/types/utils/menuIconSize.d.ts +17 -0
- package/dist/types/utils/spreadAngles.d.ts +17 -0
- package/package.json +4 -1
- package/dist/bundle.js.LICENSE.txt +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Sphere } from "../yasuni_cause";
|
|
2
|
+
import { type ContactProfileData } from "./buildContactSphere";
|
|
3
|
+
import { type ContactFacetId } from "./universalFacets";
|
|
4
|
+
export interface ObstacleSignatureData {
|
|
5
|
+
/** Identifiant stable de l'obstacle (id de la Cause produite). */
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
/** Présentation de l'obstacle (titre au repos, panneau de détails). */
|
|
9
|
+
description?: string;
|
|
10
|
+
/** Exigence O_f de chacune des huit facettes, 0–10 (0 : sans effet). */
|
|
11
|
+
weights: Record<ContactFacetId, number>;
|
|
12
|
+
}
|
|
13
|
+
/** Qualité Q_f (0–100) et poids C_f (0–10) d'une facette d'un contact. */
|
|
14
|
+
export interface ContactFacetReading {
|
|
15
|
+
quality: number;
|
|
16
|
+
weight: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Vérifie une signature reçue de l'hôte : les huit facettes et elles
|
|
20
|
+
* seules, chacune d'un poids fini dans [0, 10], au moins une non nulle (une
|
|
21
|
+
* signature entièrement nulle ne sollicite rien : refus explicite plutôt
|
|
22
|
+
* qu'un obstacle sans exigence). L'erreur nomme l'obstacle et la facette.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateObstacleSignature(signature: ObstacleSignatureData): void;
|
|
25
|
+
/**
|
|
26
|
+
* La Sphere d'une signature : les huit facettes universelles (mêmes ids,
|
|
27
|
+
* orientations, notions et images que la sphère d'un contact), chacune
|
|
28
|
+
* réduite à UN satellite qui porte son poids O_f — le poids de la facette
|
|
29
|
+
* (C_f, moyenne de ses satellites) vaut donc exactement O_f.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildObstacleSphere(signature: ObstacleSignatureData): Sphere;
|
|
32
|
+
/**
|
|
33
|
+
* Qualité Q_f et poids C_f de chacune des huit facettes d'un contact, tels
|
|
34
|
+
* que son diagramme les montre : Q_f = (1 − T) × 100, T tension de la
|
|
35
|
+
* facette pondérée par les poids de tous ses satellites (moyenne simple si
|
|
36
|
+
* tous sont nuls) ; C_f = moyenne de ces poids, zéros inclus. Lève une
|
|
37
|
+
* erreur explicite pour un profil invalide (`validateContactProfile`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function contactFacetReadings(profile: ContactProfileData): Record<ContactFacetId, ContactFacetReading>;
|
|
40
|
+
/**
|
|
41
|
+
* Poids d'une facette dans la RENCONTRE d'un contact et d'un obstacle :
|
|
42
|
+
* W_f = O_f × (C_f + O_f) / 20 (règle Notion « Obstacles, poids &
|
|
43
|
+
* résolution par superposition »). Jamais plus que O_f (C_f, O_f ≤ 10) ;
|
|
44
|
+
* nul si l'obstacle n'exige rien de la facette. yvy-backend applique la
|
|
45
|
+
* même règle à la résolution (`contacts/facet-duration.ts`).
|
|
46
|
+
*/
|
|
47
|
+
export declare function obstacleFacetWeight(required: number, contactWeight: number): number;
|
|
48
|
+
/**
|
|
49
|
+
* La modulation d'une signature par un contact, telle que
|
|
50
|
+
* `setFacetModulation` l'attend : par facette, W_f (diamètre) et Q_f (chance
|
|
51
|
+
* affichée, que la modulation ne change pas).
|
|
52
|
+
*/
|
|
53
|
+
export declare function obstacleModulation(weights: Readonly<Record<ContactFacetId, number>>, readings: Readonly<Record<ContactFacetId, ContactFacetReading>>): {
|
|
54
|
+
weights: Record<string, number>;
|
|
55
|
+
scores: Record<string, number>;
|
|
56
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ActionStackItem } from "../components/controller/action-stack/ActionStackState";
|
|
2
|
+
import type { KeyEventDefinition } from "./key-event-types";
|
|
3
|
+
import { type EligibleKeyEvent } from "./key-event-eligibility";
|
|
4
|
+
import { type AmplifierResult } from "./amplifier-engine";
|
|
5
|
+
export type ResolvedKeyEvent = {
|
|
6
|
+
definition: KeyEventDefinition;
|
|
7
|
+
eligibility: EligibleKeyEvent;
|
|
8
|
+
};
|
|
9
|
+
export type KeyEventActionEffects = {
|
|
10
|
+
/** Shared matches consumed by the propagation resolver for rayonnement/portée. */
|
|
11
|
+
eligibleEvents: ResolvedKeyEvent[];
|
|
12
|
+
amplifiers: AmplifierResult[];
|
|
13
|
+
guaranteedDelta: number;
|
|
14
|
+
finalDelta: number;
|
|
15
|
+
finalWeightDelta: number;
|
|
16
|
+
/** Shield granted by STABILITÉ; merge with combo shields at projection. */
|
|
17
|
+
eventShield: number;
|
|
18
|
+
eventShieldProtectedSign: 1 | -1;
|
|
19
|
+
};
|
|
20
|
+
/** One action resolution after combos: GARANTIE, AMPLIFIER, then STABILITÉ.
|
|
21
|
+
* All event signatures read the same eligibility and strength. */
|
|
22
|
+
export declare function resolveKeyEventActionEffects(params: {
|
|
23
|
+
actionItem: ActionStackItem;
|
|
24
|
+
allItems: ActionStackItem[];
|
|
25
|
+
activeItemIds: ReadonlySet<string>;
|
|
26
|
+
keyEventMap: Map<string, KeyEventDefinition>;
|
|
27
|
+
baseDelta: number;
|
|
28
|
+
comboDelta: number;
|
|
29
|
+
baseWeightDelta?: number;
|
|
30
|
+
}): KeyEventActionEffects;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ActionStackItem } from "../components/controller/action-stack/ActionStackState";
|
|
2
|
+
import type { KeyEventDefinition } from "./key-event-types";
|
|
3
|
+
/** EVT-08: an occupied event slot keeps half its nominal effect, including
|
|
4
|
+
* the first action. The shared Beta peak stays unchanged; combos keep their
|
|
5
|
+
* own 15% floor. See documentation/events-balance.md for measured arbitration. */
|
|
6
|
+
export declare const EVENT_MIN_POSITIONAL_STRENGTH = 0.5;
|
|
7
|
+
export declare function eventPositionStrength(slotDistance: number, withinNextN: number): number;
|
|
8
|
+
export interface EligibleKeyEvent {
|
|
9
|
+
eventId: string;
|
|
10
|
+
sourceItemId: string;
|
|
11
|
+
targetItemId: string;
|
|
12
|
+
/** Absolute slot distance, including unoccupied slots. */
|
|
13
|
+
slotDistance: number;
|
|
14
|
+
strength: number;
|
|
15
|
+
}
|
|
16
|
+
/** Shared eligibility for all five signatures. An event remains available on
|
|
17
|
+
* every slot of its window: no charge, consumption, or trigger counter. */
|
|
18
|
+
export declare function evaluateKeyEventEligibility(params: {
|
|
19
|
+
event: KeyEventDefinition;
|
|
20
|
+
sourceItem: ActionStackItem;
|
|
21
|
+
targetItem: ActionStackItem;
|
|
22
|
+
activeItemIds: ReadonlySet<string>;
|
|
23
|
+
actionDelta: number;
|
|
24
|
+
}): EligibleKeyEvent | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type CompiledEdge, type CompiledPropagationGraph, type SatelliteRef } from "../interfaces/IPropagationGraph";
|
|
2
|
+
import type { ResolvedKeyEvent } from "./key-event-effects";
|
|
3
|
+
export type KeyEventPropagationContext = {
|
|
4
|
+
actionId: string;
|
|
5
|
+
source: SatelliteRef;
|
|
6
|
+
/** Actual source satellite's action catalogue, not the event's target list. */
|
|
7
|
+
applicableActionIds: readonly string[];
|
|
8
|
+
eligibleEvents: readonly ResolvedKeyEvent[];
|
|
9
|
+
};
|
|
10
|
+
/** Resolution-local first hops. No writes to graph, catalogue or event data.
|
|
11
|
+
* RAYONNEMENT adds weighted boosts before one clamp. PORTÉE contributions
|
|
12
|
+
* remain separate (including equal endpoints), in stable event/bridge order. */
|
|
13
|
+
export declare function resolveKeyEventPropagationEdges(graph: CompiledPropagationGraph, source: SatelliteRef, context: KeyEventPropagationContext | undefined, exists: (ref: SatelliteRef) => boolean): readonly CompiledEdge[];
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SatelliteRef } from "../interfaces/IPropagationGraph";
|
|
2
|
+
export type AmplifierSignature = {
|
|
3
|
+
type: "amplifier";
|
|
4
|
+
deltaBonus: number;
|
|
5
|
+
weightBonus?: number;
|
|
6
|
+
};
|
|
7
|
+
export type RayonnementSignature = {
|
|
8
|
+
type: "rayonnement";
|
|
9
|
+
propagationBoost: number;
|
|
10
|
+
};
|
|
11
|
+
export type StabiliteSignature = {
|
|
12
|
+
type: "stabilite";
|
|
13
|
+
shield: number;
|
|
14
|
+
};
|
|
15
|
+
export type GarantieSignature = {
|
|
16
|
+
type: "garantie";
|
|
17
|
+
minBaseDeltaRatio: number;
|
|
18
|
+
};
|
|
19
|
+
export type PorteeSignature = {
|
|
20
|
+
type: "portee";
|
|
21
|
+
bridges: EventPropagationBridge[];
|
|
22
|
+
};
|
|
23
|
+
/** Temporary causal edge; resolved only for an eligible action (EVT-04). */
|
|
24
|
+
export interface EventPropagationBridge {
|
|
25
|
+
from: SatelliteRef;
|
|
26
|
+
to: SatelliteRef;
|
|
27
|
+
w: number;
|
|
28
|
+
rationale: string;
|
|
29
|
+
triggerActionIds?: string[];
|
|
30
|
+
}
|
|
31
|
+
export type KeyEventSignature = AmplifierSignature | RayonnementSignature | StabiliteSignature | GarantieSignature | PorteeSignature;
|
|
32
|
+
export interface KeyEventDefinition {
|
|
33
|
+
id: string;
|
|
34
|
+
alignment: "ally" | "adverse";
|
|
35
|
+
name: string;
|
|
36
|
+
shortDescription: string;
|
|
37
|
+
description: string;
|
|
38
|
+
origin: {
|
|
39
|
+
kind: "facet";
|
|
40
|
+
componentId: string;
|
|
41
|
+
};
|
|
42
|
+
/** Attribution of an adverse event, separate from its facet origin. */
|
|
43
|
+
originLabel?: string;
|
|
44
|
+
targetedActionIds: string[];
|
|
45
|
+
withinNextN: number;
|
|
46
|
+
signature: KeyEventSignature;
|
|
47
|
+
}
|
|
48
|
+
export declare function isAdverseKeyEvent(event: KeyEventDefinition): boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { KeyEventDefinition } from "./key-event-types";
|
|
2
|
+
import type { ActionDefinition } from "./yasuni_actions";
|
|
3
|
+
import type { Composante } from "./yasuni_cause";
|
|
4
|
+
export interface KeyEventDiagnostic {
|
|
5
|
+
eventId: string;
|
|
6
|
+
path: string;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
/** Read-only catalogue validation. No edge is ever added to the cause graph. */
|
|
10
|
+
export declare function validateKeyEvents(events: readonly KeyEventDefinition[], actions: readonly ActionDefinition[], cause: readonly Composante[]): KeyEventDiagnostic[];
|
|
11
|
+
export declare function formatKeyEventDiagnostics(diagnostics: readonly KeyEventDiagnostic[]): string;
|
|
@@ -19,3 +19,17 @@ export declare function applyStabilityShield(aggregatedDelta: number, shield: nu
|
|
|
19
19
|
* bouclier plus faible ne dégrade jamais celui déjà en place.
|
|
20
20
|
*/
|
|
21
21
|
export declare function mergeStabilityShield(current: number | undefined, incoming: number): number;
|
|
22
|
+
/** Persisted scalar shields are always allied, irrespective of the last action. */
|
|
23
|
+
export type ProtectedSign = 1 | -1;
|
|
24
|
+
export type DirectionalShield = {
|
|
25
|
+
magnitude: number;
|
|
26
|
+
protectedSign: ProtectedSign;
|
|
27
|
+
};
|
|
28
|
+
export type StabilityProtection = number | DirectionalShield[];
|
|
29
|
+
export declare function normalizeStabilityProtection(value: StabilityProtection | undefined): DirectionalShield[];
|
|
30
|
+
export declare function mergeDirectionalShield(current: StabilityProtection | undefined, incoming: DirectionalShield): DirectionalShield[];
|
|
31
|
+
/** Filter each signed aggregate once. No consumption and no cross-direction cancellation. */
|
|
32
|
+
export declare function filterDirectionalContributions(positive: number, negative: number, protection: StabilityProtection): {
|
|
33
|
+
positive: number;
|
|
34
|
+
negative: number;
|
|
35
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { KeyEventDefinition } from "./
|
|
1
|
+
import type { KeyEventDefinition } from "./key-event-types";
|
|
2
2
|
export declare const yasuniAdverseKeyEvents: KeyEventDefinition[];
|
|
@@ -26,6 +26,13 @@ export interface Composante {
|
|
|
26
26
|
id: string;
|
|
27
27
|
name: string;
|
|
28
28
|
orientation?: "yin" | "yang";
|
|
29
|
+
/** Notion parente commune à des facettes d'orientations opposées (ex. la
|
|
30
|
+
* Gouvernance, déclinée en une facette yin et une facette yang). Les
|
|
31
|
+
* facettes qui la partagent sont regroupées dans la vue Idle « tab ». */
|
|
32
|
+
notion?: {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
};
|
|
29
36
|
/** Vue d'ensemble des enjeux et des dynamiques propres à cette composante. */
|
|
30
37
|
description?: string;
|
|
31
38
|
odds: ODD[];
|
|
@@ -1,62 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* pondération positionnelle avec plancher 0,15 ; aucun effet si la cible est
|
|
5
|
-
* absente ou hors fenêtre. Voir positionalBonus (amplifier-engine.ts).
|
|
6
|
-
* Appliqué dans la direction du delta effectif de l'action (après combos),
|
|
7
|
-
* jamais sur une action au delta nul. Additif et non multiplicatif : un
|
|
8
|
-
* ratio réduit par la position devenait fractionnaire et se faisait
|
|
9
|
-
* absorber par l'arrondi du poids ; un montant en points permet aussi à
|
|
10
|
-
* un futur malus (bonus négatif) de s'annuler exactement avec lui.
|
|
11
|
-
*/
|
|
12
|
-
scoreBonus: number;
|
|
13
|
-
/**
|
|
14
|
-
* Bonus ADDITIF de poids (en points entiers), au pic de la fenêtre.
|
|
15
|
-
* Renforce le weightDelta de l'action ciblée dans sa propre direction
|
|
16
|
-
* (alléger ou alourdir) — sans effet sur une action sans weightDelta.
|
|
17
|
-
* L'arrondi à l'entier se fait par événement à l'évaluation, jamais sur
|
|
18
|
-
* un total fractionnaire : ce que la carte affiche est ce qui s'applique.
|
|
19
|
-
*/
|
|
20
|
-
weightBonus: number;
|
|
21
|
-
}
|
|
22
|
-
export interface KeyEventDefinition {
|
|
23
|
-
id: string;
|
|
24
|
-
name: string;
|
|
25
|
-
shortDescription: string;
|
|
26
|
-
description: string;
|
|
27
|
-
/** Facette (Composante.id) depuis laquelle l'événement se déclenche. */
|
|
28
|
-
originComposanteId: string;
|
|
29
|
-
/**
|
|
30
|
-
* Actions amplifiées (par id), même logique que ComboCondition.requires.
|
|
31
|
-
* Cohérence thématique obligatoire avec la facette d'origine.
|
|
32
|
-
*/
|
|
33
|
-
targetedActionIds: string[];
|
|
34
|
-
/**
|
|
35
|
-
* Fenêtre temporelle AVANT laquelle l'amplification s'arrête — pendant
|
|
36
|
-
* inverse de ComboCondition.withinLastN : une action ciblée jouée plus de
|
|
37
|
-
* withinNextN slots après l'événement n'est plus amplifiée. Oblige le
|
|
38
|
-
* joueur à réserver des emplacements libres après l'événement plutôt que
|
|
39
|
-
* de le placer systématiquement tout en bas de la pile.
|
|
40
|
-
*/
|
|
41
|
-
withinNextN?: number;
|
|
42
|
-
effect: KeyEventEffect;
|
|
43
|
-
/** Acteur à l'origine d'un Événement adverse (pouvoir politique,
|
|
44
|
-
* industrie…), affiché en note de provenance sur son bloc — les
|
|
45
|
-
* Événements Clés positifs n'en ont pas (ils émanent de la cause). */
|
|
46
|
-
origin?: string;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Un Événement adverse est une KeyEventDefinition ordinaire dont l'effet est
|
|
50
|
-
* un MALUS (bonus négatifs) — même critère de signe qu'isAdverseAction, pas
|
|
51
|
-
* un drapeau. Catalogue séparé (yasuni_adverse_key_events.ts), jamais listé
|
|
52
|
-
* dans yasuniKeyEvents : le menu radial du cercle central et l'arbre
|
|
53
|
-
* RECHERCHE, qui itèrent ce tableau, l'ignorent donc structurellement — seul
|
|
54
|
-
* yasuniKeyEventMap (moteur, rendu de la pile) fusionne les deux catalogues.
|
|
55
|
-
*/
|
|
56
|
-
export declare function isAdverseKeyEvent(keyEvent: KeyEventDefinition): boolean;
|
|
1
|
+
import type { KeyEventDefinition } from "./key-event-types";
|
|
2
|
+
export type * from "./key-event-types";
|
|
3
|
+
export { isAdverseKeyEvent } from "./key-event-types";
|
|
57
4
|
export declare const yasuniKeyEvents: KeyEventDefinition[];
|
|
58
|
-
/** Lookup O(1) par id, même convention que les autres catalogues — fusionne
|
|
59
|
-
* Événements Clés ET Événements adverses : le moteur et le rendu de la pile
|
|
60
|
-
* résolvent les deux ici, tandis que les surfaces utilisateur (menu radial,
|
|
61
|
-
* arbre RECHERCHE) itèrent yasuniKeyEvents, sans les adverses. */
|
|
62
5
|
export declare const yasuniKeyEventMap: Map<string, KeyEventDefinition>;
|
|
6
|
+
export declare const yasuniKeyEventDiagnostics: import("./key-event-validation").KeyEventDiagnostic[];
|
|
@@ -16,16 +16,25 @@ export interface CauseOddCutting {
|
|
|
16
16
|
score: number;
|
|
17
17
|
weight: number;
|
|
18
18
|
}
|
|
19
|
+
/** Notion parente d'une facette : des facettes d'orientations opposées qui
|
|
20
|
+
* la partagent en sont les déclinaisons yin et yang (regroupées dans la vue
|
|
21
|
+
* Idle « tab »). */
|
|
22
|
+
export interface FacetNotion {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
}
|
|
19
26
|
export interface CauseComponent {
|
|
20
27
|
id: string;
|
|
21
28
|
name?: string;
|
|
22
29
|
shortName?: string;
|
|
23
30
|
description?: string;
|
|
24
31
|
orientation: YinYangOrientation;
|
|
32
|
+
/** Notion parente (absente : la facette est seule de sa notion). */
|
|
33
|
+
notion?: FacetNotion;
|
|
25
34
|
odds: CauseOdd[];
|
|
26
35
|
/** Poids de la facette (taille relative de son arc) : C_f, moyenne des
|
|
27
36
|
* poids de TOUS ses satellites, zéros inclus, de 0 à 10 — même règle pour
|
|
28
|
-
* une cause et pour un contact (`
|
|
37
|
+
* une cause et pour un contact (`facetWeight`, POC-05A4). */
|
|
29
38
|
perimeterWeight: number;
|
|
30
39
|
}
|
|
31
40
|
export interface Cause {
|
|
@@ -35,5 +44,11 @@ export interface Cause {
|
|
|
35
44
|
* remplace la sphère active de la page (Yasuní) dans le titre au repos et
|
|
36
45
|
* le panneau de détails : l'hôte qui monte un contact voit son nom. */
|
|
37
46
|
description?: string;
|
|
47
|
+
/** Cause SANS SCORE : ses facettes ne portent que des POIDS — la
|
|
48
|
+
* signature d'un obstacle (`obstacleSignatureToCause`). Ses scores ne
|
|
49
|
+
* sont qu'une géométrie neutre, jamais affichée : satellites-facettes
|
|
50
|
+
* sans score ni lobes, pas de sous-état Idle « arcs », pas de Facette
|
|
51
|
+
* ouverte au clic (voir `docs/integration-yvy-frontend.md`). */
|
|
52
|
+
scoreless?: boolean;
|
|
38
53
|
components: CauseComponent[];
|
|
39
54
|
}
|
|
@@ -18,10 +18,17 @@ export interface IGraphicsStrategy {
|
|
|
18
18
|
color: string;
|
|
19
19
|
opacity: number;
|
|
20
20
|
}[], gradientUnits: string): IGraphicElement;
|
|
21
|
+
/** Retire du <defs> les éléments (masques, dégradés…) portant ces ids. */
|
|
22
|
+
removeDefsByIds(ids: Iterable<string>): void;
|
|
21
23
|
createYinOrYangArcMask(id: string, cx: number, cy: number, innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, type: "yin" | "yang", blendOpacity?: number): string;
|
|
24
|
+
/** Met à jour en place un masque de createYinOrYangArcMask (frame de
|
|
25
|
+
* transition) ; false s'il manque, l'appelant refait alors un rendu complet. */
|
|
26
|
+
updateYinOrYangArcMask(id: string, cx: number, cy: number, innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, type: "yin" | "yang", blendOpacity?: number): boolean;
|
|
22
27
|
createBorderMask(id: string, cx: number, cy: number, innerRadius: number, outerRadius: number): void;
|
|
23
|
-
changeBorderColors(gradient: any, duration: number, colors: string[]): void;
|
|
24
28
|
drawLineWithGradient(parent: IGraphicElement, x1: number, y1: number, x2: number, y2: number, gradientId: string): void;
|
|
25
29
|
createUnderlyingCircleGradient(id: string, color: string, spread?: number, intensity?: number): string;
|
|
26
|
-
|
|
30
|
+
/** Repeint en place un dégradé de createUnderlyingCircleGradient ; false
|
|
31
|
+
* s'il manque. */
|
|
32
|
+
updateUnderlyingCircleGradientColor(id: string, color: string, spread?: number, intensity?: number): boolean;
|
|
33
|
+
createUnderlyingCircleWithArcMask(maskId: string | undefined, gradientId: string, parent: IGraphicElement, cx: number, cy: number, radius: number): IGraphicElement;
|
|
27
34
|
}
|
|
@@ -22,6 +22,20 @@ export type PropagationScope = "local" | "inter-odd" | "inter-facette";
|
|
|
22
22
|
export type CompiledEdge = PropagationTarget & {
|
|
23
23
|
from: SatelliteRef;
|
|
24
24
|
scope: PropagationScope;
|
|
25
|
+
eventPropagation?: EventPropagationMetadata;
|
|
26
|
+
};
|
|
27
|
+
/** Explanatory provenance, preserved on applied hops and Bilan details. */
|
|
28
|
+
export type EventPropagationMetadata = {
|
|
29
|
+
kind: "rayonnement" | "portee";
|
|
30
|
+
originalWeight: number;
|
|
31
|
+
sources: readonly {
|
|
32
|
+
eventId: string;
|
|
33
|
+
eventName: string;
|
|
34
|
+
sourceItemId: string;
|
|
35
|
+
strength: number;
|
|
36
|
+
parameter: number;
|
|
37
|
+
bridgeIndex?: number;
|
|
38
|
+
}[];
|
|
25
39
|
};
|
|
26
40
|
export type PropagationGraphRule = "V1" | "V2" | "V3" | "V4" | "V5" | "V6" | "V7";
|
|
27
41
|
export type PropagationGraphDiagnostic = {
|
|
@@ -11,16 +11,32 @@ export interface IViewData {
|
|
|
11
11
|
* `docs/integration-yvy-frontend.md`). Hérité par les satellites, qui
|
|
12
12
|
* sont eux-mêmes des contrôleurs complets. Défaut : false. */
|
|
13
13
|
presentation?: boolean;
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
14
|
+
/** Taille de ce satellite relative à la taille de base (1 = poids de
|
|
15
|
+
* référence, voir ChildrenBuilder.weightToSizeRatio ; resserrement de son
|
|
16
|
+
* anneau compris), déjà utilisée pour dériver minEdge.
|
|
16
17
|
* Reporté ici tel quel pour que le satellite compense sa propre taille de
|
|
17
18
|
* police (voir YinYangDrawer.renderChildStateLabel) sans redériver le
|
|
18
19
|
* calcul. Absent pour les patterns qui ne sont pas des satellites. */
|
|
19
20
|
weightRatio?: number;
|
|
20
21
|
/** Poids brut (échelle absolue [WEIGHT_MIN, WEIGHT_MAX], voir causeMetrics.ts),
|
|
21
|
-
* distinct de weightRatio
|
|
22
|
+
* distinct de weightRatio (une taille) : sert à savoir
|
|
22
23
|
* combien de graduations remplir dans la jauge de poids du satellite
|
|
23
24
|
* (voir YinYangDrawer.renderChildWeightGauge). Absent pour les patterns
|
|
24
25
|
* qui ne sont pas des satellites. */
|
|
25
26
|
weight?: number;
|
|
27
|
+
/** Libellé de poids déjà formaté, affiché tel quel dans la pastille du
|
|
28
|
+
* satellite au lieu de l'entier arrondi de `weight`. Posé pour les
|
|
29
|
+
* satellites-facettes : c'est celui de l'arc de leur facette
|
|
30
|
+
* (facetWeightLabel — « 5,5 » en règle `mean`, « 61 » en règle `sum`). */
|
|
31
|
+
weightLabel?: string;
|
|
32
|
+
/** Satellite SANS SCORE (signature d'obstacle, voir
|
|
33
|
+
* `obstacleSignatureToCause`) : il ne porte qu'un poids. Ni score ni
|
|
34
|
+
* lobes ne sont rendus — un disque neutre et la pastille de poids
|
|
35
|
+
* (`children/signatureLook.ts`). Absent : satellite ordinaire. */
|
|
36
|
+
scoreless?: boolean;
|
|
37
|
+
/** Angle imposé (radians, repère SVG : 0 = 3 h, sens horaire) auquel ce
|
|
38
|
+
* satellite se place autour de son parent, au lieu de la répartition
|
|
39
|
+
* uniforme par index. Posé pour les satellites-facettes du sous-état
|
|
40
|
+
* Idle « facettes », alignés sur le milieu de l'arc de leur facette. */
|
|
41
|
+
angleOverride?: number;
|
|
26
42
|
}
|
|
@@ -10,6 +10,12 @@ export interface IYinYangController {
|
|
|
10
10
|
factory: IYinYangAppFactory;
|
|
11
11
|
animator: IAnimator;
|
|
12
12
|
createYinYangChildren(): void;
|
|
13
|
+
/** Fin de vie : arrête toutes les boucles d'animation du contrôleur et de
|
|
14
|
+
* ses satellites (champ de force, orbite, rotation, ghost, étincelles,
|
|
15
|
+
* comètes…), déconnecte ses observers et libère ses defs. Le contrôleur
|
|
16
|
+
* n'est plus utilisable ensuite. Idempotent. Le DOM du diagramme est
|
|
17
|
+
* vidé par l'appelant (voir mountYinYang). */
|
|
18
|
+
destroy(): void;
|
|
13
19
|
clearForceFieldDetails(): void;
|
|
14
20
|
applyChildrenFitScale(): void;
|
|
15
21
|
setChildrenEnabled(isEnabled: boolean): void;
|
|
@@ -122,9 +128,9 @@ export interface IYinYangController {
|
|
|
122
128
|
* Fine (px) adjustment of the Key Event radial menu buttons' distance,
|
|
123
129
|
* layered on top of the auto-computed base distance.
|
|
124
130
|
*/
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
131
|
+
setKeyEventMenuDistanceOffset(offset: number): void;
|
|
132
|
+
setKeyEventMenuItemScale(scale: number): void;
|
|
133
|
+
setKeyEventIconFontScale(scale: number): void;
|
|
128
134
|
/**
|
|
129
135
|
* Sets maximum number of lines for child labels (1-3).
|
|
130
136
|
*/
|
|
@@ -136,6 +142,28 @@ export interface IYinYangController {
|
|
|
136
142
|
setLabelShortMaxChars(chars: number): void;
|
|
137
143
|
isChildrenEnabled(): boolean;
|
|
138
144
|
isActionActive(): boolean;
|
|
145
|
+
/** Sous-état d'Idle : arcs pondérés ou un satellite yin/yang par facette. */
|
|
146
|
+
getIdleView(): "arcs" | "facettes" | "tab";
|
|
147
|
+
setIdleView(view: "arcs" | "facettes" | "tab"): Promise<void>;
|
|
148
|
+
/** Crochets de l'hôte autour du sous-état Idle « tab » (voir
|
|
149
|
+
* YinYangController.setIdleTabHooks). */
|
|
150
|
+
setIdleTabHooks(hooks: {
|
|
151
|
+
beforeEnter?: () => Promise<void> | void;
|
|
152
|
+
afterLeave?: () => Promise<void> | void;
|
|
153
|
+
} | null): void;
|
|
154
|
+
setOnIdleViewChange(callback: ((view: "arcs" | "facettes" | "tab") => void) | null): void;
|
|
155
|
+
toggleIdleView(): Promise<void>;
|
|
156
|
+
isIdleFacettesActive(): boolean;
|
|
157
|
+
/** Superpose (ou retire, `null`) à une signature d'obstacle la lecture
|
|
158
|
+
* d'un contact : diamètres sur W_f, chances Q_f, fantôme sur O_f
|
|
159
|
+
* (OBS-UI-01, voir `docs/integration-yvy-frontend.md`). */
|
|
160
|
+
setFacetModulation(modulation: {
|
|
161
|
+
weights: Record<string, number>;
|
|
162
|
+
scores: Record<string, number>;
|
|
163
|
+
} | null, options?: {
|
|
164
|
+
durationMs?: number;
|
|
165
|
+
ghostWaves?: boolean;
|
|
166
|
+
}): Promise<void>;
|
|
139
167
|
/**
|
|
140
168
|
* Sets font scale for action stack item labels.
|
|
141
169
|
*/
|
|
@@ -269,10 +297,10 @@ export interface IYinYangController {
|
|
|
269
297
|
/** Called by YinYangDrawer when the user clicks an ODD arc: toggles that
|
|
270
298
|
* ODD's legend chip in the panel, mirroring a direct chip click. */
|
|
271
299
|
onDiagramOddArcClicked(oddId: string): void;
|
|
272
|
-
/** Called by YinYangDrawer when the user clicks the
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
|
|
300
|
+
/** Called by YinYangDrawer when the user clicks the core of the facette's
|
|
301
|
+
* dominant lobe (yin or yang, per Composante.orientation) while a Facette
|
|
302
|
+
* is open — closes it and shows the cause in Idle « facettes ». */
|
|
303
|
+
onFacetteCoreClicked(): void;
|
|
276
304
|
/** Wires a callback fired when the user clicks a composante border, cutting, or action in the diagram. */
|
|
277
305
|
setOnDiagramNavChange(cb: (event: {
|
|
278
306
|
type: "composante";
|
|
@@ -26,6 +26,11 @@ export interface YinYangComponentNode {
|
|
|
26
26
|
label?: string;
|
|
27
27
|
shortLabel?: string;
|
|
28
28
|
orientation: YinYangOrientation;
|
|
29
|
+
/** Notion parente — voir `FacetNotion` (ICauseModel). */
|
|
30
|
+
notion?: {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
};
|
|
29
34
|
odds: YinYangOddNode[];
|
|
30
35
|
}
|
|
31
36
|
export interface YinYangInternalModel {
|
|
@@ -37,4 +42,6 @@ export interface YinYangInternalModel {
|
|
|
37
42
|
name: string;
|
|
38
43
|
description: string;
|
|
39
44
|
};
|
|
45
|
+
/** Modèle SANS SCORE (signature d'obstacle) — voir `Cause.scoreless`. */
|
|
46
|
+
scoreless?: boolean;
|
|
40
47
|
}
|
package/dist/types/main.d.ts
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Facteur de taille maximal des icônes d'action pour qu'elles tiennent dans
|
|
3
|
+
* leur bulle (groupe debug "Grappe actions" › "Taille icônes").
|
|
4
|
+
*
|
|
5
|
+
* Les SVG partagent un viewBox 64×64 mais leur dessin n'occupe pas tous la
|
|
6
|
+
* même surface : certains (satellite, barrières flottantes…) remplissent les
|
|
7
|
+
* coins et débordaient du cercle de la bulle. On rastérise chaque icône une
|
|
8
|
+
* fois pour mesurer son rayon réel (trait compris), puis on en déduit le
|
|
9
|
+
* facteur au-delà duquel le dessin franchirait l'anneau.
|
|
10
|
+
*/
|
|
11
|
+
/** Taille de l'icône rapportée au rayon de la bulle, pour l'action active —
|
|
12
|
+
* la plus grande des deux variantes rendues par ChildActionMenuController. */
|
|
13
|
+
export declare const ACTIVE_ACTION_ICON_SIZE_RATIO = 1.85;
|
|
14
|
+
export declare function scaleFittingExtent(extent: number): number;
|
|
15
|
+
/** Plus grand facteur qui fait tenir toutes les icônes mesurées jusqu'ici
|
|
16
|
+
* (Infinity tant qu'aucune ne l'a été). */
|
|
17
|
+
export declare function getActionIconFitScale(): number;
|
|
18
|
+
export declare function onActionIconFitScaleChange(listener: (fitScale: number) => void): () => void;
|
|
19
|
+
/** Lance la mesure des icônes pas encore vues ; les abonnés sont prévenus
|
|
20
|
+
* chaque fois que le facteur admissible baisse. La promesse se résout quand
|
|
21
|
+
* toutes les icônes demandées sont mesurées, pour retoucher celles déjà
|
|
22
|
+
* affichées. */
|
|
23
|
+
export declare function measureActionIcons(urls: readonly string[]): Promise<void>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type KeyEventPropagationContext } from "../data/key-event-propagation";
|
|
2
|
+
import { type EventPropagationMetadata, type CompiledPropagationGraph, type PropagationScope, type SatelliteKey } from "../interfaces/IPropagationGraph";
|
|
2
3
|
import { YinYangComponentNode } from "../interfaces/IYinYangInternalModel";
|
|
3
4
|
export type Action = {
|
|
4
5
|
id: string;
|
|
@@ -14,6 +15,7 @@ export type Action = {
|
|
|
14
15
|
* ODD, autre facette — sont produites par le même parcours.
|
|
15
16
|
*/
|
|
16
17
|
export type PropagatedActionEdge = {
|
|
18
|
+
eventPropagation?: EventPropagationMetadata;
|
|
17
19
|
scope: PropagationScope;
|
|
18
20
|
fromComponentId: string;
|
|
19
21
|
toComponentId: string;
|
|
@@ -112,7 +114,7 @@ export type ActionPropagationDetails = ProjectedActionStateDetails & {
|
|
|
112
114
|
* `allComponents` fournit l'état de base des autres facettes ; sans lui, les
|
|
113
115
|
* sauts qui sortent de `component` sont ignorés.
|
|
114
116
|
*/
|
|
115
|
-
export declare function computeActionPropagationDetails(component: YinYangComponentNode, graph: CompiledPropagationGraph, sourceOddId: string, sourceCuttingId: number | undefined, delta: number, allComponents?: readonly YinYangComponentNode[]): ActionPropagationDetails;
|
|
117
|
+
export declare function computeActionPropagationDetails(component: YinYangComponentNode, graph: CompiledPropagationGraph, sourceOddId: string, sourceCuttingId: number | undefined, delta: number, allComponents?: readonly YinYangComponentNode[], eventPropagation?: KeyEventPropagationContext): ActionPropagationDetails;
|
|
116
118
|
/**
|
|
117
119
|
* Arrivée dans `component` d'une arête venue d'une autre composante, déjà
|
|
118
120
|
* calculée par la résolution de l'action (voir computeActionPropagationDetails).
|
|
@@ -141,6 +143,6 @@ export type IncomingLocalContinuation = {
|
|
|
141
143
|
* autre ODD de la même composante est poursuivie comme une arête locale.
|
|
142
144
|
*/
|
|
143
145
|
export declare function computeIncomingLocalContinuation(component: YinYangComponentNode, entry: IncomingPropagationEntry, graph: CompiledPropagationGraph): IncomingLocalContinuation;
|
|
144
|
-
export declare function propagateForceFieldActionInComponent(component: YinYangComponentNode, graph: CompiledPropagationGraph, sourceOddId: string, sourceCuttingId: number | undefined, delta: number, allComponents?: readonly YinYangComponentNode[]): PropagatedActionEdge[];
|
|
145
|
-
export declare function projectActionStateDetailsInComponent(component: YinYangComponentNode, graph: CompiledPropagationGraph, sourceOddId: string, sourceCuttingId: number | undefined, delta: number, allComponents?: readonly YinYangComponentNode[]): ProjectedActionStateDetails;
|
|
146
|
+
export declare function propagateForceFieldActionInComponent(component: YinYangComponentNode, graph: CompiledPropagationGraph, sourceOddId: string, sourceCuttingId: number | undefined, delta: number, allComponents?: readonly YinYangComponentNode[], eventPropagation?: KeyEventPropagationContext): PropagatedActionEdge[];
|
|
147
|
+
export declare function projectActionStateDetailsInComponent(component: YinYangComponentNode, graph: CompiledPropagationGraph, sourceOddId: string, sourceCuttingId: number | undefined, delta: number, allComponents?: readonly YinYangComponentNode[], eventPropagation?: KeyEventPropagationContext): ProjectedActionStateDetails;
|
|
146
148
|
export {};
|
|
@@ -14,31 +14,49 @@ export declare function clampScore(value: number): number;
|
|
|
14
14
|
*/
|
|
15
15
|
export declare function tensionFromCuttings(cuttingScores: number[], cuttingWeights?: number[]): number;
|
|
16
16
|
export declare const oddTensionFromCuttings: typeof tensionFromCuttings;
|
|
17
|
+
/**
|
|
18
|
+
* RÈGLE DES POIDS DE FACETTE, commutable pour comparaison (debug de la page
|
|
19
|
+
* standalone, clé localStorage `spheres.facetWeightRule`) :
|
|
20
|
+
* - `mean` (défaut, POC-05A4) : C_f = moyenne des poids de tous les
|
|
21
|
+
* satellites ; Q_f = moyenne pondérée sur tous les satellites, repli sur
|
|
22
|
+
* leur moyenne simple ;
|
|
23
|
+
* - `sum` (ancienne règle) : poids = somme des poids ; Q_f = tension de
|
|
24
|
+
* chaque catégorie pondérée par la somme de ses poids, repli par
|
|
25
|
+
* catégorie sur son nombre de satellites.
|
|
26
|
+
* La lib npm reste en `mean` : seule la page standalone la change.
|
|
27
|
+
*/
|
|
28
|
+
export type FacetWeightRule = "mean" | "sum";
|
|
29
|
+
export declare function getFacetWeightRule(): FacetWeightRule;
|
|
30
|
+
export declare function setFacetWeightRule(rule: FacetWeightRule): void;
|
|
17
31
|
/** Satellites d'une catégorie (ODD) d'une facette : tensions et poids. */
|
|
18
32
|
interface FacetOddCuttings {
|
|
19
33
|
cuttingScores: readonly number[];
|
|
20
34
|
cuttingWeights: readonly number[];
|
|
21
35
|
}
|
|
22
36
|
/**
|
|
23
|
-
* Tension d'une FACETTE (cause ou contact
|
|
24
|
-
* sur TOUS ses satellites, catégories confondues —
|
|
25
|
-
* poids, ou moyenne simple de la facette si tous
|
|
26
|
-
*
|
|
27
|
-
*
|
|
37
|
+
* Tension d'une FACETTE (cause ou contact). Règle `mean` (POC-05A4) :
|
|
38
|
+
* `tensionFromCuttings` sur TOUS ses satellites, catégories confondues —
|
|
39
|
+
* moyenne pondérée par les poids, ou moyenne simple de la facette si tous
|
|
40
|
+
* ses poids sont nuls. Règle `sum` : voir `FacetWeightRule`.
|
|
41
|
+
* Q_f = (1 − T) × 100. `cuttingTensions` remplace les tensions de la
|
|
42
|
+
* catégorie d'indice donné (projection d'une action) ; une catégorie dont
|
|
28
43
|
* les poids ne sont pas alignés sur les scores compte ses satellites à 1.
|
|
29
44
|
* Facette sans satellite : 0,5.
|
|
30
45
|
*/
|
|
31
46
|
export declare function facetTensionFromOdds(odds: readonly FacetOddCuttings[], cuttingTensions?: (oddIndex: number) => readonly number[] | undefined): number;
|
|
32
47
|
/**
|
|
33
|
-
* POIDS
|
|
34
|
-
*
|
|
48
|
+
* POIDS d'une facette — ou d'une catégorie, pour sa pastille. Règle `mean`
|
|
49
|
+
* (défaut, POC-05A4) : C_f, moyenne arithmétique des poids (bornés à 0) de
|
|
35
50
|
* TOUS ses satellites, zéros inclus, de 0 à 10, indépendante de leur nombre.
|
|
36
|
-
* Fixe la taille des arcs de facette et la valeur
|
|
37
|
-
* d'un contact : reproduite à
|
|
38
|
-
* (`contactFacetWeights`), cas communs dans
|
|
51
|
+
* Règle `sum` : leur somme. Fixe la taille des arcs de facette et la valeur
|
|
52
|
+
* des pastilles. Facettes d'un contact, règle `mean` : reproduite à
|
|
53
|
+
* l'identique par yvy-backend (`contactFacetWeights`), cas communs dans
|
|
39
54
|
* `src/data/contacts/contact-facets.reference.json`.
|
|
40
55
|
*/
|
|
41
|
-
export declare function
|
|
56
|
+
export declare function facetWeight(weights: readonly number[]): number;
|
|
57
|
+
/** Plafond de `facetWeight` pour `count` satellites : 10 (`mean`) ou
|
|
58
|
+
* `count × 10` (`sum`). */
|
|
59
|
+
export declare function facetWeightMax(count: number): number;
|
|
42
60
|
export declare function stateFromTension(tension: number): number;
|
|
43
61
|
/** Bornes du poids d'un satellite (importance dans sa facette). Un satellite
|
|
44
62
|
* vaut 1 par défaut ; les actions le font varier par pas entiers, mais ne
|