semiotic 3.8.4 → 3.8.6

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 (222) hide show
  1. package/CLAUDE.md +9 -5
  2. package/README.md +52 -46
  3. package/ai/behaviorContracts.cjs +2 -2
  4. package/ai/componentMetadata.cjs +2 -2
  5. package/ai/dist/mcp-server.js +6 -2
  6. package/ai/examples.md +211 -2
  7. package/ai/schema.json +1388 -14
  8. package/ai/surface-manifest.json +8 -4
  9. package/ai/system-prompt.md +1 -1
  10. package/dist/chunk-chartContainerDataAudit-FEOD5GTQ.module.min.js +2 -0
  11. package/dist/chunk-chunk-2CHN2TA3.module.min.js +1 -0
  12. package/dist/chunk-chunk-2JGJ5GUG.module.min.js +1 -0
  13. package/dist/chunk-chunk-3NGIKFD6.module.min.js +1 -0
  14. package/dist/chunk-chunk-3SHB24AG.module.min.js +1 -0
  15. package/dist/chunk-chunk-4MMOOYTX.module.min.js +2 -0
  16. package/dist/chunk-chunk-75OTQSXS.module.min.js +1 -0
  17. package/dist/chunk-chunk-A5GRQUOF.module.min.js +1 -0
  18. package/dist/chunk-chunk-AAF5LZAU.module.min.js +2 -0
  19. package/dist/{chunk-chunk-LQBSXO7K.module.min.js → chunk-chunk-ARZGA4LJ.module.min.js} +1 -1
  20. package/dist/chunk-chunk-CAFLML4L.module.min.js +2 -0
  21. package/dist/chunk-chunk-CO5KQMGH.module.min.js +1 -0
  22. package/dist/chunk-chunk-FHBN7OEB.module.min.js +2 -0
  23. package/dist/{chunk-chunk-KQ546MKE.module.min.js → chunk-chunk-GFTVACTO.module.min.js} +1 -1
  24. package/dist/chunk-chunk-IP2UE74X.module.min.js +1 -0
  25. package/dist/chunk-chunk-ITDWLZXV.module.min.js +2 -0
  26. package/dist/chunk-chunk-LPSPATPC.module.min.js +1 -0
  27. package/dist/chunk-chunk-OM6NWS4H.module.min.js +2 -0
  28. package/dist/chunk-chunk-PX5YQGDP.module.min.js +2 -0
  29. package/dist/chunk-chunk-Q2BS46W2.module.min.js +2 -0
  30. package/dist/{chunk-chunk-FBGHXL72.module.min.js → chunk-chunk-RA7JCG7D.module.min.js} +1 -1
  31. package/dist/chunk-chunk-RNUHEXZA.module.min.js +2 -0
  32. package/dist/chunk-chunk-ROZWKEUG.module.min.js +1 -0
  33. package/dist/chunk-chunk-SMVD3EQJ.module.min.js +2 -0
  34. package/dist/chunk-chunk-T2FKJD4O.module.min.js +2 -0
  35. package/dist/chunk-chunk-UDREYOLV.module.min.js +1 -0
  36. package/dist/chunk-chunk-VOWE3SAP.module.min.js +2 -0
  37. package/dist/chunk-chunk-VQPNBUSW.module.min.js +2 -0
  38. package/dist/{chunk-chunk-7RYBCTK5.module.min.js → chunk-chunk-WAWCIHFJ.module.min.js} +1 -1
  39. package/dist/{chunk-chunk-F7WFPD4O.module.min.js → chunk-chunk-WYARAXHR.module.min.js} +1 -1
  40. package/dist/{chunk-chunk-JDXT6ORT.module.min.js → chunk-chunk-XP3OHHFX.module.min.js} +1 -1
  41. package/dist/chunk-chunk-XV3KGYTR.module.min.js +2 -0
  42. package/dist/chunk-chunk-YC2IVEPX.module.min.js +1 -0
  43. package/dist/chunk-chunk-ZXIXAPRE.module.min.js +2 -0
  44. package/dist/components/ChartContainer.d.ts +10 -0
  45. package/dist/components/ai/chartCapabilities.d.ts +3 -1
  46. package/dist/components/ai/chartCapabilityTypes.d.ts +14 -0
  47. package/dist/components/chartContainerDataAudit.d.ts +10 -0
  48. package/dist/components/charts/custom/XYCustomChart.d.ts +3 -0
  49. package/dist/components/charts/geo/DistanceCartogram.d.ts +30 -4
  50. package/dist/components/charts/index.d.ts +4 -0
  51. package/dist/components/charts/network/ForceDirectedGraph.d.ts +36 -1
  52. package/dist/components/charts/ordinal/BarChart.d.ts +7 -14
  53. package/dist/components/charts/ordinal/GaugeChart.d.ts +3 -0
  54. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +3 -0
  55. package/dist/components/charts/ordinal/StackedBarChart.d.ts +3 -0
  56. package/dist/components/charts/ordinal/SwimlaneChart.d.ts +4 -14
  57. package/dist/components/charts/physics/CrucibleChart.capability.d.ts +8 -0
  58. package/dist/components/charts/physics/CrucibleChart.d.ts +63 -0
  59. package/dist/components/charts/physics/crucibleBodyRenderers.d.ts +27 -0
  60. package/dist/components/charts/physics/crucibleChartProps.d.ts +90 -0
  61. package/dist/components/charts/physics/crucibleChrome.d.ts +47 -0
  62. package/dist/components/charts/physics/crucibleController.d.ts +59 -0
  63. package/dist/components/charts/physics/crucibleEffects.d.ts +30 -0
  64. package/dist/components/charts/physics/cruciblePhysics.d.ts +54 -0
  65. package/dist/components/charts/physics/crucibleProgram.d.ts +38 -0
  66. package/dist/components/charts/physics/crucibleTypes.d.ts +415 -0
  67. package/dist/components/charts/shared/chartSpecCore.d.ts +10 -4
  68. package/dist/components/charts/shared/crucibleWireSchema.d.ts +5 -0
  69. package/dist/components/charts/shared/diagnoseTypes.d.ts +10 -0
  70. package/dist/components/charts/shared/gaugeGradient.d.ts +4 -8
  71. package/dist/components/charts/shared/gradient.d.ts +35 -0
  72. package/dist/components/charts/shared/hatchFill.d.ts +3 -10
  73. package/dist/components/charts/shared/hooks.d.ts +2 -50
  74. package/dist/components/charts/shared/knownChartComponents.d.ts +1 -1
  75. package/dist/components/charts/shared/streamPropsHelpers.d.ts +1 -2
  76. package/dist/components/charts/shared/useChartLegend.d.ts +58 -0
  77. package/dist/components/charts/shared/useChartSetup.d.ts +5 -0
  78. package/dist/components/charts/shared/useCustomChartSetup.d.ts +6 -1
  79. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +1 -0
  80. package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
  81. package/dist/components/charts/xy/AreaChart.d.ts +25 -42
  82. package/dist/components/charts/xy/BumpChart.capability.d.ts +11 -0
  83. package/dist/components/charts/xy/BumpChart.d.ts +161 -0
  84. package/dist/components/charts/xy/DifferenceChart.d.ts +3 -10
  85. package/dist/components/charts/xy/Heatmap.d.ts +3 -0
  86. package/dist/components/charts/xy/LineChart.d.ts +6 -8
  87. package/dist/components/data/auditData.d.ts +51 -0
  88. package/dist/components/data/dataAuditPresentation.d.ts +18 -0
  89. package/dist/components/data/dataAuditSources.d.ts +9 -0
  90. package/dist/components/data/numericContracts.d.ts +59 -0
  91. package/dist/components/data/numericFieldProfiler.d.ts +23 -0
  92. package/dist/components/geometry/bumpRibbonGeometry.d.ts +36 -0
  93. package/dist/components/legendLayout.d.ts +19 -1
  94. package/dist/components/recipes/netEnsembleLayout.d.ts +167 -0
  95. package/dist/components/recipes/netEnsembleOverlays.d.ts +20 -0
  96. package/dist/components/recipes/wordTrails.d.ts +156 -0
  97. package/dist/components/recipes/wordTrailsProgressiveReveal.d.ts +42 -0
  98. package/dist/components/semiotic-ai-core.d.ts +3 -0
  99. package/dist/components/semiotic-ai-data-audit.d.ts +4 -0
  100. package/dist/components/semiotic-ai.d.ts +9 -6
  101. package/dist/components/semiotic-geo.d.ts +1 -0
  102. package/dist/components/semiotic-network.d.ts +1 -0
  103. package/dist/components/semiotic-ordinal.d.ts +2 -0
  104. package/dist/components/semiotic-physics.d.ts +2 -0
  105. package/dist/components/semiotic-realtime-core.d.ts +1 -0
  106. package/dist/components/semiotic-recipes-core.d.ts +4 -0
  107. package/dist/components/semiotic-server-edge.d.ts +1 -1
  108. package/dist/components/semiotic-server.d.ts +1 -1
  109. package/dist/components/semiotic-utils-core.d.ts +3 -0
  110. package/dist/components/semiotic-xy.d.ts +4 -0
  111. package/dist/components/semiotic.d.ts +5 -5
  112. package/dist/components/server/renderEvidence.d.ts +27 -0
  113. package/dist/components/server/serverChartConfigs.d.ts +2 -0
  114. package/dist/components/server/serverChartConfigsPhysics.d.ts +9 -0
  115. package/dist/components/server/serverChartConfigsXY.d.ts +1 -0
  116. package/dist/components/server/staticAnnotations.d.ts +12 -0
  117. package/dist/components/server/staticLegend.d.ts +4 -2
  118. package/dist/components/server/staticSVGChrome.d.ts +4 -4
  119. package/dist/components/stream/GeoPipelineStore.d.ts +1 -0
  120. package/dist/components/stream/GeoSVGOverlay.d.ts +11 -10
  121. package/dist/components/stream/NetworkSVGOverlay.d.ts +2 -6
  122. package/dist/components/stream/OrdinalSVGOverlay.d.ts +2 -6
  123. package/dist/components/stream/SVGOverlay.d.ts +2 -6
  124. package/dist/components/stream/StalenessBadge.d.ts +2 -6
  125. package/dist/components/stream/geoCartogram.d.ts +7 -0
  126. package/dist/components/stream/geoTypes.d.ts +20 -8
  127. package/dist/components/stream/legendRenderer.d.ts +2 -6
  128. package/dist/components/stream/networkFrameHandleTypes.d.ts +4 -0
  129. package/dist/components/stream/ordinalTypes.d.ts +7 -31
  130. package/dist/components/stream/physics/PhysicsKernel.d.ts +1 -0
  131. package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +2 -6
  132. package/dist/components/stream/physics/PhysicsSettledSVG.d.ts +8 -0
  133. package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +2 -6
  134. package/dist/components/stream/pipelineConfig.d.ts +7 -15
  135. package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +9 -69
  136. package/dist/components/stream/renderers/cornerRadii.d.ts +2 -9
  137. package/dist/components/stream/renderers/thresholdLineSegments.d.ts +12 -0
  138. package/dist/components/stream/sceneToSVGShared.d.ts +3 -5
  139. package/dist/components/stream/types.d.ts +32 -56
  140. package/dist/components/stream/xySceneBuilders/areaGradient.d.ts +4 -20
  141. package/dist/components/stream/xySceneBuilders/types.d.ts +6 -6
  142. package/dist/components/types/legendTypes.d.ts +15 -6
  143. package/dist/components/useChartContainerDataAudit.d.ts +7 -0
  144. package/dist/geo.min.js +1 -1
  145. package/dist/geo.module.min.js +1 -1
  146. package/dist/network.min.js +1 -1
  147. package/dist/network.module.min.js +1 -1
  148. package/dist/ordinal.min.js +1 -1
  149. package/dist/ordinal.module.min.js +1 -1
  150. package/dist/physics.min.js +1 -1
  151. package/dist/physics.module.min.js +1 -1
  152. package/dist/physicsWorker.js +1 -1
  153. package/dist/realtime.min.js +1 -1
  154. package/dist/realtime.module.min.js +1 -1
  155. package/dist/semiotic-ai-core.d.ts +3 -0
  156. package/dist/semiotic-ai-core.min.js +1 -1
  157. package/dist/semiotic-ai-core.module.min.js +1 -1
  158. package/dist/semiotic-ai.d.ts +9 -6
  159. package/dist/semiotic-ai.min.js +1 -1
  160. package/dist/semiotic-ai.module.min.js +1 -1
  161. package/dist/semiotic-experimental.min.js +1 -1
  162. package/dist/semiotic-experimental.module.min.js +1 -1
  163. package/dist/semiotic-geo.d.ts +1 -0
  164. package/dist/semiotic-network.d.ts +1 -0
  165. package/dist/semiotic-ordinal.d.ts +2 -0
  166. package/dist/semiotic-physics.d.ts +2 -0
  167. package/dist/semiotic-realtime-core.d.ts +1 -0
  168. package/dist/semiotic-realtime-core.min.js +1 -1
  169. package/dist/semiotic-realtime-core.module.min.js +1 -1
  170. package/dist/semiotic-recipes-core.d.ts +4 -0
  171. package/dist/semiotic-recipes-core.min.js +1 -1
  172. package/dist/semiotic-recipes-core.module.min.js +1 -1
  173. package/dist/semiotic-recipes.min.js +1 -1
  174. package/dist/semiotic-recipes.module.min.js +1 -1
  175. package/dist/semiotic-server-edge.d.ts +1 -1
  176. package/dist/semiotic-server-edge.min.js +1 -1
  177. package/dist/semiotic-server-edge.module.min.js +1 -1
  178. package/dist/semiotic-server-node.min.js +1 -1
  179. package/dist/semiotic-server-node.module.min.js +1 -1
  180. package/dist/semiotic-server.d.ts +1 -1
  181. package/dist/semiotic-utils-core.d.ts +3 -0
  182. package/dist/semiotic-utils-core.min.js +1 -1
  183. package/dist/semiotic-utils-core.module.min.js +1 -1
  184. package/dist/semiotic-utils.min.js +1 -1
  185. package/dist/semiotic-utils.module.min.js +1 -1
  186. package/dist/semiotic-xy.d.ts +4 -0
  187. package/dist/semiotic.d.ts +5 -5
  188. package/dist/semiotic.min.js +1 -1
  189. package/dist/semiotic.module.min.js +1 -1
  190. package/dist/server.min.js +1 -1
  191. package/dist/server.module.min.js +1 -1
  192. package/dist/xy.min.js +1 -1
  193. package/dist/xy.module.min.js +1 -1
  194. package/package.json +2 -2
  195. package/dist/chunk-chunk-3ILKBVVQ.module.min.js +0 -1
  196. package/dist/chunk-chunk-6TPGFL7M.module.min.js +0 -2
  197. package/dist/chunk-chunk-7KZJUTKP.module.min.js +0 -2
  198. package/dist/chunk-chunk-ANYDWOZF.module.min.js +0 -1
  199. package/dist/chunk-chunk-AQPQN2HH.module.min.js +0 -2
  200. package/dist/chunk-chunk-ASKSE5F5.module.min.js +0 -1
  201. package/dist/chunk-chunk-AVBI6GDT.module.min.js +0 -1
  202. package/dist/chunk-chunk-B3DRZPBK.module.min.js +0 -2
  203. package/dist/chunk-chunk-BFHUYEOS.module.min.js +0 -2
  204. package/dist/chunk-chunk-C57LR3YG.module.min.js +0 -1
  205. package/dist/chunk-chunk-F5V4UIE6.module.min.js +0 -2
  206. package/dist/chunk-chunk-FP44FHFO.module.min.js +0 -2
  207. package/dist/chunk-chunk-HKXUAEPJ.module.min.js +0 -2
  208. package/dist/chunk-chunk-ICEXPNDC.module.min.js +0 -2
  209. package/dist/chunk-chunk-JMVEIZXP.module.min.js +0 -1
  210. package/dist/chunk-chunk-KHCOJMGK.module.min.js +0 -1
  211. package/dist/chunk-chunk-LRIFN2HK.module.min.js +0 -1
  212. package/dist/chunk-chunk-MFHF4J2Z.module.min.js +0 -1
  213. package/dist/chunk-chunk-N6VKKF3A.module.min.js +0 -2
  214. package/dist/chunk-chunk-NEVE562N.module.min.js +0 -1
  215. package/dist/chunk-chunk-NKZ75IM5.module.min.js +0 -2
  216. package/dist/chunk-chunk-PLIDPQNG.module.min.js +0 -2
  217. package/dist/chunk-chunk-QGZGZI4X.module.min.js +0 -1
  218. package/dist/chunk-chunk-RP7WTID5.module.min.js +0 -1
  219. package/dist/chunk-chunk-S7KLNUO6.module.min.js +0 -1
  220. package/dist/chunk-chunk-SR4ZXOWR.module.min.js +0 -2
  221. package/dist/chunk-statisticalOverlays-QGDLRUHX.module.min.js +0 -1
  222. package/dist/chunk-statisticalOverlays-T77OKLDY.module.min.js +0 -1
