@salesmind-ai/design-system 0.3.3 → 0.3.4

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 (215) hide show
  1. package/dist/{SectionShell-BfBw5q0Y.d.cts → SectionShell-GlglHCzz.d.cts} +1 -0
  2. package/dist/{SectionShell-BfBw5q0Y.d.ts → SectionShell-GlglHCzz.d.ts} +1 -0
  3. package/dist/StatsSection-B8iD9L-o.d.ts +68 -0
  4. package/dist/StatsSection-wgd8Vge1.d.cts +68 -0
  5. package/dist/admin/index.cjs +2928 -68
  6. package/dist/admin/index.cjs.map +1 -1
  7. package/dist/admin/index.js +2915 -5
  8. package/dist/admin/index.js.map +1 -1
  9. package/dist/blog/index.cjs +1064 -53
  10. package/dist/blog/index.cjs.map +1 -1
  11. package/dist/blog/index.d.cts +1 -1
  12. package/dist/blog/index.d.ts +1 -1
  13. package/dist/blog/index.js +1054 -8
  14. package/dist/blog/index.js.map +1 -1
  15. package/dist/charts/index.cjs +2694 -46
  16. package/dist/charts/index.cjs.map +1 -1
  17. package/dist/charts/index.js +2680 -3
  18. package/dist/charts/index.js.map +1 -1
  19. package/dist/core/index.cjs +4333 -807
  20. package/dist/core/index.cjs.map +1 -1
  21. package/dist/core/index.js +4130 -14
  22. package/dist/core/index.js.map +1 -1
  23. package/dist/i18n/index.cjs +558 -86
  24. package/dist/i18n/index.cjs.map +1 -1
  25. package/dist/i18n/index.js +544 -1
  26. package/dist/i18n/index.js.map +1 -1
  27. package/dist/index.cjs +17140 -1432
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.css +24 -13
  30. package/dist/index.css.map +1 -1
  31. package/dist/index.d.cts +2 -2
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +16785 -31
  34. package/dist/index.js.map +1 -1
  35. package/dist/marketing/index.cjs +3072 -142
  36. package/dist/marketing/index.cjs.map +1 -1
  37. package/dist/marketing/index.d.cts +1 -1
  38. package/dist/marketing/index.d.ts +1 -1
  39. package/dist/marketing/index.js +3042 -11
  40. package/dist/marketing/index.js.map +1 -1
  41. package/dist/motion/index.cjs +1222 -26
  42. package/dist/motion/index.cjs.map +1 -1
  43. package/dist/motion/index.js +1215 -2
  44. package/dist/motion/index.js.map +1 -1
  45. package/dist/nav/index.cjs +1518 -101
  46. package/dist/nav/index.cjs.map +1 -1
  47. package/dist/nav/index.css +24 -13
  48. package/dist/nav/index.css.map +1 -1
  49. package/dist/nav/index.js +1498 -4
  50. package/dist/nav/index.js.map +1 -1
  51. package/dist/report/index.cjs +2403 -171
  52. package/dist/report/index.cjs.map +1 -1
  53. package/dist/report/index.js +2363 -3
  54. package/dist/report/index.js.map +1 -1
  55. package/dist/sections/index.cjs +382 -28
  56. package/dist/sections/index.cjs.map +1 -1
  57. package/dist/sections/index.d.cts +15 -69
  58. package/dist/sections/index.d.ts +15 -69
  59. package/dist/sections/index.js +376 -4
  60. package/dist/sections/index.js.map +1 -1
  61. package/dist/social-proof/index.cjs +1250 -53
  62. package/dist/social-proof/index.cjs.map +1 -1
  63. package/dist/social-proof/index.d.cts +1 -1
  64. package/dist/social-proof/index.d.ts +1 -1
  65. package/dist/social-proof/index.js +1235 -6
  66. package/dist/social-proof/index.js.map +1 -1
  67. package/dist/theme/index.cjs +565 -38
  68. package/dist/theme/index.cjs.map +1 -1
  69. package/dist/theme/index.js +555 -2
  70. package/dist/theme/index.js.map +1 -1
  71. package/dist/web/client/index.cjs +491 -38
  72. package/dist/web/client/index.cjs.map +1 -1
  73. package/dist/web/client/index.js +483 -4
  74. package/dist/web/client/index.js.map +1 -1
  75. package/dist/web/index.cjs +1346 -158
  76. package/dist/web/index.cjs.map +1 -1
  77. package/dist/web/index.js +1305 -9
  78. package/dist/web/index.js.map +1 -1
  79. package/dist/web/server/index.cjs +563 -26
  80. package/dist/web/server/index.cjs.map +1 -1
  81. package/dist/web/server/index.js +560 -1
  82. package/dist/web/server/index.js.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/chunk-2GARWEJK.js +0 -17
  85. package/dist/chunk-2GARWEJK.js.map +0 -1
  86. package/dist/chunk-3NKRFUAR.js +0 -37
  87. package/dist/chunk-3NKRFUAR.js.map +0 -1
  88. package/dist/chunk-3TGSIILM.cjs +0 -201
  89. package/dist/chunk-3TGSIILM.cjs.map +0 -1
  90. package/dist/chunk-4GM5BGBN.cjs +0 -801
  91. package/dist/chunk-4GM5BGBN.cjs.map +0 -1
  92. package/dist/chunk-5LGDEZWY.cjs +0 -2434
  93. package/dist/chunk-5LGDEZWY.cjs.map +0 -1
  94. package/dist/chunk-6H4DSTXR.js +0 -786
  95. package/dist/chunk-6H4DSTXR.js.map +0 -1
  96. package/dist/chunk-6UNG76Y2.js +0 -153
  97. package/dist/chunk-6UNG76Y2.js.map +0 -1
  98. package/dist/chunk-7PX2AZ6Y.js +0 -39
  99. package/dist/chunk-7PX2AZ6Y.js.map +0 -1
  100. package/dist/chunk-B6AVAX4F.js +0 -1415
  101. package/dist/chunk-B6AVAX4F.js.map +0 -1
  102. package/dist/chunk-BILT5KD3.js +0 -264
  103. package/dist/chunk-BILT5KD3.js.map +0 -1
  104. package/dist/chunk-C2BCDNAV.js +0 -24
  105. package/dist/chunk-C2BCDNAV.js.map +0 -1
  106. package/dist/chunk-CH42VPWE.cjs +0 -421
  107. package/dist/chunk-CH42VPWE.cjs.map +0 -1
  108. package/dist/chunk-CJ2MKVAF.cjs +0 -46
  109. package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
  110. package/dist/chunk-DP74LUXG.cjs +0 -98
  111. package/dist/chunk-DP74LUXG.cjs.map +0 -1
  112. package/dist/chunk-E7D6EKJ4.cjs +0 -44
  113. package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
  114. package/dist/chunk-ECXBTUH6.cjs +0 -584
  115. package/dist/chunk-ECXBTUH6.cjs.map +0 -1
  116. package/dist/chunk-EFRAP5ES.js +0 -157
  117. package/dist/chunk-EFRAP5ES.js.map +0 -1
  118. package/dist/chunk-F6YYWMME.js +0 -485
  119. package/dist/chunk-F6YYWMME.js.map +0 -1
  120. package/dist/chunk-FAFAP4L5.js +0 -183
  121. package/dist/chunk-FAFAP4L5.js.map +0 -1
  122. package/dist/chunk-GUZIMHWS.js +0 -1608
  123. package/dist/chunk-GUZIMHWS.js.map +0 -1
  124. package/dist/chunk-H2Y6BSTL.cjs +0 -69
  125. package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
  126. package/dist/chunk-HN4PHABT.js +0 -126
  127. package/dist/chunk-HN4PHABT.js.map +0 -1
  128. package/dist/chunk-HRENHNDJ.js +0 -211
  129. package/dist/chunk-HRENHNDJ.js.map +0 -1
  130. package/dist/chunk-I75BFEYT.cjs +0 -2561
  131. package/dist/chunk-I75BFEYT.cjs.map +0 -1
  132. package/dist/chunk-IFRATNLU.js +0 -562
  133. package/dist/chunk-IFRATNLU.js.map +0 -1
  134. package/dist/chunk-IYPXJ6YC.cjs +0 -69
  135. package/dist/chunk-IYPXJ6YC.cjs.map +0 -1
  136. package/dist/chunk-JPJN4YBC.js +0 -409
  137. package/dist/chunk-JPJN4YBC.js.map +0 -1
  138. package/dist/chunk-KBA2LFBG.js +0 -62
  139. package/dist/chunk-KBA2LFBG.js.map +0 -1
  140. package/dist/chunk-KCKUSU2M.cjs +0 -166
  141. package/dist/chunk-KCKUSU2M.cjs.map +0 -1
  142. package/dist/chunk-KJ2OXQF4.js +0 -287
  143. package/dist/chunk-KJ2OXQF4.js.map +0 -1
  144. package/dist/chunk-KNQEIU7O.cjs +0 -1202
  145. package/dist/chunk-KNQEIU7O.cjs.map +0 -1
  146. package/dist/chunk-KVGSVGRK.cjs +0 -569
  147. package/dist/chunk-KVGSVGRK.cjs.map +0 -1
  148. package/dist/chunk-L352JRV6.cjs +0 -105
  149. package/dist/chunk-L352JRV6.cjs.map +0 -1
  150. package/dist/chunk-LJADZITX.cjs +0 -298
  151. package/dist/chunk-LJADZITX.cjs.map +0 -1
  152. package/dist/chunk-LMJPWXTZ.cjs +0 -194
  153. package/dist/chunk-LMJPWXTZ.cjs.map +0 -1
  154. package/dist/chunk-LOWEAQST.js +0 -701
  155. package/dist/chunk-LOWEAQST.js.map +0 -1
  156. package/dist/chunk-MDB2WCRQ.cjs +0 -137
  157. package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
  158. package/dist/chunk-MQDEE7HC.cjs +0 -283
  159. package/dist/chunk-MQDEE7HC.cjs.map +0 -1
  160. package/dist/chunk-MQRB634A.cjs +0 -34
  161. package/dist/chunk-MQRB634A.cjs.map +0 -1
  162. package/dist/chunk-MTI27RDV.js +0 -185
  163. package/dist/chunk-MTI27RDV.js.map +0 -1
  164. package/dist/chunk-MU6GW5ZV.js +0 -2317
  165. package/dist/chunk-MU6GW5ZV.js.map +0 -1
  166. package/dist/chunk-NN3TUHIH.js +0 -28
  167. package/dist/chunk-NN3TUHIH.js.map +0 -1
  168. package/dist/chunk-NT4LBP7D.cjs +0 -111
  169. package/dist/chunk-NT4LBP7D.cjs.map +0 -1
  170. package/dist/chunk-OLV7OD3X.cjs +0 -502
  171. package/dist/chunk-OLV7OD3X.cjs.map +0 -1
  172. package/dist/chunk-OXNXEQY7.js +0 -2538
  173. package/dist/chunk-OXNXEQY7.js.map +0 -1
  174. package/dist/chunk-P5BOFE5A.js +0 -546
  175. package/dist/chunk-P5BOFE5A.js.map +0 -1
  176. package/dist/chunk-Q2MFGYTE.cjs +0 -1449
  177. package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
  178. package/dist/chunk-Q75DBVDY.cjs +0 -68
  179. package/dist/chunk-Q75DBVDY.cjs.map +0 -1
  180. package/dist/chunk-REQ5Q6ZI.js +0 -1022
  181. package/dist/chunk-REQ5Q6ZI.js.map +0 -1
  182. package/dist/chunk-SICKWUWB.js +0 -62
  183. package/dist/chunk-SICKWUWB.js.map +0 -1
  184. package/dist/chunk-T343CCH5.js +0 -1190
  185. package/dist/chunk-T343CCH5.js.map +0 -1
  186. package/dist/chunk-TEC62D4A.cjs +0 -1624
  187. package/dist/chunk-TEC62D4A.cjs.map +0 -1
  188. package/dist/chunk-TW5JB35D.js +0 -2122
  189. package/dist/chunk-TW5JB35D.js.map +0 -1
  190. package/dist/chunk-VC5LMUVQ.cjs +0 -20
  191. package/dist/chunk-VC5LMUVQ.cjs.map +0 -1
  192. package/dist/chunk-VM7WFMKI.cjs +0 -76
  193. package/dist/chunk-VM7WFMKI.cjs.map +0 -1
  194. package/dist/chunk-W2WTP6HS.cjs +0 -233
  195. package/dist/chunk-W2WTP6HS.cjs.map +0 -1
  196. package/dist/chunk-WH7PYHZY.cjs +0 -35
  197. package/dist/chunk-WH7PYHZY.cjs.map +0 -1
  198. package/dist/chunk-XQZVY7JJ.cjs +0 -717
  199. package/dist/chunk-XQZVY7JJ.cjs.map +0 -1
  200. package/dist/chunk-XU3OMQ7V.js +0 -98
  201. package/dist/chunk-XU3OMQ7V.js.map +0 -1
  202. package/dist/chunk-XWPDRMZG.js +0 -62
  203. package/dist/chunk-XWPDRMZG.js.map +0 -1
  204. package/dist/chunk-Y3CPKNB7.js +0 -67
  205. package/dist/chunk-Y3CPKNB7.js.map +0 -1
  206. package/dist/chunk-YNVRDD2P.js +0 -98
  207. package/dist/chunk-YNVRDD2P.js.map +0 -1
  208. package/dist/chunk-YSYR54XR.js +0 -92
  209. package/dist/chunk-YSYR54XR.js.map +0 -1
  210. package/dist/chunk-YTYDQBVY.cjs +0 -162
  211. package/dist/chunk-YTYDQBVY.cjs.map +0 -1
  212. package/dist/chunk-ZDLOA2UT.cjs +0 -1042
  213. package/dist/chunk-ZDLOA2UT.cjs.map +0 -1
  214. package/dist/chunk-ZWUKRCOJ.cjs +0 -2162
  215. package/dist/chunk-ZWUKRCOJ.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ReportShell/ReportShell.tsx","../src/components/ExecutiveThesis/ExecutiveThesis.tsx","../src/components/InsightBlock/InsightBlock.tsx","../src/components/EvidenceGroup/EvidenceGroup.tsx","../src/components/MethodologyNote/MethodologyNote.tsx","../src/components/CaveatBlock/CaveatBlock.tsx","../src/components/KeyMetric/KeyMetric.tsx","../src/components/TrendIndicator/TrendIndicator.tsx","../src/components/ExportMenu/ExportMenu.tsx"],"names":["React","clsx","jsx","jsxs","Fragment"],"mappings":"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","sourcesContent":["import React from 'react';\nimport clsx from 'clsx';\nimport { ReportModeProvider } from '../../report-engine';\nimport type { ReportMode } from '../../report-engine';\nimport './ReportShell.css';\n\nexport interface ReportShellProps {\n /** Report title */\n title?: string;\n /** Report subtitle or date range */\n subtitle?: string;\n /** Report mode (executive = minimal detail, analyst = full detail) */\n mode?: ReportMode;\n /** Brand variant for theming */\n brand?: string;\n /** Callback when mode changes */\n onModeChange?: (mode: ReportMode) => void;\n /** Report content */\n children: React.ReactNode;\n /** Header actions (export, share, etc.) */\n actions?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ReportShell is the root container for all reports.\n * It provides mode context and establishes the report structure.\n */\nexport const ReportShell = React.forwardRef<HTMLDivElement, ReportShellProps>(\n (\n {\n title,\n subtitle,\n mode = 'executive',\n brand,\n onModeChange,\n children,\n actions,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <ReportModeProvider mode={mode} onModeChange={onModeChange}>\n <div\n ref={ref}\n className={clsx('ds-report-shell', className)}\n data-mode={mode}\n data-brand={brand}\n {...props}\n >\n {(title || subtitle || actions) && (\n <header className=\"ds-report-shell__header\">\n <div className=\"ds-report-shell__header-content\">\n {title && <h1 className=\"ds-report-shell__title\">{title}</h1>}\n {subtitle && <p className=\"ds-report-shell__subtitle\">{subtitle}</p>}\n </div>\n {actions && <div className=\"ds-report-shell__actions\">{actions}</div>}\n </header>\n )}\n <main className=\"ds-report-shell__content\">{children}</main>\n </div>\n </ReportModeProvider>\n );\n },\n);\n\nReportShell.displayName = 'ReportShell';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport './ExecutiveThesis.css';\n\nexport interface ExecutiveThesisProps {\n /** The main thesis statement - the single most important finding */\n thesis: string;\n /** Supporting context for the thesis */\n context?: string;\n /** Key metric supporting the thesis */\n metric?: {\n label: string;\n value: string | number;\n trend?: 'up' | 'down' | 'neutral';\n };\n /** AI-generated indicator */\n aiGenerated?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ExecutiveThesis displays the single most important finding of a report.\n * There should be exactly ONE of these per report, at the top.\n *\n * Composition Rule: R1 - ExecutiveThesis MUST appear exactly once, at the top.\n */\nexport const ExecutiveThesis = React.forwardRef<HTMLElement, ExecutiveThesisProps>(\n ({ thesis, context, metric, aiGenerated, className, ...props }, ref) => {\n const { features } = useReportMode();\n\n return (\n <section\n ref={ref}\n className={clsx('ds-executive-thesis', className)}\n aria-labelledby=\"executive-thesis-title\"\n {...props}\n >\n <div className=\"ds-executive-thesis__content\">\n <h2 id=\"executive-thesis-title\" className=\"ds-executive-thesis__title\">\n Key Finding\n {aiGenerated && features.showConfidenceScores && (\n <span className=\"ds-executive-thesis__ai-badge\">AI Generated</span>\n )}\n </h2>\n <p className=\"ds-executive-thesis__thesis\">{thesis}</p>\n {context && <p className=\"ds-executive-thesis__context\">{context}</p>}\n </div>\n\n {metric && (\n <div className=\"ds-executive-thesis__metric\">\n <span className=\"ds-executive-thesis__metric-label\">{metric.label}</span>\n <span\n className={clsx(\n 'ds-executive-thesis__metric-value',\n metric.trend && `ds-executive-thesis__metric-value--${metric.trend}`,\n )}\n >\n {metric.trend === 'up' && '↑ '}\n {metric.trend === 'down' && '↓ '}\n {metric.value}\n </span>\n </div>\n )}\n </section>\n );\n },\n);\n\nExecutiveThesis.displayName = 'ExecutiveThesis';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode, type InsightType, INSIGHT_TYPE_CONTRACTS } from '../../report-engine';\nimport './InsightBlock.css';\n\nexport interface InsightBlockProps {\n /** The type of insight - constrains allowed child charts */\n type: InsightType;\n /** The insight headline */\n headline: string;\n /** Supporting description */\n description?: string;\n /** Confidence score (0-100) */\n confidence?: number;\n /** Methodology notes (shown in analyst mode) */\n methodology?: string;\n /** Evidence charts (max 3 per composition rules) */\n children: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * InsightBlock groups an insight with its supporting evidence.\n *\n * Composition Rules:\n * - R2: InsightBlock MUST precede any chart it references\n * - R3: Charts CANNOT appear without a parent InsightBlock\n * - R6: Max 3 charts per InsightBlock\n */\nexport const InsightBlock = React.forwardRef<HTMLElement, InsightBlockProps>(\n (\n { type, headline, description, confidence, methodology, children, className, ...props },\n ref,\n ) => {\n const { features } = useReportMode();\n const contract = INSIGHT_TYPE_CONTRACTS[type];\n\n // Determine confidence level\n const getConfidenceClass = () => {\n if (confidence === undefined) return '';\n if (confidence >= 90) return 'ds-insight-block--confidence-high';\n if (confidence >= 70) return 'ds-insight-block--confidence-moderate';\n if (confidence >= 50) return 'ds-insight-block--confidence-low';\n return 'ds-insight-block--confidence-insufficient';\n };\n\n return (\n <section\n ref={ref}\n className={clsx('ds-insight-block', getConfidenceClass(), className)}\n data-insight-type={type}\n aria-labelledby={`insight-${type}-title`}\n {...props}\n >\n <header className=\"ds-insight-block__header\">\n <div className=\"ds-insight-block__meta\">\n <span className=\"ds-insight-block__type\">{type.replace(/-/g, ' ')}</span>\n {features.showConfidenceScores && confidence !== undefined && (\n <span className=\"ds-insight-block__confidence\">{confidence}% confidence</span>\n )}\n </div>\n <h3 id={`insight-${type}-title`} className=\"ds-insight-block__headline\">\n {headline}\n </h3>\n {description && <p className=\"ds-insight-block__description\">{description}</p>}\n </header>\n\n <div className=\"ds-insight-block__evidence\">{children}</div>\n\n {features.showMethodology && methodology && (\n <footer className=\"ds-insight-block__methodology\">\n <h4 className=\"ds-insight-block__methodology-title\">Methodology</h4>\n <p className=\"ds-insight-block__methodology-text\">{methodology}</p>\n {contract && (\n <p className=\"ds-insight-block__methodology-contract\">\n Min sample: {contract.minSampleSize} | Allowed charts:{' '}\n {contract.allowedCharts.join(', ')}\n </p>\n )}\n </footer>\n )}\n </section>\n );\n },\n);\n\nInsightBlock.displayName = 'InsightBlock';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './EvidenceGroup.css';\n\nexport interface EvidenceGroupProps {\n /** Group title */\n title?: string;\n /** Layout direction */\n layout?: 'row' | 'column' | 'grid';\n /** Number of columns for grid layout */\n columns?: 1 | 2 | 3;\n /** Evidence charts (max 3 per composition rules) */\n children: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * EvidenceGroup contains related charts under an InsightBlock.\n *\n * Composition Rule: R6 - Max 3 charts per InsightBlock (enforced via EvidenceGroup)\n */\nexport const EvidenceGroup = React.forwardRef<HTMLDivElement, EvidenceGroupProps>(\n ({ title, layout = 'row', columns = 2, children, className, ...props }, ref) => {\n // Count children to enforce composition rule\n const childCount = React.Children.count(children);\n\n if (childCount > 3) {\n console.warn(\n `EvidenceGroup: Maximum 3 charts allowed per insight block (received ${childCount}). ` +\n 'This violates composition rule R6.',\n );\n }\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-evidence-group',\n `ds-evidence-group--${layout}`,\n layout === 'grid' && `ds-evidence-group--cols-${columns}`,\n className,\n )}\n role=\"group\"\n aria-label={title || 'Evidence charts'}\n {...props}\n >\n {title && <h4 className=\"ds-evidence-group__title\">{title}</h4>}\n <div className=\"ds-evidence-group__content\">{children}</div>\n </div>\n );\n },\n);\n\nEvidenceGroup.displayName = 'EvidenceGroup';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport './MethodologyNote.css';\n\n/** Translatable labels for the MethodologyNote component. */\nexport interface MethodologyNoteLabels {\n /** Title text and aria-label. @default \"Methodology\" */\n title?: string;\n /** Label for the sample size row. @default \"Sample Size\" */\n sampleSize?: string;\n /** Label for the data sources row. @default \"Data Sources\" */\n dataSources?: string;\n /** Label for the calculation row. @default \"Calculation\" */\n calculation?: string;\n}\n\nexport interface MethodologyNoteProps {\n /** Methodology description */\n children: React.ReactNode;\n /** Sample size (triggers automatic display if < 100) */\n sampleSize?: number;\n /** Data sources used */\n sources?: string[];\n /** Calculation method */\n calculation?: string;\n /** Always show regardless of mode */\n forceShow?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Override default English labels for i18n. */\n labels?: MethodologyNoteLabels;\n}\n\n/**\n * MethodologyNote documents how data was collected and calculated.\n *\n * Composition Rule: R4 - MethodologyNote MUST appear if sample size < 100\n */\nexport const MethodologyNote = React.forwardRef<HTMLElement, MethodologyNoteProps>(\n ({ children, sampleSize, sources, calculation, forceShow = false, className, labels, ...props }, ref) => {\n const titleText = labels?.title ?? 'Methodology';\n const sampleSizeLabel = labels?.sampleSize ?? 'Sample Size';\n const dataSourcesLabel = labels?.dataSources ?? 'Data Sources';\n const calculationLabel = labels?.calculation ?? 'Calculation';\n const { features } = useReportMode();\n\n // In executive mode, only show if forced or sample size < 100\n const shouldShow =\n forceShow || features.showMethodology || (sampleSize !== undefined && sampleSize < 100);\n\n if (!shouldShow) {\n return null;\n }\n\n return (\n <aside\n ref={ref}\n className={clsx('ds-methodology-note', className)}\n aria-label={titleText}\n {...props}\n >\n <div className=\"ds-methodology-note__header\">\n <svg\n className=\"ds-methodology-note__icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n <span className=\"ds-methodology-note__title\">{titleText}</span>\n </div>\n\n <div className=\"ds-methodology-note__content\">{children}</div>\n\n {(sources || calculation || sampleSize !== undefined) && (\n <dl className=\"ds-methodology-note__details\">\n {sampleSize !== undefined && (\n <>\n <dt>{sampleSizeLabel}</dt>\n <dd>n={sampleSize.toLocaleString()}</dd>\n </>\n )}\n {sources && sources.length > 0 && (\n <>\n <dt>{dataSourcesLabel}</dt>\n <dd>{sources.join(', ')}</dd>\n </>\n )}\n {calculation && (\n <>\n <dt>{calculationLabel}</dt>\n <dd>{calculation}</dd>\n </>\n )}\n </dl>\n )}\n </aside>\n );\n },\n);\n\nMethodologyNote.displayName = 'MethodologyNote';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport './CaveatBlock.css';\n\nexport interface CaveatBlockProps {\n /** Caveat title/summary */\n title?: string;\n /** Caveat details */\n children: React.ReactNode;\n /** Severity level */\n severity?: 'info' | 'warning' | 'critical';\n /** Confidence score that triggered this caveat */\n confidence?: number;\n /** Always show regardless of mode */\n forceShow?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * CaveatBlock displays limitations and warnings about the data or analysis.\n *\n * Composition Rule: Required if confidence < 70%\n */\nexport const CaveatBlock = React.forwardRef<HTMLElement, CaveatBlockProps>(\n (\n {\n title = 'Important Caveat',\n children,\n severity = 'warning',\n confidence,\n forceShow = false,\n className,\n ...props\n },\n ref,\n ) => {\n const { features } = useReportMode();\n\n // In executive mode, only show if forced or confidence < 70%\n const shouldShow =\n forceShow || features.showMethodology || (confidence !== undefined && confidence < 70);\n\n if (!shouldShow) {\n return null;\n }\n\n const renderIcon = () => {\n if (severity === 'critical') {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n }\n if (severity === 'info') {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n );\n }\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n );\n };\n\n return (\n <aside\n ref={ref}\n className={clsx('ds-caveat-block', `ds-caveat-block--${severity}`, className)}\n role=\"note\"\n aria-label={title}\n {...props}\n >\n <div className=\"ds-caveat-block__header\">\n <span className=\"ds-caveat-block__icon\">{renderIcon()}</span>\n <span className=\"ds-caveat-block__title\">{title}</span>\n {confidence !== undefined && (\n <span className=\"ds-caveat-block__confidence\">{confidence}% confidence</span>\n )}\n </div>\n <div className=\"ds-caveat-block__content\">{children}</div>\n </aside>\n );\n },\n);\n\nCaveatBlock.displayName = 'CaveatBlock';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode, useDataState, type TrendDirection } from '../../report-engine';\nimport './KeyMetric.css';\n\nexport interface KeyMetricProps {\n /** Metric title/label */\n title: string;\n /** Primary value */\n value: string | number;\n /** Value prefix (e.g., '$', '#') */\n prefix?: string;\n /** Value suffix (e.g., '%', 'users') */\n suffix?: string;\n /** Trend indicator */\n trend?: {\n value: number;\n direction: TrendDirection;\n label?: string;\n };\n /** Secondary metric */\n secondary?: {\n label: string;\n value: string | number;\n };\n /** Sample size for data state */\n sampleSize?: number;\n /** Confidence score */\n confidence?: number;\n /** Click handler for drill-down */\n onClick?: () => void;\n /** Loading state */\n loading?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * KeyMetric displays a single KPI with trend indicator and optional drill-down.\n * This is an analytical component with built-in data state awareness.\n */\nexport const KeyMetric = React.forwardRef<HTMLDivElement, KeyMetricProps>(\n (\n {\n title,\n value,\n prefix,\n suffix,\n trend,\n secondary,\n sampleSize,\n confidence,\n onClick,\n loading,\n size = 'md',\n className,\n ...props\n },\n ref,\n ) => {\n const { features } = useReportMode();\n const { isValid } = useDataState({\n sampleSize: sampleSize ?? 100,\n requiredSize: 30,\n });\n\n const isClickable = onClick && !loading;\n\n const formatValue = (val: string | number) => {\n if (typeof val === 'number') {\n return val.toLocaleString();\n }\n return val;\n };\n\n const getTrendIcon = (direction: TrendDirection) => {\n switch (direction) {\n case 'up':\n return '↑';\n case 'down':\n return '↓';\n default:\n return '→';\n }\n };\n\n const Component = isClickable ? 'button' : 'div';\n\n return (\n <Component\n ref={ref as React.Ref<HTMLButtonElement & HTMLDivElement>}\n className={clsx(\n 'ds-key-metric',\n `ds-key-metric--${size}`,\n loading && 'ds-key-metric--loading',\n isClickable && 'ds-key-metric--clickable',\n !isValid && 'ds-key-metric--invalid',\n className,\n )}\n onClick={isClickable ? onClick : undefined}\n type={isClickable ? 'button' : undefined}\n {...props}\n >\n <div className=\"ds-key-metric__header\">\n <span className=\"ds-key-metric__title\">{title}</span>\n {features.showConfidenceScores && confidence !== undefined && (\n <span className=\"ds-key-metric__confidence\">{confidence}%</span>\n )}\n </div>\n\n <div className=\"ds-key-metric__value-row\">\n <span className=\"ds-key-metric__value\">\n {prefix && <span className=\"ds-key-metric__prefix\">{prefix}</span>}\n {loading ? '—' : formatValue(value)}\n {suffix && <span className=\"ds-key-metric__suffix\">{suffix}</span>}\n </span>\n\n {trend && (\n <span\n className={clsx('ds-key-metric__trend', `ds-key-metric__trend--${trend.direction}`)}\n >\n <span className=\"ds-key-metric__trend-icon\">{getTrendIcon(trend.direction)}</span>\n <span className=\"ds-key-metric__trend-value\">{Math.abs(trend.value)}%</span>\n {trend.label && <span className=\"ds-key-metric__trend-label\">{trend.label}</span>}\n </span>\n )}\n </div>\n\n {secondary && (\n <div className=\"ds-key-metric__secondary\">\n <span className=\"ds-key-metric__secondary-label\">{secondary.label}:</span>\n <span className=\"ds-key-metric__secondary-value\">{formatValue(secondary.value)}</span>\n </div>\n )}\n\n {features.showMethodology && sampleSize !== undefined && (\n <div className=\"ds-key-metric__sample\">n={sampleSize.toLocaleString()}</div>\n )}\n </Component>\n );\n },\n);\n\nKeyMetric.displayName = 'KeyMetric';\n","import React from 'react';\nimport clsx from 'clsx';\nimport type { TrendDirection } from '../../report-engine';\nimport './TrendIndicator.css';\n\nexport interface TrendIndicatorProps {\n /** Percentage change */\n value: number;\n /** Override direction (auto-detected from value) */\n direction?: TrendDirection;\n /** Positive is good (green) or bad (red) */\n positiveIsGood?: boolean;\n /** Show arrow icon */\n showIcon?: boolean;\n /** Show the percentage sign */\n showPercent?: boolean;\n /** Size */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * TrendIndicator shows directional change with color coding.\n * Requires at least 2 data points to be meaningful.\n */\nexport const TrendIndicator = React.forwardRef<HTMLSpanElement, TrendIndicatorProps>(\n (\n {\n value,\n direction: directionOverride,\n positiveIsGood = true,\n showIcon = true,\n showPercent = true,\n size = 'md',\n className,\n ...props\n },\n ref,\n ) => {\n // Determine direction from value or override\n const direction: TrendDirection =\n directionOverride ?? (value > 0 ? 'up' : value < 0 ? 'down' : 'neutral');\n\n // Determine if this is a \"good\" or \"bad\" trend\n const isGood = positiveIsGood ? direction === 'up' : direction === 'down';\n\n const isBad = positiveIsGood ? direction === 'down' : direction === 'up';\n\n const getIcon = () => {\n switch (direction) {\n case 'up':\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n >\n <polyline points=\"18,15 12,9 6,15\" />\n </svg>\n );\n case 'down':\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n >\n <polyline points=\"6,9 12,15 18,9\" />\n </svg>\n );\n default:\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n }\n };\n\n return (\n <span\n ref={ref}\n className={clsx(\n 'ds-trend-indicator',\n `ds-trend-indicator--${size}`,\n `ds-trend-indicator--${direction}`,\n isGood && 'ds-trend-indicator--good',\n isBad && 'ds-trend-indicator--bad',\n className,\n )}\n aria-label={`${direction === 'up' ? 'Increased' : direction === 'down' ? 'Decreased' : 'No change'} by ${Math.abs(value)}%`}\n {...props}\n >\n {showIcon && <span className=\"ds-trend-indicator__icon\">{getIcon()}</span>}\n <span className=\"ds-trend-indicator__value\">\n {value > 0 && '+'}\n {value.toFixed(1)}\n {showPercent && '%'}\n </span>\n </span>\n );\n },\n);\n\nTrendIndicator.displayName = 'TrendIndicator';\n","import React from 'react';\nimport clsx from 'clsx';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n} from '../DropdownMenu';\nimport './ExportMenu.css';\n\nexport type ExportFormat = 'pdf' | 'csv' | 'xlsx' | 'pptx' | 'png' | 'json';\n\nexport interface ExportOption {\n /** Export format */\n format: ExportFormat;\n /** Display label */\n label: string;\n /** Optional description */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface ExportMenuProps {\n /** Available export options */\n options?: ExportOption[];\n /** Callback when an export option is selected */\n onExport: (format: ExportFormat) => void;\n /** Whether export is currently in progress */\n isExporting?: boolean;\n /** Button label */\n label?: string;\n /** Button size */\n size?: 'sm' | 'md' | 'lg';\n /** Button variant */\n variant?: 'primary' | 'secondary' | 'outline';\n /** Additional CSS class */\n className?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nconst DEFAULT_OPTIONS: ExportOption[] = [\n { format: 'pdf', label: 'PDF Document', description: 'Best for sharing reports' },\n { format: 'pptx', label: 'PowerPoint', description: 'Editable presentation' },\n { format: 'xlsx', label: 'Excel Spreadsheet', description: 'Data with charts' },\n { format: 'csv', label: 'CSV Data', description: 'Raw data only' },\n { format: 'png', label: 'PNG Image', description: 'Chart screenshot' },\n { format: 'json', label: 'JSON', description: 'Developer format' },\n];\n\nconst FORMAT_ICONS: Record<ExportFormat, React.ReactNode> = {\n pdf: <PdfIcon />,\n csv: <CsvIcon />,\n xlsx: <ExcelIcon />,\n pptx: <PptIcon />,\n png: <ImageIcon />,\n json: <JsonIcon />,\n};\n\n/**\n * ExportMenu provides a dropdown for exporting reports in various formats.\n * This is an interface-only component - actual export logic is implemented at the app layer.\n */\nexport function ExportMenu({\n options = DEFAULT_OPTIONS,\n onExport,\n isExporting = false,\n label = 'Export',\n size = 'md',\n variant = 'secondary',\n className,\n disabled,\n}: ExportMenuProps) {\n const documentOptions = options.filter((o) => ['pdf', 'pptx'].includes(o.format));\n const dataOptions = options.filter((o) => ['xlsx', 'csv', 'json'].includes(o.format));\n const imageOptions = options.filter((o) => ['png'].includes(o.format));\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={clsx(\n 'ds-export-menu__trigger',\n 'ds-button',\n `ds-button--${variant}`,\n `ds-button--${size}`,\n className,\n )}\n disabled={disabled || isExporting}\n >\n {isExporting ? (\n <>\n <LoadingIcon />\n Exporting...\n </>\n ) : (\n <>\n <ExportIcon />\n {label}\n </>\n )}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent side=\"bottom\" align=\"end\" sideOffset={4}>\n {documentOptions.length > 0 && (\n <>\n <DropdownMenuLabel>Documents</DropdownMenuLabel>\n {documentOptions.map((option) => (\n <DropdownMenuItem\n key={option.format}\n disabled={option.disabled}\n onClick={() => onExport(option.format)}\n >\n <span className=\"ds-export-menu__item-icon\">{FORMAT_ICONS[option.format]}</span>\n <span className=\"ds-export-menu__item-content\">\n <span className=\"ds-export-menu__item-label\">{option.label}</span>\n {option.description && (\n <span className=\"ds-export-menu__item-description\">{option.description}</span>\n )}\n </span>\n </DropdownMenuItem>\n ))}\n </>\n )}\n\n {documentOptions.length > 0 && dataOptions.length > 0 && <DropdownMenuSeparator />}\n\n {dataOptions.length > 0 && (\n <>\n <DropdownMenuLabel>Data</DropdownMenuLabel>\n {dataOptions.map((option) => (\n <DropdownMenuItem\n key={option.format}\n disabled={option.disabled}\n onClick={() => onExport(option.format)}\n >\n <span className=\"ds-export-menu__item-icon\">{FORMAT_ICONS[option.format]}</span>\n <span className=\"ds-export-menu__item-content\">\n <span className=\"ds-export-menu__item-label\">{option.label}</span>\n {option.description && (\n <span className=\"ds-export-menu__item-description\">{option.description}</span>\n )}\n </span>\n </DropdownMenuItem>\n ))}\n </>\n )}\n\n {imageOptions.length > 0 && (dataOptions.length > 0 || documentOptions.length > 0) && (\n <DropdownMenuSeparator />\n )}\n\n {imageOptions.length > 0 && (\n <>\n <DropdownMenuLabel>Image</DropdownMenuLabel>\n {imageOptions.map((option) => (\n <DropdownMenuItem\n key={option.format}\n disabled={option.disabled}\n onClick={() => onExport(option.format)}\n >\n <span className=\"ds-export-menu__item-icon\">{FORMAT_ICONS[option.format]}</span>\n <span className=\"ds-export-menu__item-content\">\n <span className=\"ds-export-menu__item-label\">{option.label}</span>\n {option.description && (\n <span className=\"ds-export-menu__item-description\">{option.description}</span>\n )}\n </span>\n </DropdownMenuItem>\n ))}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nExportMenu.displayName = 'ExportMenu';\n\n/* ============================================================================\n ICONS\n ============================================================================ */\n\nfunction ExportIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n );\n}\n\nfunction LoadingIcon() {\n return (\n <svg\n className=\"ds-export-menu__loading-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nfunction PdfIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n );\n}\n\nfunction CsvIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\n <line x1=\"8\" y1=\"17\" x2=\"16\" y2=\"17\" />\n </svg>\n );\n}\n\nfunction ExcelIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 9h18\" />\n <path d=\"M3 15h18\" />\n <path d=\"M9 3v18\" />\n <path d=\"M15 3v18\" />\n </svg>\n );\n}\n\nfunction PptIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction ImageIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n );\n}\n\nfunction JsonIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5a2 2 0 0 0 2 2h1\" />\n <path d=\"M16 21h1a2 2 0 0 0 2-2v-5a2 2 0 0 1 2-2 2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\" />\n </svg>\n );\n}\n"]}
@@ -1,153 +0,0 @@
1
- import { Button } from './chunk-SICKWUWB.js';
2
- import { AnalyticsContext } from './chunk-2GARWEJK.js';
3
- import { OutboundLink } from './chunk-KJ2OXQF4.js';
4
- import { useState, useEffect, useCallback, useMemo } from 'react';
5
- import { X } from 'lucide-react';
6
- import { jsx, jsxs } from 'react/jsx-runtime';
7
-
8
- // src/web/analytics/create-analytics-loader.ts
9
- function createAnalyticsLoader(config) {
10
- return (trackingId) => {
11
- if (typeof document === "undefined") return;
12
- if (document.getElementById(config.id)) return;
13
- const script = document.createElement("script");
14
- script.id = config.id;
15
- if (config.inlineScript) {
16
- script.textContent = config.inlineScript(trackingId);
17
- } else {
18
- script.async = config.async ?? true;
19
- script.src = config.src(trackingId);
20
- }
21
- document.head.appendChild(script);
22
- config.onLoad?.(trackingId);
23
- };
24
- }
25
- var loadGoogleAnalytics = createAnalyticsLoader({
26
- id: "ga-script",
27
- src: (gaId) => `https://www.googletagmanager.com/gtag/js?id=${gaId}`,
28
- onLoad: (gaId) => {
29
- window.dataLayer = window.dataLayer || [];
30
- window.dataLayer.push(["js", /* @__PURE__ */ new Date()]);
31
- window.dataLayer.push(["config", gaId]);
32
- }
33
- });
34
- var loadClarity = createAnalyticsLoader({
35
- id: "clarity-script",
36
- src: (clarityId) => `https://www.clarity.ms/tag/${clarityId}`,
37
- onLoad: () => {
38
- if (!window.clarity) {
39
- const queue = [];
40
- window.clarity = (...args) => {
41
- queue.push(args);
42
- };
43
- window.clarity.q = queue;
44
- }
45
- }
46
- });
47
- var COOKIE_CONSENT_EVENT = "cookie_consent_granted";
48
- var COOKIE_CONSENT_KEY = "cookie_consent";
49
- function CookieConsent({
50
- delay = 1e3,
51
- privacyUrl = "/legal/privacy",
52
- onAccept,
53
- onDecline,
54
- labels,
55
- className
56
- }) {
57
- const [state, setState] = useState("idle");
58
- useEffect(() => {
59
- const consent = localStorage.getItem(COOKIE_CONSENT_KEY);
60
- if (!consent) {
61
- const timer = setTimeout(() => setState("open"), delay);
62
- return () => clearTimeout(timer);
63
- } else {
64
- setState("closed");
65
- }
66
- }, [delay]);
67
- const handleDismiss = useCallback(() => {
68
- setState("closing");
69
- }, []);
70
- const handleAccept = useCallback(() => {
71
- localStorage.setItem(COOKIE_CONSENT_KEY, "granted");
72
- handleDismiss();
73
- if (typeof window !== "undefined") {
74
- window.dispatchEvent(new Event(COOKIE_CONSENT_EVENT));
75
- }
76
- onAccept?.();
77
- }, [onAccept, handleDismiss]);
78
- const handleDecline = useCallback(() => {
79
- localStorage.setItem(COOKIE_CONSENT_KEY, "denied");
80
- handleDismiss();
81
- onDecline?.();
82
- }, [onDecline, handleDismiss]);
83
- const handleTransitionEnd = useCallback(() => {
84
- if (state === "closing") {
85
- setState("closed");
86
- }
87
- }, [state]);
88
- if (state === "idle" || state === "closed") return null;
89
- return /* @__PURE__ */ jsx(
90
- "div",
91
- {
92
- className: `ds-cookie-consent ${className ?? ""}`,
93
- "data-state": state === "open" ? "open" : "closed",
94
- onTransitionEnd: handleTransitionEnd,
95
- role: "dialog",
96
- "aria-label": labels?.title ?? "Cookie consent",
97
- children: /* @__PURE__ */ jsxs("div", { className: "ds-cookie-consent__inner", children: [
98
- /* @__PURE__ */ jsxs("div", { className: "ds-cookie-consent__content", children: [
99
- /* @__PURE__ */ jsx("h3", { className: "ds-cookie-consent__title", children: labels?.title ?? "We use cookies" }),
100
- /* @__PURE__ */ jsxs("p", { className: "ds-cookie-consent__description", children: [
101
- labels?.description ?? "We use tracking cookies to understand how you use the product and help us improve it.",
102
- /* @__PURE__ */ jsx(OutboundLink, { href: privacyUrl, context: "cookie-consent-privacy", className: "ds-cookie-consent__link", children: labels?.privacyLinkText ?? "Privacy Policy" })
103
- ] })
104
- ] }),
105
- /* @__PURE__ */ jsxs("div", { className: "ds-cookie-consent__actions", children: [
106
- /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: handleDecline, children: labels?.declineLabel ?? "Decline" }),
107
- /* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", onClick: handleAccept, children: labels?.acceptLabel ?? "Accept" })
108
- ] }),
109
- /* @__PURE__ */ jsx(
110
- "button",
111
- {
112
- onClick: handleDecline,
113
- className: "ds-cookie-consent__close",
114
- "aria-label": "Close",
115
- children: /* @__PURE__ */ jsx(X, { size: 16 })
116
- }
117
- )
118
- ] })
119
- }
120
- );
121
- }
122
- function useCookieConsent() {
123
- const [status, setStatus] = useState(() => {
124
- if (typeof window === "undefined") return null;
125
- const stored = localStorage.getItem(COOKIE_CONSENT_KEY);
126
- if (stored === "granted") return "granted";
127
- if (stored === "denied") return "denied";
128
- return null;
129
- });
130
- useEffect(() => {
131
- const handleConsent = () => setStatus("granted");
132
- window.addEventListener(COOKIE_CONSENT_EVENT, handleConsent);
133
- return () => window.removeEventListener(COOKIE_CONSENT_EVENT, handleConsent);
134
- }, []);
135
- return status;
136
- }
137
- function AnalyticsProvider({ onTrack, debug = false, children }) {
138
- const track = useCallback(
139
- (event, props) => {
140
- if (debug && typeof console !== "undefined") {
141
- console.log("[DS Analytics]", event, props);
142
- }
143
- onTrack(event, props);
144
- },
145
- [onTrack, debug]
146
- );
147
- const value = useMemo(() => ({ track }), [track]);
148
- return /* @__PURE__ */ jsx(AnalyticsContext.Provider, { value, children });
149
- }
150
-
151
- export { AnalyticsProvider, COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, CookieConsent, createAnalyticsLoader, loadClarity, loadGoogleAnalytics, useCookieConsent };
152
- //# sourceMappingURL=out.js.map
153
- //# sourceMappingURL=chunk-6UNG76Y2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/web/analytics/create-analytics-loader.ts","../src/web/CookieConsent/CookieConsent.tsx","../src/web/analytics/use-cookie-consent.ts","../src/web/analytics/analytics-provider.tsx"],"names":["useState","useEffect","useCallback","jsx"],"mappings":"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","sourcesContent":["/**\n * Generic analytics script loader.\n *\n * Framework-agnostic: injects a `<script>` tag into `<head>` once,\n * guards against double-loading, and respects cookie consent.\n *\n * @example\n * ```ts\n * import { createAnalyticsLoader } from '@salesmind-ai/design-system/web';\n *\n * const loadGA = createAnalyticsLoader({\n * id: 'ga-script',\n * src: (gaId) => `https://www.googletagmanager.com/gtag/js?id=${gaId}`,\n * onLoad: (gaId) => {\n * window.dataLayer = window.dataLayer || [];\n * function gtag(...args: unknown[]) { window.dataLayer.push(args); }\n * gtag('js', new Date());\n * gtag('config', gaId);\n * },\n * });\n *\n * // Later, after consent:\n * loadGA('G-XXXXXX');\n * ```\n */\n\nexport interface AnalyticsLoaderConfig<TId extends string = string> {\n /** Unique DOM id for the script element (prevents double-loading) */\n id: string;\n /** Build the script src URL from the tracking ID */\n src: (trackingId: TId) => string;\n /** Async attribute on the script tag (default: true) */\n async?: boolean;\n /** Called after the script is appended to the DOM */\n onLoad?: (trackingId: TId) => void;\n /** Custom inline script content instead of an external src */\n inlineScript?: (trackingId: TId) => string;\n}\n\n/**\n * Create a reusable analytics loader function.\n * The returned function injects the script once and is safe to call multiple times.\n */\nexport function createAnalyticsLoader<TId extends string = string>(\n config: AnalyticsLoaderConfig<TId>,\n): (trackingId: TId) => void {\n return (trackingId: TId) => {\n if (typeof document === 'undefined') return;\n if (document.getElementById(config.id)) return;\n\n const script = document.createElement('script');\n script.id = config.id;\n\n if (config.inlineScript) {\n script.textContent = config.inlineScript(trackingId);\n } else {\n script.async = config.async ?? true;\n script.src = config.src(trackingId);\n }\n\n document.head.appendChild(script);\n config.onLoad?.(trackingId);\n };\n}\n\n// ─── Pre-built Loaders ──────────────────────────────────────────────────────\n\ndeclare global {\n interface Window {\n dataLayer: unknown[];\n clarity?: (...args: unknown[]) => void;\n }\n}\n\n/**\n * Load Google Analytics (gtag.js).\n * Call with your GA measurement ID after cookie consent.\n */\nexport const loadGoogleAnalytics = createAnalyticsLoader({\n id: 'ga-script',\n src: (gaId) => `https://www.googletagmanager.com/gtag/js?id=${gaId}`,\n onLoad: (gaId) => {\n window.dataLayer = window.dataLayer || [];\n // Use array push directly to avoid @ts-ignore issues with gtag signature\n window.dataLayer.push(['js', new Date()]);\n window.dataLayer.push(['config', gaId]);\n },\n});\n\n/**\n * Load Microsoft Clarity.\n * Call with your Clarity project ID after cookie consent.\n */\nexport const loadClarity = createAnalyticsLoader({\n id: 'clarity-script',\n src: (clarityId) => `https://www.clarity.ms/tag/${clarityId}`,\n onLoad: () => {\n // Clarity auto-initializes from the script tag.\n // Expose the global `clarity` queue function for custom events.\n if (!window.clarity) {\n const queue: unknown[][] = [];\n window.clarity = (...args: unknown[]) => {\n queue.push(args);\n };\n (window.clarity as unknown as { q: unknown[][] }).q = queue;\n }\n },\n});\n","\"use client\";\nimport { useState, useEffect, useCallback } from 'react';\nimport { Button } from '../../components/Button/Button';\nimport { OutboundLink } from '../../components/OutboundLink/OutboundLink';\nimport { X } from 'lucide-react';\nimport './CookieConsent.css';\n\n/** Cookie consent state */\nexport type ConsentStatus = 'granted' | 'denied' | null;\n\n/** Event name dispatched on window when consent changes */\nexport const COOKIE_CONSENT_EVENT = 'cookie_consent_granted';\n\n/** localStorage key for cookie consent */\nexport const COOKIE_CONSENT_KEY = 'cookie_consent';\n\n/** Labels for i18n support */\nexport interface CookieConsentLabels {\n title?: string;\n description?: string;\n privacyLinkText?: string;\n acceptLabel?: string;\n declineLabel?: string;\n}\n\nexport interface CookieConsentProps {\n /** Delay in ms before showing the banner (default: 1000) */\n delay?: number;\n /** URL to the privacy policy page (default: \"/legal/privacy\") */\n privacyUrl?: string;\n /** Called when the user accepts cookies */\n onAccept?: () => void;\n /** Called when the user declines cookies */\n onDecline?: () => void;\n /** Override default labels for i18n */\n labels?: CookieConsentLabels;\n /** Custom className for the container */\n className?: string;\n}\n\n/**\n * CookieConsent — GDPR-compliant cookie consent banner.\n *\n * - Animated entrance/exit via CSS transitions (no framer-motion)\n * - Respects prior consent stored in localStorage\n * - Dispatches a `cookie_consent_granted` event on the window for analytics loaders\n * - Uses DS Button component\n *\n * @example\n * ```tsx\n * import { CookieConsent } from '@salesmind-ai/design-system/web';\n *\n * <CookieConsent\n * privacyUrl=\"/legal/privacy\"\n * onAccept={() => loadGoogleAnalytics('G-XXXX')}\n * />\n * ```\n */\nexport function CookieConsent({\n delay = 1000,\n privacyUrl = '/legal/privacy',\n onAccept,\n onDecline,\n labels,\n className,\n}: CookieConsentProps) {\n // 'idle' = not yet determined, 'open' = visible, 'closing' = exit animation, 'closed' = hidden\n const [state, setState] = useState<'idle' | 'open' | 'closing' | 'closed'>('idle');\n\n useEffect(() => {\n const consent = localStorage.getItem(COOKIE_CONSENT_KEY);\n if (!consent) {\n const timer = setTimeout(() => setState('open'), delay);\n return () => clearTimeout(timer);\n } else {\n setState('closed');\n }\n }, [delay]);\n\n const handleDismiss = useCallback(() => {\n setState('closing');\n }, []);\n\n const handleAccept = useCallback(() => {\n localStorage.setItem(COOKIE_CONSENT_KEY, 'granted');\n handleDismiss();\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new Event(COOKIE_CONSENT_EVENT));\n }\n onAccept?.();\n }, [onAccept, handleDismiss]);\n\n const handleDecline = useCallback(() => {\n localStorage.setItem(COOKIE_CONSENT_KEY, 'denied');\n handleDismiss();\n onDecline?.();\n }, [onDecline, handleDismiss]);\n\n const handleTransitionEnd = useCallback(() => {\n if (state === 'closing') {\n setState('closed');\n }\n }, [state]);\n\n // Don't render anything until we know consent status, or after fully closed\n if (state === 'idle' || state === 'closed') return null;\n\n return (\n <div\n className={`ds-cookie-consent ${className ?? ''}`}\n data-state={state === 'open' ? 'open' : 'closed'}\n onTransitionEnd={handleTransitionEnd}\n role=\"dialog\"\n aria-label={labels?.title ?? 'Cookie consent'}\n >\n <div className=\"ds-cookie-consent__inner\">\n <div className=\"ds-cookie-consent__content\">\n <h3 className=\"ds-cookie-consent__title\">\n {labels?.title ?? 'We use cookies'}\n </h3>\n <p className=\"ds-cookie-consent__description\">\n {labels?.description ??\n 'We use tracking cookies to understand how you use the product and help us improve it.'}\n <OutboundLink href={privacyUrl} context=\"cookie-consent-privacy\" className=\"ds-cookie-consent__link\">\n {labels?.privacyLinkText ?? 'Privacy Policy'}\n </OutboundLink>\n </p>\n </div>\n <div className=\"ds-cookie-consent__actions\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleDecline}>\n {labels?.declineLabel ?? 'Decline'}\n </Button>\n <Button variant=\"primary\" size=\"sm\" onClick={handleAccept}>\n {labels?.acceptLabel ?? 'Accept'}\n </Button>\n </div>\n <button\n onClick={handleDecline}\n className=\"ds-cookie-consent__close\"\n aria-label=\"Close\"\n >\n <X size={16} />\n </button>\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { useState, useEffect } from 'react';\nimport { COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, type ConsentStatus } from '../CookieConsent/CookieConsent';\n\n/**\n * React hook that tracks cookie consent status.\n *\n * Returns `true` once the user has granted cookie consent,\n * `false` if denied, `null` if not yet decided.\n *\n * Listens for the `cookie_consent_granted` window event dispatched\n * by the CookieConsent component.\n *\n * @example\n * ```tsx\n * const hasConsent = useCookieConsent();\n *\n * useEffect(() => {\n * if (hasConsent) loadGoogleAnalytics('G-XXXX');\n * }, [hasConsent]);\n * ```\n */\nexport function useCookieConsent(): ConsentStatus {\n const [status, setStatus] = useState<ConsentStatus>(() => {\n if (typeof window === 'undefined') return null;\n const stored = localStorage.getItem(COOKIE_CONSENT_KEY);\n if (stored === 'granted') return 'granted';\n if (stored === 'denied') return 'denied';\n return null;\n });\n\n useEffect(() => {\n const handleConsent = () => setStatus('granted');\n window.addEventListener(COOKIE_CONSENT_EVENT, handleConsent);\n return () => window.removeEventListener(COOKIE_CONSENT_EVENT, handleConsent);\n }, []);\n\n return status;\n}\n","\"use client\";\nimport { useCallback, useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { AnalyticsContext } from './analytics-context';\nimport type { TrackFn } from './analytics-context';\n\n/* ============================================================================\n ANALYTICS PROVIDER — Event Tracking Context\n ============================================================================\n\n Provides a unified event tracking interface for all marketing/conversion\n components. Components call `useAnalytics().track(...)` without knowing\n which analytics backend is active.\n\n When no provider is present, all calls are no-ops — safe for Storybook,\n tests, and SSR.\n\n Usage:\n // In your app root:\n <AnalyticsProvider onTrack={(event, props) => gtag('event', event, props)}>\n <App />\n </AnalyticsProvider>\n\n // In any DS component:\n const { track } = useAnalytics();\n track('cta_click', { location: 'hero', label: 'Book Demo' });\n\n ============================================================================ */\n\n/** Props for the AnalyticsProvider component */\nexport interface AnalyticsProviderProps {\n /** Callback invoked on every track() call. Wire this to your analytics backend. */\n onTrack: TrackFn;\n /** Enable console logging in development (default: false) */\n debug?: boolean;\n children: ReactNode;\n}\n\n/**\n * Provides analytics event tracking to all descendant DS components.\n *\n * @example\n * ```tsx\n * <AnalyticsProvider\n * onTrack={(event, props) => {\n * window.gtag?.('event', event, props);\n * }}\n * >\n * <App />\n * </AnalyticsProvider>\n * ```\n */\nexport function AnalyticsProvider({ onTrack, debug = false, children }: AnalyticsProviderProps) {\n const track: TrackFn = useCallback(\n (event, props) => {\n if (debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.log('[DS Analytics]', event, props);\n }\n onTrack(event, props);\n },\n [onTrack, debug],\n );\n\n const value = useMemo(() => ({ track }), [track]);\n\n return <AnalyticsContext.Provider value={value}>{children}</AnalyticsContext.Provider>;\n}\n"]}
@@ -1,39 +0,0 @@
1
- import React from 'react';
2
- import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
3
- import clsx from 'clsx';
4
- import { jsxs, jsx } from 'react/jsx-runtime';
5
-
6
- // src/components/Checkbox/Checkbox.tsx
7
- var Checkbox = React.forwardRef(
8
- ({ className, label, id, ...props }, ref) => {
9
- const generatedId = React.useId();
10
- const checkboxId = id || generatedId;
11
- return /* @__PURE__ */ jsxs("div", { className: clsx("ds-checkbox-wrapper", className), children: [
12
- /* @__PURE__ */ jsx(Checkbox$1.Root, { id: checkboxId, ref, className: "ds-checkbox", ...props, children: /* @__PURE__ */ jsx(Checkbox$1.Indicator, { className: "ds-checkbox__indicator", children: /* @__PURE__ */ jsx(
13
- "svg",
14
- {
15
- viewBox: "0 0 14 14",
16
- fill: "none",
17
- xmlns: "http://www.w3.org/2000/svg",
18
- className: "ds-checkbox__icon",
19
- children: /* @__PURE__ */ jsx(
20
- "path",
21
- {
22
- d: "M11.6666 3.5L5.24992 9.91667L2.33325 7",
23
- stroke: "currentColor",
24
- strokeWidth: "2",
25
- strokeLinecap: "round",
26
- strokeLinejoin: "round"
27
- }
28
- )
29
- }
30
- ) }) }),
31
- label && /* @__PURE__ */ jsx("label", { htmlFor: checkboxId, className: "ds-checkbox__label", children: label })
32
- ] });
33
- }
34
- );
35
- Checkbox.displayName = "Checkbox";
36
-
37
- export { Checkbox };
38
- //# sourceMappingURL=out.js.map
39
- //# sourceMappingURL=chunk-7PX2AZ6Y.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":";AAAA,OAAO,WAAW;AAClB,SAAS,YAAY,oBAAoB;AACzC,OAAO,UAAU;AAuBX,SASQ,KATR;AANC,IAAM,WAAW,MAAM;AAAA,EAC5B,CAAC,EAAE,WAAW,OAAO,IAAI,GAAG,MAAM,GAAG,QAAQ;AAC3C,UAAM,cAAc,MAAM,MAAM;AAChC,UAAM,aAAa,MAAM;AAEzB,WACE,qBAAC,SAAI,WAAW,KAAK,uBAAuB,SAAS,GACnD;AAAA,0BAAC,aAAa,MAAb,EAAkB,IAAI,YAAY,KAAU,WAAU,eAAe,GAAG,OACvE,8BAAC,aAAa,WAAb,EAAuB,WAAU,0BAChC;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,UACN,WAAU;AAAA,UAEV;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,gBAAe;AAAA;AAAA,UACjB;AAAA;AAAA,MACF,GACF,GACF;AAAA,MACC,SACC,oBAAC,WAAM,SAAS,YAAY,WAAU,sBACnC,iBACH;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc","sourcesContent":["import React from 'react';\nimport { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';\nimport clsx from 'clsx';\nimport './Checkbox.css';\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n readOnly?: boolean;\n name?: string;\n value?: string;\n id?: string;\n label?: string;\n className?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n ({ className, label, id, ...props }, ref) => {\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n\n return (\n <div className={clsx('ds-checkbox-wrapper', className)}>\n <BaseCheckbox.Root id={checkboxId} ref={ref} className=\"ds-checkbox\" {...props}>\n <BaseCheckbox.Indicator className=\"ds-checkbox__indicator\">\n <svg\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ds-checkbox__icon\"\n >\n <path\n d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </BaseCheckbox.Indicator>\n </BaseCheckbox.Root>\n {label && (\n <label htmlFor={checkboxId} className=\"ds-checkbox__label\">\n {label}\n </label>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n"]}