exploreda 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +144 -0
  2. package/dist/ExplorEda.cjs +4608 -10858
  3. package/dist/ExplorEda.cjs.map +1 -1
  4. package/dist/ExplorEda.css +2332 -1653
  5. package/dist/ExplorEda.css.map +1 -1
  6. package/dist/ExplorEda.d.cts +125 -278
  7. package/dist/ExplorEda.d.ts +125 -278
  8. package/dist/ExplorEda.js +4521 -10782
  9. package/dist/ExplorEda.js.map +1 -1
  10. package/dist/calculations.cjs +18 -0
  11. package/dist/calculations.cjs.map +1 -0
  12. package/dist/calculations.d.cts +63 -0
  13. package/dist/calculations.d.ts +63 -0
  14. package/dist/calculations.js +3 -0
  15. package/dist/calculations.js.map +1 -0
  16. package/dist/charts/bar.cjs +27 -0
  17. package/dist/charts/bar.cjs.map +1 -0
  18. package/dist/charts/bar.d.cts +2 -0
  19. package/dist/charts/bar.d.ts +2 -0
  20. package/dist/charts/bar.js +18 -0
  21. package/dist/charts/bar.js.map +1 -0
  22. package/dist/charts/box-plot.cjs +26 -0
  23. package/dist/charts/box-plot.cjs.map +1 -0
  24. package/dist/charts/box-plot.d.cts +2 -0
  25. package/dist/charts/box-plot.d.ts +2 -0
  26. package/dist/charts/box-plot.js +17 -0
  27. package/dist/charts/box-plot.js.map +1 -0
  28. package/dist/charts/color-legend.cjs +22 -0
  29. package/dist/charts/color-legend.cjs.map +1 -0
  30. package/dist/charts/color-legend.d.cts +2 -0
  31. package/dist/charts/color-legend.d.ts +2 -0
  32. package/dist/charts/color-legend.js +13 -0
  33. package/dist/charts/color-legend.js.map +1 -0
  34. package/dist/charts/data-table.cjs +22 -0
  35. package/dist/charts/data-table.cjs.map +1 -0
  36. package/dist/charts/data-table.d.cts +2 -0
  37. package/dist/charts/data-table.d.ts +2 -0
  38. package/dist/charts/data-table.js +13 -0
  39. package/dist/charts/data-table.js.map +1 -0
  40. package/dist/charts/line.cjs +30 -0
  41. package/dist/charts/line.cjs.map +1 -0
  42. package/dist/charts/line.d.cts +2 -0
  43. package/dist/charts/line.d.ts +2 -0
  44. package/dist/charts/line.js +17 -0
  45. package/dist/charts/line.js.map +1 -0
  46. package/dist/charts/markdown.cjs +16 -0
  47. package/dist/charts/markdown.cjs.map +1 -0
  48. package/dist/charts/markdown.css +77 -0
  49. package/dist/charts/markdown.css.map +1 -0
  50. package/dist/charts/markdown.d.cts +2 -0
  51. package/dist/charts/markdown.d.ts +2 -0
  52. package/dist/charts/markdown.js +7 -0
  53. package/dist/charts/markdown.js.map +1 -0
  54. package/dist/charts/pivot-table.cjs +23 -0
  55. package/dist/charts/pivot-table.cjs.map +1 -0
  56. package/dist/charts/pivot-table.d.cts +2 -0
  57. package/dist/charts/pivot-table.d.ts +2 -0
  58. package/dist/charts/pivot-table.js +14 -0
  59. package/dist/charts/pivot-table.js.map +1 -0
  60. package/dist/charts/row.cjs +27 -0
  61. package/dist/charts/row.cjs.map +1 -0
  62. package/dist/charts/row.d.cts +6 -0
  63. package/dist/charts/row.d.ts +6 -0
  64. package/dist/charts/row.js +18 -0
  65. package/dist/charts/row.js.map +1 -0
  66. package/dist/charts/scatter.cjs +24 -0
  67. package/dist/charts/scatter.cjs.map +1 -0
  68. package/dist/charts/scatter.d.cts +2 -0
  69. package/dist/charts/scatter.d.ts +2 -0
  70. package/dist/charts/scatter.js +15 -0
  71. package/dist/charts/scatter.js.map +1 -0
  72. package/dist/charts/summary-table.cjs +19 -0
  73. package/dist/charts/summary-table.cjs.map +1 -0
  74. package/dist/charts/summary-table.d.cts +2 -0
  75. package/dist/charts/summary-table.d.ts +2 -0
  76. package/dist/charts/summary-table.js +10 -0
  77. package/dist/charts/summary-table.js.map +1 -0
  78. package/dist/charts/three-d-scatter.cjs +24 -0
  79. package/dist/charts/three-d-scatter.cjs.map +1 -0
  80. package/dist/charts/three-d-scatter.d.cts +6 -0
  81. package/dist/charts/three-d-scatter.d.ts +6 -0
  82. package/dist/charts/three-d-scatter.js +15 -0
  83. package/dist/charts/three-d-scatter.js.map +1 -0
  84. package/dist/chunk-3PGYFLE3.cjs +499 -0
  85. package/dist/chunk-3PGYFLE3.cjs.map +1 -0
  86. package/dist/chunk-4HNDKMWF.js +167 -0
  87. package/dist/chunk-4HNDKMWF.js.map +1 -0
  88. package/dist/chunk-4QNENKTV.cjs +1214 -0
  89. package/dist/chunk-4QNENKTV.cjs.map +1 -0
  90. package/dist/chunk-54M32JJB.js +132 -0
  91. package/dist/chunk-54M32JJB.js.map +1 -0
  92. package/dist/chunk-5B23JVH3.cjs +2238 -0
  93. package/dist/chunk-5B23JVH3.cjs.map +1 -0
  94. package/dist/chunk-5LH6NSNL.js +456 -0
  95. package/dist/chunk-5LH6NSNL.js.map +1 -0
  96. package/dist/chunk-6DOKKCJ5.cjs +313 -0
  97. package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
  98. package/dist/chunk-6HZX5CBT.cjs +1074 -0
  99. package/dist/chunk-6HZX5CBT.cjs.map +1 -0
  100. package/dist/chunk-6U5DOIQM.js +1071 -0
  101. package/dist/chunk-6U5DOIQM.js.map +1 -0
  102. package/dist/chunk-7GBZIK2R.cjs +80 -0
  103. package/dist/chunk-7GBZIK2R.cjs.map +1 -0
  104. package/dist/chunk-7PTJNIOD.js +520 -0
  105. package/dist/chunk-7PTJNIOD.js.map +1 -0
  106. package/dist/chunk-AHZYQ7FN.js +319 -0
  107. package/dist/chunk-AHZYQ7FN.js.map +1 -0
  108. package/dist/chunk-AOODAOL4.cjs +55 -0
  109. package/dist/chunk-AOODAOL4.cjs.map +1 -0
  110. package/dist/chunk-ASKFIRMC.cjs +165 -0
  111. package/dist/chunk-ASKFIRMC.cjs.map +1 -0
  112. package/dist/chunk-B7OQUBH4.cjs +171 -0
  113. package/dist/chunk-B7OQUBH4.cjs.map +1 -0
  114. package/dist/chunk-BIMEHDLB.js +72 -0
  115. package/dist/chunk-BIMEHDLB.js.map +1 -0
  116. package/dist/chunk-C62KHV7S.js +1225 -0
  117. package/dist/chunk-C62KHV7S.js.map +1 -0
  118. package/dist/chunk-C7GQT65O.cjs +1119 -0
  119. package/dist/chunk-C7GQT65O.cjs.map +1 -0
  120. package/dist/chunk-CGDWDV4Z.js +1211 -0
  121. package/dist/chunk-CGDWDV4Z.js.map +1 -0
  122. package/dist/chunk-CJQQFNEY.js +69 -0
  123. package/dist/chunk-CJQQFNEY.js.map +1 -0
  124. package/dist/chunk-DHYLSXNR.js +964 -0
  125. package/dist/chunk-DHYLSXNR.js.map +1 -0
  126. package/dist/chunk-DKFA4KOJ.cjs +87 -0
  127. package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
  128. package/dist/chunk-DS5BS7PP.cjs +357 -0
  129. package/dist/chunk-DS5BS7PP.cjs.map +1 -0
  130. package/dist/chunk-EGMFQSGK.js +909 -0
  131. package/dist/chunk-EGMFQSGK.js.map +1 -0
  132. package/dist/chunk-EU5EFHO5.cjs +53 -0
  133. package/dist/chunk-EU5EFHO5.cjs.map +1 -0
  134. package/dist/chunk-FM46QSDM.js +837 -0
  135. package/dist/chunk-FM46QSDM.js.map +1 -0
  136. package/dist/chunk-GV2LRR32.cjs +843 -0
  137. package/dist/chunk-GV2LRR32.cjs.map +1 -0
  138. package/dist/chunk-H3XKFSA5.cjs +322 -0
  139. package/dist/chunk-H3XKFSA5.cjs.map +1 -0
  140. package/dist/chunk-H5AVMMCE.js +347 -0
  141. package/dist/chunk-H5AVMMCE.js.map +1 -0
  142. package/dist/chunk-JDMUN4VK.cjs +986 -0
  143. package/dist/chunk-JDMUN4VK.cjs.map +1 -0
  144. package/dist/chunk-JNO7OXCC.js +2171 -0
  145. package/dist/chunk-JNO7OXCC.js.map +1 -0
  146. package/dist/chunk-JQMG4ZR7.js +111 -0
  147. package/dist/chunk-JQMG4ZR7.js.map +1 -0
  148. package/dist/chunk-L2Q2R43U.cjs +118 -0
  149. package/dist/chunk-L2Q2R43U.cjs.map +1 -0
  150. package/dist/chunk-LBTZVERO.js +466 -0
  151. package/dist/chunk-LBTZVERO.js.map +1 -0
  152. package/dist/chunk-LUUGGTTK.cjs +1227 -0
  153. package/dist/chunk-LUUGGTTK.cjs.map +1 -0
  154. package/dist/chunk-MEEPH7ZC.cjs +911 -0
  155. package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
  156. package/dist/chunk-MJPDJ5AS.js +184 -0
  157. package/dist/chunk-MJPDJ5AS.js.map +1 -0
  158. package/dist/chunk-MJROUIDZ.cjs +219 -0
  159. package/dist/chunk-MJROUIDZ.cjs.map +1 -0
  160. package/dist/chunk-MUWSBYJS.js +528 -0
  161. package/dist/chunk-MUWSBYJS.js.map +1 -0
  162. package/dist/chunk-NDF5LCST.js +1088 -0
  163. package/dist/chunk-NDF5LCST.js.map +1 -0
  164. package/dist/chunk-NGWTPED4.js +311 -0
  165. package/dist/chunk-NGWTPED4.js.map +1 -0
  166. package/dist/chunk-PP4VCONW.js +739 -0
  167. package/dist/chunk-PP4VCONW.js.map +1 -0
  168. package/dist/chunk-PRMC2A6P.cjs +488 -0
  169. package/dist/chunk-PRMC2A6P.cjs.map +1 -0
  170. package/dist/chunk-PST6UU6S.cjs +742 -0
  171. package/dist/chunk-PST6UU6S.cjs.map +1 -0
  172. package/dist/chunk-Q7LK2UWH.js +33 -0
  173. package/dist/chunk-Q7LK2UWH.js.map +1 -0
  174. package/dist/chunk-SFV5LZPD.js +162 -0
  175. package/dist/chunk-SFV5LZPD.js.map +1 -0
  176. package/dist/chunk-SKXGYJJG.cjs +370 -0
  177. package/dist/chunk-SKXGYJJG.cjs.map +1 -0
  178. package/dist/chunk-SWLNKY6R.js +477 -0
  179. package/dist/chunk-SWLNKY6R.js.map +1 -0
  180. package/dist/chunk-TGVLNHUB.cjs +483 -0
  181. package/dist/chunk-TGVLNHUB.cjs.map +1 -0
  182. package/dist/chunk-TLLRW6S3.js +74 -0
  183. package/dist/chunk-TLLRW6S3.js.map +1 -0
  184. package/dist/chunk-TRAIXZ6M.cjs +140 -0
  185. package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
  186. package/dist/chunk-U74A5VK5.cjs +74 -0
  187. package/dist/chunk-U74A5VK5.cjs.map +1 -0
  188. package/dist/chunk-UAVDLBTA.cjs +74 -0
  189. package/dist/chunk-UAVDLBTA.cjs.map +1 -0
  190. package/dist/chunk-UJWS6TRV.js +354 -0
  191. package/dist/chunk-UJWS6TRV.js.map +1 -0
  192. package/dist/chunk-UUJMUPB3.cjs +531 -0
  193. package/dist/chunk-UUJMUPB3.cjs.map +1 -0
  194. package/dist/chunk-VTKHZIJB.cjs +549 -0
  195. package/dist/chunk-VTKHZIJB.cjs.map +1 -0
  196. package/dist/chunk-YXPAWUXO.js +51 -0
  197. package/dist/chunk-YXPAWUXO.js.map +1 -0
  198. package/dist/chunk-ZD64SCZB.js +80 -0
  199. package/dist/chunk-ZD64SCZB.js.map +1 -0
  200. package/dist/core.cjs +28 -0
  201. package/dist/core.cjs.map +1 -0
  202. package/dist/core.d.cts +22 -0
  203. package/dist/core.d.ts +22 -0
  204. package/dist/core.js +3 -0
  205. package/dist/core.js.map +1 -0
  206. package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
  207. package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
  208. package/package.json +32 -52
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/tabs.tsx","../src/components/FieldMetadata.tsx","../src/components/calculations/CalculationForm.tsx","../src/components/calculations/calculationHelpers.ts","../src/components/calculations/CalculationPreview.tsx","../src/components/calculations/CalculationTrace.tsx","../src/components/calculations/CalculationEditor.tsx","../src/components/calculations/CalculatedFieldBadge.tsx"],"names":["jsx","TabsPrimitive","cn","Hash","Type","CalendarDays","ToggleLeft","buildFieldProfile","TooltipProvider","jsxs","Tooltip","TooltipTrigger","TooltipContent","Fragment","useDataLayer","useRef","useState","Label","Input","calculationFunctions","Button","ActionTooltip","createContext","useContext","useCallback","useMemo","useEffect","parseExpression","CalculationManager","getChartFields","CircleAlert","CheckCircle2","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Popover","PopoverTrigger","PopoverContent"],"mappings":"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","file":"chunk-C7GQT65O.cjs","sourcesContent":["import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-1\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background data-[state=active]:text-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 inline-flex items-center justify-center gap-2 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 aria-invalid:focus-visible:ring-0 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 flex-1 transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 aria-invalid:focus-visible:ring-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import type { datum } from \"@/types/ChartTypes\";\nimport { buildFieldProfile, type FieldProfile } from \"@/lib/fieldProfiles\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { cn } from \"@/lib/utils\";\nimport { CalendarDays, Hash, ToggleLeft, Type } from \"lucide-react\";\n\nconst typeLabels: Record<FieldProfile[\"dataType\"], string> = {\n numeric: \"Number\",\n categorical: \"Text\",\n datetime: \"Date\",\n boolean: \"Boolean\",\n};\nconst typeIcons = {\n numeric: Hash,\n categorical: Type,\n datetime: CalendarDays,\n boolean: ToggleLeft,\n};\n\nconst valueLabel = (value: unknown) => {\n if (value == null || value === \"\") return \"—\";\n if (typeof value === \"number\") {\n return new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 3 }).format(\n value\n );\n }\n return String(value);\n};\n\nexport function resolveFieldProfile(\n name: string,\n profiles: FieldProfile[],\n getColumnData: (field: string) => Record<number, datum>\n) {\n const profile = profiles.find((item) => item.name === name);\n if (profile) return profile;\n\n const columnData = getColumnData(name);\n return Object.keys(columnData).length\n ? buildFieldProfile(name, columnData)\n : undefined;\n}\n\nfunction dateRange(profile: FieldProfile) {\n if (profile.dataType !== \"datetime\") return undefined;\n\n let first: datum | undefined;\n let last: datum | undefined;\n let firstTime = Infinity;\n let lastTime = -Infinity;\n for (const { value } of profile.categories?.distribution ?? []) {\n const time = Date.parse(String(value));\n if (!Number.isFinite(time)) continue;\n if (time < firstTime) {\n first = value;\n firstTime = time;\n }\n if (time > lastTime) {\n last = value;\n lastTime = time;\n }\n }\n if (first == null || last == null) return undefined;\n\n const start = String(first);\n const end = String(last);\n return start === end ? start : `${start}–${end}`;\n}\n\nexport function fieldMetadata(profile: FieldProfile) {\n const range = profile.statistics\n ? `${valueLabel(profile.statistics.min)}–${valueLabel(profile.statistics.max)}`\n : dateRange(profile);\n const sample = profile.categories?.topValues[0]\n ? valueLabel(profile.categories.topValues[0].value)\n : undefined;\n return {\n type: typeLabels[profile.dataType],\n detail: range ?? (sample ? `e.g. ${sample}` : \"No sample\"),\n detailLabel: range ? \"Range\" : \"Sample\",\n nulls: `${profile.nullCount.toLocaleString()} null${profile.nullCount === 1 ? \"\" : \"s\"}`,\n excluded: profile.excludedCount\n ? `${profile.excludedCount.toLocaleString()} not finite`\n : undefined,\n };\n}\n\nexport function FieldMetadata({\n profile,\n label,\n compact = false,\n showDetail = true,\n className,\n tooltipSide = \"bottom\",\n}: {\n profile?: FieldProfile;\n label?: string;\n compact?: boolean;\n showDetail?: boolean;\n className?: string;\n tooltipSide?: \"bottom\" | \"left\" | \"top\";\n}) {\n if (!profile) return <span className={className}>{label}</span>;\n const metadata = fieldMetadata(profile);\n const description = [\n metadata.type,\n metadata.detail,\n metadata.nulls,\n metadata.excluded,\n ]\n .filter(Boolean)\n .join(\"; \");\n const TypeIcon = typeIcons[profile.dataType];\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n compact\n ? \"inline-flex min-w-0 items-center gap-1\"\n : \"inline-flex min-w-0 items-baseline gap-1.5\",\n className\n )}\n aria-label={`${label ?? profile.name}: ${description}`}\n >\n {compact && (\n <TypeIcon\n className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n )}\n {label && <span className=\"truncate font-medium\">{label}</span>}\n {!compact && (\n <span className=\"flex min-w-0 gap-1.5 text-[10px] text-muted-foreground\">\n <span className=\"shrink-0\">{metadata.type}</span>\n {showDetail && (\n <span className=\"truncate\">{metadata.detail}</span>\n )}\n <span className=\"shrink-0\">{metadata.nulls}</span>\n </span>\n )}\n </span>\n </TooltipTrigger>\n <TooltipContent side={tooltipSide} align=\"start\" collisionPadding={12}>\n <p className=\"mb-2 font-semibold\">{label ?? profile.name}</p>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-xs\">\n <dt className=\"text-muted-foreground\">Type</dt>\n <dd>{metadata.type}</dd>\n <dt className=\"text-muted-foreground\">{metadata.detailLabel}</dt>\n <dd>{metadata.detail}</dd>\n <dt className=\"text-muted-foreground\">Nulls</dt>\n <dd>{metadata.nulls}</dd>\n {metadata.excluded && (\n <>\n <dt className=\"text-muted-foreground\">Excluded</dt>\n <dd>{metadata.excluded}</dd>\n </>\n )}\n <dt className=\"text-muted-foreground\">Distinct</dt>\n <dd>{profile.uniqueCount.toLocaleString()}</dd>\n </dl>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n","/*\n * THESIS: edit a formula beside its inputs, result, and dependency chain.\n * OWN-WORLD: inherit the workspace's neutral surfaces, blue actions, and compact controls.\n * STORY: inspect a value, change one step, compare results, then apply deliberately.\n * FIRST VIEWPORT: formula and row preview on the left; chain or insertion library on the right.\n * FORM: a focused extension of the existing calculation editor; no new visual identity.\n */\nimport { useRef, useState, type ReactNode } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { calculationFunctions } from \"@/lib/calculations/functions/registry\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { FieldMetadata, resolveFieldProfile } from \"@/components/FieldMetadata\";\n\nexport type CalculationDraft = { name: string; expression: string };\ntype Props = {\n draft: CalculationDraft;\n onChange: (draft: CalculationDraft) => void;\n fields: string[];\n calculatedFields: string[];\n editing: boolean;\n nameLocked: boolean;\n checking: boolean;\n canApply: boolean;\n dirty: boolean;\n status: ReactNode;\n preview: ReactNode;\n trace: ReactNode;\n impact: string;\n onApply: () => void;\n onDiscard: () => void;\n onClose: () => void;\n};\n\nexport function CalculationForm({\n draft,\n onChange,\n fields,\n calculatedFields,\n editing,\n nameLocked,\n checking,\n canApply,\n dirty,\n status,\n preview,\n trace,\n impact,\n onApply,\n onDiscard,\n onClose,\n}: Props) {\n const fieldProfiles = useDataLayer((state) => state.fieldProfiles);\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const input = useRef<HTMLTextAreaElement>(null);\n const [search, setSearch] = useState(\"\");\n const [tab, setTab] = useState(editing ? \"chain\" : \"fields\");\n const insert = (\n text: string,\n selectStart = text.length,\n selectEnd = selectStart\n ) => {\n const start = input.current?.selectionStart ?? draft.expression.length;\n const end = input.current?.selectionEnd ?? start;\n onChange({\n ...draft,\n expression:\n draft.expression.slice(0, start) + text + draft.expression.slice(end),\n });\n requestAnimationFrame(() => {\n input.current?.focus();\n input.current?.setSelectionRange(start + selectStart, start + selectEnd);\n });\n };\n const matches = fields.filter((field) =>\n field.toLowerCase().includes(search.toLowerCase())\n );\n return (\n <form\n className=\"eda-calc-form\"\n onSubmit={(event) => {\n event.preventDefault();\n if (canApply) onApply();\n }}\n onKeyDown={(event) => {\n if ((event.metaKey || event.ctrlKey) && event.key === \"Enter\") {\n event.preventDefault();\n if (canApply) onApply();\n }\n }}\n >\n <div className=\"eda-calc-editor-grid\">\n <div className=\"eda-calc-main\">\n <div\n className={\n nameLocked\n ? \"eda-calc-name eda-calc-name-locked\"\n : \"eda-calc-name\"\n }\n >\n <Label htmlFor=\"calculation-name\">Field name</Label>\n <Input\n id=\"calculation-name\"\n value={draft.name}\n readOnly={nameLocked}\n onChange={(event) =>\n onChange({ ...draft, name: event.target.value })\n }\n placeholder=\"e.g. Net sales\"\n />\n {nameLocked && (\n <p className=\"eda-calc-help\">\n This name is used by other calculations or views. Its formula\n can still change.\n </p>\n )}\n </div>\n <div className=\"eda-calc-section-heading\">\n <Label htmlFor=\"calculation-expression\">Formula</Label>\n <span>One result per source row · UTC dates</span>\n </div>\n <textarea\n ref={input}\n id=\"calculation-expression\"\n value={draft.expression}\n spellCheck={false}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n placeholder={'e.g. [\"Revenue\"] - [\"Cost\"]'}\n onChange={(event) =>\n onChange({ ...draft, expression: event.target.value })\n }\n aria-describedby=\"calculation-syntax calculation-validation\"\n />\n <div className=\"eda-calc-formula-tools\">\n <p id=\"calculation-syntax\" className=\"eda-calc-help\">\n Use [\"Field name\"] for a field and \"text\" for a literal.\n </p>\n <button\n type=\"button\"\n className=\"eda-calc-text-button\"\n onClick={() => setTab(\"functions\")}\n >\n Function help\n </button>\n </div>\n <div\n id=\"calculation-validation\"\n className=\"eda-calc-validation\"\n aria-live=\"polite\"\n aria-busy={checking}\n >\n {status}\n </div>\n {preview}\n </div>\n <aside className=\"eda-calc-aside\" aria-label=\"Calculation tools\">\n <Tabs value={tab} onValueChange={setTab}>\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"chain\">Chain</TabsTrigger>\n <TabsTrigger value=\"fields\">Fields</TabsTrigger>\n <TabsTrigger value=\"functions\">Functions</TabsTrigger>\n </TabsList>\n <TabsContent value=\"chain\">{trace}</TabsContent>\n <TabsContent value=\"fields\">\n <p className=\"eda-calc-help mb-3\">\n Insert at the cursor, or replace selected text.\n </p>\n <Input\n aria-label=\"Find a field\"\n placeholder=\"Find a field…\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n {[true, false].map((calculated) => {\n const group = matches.filter(\n (field) => calculatedFields.includes(field) === calculated\n );\n return (\n group.length > 0 && (\n <section\n className=\"eda-calc-field-group\"\n key={String(calculated)}\n >\n <h3>\n {calculated ? \"Calculated fields\" : \"Source fields\"}\n <span>{group.length}</span>\n </h3>\n {group.map((field) => (\n <button\n key={field}\n type=\"button\"\n onClick={() =>\n insert(\"[\" + JSON.stringify(field) + \"]\")\n }\n >\n <span\n className={\n calculated\n ? \"eda-calc-symbol\"\n : \"text-muted-foreground\"\n }\n >\n {calculated ? \"ƒx\" : \"·\"}\n </span>\n <FieldMetadata\n profile={resolveFieldProfile(\n field,\n fieldProfiles,\n getColumnData\n )}\n label={field}\n compact\n className=\"min-w-0 flex-1\"\n />\n <span\n className=\"ml-auto text-muted-foreground\"\n aria-hidden=\"true\"\n >\n +\n </span>\n </button>\n ))}\n </section>\n )\n );\n })}\n {!matches.length && (\n <p className=\"eda-calc-help mt-4\">\n No fields match “{search}”.\n </p>\n )}\n </TabsContent>\n <TabsContent value=\"functions\">\n <p className=\"eda-calc-help mb-3\">\n Select a function to insert it. Replace the selected argument\n with a field or value.\n </p>\n <div className=\"eda-calc-function-list\">\n {Object.values(calculationFunctions).map((fn) => (\n <button\n key={fn.syntax}\n type=\"button\"\n onClick={() => {\n const text = fn.syntax.replace(\", …\", \"\");\n const start = text.indexOf(\"(\") + 1;\n const end = text.indexOf(\",\", start);\n insert(text, start, end === -1 ? text.length - 1 : end);\n }}\n >\n <code>{fn.syntax}</code>\n <span>{fn.description}</span>\n </button>\n ))}\n </div>\n <details className=\"eda-calc-syntax-help\">\n <summary>Operators and rules</summary>\n <p>Arithmetic: + − * / ^</p>\n <p>Compare: == != &gt; &gt;= &lt; &lt;=</p>\n <p>Logic: &amp;&amp; (and), || (or), ! (not)</p>\n <code>if x &gt; 0 then x else 0</code>\n <p>Guard missing values with x == null.</p>\n <p>Date components: year, month, day, quarter, week (ISO).</p>\n </details>\n </TabsContent>\n </Tabs>\n </aside>\n </div>\n <footer className=\"eda-calc-editor-footer\">\n <div className=\"min-w-0\">\n <p>{impact}</p>\n <p className=\"eda-calc-help\">\n {dirty\n ? \"Draft only. Apply to update the analysis. Closing keeps your draft in this session.\"\n : \"Active filters stay in place when you apply a change.\"}\n </p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {dirty && (\n <Button type=\"button\" variant=\"ghost\" onClick={onDiscard}>\n Discard draft\n </Button>\n )}\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n Close\n </Button>\n <Button type=\"submit\" disabled={!canApply}>\n {editing ? \"Apply changes\" : \"Create calculation\"}\n <span className=\"eda-calc-shortcut\" aria-hidden=\"true\">\n ⌘/Ctrl ↵\n </span>\n </Button>\n </div>\n </footer>\n </form>\n );\n}\n","import type { CalculationDefinition } from \"@/lib/calculations/CalculationState\";\nimport type { datum } from \"@/types/ChartTypes\";\n\nexport function dependentCalculations(\n calculations: CalculationDefinition[],\n name: string\n) {\n const names = new Set([name]);\n let added = true;\n while (added) {\n added = false;\n for (const calc of calculations) {\n if (\n !names.has(calc.resultColumnName) &&\n calc.expression.dependencies.some((field) => names.has(field))\n ) {\n names.add(calc.resultColumnName);\n added = true;\n }\n }\n }\n return calculations.filter(\n (calc) => calc.resultColumnName !== name && names.has(calc.resultColumnName)\n );\n}\n\nconst numbers = new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 6 });\nexport function calculationValue(value: datum) {\n if (value == null) return \"Missing\";\n if (typeof value === \"number\") return numbers.format(value);\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n return value === \"\" ? '\"\"' : value;\n}\n","import { useState } from \"react\";\nimport type {\n CalculationDefinition,\n CalculationManager,\n} from \"@/lib/calculations/CalculationState\";\nimport type { DatumObject, HasId } from \"@/providers/DataLayerProvider\";\nimport { calculationValue } from \"./calculationHelpers\";\nimport { Button } from \"@/components/ui/button\";\n\ntype Props = {\n calculation: CalculationDefinition;\n manager: CalculationManager<DatumObject>;\n savedManager: CalculationManager<DatumObject>;\n data: (DatumObject & HasId)[];\n selectedRow: number;\n onSelectRow: (id: number) => void;\n changed: boolean;\n};\n\nexport function CalculationPreview({\n calculation,\n manager,\n savedManager,\n data,\n selectedRow,\n onSelectRow,\n changed,\n}: Props) {\n const [errorsOnly, setErrorsOnly] = useState(false);\n const [page, setPage] = useState(() =>\n Math.max(\n 0,\n Math.floor(data.findIndex((row) => row.__ID === selectedRow) / 5)\n )\n );\n const name = calculation.resultColumnName;\n const values = manager.executeCalculation(calculation);\n const errors = manager.getErrors(name);\n const dependencies = calculation.expression.dependencies;\n const definitions = manager.getCalculations();\n const saved = savedManager\n .getCalculations()\n .find((calc) => calc.resultColumnName === name);\n const before = saved ? savedManager.executeCalculation(saved) : null;\n const inputValues = dependencies.map((field) => {\n const calc = definitions.find((item) => item.resultColumnName === field);\n return calc ? manager.executeCalculation(calc) : null;\n });\n const rows = errorsOnly ? data.filter((row) => errors.has(row.__ID)) : data;\n const currentPage = Math.min(\n page,\n Math.max(0, Math.ceil(rows.length / 5) - 1)\n );\n const start = currentPage * 5;\n return (\n <section className=\"eda-calc-preview\" aria-label=\"Calculation preview\">\n <div className=\"eda-calc-section-heading\">\n <h3>Inputs → result</h3>\n <span>{changed ? \"Draft preview\" : \"Saved values\"}</span>\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2 mb-3\">\n <p className=\"eda-calc-help\">\n All loaded rows, before chart filters. Select a row to follow its\n values through the chain.\n </p>\n {errors.size > 0 && (\n <label className=\"flex items-center gap-2 text-xs\">\n <input\n type=\"checkbox\"\n checked={errorsOnly}\n onChange={(event) => {\n setErrorsOnly(event.target.checked);\n setPage(0);\n }}\n />\n Failed rows only\n </label>\n )}\n </div>\n <div className=\"eda-calc-preview-scroll\">\n <table>\n <thead>\n <tr>\n <th>Row</th>\n {dependencies.map((field) => (\n <th key={field}>\n {definitions.some(\n (calc) => calc.resultColumnName === field\n ) && <span className=\"eda-calc-symbol mr-1\">ƒx</span>}\n {field}\n </th>\n ))}\n {changed && before && <th>Saved result</th>}\n <th>{changed ? \"Draft result\" : \"Result\"}</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n {rows.slice(start, start + 5).map((row) => (\n <tr key={row.__ID} data-selected={row.__ID === selectedRow}>\n <td>\n <button\n type=\"button\"\n aria-label={\"Trace row \" + (row.__ID + 1)}\n aria-pressed={row.__ID === selectedRow}\n onClick={() => onSelectRow(row.__ID)}\n >\n {row.__ID + 1}\n </button>\n </td>\n {dependencies.map((field, index) => (\n <td key={field}>\n {calculationValue(\n inputValues[index]\n ? inputValues[index]!.get(row.__ID)\n : row[field]\n )}\n </td>\n ))}\n {changed && before && (\n <td className=\"text-muted-foreground\">\n {calculationValue(before.get(row.__ID))}\n </td>\n )}\n <td className=\"font-semibold\">\n {errors.has(row.__ID)\n ? \"—\"\n : calculationValue(values.get(row.__ID))}\n </td>\n <td\n className={\n errors.has(row.__ID)\n ? \"text-destructive\"\n : \"text-muted-foreground\"\n }\n >\n {errors.get(row.__ID) ??\n (values.get(row.__ID) == null ? \"Missing value\" : \"Valid\")}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n {!rows.length && (\n <p className=\"p-4 text-sm text-muted-foreground\">\n {errorsOnly ? \"No failed rows.\" : \"No loaded rows.\"}\n </p>\n )}\n </div>\n <div className=\"flex items-center justify-between gap-3 mt-2 text-xs text-muted-foreground\">\n <span>\n {rows.length ? start + 1 : 0}–{Math.min(start + 5, rows.length)} of{\" \"}\n {rows.length.toLocaleString()} rows\n </span>\n <div className=\"flex gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={currentPage === 0}\n onClick={() => setPage(currentPage - 1)}\n >\n Previous rows\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={start + 5 >= rows.length}\n onClick={() => setPage(currentPage + 1)}\n >\n Next rows\n </Button>\n </div>\n </div>\n </section>\n );\n}\n","import type {\n CalculationDefinition,\n CalculationManager,\n} from \"@/lib/calculations/CalculationState\";\nimport type { DatumObject, HasId } from \"@/providers/DataLayerProvider\";\nimport { calculationValue, dependentCalculations } from \"./calculationHelpers\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { FieldMetadata, resolveFieldProfile } from \"@/components/FieldMetadata\";\nimport { ActionTooltip } from \"@/components/ui/tooltip\";\n\ntype Props = {\n calculations: CalculationDefinition[];\n manager: CalculationManager<DatumObject>;\n row: DatumObject & HasId;\n root: string;\n selected: string;\n draftFields: string[];\n previewing: boolean;\n onSelect: (field: string) => void;\n};\n\nexport function CalculationTrace({\n calculations,\n manager,\n row,\n root,\n selected,\n draftFields,\n previewing,\n onSelect,\n}: Props) {\n const fieldProfiles = useDataLayer((state) => state.fieldProfiles);\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const byName = new Map(\n calculations.map((calc) => [calc.resultColumnName, calc])\n );\n const dependents = dependentCalculations(calculations, selected);\n const node = (name: string, path: Set<string>): React.ReactNode => {\n if (path.has(name)) return null;\n const calc = byName.get(name);\n const value = calc\n ? manager.executeCalculation(calc).get(row.__ID)\n : row[name];\n const error = calc && manager.getErrors(name).get(row.__ID);\n const nextPath = new Set([...path, name]);\n return (\n <li key={name}>\n {calc ? (\n <ActionTooltip content={calc.expression.rawInput}>\n <button\n type=\"button\"\n className=\"eda-calc-node\"\n aria-pressed={name === selected}\n onClick={() => onSelect(name)}\n >\n <span className=\"eda-calc-symbol\" aria-hidden=\"true\">\n ƒx\n </span>\n <span className=\"min-w-0 flex-1\">\n <FieldMetadata\n profile={resolveFieldProfile(\n name,\n fieldProfiles,\n getColumnData\n )}\n label={name}\n compact\n className=\"min-w-0\"\n />\n {draftFields.includes(name) && (\n <small className=\"block text-xs font-normal text-muted-foreground\">\n {name === selected && previewing\n ? \"Draft preview\"\n : \"Draft kept\"}\n </small>\n )}\n </span>\n <ActionTooltip content={error || String(value ?? \"Missing\")}>\n <span\n className={error ? \"text-destructive\" : \"eda-calc-node-value\"}\n >\n {error ? \"Error\" : calculationValue(value)}\n </span>\n </ActionTooltip>\n </button>\n </ActionTooltip>\n ) : (\n <div className=\"eda-calc-source\">\n <FieldMetadata\n profile={resolveFieldProfile(name, fieldProfiles, getColumnData)}\n label={name}\n compact\n className=\"min-w-0 flex-1\"\n />\n <ActionTooltip content={String(value ?? \"Missing\")}>\n <span className=\"eda-calc-node-value\">\n {calculationValue(value)}\n </span>\n </ActionTooltip>\n </div>\n )}\n {calc && calc.expression.dependencies.length > 0 && (\n <ul>\n {calc.expression.dependencies.map((field) => node(field, nextPath))}\n </ul>\n )}\n </li>\n );\n };\n return (\n <div className=\"eda-calc-trace\">\n <div className=\"eda-calc-section-heading\">\n <h3>How this value is made</h3>\n <span>Row {row.__ID + 1}</span>\n </div>\n <p className=\"eda-calc-help\">\n Follow the inputs below. Select a calculation to inspect or edit that\n step.\n </p>\n <ul className=\"eda-calc-tree\" aria-label=\"Calculation dependency chain\">\n {node(root, new Set())}\n </ul>\n {root !== selected && (\n <button\n className=\"eda-calc-text-button\"\n type=\"button\"\n onClick={() => onSelect(root)}\n >\n Return to {root}\n </button>\n )}\n <div className=\"eda-calc-section-heading mt-6\">\n <h3>Used by</h3>\n <span>{dependents.length} calculations</span>\n </div>\n {dependents.length ? (\n <div className=\"eda-calc-link-list\">\n {dependents.map((calc) => (\n <button\n type=\"button\"\n key={calc.resultColumnName}\n onClick={() => onSelect(calc.resultColumnName)}\n >\n <span className=\"eda-calc-symbol\">ƒx</span>\n {calc.resultColumnName}\n </button>\n ))}\n </div>\n ) : (\n <p className=\"eda-calc-help\">No calculations depend on this field.</p>\n )}\n </div>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport {\n CalculationManager,\n type CalculationDefinition,\n} from \"@/lib/calculations/CalculationState\";\nimport { parseExpression } from \"@/lib/calculations/parser/semantics\";\nimport { useDataLayer, type DatumObject } from \"@/providers/DataLayerProvider\";\nimport {\n getChartFields,\n getChartTitle,\n} from \"@/components/charts/chartAccessibility\";\nimport { CalculationForm, type CalculationDraft } from \"./CalculationForm\";\nimport { CalculationPreview } from \"./CalculationPreview\";\nimport { CalculationTrace } from \"./CalculationTrace\";\nimport { dependentCalculations } from \"./calculationHelpers\";\nimport { CheckCircle2, CircleAlert } from \"lucide-react\";\n\ntype Editor = {\n open: (\n name?: string,\n rowId?: number,\n returnFocus?: HTMLElement | null\n ) => void;\n};\nconst EditorContext = createContext<Editor | null>(null);\nexport const useCalculationEditor = () => useContext(EditorContext);\ntype Preview = {\n key: string;\n manager?: CalculationManager<DatumObject>;\n calculation?: CalculationDefinition;\n error?: string;\n};\n\nexport function CalculationEditorProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const data = useDataLayer((state) => state.data);\n const calculations = useDataLayer((state) => state.calculations);\n const savedManager = useDataLayer((state) => state.calculationManager);\n const charts = useDataLayer((state) => state.charts);\n const getColumnNames = useDataLayer((state) => state.getColumnNames);\n const getFieldLabel = useDataLayer((state) => state.getFieldLabel);\n const addCalculation = useDataLayer((state) => state.addCalculation);\n const updateCalculation = useDataLayer((state) => state.updateCalculation);\n const [visible, setVisible] = useState(false);\n const [selected, setSelected] = useState<string>();\n const [root, setRoot] = useState<string>();\n const [rowId, setRowId] = useState(0);\n const [drafts, setDrafts] = useState<Record<string, CalculationDraft>>({});\n const [preview, setPreview] = useState<Preview>();\n const [saveError, setSaveError] = useState(\"\");\n const [savedMessage, setSavedMessage] = useState(\"\");\n const returnFocus = useRef<HTMLElement | null>(null);\n const open = useCallback(\n (name?: string, row?: number, target?: HTMLElement | null) => {\n returnFocus.current = target ?? (document.activeElement as HTMLElement);\n setSelected(name);\n setRoot(name);\n setRowId(row ?? 0);\n setSaveError(\"\");\n setSavedMessage(\"\");\n setVisible(true);\n },\n []\n );\n const editor = useMemo(() => ({ open }), [open]);\n useEffect(() => {\n setDrafts({});\n setVisible(false);\n }, [data]);\n\n const key = selected ?? \"\";\n const calculation = calculations.find(\n (calc) => calc.resultColumnName === selected\n );\n const draft = Object.hasOwn(drafts, key)\n ? drafts[key]!\n : {\n name: calculation?.resultColumnName ?? \"\",\n expression: calculation?.expression.rawInput ?? \"\",\n };\n const dirty =\n draft.name !== (calculation?.resultColumnName ?? \"\") ||\n draft.expression !== (calculation?.expression.rawInput ?? \"\");\n const previewKey = JSON.stringify([selected, draft.name, draft.expression]);\n useEffect(() => {\n if (!visible) return;\n setPreview(undefined);\n const timer = setTimeout(() => {\n if (!draft.name.trim() || !draft.expression.trim()) {\n setPreview({ key: previewKey });\n return;\n }\n try {\n const candidate = {\n resultColumnName: draft.name.trim(),\n expression: parseExpression(draft.expression),\n };\n const manager = new CalculationManager(data, [\n ...calculations.filter((calc) => calc.resultColumnName !== selected),\n candidate,\n ]);\n manager.executeCalculation(candidate);\n setPreview({ key: previewKey, manager, calculation: candidate });\n } catch (error) {\n setPreview({\n key: previewKey,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }, 220);\n return () => clearTimeout(timer);\n }, [visible, previewKey, data, calculations]);\n const current = preview?.key === previewKey ? preview : undefined;\n const checking =\n !current && Boolean(draft.name.trim() && draft.expression.trim());\n const dependents = dependentCalculations(\n calculations,\n selected ?? draft.name\n );\n const affected = new Set([\n selected ?? draft.name,\n ...dependents.map((calc) => calc.resultColumnName),\n ]);\n const usedViews = charts.filter((chart) =>\n [\n ...getChartFields(chart),\n ...chart.filters.map((filter) => filter.field),\n chart.facet?.rowVariable,\n chart.facet?.type === \"grid\" ? chart.facet.columnVariable : undefined,\n ].some((field) => field && affected.has(field))\n );\n const nameLocked = Boolean(\n calculation && (dependents.length || usedViews.length)\n );\n const canApply = Boolean(dirty && current?.manager && current.calculation);\n const errorCount = current?.manager?.getErrors(draft.name.trim()).size ?? 0;\n const removeDraft = () =>\n setDrafts((previous) => {\n const next = { ...previous };\n delete next[key];\n return next;\n });\n const apply = async () => {\n if (!canApply || !current?.calculation) return;\n try {\n if (selected) updateCalculation(selected, current.calculation);\n else await addCalculation(current.calculation);\n removeDraft();\n const name = current.calculation.resultColumnName;\n setSelected(name);\n if (!root || root === selected) setRoot(name);\n setSaveError(\"\");\n setSavedMessage(\n \"Applied. All dependent calculations and views are up to date.\"\n );\n } catch (error) {\n setSaveError(error instanceof Error ? error.message : String(error));\n }\n };\n const traceManager = current?.manager ?? savedManager;\n const traceCalculations = traceManager.getCalculations();\n const traceRoot =\n root === selected\n ? (current?.calculation?.resultColumnName ?? root)\n : (root ?? current?.calculation?.resultColumnName);\n const selectedRow = data.find((row) => row.__ID === rowId) ?? data[0];\n const status =\n saveError || current?.error ? (\n <p role=\"alert\" className=\"eda-calc-error\">\n <CircleAlert aria-hidden=\"true\" size={16} />\n <span>{saveError || current?.error}</span>\n </p>\n ) : checking ? (\n <p role=\"status\">\n Checking formula against {data.length.toLocaleString()} loaded rows…\n </p>\n ) : current?.manager ? (\n <p\n role=\"status\"\n className={errorCount ? \"eda-calc-error\" : \"eda-calc-valid\"}\n >\n {errorCount ? (\n <CircleAlert size={16} aria-hidden=\"true\" />\n ) : (\n <CheckCircle2 size={16} aria-hidden=\"true\" />\n )}\n <span>\n {errorCount\n ? errorCount.toLocaleString() +\n \" of \" +\n data.length.toLocaleString() +\n \" rows failed. Valid rows remain available.\"\n : \"Valid for all \" + data.length.toLocaleString() + \" rows.\"}\n {savedMessage && \" \" + savedMessage}\n </span>\n </p>\n ) : (\n <p>Enter a field name and formula to preview results.</p>\n );\n return (\n <EditorContext.Provider value={editor}>\n {children}\n <Dialog open={visible} onOpenChange={setVisible}>\n <DialogContent\n className=\"eda-calc-editor\"\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n if (returnFocus.current?.isConnected) returnFocus.current.focus();\n }}\n >\n <DialogHeader className=\"eda-calc-editor-header\">\n <DialogTitle>\n <span className=\"eda-calc-symbol mr-2\">ƒx</span>\n {selected ? \"Inspect calculation\" : \"New calculation\"}\n </DialogTitle>\n <DialogDescription>\n {root\n ? \"Following \" +\n root +\n \". Preview a change before applying it to the analysis.\"\n : \"Turn source fields into values you can reuse in any view.\"}\n </DialogDescription>\n </DialogHeader>\n <CalculationForm\n key={key}\n draft={draft}\n onChange={(next) => {\n setDrafts((previous) => ({ ...previous, [key]: next }));\n setSaveError(\"\");\n setSavedMessage(\"\");\n }}\n fields={getColumnNames().filter((field) => field !== selected)}\n calculatedFields={calculations.map((calc) => calc.resultColumnName)}\n editing={Boolean(calculation)}\n nameLocked={nameLocked}\n checking={checking}\n canApply={canApply}\n dirty={dirty}\n status={status}\n impact={\n dependents.length +\n \" dependent calculations · \" +\n usedViews.length +\n \" affected views\"\n }\n onApply={apply}\n onDiscard={() => {\n removeDraft();\n setSaveError(\"\");\n setSavedMessage(\"\");\n }}\n onClose={() => setVisible(false)}\n preview={\n current?.manager && current.calculation ? (\n <CalculationPreview\n key={key}\n calculation={current.calculation}\n manager={current.manager}\n savedManager={savedManager}\n data={data}\n selectedRow={selectedRow?.__ID ?? 0}\n onSelectRow={setRowId}\n changed={dirty}\n />\n ) : (\n <div className=\"eda-calc-preview-empty\">\n <h3>See the result before you apply</h3>\n <p>\n Inputs, saved values, and draft results appear here once the\n formula is valid.\n </p>\n </div>\n )\n }\n trace={\n <>\n {dirty && !current?.manager && (\n <p className=\"eda-calc-help mb-3\">\n The chain shows saved values until this draft can be\n previewed.\n </p>\n )}\n {traceRoot && selectedRow ? (\n <CalculationTrace\n calculations={traceCalculations}\n manager={traceManager}\n row={selectedRow}\n root={traceRoot}\n selected={selected ?? draft.name}\n draftFields={Object.keys(drafts)}\n previewing={Boolean(current?.manager)}\n onSelect={(field) => {\n if (\n root &&\n dependentCalculations(calculations, root).some(\n (calc) => calc.resultColumnName === field\n )\n )\n setRoot(field);\n setSelected(field);\n setSaveError(\"\");\n setSavedMessage(\"\");\n }}\n />\n ) : (\n <p className=\"eda-calc-help\">\n Add a formula to see how its fields connect.\n </p>\n )}\n {usedViews.length > 0 && (\n <section className=\"mt-6\">\n <h3 className=\"text-sm font-medium\">Used in views</h3>\n <ul className=\"eda-calc-view-list\">\n {usedViews.map((chart) => (\n <li key={chart.id}>\n {getChartTitle(chart, getFieldLabel)}\n </li>\n ))}\n </ul>\n </section>\n )}\n </>\n }\n />\n </DialogContent>\n </Dialog>\n </EditorContext.Provider>\n );\n}\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { Button } from \"@/components/ui/button\";\nimport { useCalculationEditor } from \"./CalculationEditor\";\nimport { calculationValue, dependentCalculations } from \"./calculationHelpers\";\nimport { FieldMetadata, resolveFieldProfile } from \"@/components/FieldMetadata\";\n\nexport function CalculatedFieldBadge({\n field,\n showName = false,\n rowId = 0,\n children,\n hoverOpen = true,\n side = \"bottom\",\n}: {\n field: string;\n showName?: boolean;\n rowId?: number;\n children?: ReactNode;\n hoverOpen?: boolean;\n side?: \"bottom\" | \"left\" | \"top\" | \"right\";\n}) {\n const calculations = useDataLayer((state) => state.calculations) ?? [];\n const manager = useDataLayer((state) => state.calculationManager);\n const data = useDataLayer((state) => state.data);\n const fieldProfiles = useDataLayer((state) => state.fieldProfiles);\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const editor = useCalculationEditor();\n const calc = calculations.find((item) => item.resultColumnName === field);\n const [open, setOpen] = useState(false);\n const pinned = useRef(false);\n const restoreFocus = useRef(false);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const trigger = useRef<HTMLButtonElement>(null);\n const cancelTimer = () => clearTimeout(timer.current);\n useEffect(() => () => clearTimeout(timer.current), []);\n if (!calc || !editor) return <>{children}</>;\n const leave = () => {\n cancelTimer();\n if (!pinned.current) timer.current = setTimeout(() => setOpen(false), 180);\n };\n const errors = open ? manager.getErrors(field) : new Map<number, string>();\n const value = open ? manager.executeCalculation(calc).get(rowId) : undefined;\n const profile = open\n ? resolveFieldProfile(field, fieldProfiles, getColumnData)\n : undefined;\n return (\n <Popover\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) pinned.current = false;\n }}\n >\n <PopoverTrigger asChild>\n <button\n ref={trigger}\n type=\"button\"\n className={\n children !== undefined ? \"eda-calc-cell\" : \"eda-calc-badge\"\n }\n aria-label={\n \"Inspect \" +\n field +\n \" calculation\" +\n (children !== undefined ? \", row \" + (rowId + 1) : \"\")\n }\n onPointerEnter={(event) => {\n if (!hoverOpen || event.pointerType === \"touch\" || event.buttons)\n return;\n cancelTimer();\n timer.current = setTimeout(() => setOpen(true), 250);\n }}\n onPointerLeave={leave}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n cancelTimer();\n pinned.current = true;\n restoreFocus.current = true;\n setOpen(true);\n }}\n >\n {children !== undefined ? (\n children\n ) : (\n <>\n <span className=\"eda-calc-symbol\" aria-hidden=\"true\">\n ƒx\n </span>\n {showName && <span>{field}</span>}\n </>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"eda-calc-peek\"\n align=\"start\"\n side={side}\n collisionPadding={12}\n onPointerEnter={cancelTimer}\n onPointerLeave={leave}\n onOpenAutoFocus={(event) => {\n if (!pinned.current) event.preventDefault();\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n if (restoreFocus.current) trigger.current?.focus();\n restoreFocus.current = false;\n }}\n >\n <div className=\"eda-calc-section-heading\">\n <FieldMetadata profile={profile} label={field} compact />\n <span>Calculated field</span>\n </div>\n <pre>{calc.expression.rawInput}</pre>\n <p className=\"eda-calc-help\">\n Uses{\" \"}\n {calc.expression.dependencies.length\n ? calc.expression.dependencies.join(\", \")\n : \"constant values\"}\n .\n </p>\n <div className=\"eda-calc-peek-result\">\n <span>Row {rowId + 1}</span>\n <strong>{errors.get(rowId) ?? calculationValue(value)}</strong>\n </div>\n <p className=\"eda-calc-help\">\n {errors.size\n ? errors.size.toLocaleString() +\n \" of \" +\n data.length.toLocaleString() +\n \" rows failed\"\n : \"All \" + data.length.toLocaleString() + \" rows valid\"}{\" \"}\n · {dependentCalculations(calculations, field).length} dependent\n calculations\n </p>\n <Button\n type=\"button\"\n className=\"mt-4 w-full\"\n onClick={() => {\n setOpen(false);\n pinned.current = false;\n restoreFocus.current = false;\n editor.open(field, rowId, trigger.current);\n }}\n >\n Inspect chain & edit\n </Button>\n </PopoverContent>\n </Popover>\n );\n}\n"]}