@@ -0,0 +1,59 @@
1
+ /**
2
+ * React-facing replay and motion helpers for CrucibleChart.
3
+ *
4
+ * The reducer tape remains authoritative. These helpers only advance that
5
+ * tape, reconcile its bounded body set, and steer marks toward ledger-derived
6
+ * targets. No collision or body position can create a semantic transition.
7
+ */
8
+ import type { Datum } from "../shared/datumTypes";
9
+ import type { PhysicsBodyState } from "../../stream/physics/PhysicsKernel";
10
+ import type { PhysicsPipelineControlSurface, PhysicsQueuedSpawn } from "../../stream/physics/PhysicsPipelineStore";
11
+ import type { StreamPhysicsRegionVector } from "../../stream/physics/StreamPhysicsFrame";
12
+ import { type CrucibleSpawnOptions } from "./cruciblePhysics";
13
+ import type { CrucibleCompiledPlan, CrucibleDiagnostic, CrucibleMaterialization, CrucibleObservation, CrucibleRunState } from "./crucibleTypes";
14
+ import type { CrucibleSnapshotAt } from "./crucibleChartProps";
15
+ export interface CrucibleRuntime<TDatum extends Datum = Datum> {
16
+ state: CrucibleRunState<TDatum>;
17
+ diagnostics: CrucibleDiagnostic[];
18
+ materializations: CrucibleMaterialization[];
19
+ observations: CrucibleObservation[];
20
+ }
21
+ /** Resolve a deterministic instant, defaulting snapshots to the terminal ledger. */
22
+ export declare function crucibleSnapshotTime<TDatum extends Datum>(plan: CrucibleCompiledPlan<TDatum>, snapshotAt?: CrucibleSnapshotAt): number;
23
+ /** Replay from origin. Used for reset, phase stepping, snapshots, and live ticks. */
24
+ export declare function replayCrucibleRuntime<TDatum extends Datum>(plan: CrucibleCompiledPlan<TDatum>, throughTime: number, playing?: boolean): CrucibleRuntime<TDatum>;
25
+ /**
26
+ * Return only observations/materializations that became newly visible between
27
+ * two instants. Replaying from origin stays deterministic without re-emitting
28
+ * earlier domain observations.
29
+ */
30
+ export declare function advanceCrucibleRuntime<TDatum extends Datum>(plan: CrucibleCompiledPlan<TDatum>, previous: CrucibleRunState<TDatum>, throughTime: number, playing?: boolean): CrucibleRuntime<TDatum>;
31
+ /** Inclusive end of the current authored phase, or the tape end. */
32
+ export declare function nextCruciblePhaseBoundary<TDatum extends Datum>(plan: CrucibleCompiledPlan<TDatum>, elapsed: number): number;
33
+ /** Canonical state marks for snapshots and newly materialized product cores. */
34
+ export declare function crucibleStateSpawns<TDatum extends Datum>(plan: CrucibleCompiledPlan<TDatum>, state: CrucibleRunState<TDatum>, options?: CrucibleSpawnOptions): PhysicsQueuedSpawn[];
35
+ /** Add only missing marks. Source component bodies are never deleted. */
36
+ export declare function reconcileCrucibleBodies(controls: PhysicsPipelineControlSurface, desired: readonly PhysicsQueuedSpawn[]): string[];
37
+ export interface CrucibleBodyTarget {
38
+ x: number;
39
+ y: number;
40
+ }
41
+ /** Map the pure state-spawn layout into semantic-id targets. */
42
+ export declare function crucibleStateTargets<TDatum extends Datum>(plan: CrucibleCompiledPlan<TDatum>, state: CrucibleRunState<TDatum>, options?: CrucibleSpawnOptions): Map<string, CrucibleBodyTarget>;
43
+ /**
44
+ * Ledger-derived target with phase motion layered on top. Motion may explain
45
+ * agitation/separation, but cannot alter the target state.
46
+ */
47
+ export declare function targetForCrucibleBody<TDatum extends Datum>(options: {
48
+ body: PhysicsBodyState;
49
+ plan: CrucibleCompiledPlan<TDatum>;
50
+ state: CrucibleRunState<TDatum>;
51
+ targets: ReadonlyMap<string, CrucibleBodyTarget>;
52
+ }): CrucibleBodyTarget | null;
53
+ /** Damped attraction to a semantic target; deliberately no semantic side effects. */
54
+ export declare function computeCrucibleBodyForce<TDatum extends Datum>(options: {
55
+ body: PhysicsBodyState;
56
+ plan: CrucibleCompiledPlan<TDatum>;
57
+ state: CrucibleRunState<TDatum>;
58
+ targets: ReadonlyMap<string, CrucibleBodyTarget>;
59
+ }): StreamPhysicsRegionVector | null;
@@ -0,0 +1,30 @@
1
+ /** Transactional, pure reducers and summaries for a bounded Crucible tape. */
2
+ import type { Datum } from "../shared/datumTypes";
3
+ import type { CrucibleApplyContext, CrucibleApplyResult, CrucibleConservationResult, CrucibleConservationSpec, CrucibleDiagnostic, CrucibleEvent, CrucibleHistoryItem, CrucibleProjectionRow, CrucibleProjectionSpec, CrucibleRunState, CrucibleSelector } from "./crucibleTypes";
4
+ /** Clone mutable run structures while intentionally retaining source datum references. */
5
+ export declare function cloneCrucibleState<TDatum extends Datum>(state: CrucibleRunState<TDatum>): CrucibleRunState<TDatum>;
6
+ export interface CrucibleSelectorResult {
7
+ ids: string[];
8
+ diagnostics: CrucibleDiagnostic[];
9
+ }
10
+ /** Resolve a source selector with deterministic intersection semantics. */
11
+ export declare function resolveCrucibleSelector<TDatum extends Datum>(state: CrucibleRunState<TDatum>, selector: CrucibleSelector, path?: string): CrucibleSelectorResult;
12
+ /**
13
+ * Apply one event atomically. Any error rolls back all state,
14
+ * materializations, and observations produced by that event.
15
+ */
16
+ export declare function applyCrucibleEvent<TDatum extends Datum>(state: CrucibleRunState<TDatum>, event: CrucibleEvent, context: CrucibleApplyContext): CrucibleApplyResult<TDatum>;
17
+ /** Settled semantic rows; consumed source bodies are represented by products only. */
18
+ export declare function buildCrucibleProjection<TDatum extends Datum>(state: CrucibleRunState<TDatum>, spec?: CrucibleProjectionSpec): CrucibleProjectionRow[];
19
+ /** Normative projection-name alias used by server and AI chart builders. */
20
+ export declare const crucibleProjectionRows: typeof buildCrucibleProjection;
21
+ /** Products + still-independent components + declared loss must equal input. */
22
+ export declare function evaluateCrucibleConservation<TDatum extends Datum>(state: CrucibleRunState<TDatum>, spec?: CrucibleConservationSpec): CrucibleConservationResult;
23
+ export declare function buildCrucibleEvidence<TDatum extends Datum>(state: CrucibleRunState<TDatum>, options?: {
24
+ projection?: CrucibleProjectionSpec;
25
+ conservation?: CrucibleConservationSpec;
26
+ }): {
27
+ history: CrucibleHistoryItem[];
28
+ projection: CrucibleProjectionRow[];
29
+ conservation: CrucibleConservationResult;
30
+ };
@@ -0,0 +1,54 @@
1
+ /** Deterministic compilation, replay, geometry, and bodies for CrucibleChart. */
2
+ import type { Datum } from "../shared/datumTypes";
3
+ import type { PhysicsPipelineConfig, PhysicsQueuedSpawn } from "../../stream/physics/PhysicsPipelineStore";
4
+ import type { PhysicsColliderSpec } from "../../stream/physics/PhysicsKernel";
5
+ import type { CrucibleCompileOptions, CrucibleCompiledPlan, CrucibleDiagnostic, CrucibleLayout, CrucibleOutlet, CrucibleReplayResult, CrucibleRunState } from "./crucibleTypes";
6
+ export declare const DEFAULT_CRUCIBLE_WIDTH = 900;
7
+ export declare const DEFAULT_CRUCIBLE_HEIGHT = 520;
8
+ export declare const DEFAULT_CRUCIBLE_SIZE: [number, number];
9
+ export declare const DEFAULT_CRUCIBLE_OUTLETS: readonly CrucibleOutlet[];
10
+ export interface CrucibleInitialStateResult<TDatum extends Datum = Datum> {
11
+ state: CrucibleRunState<TDatum>;
12
+ diagnostics: CrucibleDiagnostic[];
13
+ }
14
+ /** Evaluate accessors once and create the immutable replay origin. */
15
+ export declare function createInitialCrucibleState<TDatum extends Datum>(options: CrucibleCompileOptions<TDatum>): CrucibleInitialStateResult<TDatum>;
16
+ /** Responsive authored regions shared by the live chart and snapshot renderer. */
17
+ export declare function buildCrucibleLayout(size?: [number, number], outlets?: readonly CrucibleOutlet[]): CrucibleLayout;
18
+ /** Chamber walls with outlet apertures, plus non-blocking outlet sensors. */
19
+ export declare function crucibleBoundaryColliders(layout: CrucibleLayout): PhysicsColliderSpec[];
20
+ export declare function buildCruciblePhysicsConfig(seed: number | string | undefined, colliders: readonly PhysicsColliderSpec[]): PhysicsPipelineConfig;
21
+ export declare function crucibleComponentBodyId(componentId: string): string;
22
+ export declare function crucibleProductBodyId(productId: string): string;
23
+ export declare function crucibleBondId(productId: string, sourceId: string): string;
24
+ export interface CrucibleSpawnOptions {
25
+ seed?: number | string;
26
+ bodyRadius?: number;
27
+ radiusRange?: [number, number];
28
+ }
29
+ /** Stable component bodies at the chamber charge point. */
30
+ export declare function buildCrucibleInitialSpawns<TDatum extends Datum>(state: CrucibleRunState<TDatum>, layout: CrucibleLayout, options?: CrucibleSpawnOptions): PhysicsQueuedSpawn[];
31
+ /**
32
+ * Stable terminal body set. Source body ids persist; product cores are added.
33
+ * Split sources target the centroid of their products.
34
+ */
35
+ export declare function buildCrucibleStateSpawns<TDatum extends Datum>(state: CrucibleRunState<TDatum>, layout: CrucibleLayout, options?: CrucibleSpawnOptions): PhysicsQueuedSpawn[];
36
+ /** Terminal-name alias retained for callers explicitly rendering the outcome. */
37
+ export declare const buildCrucibleTerminalSpawns: typeof buildCrucibleStateSpawns;
38
+ export declare function crucibleSemanticKey(value: unknown): string;
39
+ export interface CrucibleResolvedTime {
40
+ elapsed: number;
41
+ phaseId: string;
42
+ phaseIndex: number;
43
+ phaseElapsed: number;
44
+ complete: boolean;
45
+ }
46
+ export declare function resolveCrucibleTime<TDatum extends Datum>(plan: Pick<CrucibleCompiledPlan<TDatum>, "phases" | "duration">, elapsed: number): CrucibleResolvedTime;
47
+ export declare function resolveCrucibleSnapshotAt<TDatum extends Datum>(plan: Pick<CrucibleCompiledPlan<TDatum>, "phases" | "duration">, snapshotAt: number | {
48
+ phaseId: string;
49
+ progress?: number;
50
+ } | undefined): number;
51
+ /** Replay from the immutable origin through an inclusive authored time. */
52
+ export declare function replayCruciblePlan<TDatum extends Datum>(plan: Pick<CrucibleCompiledPlan<TDatum>, "initialState" | "events" | "products" | "outlets" | "phases" | "duration">, throughTime?: number): CrucibleReplayResult<TDatum>;
53
+ /** Compile and validate the full controlled tape, including a terminal dry run. */
54
+ export declare function compileCruciblePlan<TDatum extends Datum>(options: CrucibleCompileOptions<TDatum>): CrucibleCompiledPlan<TDatum>;
@@ -0,0 +1,38 @@
1
+ /** Pure authoring helpers for explicit Crucible event tapes. */
2
+ import type { CrucibleEvent, CrucibleLoss } from "./crucibleTypes";
3
+ /** Event metadata that remains wholly authored by the caller. */
4
+ export type CrucibleEventStep = Pick<CrucibleEvent, "at" | "label" | "description" | "summary"> & {
5
+ /** Optional stable event id; a deterministic id is generated when omitted. */
6
+ id?: string;
7
+ };
8
+ /** Explicit sources admitted while a product is forming. */
9
+ export interface CrucibleProductSourceStep extends CrucibleEventStep {
10
+ sourceIds: readonly string[];
11
+ basisRelationIds?: readonly string[];
12
+ loss?: CrucibleLoss;
13
+ }
14
+ /** Explicit completion and routing of an already-formed product. */
15
+ export interface CrucibleProductCompletionStep extends CrucibleEventStep {
16
+ outletId?: string;
17
+ reason?: string;
18
+ }
19
+ export interface BuildCrucibleProductEventsOptions {
20
+ productId: string;
21
+ /** Prefix for generated event ids. Defaults to `productId`. */
22
+ idPrefix?: string;
23
+ /** Opens a forming product with a `combine` effect. */
24
+ form: CrucibleProductSourceStep;
25
+ /** Ordered later admissions, each represented by one `contribute` effect. */
26
+ contributions?: readonly CrucibleProductSourceStep[];
27
+ /** Required explicit completion; the helper never guesses when to pour. */
28
+ complete: CrucibleProductCompletionStep;
29
+ }
30
+ /**
31
+ * Build the canonical form -> contribute* -> complete lifecycle for one
32
+ * declared product.
33
+ *
34
+ * This is authoring sugar only. The caller supplies every source id,
35
+ * relation id, event position, product id, and outlet. The helper performs no
36
+ * grouping, inference, thresholding, or collision-derived classification.
37
+ */
38
+ export declare function buildCrucibleProductEvents(options: BuildCrucibleProductEventsOptions): CrucibleEvent[];
@@ -0,0 +1,415 @@
1
+ /**
2
+ * Pure domain contracts for CrucibleChart.
3
+ *
4
+ * A Crucible run is a bounded, controlled event tape. Source components are
5
+ * assigned to at most one product, while products may remain `forming` across
6
+ * several events before being completed and poured to an outlet.
7
+ */
8
+ import type { Datum } from "../shared/datumTypes";
9
+ import type { ChartAccessor } from "../shared/types";
10
+ import type { PhysicsPipelineConfig, PhysicsQueuedSpawn } from "../../stream/physics/PhysicsPipelineStore";
11
+ import type { PhysicsColliderSpec } from "../../stream/physics/PhysicsKernel";
12
+ export type CrucibleComponentStatus = "queued" | "active" | "transformed" | "consumed" | "retained" | "ejected" | "failed" | "recovered";
13
+ export type CrucibleProductStatus = "forming" | "complete";
14
+ export type CrucibleMotion = "charge" | "mix" | "hold" | "press" | "bind" | "separate" | "pour" | "quench";
15
+ export type CrucibleMetricMap = Record<string, number>;
16
+ export interface CruciblePhase {
17
+ id: string;
18
+ duration: number;
19
+ label?: string;
20
+ description?: string;
21
+ intensity?: number;
22
+ motion?: CrucibleMotion;
23
+ color?: string;
24
+ metrics?: Record<string, string | number>;
25
+ }
26
+ export interface CrucibleOutlet {
27
+ id: string;
28
+ label?: string;
29
+ description?: string;
30
+ side?: "left" | "right" | "bottom";
31
+ color?: string;
32
+ order?: number;
33
+ }
34
+ /**
35
+ * Source-component selector. Supplied fields intersect; ids are resolved in
36
+ * lexical order before `count` is applied so fresh arrays replay identically.
37
+ */
38
+ export interface CrucibleSelector {
39
+ ids?: readonly string[];
40
+ categories?: readonly string[];
41
+ statuses?: readonly CrucibleComponentStatus[];
42
+ outletIds?: readonly string[];
43
+ count?: number;
44
+ }
45
+ /** A declared mold. State is created only when an effect forms the product. */
46
+ export interface CrucibleProductDefinition {
47
+ id: string;
48
+ label?: string;
49
+ description?: string;
50
+ category?: string;
51
+ /** Optional declared final amount, applied when the product completes. */
52
+ amount?: number;
53
+ color?: string;
54
+ metrics?: CrucibleMetricMap;
55
+ outletId?: string;
56
+ order?: number;
57
+ }
58
+ export interface CrucibleLoss {
59
+ amount?: number;
60
+ metrics?: CrucibleMetricMap;
61
+ label?: string;
62
+ }
63
+ export interface CrucibleRelationDefinition {
64
+ id: string;
65
+ sourceIds: readonly string[];
66
+ label?: string;
67
+ category?: string;
68
+ strength?: number;
69
+ metrics?: CrucibleMetricMap;
70
+ }
71
+ export type CrucibleRelationResolution = "combined" | "rejected" | "expired";
72
+ export interface CrucibleRelationState extends CrucibleRelationDefinition {
73
+ status: "active" | "resolved";
74
+ createdByEventId: string;
75
+ createdAt: number;
76
+ resolution?: CrucibleRelationResolution;
77
+ resolvedByEventId?: string;
78
+ resolvedAt?: number;
79
+ reason?: string;
80
+ }
81
+ export interface CrucibleSetStateEffect {
82
+ type: "set-state";
83
+ select: CrucibleSelector;
84
+ state: Exclude<CrucibleComponentStatus, "consumed">;
85
+ outletId?: string;
86
+ reason?: string;
87
+ metricsDelta?: CrucibleMetricMap;
88
+ }
89
+ export interface CrucibleSetRelationEffect {
90
+ type: "set-relation";
91
+ relation: CrucibleRelationDefinition;
92
+ }
93
+ export interface CrucibleResolveRelationEffect {
94
+ type: "resolve-relation";
95
+ relationIds: readonly string[];
96
+ resolution: CrucibleRelationResolution;
97
+ reason?: string;
98
+ }
99
+ export interface CrucibleCombineEffect {
100
+ type: "combine";
101
+ sourceIds: readonly string[];
102
+ productId: string;
103
+ basisRelationIds?: readonly string[];
104
+ loss?: CrucibleLoss;
105
+ /** Defaults to true. Set false to admit later `contribute` effects. */
106
+ complete?: boolean;
107
+ }
108
+ export interface CrucibleContributeEffect {
109
+ type: "contribute";
110
+ sourceIds: readonly string[];
111
+ productId: string;
112
+ basisRelationIds?: readonly string[];
113
+ loss?: CrucibleLoss;
114
+ }
115
+ export interface CrucibleCompleteProductEffect {
116
+ type: "complete-product";
117
+ productId: string;
118
+ outletId?: string;
119
+ reason?: string;
120
+ }
121
+ export interface CrucibleProductAllocation {
122
+ productId: string;
123
+ amount?: number;
124
+ metrics?: CrucibleMetricMap;
125
+ }
126
+ export interface CrucibleSplitEffect {
127
+ type: "split";
128
+ sourceId: string;
129
+ products: readonly CrucibleProductAllocation[];
130
+ loss?: CrucibleLoss;
131
+ }
132
+ export interface CrucibleEjectEffect {
133
+ type: "eject";
134
+ select: CrucibleSelector;
135
+ outletId: string;
136
+ state?: "ejected" | "failed" | "retained" | "recovered";
137
+ reason?: string;
138
+ }
139
+ export type CrucibleMetricTarget = "run" | {
140
+ components: CrucibleSelector;
141
+ } | {
142
+ productIds: readonly string[];
143
+ };
144
+ export interface CrucibleSetMetricEffect {
145
+ type: "set-metric";
146
+ target: CrucibleMetricTarget;
147
+ metricsDelta: CrucibleMetricMap;
148
+ }
149
+ export interface CrucibleSetOutcomeEffect {
150
+ type: "set-outcome";
151
+ outcome: string;
152
+ summary?: string;
153
+ }
154
+ export type CrucibleEffect = CrucibleSetStateEffect | CrucibleSetRelationEffect | CrucibleResolveRelationEffect | CrucibleCombineEffect | CrucibleContributeEffect | CrucibleCompleteProductEffect | CrucibleSplitEffect | CrucibleEjectEffect | CrucibleSetMetricEffect | CrucibleSetOutcomeEffect;
155
+ export type CrucibleEventAt = {
156
+ time: number;
157
+ phaseId?: never;
158
+ progress?: never;
159
+ } | {
160
+ time?: never;
161
+ phaseId: string;
162
+ progress?: number;
163
+ };
164
+ export interface CrucibleEvent {
165
+ id: string;
166
+ at: CrucibleEventAt;
167
+ effects: readonly CrucibleEffect[];
168
+ label?: string;
169
+ description?: string;
170
+ summary?: string;
171
+ }
172
+ export interface CrucibleHistoryItem {
173
+ eventId: string;
174
+ effectType: CrucibleEffect["type"];
175
+ phaseId: string;
176
+ authoredAt: number;
177
+ appliedAt: number;
178
+ label?: string;
179
+ summary?: string;
180
+ sourceIds?: string[];
181
+ productIds?: string[];
182
+ relationIds?: string[];
183
+ outletIds?: string[];
184
+ }
185
+ export interface CrucibleComponentState<TDatum extends Datum = Datum> {
186
+ id: string;
187
+ label: string;
188
+ category: string;
189
+ datum: TDatum;
190
+ status: CrucibleComponentStatus;
191
+ initialAmount: number;
192
+ amount: number;
193
+ initialMetrics: CrucibleMetricMap;
194
+ metrics: CrucibleMetricMap;
195
+ productIds: string[];
196
+ outletId?: string;
197
+ reason?: string;
198
+ history: CrucibleHistoryItem[];
199
+ }
200
+ export interface CrucibleProductState {
201
+ id: string;
202
+ label: string;
203
+ description?: string;
204
+ category: string;
205
+ color?: string;
206
+ order?: number;
207
+ declaredAmount?: number;
208
+ amount: number;
209
+ metrics: CrucibleMetricMap;
210
+ status: CrucibleProductStatus;
211
+ sourceIds: string[];
212
+ outletId?: string;
213
+ createdByEventId: string;
214
+ createdAt: number;
215
+ completedByEventId?: string;
216
+ completedAt?: number;
217
+ reason?: string;
218
+ history: CrucibleHistoryItem[];
219
+ }
220
+ export interface CrucibleRunState<TDatum extends Datum = Datum> {
221
+ elapsed: number;
222
+ phaseElapsed: number;
223
+ phaseId: string;
224
+ phaseIndex: number;
225
+ playing: boolean;
226
+ complete: boolean;
227
+ outcome?: string;
228
+ summary?: string;
229
+ eventsApplied: string[];
230
+ components: Record<string, CrucibleComponentState<TDatum>>;
231
+ products: Record<string, CrucibleProductState>;
232
+ relations: Record<string, CrucibleRelationState>;
233
+ input: {
234
+ amount: number;
235
+ metrics: CrucibleMetricMap;
236
+ };
237
+ metrics: CrucibleMetricMap;
238
+ loss: {
239
+ amount: number;
240
+ metrics: CrucibleMetricMap;
241
+ };
242
+ history: CrucibleHistoryItem[];
243
+ }
244
+ export type CrucibleMaterializationType = "activate-relation" | "resolve-relation" | "form-product" | "update-product" | "complete-product" | "split-source" | "retarget-component" | "retarget-product";
245
+ export interface CrucibleMaterialization {
246
+ type: CrucibleMaterializationType;
247
+ eventId: string;
248
+ sourceIds?: string[];
249
+ productIds?: string[];
250
+ relationIds?: string[];
251
+ outletIds?: string[];
252
+ }
253
+ export interface CrucibleObservation {
254
+ type: "crucible-event" | CrucibleMaterializationType | "crucible-outcome";
255
+ eventId: string;
256
+ phaseId: string;
257
+ authoredAt: number;
258
+ appliedAt: number;
259
+ sourceIds?: string[];
260
+ productIds?: string[];
261
+ relationIds?: string[];
262
+ outletIds?: string[];
263
+ outcome?: string;
264
+ }
265
+ export interface CrucibleDiagnostic {
266
+ severity: "warning" | "error";
267
+ code: string;
268
+ message: string;
269
+ path?: string;
270
+ ids?: string[];
271
+ }
272
+ export interface CrucibleApplyResult<TDatum extends Datum = Datum> {
273
+ applied: boolean;
274
+ state: CrucibleRunState<TDatum>;
275
+ materializations: CrucibleMaterialization[];
276
+ observations: CrucibleObservation[];
277
+ diagnostics: CrucibleDiagnostic[];
278
+ }
279
+ export interface CrucibleApplyContext {
280
+ phaseId: string;
281
+ authoredAt: number;
282
+ appliedAt: number;
283
+ products: readonly CrucibleProductDefinition[];
284
+ outlets: readonly CrucibleOutlet[];
285
+ }
286
+ export interface CrucibleCompiledPhase extends CruciblePhase {
287
+ index: number;
288
+ start: number;
289
+ end: number;
290
+ }
291
+ /** `boundaryRank` encodes phase-end (0), then next phase-start (1). */
292
+ export interface CrucibleCompiledEvent extends CrucibleEvent {
293
+ index: number;
294
+ authoredAt: number;
295
+ phaseId: string;
296
+ phaseIndex: number;
297
+ boundaryRank: 0 | 1;
298
+ }
299
+ export interface CrucibleAccessors<TDatum extends Datum = Datum> {
300
+ idAccessor?: ChartAccessor<TDatum, string>;
301
+ labelAccessor?: ChartAccessor<TDatum, string>;
302
+ categoryAccessor?: ChartAccessor<TDatum, string>;
303
+ amountAccessor?: ChartAccessor<TDatum, number>;
304
+ metricsAccessor?: ChartAccessor<TDatum, CrucibleMetricMap>;
305
+ initialStateAccessor?: ChartAccessor<TDatum, CrucibleComponentStatus>;
306
+ }
307
+ export interface CrucibleCompileOptions<TDatum extends Datum = Datum> extends CrucibleAccessors<TDatum> {
308
+ data: readonly TDatum[];
309
+ phases: readonly CruciblePhase[];
310
+ products?: readonly CrucibleProductDefinition[];
311
+ outlets?: readonly CrucibleOutlet[];
312
+ events?: readonly CrucibleEvent[];
313
+ size?: [number, number];
314
+ seed?: number | string;
315
+ bodyRadius?: number;
316
+ radiusRange?: [number, number];
317
+ metrics?: CrucibleMetricMap;
318
+ }
319
+ export interface CrucibleLayoutOutlet extends CrucibleOutlet {
320
+ x: number;
321
+ y: number;
322
+ width: number;
323
+ height: number;
324
+ }
325
+ export interface CrucibleLayout {
326
+ width: number;
327
+ height: number;
328
+ phaseRail: {
329
+ x: number;
330
+ y: number;
331
+ width: number;
332
+ height: number;
333
+ };
334
+ chamber: {
335
+ x: number;
336
+ y: number;
337
+ width: number;
338
+ height: number;
339
+ };
340
+ mouth: {
341
+ x: number;
342
+ y: number;
343
+ width: number;
344
+ height: number;
345
+ };
346
+ projection: {
347
+ x: number;
348
+ y: number;
349
+ width: number;
350
+ height: number;
351
+ };
352
+ outlets: CrucibleLayoutOutlet[];
353
+ }
354
+ export interface CrucibleBodyDatum<TDatum extends Datum = Datum> {
355
+ __crucible: true;
356
+ kind: "component" | "product";
357
+ semanticId: string;
358
+ sourceDatum?: TDatum;
359
+ product?: CrucibleProductState;
360
+ }
361
+ export interface CrucibleCompiledPlan<TDatum extends Datum = Datum> {
362
+ phases: CrucibleCompiledPhase[];
363
+ events: CrucibleCompiledEvent[];
364
+ products: CrucibleProductDefinition[];
365
+ outlets: CrucibleOutlet[];
366
+ duration: number;
367
+ initialState: CrucibleRunState<TDatum>;
368
+ terminalState: CrucibleRunState<TDatum>;
369
+ layout: CrucibleLayout;
370
+ colliders: PhysicsColliderSpec[];
371
+ config: PhysicsPipelineConfig;
372
+ initialSpawns: PhysicsQueuedSpawn[];
373
+ terminalSpawns: PhysicsQueuedSpawn[];
374
+ semanticKey: string;
375
+ diagnostics: CrucibleDiagnostic[];
376
+ }
377
+ export interface CrucibleReplayResult<TDatum extends Datum = Datum> {
378
+ state: CrucibleRunState<TDatum>;
379
+ materializations: CrucibleMaterialization[];
380
+ observations: CrucibleObservation[];
381
+ diagnostics: CrucibleDiagnostic[];
382
+ }
383
+ export type CrucibleProjectionGroupBy = "status" | "outlet" | "category" | "product";
384
+ export interface CrucibleProjectionSpec {
385
+ groupBy?: CrucibleProjectionGroupBy;
386
+ measure?: "count" | "amount" | string;
387
+ order?: readonly string[];
388
+ showInputBaseline?: boolean;
389
+ showDelta?: boolean;
390
+ }
391
+ export interface CrucibleProjectionRow {
392
+ key: string;
393
+ label: string;
394
+ count: number;
395
+ amount: number;
396
+ metrics: CrucibleMetricMap;
397
+ status?: CrucibleComponentStatus | CrucibleProductStatus;
398
+ outletId?: string;
399
+ category?: string;
400
+ productId?: string;
401
+ }
402
+ export interface CrucibleConservationSpec {
403
+ field?: "amount" | string;
404
+ tolerance?: number;
405
+ }
406
+ export interface CrucibleConservationResult {
407
+ field: string;
408
+ input: number;
409
+ products: number;
410
+ unassigned: number;
411
+ loss: number;
412
+ output: number;
413
+ delta: number;
414
+ conserved: boolean;
415
+ }
@@ -1,12 +1,10 @@
1
1
  /**
2
- * Single source of truth for per-chart prop specifications.
3
- *
4
- * Three downstream consumers used to maintain their own per-chart entries:
2
+ * Single source of truth for per-chart prop specifications consumed by:
5
3
  * - `ai/schema.json` (LLM tool definitions)
6
4
  * - `src/components/charts/shared/validationMap.ts` (runtime prop validation)
7
5
  * - `ai/componentMetadata.cjs` (category buckets)
8
6
  *
9
- * Today, `validationMap.generated.ts` and `ai/schema.json` are generated from
7
+ * `validationMap.generated.ts` and `ai/schema.json` are generated from
10
8
  * this registry — run `npm run docs:chart-specs:schema` to refresh both after
11
9
  * editing a spec. `componentMetadata.cjs` is still
12
10
  * hand-edited but gated for parity by the registry: `check:chart-specs` (run
@@ -110,6 +108,14 @@ export interface ChartPropSpec {
110
108
  default?: unknown;
111
109
  /** Schema-side description; surfaces in LLM tool definitions. */
