@salesmind-ai/design-system 0.5.0 → 0.7.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 (257) hide show
  1. package/README.md +2 -0
  2. package/dist/Anton-Regular-MLEXVTB2.woff2 +0 -0
  3. package/dist/admin/index.cjs +5 -61
  4. package/dist/admin/index.css +0 -3918
  5. package/dist/admin/index.css.map +1 -1
  6. package/dist/admin/index.d.cts +1 -422
  7. package/dist/admin/index.d.ts +1 -422
  8. package/dist/admin/index.js +1 -5
  9. package/dist/blog/index.cjs +13 -34
  10. package/dist/blog/index.css +0 -579
  11. package/dist/blog/index.css.map +1 -1
  12. package/dist/blog/index.d.cts +1 -54
  13. package/dist/blog/index.d.ts +1 -54
  14. package/dist/blog/index.js +5 -6
  15. package/dist/charts/index.cjs +0 -46
  16. package/dist/charts/index.d.cts +1 -452
  17. package/dist/charts/index.d.ts +1 -452
  18. package/dist/charts/index.js +1 -3
  19. package/dist/{chunk-HDVAMYSG.js → chunk-27Y5ESMM.js} +7 -2
  20. package/dist/chunk-27Y5ESMM.js.map +1 -0
  21. package/dist/{chunk-YTYDQBVY.cjs → chunk-2VVRZBUR.cjs} +4 -4
  22. package/dist/{chunk-GQELL2MF.cjs → chunk-3NS6X2R4.cjs} +20 -203
  23. package/dist/chunk-3NS6X2R4.cjs.map +1 -0
  24. package/dist/{chunk-XEX2AEZK.cjs → chunk-65DTHLVX.cjs} +66 -186
  25. package/dist/chunk-65DTHLVX.cjs.map +1 -0
  26. package/dist/{chunk-QALDZ7WQ.js → chunk-6BUS7RMS.js} +21 -198
  27. package/dist/chunk-6BUS7RMS.js.map +1 -0
  28. package/dist/{chunk-BJZ2DKS5.cjs → chunk-6QIQCUYC.cjs} +11 -10
  29. package/dist/chunk-6QIQCUYC.cjs.map +1 -0
  30. package/dist/{chunk-H2Y6BSTL.cjs → chunk-7EUR3AKV.cjs} +1 -1
  31. package/dist/chunk-7EUR3AKV.cjs.map +1 -0
  32. package/dist/{chunk-VFJZQQZU.js → chunk-AMNY5TS3.js} +11 -10
  33. package/dist/chunk-AMNY5TS3.js.map +1 -0
  34. package/dist/{chunk-YJ6C3EKW.js → chunk-CLXLQCNQ.js} +52 -168
  35. package/dist/chunk-CLXLQCNQ.js.map +1 -0
  36. package/dist/{chunk-H2KQ3WSH.cjs → chunk-CVLD5RQK.cjs} +12 -14
  37. package/dist/chunk-CVLD5RQK.cjs.map +1 -0
  38. package/dist/chunk-EPD4ZEPY.cjs +344 -0
  39. package/dist/chunk-EPD4ZEPY.cjs.map +1 -0
  40. package/dist/chunk-FXYOSA4E.cjs +118 -0
  41. package/dist/chunk-FXYOSA4E.cjs.map +1 -0
  42. package/dist/{chunk-ECXBTUH6.cjs → chunk-GPHQGLR5.cjs} +27 -204
  43. package/dist/chunk-GPHQGLR5.cjs.map +1 -0
  44. package/dist/{chunk-Y26OHHMX.js → chunk-HHQ6J7B6.js} +513 -888
  45. package/dist/chunk-HHQ6J7B6.js.map +1 -0
  46. package/dist/chunk-JPUJWI7F.cjs +73 -0
  47. package/dist/chunk-JPUJWI7F.cjs.map +1 -0
  48. package/dist/{chunk-6UNG76Y2.js → chunk-K526GN7P.js} +2 -2
  49. package/dist/{chunk-SICKWUWB.js → chunk-KJHPOB3J.js} +1 -1
  50. package/dist/chunk-KJHPOB3J.js.map +1 -0
  51. package/dist/chunk-KXVFFEGD.js +60 -0
  52. package/dist/chunk-KXVFFEGD.js.map +1 -0
  53. package/dist/chunk-LQB7QLD3.js +288 -0
  54. package/dist/chunk-LQB7QLD3.js.map +1 -0
  55. package/dist/chunk-LUD52ZJF.cjs +726 -0
  56. package/dist/chunk-LUD52ZJF.cjs.map +1 -0
  57. package/dist/{chunk-7UZ5DETZ.js → chunk-MBAG654R.js} +4 -216
  58. package/dist/chunk-MBAG654R.js.map +1 -0
  59. package/dist/chunk-OMP6FAZ6.cjs +183 -0
  60. package/dist/chunk-OMP6FAZ6.cjs.map +1 -0
  61. package/dist/{chunk-WYH4TKS5.js → chunk-PBYRTNQ5.js} +6 -8
  62. package/dist/chunk-PBYRTNQ5.js.map +1 -0
  63. package/dist/chunk-PYREXCZK.js +679 -0
  64. package/dist/chunk-PYREXCZK.js.map +1 -0
  65. package/dist/{chunk-6D22TFLA.cjs → chunk-R3ZECV5P.cjs} +9 -4
  66. package/dist/chunk-R3ZECV5P.cjs.map +1 -0
  67. package/dist/{chunk-P5BOFE5A.js → chunk-RSLA2FJN.js} +28 -183
  68. package/dist/chunk-RSLA2FJN.js.map +1 -0
  69. package/dist/chunk-S46SKHMD.js +173 -0
  70. package/dist/chunk-S46SKHMD.js.map +1 -0
  71. package/dist/chunk-SFXTB7JL.js +190 -0
  72. package/dist/chunk-SFXTB7JL.js.map +1 -0
  73. package/dist/chunk-SGYXYMKZ.cjs +214 -0
  74. package/dist/chunk-SGYXYMKZ.cjs.map +1 -0
  75. package/dist/chunk-UGKYP6F3.cjs +296 -0
  76. package/dist/chunk-UGKYP6F3.cjs.map +1 -0
  77. package/dist/chunk-WB6XDNU7.js +115 -0
  78. package/dist/chunk-WB6XDNU7.js.map +1 -0
  79. package/dist/{chunk-LTPTW2US.cjs → chunk-WE4QIIVN.cjs} +592 -974
  80. package/dist/chunk-WE4QIIVN.cjs.map +1 -0
  81. package/dist/core/index.cjs +144 -626
  82. package/dist/core/index.css +178 -3567
  83. package/dist/core/index.css.map +1 -1
  84. package/dist/core/index.d.cts +940 -902
  85. package/dist/core/index.d.ts +940 -902
  86. package/dist/core/index.js +6 -12
  87. package/dist/i18n/index.cjs +54 -49
  88. package/dist/i18n/index.d.cts +46 -11
  89. package/dist/i18n/index.d.ts +46 -11
  90. package/dist/i18n/index.js +2 -1
  91. package/dist/index-BJ8rBqrO.d.cts +1100 -0
  92. package/dist/index-BxMqCbqE.d.ts +1100 -0
  93. package/dist/index.cjs +507 -1001
  94. package/dist/index.cjs.map +1 -1
  95. package/dist/index.css +6057 -16713
  96. package/dist/index.css.map +1 -1
  97. package/dist/index.d.cts +306 -21
  98. package/dist/index.d.ts +306 -21
  99. package/dist/index.js +274 -39
  100. package/dist/index.js.map +1 -1
  101. package/dist/marketing/index.cjs +33 -76
  102. package/dist/marketing/index.css +1896 -3234
  103. package/dist/marketing/index.css.map +1 -1
  104. package/dist/marketing/index.d.cts +3 -1351
  105. package/dist/marketing/index.d.ts +3 -1351
  106. package/dist/marketing/index.js +5 -8
  107. package/dist/motion/index.cjs +3 -20
  108. package/dist/motion/index.css +0 -580
  109. package/dist/motion/index.css.map +1 -1
  110. package/dist/motion/index.d.cts +1 -37
  111. package/dist/motion/index.d.ts +1 -37
  112. package/dist/motion/index.js +1 -2
  113. package/dist/nav/index.cjs +10 -35
  114. package/dist/nav/index.css +28 -580
  115. package/dist/nav/index.css.map +1 -1
  116. package/dist/nav/index.d.cts +2 -60
  117. package/dist/nav/index.d.ts +2 -60
  118. package/dist/nav/index.js +1 -2
  119. package/dist/report/index.cjs +1166 -175
  120. package/dist/report/index.cjs.map +1 -1
  121. package/dist/report/index.d.cts +208 -5
  122. package/dist/report/index.d.ts +208 -5
  123. package/dist/report/index.js +1141 -3
  124. package/dist/report/index.js.map +1 -1
  125. package/dist/sections/index.cjs +8 -10
  126. package/dist/sections/index.cjs.map +1 -1
  127. package/dist/sections/index.css +0 -206
  128. package/dist/sections/index.css.map +1 -1
  129. package/dist/sections/index.js +2 -4
  130. package/dist/sections/index.js.map +1 -1
  131. package/dist/social-media/index.cjs +4 -0
  132. package/dist/social-media/index.cjs.map +1 -0
  133. package/dist/social-media/index.d.cts +2 -0
  134. package/dist/social-media/index.d.ts +2 -0
  135. package/dist/social-media/index.js +3 -0
  136. package/dist/social-media/index.js.map +1 -0
  137. package/dist/social-proof/index.cjs +4 -36
  138. package/dist/social-proof/index.css +3 -1106
  139. package/dist/social-proof/index.css.map +1 -1
  140. package/dist/social-proof/index.d.cts +26 -171
  141. package/dist/social-proof/index.d.ts +26 -171
  142. package/dist/social-proof/index.js +1 -5
  143. package/dist/styles/styles.css +657 -2990
  144. package/dist/theme/index.cjs +12 -16
  145. package/dist/theme/index.css +1 -245
  146. package/dist/theme/index.css.map +1 -1
  147. package/dist/theme/index.d.cts +4 -1
  148. package/dist/theme/index.d.ts +4 -1
  149. package/dist/theme/index.js +2 -2
  150. package/dist/web/client/index.cjs +10 -10
  151. package/dist/web/client/index.css +118 -0
  152. package/dist/web/client/index.css.map +1 -1
  153. package/dist/web/client/index.js +2 -2
  154. package/dist/web/index.cjs +10 -10
  155. package/dist/web/index.css +118 -0
  156. package/dist/web/index.css.map +1 -1
  157. package/dist/web/index.js +2 -2
  158. package/package.json +10 -4
  159. package/dist/AppearancePanel-UT57J69V.d.cts +0 -51
  160. package/dist/AppearancePanel-UT57J69V.d.ts +0 -51
  161. package/dist/ExportMenu-A2TLFiVv.d.cts +0 -311
  162. package/dist/ExportMenu-C8qck5AT.d.ts +0 -311
  163. package/dist/Select-BdZmK0Lt.d.cts +0 -66
  164. package/dist/Select-BdZmK0Lt.d.ts +0 -66
  165. package/dist/chart-types-BGVVO-zl.d.cts +0 -208
  166. package/dist/chart-types-BGVVO-zl.d.ts +0 -208
  167. package/dist/charts/index.css +0 -1167
  168. package/dist/charts/index.css.map +0 -1
  169. package/dist/chunk-3BAQDW3V.cjs +0 -1207
  170. package/dist/chunk-3BAQDW3V.cjs.map +0 -1
  171. package/dist/chunk-3NKRFUAR.js +0 -37
  172. package/dist/chunk-3NKRFUAR.js.map +0 -1
  173. package/dist/chunk-3TGSIILM.cjs +0 -201
  174. package/dist/chunk-3TGSIILM.cjs.map +0 -1
  175. package/dist/chunk-4GM5BGBN.cjs +0 -801
  176. package/dist/chunk-4GM5BGBN.cjs.map +0 -1
  177. package/dist/chunk-5LA3T22E.cjs +0 -562
  178. package/dist/chunk-5LA3T22E.cjs.map +0 -1
  179. package/dist/chunk-5SN66B2X.js +0 -2542
  180. package/dist/chunk-5SN66B2X.js.map +0 -1
  181. package/dist/chunk-6D22TFLA.cjs.map +0 -1
  182. package/dist/chunk-6H4DSTXR.js +0 -786
  183. package/dist/chunk-6H4DSTXR.js.map +0 -1
  184. package/dist/chunk-6HKQ5ILL.cjs +0 -1624
  185. package/dist/chunk-6HKQ5ILL.cjs.map +0 -1
  186. package/dist/chunk-7PX2AZ6Y.js +0 -39
  187. package/dist/chunk-7PX2AZ6Y.js.map +0 -1
  188. package/dist/chunk-7UZ5DETZ.js.map +0 -1
  189. package/dist/chunk-B6AVAX4F.js +0 -1415
  190. package/dist/chunk-B6AVAX4F.js.map +0 -1
  191. package/dist/chunk-BJZ2DKS5.cjs.map +0 -1
  192. package/dist/chunk-BUTQSDQH.js +0 -200
  193. package/dist/chunk-BUTQSDQH.js.map +0 -1
  194. package/dist/chunk-C2BCDNAV.js +0 -24
  195. package/dist/chunk-C2BCDNAV.js.map +0 -1
  196. package/dist/chunk-CJ2MKVAF.cjs +0 -46
  197. package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
  198. package/dist/chunk-E7D6EKJ4.cjs +0 -44
  199. package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
  200. package/dist/chunk-ECXBTUH6.cjs.map +0 -1
  201. package/dist/chunk-FAFAP4L5.js +0 -183
  202. package/dist/chunk-FAFAP4L5.js.map +0 -1
  203. package/dist/chunk-G2XGBO5V.cjs +0 -2565
  204. package/dist/chunk-G2XGBO5V.cjs.map +0 -1
  205. package/dist/chunk-GQELL2MF.cjs.map +0 -1
  206. package/dist/chunk-H2KQ3WSH.cjs.map +0 -1
  207. package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
  208. package/dist/chunk-HCZW5AJN.cjs +0 -234
  209. package/dist/chunk-HCZW5AJN.cjs.map +0 -1
  210. package/dist/chunk-HDVAMYSG.js.map +0 -1
  211. package/dist/chunk-HN4PHABT.js +0 -126
  212. package/dist/chunk-HN4PHABT.js.map +0 -1
  213. package/dist/chunk-LTPTW2US.cjs.map +0 -1
  214. package/dist/chunk-MDB2WCRQ.cjs +0 -137
  215. package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
  216. package/dist/chunk-MQRB634A.cjs +0 -34
  217. package/dist/chunk-MQRB634A.cjs.map +0 -1
  218. package/dist/chunk-NN3TUHIH.js +0 -28
  219. package/dist/chunk-NN3TUHIH.js.map +0 -1
  220. package/dist/chunk-OWS2KAXZ.js +0 -701
  221. package/dist/chunk-OWS2KAXZ.js.map +0 -1
  222. package/dist/chunk-P5BOFE5A.js.map +0 -1
  223. package/dist/chunk-PUPSK3DI.cjs +0 -216
  224. package/dist/chunk-PUPSK3DI.cjs.map +0 -1
  225. package/dist/chunk-Q2MFGYTE.cjs +0 -1449
  226. package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
  227. package/dist/chunk-Q75DBVDY.cjs +0 -68
  228. package/dist/chunk-Q75DBVDY.cjs.map +0 -1
  229. package/dist/chunk-QALDZ7WQ.js.map +0 -1
  230. package/dist/chunk-QWE2RNCS.js +0 -1195
  231. package/dist/chunk-QWE2RNCS.js.map +0 -1
  232. package/dist/chunk-RQUFZAZ7.js +0 -1608
  233. package/dist/chunk-RQUFZAZ7.js.map +0 -1
  234. package/dist/chunk-SICKWUWB.js.map +0 -1
  235. package/dist/chunk-TCFC7XTB.js +0 -212
  236. package/dist/chunk-TCFC7XTB.js.map +0 -1
  237. package/dist/chunk-UTVXGAQP.cjs +0 -2437
  238. package/dist/chunk-UTVXGAQP.cjs.map +0 -1
  239. package/dist/chunk-UVEMY3FQ.cjs +0 -717
  240. package/dist/chunk-UVEMY3FQ.cjs.map +0 -1
  241. package/dist/chunk-VFJZQQZU.js.map +0 -1
  242. package/dist/chunk-WH7PYHZY.cjs +0 -35
  243. package/dist/chunk-WH7PYHZY.cjs.map +0 -1
  244. package/dist/chunk-WYH4TKS5.js.map +0 -1
  245. package/dist/chunk-XEX2AEZK.cjs.map +0 -1
  246. package/dist/chunk-XPTVHPCN.js +0 -2320
  247. package/dist/chunk-XPTVHPCN.js.map +0 -1
  248. package/dist/chunk-XWPDRMZG.js +0 -62
  249. package/dist/chunk-XWPDRMZG.js.map +0 -1
  250. package/dist/chunk-Y26OHHMX.js.map +0 -1
  251. package/dist/chunk-YJ6C3EKW.js.map +0 -1
  252. package/dist/motion-C651Ry6d.d.cts +0 -832
  253. package/dist/motion-C651Ry6d.d.ts +0 -832
  254. package/dist/report/index.css +0 -1239
  255. package/dist/report/index.css.map +0 -1
  256. /package/dist/{chunk-6UNG76Y2.js.map → chunk-2VVRZBUR.cjs.map} +0 -0
  257. /package/dist/{chunk-YTYDQBVY.cjs.map → chunk-K526GN7P.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
1
+ {"version":3,"sources":["../../src/report-engine/constants.ts","../../src/report-engine/confidence.ts","../../src/report-engine/context.tsx","../../src/report-engine/chart-types.ts","../../src/report-engine/validation.ts"],"names":["React","getComponentName","isChart"],"mappings":"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","sourcesContent":["/* ============================================================================\n REPORT ENGINE — CONSTANTS & CONFIGURATION\n ============================================================================ */\n\nimport type {\n ReportModeConfig,\n ConfidenceThreshold,\n InsightTypeContract,\n InsightType,\n} from './types';\n\n/**\n * Executive mode configuration - minimal detail, boardroom-ready.\n */\nexport const EXECUTIVE_MODE: ReportModeConfig = {\n mode: 'executive',\n features: {\n showMethodology: false,\n showConfidenceScores: false,\n showRawData: false,\n showStatisticalTests: false,\n chartDetailLevel: 'summary',\n maxInsightsShown: 5,\n allowDrilldown: false,\n },\n};\n\n/**\n * Analyst mode configuration - full detail, internal use.\n */\nexport const ANALYST_MODE: ReportModeConfig = {\n mode: 'analyst',\n features: {\n showMethodology: true,\n showConfidenceScores: true,\n showRawData: true,\n showStatisticalTests: true,\n chartDetailLevel: 'detailed',\n maxInsightsShown: 20,\n allowDrilldown: true,\n },\n};\n\n/**\n * Confidence level thresholds.\n */\nexport const CONFIDENCE_THRESHOLDS: ConfidenceThreshold[] = [\n { level: 'high', min: 90, max: 100, label: 'High Confidence', color: 'var(--status-success)' },\n {\n level: 'moderate',\n min: 70,\n max: 89,\n label: 'Moderate Confidence',\n color: 'var(--status-info)',\n },\n { level: 'low', min: 50, max: 69, label: 'Low Confidence', color: 'var(--status-warning)' },\n {\n level: 'insufficient',\n min: 0,\n max: 49,\n label: 'Insufficient Data',\n color: 'var(--status-error)',\n },\n];\n\n/**\n * Minimum sample sizes for different analysis types.\n */\nexport const MINIMUM_SAMPLE_SIZES = {\n overall: 30,\n segment: 30,\n mbtiType: 50,\n correlation: 100,\n timeSeries: 7,\n} as const;\n\n/**\n * Insight type contracts defining allowed charts and requirements.\n */\nexport const INSIGHT_TYPE_CONTRACTS: Record<InsightType, InsightTypeContract> = {\n 'performance-delta': {\n type: 'performance-delta',\n allowedCharts: ['BarChart', 'LineChart', 'KeyMetric'],\n requiredFields: ['metric_name', 'current_value', 'previous_value', 'time_period'],\n minSampleSize: 30,\n headlinePattern: '{metric} {direction} by {delta}% {timeframe}',\n recommendationFormats: ['maintain-strategy', 'investigate-decline', 'scale-success'],\n },\n 'behavioral-correlation': {\n type: 'behavioral-correlation',\n allowedCharts: ['HeatmapChart', 'BarChart'],\n requiredFields: ['variable_a', 'variable_b', 'correlation_coefficient'],\n minSampleSize: 100,\n headlinePattern: '{variable_a} correlates with {variable_b}',\n recommendationFormats: ['leverage-correlation', 'investigate-causation'],\n },\n 'funnel-leakage': {\n type: 'funnel-leakage',\n allowedCharts: ['FunnelChart', 'BarChart'],\n requiredFields: ['stages', 'stage_counts', 'drop_rates'],\n minSampleSize: 50,\n headlinePattern: '{drop_rate}% drop-off at {stage}',\n recommendationFormats: ['optimize-stage', 'remove-friction'],\n },\n 'audience-mismatch': {\n type: 'audience-mismatch',\n allowedCharts: ['BarChart', 'PieChart'],\n requiredFields: ['target_audience', 'actual_audience', 'overlap_percentage'],\n minSampleSize: 50,\n headlinePattern: 'Target audience differs by {mismatch}%',\n recommendationFormats: ['refine-targeting', 'expand-audience'],\n },\n 'message-fatigue': {\n type: 'message-fatigue',\n allowedCharts: ['LineChart', 'BarChart'],\n requiredFields: ['message_sequence', 'engagement_rates', 'fatigue_point'],\n minSampleSize: 100,\n headlinePattern: 'Engagement drops {drop}% after message {n}',\n recommendationFormats: ['reduce-frequency', 'vary-content'],\n },\n 'psychological-resonance': {\n type: 'psychological-resonance',\n allowedCharts: ['MBTIRadar', 'MBTITypeGrid', 'BarChart'],\n requiredFields: ['mbti_types', 'response_rates', 'message_type'],\n minSampleSize: 50,\n headlinePattern: '{mbti_type} responds {rate}% better to {message_type}',\n recommendationFormats: ['personalize-messaging', 'segment-by-type'],\n },\n 'timing-pattern': {\n type: 'timing-pattern',\n allowedCharts: ['HeatmapChart', 'LineChart'],\n requiredFields: ['time_slots', 'engagement_rates'],\n minSampleSize: 100,\n headlinePattern: 'Best engagement on {day} at {time}',\n recommendationFormats: ['optimize-timing', 'schedule-sends'],\n },\n 'segment-outperformance': {\n type: 'segment-outperformance',\n allowedCharts: ['BarChart', 'KeyMetric'],\n requiredFields: ['segments', 'performance_metrics', 'baseline'],\n minSampleSize: 30,\n headlinePattern: '{segment} outperforms by {delta}%',\n recommendationFormats: ['double-down', 'investigate-success'],\n },\n 'anomaly-detection': {\n type: 'anomaly-detection',\n allowedCharts: ['LineChart', 'BarChart'],\n requiredFields: ['metric', 'expected_value', 'actual_value', 'deviation'],\n minSampleSize: 30,\n headlinePattern: 'Unusual {direction} in {metric}',\n recommendationFormats: ['investigate', 'monitor'],\n },\n 'competitive-benchmark': {\n type: 'competitive-benchmark',\n allowedCharts: ['BarChart', 'KeyMetric'],\n requiredFields: ['metric', 'our_value', 'benchmark_value'],\n minSampleSize: 30,\n headlinePattern: '{position} industry benchmark by {delta}%',\n recommendationFormats: ['maintain-lead', 'close-gap'],\n },\n};\n\n/**\n * Analytical state metadata for UI rendering.\n */\nexport const ANALYTICAL_STATE_CONFIG = {\n VALID: {\n label: 'Valid',\n icon: 'check',\n color: 'var(--status-success)',\n action: null,\n },\n INSUFFICIENT_SAMPLE: {\n label: 'Insufficient Sample',\n icon: 'alert-triangle',\n color: 'var(--status-warning)',\n action: 'Add more data',\n },\n LOW_CONFIDENCE: {\n label: 'Low Confidence',\n icon: 'alert-circle',\n color: 'var(--status-warning)',\n action: 'Interpret with caution',\n },\n PARTIAL_TIME_WINDOW: {\n label: 'Partial Data',\n icon: 'clock',\n color: 'var(--status-info)',\n action: 'Expand date range',\n },\n DATA_SKEW_DETECTED: {\n label: 'Data Skew',\n icon: 'bar-chart-2',\n color: 'var(--status-warning)',\n action: 'Review methodology',\n },\n CONFLICTING_SIGNALS: {\n label: 'Conflicting Signals',\n icon: 'git-merge',\n color: 'var(--status-error)',\n action: 'Manual review needed',\n },\n INFERRED_NOT_OBSERVED: {\n label: 'AI Generated',\n icon: 'cpu',\n color: 'var(--status-info)',\n action: 'Verify with data',\n },\n STALE_DATA: {\n label: 'Stale Data',\n icon: 'clock',\n color: 'var(--status-warning)',\n action: 'Refresh data',\n },\n FIELD_MISSING: {\n label: 'Missing Field',\n icon: 'file-x',\n color: 'var(--status-error)',\n action: 'Upload complete data',\n },\n CALCULATION_ERROR: {\n label: 'Calculation Error',\n icon: 'x-circle',\n color: 'var(--status-error)',\n action: 'Contact support',\n },\n} as const;\n","/* ============================================================================\n REPORT ENGINE — CONFIDENCE SCORING\n ============================================================================ */\n\nimport type { ConfidenceLevel } from './types';\nimport { CONFIDENCE_THRESHOLDS } from './constants';\n\nexport interface ConfidenceParams {\n sampleSize: number;\n requiredSize: number;\n completeness: number; // 0-1: percentage of non-null fields\n recency: number; // 0-1: how recent the data is\n variance: number; // 0-1: normalized variance (higher = worse)\n aiInference: boolean; // Whether AI generated the insight\n}\n\n/**\n * Calculate confidence score based on data quality factors.\n * Returns a score from 0-100.\n */\nexport function calculateConfidence(params: ConfidenceParams): number {\n const { sampleSize, requiredSize, completeness, recency, variance, aiInference } = params;\n\n // Base score from sample size (0-40 points)\n const sampleScore = Math.min(40, (sampleSize / requiredSize) * 40);\n\n // Completeness bonus (0-20 points)\n const completenessScore = completeness * 20;\n\n // Recency bonus (0-20 points)\n const recencyScore = recency * 20;\n\n // Variance penalty (0-10 points deducted for high variance)\n const variancePenalty = variance * 10;\n\n // AI inference penalty (10 points if AI-generated)\n const aiPenalty = aiInference ? 10 : 0;\n\n const rawScore = sampleScore + completenessScore + recencyScore - variancePenalty - aiPenalty;\n\n return Math.max(0, Math.min(100, Math.round(rawScore)));\n}\n\n/**\n * Get confidence level from score.\n */\nexport function getConfidenceLevel(score: number): ConfidenceLevel {\n const threshold = CONFIDENCE_THRESHOLDS.find((t) => score >= t.min && score <= t.max);\n return threshold?.level ?? 'insufficient';\n}\n\n/**\n * Get confidence threshold config from score.\n */\nexport function getConfidenceThreshold(score: number) {\n return (\n CONFIDENCE_THRESHOLDS.find((t) => score >= t.min && score <= t.max) ??\n CONFIDENCE_THRESHOLDS[CONFIDENCE_THRESHOLDS.length - 1]\n );\n}\n\n/**\n * Calculate recency score based on data age.\n * @param dataDate - The date of the most recent data point\n * @param maxAgeDays - Maximum acceptable age in days (default 30)\n */\nexport function calculateRecency(dataDate: Date, maxAgeDays = 30): number {\n const now = new Date();\n const ageInDays = (now.getTime() - dataDate.getTime()) / (1000 * 60 * 60 * 24);\n\n if (ageInDays <= 0) return 1;\n if (ageInDays >= maxAgeDays) return 0;\n\n return 1 - ageInDays / maxAgeDays;\n}\n\n/**\n * Calculate data completeness from an array of records.\n * @param data - Array of data objects\n * @param requiredFields - Fields to check for completeness\n */\nexport function calculateCompleteness(\n data: Record<string, unknown>[],\n requiredFields: string[],\n): number {\n if (data.length === 0 || requiredFields.length === 0) return 0;\n\n let totalFields = 0;\n let filledFields = 0;\n\n for (const record of data) {\n for (const field of requiredFields) {\n totalFields++;\n const value = record[field];\n if (value !== null && value !== undefined && value !== '') {\n filledFields++;\n }\n }\n }\n\n return totalFields > 0 ? filledFields / totalFields : 0;\n}\n\n/**\n * Calculate normalized variance for a numeric dataset.\n * Returns 0-1 where 0 is low variance and 1 is high variance.\n */\nexport function calculateNormalizedVariance(values: number[]): number {\n if (values.length < 2) return 0;\n\n const mean = values.reduce((a, b) => a + b, 0) / values.length;\n const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));\n const variance = squaredDiffs.reduce((a, b) => a + b, 0) / values.length;\n const stdDev = Math.sqrt(variance);\n\n // Coefficient of variation (CV) normalized to 0-1\n // CV > 1 is considered high variance\n const cv = mean !== 0 ? stdDev / Math.abs(mean) : 0;\n\n return Math.min(1, cv);\n}\n","/* ============================================================================\n REPORT ENGINE — CONTEXT & HOOKS\n ============================================================================ */\n\n/* eslint-disable react-refresh/only-export-components */\n// This is a library file exporting hooks alongside providers - fast refresh doesn't apply\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport type { ReportMode, ReportModeConfig, AnalyticalState, DataStateDetails } from './types';\nimport { EXECUTIVE_MODE, ANALYST_MODE, MINIMUM_SAMPLE_SIZES } from './constants';\nimport { calculateConfidence, getConfidenceLevel, type ConfidenceParams } from './confidence';\n\n/* --------------------------------------------------------------------------\n Report Mode Context\n -------------------------------------------------------------------------- */\n\ninterface ReportModeContextValue extends ReportModeConfig {\n setMode?: (mode: ReportMode) => void;\n}\n\nconst ReportModeContext = createContext<ReportModeContextValue | null>(null);\n\nexport interface ReportModeProviderProps {\n mode?: ReportMode;\n children: React.ReactNode;\n onModeChange?: (mode: ReportMode) => void;\n}\n\n/**\n * Provider for report mode context.\n * Wrap your report with this to control executive vs analyst mode.\n */\nexport function ReportModeProvider({\n mode = 'executive',\n children,\n onModeChange,\n}: ReportModeProviderProps) {\n const config = mode === 'executive' ? EXECUTIVE_MODE : ANALYST_MODE;\n\n const value = useMemo(\n () => ({\n ...config,\n setMode: onModeChange,\n }),\n [config, onModeChange],\n );\n\n return <ReportModeContext.Provider value={value}>{children}</ReportModeContext.Provider>;\n}\n\n/**\n * Hook to access report mode configuration.\n */\nexport function useReportMode(): ReportModeContextValue {\n const context = useContext(ReportModeContext);\n\n if (!context) {\n // Return default executive mode if used outside provider\n return EXECUTIVE_MODE;\n }\n\n return context;\n}\n\n/* --------------------------------------------------------------------------\n Data State Hook\n -------------------------------------------------------------------------- */\n\nexport interface UseDataStateParams {\n sampleSize: number;\n requiredSize?: number;\n completeness?: number;\n recency?: number;\n variance?: number;\n aiInferred?: boolean;\n missingFields?: string[];\n staleDays?: number;\n}\n\nexport interface UseDataStateResult {\n state: AnalyticalState;\n confidence: number;\n confidenceLevel: ReturnType<typeof getConfidenceLevel>;\n details: DataStateDetails;\n isValid: boolean;\n}\n\n/**\n * Hook to compute analytical state from data parameters.\n */\nexport function useDataState(params: UseDataStateParams): UseDataStateResult {\n const {\n sampleSize,\n requiredSize = MINIMUM_SAMPLE_SIZES.overall,\n completeness = 1,\n recency = 1,\n variance = 0,\n aiInferred = false,\n missingFields = [],\n staleDays,\n } = params;\n\n return useMemo(() => {\n // Calculate confidence\n const confidenceParams: ConfidenceParams = {\n sampleSize,\n requiredSize,\n completeness,\n recency,\n variance,\n aiInference: aiInferred,\n };\n\n const confidence = calculateConfidence(confidenceParams);\n const confidenceLevel = getConfidenceLevel(confidence);\n\n // Determine analytical state\n let state: AnalyticalState = 'VALID';\n\n if (missingFields.length > 0) {\n state = 'FIELD_MISSING';\n } else if (sampleSize < requiredSize) {\n state = 'INSUFFICIENT_SAMPLE';\n } else if (staleDays && staleDays > 30) {\n state = 'STALE_DATA';\n } else if (aiInferred) {\n state = 'INFERRED_NOT_OBSERVED';\n } else if (confidence < 50) {\n state = 'LOW_CONFIDENCE';\n } else if (variance > 0.7) {\n state = 'DATA_SKEW_DETECTED';\n } else if (recency < 0.3) {\n state = 'PARTIAL_TIME_WINDOW';\n }\n\n const details: DataStateDetails = {\n sampleSize,\n requiredSize,\n confidence,\n missingFields: missingFields.length > 0 ? missingFields : undefined,\n staleDays,\n };\n\n return {\n state,\n confidence,\n confidenceLevel,\n details,\n isValid: state === 'VALID',\n };\n }, [\n sampleSize,\n requiredSize,\n completeness,\n recency,\n variance,\n aiInferred,\n missingFields,\n staleDays,\n ]);\n}\n\n/* --------------------------------------------------------------------------\n Chart Data Validation Hook\n -------------------------------------------------------------------------- */\n\nexport interface UseChartDataParams<T> {\n data: T[];\n requiredFields: string[];\n minSampleSize?: number;\n insightType?: string;\n}\n\nexport interface UseChartDataResult<T> {\n data: T[];\n state: AnalyticalState;\n confidence: number;\n isRenderable: boolean;\n message?: string;\n}\n\n/**\n * Hook to validate chart data against data contracts.\n */\nexport function useChartData<T extends Record<string, unknown>>({\n data,\n requiredFields,\n minSampleSize = MINIMUM_SAMPLE_SIZES.overall,\n}: UseChartDataParams<T>): UseChartDataResult<T> {\n return useMemo(() => {\n // Check for missing required fields\n const missingFields: string[] = [];\n if (data.length > 0) {\n const firstRecord = data[0];\n for (const field of requiredFields) {\n if (!(field in firstRecord)) {\n missingFields.push(field);\n }\n }\n }\n\n // Calculate completeness\n let completeness = 1;\n if (data.length > 0 && requiredFields.length > 0) {\n let filled = 0;\n let total = 0;\n for (const record of data) {\n for (const field of requiredFields) {\n total++;\n const value = record[field];\n if (value !== null && value !== undefined && value !== '') {\n filled++;\n }\n }\n }\n completeness = total > 0 ? filled / total : 0;\n }\n\n // Determine state\n let state: AnalyticalState = 'VALID';\n let message: string | undefined;\n\n if (missingFields.length > 0) {\n state = 'FIELD_MISSING';\n message = `Missing fields: ${missingFields.join(', ')}`;\n } else if (data.length === 0) {\n state = 'INSUFFICIENT_SAMPLE';\n message = 'No data available';\n } else if (data.length < minSampleSize) {\n state = 'INSUFFICIENT_SAMPLE';\n message = `Sample size ${data.length} is below minimum ${minSampleSize}`;\n } else if (completeness < 0.7) {\n state = 'LOW_CONFIDENCE';\n message = `Data completeness is ${Math.round(completeness * 100)}%`;\n }\n\n // Calculate confidence\n const confidence = calculateConfidence({\n sampleSize: data.length,\n requiredSize: minSampleSize,\n completeness,\n recency: 1, // Assume fresh data if not specified\n variance: 0,\n aiInference: false,\n });\n\n const isRenderable = state === 'VALID' || state === 'LOW_CONFIDENCE';\n\n return {\n data,\n state,\n confidence,\n isRenderable,\n message,\n };\n }, [data, requiredFields, minSampleSize]);\n}\n","/* ============================================================================\n CHART ABSTRACTION LAYER — TYPE DEFINITIONS & CONTRACTS\n \n This module defines the governed chart system with:\n - Chart taxonomy (semantic families)\n - Data contracts per chart type\n - Switching rules\n - Guardrails and fallback behaviors\n ============================================================================ */\n\n/* ============================================================================\n CHART INTENT (Semantic Families)\n ============================================================================ */\n\n/**\n * Chart intent defines the semantic purpose of visualization.\n * This is the primary classifier that governs switching rules.\n */\nexport type ChartIntent =\n | 'trend' // Time-based evolution, deltas, momentum\n | 'comparison' // Comparing discrete categories\n | 'composition' // Proportions and distributions\n | 'distribution' // Statistical spread and density\n | 'relationship' // Correlation and clustering\n | 'geo'; // Geographic data\n\n/* ============================================================================\n CHART TYPE TAXONOMY\n ============================================================================ */\n\n/**\n * All supported chart types organized by intent.\n */\n\n// Trend charts (time-based)\nexport type TrendChartType = 'line' | 'smooth_line' | 'area' | 'stacked_area' | 'area_100pct';\n\n// Comparison charts (categorical)\nexport type ComparisonChartType =\n | 'bar'\n | 'column'\n | 'stacked_bar'\n | 'stacked_column'\n | 'column_100pct'\n | 'combo'; // Phase 2\n\n// Composition charts\nexport type CompositionChartType = 'pie' | 'donut' | 'treemap'; // Phase 2\n\n// Distribution charts\nexport type DistributionChartType = 'histogram' | 'radar'; // Phase 2\n\n// Relationship charts\nexport type RelationshipChartType =\n | 'scatter' // Phase 2\n | 'bubble' // Phase 2\n | 'heatmap';\n\n// Geographic charts\nexport type GeoChartType =\n | 'geo' // Phase 2\n | 'choropleth'; // Phase 2\n\n/**\n * Union of all chart types\n */\nexport type ChartTypeId =\n | TrendChartType\n | ComparisonChartType\n | CompositionChartType\n | DistributionChartType\n | RelationshipChartType\n | GeoChartType\n | 'funnel' // Special: conversion flows\n | 'waterfall' // Phase 2: sequential changes\n | 'timeline'; // Phase 2: event sequences\n\n/**\n * Chart phase classification\n */\nexport type ChartPhase = 'mvp' | 'phase2' | 'phase3';\n\n/* ============================================================================\n CHART METADATA & REGISTRY\n ============================================================================ */\n\nexport interface ChartTypeMetadata {\n id: ChartTypeId;\n name: string;\n description: string;\n intent: ChartIntent;\n phase: ChartPhase;\n\n // Data requirements\n contract: ChartDataContract;\n\n // Allowed switches within same intent\n switchableTo: ChartTypeId[];\n\n // Visual configuration\n supportsStacking: boolean;\n supportsMultipleSeries: boolean;\n requiresTimeAxis: boolean;\n maxCategories?: number;\n maxSlices?: number;\n}\n\nexport interface ChartDataContract {\n // Required data shape\n requiredDimensions: number; // e.g., 1 for pie, 2 for scatter\n requiredMeasures: number; // Number of numeric fields required\n\n // Sample size requirements\n minDataPoints: number;\n idealDataPoints: number;\n maxDataPoints?: number;\n\n // Value constraints\n allowNegativeValues: boolean;\n requireNonZeroTotal: boolean;\n\n // Warnings\n warningThresholds: {\n tooManyCategories?: number;\n imbalancedRatio?: number;\n sparseData?: number;\n };\n\n // Fallback behavior\n fallback: ChartFallbackBehavior;\n}\n\nexport type ChartFallbackBehavior =\n | { type: 'hide' }\n | { type: 'show_kpi'; message: string }\n | { type: 'aggregate'; strategy: 'other_bucket' | 'top_n' }\n | { type: 'warn'; message: string };\n\n/* ============================================================================\n CHART REGISTRY (Canonical List)\n ============================================================================ */\n\nexport const CHART_REGISTRY: Record<ChartTypeId, ChartTypeMetadata> = {\n // ══════════════════════════════════════════════════════════════════════════\n // TREND CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n line: {\n id: 'line',\n name: 'Line Chart',\n description: 'Shows trends over time with connected data points',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for trend visualization' },\n },\n switchableTo: ['smooth_line', 'area', 'stacked_area'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n smooth_line: {\n id: 'smooth_line',\n name: 'Smooth Line Chart',\n description: 'Curved line chart for smoother trend visualization',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for trend visualization' },\n },\n switchableTo: ['line', 'area', 'stacked_area'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n area: {\n id: 'area',\n name: 'Area Chart',\n description: 'Filled area under line, emphasizes volume over time',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for area visualization' },\n },\n switchableTo: ['line', 'smooth_line', 'stacked_area', 'area_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n stacked_area: {\n id: 'stacked_area',\n name: 'Stacked Area Chart',\n description: 'Multiple series stacked to show cumulative trends',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'warn', message: 'Stacked area requires non-negative values' },\n },\n switchableTo: ['line', 'area', 'area_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n area_100pct: {\n id: 'area_100pct',\n name: '100% Stacked Area',\n description: 'Shows proportional contribution over time',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'warn', message: '100% stacked requires positive totals' },\n },\n switchableTo: ['stacked_area', 'area'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // COMPARISON CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n bar: {\n id: 'bar',\n name: 'Horizontal Bar Chart',\n description: 'Horizontal bars for comparing categories',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 15,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 12 },\n fallback: { type: 'aggregate', strategy: 'top_n' },\n },\n switchableTo: ['column', 'stacked_bar', 'stacked_column'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n column: {\n id: 'column',\n name: 'Vertical Column Chart',\n description: 'Vertical bars for comparing categories',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 12,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 10 },\n fallback: { type: 'aggregate', strategy: 'top_n' },\n },\n switchableTo: ['bar', 'stacked_column', 'stacked_bar'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n stacked_bar: {\n id: 'stacked_bar',\n name: 'Stacked Horizontal Bar',\n description: 'Horizontal stacked bars showing composition per category',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 8, imbalancedRatio: 0.9 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['bar', 'stacked_column', 'column_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n stacked_column: {\n id: 'stacked_column',\n name: 'Stacked Vertical Column',\n description: 'Vertical stacked columns showing composition per category',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 8, imbalancedRatio: 0.9 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['column', 'stacked_bar', 'column_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n column_100pct: {\n id: 'column_100pct',\n name: '100% Stacked Column',\n description: 'Shows proportional composition per category',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 8 },\n fallback: { type: 'warn', message: '100% stacked requires positive totals' },\n },\n switchableTo: ['stacked_column', 'stacked_bar'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n combo: {\n id: 'combo',\n name: 'Combo Chart',\n description: 'Combines bars with line overlay (Phase 2)',\n intent: 'comparison',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 3,\n idealDataPoints: 6,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 10 },\n fallback: { type: 'warn', message: 'Combo chart requires dual measures' },\n },\n switchableTo: ['column', 'line'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // COMPOSITION CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n pie: {\n id: 'pie',\n name: 'Pie Chart',\n description: 'Shows proportional composition of a whole',\n intent: 'composition',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 4,\n maxDataPoints: 6,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 6, imbalancedRatio: 0.95 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['donut', 'column_100pct'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n maxSlices: 6,\n },\n\n donut: {\n id: 'donut',\n name: 'Donut Chart',\n description: 'Pie chart with center cutout, can display total',\n intent: 'composition',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 4,\n maxDataPoints: 6,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 6, imbalancedRatio: 0.95 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['pie', 'column_100pct'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n maxSlices: 6,\n },\n\n treemap: {\n id: 'treemap',\n name: 'Treemap',\n description: 'Nested rectangles showing hierarchical composition (Phase 2)',\n intent: 'composition',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 10,\n maxDataPoints: 50,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 30 },\n fallback: { type: 'aggregate', strategy: 'top_n' },\n },\n switchableTo: ['pie', 'donut'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // DISTRIBUTION CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n histogram: {\n id: 'histogram',\n name: 'Histogram',\n description: 'Shows distribution of values across bins',\n intent: 'distribution',\n phase: 'mvp',\n contract: {\n requiredDimensions: 0,\n requiredMeasures: 1,\n minDataPoints: 10,\n idealDataPoints: 50,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 10 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for distribution' },\n },\n switchableTo: ['radar'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n radar: {\n id: 'radar',\n name: 'Radar Chart',\n description: 'Multi-dimensional comparison in radial layout (Phase 2)',\n intent: 'distribution',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 3,\n minDataPoints: 3,\n idealDataPoints: 6,\n maxDataPoints: 8,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 8 },\n fallback: { type: 'warn', message: 'Radar works best with 3-8 dimensions' },\n },\n switchableTo: ['histogram'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // RELATIONSHIP CHARTS\n // ══════════════════════════════════════════════════════════════════════════\n heatmap: {\n id: 'heatmap',\n name: 'Heatmap',\n description: 'Color-coded matrix showing intensity',\n intent: 'relationship',\n phase: 'mvp',\n contract: {\n requiredDimensions: 2,\n requiredMeasures: 1,\n minDataPoints: 9,\n idealDataPoints: 25,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 9 },\n fallback: { type: 'warn', message: 'Heatmap requires grid data' },\n },\n switchableTo: ['scatter'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n scatter: {\n id: 'scatter',\n name: 'Scatter Plot',\n description: 'Shows correlation between two variables (Phase 2)',\n intent: 'relationship',\n phase: 'phase2',\n contract: {\n requiredDimensions: 0,\n requiredMeasures: 2,\n minDataPoints: 20,\n idealDataPoints: 100,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 20 },\n fallback: { type: 'show_kpi', message: 'Scatter requires 20+ points' },\n },\n switchableTo: ['bubble', 'heatmap'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n bubble: {\n id: 'bubble',\n name: 'Bubble Chart',\n description: 'Scatter with sized points for third dimension (Phase 2)',\n intent: 'relationship',\n phase: 'phase2',\n contract: {\n requiredDimensions: 0,\n requiredMeasures: 3,\n minDataPoints: 10,\n idealDataPoints: 50,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 10 },\n fallback: { type: 'show_kpi', message: 'Bubble requires 3 measures' },\n },\n switchableTo: ['scatter'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // GEOGRAPHIC CHARTS (Phase 2)\n // ══════════════════════════════════════════════════════════════════════════\n geo: {\n id: 'geo',\n name: 'Geographic Map',\n description: 'Map with regional data markers (Phase 2)',\n intent: 'geo',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1, // geo dimension (country/region)\n requiredMeasures: 1,\n minDataPoints: 1,\n idealDataPoints: 10,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: {},\n fallback: { type: 'hide' },\n },\n switchableTo: ['choropleth'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n choropleth: {\n id: 'choropleth',\n name: 'Choropleth Map',\n description: 'Color-shaded regions by value (Phase 2)',\n intent: 'geo',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 20,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: {},\n fallback: { type: 'hide' },\n },\n switchableTo: ['geo'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // SPECIAL CHARTS\n // ══════════════════════════════════════════════════════════════════════════\n funnel: {\n id: 'funnel',\n name: 'Funnel Chart',\n description: 'Shows conversion through sequential stages',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 5,\n maxDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 7 },\n fallback: { type: 'warn', message: 'Funnel requires sequential stages' },\n },\n switchableTo: ['bar'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n waterfall: {\n id: 'waterfall',\n name: 'Waterfall Chart',\n description: 'Shows cumulative effect of sequential changes (Phase 2)',\n intent: 'comparison',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 6,\n maxDataPoints: 12,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 10 },\n fallback: { type: 'warn', message: 'Waterfall requires sequential data' },\n },\n switchableTo: ['bar', 'column'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n timeline: {\n id: 'timeline',\n name: 'Timeline',\n description: 'Shows events along time axis (Phase 2)',\n intent: 'trend',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 0,\n minDataPoints: 2,\n idealDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: {},\n fallback: { type: 'hide' },\n },\n switchableTo: ['line'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: true,\n },\n};\n\n/* ============================================================================\n CHART FAMILY SWITCHING RULES\n ============================================================================ */\n\n/**\n * Maps intent to allowed chart types for switching.\n * Users can ONLY switch within the same intent family.\n */\nexport const INTENT_CHART_FAMILIES: Record<ChartIntent, ChartTypeId[]> = {\n trend: ['line', 'smooth_line', 'area', 'stacked_area', 'area_100pct'],\n comparison: ['bar', 'column', 'stacked_bar', 'stacked_column', 'column_100pct', 'funnel'],\n composition: ['pie', 'donut'],\n distribution: ['histogram'],\n relationship: ['heatmap'],\n geo: [],\n};\n\n/**\n * Get allowed chart types for switching from a given type.\n */\nexport function getAllowedSwitchTargets(currentType: ChartTypeId): ChartTypeId[] {\n const metadata = CHART_REGISTRY[currentType];\n if (!metadata) return [];\n\n // Only return MVP charts that are in the same family\n return metadata.switchableTo.filter((type) => {\n const targetMeta = CHART_REGISTRY[type];\n return targetMeta && targetMeta.phase === 'mvp';\n });\n}\n\n/**\n * Check if switching from one chart type to another is allowed.\n */\nexport function canSwitchChart(from: ChartTypeId, to: ChartTypeId): boolean {\n const fromMeta = CHART_REGISTRY[from];\n const toMeta = CHART_REGISTRY[to];\n\n if (!fromMeta || !toMeta) return false;\n\n // Must be same intent\n if (fromMeta.intent !== toMeta.intent) return false;\n\n // Must be in allowed list\n return fromMeta.switchableTo.includes(to);\n}\n\n/* ============================================================================\n DATA VALIDATION\n ============================================================================ */\n\nexport interface ChartValidationResult {\n isValid: boolean;\n warnings: string[];\n errors: string[];\n suggestedType?: ChartTypeId;\n fallbackAction?: ChartFallbackBehavior;\n}\n\n/**\n * Validate data against a chart's contract.\n */\nexport function validateChartData(\n chartType: ChartTypeId,\n data: unknown[],\n dimensions: string[],\n measures: string[],\n): ChartValidationResult {\n const metadata = CHART_REGISTRY[chartType];\n if (!metadata) {\n return {\n isValid: false,\n warnings: [],\n errors: [`Unknown chart type: ${chartType}`],\n };\n }\n\n const contract = metadata.contract;\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // Check data points\n if (data.length < contract.minDataPoints) {\n errors.push(`Requires at least ${contract.minDataPoints} data points, got ${data.length}`);\n }\n\n if (contract.maxDataPoints && data.length > contract.maxDataPoints) {\n warnings.push(`Chart works best with ≤${contract.maxDataPoints} items. Consider aggregating.`);\n }\n\n // Check dimensions\n if (dimensions.length < contract.requiredDimensions) {\n errors.push(`Requires ${contract.requiredDimensions} dimension(s), got ${dimensions.length}`);\n }\n\n // Check measures\n if (measures.length < contract.requiredMeasures) {\n errors.push(`Requires ${contract.requiredMeasures} measure(s), got ${measures.length}`);\n }\n\n // Check for negative values if not allowed\n if (!contract.allowNegativeValues && data.length > 0) {\n const hasNegative = data.some((row: unknown) => {\n if (typeof row !== 'object' || row === null) return false;\n return measures.some((m) => {\n const val = (row as Record<string, unknown>)[m];\n return typeof val === 'number' && val < 0;\n });\n });\n if (hasNegative) {\n errors.push('This chart type does not support negative values');\n }\n }\n\n // Check warnings\n if (\n contract.warningThresholds.tooManyCategories &&\n data.length > contract.warningThresholds.tooManyCategories\n ) {\n warnings.push(`Too many categories (${data.length}). Consider grouping smaller values.`);\n }\n\n return {\n isValid: errors.length === 0,\n warnings,\n errors,\n fallbackAction: errors.length > 0 ? contract.fallback : undefined,\n };\n}\n\n/* ============================================================================\n CHART SELECTION HELPERS\n ============================================================================ */\n\n/**\n * Get MVP charts for a given intent.\n */\nexport function getMVPChartsForIntent(intent: ChartIntent): ChartTypeMetadata[] {\n return Object.values(CHART_REGISTRY).filter(\n (meta) => meta.intent === intent && meta.phase === 'mvp',\n );\n}\n\n/**\n * Get the default chart type for an intent.\n */\nexport function getDefaultChartForIntent(intent: ChartIntent): ChartTypeId {\n const defaults: Record<ChartIntent, ChartTypeId> = {\n trend: 'line',\n comparison: 'column',\n composition: 'donut',\n distribution: 'histogram',\n relationship: 'heatmap',\n geo: 'geo',\n };\n return defaults[intent];\n}\n\n/**\n * Suggest the best chart type for given data characteristics.\n */\nexport function suggestChartType(params: {\n hasTimeAxis: boolean;\n dimensionCount: number;\n measureCount: number;\n dataPointCount: number;\n hasNegativeValues: boolean;\n isSequential: boolean;\n}): ChartTypeId {\n const {\n hasTimeAxis,\n dimensionCount,\n measureCount,\n dataPointCount,\n hasNegativeValues,\n isSequential,\n } = params;\n\n // Time-based → trend charts\n if (hasTimeAxis && measureCount >= 1) {\n if (measureCount > 1 && !hasNegativeValues) return 'stacked_area';\n return 'line';\n }\n\n // Sequential stages → funnel\n if (isSequential && !hasNegativeValues && dataPointCount <= 7) {\n return 'funnel';\n }\n\n // Single measure, few categories → composition\n if (measureCount === 1 && dataPointCount <= 6 && !hasNegativeValues) {\n return 'donut';\n }\n\n // Two dimensions → heatmap\n if (dimensionCount === 2 && measureCount === 1) {\n return 'heatmap';\n }\n\n // Default to column chart\n return 'column';\n}\n","/* ============================================================================\n REPORT ENGINE — COMPOSITION VALIDATION\n ============================================================================ */\n\nimport React from 'react';\n\nexport interface ValidationIssue {\n ruleId: string;\n severity: 'error' | 'warning';\n message: string;\n component?: string;\n}\n\nexport interface ReportValidationResult {\n isValid: boolean;\n issues: ValidationIssue[];\n}\n\n/**\n * Validates the structure of a report against narrative rules.\n *\n * Rules:\n * - R1: ExecutiveThesis MUST appear exactly once, at the top (or very near top)\n * - R2: InsightBlock MUST precede any chart it references (Charts must be inside or after insights)\n * - R3: Charts CANNOT appear without a parent InsightBlock (Orphan charts)\n * - R6: Max 3 charts per InsightBlock\n */\nexport function validateReportStructure(children: React.ReactNode): ReportValidationResult {\n const issues: ValidationIssue[] = [];\n const childArray = React.Children.toArray(children);\n\n let hasThesis = false;\n let thesisIndex = -1;\n\n // Helper to get component name safely\n const getComponentName = (child: React.ReactNode): string | undefined => {\n if (!React.isValidElement(child)) return undefined;\n\n const type = child.type as { displayName?: string; name?: string };\n return type.displayName || type.name;\n };\n\n const isChart = (name?: string) => {\n return (\n name &&\n (name.endsWith('Chart') ||\n name === 'MBTIRadar' ||\n name === 'MBTITypeGrid' ||\n name === 'KeyMetric') // Metric is evidence too\n );\n };\n\n // First pass: Top-level analysis\n childArray.forEach((child, index) => {\n const name = getComponentName(child);\n\n if (name === 'ExecutiveThesis') {\n if (hasThesis) {\n issues.push({\n ruleId: 'R1',\n severity: 'error',\n message: 'Only one ExecutiveThesis is allowed per report.',\n component: 'ExecutiveThesis',\n });\n }\n hasThesis = true;\n thesisIndex = index;\n }\n\n // Check for orphan charts at root level\n if (isChart(name)) {\n issues.push({\n ruleId: 'R3',\n severity: 'error',\n message: `Orphan chart detected: <${name} />. Charts must be placed inside an InsightBlock or EvidenceGroup.`,\n component: name,\n });\n }\n\n // Check InsightBlock constraints\n if (name === 'InsightBlock' && React.isValidElement(child)) {\n validateInsightBlock(child, issues);\n }\n });\n\n // R1: Check Thesis existence and position\n if (!hasThesis) {\n issues.push({\n ruleId: 'R1',\n severity: 'error',\n message: 'Report must contain an ExecutiveThesis.',\n });\n } else if (thesisIndex > 2) {\n // Allow some spacers/headers before it\n issues.push({\n ruleId: 'R1',\n severity: 'warning',\n message: 'ExecutiveThesis should be the first major component in the report.',\n });\n }\n\n return {\n isValid: issues.filter((i) => i.severity === 'error').length === 0,\n issues,\n };\n}\n\nfunction validateInsightBlock(node: React.ReactElement, issues: ValidationIssue[]) {\n const children = node.props.children;\n const childArray = React.Children.toArray(children);\n\n // Count charts inside this block (recursive check not strictly needed if structure is flat)\n let chartsInBlock = 0;\n\n const countCharts = (nodes: React.ReactNode[]) => {\n nodes.forEach((n) => {\n const name = getComponentName(n);\n if (isChart(name)) {\n chartsInBlock++;\n }\n // Check inside EvidenceGroup\n if (name === 'EvidenceGroup' && React.isValidElement(n)) {\n countCharts(React.Children.toArray(n.props.children));\n }\n });\n };\n\n countCharts(childArray);\n\n // R6: Max 3 charts\n if (chartsInBlock > 3) {\n issues.push({\n ruleId: 'R6',\n severity: 'warning',\n message: `InsightBlock contains ${chartsInBlock} charts. Recommended maximum is 3 to prevent data dumping.`,\n component: 'InsightBlock',\n });\n }\n}\n\n// Duplicate helper for local scope\nconst getComponentName = (child: React.ReactNode): string | undefined => {\n if (!React.isValidElement(child)) return undefined;\n const type = child.type as { displayName?: string; name?: string };\n return type.displayName || type.name;\n};\n\nconst isChart = (name?: string) => {\n return (\n name &&\n (name.endsWith('Chart') ||\n name === 'MBTIRadar' ||\n name === 'MBTITypeGrid' ||\n name === 'KeyMetric')\n );\n};\n"]}
@@ -1,9 +1,104 @@
1
- import { R as ReportModeConfig, C as ConfidenceThreshold, I as InsightType, a as InsightTypeContract, b as ConfidenceLevel, c as ReportMode, A as AnalyticalState, D as DataStateDetails } from '../chart-types-BGVVO-zl.cjs';
2
- export { d as CHART_REGISTRY, e as ChartDataContract, f as ChartFallbackBehavior, g as ChartIntent, h as ChartPhase, i as ChartType, j as ChartTypeId, k as ChartTypeMetadata, l as ChartValidationResult, m as ComparisonChartType, n as CompositionChartType, o as DataContract, p as DistributionChartType, F as FallbackBehavior, G as GeoChartType, q as INTENT_CHART_FAMILIES, M as MBTIType, r as RelationshipChartType, T as TrendChartType, s as TrendDirection, t as canSwitchChart, u as getAllowedSwitchTargets, v as getDefaultChartForIntent, w as getMVPChartsForIntent, x as suggestChartType, y as validateChartData } from '../chart-types-BGVVO-zl.cjs';
3
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
2
  import React__default from 'react';
5
- export { C as CaveatBlock, a as CaveatBlockProps, b as ConfidenceIndicator, c as ConfidenceIndicatorProps, D as DataCoverageBadge, d as DataCoverageBadgeProps, e as DataStateIndicator, f as DataStateIndicatorProps, E as EvidenceGroup, g as EvidenceGroupProps, h as ExecutiveThesis, i as ExecutiveThesisProps, j as ExportFormat, k as ExportMenu, l as ExportMenuProps, m as ExportOption, I as InsightBlock, n as InsightBlockProps, K as KeyMetric, o as KeyMetricProps, M as MethodologyNote, p as MethodologyNoteLabels, q as MethodologyNoteProps, R as ReportShell, r as ReportShellProps, T as TrendIndicator, s as TrendIndicatorProps } from '../ExportMenu-A2TLFiVv.cjs';
6
- export { S as Select, a as SelectContent, b as SelectContentProps, c as SelectGroup, d as SelectGroupProps, e as SelectItem, f as SelectItemProps, g as SelectProps, h as SelectSeparator, i as SelectTrigger, j as SelectTriggerProps } from '../Select-BdZmK0Lt.cjs';
3
+
4
+ /**
5
+ * Insight types define the semantic category of an insight.
6
+ * Each type constrains which charts can be used as evidence.
7
+ */
8
+ type InsightType = 'performance-delta' | 'behavioral-correlation' | 'funnel-leakage' | 'audience-mismatch' | 'message-fatigue' | 'psychological-resonance' | 'timing-pattern' | 'segment-outperformance' | 'anomaly-detection' | 'competitive-benchmark';
9
+ /**
10
+ * Analytical states represent the data quality status of a component.
11
+ */
12
+ type AnalyticalState = 'VALID' | 'INSUFFICIENT_SAMPLE' | 'LOW_CONFIDENCE' | 'PARTIAL_TIME_WINDOW' | 'DATA_SKEW_DETECTED' | 'CONFLICTING_SIGNALS' | 'INFERRED_NOT_OBSERVED' | 'STALE_DATA' | 'FIELD_MISSING' | 'CALCULATION_ERROR';
13
+ /**
14
+ * Report mode determines the level of detail shown.
15
+ */
16
+ type ReportMode = 'executive' | 'analyst';
17
+ /**
18
+ * Configuration for report mode features.
19
+ */
20
+ interface ReportModeConfig {
21
+ mode: ReportMode;
22
+ features: {
23
+ showMethodology: boolean;
24
+ showConfidenceScores: boolean;
25
+ showRawData: boolean;
26
+ showStatisticalTests: boolean;
27
+ chartDetailLevel: 'summary' | 'detailed';
28
+ maxInsightsShown: number;
29
+ allowDrilldown: boolean;
30
+ };
31
+ }
32
+ /**
33
+ * Confidence level thresholds and labels.
34
+ */
35
+ type ConfidenceLevel = 'high' | 'moderate' | 'low' | 'insufficient';
36
+ interface ConfidenceThreshold {
37
+ level: ConfidenceLevel;
38
+ min: number;
39
+ max: number;
40
+ label: string;
41
+ color: string;
42
+ }
43
+ /**
44
+ * Data contract for analytical components.
45
+ */
46
+ interface DataContract {
47
+ requiredFields: string[];
48
+ optionalFields: string[];
49
+ minimums: {
50
+ sampleSize: number;
51
+ completeness: number;
52
+ timeSpan?: number;
53
+ };
54
+ fallbackBehavior: FallbackBehavior;
55
+ }
56
+ type FallbackBehavior = {
57
+ type: 'hide';
58
+ } | {
59
+ type: 'disable';
60
+ message: string;
61
+ } | {
62
+ type: 'warn';
63
+ severity: 'low' | 'medium' | 'high';
64
+ } | {
65
+ type: 'substitute';
66
+ component: string;
67
+ };
68
+ /**
69
+ * Insight type contract defining allowed charts and requirements.
70
+ */
71
+ interface InsightTypeContract {
72
+ type: InsightType;
73
+ allowedCharts: string[];
74
+ requiredFields: string[];
75
+ minSampleSize: number;
76
+ headlinePattern: string;
77
+ recommendationFormats: string[];
78
+ }
79
+ /**
80
+ * Trend direction for metrics.
81
+ */
82
+ type TrendDirection = 'up' | 'down' | 'neutral';
83
+ /**
84
+ * State details for DataStateIndicator.
85
+ */
86
+ interface DataStateDetails {
87
+ sampleSize?: number;
88
+ requiredSize?: number;
89
+ confidence?: number;
90
+ missingFields?: string[];
91
+ staleDays?: number;
92
+ message?: string;
93
+ }
94
+ /**
95
+ * Chart types supported by the report engine.
96
+ */
97
+ type ChartType = 'LineChart' | 'BarChart' | 'PieChart' | 'AreaChart' | 'FunnelChart' | 'HeatmapChart' | 'MBTIRadar' | 'MBTITypeGrid' | 'KeyMetric';
98
+ /**
99
+ * MBTI personality types.
100
+ */
101
+ type MBTIType = 'INTJ' | 'INTP' | 'ENTJ' | 'ENTP' | 'INFJ' | 'INFP' | 'ENFJ' | 'ENFP' | 'ISTJ' | 'ISFJ' | 'ESTJ' | 'ESFJ' | 'ISTP' | 'ISFP' | 'ESTP' | 'ESFP';
7
102
 
8
103
  /**
9
104
  * Executive mode configuration - minimal detail, boardroom-ready.
@@ -192,6 +287,114 @@ interface UseChartDataResult<T> {
192
287
  */
193
288
  declare function useChartData<T extends Record<string, unknown>>({ data, requiredFields, minSampleSize, }: UseChartDataParams<T>): UseChartDataResult<T>;
194
289
 
290
+ /**
291
+ * Chart intent defines the semantic purpose of visualization.
292
+ * This is the primary classifier that governs switching rules.
293
+ */
294
+ type ChartIntent = 'trend' | 'comparison' | 'composition' | 'distribution' | 'relationship' | 'geo';
295
+ /**
296
+ * All supported chart types organized by intent.
297
+ */
298
+ type TrendChartType = 'line' | 'smooth_line' | 'area' | 'stacked_area' | 'area_100pct';
299
+ type ComparisonChartType = 'bar' | 'column' | 'stacked_bar' | 'stacked_column' | 'column_100pct' | 'combo';
300
+ type CompositionChartType = 'pie' | 'donut' | 'treemap';
301
+ type DistributionChartType = 'histogram' | 'radar';
302
+ type RelationshipChartType = 'scatter' | 'bubble' | 'heatmap';
303
+ type GeoChartType = 'geo' | 'choropleth';
304
+ /**
305
+ * Union of all chart types
306
+ */
307
+ type ChartTypeId = TrendChartType | ComparisonChartType | CompositionChartType | DistributionChartType | RelationshipChartType | GeoChartType | 'funnel' | 'waterfall' | 'timeline';
308
+ /**
309
+ * Chart phase classification
310
+ */
311
+ type ChartPhase = 'mvp' | 'phase2' | 'phase3';
312
+ interface ChartTypeMetadata {
313
+ id: ChartTypeId;
314
+ name: string;
315
+ description: string;
316
+ intent: ChartIntent;
317
+ phase: ChartPhase;
318
+ contract: ChartDataContract;
319
+ switchableTo: ChartTypeId[];
320
+ supportsStacking: boolean;
321
+ supportsMultipleSeries: boolean;
322
+ requiresTimeAxis: boolean;
323
+ maxCategories?: number;
324
+ maxSlices?: number;
325
+ }
326
+ interface ChartDataContract {
327
+ requiredDimensions: number;
328
+ requiredMeasures: number;
329
+ minDataPoints: number;
330
+ idealDataPoints: number;
331
+ maxDataPoints?: number;
332
+ allowNegativeValues: boolean;
333
+ requireNonZeroTotal: boolean;
334
+ warningThresholds: {
335
+ tooManyCategories?: number;
336
+ imbalancedRatio?: number;
337
+ sparseData?: number;
338
+ };
339
+ fallback: ChartFallbackBehavior;
340
+ }
341
+ type ChartFallbackBehavior = {
342
+ type: 'hide';
343
+ } | {
344
+ type: 'show_kpi';
345
+ message: string;
346
+ } | {
347
+ type: 'aggregate';
348
+ strategy: 'other_bucket' | 'top_n';
349
+ } | {
350
+ type: 'warn';
351
+ message: string;
352
+ };
353
+ declare const CHART_REGISTRY: Record<ChartTypeId, ChartTypeMetadata>;
354
+ /**
355
+ * Maps intent to allowed chart types for switching.
356
+ * Users can ONLY switch within the same intent family.
357
+ */
358
+ declare const INTENT_CHART_FAMILIES: Record<ChartIntent, ChartTypeId[]>;
359
+ /**
360
+ * Get allowed chart types for switching from a given type.
361
+ */
362
+ declare function getAllowedSwitchTargets(currentType: ChartTypeId): ChartTypeId[];
363
+ /**
364
+ * Check if switching from one chart type to another is allowed.
365
+ */
366
+ declare function canSwitchChart(from: ChartTypeId, to: ChartTypeId): boolean;
367
+ interface ChartValidationResult {
368
+ isValid: boolean;
369
+ warnings: string[];
370
+ errors: string[];
371
+ suggestedType?: ChartTypeId;
372
+ fallbackAction?: ChartFallbackBehavior;
373
+ }
374
+ /**
375
+ * Validate data against a chart's contract.
376
+ */
377
+ declare function validateChartData(chartType: ChartTypeId, data: unknown[], dimensions: string[], measures: string[]): ChartValidationResult;
378
+ /**
379
+ * Get MVP charts for a given intent.
380
+ */
381
+ declare function getMVPChartsForIntent(intent: ChartIntent): ChartTypeMetadata[];
382
+ /**
383
+ * Get the default chart type for an intent.
384
+ */
385
+ declare function getDefaultChartForIntent(intent: ChartIntent): ChartTypeId;
386
+ /**
387
+ * Suggest the best chart type for given data characteristics.
388
+ */
389
+ declare function suggestChartType(params: {
390
+ hasTimeAxis: boolean;
391
+ dimensionCount: number;
392
+ measureCount: number;
393
+ dataPointCount: number;
394
+ hasNegativeValues: boolean;
395
+ isSequential: boolean;
396
+ }): ChartTypeId;
397
+
195
398
  interface ValidationIssue {
196
399
  ruleId: string;
197
400
  severity: 'error' | 'warning';
@@ -213,4 +416,4 @@ interface ReportValidationResult {
213
416
  */
214
417
  declare function validateReportStructure(children: React__default.ReactNode): ReportValidationResult;
215
418
 
216
- export { ANALYST_MODE, ANALYTICAL_STATE_CONFIG, AnalyticalState, CONFIDENCE_THRESHOLDS, ConfidenceLevel, type ConfidenceParams, ConfidenceThreshold, DataStateDetails, EXECUTIVE_MODE, INSIGHT_TYPE_CONTRACTS, InsightType, InsightTypeContract, MINIMUM_SAMPLE_SIZES, ReportMode, ReportModeConfig, ReportModeProvider, type ReportModeProviderProps, type ReportValidationResult, type UseChartDataParams, type UseChartDataResult, type UseDataStateParams, type UseDataStateResult, type ValidationIssue, calculateCompleteness, calculateConfidence, calculateNormalizedVariance, calculateRecency, getConfidenceLevel, getConfidenceThreshold, useChartData, useDataState, useReportMode, validateReportStructure };
419
+ export { ANALYST_MODE, ANALYTICAL_STATE_CONFIG, type AnalyticalState, CHART_REGISTRY, CONFIDENCE_THRESHOLDS, type ChartDataContract, type ChartFallbackBehavior, type ChartIntent, type ChartPhase, type ChartType, type ChartTypeId, type ChartTypeMetadata, type ChartValidationResult, type ComparisonChartType, type CompositionChartType, type ConfidenceLevel, type ConfidenceParams, type ConfidenceThreshold, type DataContract, type DataStateDetails, type DistributionChartType, EXECUTIVE_MODE, type FallbackBehavior, type GeoChartType, INSIGHT_TYPE_CONTRACTS, INTENT_CHART_FAMILIES, type InsightType, type InsightTypeContract, type MBTIType, MINIMUM_SAMPLE_SIZES, type RelationshipChartType, type ReportMode, type ReportModeConfig, ReportModeProvider, type ReportModeProviderProps, type ReportValidationResult, type TrendChartType, type TrendDirection, type UseChartDataParams, type UseChartDataResult, type UseDataStateParams, type UseDataStateResult, type ValidationIssue, calculateCompleteness, calculateConfidence, calculateNormalizedVariance, calculateRecency, canSwitchChart, getAllowedSwitchTargets, getConfidenceLevel, getConfidenceThreshold, getDefaultChartForIntent, getMVPChartsForIntent, suggestChartType, useChartData, useDataState, useReportMode, validateChartData, validateReportStructure };
@@ -1,9 +1,104 @@
1
- import { R as ReportModeConfig, C as ConfidenceThreshold, I as InsightType, a as InsightTypeContract, b as ConfidenceLevel, c as ReportMode, A as AnalyticalState, D as DataStateDetails } from '../chart-types-BGVVO-zl.js';
2
- export { d as CHART_REGISTRY, e as ChartDataContract, f as ChartFallbackBehavior, g as ChartIntent, h as ChartPhase, i as ChartType, j as ChartTypeId, k as ChartTypeMetadata, l as ChartValidationResult, m as ComparisonChartType, n as CompositionChartType, o as DataContract, p as DistributionChartType, F as FallbackBehavior, G as GeoChartType, q as INTENT_CHART_FAMILIES, M as MBTIType, r as RelationshipChartType, T as TrendChartType, s as TrendDirection, t as canSwitchChart, u as getAllowedSwitchTargets, v as getDefaultChartForIntent, w as getMVPChartsForIntent, x as suggestChartType, y as validateChartData } from '../chart-types-BGVVO-zl.js';
3
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
2
  import React__default from 'react';
5
- export { C as CaveatBlock, a as CaveatBlockProps, b as ConfidenceIndicator, c as ConfidenceIndicatorProps, D as DataCoverageBadge, d as DataCoverageBadgeProps, e as DataStateIndicator, f as DataStateIndicatorProps, E as EvidenceGroup, g as EvidenceGroupProps, h as ExecutiveThesis, i as ExecutiveThesisProps, j as ExportFormat, k as ExportMenu, l as ExportMenuProps, m as ExportOption, I as InsightBlock, n as InsightBlockProps, K as KeyMetric, o as KeyMetricProps, M as MethodologyNote, p as MethodologyNoteLabels, q as MethodologyNoteProps, R as ReportShell, r as ReportShellProps, T as TrendIndicator, s as TrendIndicatorProps } from '../ExportMenu-C8qck5AT.js';
6
- export { S as Select, a as SelectContent, b as SelectContentProps, c as SelectGroup, d as SelectGroupProps, e as SelectItem, f as SelectItemProps, g as SelectProps, h as SelectSeparator, i as SelectTrigger, j as SelectTriggerProps } from '../Select-BdZmK0Lt.js';
3
+
4
+ /**
5
+ * Insight types define the semantic category of an insight.
6
+ * Each type constrains which charts can be used as evidence.
7
+ */
8
+ type InsightType = 'performance-delta' | 'behavioral-correlation' | 'funnel-leakage' | 'audience-mismatch' | 'message-fatigue' | 'psychological-resonance' | 'timing-pattern' | 'segment-outperformance' | 'anomaly-detection' | 'competitive-benchmark';
9
+ /**
10
+ * Analytical states represent the data quality status of a component.
11
+ */
12
+ type AnalyticalState = 'VALID' | 'INSUFFICIENT_SAMPLE' | 'LOW_CONFIDENCE' | 'PARTIAL_TIME_WINDOW' | 'DATA_SKEW_DETECTED' | 'CONFLICTING_SIGNALS' | 'INFERRED_NOT_OBSERVED' | 'STALE_DATA' | 'FIELD_MISSING' | 'CALCULATION_ERROR';
13
+ /**
14
+ * Report mode determines the level of detail shown.
15
+ */
16
+ type ReportMode = 'executive' | 'analyst';
17
+ /**
18
+ * Configuration for report mode features.
19
+ */
20
+ interface ReportModeConfig {
21
+ mode: ReportMode;
22
+ features: {
23
+ showMethodology: boolean;
24
+ showConfidenceScores: boolean;
25
+ showRawData: boolean;
26
+ showStatisticalTests: boolean;
27
+ chartDetailLevel: 'summary' | 'detailed';
28
+ maxInsightsShown: number;
29
+ allowDrilldown: boolean;
30
+ };
31
+ }
32
+ /**
33
+ * Confidence level thresholds and labels.
34
+ */
35
+ type ConfidenceLevel = 'high' | 'moderate' | 'low' | 'insufficient';
36
+ interface ConfidenceThreshold {
37
+ level: ConfidenceLevel;
38
+ min: number;
39
+ max: number;
40
+ label: string;
41
+ color: string;
42
+ }
43
+ /**
44
+ * Data contract for analytical components.
45
+ */
46
+ interface DataContract {
47
+ requiredFields: string[];
48
+ optionalFields: string[];
49
+ minimums: {
50
+ sampleSize: number;
51
+ completeness: number;
52
+ timeSpan?: number;
53
+ };
54
+ fallbackBehavior: FallbackBehavior;
55
+ }
56
+ type FallbackBehavior = {
57
+ type: 'hide';
58
+ } | {
59
+ type: 'disable';
60
+ message: string;
61
+ } | {
62
+ type: 'warn';
63
+ severity: 'low' | 'medium' | 'high';
64
+ } | {
65
+ type: 'substitute';
66
+ component: string;
67
+ };
68
+ /**
69
+ * Insight type contract defining allowed charts and requirements.
70
+ */
71
+ interface InsightTypeContract {
72
+ type: InsightType;
73
+ allowedCharts: string[];
74
+ requiredFields: string[];
75
+ minSampleSize: number;
76
+ headlinePattern: string;
77
+ recommendationFormats: string[];
78
+ }
79
+ /**
80
+ * Trend direction for metrics.
81
+ */
82
+ type TrendDirection = 'up' | 'down' | 'neutral';
83
+ /**
84
+ * State details for DataStateIndicator.
85
+ */
86
+ interface DataStateDetails {
87
+ sampleSize?: number;
88
+ requiredSize?: number;
89
+ confidence?: number;
90
+ missingFields?: string[];
91
+ staleDays?: number;
92
+ message?: string;
93
+ }
94
+ /**
95
+ * Chart types supported by the report engine.
96
+ */
97
+ type ChartType = 'LineChart' | 'BarChart' | 'PieChart' | 'AreaChart' | 'FunnelChart' | 'HeatmapChart' | 'MBTIRadar' | 'MBTITypeGrid' | 'KeyMetric';
98
+ /**
99
+ * MBTI personality types.
100
+ */
101
+ type MBTIType = 'INTJ' | 'INTP' | 'ENTJ' | 'ENTP' | 'INFJ' | 'INFP' | 'ENFJ' | 'ENFP' | 'ISTJ' | 'ISFJ' | 'ESTJ' | 'ESFJ' | 'ISTP' | 'ISFP' | 'ESTP' | 'ESFP';
7
102
 
8
103
  /**
9
104
  * Executive mode configuration - minimal detail, boardroom-ready.
@@ -192,6 +287,114 @@ interface UseChartDataResult<T> {
192
287
  */
193
288
  declare function useChartData<T extends Record<string, unknown>>({ data, requiredFields, minSampleSize, }: UseChartDataParams<T>): UseChartDataResult<T>;
194
289
 
290
+ /**
291
+ * Chart intent defines the semantic purpose of visualization.
292
+ * This is the primary classifier that governs switching rules.
293
+ */
294
+ type ChartIntent = 'trend' | 'comparison' | 'composition' | 'distribution' | 'relationship' | 'geo';
295
+ /**
296
+ * All supported chart types organized by intent.
297
+ */
298
+ type TrendChartType = 'line' | 'smooth_line' | 'area' | 'stacked_area' | 'area_100pct';
299
+ type ComparisonChartType = 'bar' | 'column' | 'stacked_bar' | 'stacked_column' | 'column_100pct' | 'combo';
300
+ type CompositionChartType = 'pie' | 'donut' | 'treemap';
301
+ type DistributionChartType = 'histogram' | 'radar';
302
+ type RelationshipChartType = 'scatter' | 'bubble' | 'heatmap';
303
+ type GeoChartType = 'geo' | 'choropleth';
304
+ /**
305
+ * Union of all chart types
306
+ */
307
+ type ChartTypeId = TrendChartType | ComparisonChartType | CompositionChartType | DistributionChartType | RelationshipChartType | GeoChartType | 'funnel' | 'waterfall' | 'timeline';
308
+ /**
309
+ * Chart phase classification
310
+ */
311
+ type ChartPhase = 'mvp' | 'phase2' | 'phase3';
312
+ interface ChartTypeMetadata {
313
+ id: ChartTypeId;
314
+ name: string;
315
+ description: string;
316
+ intent: ChartIntent;
317
+ phase: ChartPhase;
318
+ contract: ChartDataContract;
319
+ switchableTo: ChartTypeId[];
320
+ supportsStacking: boolean;
321
+ supportsMultipleSeries: boolean;
322
+ requiresTimeAxis: boolean;
323
+ maxCategories?: number;
324
+ maxSlices?: number;
325
+ }
326
+ interface ChartDataContract {
327
+ requiredDimensions: number;
328
+ requiredMeasures: number;
329
+ minDataPoints: number;
330
+ idealDataPoints: number;
331
+ maxDataPoints?: number;
332
+ allowNegativeValues: boolean;
333
+ requireNonZeroTotal: boolean;
334
+ warningThresholds: {
335
+ tooManyCategories?: number;
336
+ imbalancedRatio?: number;
337
+ sparseData?: number;
338
+ };
339
+ fallback: ChartFallbackBehavior;
340
+ }
341
+ type ChartFallbackBehavior = {
342
+ type: 'hide';
343
+ } | {
344
+ type: 'show_kpi';
345
+ message: string;
346
+ } | {
347
+ type: 'aggregate';
348
+ strategy: 'other_bucket' | 'top_n';
349
+ } | {
350
+ type: 'warn';
351
+ message: string;
352
+ };
353
+ declare const CHART_REGISTRY: Record<ChartTypeId, ChartTypeMetadata>;
354
+ /**
355
+ * Maps intent to allowed chart types for switching.
356
+ * Users can ONLY switch within the same intent family.
357
+ */
358
+ declare const INTENT_CHART_FAMILIES: Record<ChartIntent, ChartTypeId[]>;
359
+ /**
360
+ * Get allowed chart types for switching from a given type.
361
+ */
362
+ declare function getAllowedSwitchTargets(currentType: ChartTypeId): ChartTypeId[];
363
+ /**
364
+ * Check if switching from one chart type to another is allowed.
365
+ */
366
+ declare function canSwitchChart(from: ChartTypeId, to: ChartTypeId): boolean;
367
+ interface ChartValidationResult {
368
+ isValid: boolean;
369
+ warnings: string[];
370
+ errors: string[];
371
+ suggestedType?: ChartTypeId;
372
+ fallbackAction?: ChartFallbackBehavior;
373
+ }
374
+ /**
375
+ * Validate data against a chart's contract.
376
+ */
377
+ declare function validateChartData(chartType: ChartTypeId, data: unknown[], dimensions: string[], measures: string[]): ChartValidationResult;
378
+ /**
379
+ * Get MVP charts for a given intent.
380
+ */
381
+ declare function getMVPChartsForIntent(intent: ChartIntent): ChartTypeMetadata[];
382
+ /**
383
+ * Get the default chart type for an intent.
384
+ */
385
+ declare function getDefaultChartForIntent(intent: ChartIntent): ChartTypeId;
386
+ /**
387
+ * Suggest the best chart type for given data characteristics.
388
+ */
389
+ declare function suggestChartType(params: {
390
+ hasTimeAxis: boolean;
391
+ dimensionCount: number;
392
+ measureCount: number;
393
+ dataPointCount: number;
394
+ hasNegativeValues: boolean;
395
+ isSequential: boolean;
396
+ }): ChartTypeId;
397
+
195
398
  interface ValidationIssue {
196
399
  ruleId: string;
197
400
  severity: 'error' | 'warning';
@@ -213,4 +416,4 @@ interface ReportValidationResult {
213
416
  */
214
417
  declare function validateReportStructure(children: React__default.ReactNode): ReportValidationResult;
215
418
 
216
- export { ANALYST_MODE, ANALYTICAL_STATE_CONFIG, AnalyticalState, CONFIDENCE_THRESHOLDS, ConfidenceLevel, type ConfidenceParams, ConfidenceThreshold, DataStateDetails, EXECUTIVE_MODE, INSIGHT_TYPE_CONTRACTS, InsightType, InsightTypeContract, MINIMUM_SAMPLE_SIZES, ReportMode, ReportModeConfig, ReportModeProvider, type ReportModeProviderProps, type ReportValidationResult, type UseChartDataParams, type UseChartDataResult, type UseDataStateParams, type UseDataStateResult, type ValidationIssue, calculateCompleteness, calculateConfidence, calculateNormalizedVariance, calculateRecency, getConfidenceLevel, getConfidenceThreshold, useChartData, useDataState, useReportMode, validateReportStructure };
419
+ export { ANALYST_MODE, ANALYTICAL_STATE_CONFIG, type AnalyticalState, CHART_REGISTRY, CONFIDENCE_THRESHOLDS, type ChartDataContract, type ChartFallbackBehavior, type ChartIntent, type ChartPhase, type ChartType, type ChartTypeId, type ChartTypeMetadata, type ChartValidationResult, type ComparisonChartType, type CompositionChartType, type ConfidenceLevel, type ConfidenceParams, type ConfidenceThreshold, type DataContract, type DataStateDetails, type DistributionChartType, EXECUTIVE_MODE, type FallbackBehavior, type GeoChartType, INSIGHT_TYPE_CONTRACTS, INTENT_CHART_FAMILIES, type InsightType, type InsightTypeContract, type MBTIType, MINIMUM_SAMPLE_SIZES, type RelationshipChartType, type ReportMode, type ReportModeConfig, ReportModeProvider, type ReportModeProviderProps, type ReportValidationResult, type TrendChartType, type TrendDirection, type UseChartDataParams, type UseChartDataResult, type UseDataStateParams, type UseDataStateResult, type ValidationIssue, calculateCompleteness, calculateConfidence, calculateNormalizedVariance, calculateRecency, canSwitchChart, getAllowedSwitchTargets, getConfidenceLevel, getConfidenceThreshold, getDefaultChartForIntent, getMVPChartsForIntent, suggestChartType, useChartData, useDataState, useReportMode, validateChartData, validateReportStructure };