112
110
  description?: string;
111
+ /**
112
+ * Additional JSON Schema keywords for this prop. Use this for nested wire
113
+ * contracts (`items`, `properties`, `oneOf`, numeric bounds, and similar)
114
+ * that cannot be expressed by the shallow runtime validation map. These
115
+ * keywords are copied only to the AI/MCP schema; runtime validation still
116
+ * consumes the top-level `type` and `enum` above.
117
+ */
118
+ schema?: Readonly<Record<string, unknown>>;
113
119
  /**
114
120
  * When true, the prop is included in validationMap but omitted from
115
121
  * schema.json. Use for handler/callback props (`onClick`, `tooltip`)
@@ -0,0 +1,5 @@
1
+ /** Nested JSON Schema fragments for CrucibleChart's serializable program. */
2
+ export declare const CRUCIBLE_PHASES_SCHEMA: Readonly<Record<string, unknown>>;
3
+ export declare const CRUCIBLE_PRODUCTS_SCHEMA: Readonly<Record<string, unknown>>;
4
+ export declare const CRUCIBLE_OUTLETS_SCHEMA: Readonly<Record<string, unknown>>;
5
+ export declare const CRUCIBLE_EVENTS_SCHEMA: Readonly<Record<string, unknown>>;
@@ -3,6 +3,16 @@ export interface Diagnosis {
3
3
  code: string;
4
4
  message: string;
5
5
  fix: string;
6
+ /** Optional evaluator domain; omitted by legacy configuration checks. */
7
+ domain?: "data" | "configuration" | "accessibility" | "render";
8
+ /** Numeric/data checks attach the resolved accessor label. */
9
+ field?: string;
10
+ /** Numeric/data checks attach the semantic encoding role. */
11
+ role?: string;
12
+ /** Bounded zero-based row indices for actionable data findings. */
13
+ rows?: ReadonlyArray<number>;
14
+ /** Full affected-row/group count when `rows` is truncated. */
15
+ count?: number;
6
16
  }
7
17
  export interface DiagnosisResult {
8
18
  ok: boolean;
@@ -1,16 +1,12 @@
1
1
  import type { Datum } from "./datumTypes";
2
+ import type { ColorGradientInput, GradientConfig, GradientStop } from "./gradient";
2
3
  export interface GaugeThresholdLike {
3
4
  value: number;
4
5
  color: string;
5
6
  label?: string;
6
7
  }
7
- export interface GaugeGradientStop {
8
- offset: number;
9
- color: string;
10
- }
11
- export interface GaugeGradientFill {
12
- colorStops: GaugeGradientStop[];
13
- }
8
+ export type GaugeGradientStop = GradientStop;
9
+ export type GaugeGradientFill = ColorGradientInput;
14
10
  export interface GaugeArcDatum extends Datum {
15
11
  category: string;
16
12
  value: number;
@@ -48,7 +44,7 @@ interface BuildGaugeArcModelOptions {
48
44
  backgroundColor: string;
49
45
  fillZones: boolean;
50
46
  showScaleLabels: boolean;
51
- gradientFill?: GaugeGradientFill;
47
+ gradientFill?: GradientConfig;
52
48
  gradientSteps?: number;
53
49
  }
54
50
  /**