@hex-core/components 1.7.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/_tsup-dts-rollup.d.ts +1566 -5
  2. package/dist/arc.d.ts +4 -0
  3. package/dist/arc.js +147 -0
  4. package/dist/arc.js.map +1 -0
  5. package/dist/audio-player.d.ts +2 -0
  6. package/dist/audio-player.js +119 -0
  7. package/dist/audio-player.js.map +1 -0
  8. package/dist/audio-waveform.d.ts +2 -0
  9. package/dist/audio-waveform.js +72 -0
  10. package/dist/audio-waveform.js.map +1 -0
  11. package/dist/canvas.d.ts +2 -0
  12. package/dist/canvas.js +73 -0
  13. package/dist/canvas.js.map +1 -0
  14. package/dist/chord.d.ts +4 -0
  15. package/dist/chord.js +230 -0
  16. package/dist/chord.js.map +1 -0
  17. package/dist/cloze.d.ts +3 -0
  18. package/dist/cloze.js +98 -0
  19. package/dist/cloze.js.map +1 -0
  20. package/dist/color-picker.js.map +1 -1
  21. package/dist/compare-table.d.ts +4 -0
  22. package/dist/compare-table.js +109 -0
  23. package/dist/compare-table.js.map +1 -0
  24. package/dist/data-table.js.map +1 -1
  25. package/dist/deck.d.ts +3 -0
  26. package/dist/deck.js +231 -0
  27. package/dist/deck.js.map +1 -0
  28. package/dist/dendrogram.d.ts +3 -0
  29. package/dist/dendrogram.js +162 -0
  30. package/dist/dendrogram.js.map +1 -0
  31. package/dist/diagram.d.ts +2 -0
  32. package/dist/diagram.js +70 -0
  33. package/dist/diagram.js.map +1 -0
  34. package/dist/flashcard.d.ts +2 -0
  35. package/dist/flashcard.js +107 -0
  36. package/dist/flashcard.js.map +1 -0
  37. package/dist/flowchart.d.ts +4 -0
  38. package/dist/flowchart.js +275 -0
  39. package/dist/flowchart.js.map +1 -0
  40. package/dist/funnel.d.ts +3 -0
  41. package/dist/funnel.js +157 -0
  42. package/dist/funnel.js.map +1 -0
  43. package/dist/gantt.d.ts +3 -0
  44. package/dist/gantt.js +279 -0
  45. package/dist/gantt.js.map +1 -0
  46. package/dist/image-occlusion.d.ts +3 -0
  47. package/dist/image-occlusion.js +106 -0
  48. package/dist/image-occlusion.js.map +1 -0
  49. package/dist/index.d.ts +84 -0
  50. package/dist/index.js +3946 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/matrix.d.ts +3 -0
  53. package/dist/matrix.js +155 -0
  54. package/dist/matrix.js.map +1 -0
  55. package/dist/mind-map.d.ts +3 -0
  56. package/dist/mind-map.js +167 -0
  57. package/dist/mind-map.js.map +1 -0
  58. package/dist/org-chart.d.ts +3 -0
  59. package/dist/org-chart.js +215 -0
  60. package/dist/org-chart.js.map +1 -0
  61. package/dist/pyramid.d.ts +3 -0
  62. package/dist/pyramid.js +150 -0
  63. package/dist/pyramid.js.map +1 -0
  64. package/dist/quiz.d.ts +3 -0
  65. package/dist/quiz.js +128 -0
  66. package/dist/quiz.js.map +1 -0
  67. package/dist/sankey.d.ts +4 -0
  68. package/dist/sankey.js +190 -0
  69. package/dist/sankey.js.map +1 -0
  70. package/dist/schemas.d.ts +23 -0
  71. package/dist/schemas.js +2210 -3
  72. package/dist/schemas.js.map +1 -1
  73. package/dist/sequence.d.ts +4 -0
  74. package/dist/sequence.js +229 -0
  75. package/dist/sequence.js.map +1 -0
  76. package/dist/sonner.js.map +1 -1
  77. package/dist/spaced-repetition.d.ts +3 -0
  78. package/dist/spaced-repetition.js +73 -0
  79. package/dist/spaced-repetition.js.map +1 -0
  80. package/dist/sunburst.d.ts +3 -0
  81. package/dist/sunburst.js +205 -0
  82. package/dist/sunburst.js.map +1 -0
  83. package/dist/terminal.d.ts +2 -0
  84. package/dist/terminal.js +153 -0
  85. package/dist/terminal.js.map +1 -0
  86. package/dist/textarea.js.map +1 -1
  87. package/dist/time-axis.d.ts +3 -0
  88. package/dist/time-axis.js +233 -0
  89. package/dist/time-axis.js.map +1 -0
  90. package/dist/tool-call.js +6 -1
  91. package/dist/tool-call.js.map +1 -1
  92. package/dist/tree-map.d.ts +3 -0
  93. package/dist/tree-map.js +171 -0
  94. package/dist/tree-map.js.map +1 -0
  95. package/dist/venn.d.ts +3 -0
  96. package/dist/venn.js +196 -0
  97. package/dist/venn.js.map +1 -0
  98. package/package.json +49 -5
@@ -20,6 +20,7 @@ import { DialogTitleProps } from '@radix-ui/react-dialog';
20
20
  import { DialogTriggerProps } from '@radix-ui/react-dialog';
21
21
  import { Drawer as Drawer_2 } from 'vaul';
22
22
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
23
+ import { Edge } from 'reactflow';
23
24
  import { FieldError } from 'react-hook-form';
24
25
  import { FieldPath } from 'react-hook-form';
25
26
  import { FieldValues } from 'react-hook-form';
@@ -31,6 +32,10 @@ import { JSX } from 'react/jsx-runtime';
31
32
  import * as LabelPrimitive from '@radix-ui/react-label';
32
33
  import * as MenubarPrimitive from '@radix-ui/react-menubar';
33
34
  import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
35
+ import { Node as Node_2 } from 'reactflow';
36
+ import { OnConnect } from 'reactflow';
37
+ import { OnEdgesChange } from 'reactflow';
38
+ import { OnNodesChange } from 'reactflow';
34
39
  import { OTPInput } from 'input-otp';
35
40
  import { Panel } from 'react-resizable-panels';
36
41
  import * as PopoverPrimitive from '@radix-ui/react-popover';
@@ -171,6 +176,72 @@ declare const alertVariants: (props?: ({
171
176
  export { alertVariants }
172
177
  export { alertVariants as alertVariants_alias_1 }
173
178
 
179
+ declare function Arc({ nodes, edges, width, height, nodeRadius, onEdgeHover, onNodeClick, className, ...rest }: ArcProps): JSX.Element;
180
+ export { Arc }
181
+ export { Arc as Arc_alias_1 }
182
+
183
+ declare type ArcEdge = {
184
+ source: string;
185
+ target: string;
186
+ value?: number;
187
+ };
188
+ export { ArcEdge }
189
+ export { ArcEdge as ArcEdge_alias_1 }
190
+
191
+ /**
192
+ * Arc diagram. Nodes lie on a horizontal baseline; relationships are
193
+ * drawn as semicircle arcs above the line. Pure SVG; no heavy peer
194
+ * dependency. Excellent for sequence-aware relational data:
195
+ * co-occurrence in a story, train-stop transfer connections,
196
+ * citation chains where node order is meaningful.
197
+ *
198
+ * Distinct from Chord: Chord wraps nodes around a ring (no inherent
199
+ * order); Arc keeps them on a line (order matters).
200
+ *
201
+ * @example
202
+ * <Arc
203
+ * nodes={[
204
+ * { id: "alice", label: "Alice" },
205
+ * { id: "bob", label: "Bob" },
206
+ * { id: "carol", label: "Carol" },
207
+ * ]}
208
+ * edges={[
209
+ * { source: "alice", target: "bob", value: 3 },
210
+ * { source: "alice", target: "carol", value: 1 },
211
+ * ]}
212
+ * />
213
+ */
214
+ declare type ArcNode = {
215
+ id: string;
216
+ label: string;
217
+ value?: number;
218
+ };
219
+ export { ArcNode }
220
+ export { ArcNode as ArcNode_alias_1 }
221
+
222
+ declare interface ArcProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
223
+ /** Nodes in display order along the baseline. */
224
+ nodes: ArcNode[];
225
+ /** Edges between nodes. Edges whose source or target id is missing are skipped. */
226
+ edges: ArcEdge[];
227
+ /** Pixel width of the rendered SVG. Default 720. */
228
+ width?: number;
229
+ /** Pixel height of the rendered SVG. Default 360. */
230
+ height?: number;
231
+ /** Pixel radius of each node circle. Default 5. */
232
+ nodeRadius?: number;
233
+ /** Fired when an edge is hovered (or hover ends, with `null`). */
234
+ onEdgeHover?: (edge: ArcEdge | null) => void;
235
+ /** Fired when a node is clicked. */
236
+ onNodeClick?: (node: ArcNode) => void;
237
+ }
238
+ export { ArcProps }
239
+ export { ArcProps as ArcProps_alias_1 }
240
+
241
+ declare const arcSchema: ComponentSchemaDefinition;
242
+ export { arcSchema }
243
+ export { arcSchema as arcSchema_alias_1 }
244
+
174
245
  /** A container that maintains a specified width-to-height ratio for its children. */
175
246
  declare const AspectRatio: ForwardRefExoticComponent<AspectRatioPrimitive.AspectRatioProps & RefAttributes<HTMLDivElement>>;
176
247
  export { AspectRatio }
@@ -250,6 +321,86 @@ declare const attachmentVariants: (props?: ({
250
321
  export { attachmentVariants }
251
322
  export { attachmentVariants as attachmentVariants_alias_1 }
252
323
 
324
+ /**
325
+ * Renders an audio player UI driven by wavesurfer.js.
326
+ * @param props - Audio source + playback callbacks
327
+ * @returns A div containing play/pause control + progress bar
328
+ */
329
+ declare function AudioPlayer({ src, autoPlay, onEnded, onError, className, ...rest }: AudioPlayerProps): JSX.Element;
330
+ export { AudioPlayer }
331
+ export { AudioPlayer as AudioPlayer_alias_1 }
332
+
333
+ /**
334
+ * Audio playback control backed by wavesurfer.js. Renders a play/pause
335
+ * button + linear progress bar + duration. Pair with `<AudioWaveform>`
336
+ * for the visual waveform display (separate component, same engine).
337
+ *
338
+ * Headless on data: pass `src` (URL or Blob); the engine streams + decodes.
339
+ *
340
+ * Heavy peer: requires `wavesurfer.js` (~50 KB gzip, shared with
341
+ * AudioWaveform). The hex-core CLI's `add` flow prompts before installing.
342
+ *
343
+ * @example
344
+ * <AudioPlayer src="/podcast.mp3" />
345
+ * <AudioPlayer src={voicemailBlob} autoPlay onEnded={markRead} />
346
+ */
347
+ declare interface AudioPlayerProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children" | "onError"> {
348
+ /** Audio source — URL string or Blob. Re-loads when changed. */
349
+ src: string | Blob;
350
+ /** Auto-play once loaded. Default false. */
351
+ autoPlay?: boolean;
352
+ /** Called when playback finishes. */
353
+ onEnded?: () => void;
354
+ /** Called on engine error (network, decode, etc.). */
355
+ onError?: (message: string) => void;
356
+ }
357
+ export { AudioPlayerProps }
358
+ export { AudioPlayerProps as AudioPlayerProps_alias_1 }
359
+
360
+ export declare const audioPlayerSchema: ComponentSchemaDefinition;
361
+
362
+ /**
363
+ * Renders an audio waveform without playback controls.
364
+ * @param props - Audio source + visual options + lifecycle callbacks
365
+ * @returns A div containing the wavesurfer-rendered waveform
366
+ */
367
+ declare function AudioWaveform({ src, height, waveColor, progressColor, onReady, onError, className, ...rest }: AudioWaveformProps): JSX.Element;
368
+ export { AudioWaveform }
369
+ export { AudioWaveform as AudioWaveform_alias_1 }
370
+
371
+ /**
372
+ * Standalone audio waveform display backed by wavesurfer.js. Renders the
373
+ * waveform of a source (URL or Blob) without playback controls — for
374
+ * voice-message previews, audio thumbnails, recording indicators, anywhere
375
+ * the visual is the point.
376
+ *
377
+ * Heavy peer: requires `wavesurfer.js` (~50 KB gzip, shared with
378
+ * AudioPlayer). The hex-core CLI's `add` flow prompts before installing.
379
+ *
380
+ * For interactive playback + waveform together, use `<AudioPlayer>`.
381
+ *
382
+ * @example
383
+ * <AudioWaveform src="/voice-message.mp3" height={48} />
384
+ */
385
+ declare interface AudioWaveformProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children" | "onError"> {
386
+ /** Audio source — URL string or Blob. */
387
+ src: string | Blob;
388
+ /** Pixel height of the waveform. Default 48. */
389
+ height?: number;
390
+ /** Bar color for unplayed regions. CSS color string. */
391
+ waveColor?: string;
392
+ /** Bar color for played regions. Default same as `waveColor`. */
393
+ progressColor?: string;
394
+ /** Called when wavesurfer finishes decoding the source. */
395
+ onReady?: (durationSeconds: number) => void;
396
+ /** Called on engine error (network, decode). */
397
+ onError?: (message: string) => void;
398
+ }
399
+ export { AudioWaveformProps }
400
+ export { AudioWaveformProps as AudioWaveformProps_alias_1 }
401
+
402
+ export declare const audioWaveformSchema: ComponentSchemaDefinition;
403
+
253
404
  /** Root container for an avatar (image + fallback). */
254
405
  declare const Avatar: React_2.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React_2.RefAttributes<HTMLSpanElement>, "ref"> & React_2.RefAttributes<HTMLSpanElement>>;
255
406
  export { Avatar }
@@ -397,6 +548,61 @@ declare const calendarSchema: ComponentSchemaDefinition;
397
548
  export { calendarSchema }
398
549
  export { calendarSchema as calendarSchema_alias_1 }
399
550
 
551
+ /**
552
+ * Renders a ReactFlow graph with sensible defaults.
553
+ * @param props - Controlled nodes/edges + interaction handlers
554
+ * @returns A div containing the ReactFlow canvas
555
+ */
556
+ declare function Canvas({ nodes, edges, onNodesChange, onEdgesChange, onConnect, hideControls, hideBackground, fitView, children, className, ...rest }: CanvasProps): JSX.Element;
557
+ export { Canvas }
558
+ export { Canvas as Canvas_alias_1 }
559
+
560
+ /**
561
+ * Headless node-graph canvas backed by reactflow. Renders an interactive
562
+ * graph of agent steps, workflow nodes, RAG document refs — anywhere your
563
+ * AI app needs to visualize relationships.
564
+ *
565
+ * Controlled: pass `nodes` and `edges`; receive change events. Reactflow's
566
+ * default Background + Controls are rendered automatically; pass `children`
567
+ * to add Panels, MiniMap, or custom overlays.
568
+ *
569
+ * Heavy peer: requires `reactflow` (~80 KB gzip). The hex-core CLI's `add`
570
+ * flow prompts before installing.
571
+ *
572
+ * @example
573
+ * import "reactflow/dist/style.css"; // once in your app entry
574
+ * <Canvas
575
+ * nodes={[{ id: "1", position: { x: 0, y: 0 }, data: { label: "Agent" } }]}
576
+ * edges={[]}
577
+ * onNodesChange={onNodesChange}
578
+ * onEdgesChange={onEdgesChange}
579
+ * />
580
+ */
581
+ declare interface CanvasProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children" | "onError"> {
582
+ /** Node objects passed to ReactFlow. See reactflow docs for shape. */
583
+ nodes: Node_2[];
584
+ /** Edge objects passed to ReactFlow. */
585
+ edges: Edge[];
586
+ /** Forwarded to ReactFlow.onNodesChange. */
587
+ onNodesChange?: OnNodesChange;
588
+ /** Forwarded to ReactFlow.onEdgesChange. */
589
+ onEdgesChange?: OnEdgesChange;
590
+ /** Forwarded to ReactFlow.onConnect (fires when user wires two nodes). */
591
+ onConnect?: OnConnect;
592
+ /** Hide the bottom-left zoom/pan/fit controls. Default false (visible). */
593
+ hideControls?: boolean;
594
+ /** Hide the dotted background. Default false (visible). */
595
+ hideBackground?: boolean;
596
+ /** Auto-fit the view to all nodes on first render. Default true. */
597
+ fitView?: boolean;
598
+ /** Slot for MiniMap, Panel, or custom overlays rendered inside ReactFlow. */
599
+ children?: React_2.ReactNode;
600
+ }
601
+ export { CanvasProps }
602
+ export { CanvasProps as CanvasProps_alias_1 }
603
+
604
+ export declare const canvasSchema: ComponentSchemaDefinition;
605
+
400
606
  /** A container card with subtle shadow and border. */
401
607
  declare const Card: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLDivElement> & React_2.RefAttributes<HTMLDivElement>>;
402
608
  export { Card }
@@ -431,6 +637,25 @@ declare const CardTitle: React_2.ForwardRefExoticComponent<React_2.HTMLAttribute
431
637
  export { CardTitle }
432
638
  export { CardTitle as CardTitle_alias_1 }
433
639
 
640
+ /**
641
+ * Categorical chart palette for diagram primitives that encode categorical
642
+ * data (sunburst, treemap, sankey, chord, funnel, pyramid, venn, matrix).
643
+ * Cycled by an integer key — node index, leaf index, depth-1 ancestor, etc.
644
+ *
645
+ * The values reach into `--chart-1` through `--chart-6`, the dedicated
646
+ * diagram-encoding tokens added in `@hex-core/tokens` 1.4. Each token has a
647
+ * `var(--primary)` fallback so consumers on theme presets that haven't been
648
+ * updated to ship `--chart-N` (or who run a custom theme without the chart
649
+ * family) still see a coherent monochrome rendering instead of black SVG
650
+ * fills.
651
+ *
652
+ * Why a chart palette and not the semantic tokens: `--primary`, `--accent`,
653
+ * `--secondary`, and `--muted` collapse to a single hue family in the
654
+ * default monochrome theme — adjacent segments of a chart end up
655
+ * indistinguishable. Chart tokens are tuned for perceptual differentiation.
656
+ */
657
+ export declare const CHART_PALETTE: readonly ["hsl(var(--chart-1, var(--primary)))", "hsl(var(--chart-2, var(--primary)))", "hsl(var(--chart-3, var(--primary)))", "hsl(var(--chart-4, var(--primary)))", "hsl(var(--chart-5, var(--primary)))", "hsl(var(--chart-6, var(--primary)))"];
658
+
434
659
  declare const Checkbox: React_2.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React_2.RefAttributes<HTMLButtonElement>, "ref"> & React_2.RefAttributes<HTMLButtonElement>>;
435
660
  export { Checkbox }
436
661
  export { Checkbox as Checkbox_alias_1 }
@@ -447,6 +672,73 @@ declare const checkboxSchema: ComponentSchemaDefinition;
447
672
  export { checkboxSchema }
448
673
  export { checkboxSchema as checkboxSchema_alias_1 }
449
674
 
675
+ declare function Chord({ nodes, matrix, size, padAngle, onChordHover, onNodeClick, className, ...rest }: ChordProps): JSX.Element;
676
+ export { Chord }
677
+ export { Chord as Chord_alias_1 }
678
+
679
+ /**
680
+ * Payload fired to `onChordHover`. `sourceValue` is the i→j flow;
681
+ * `targetValue` is the j→i flow. They differ for asymmetric matrices and
682
+ * are equal for symmetric ones.
683
+ */
684
+ declare type ChordHoverPayload = {
685
+ source: ChordNode;
686
+ target: ChordNode;
687
+ sourceValue: number;
688
+ targetValue: number;
689
+ };
690
+ export { ChordHoverPayload }
691
+ export { ChordHoverPayload as ChordHoverPayload_alias_1 }
692
+
693
+ /**
694
+ * Chord diagram. Nodes sit on a ring; ribbons inside the ring encode
695
+ * weighted bidirectional relationships between them. Common for
696
+ * trade flows, migration, hyperlink graphs, citation networks —
697
+ * anywhere "A relates to B with weight w" matters at scale.
698
+ *
699
+ * Heavy peers: requires `d3-chord` (~3 KB gzip) and `d3-shape` (~6 KB
700
+ * gzip, already in the artifacts/ family). The hex-core CLI's `add`
701
+ * flow prompts before installing.
702
+ *
703
+ * @example
704
+ * <Chord
705
+ * nodes={["A", "B", "C", "D"].map((id) => ({ id, label: id }))}
706
+ * matrix={[
707
+ * [0, 5, 8, 1],
708
+ * [3, 0, 2, 4],
709
+ * [6, 0, 0, 7],
710
+ * [2, 1, 9, 0],
711
+ * ]}
712
+ * />
713
+ */
714
+ declare type ChordNode = {
715
+ id: string;
716
+ label: string;
717
+ };
718
+ export { ChordNode }
719
+ export { ChordNode as ChordNode_alias_1 }
720
+
721
+ declare interface ChordProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
722
+ /** Nodes (as ring segments). Order matches matrix rows/columns. */
723
+ nodes: ChordNode[];
724
+ /** Square N×N matrix of weights. matrix[i][j] = flow from node i to node j. */
725
+ matrix: number[][];
726
+ /** Pixel size of the rendered SVG (it's square). Default 480. */
727
+ size?: number;
728
+ /** Pixel padding between adjacent ring segments. Default 0.04 (radians, d3 convention). */
729
+ padAngle?: number;
730
+ /** Fired when a ribbon is hovered (or hover ends, with `null`). */
731
+ onChordHover?: (chord: ChordHoverPayload | null) => void;
732
+ /** Fired when a node arc is clicked. */
733
+ onNodeClick?: (node: ChordNode) => void;
734
+ }
735
+ export { ChordProps }
736
+ export { ChordProps as ChordProps_alias_1 }
737
+
738
+ declare const chordSchema: ComponentSchemaDefinition;
739
+ export { chordSchema }
740
+ export { chordSchema as chordSchema_alias_1 }
741
+
450
742
  /**
451
743
  * Renders a source citation chip. Uses an `<a>` when `url` is set so the
452
744
  * chip is keyboard-focusable + opens in a new tab; falls back to a
@@ -489,6 +781,49 @@ declare const citationSchema: ComponentSchemaDefinition;
489
781
  export { citationSchema }
490
782
  export { citationSchema as citationSchema_alias_1 }
491
783
 
784
+ declare function Cloze({ parts, revealMode, onReveal, className, ...rest }: ClozeProps): JSX.Element;
785
+ export { Cloze }
786
+ export { Cloze as Cloze_alias_1 }
787
+
788
+ /**
789
+ * Cloze deletion — text with hidden segments the learner reveals one at
790
+ * a time (or all at once). Each `{ hidden }` token in the `parts` array
791
+ * renders as a redacted span; click / Enter / Space reveals just that
792
+ * blank.
793
+ *
794
+ * Pure HTML; no heavy peer. Pair with Deck (artifacts/deck) to flow
795
+ * through a sequence of cloze cards, or with SpacedRepetition for
796
+ * confidence rating.
797
+ *
798
+ * @example
799
+ * <Cloze parts={[
800
+ * "The mitochondria is the ",
801
+ * { hidden: "powerhouse" },
802
+ * " of the cell.",
803
+ * ]} />
804
+ */
805
+ declare type ClozePart = string | {
806
+ hidden: string;
807
+ id?: string;
808
+ };
809
+ export { ClozePart }
810
+ export { ClozePart as ClozePart_alias_1 }
811
+
812
+ declare interface ClozeProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children" | "onReveal"> {
813
+ /** Mixed array: string fragments + { hidden } cloze tokens. */
814
+ parts: ClozePart[];
815
+ /** "click" reveals one blank at a time; "all" additionally surfaces a "Reveal all" toggle. Default "click". */
816
+ revealMode?: "click" | "all";
817
+ /** Fired with the cumulative set of revealed blank ids on every reveal change. */
818
+ onReveal?: (revealedIds: string[]) => void;
819
+ }
820
+ export { ClozeProps }
821
+ export { ClozeProps as ClozeProps_alias_1 }
822
+
823
+ declare const clozeSchema: ComponentSchemaDefinition;
824
+ export { clozeSchema }
825
+ export { clozeSchema as clozeSchema_alias_1 }
826
+
492
827
  /**
493
828
  * Horizontal flex flow with wrap. Children flow left-to-right and wrap to next line as needed.
494
829
  * @param props - Cluster props including `gap`, `align`, and `justify` variant keys.
@@ -874,6 +1209,64 @@ declare namespace CommandShortcut {
874
1209
  export { CommandShortcut }
875
1210
  export { CommandShortcut as CommandShortcut_alias_1 }
876
1211
 
1212
+ declare type CompareAttribute = {
1213
+ id: string;
1214
+ label: React_2.ReactNode;
1215
+ /** Map of subjectId → cell content. Missing keys render as "—". */
1216
+ values: Record<string, React_2.ReactNode>;
1217
+ };
1218
+ export { CompareAttribute }
1219
+ export { CompareAttribute as CompareAttribute_alias_1 }
1220
+
1221
+ /**
1222
+ * Side-by-side comparison table. Subjects are columns; attributes are
1223
+ * rows; cells render the per-subject value for that attribute. With
1224
+ * `highlightDifferences`, cells whose value differs from the row's
1225
+ * first non-empty cell get a subtle accent — handy for vocab pairs
1226
+ * (term ↔ translation), feature matrices (Linux vs Mac vs Windows),
1227
+ * before/after comparisons. Pure HTML; no heavy peer.
1228
+ *
1229
+ * @example
1230
+ * <CompareTable
1231
+ * subjects={[
1232
+ * { id: "linux", label: "Linux" },
1233
+ * { id: "mac", label: "Mac" },
1234
+ * { id: "win", label: "Windows" },
1235
+ * ]}
1236
+ * attributes={[
1237
+ * { id: "kernel", label: "Kernel", values: { linux: "Linux", mac: "Darwin", win: "NT" } },
1238
+ * { id: "fs", label: "Default FS", values: { linux: "ext4", mac: "APFS", win: "NTFS" } },
1239
+ * ]}
1240
+ * />
1241
+ */
1242
+ declare type CompareSubject = {
1243
+ id: string;
1244
+ label: React_2.ReactNode;
1245
+ };
1246
+ export { CompareSubject }
1247
+ export { CompareSubject as CompareSubject_alias_1 }
1248
+
1249
+ declare function CompareTable({ subjects, attributes, highlightDifferences, onCellClick, className, ...rest }: CompareTableProps): JSX.Element;
1250
+ export { CompareTable }
1251
+ export { CompareTable as CompareTable_alias_1 }
1252
+
1253
+ declare interface CompareTableProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children"> {
1254
+ /** Columns. */
1255
+ subjects: CompareSubject[];
1256
+ /** Rows. */
1257
+ attributes: CompareAttribute[];
1258
+ /** When true, cells whose value differs from the row's first non-empty cell get a subtle accent. */
1259
+ highlightDifferences?: boolean;
1260
+ /** Fired when a body cell is clicked. */
1261
+ onCellClick?: (subjectId: string, attributeId: string) => void;
1262
+ }
1263
+ export { CompareTableProps }
1264
+ export { CompareTableProps as CompareTableProps_alias_1 }
1265
+
1266
+ declare const compareTableSchema: ComponentSchemaDefinition;
1267
+ export { compareTableSchema }
1268
+ export { compareTableSchema as compareTableSchema_alias_1 }
1269
+
877
1270
  /**
878
1271
  * Renders a chat composer with a textarea + slot for action buttons.
879
1272
  * @param props - controlled value/handlers + slot children
@@ -1052,7 +1445,7 @@ export { DataTable }
1052
1445
  export { DataTable as DataTable_alias_1 }
1053
1446
 
1054
1447
  /**
1055
- * Generic DataTable wrapper that renders a TanStack Table model using Hex UI's
1448
+ * Generic DataTable wrapper that renders a TanStack Table model using Hex Core's
1056
1449
  * Table primitives. Pass columns + data; use TanStack hooks for sorting,
1057
1450
  * filtering, pagination, row-selection as needed.
1058
1451
  * @template TData - Row data type. Cell value types are inferred per column by TanStack.
@@ -1068,7 +1461,7 @@ declare interface DataTableProps<TData> {
1068
1461
  /**
1069
1462
  * Accessible label for the table when no visible caption is shown.
1070
1463
  * Forwarded as `aria-label` on the underlying `<table>` element. Kebab-case
1071
- * to match the canonical ARIA prop convention used elsewhere in Hex UI.
1464
+ * to match the canonical ARIA prop convention used elsewhere in Hex Core.
1072
1465
  */
1073
1466
  "aria-label"?: string;
1074
1467
  }
@@ -1129,6 +1522,150 @@ declare const datePickerSchema: ComponentSchemaDefinition;
1129
1522
  export { datePickerSchema }
1130
1523
  export { datePickerSchema as datePickerSchema_alias_1 }
1131
1524
 
1525
+ declare function Deck({ cards, shuffle, ratingSlot, onCardChange, cardWidth, cardHeight, className, ...rest }: DeckProps): JSX.Element;
1526
+ export { Deck }
1527
+ export { Deck as Deck_alias_1 }
1528
+
1529
+ /**
1530
+ * Deck — a paged sequence of flashcards with optional shuffle, prev/next
1531
+ * navigation, a progress bar, and a slot for per-card SRS rating.
1532
+ * Composes [Flashcard] internally; consumers don't render Flashcard
1533
+ * themselves when they're inside a Deck.
1534
+ *
1535
+ * @example
1536
+ * <Deck
1537
+ * cards={[
1538
+ * { id: "1", front: "Term 1", back: "Definition 1" },
1539
+ * { id: "2", front: "Term 2", back: "Definition 2" },
1540
+ * ]}
1541
+ * shuffle
1542
+ * ratingSlot={(card) => (
1543
+ * <SpacedRepetition cardId={card.id} onRate={(rating) => save(rating, card.id)} />
1544
+ * )}
1545
+ * />
1546
+ */
1547
+ declare type DeckCard = {
1548
+ id: string;
1549
+ front: React_2.ReactNode;
1550
+ back: React_2.ReactNode;
1551
+ };
1552
+ export { DeckCard }
1553
+ export { DeckCard as DeckCard_alias_1 }
1554
+
1555
+ declare interface DeckProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children"> {
1556
+ /** Cards in order. */
1557
+ cards: DeckCard[];
1558
+ /** Initial shuffle. Default false (preserves order). */
1559
+ shuffle?: boolean;
1560
+ /** Optional render slot below the card; passed the current card. Useful for SpacedRepetition. */
1561
+ ratingSlot?: (card: DeckCard) => React_2.ReactNode;
1562
+ /** Fired whenever the active card changes (after shuffle / prev / next). */
1563
+ onCardChange?: (index: number, card: DeckCard) => void;
1564
+ /** Pixel width of the inner Flashcard. Default 360. */
1565
+ cardWidth?: number;
1566
+ /** Pixel height of the inner Flashcard. Default 240. */
1567
+ cardHeight?: number;
1568
+ }
1569
+ export { DeckProps }
1570
+ export { DeckProps as DeckProps_alias_1 }
1571
+
1572
+ declare const deckSchema: ComponentSchemaDefinition;
1573
+ export { deckSchema }
1574
+ export { deckSchema as deckSchema_alias_1 }
1575
+
1576
+ declare function Dendrogram({ root, orientation, linkShape, width, height, onLeafClick, className, ...rest }: DendrogramProps): JSX.Element;
1577
+ export { Dendrogram }
1578
+ export { Dendrogram as Dendrogram_alias_1 }
1579
+
1580
+ /**
1581
+ * Clustering tree where every leaf sits at the same depth, regardless of
1582
+ * branch length — the visual signature of taxonomies, phylogenetic trees,
1583
+ * and hierarchical-clustering output. Backed by d3-hierarchy's `cluster`
1584
+ * layout (distinct from `tree`, which packs leaves variably).
1585
+ *
1586
+ * Heavy peer: requires `d3-hierarchy` (~3 KB gzip).
1587
+ *
1588
+ * @example
1589
+ * <Dendrogram
1590
+ * root={{
1591
+ * id: "root", label: "Animals",
1592
+ * children: [
1593
+ * { id: "mammals", label: "Mammals", children: [
1594
+ * { id: "cat", label: "Cat" },
1595
+ * { id: "dog", label: "Dog" },
1596
+ * ]},
1597
+ * { id: "birds", label: "Birds", children: [{ id: "robin", label: "Robin" }] },
1598
+ * ],
1599
+ * }}
1600
+ * />
1601
+ */
1602
+ declare type DendrogramNode = {
1603
+ id: string;
1604
+ label: string;
1605
+ children?: DendrogramNode[];
1606
+ };
1607
+ export { DendrogramNode }
1608
+ export { DendrogramNode as DendrogramNode_alias_1 }
1609
+
1610
+ declare interface DendrogramProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
1611
+ /** Root of the hierarchy. */
1612
+ root: DendrogramNode;
1613
+ /** "horizontal" runs root-to-leaves left→right; "vertical" runs top→bottom. Default "horizontal". */
1614
+ orientation?: "horizontal" | "vertical";
1615
+ /** "step" draws right-angle elbow links (taxonomy aesthetic); "diagonal" uses smooth Bezier. Default "step". */
1616
+ linkShape?: "step" | "diagonal";
1617
+ /** Pixel width of the rendered SVG. Default 600. */
1618
+ width?: number;
1619
+ /** Pixel height of the rendered SVG. Default 400. */
1620
+ height?: number;
1621
+ /** Fired when a leaf is clicked. */
1622
+ onLeafClick?: (node: DendrogramNode) => void;
1623
+ }
1624
+ export { DendrogramProps }
1625
+ export { DendrogramProps as DendrogramProps_alias_1 }
1626
+
1627
+ declare const dendrogramSchema: ComponentSchemaDefinition;
1628
+ export { dendrogramSchema }
1629
+ export { dendrogramSchema as dendrogramSchema_alias_1 }
1630
+
1631
+ /**
1632
+ * Renders a Mermaid diagram from source.
1633
+ * @param props - Source string + theme + lifecycle callbacks
1634
+ * @returns A div containing the rendered SVG
1635
+ */
1636
+ declare function Diagram({ children: source, theme, id, onError, className, ...rest }: DiagramProps): JSX.Element;
1637
+ export { Diagram }
1638
+ export { Diagram as Diagram_alias_1 }
1639
+
1640
+ /**
1641
+ * Render a Mermaid diagram from a source string. Useful for AI agent
1642
+ * outputs that emit flowcharts / sequence diagrams / class diagrams in
1643
+ * Markdown — pipe the code-fence body straight in.
1644
+ *
1645
+ * Heavy peer: requires `mermaid` (~700 KB gzip). The hex-core CLI's `add`
1646
+ * flow prompts before installing — this is the largest engine in the
1647
+ * AI Elements set, so the consumer should opt in deliberately.
1648
+ *
1649
+ * @example
1650
+ * <Diagram>{`flowchart LR\n A --> B\n B --> C`}</Diagram>
1651
+ *
1652
+ * <Diagram theme="dark" id="agent-flow">{mermaidSource}</Diagram>
1653
+ */
1654
+ declare interface DiagramProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children" | "onError"> {
1655
+ /** Mermaid source string. */
1656
+ children: string;
1657
+ /** Light or dark mermaid theme. Default "default" (light). */
1658
+ theme?: "default" | "dark" | "forest" | "neutral";
1659
+ /** Stable ID for the rendered SVG. Required when multiple diagrams share a page; auto-generated when omitted. */
1660
+ id?: string;
1661
+ /** Called on parse/render failure with the engine's message. */
1662
+ onError?: (message: string) => void;
1663
+ }
1664
+ export { DiagramProps }
1665
+ export { DiagramProps as DiagramProps_alias_1 }
1666
+
1667
+ export declare const diagramSchema: ComponentSchemaDefinition;
1668
+
1132
1669
  /** Root container controlling open state of a modal dialog. */
1133
1670
  declare const Dialog: React_2.FC<DialogPrimitive.DialogProps>;
1134
1671
  export { Dialog }
@@ -1587,6 +2124,57 @@ declare const fileTreeSchema: ComponentSchemaDefinition;
1587
2124
  export { fileTreeSchema }
1588
2125
  export { fileTreeSchema as fileTreeSchema_alias_1 }
1589
2126
 
2127
+ declare function Flashcard({ front, back, defaultFlipped, flipped: flippedProp, onFlipChange, width, height, flipDurationMs, className, ...rest }: FlashcardProps): JSX.Element;
2128
+ export { Flashcard }
2129
+ export { Flashcard as Flashcard_alias_1 }
2130
+
2131
+ /**
2132
+ * Flashcard — front/back card with a 3D flip animation. Click, Enter, or
2133
+ * Space to flip. Pure CSS 3D transform, no animation peer required.
2134
+ *
2135
+ * Headless on content: pass any ReactNode for `front` and `back`. Pair
2136
+ * with Deck (artifacts/deck) for shuffle / next / prev / progress, or
2137
+ * with SpacedRepetition (artifacts/spaced-repetition) for confidence
2138
+ * rating after each reveal.
2139
+ *
2140
+ * @example
2141
+ * <Flashcard
2142
+ * front={<>What is the capital of France?</>}
2143
+ * back={<>Paris</>}
2144
+ * />
2145
+ *
2146
+ * <Flashcard
2147
+ * flipped={isFlipped}
2148
+ * onFlipChange={setFlipped}
2149
+ * front={term}
2150
+ * back={definition}
2151
+ * />
2152
+ */
2153
+ declare interface FlashcardProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children"> {
2154
+ /** Content of the front face. */
2155
+ front: React_2.ReactNode;
2156
+ /** Content of the back face. */
2157
+ back: React_2.ReactNode;
2158
+ /** Uncontrolled initial flipped state. Default false. */
2159
+ defaultFlipped?: boolean;
2160
+ /** Controlled flipped state. */
2161
+ flipped?: boolean;
2162
+ /** Fired with the new flipped value when the user toggles. */
2163
+ onFlipChange?: (flipped: boolean) => void;
2164
+ /** Pixel width. Default 360. */
2165
+ width?: number;
2166
+ /** Pixel height. Default 240. */
2167
+ height?: number;
2168
+ /** Flip animation duration in ms. Default 500. Set to 0 to disable the animation entirely. */
2169
+ flipDurationMs?: number;
2170
+ }
2171
+ export { FlashcardProps }
2172
+ export { FlashcardProps as FlashcardProps_alias_1 }
2173
+
2174
+ declare const flashcardSchema: ComponentSchemaDefinition;
2175
+ export { flashcardSchema }
2176
+ export { flashcardSchema as flashcardSchema_alias_1 }
2177
+
1590
2178
  /** Cross-axis `align-items` values for vertical/grid flows (column-like). */
1591
2179
  export declare const flexAlignVariants: {
1592
2180
  readonly start: "items-start";
@@ -1595,6 +2183,79 @@ export declare const flexAlignVariants: {
1595
2183
  readonly stretch: "items-stretch";
1596
2184
  };
1597
2185
 
2186
+ declare function Flowchart({ nodes, edges, direction, width, height, nodeWidth, nodeHeight, onNodeClick, className, ...rest }: FlowchartProps): JSX.Element;
2187
+ export { Flowchart }
2188
+ export { Flowchart as Flowchart_alias_1 }
2189
+
2190
+ declare type FlowchartEdge = {
2191
+ source: string;
2192
+ target: string;
2193
+ label?: string;
2194
+ };
2195
+ export { FlowchartEdge }
2196
+ export { FlowchartEdge as FlowchartEdge_alias_1 }
2197
+
2198
+ /**
2199
+ * Typed React flowchart. Pass `nodes` (with optional `shape`/`type`) and
2200
+ * `edges`; the component runs a topological-rank auto-layout and renders
2201
+ * top-to-bottom or left-to-right with directional arrows. Pure SVG; no
2202
+ * heavy peer dependency, no DAG-layout library.
2203
+ *
2204
+ * Distinct from `<Diagram>` (Mermaid string DSL) and `<Canvas>` (free-form
2205
+ * ReactFlow). Use Flowchart when you have STRUCTURED data and want a
2206
+ * polished SVG without the bundle cost or DSL of those alternatives.
2207
+ *
2208
+ * @example
2209
+ * <Flowchart
2210
+ * nodes={[
2211
+ * { id: "start", label: "Start", shape: "round" },
2212
+ * { id: "check", label: "Authorized?", shape: "diamond" },
2213
+ * { id: "ok", label: "Continue" },
2214
+ * { id: "denied", label: "Reject", shape: "round" },
2215
+ * ]}
2216
+ * edges={[
2217
+ * { source: "start", target: "check" },
2218
+ * { source: "check", target: "ok", label: "yes" },
2219
+ * { source: "check", target: "denied", label: "no" },
2220
+ * ]}
2221
+ * />
2222
+ */
2223
+ declare type FlowchartNode = {
2224
+ id: string;
2225
+ label: string;
2226
+ /** Visual shape — "rect" (default), "round" (rounded rect, terminal markers), or "diamond" (decision). */
2227
+ shape?: "rect" | "round" | "diamond";
2228
+ /** Optional explicit rank/depth override; otherwise computed via topological sort. */
2229
+ rank?: number;
2230
+ };
2231
+ export { FlowchartNode }
2232
+ export { FlowchartNode as FlowchartNode_alias_1 }
2233
+
2234
+ declare interface FlowchartProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
2235
+ /** Node definitions. Every edge's `source`/`target` MUST match an `id` here. */
2236
+ nodes: FlowchartNode[];
2237
+ /** Directional edges. The graph MUST be a DAG (no cycles). */
2238
+ edges: FlowchartEdge[];
2239
+ /** Layout direction. Default "vertical" (top-to-bottom). */
2240
+ direction?: "vertical" | "horizontal";
2241
+ /** Pixel width of the rendered SVG. Default 720. */
2242
+ width?: number;
2243
+ /** Pixel height of the rendered SVG. Default 480. */
2244
+ height?: number;
2245
+ /** Pixel width of each node. Default 140. */
2246
+ nodeWidth?: number;
2247
+ /** Pixel height of each node. Default 48. */
2248
+ nodeHeight?: number;
2249
+ /** Fired when a node is clicked. */
2250
+ onNodeClick?: (node: FlowchartNode) => void;
2251
+ }
2252
+ export { FlowchartProps }
2253
+ export { FlowchartProps as FlowchartProps_alias_1 }
2254
+
2255
+ declare const flowchartSchema: ComponentSchemaDefinition;
2256
+ export { flowchartSchema }
2257
+ export { flowchartSchema as flowchartSchema_alias_1 }
2258
+
1598
2259
  /** Root form provider. Wraps react-hook-form's FormProvider. */
1599
2260
  declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React_2.JSX.Element;
1600
2261
  export { Form }
@@ -1648,6 +2309,112 @@ declare const formSchema: ComponentSchemaDefinition;
1648
2309
  export { formSchema }
1649
2310
  export { formSchema as formSchema_alias_1 }
1650
2311
 
2312
+ declare function Funnel({ stages, width, height, gap, showConversion, onStageClick, className, ...rest }: FunnelProps): JSX.Element;
2313
+ export { Funnel }
2314
+ export { Funnel as Funnel_alias_1 }
2315
+
2316
+ declare interface FunnelProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
2317
+ /** Ordered top-to-bottom stages. Values must be non-negative. */
2318
+ stages: FunnelStage[];
2319
+ /** Pixel width of the rendered SVG. Default 480. */
2320
+ width?: number;
2321
+ /** Pixel height of the rendered SVG. Default 360. */
2322
+ height?: number;
2323
+ /** Pixel gap between stages. Default 4. */
2324
+ gap?: number;
2325
+ /** Show conversion-rate annotations between stages. Default true. */
2326
+ showConversion?: boolean;
2327
+ /** Fired when a stage is clicked. */
2328
+ onStageClick?: (stage: FunnelStage) => void;
2329
+ }
2330
+ export { FunnelProps }
2331
+ export { FunnelProps as FunnelProps_alias_1 }
2332
+
2333
+ declare const funnelSchema: ComponentSchemaDefinition;
2334
+ export { funnelSchema }
2335
+ export { funnelSchema as funnelSchema_alias_1 }
2336
+
2337
+ /**
2338
+ * Conversion funnel — a vertical stack of trapezoidal stages whose width
2339
+ * is proportional to each stage's value. Pure SVG; no heavy peer
2340
+ * dependency. Pair with `<Sankey>` when stage-to-stage flow detail
2341
+ * matters; use Funnel when the conversion drop-off itself is the
2342
+ * message.
2343
+ *
2344
+ * @example
2345
+ * <Funnel
2346
+ * stages={[
2347
+ * { id: "visit", label: "Visited", value: 10000 },
2348
+ * { id: "signup", label: "Signed up", value: 1200 },
2349
+ * { id: "active", label: "Active", value: 480 },
2350
+ * { id: "paid", label: "Paid", value: 95 },
2351
+ * ]}
2352
+ * />
2353
+ */
2354
+ declare type FunnelStage = {
2355
+ id: string;
2356
+ label: string;
2357
+ value: number;
2358
+ };
2359
+ export { FunnelStage }
2360
+ export { FunnelStage as FunnelStage_alias_1 }
2361
+
2362
+ declare function Gantt({ tasks, width, rowHeight, labelMargin, tickCount, onTaskClick, className, ...rest }: GanttProps): JSX.Element;
2363
+ export { Gantt }
2364
+ export { Gantt as Gantt_alias_1 }
2365
+
2366
+ declare interface GanttProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
2367
+ /** Tasks in display order (rows top-to-bottom). */
2368
+ tasks: GanttTask[];
2369
+ /** Pixel width of the rendered SVG. Default 800. */
2370
+ width?: number;
2371
+ /** Pixel height of each task row. Default 32. */
2372
+ rowHeight?: number;
2373
+ /** Pixel reserved on the left for task labels. Default 140. */
2374
+ labelMargin?: number;
2375
+ /** Number of axis ticks to show. Default 6. */
2376
+ tickCount?: number;
2377
+ /** Fired when a task bar is clicked. */
2378
+ onTaskClick?: (task: GanttTask) => void;
2379
+ }
2380
+ export { GanttProps }
2381
+ export { GanttProps as GanttProps_alias_1 }
2382
+
2383
+ declare const ganttSchema: ComponentSchemaDefinition;
2384
+ export { ganttSchema }
2385
+ export { ganttSchema as ganttSchema_alias_1 }
2386
+
2387
+ /**
2388
+ * Gantt chart — tasks as horizontal bars across a time axis, with
2389
+ * optional dependency arrows and progress fills. Pure SVG; no heavy
2390
+ * peer dependency.
2391
+ *
2392
+ * Distinct from TimeAxis (point events) and Sequence (actor messages):
2393
+ * Gantt encodes DURATION (start → end) per task and supports task-to-
2394
+ * task dependency arrows.
2395
+ *
2396
+ * @example
2397
+ * <Gantt
2398
+ * tasks={[
2399
+ * { id: "design", label: "Design", start: "2025-01-01", end: "2025-01-15", progress: 1 },
2400
+ * { id: "build", label: "Build", start: "2025-01-10", end: "2025-02-20", progress: 0.6, dependencies: ["design"] },
2401
+ * { id: "ship", label: "Ship", start: "2025-02-15", end: "2025-02-28", dependencies: ["build"] },
2402
+ * ]}
2403
+ * />
2404
+ */
2405
+ declare type GanttTask = {
2406
+ id: string;
2407
+ label: string;
2408
+ start: Date | string | number;
2409
+ end: Date | string | number;
2410
+ /** Optional progress 0..1; renders as a filled portion of the bar. */
2411
+ progress?: number;
2412
+ /** Optional list of task ids this task depends on; arrow drawn from each. */
2413
+ dependencies?: string[];
2414
+ };
2415
+ export { GanttTask }
2416
+ export { GanttTask as GanttTask_alias_1 }
2417
+
1651
2418
  /** Gap scale bound to `--gap-*` tokens. Used by Stack, Cluster, Grid. */
1652
2419
  export declare const gapVariants: {
1653
2420
  readonly xs: "gap-[var(--gap-xs,0.25rem)]";
@@ -1758,7 +2525,7 @@ export { hslToRgb as hslToRgb_alias_1 }
1758
2525
  * `@hex-core/tokens` themes (`H S% L%`, e.g. `"240 5.9% 10%"` — no `hsl()`
1759
2526
  * wrapper, no commas).
1760
2527
  *
1761
- * The triplet is the round-trip-safe serialization for Hex UI: tokens flow
2528
+ * The triplet is the round-trip-safe serialization for Hex Core: tokens flow
1762
2529
  * triplet → CSS `hsl(var(--token))` → rendered color, and the ColorPicker
1763
2530
  * component edits triplets directly. Hex/RGB conversions are display
1764
2531
  * adapters, not the source of truth.
@@ -1781,6 +2548,27 @@ declare function hslTripletToHex(triplet: string): string;
1781
2548
  export { hslTripletToHex }
1782
2549
  export { hslTripletToHex as hslTripletToHex_alias_1 }
1783
2550
 
2551
+ declare function ImageOcclusion({ src, alt, regions, onRegionReveal, className, ...rest }: ImageOcclusionProps): JSX.Element;
2552
+ export { ImageOcclusion }
2553
+ export { ImageOcclusion as ImageOcclusion_alias_1 }
2554
+
2555
+ declare interface ImageOcclusionProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children"> {
2556
+ /** Image source URL. */
2557
+ src: string;
2558
+ /** Alt text for the underlying image. */
2559
+ alt: string;
2560
+ /** Rectangular regions to hide on top of the image. */
2561
+ regions: OcclusionRegion[];
2562
+ /** Fired with the region id when a region is revealed (not when hidden again). */
2563
+ onRegionReveal?: (id: string) => void;
2564
+ }
2565
+ export { ImageOcclusionProps }
2566
+ export { ImageOcclusionProps as ImageOcclusionProps_alias_1 }
2567
+
2568
+ declare const imageOcclusionSchema: ComponentSchemaDefinition;
2569
+ export { imageOcclusionSchema }
2570
+ export { imageOcclusionSchema as imageOcclusionSchema_alias_1 }
2571
+
1784
2572
  declare const Input: React_2.ForwardRefExoticComponent<InputProps & React_2.RefAttributes<HTMLInputElement>>;
1785
2573
  export { Input }
1786
2574
  export { Input as Input_alias_1 }
@@ -1980,6 +2768,66 @@ declare const markdownSchema: ComponentSchemaDefinition;
1980
2768
  export { markdownSchema }
1981
2769
  export { markdownSchema as markdownSchema_alias_1 }
1982
2770
 
2771
+ declare function Matrix({ nodes, matrix, size, labelMargin, showValues, onCellHover, onCellClick, className, ...rest }: MatrixProps): JSX.Element;
2772
+ export { Matrix }
2773
+ export { Matrix as Matrix_alias_1 }
2774
+
2775
+ /**
2776
+ * Adjacency-matrix diagram. Square grid where cell (row i, col j)
2777
+ * encodes the relationship from node i to node j by color intensity.
2778
+ * Pure SVG; no heavy peer dependency. Best for dense graphs where
2779
+ * node-link diagrams turn into "hairballs" — Matrix scales gracefully
2780
+ * to hundreds of nodes if the SVG is sized to match.
2781
+ *
2782
+ * @example
2783
+ * <Matrix
2784
+ * nodes={["A", "B", "C", "D"].map((id) => ({ id, label: id }))}
2785
+ * matrix={[
2786
+ * [0, 5, 8, 1],
2787
+ * [3, 0, 2, 4],
2788
+ * [6, 0, 0, 7],
2789
+ * [2, 1, 9, 0],
2790
+ * ]}
2791
+ * />
2792
+ */
2793
+ declare type MatrixNode = {
2794
+ id: string;
2795
+ label: string;
2796
+ };
2797
+ export { MatrixNode }
2798
+ export { MatrixNode as MatrixNode_alias_1 }
2799
+
2800
+ declare interface MatrixProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
2801
+ /** Nodes — rows AND columns. Order matches `matrix` rows/columns. */
2802
+ nodes: MatrixNode[];
2803
+ /** Square N×N matrix of values. matrix[i][j] = relationship from node i to node j. */
2804
+ matrix: number[][];
2805
+ /** Pixel size of the rendered SVG (it's square). Default 480. */
2806
+ size?: number;
2807
+ /** Pixel reserved for row/column labels along the edges. Default 80. */
2808
+ labelMargin?: number;
2809
+ /** Show numeric values inside cells when the cell is large enough. Default true. */
2810
+ showValues?: boolean;
2811
+ /** Fired when a cell is hovered (or hover ends, with `null`). */
2812
+ onCellHover?: (cell: {
2813
+ row: MatrixNode;
2814
+ col: MatrixNode;
2815
+ value: number;
2816
+ } | null) => void;
2817
+ /** Fired when a cell is clicked. */
2818
+ onCellClick?: (cell: {
2819
+ row: MatrixNode;
2820
+ col: MatrixNode;
2821
+ value: number;
2822
+ }) => void;
2823
+ }
2824
+ export { MatrixProps }
2825
+ export { MatrixProps as MatrixProps_alias_1 }
2826
+
2827
+ declare const matrixSchema: ComponentSchemaDefinition;
2828
+ export { matrixSchema }
2829
+ export { matrixSchema as matrixSchema_alias_1 }
2830
+
1983
2831
  /** Top-level menu bar (File / Edit / View style). */
1984
2832
  declare const Menubar: React_2.ForwardRefExoticComponent<Omit<MenubarPrimitive.MenubarProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
1985
2833
  export { Menubar }
@@ -2157,6 +3005,60 @@ declare const messageVariants: (props?: ({
2157
3005
  export { messageVariants }
2158
3006
  export { messageVariants as messageVariants_alias_1 }
2159
3007
 
3008
+ declare function MindMap({ root, orientation, width, height, onNodeClick, className, ...rest }: MindMapProps): JSX.Element;
3009
+ export { MindMap }
3010
+ export { MindMap as MindMap_alias_1 }
3011
+
3012
+ /**
3013
+ * Typed React MindMap. Pass a hierarchical `root` node and the component lays
3014
+ * the children out radially (or horizontally) using d3-hierarchy's tree
3015
+ * layout. No Mermaid string parsing — the data shape IS the API, so consumers
3016
+ * can build mind maps from typed application state instead of templating a
3017
+ * DSL.
3018
+ *
3019
+ * Heavy peer: requires `d3-hierarchy` (~3 KB gzip). The hex-core CLI's `add`
3020
+ * flow prompts before installing.
3021
+ *
3022
+ * @example
3023
+ * <MindMap
3024
+ * root={{
3025
+ * id: "root",
3026
+ * label: "Project",
3027
+ * children: [
3028
+ * { id: "ui", label: "UI", children: [{ id: "btn", label: "Button" }] },
3029
+ * { id: "api", label: "API" },
3030
+ * ],
3031
+ * }}
3032
+ * />
3033
+ */
3034
+ declare type MindMapNode = {
3035
+ id: string;
3036
+ label: string;
3037
+ children?: MindMapNode[];
3038
+ data?: unknown;
3039
+ };
3040
+ export { MindMapNode }
3041
+ export { MindMapNode as MindMapNode_alias_1 }
3042
+
3043
+ declare interface MindMapProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
3044
+ /** Root of the hierarchy. */
3045
+ root: MindMapNode;
3046
+ /** "radial" lays children around the root; "horizontal" runs left→right. Default "radial". */
3047
+ orientation?: "radial" | "horizontal";
3048
+ /** Pixel width of the rendered SVG. Default 600. */
3049
+ width?: number;
3050
+ /** Pixel height of the rendered SVG. Default 400. */
3051
+ height?: number;
3052
+ /** Fired when a node is clicked. */
3053
+ onNodeClick?: (node: MindMapNode) => void;
3054
+ }
3055
+ export { MindMapProps }
3056
+ export { MindMapProps as MindMapProps_alias_1 }
3057
+
3058
+ declare const mindMapSchema: ComponentSchemaDefinition;
3059
+ export { mindMapSchema }
3060
+ export { mindMapSchema as mindMapSchema_alias_1 }
3061
+
2160
3062
  /**
2161
3063
  * Searchable multi-select input built on Command + Popover.
2162
3064
  *
@@ -2266,6 +3168,96 @@ declare const NavigationMenuViewport: React_2.ForwardRefExoticComponent<Omit<Nav
2266
3168
  export { NavigationMenuViewport }
2267
3169
  export { NavigationMenuViewport as NavigationMenuViewport_alias_1 }
2268
3170
 
3171
+ /**
3172
+ * Image occlusion — image with rectangular regions hidden behind opaque
3173
+ * overlays. Click / Enter / Space on a region reveals what's underneath.
3174
+ * Coordinates are 0–1 fractions of the rendered image so the layout
3175
+ * stays correct at any size. Pure HTML; no heavy peer.
3176
+ *
3177
+ * Common for anatomy diagrams, geographic maps, code snippets — any
3178
+ * visual where labels or sub-regions are the recall target.
3179
+ *
3180
+ * @example
3181
+ * <ImageOcclusion
3182
+ * src="/anatomy/heart.png"
3183
+ * alt="Cross-section of a human heart"
3184
+ * regions={[
3185
+ * { id: "lv", x: 0.42, y: 0.55, width: 0.18, height: 0.22, label: "Left ventricle" },
3186
+ * { id: "ra", x: 0.58, y: 0.20, width: 0.16, height: 0.18, label: "Right atrium" },
3187
+ * ]}
3188
+ * />
3189
+ */
3190
+ declare type OcclusionRegion = {
3191
+ id: string;
3192
+ /** All coords are 0–1 fractions of the rendered image. */
3193
+ x: number;
3194
+ y: number;
3195
+ width: number;
3196
+ height: number;
3197
+ label?: string;
3198
+ };
3199
+ export { OcclusionRegion }
3200
+ export { OcclusionRegion as OcclusionRegion_alias_1 }
3201
+
3202
+ declare function OrgChart({ root, collapsible, defaultExpandedDepth, nodeWidth, nodeHeight, width, height, onNodeClick, className, ...rest }: OrgChartProps): JSX.Element;
3203
+ export { OrgChart }
3204
+ export { OrgChart as OrgChart_alias_1 }
3205
+
3206
+ declare interface OrgChartProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
3207
+ /** Root of the org hierarchy. */
3208
+ root: OrgNode;
3209
+ /** Allow nodes to be clicked to collapse their subtree. Default true. */
3210
+ collapsible?: boolean;
3211
+ /** All nodes deeper than this depth render collapsed by default. Default Infinity (all expanded). */
3212
+ defaultExpandedDepth?: number;
3213
+ /** Pixel width of each node card. Default 180. */
3214
+ nodeWidth?: number;
3215
+ /** Pixel height of each node card. Default 64. */
3216
+ nodeHeight?: number;
3217
+ /** Pixel width of the rendered SVG. Default 800. */
3218
+ width?: number;
3219
+ /** Pixel height of the rendered SVG. Default 480. */
3220
+ height?: number;
3221
+ /** Fired when a node is clicked. Fires before any internal collapse toggle. */
3222
+ onNodeClick?: (node: OrgNode) => void;
3223
+ }
3224
+ export { OrgChartProps }
3225
+ export { OrgChartProps as OrgChartProps_alias_1 }
3226
+
3227
+ declare const orgChartSchema: ComponentSchemaDefinition;
3228
+ export { orgChartSchema }
3229
+ export { orgChartSchema as orgChartSchema_alias_1 }
3230
+
3231
+ /**
3232
+ * Top-down organizational chart. Pass a hierarchy of people / teams / units
3233
+ * and the component lays them out vertically using d3-hierarchy's tree
3234
+ * layout. Nodes can be collapsed by clicking; collapsed branches contribute
3235
+ * a "+N" badge but no further layout.
3236
+ *
3237
+ * Heavy peer: requires `d3-hierarchy` (~3 KB gzip).
3238
+ *
3239
+ * @example
3240
+ * <OrgChart
3241
+ * root={{
3242
+ * id: "ceo",
3243
+ * label: "Jane Doe",
3244
+ * subtitle: "CEO",
3245
+ * children: [
3246
+ * { id: "cto", label: "Bob Smith", subtitle: "CTO" },
3247
+ * ],
3248
+ * }}
3249
+ * />
3250
+ */
3251
+ declare type OrgNode = {
3252
+ id: string;
3253
+ label: string;
3254
+ subtitle?: string;
3255
+ avatarUrl?: string;
3256
+ children?: OrgNode[];
3257
+ };
3258
+ export { OrgNode }
3259
+ export { OrgNode as OrgNode_alias_1 }
3260
+
2269
3261
  /**
2270
3262
  * Root nav landmark for pagination controls.
2271
3263
  * @returns A centered nav element with aria-label='pagination'
@@ -2341,6 +3333,15 @@ declare function parseHslTriplet(triplet: string): HslTriplet;
2341
3333
  export { parseHslTriplet }
2342
3334
  export { parseHslTriplet as parseHslTriplet_alias_1 }
2343
3335
 
3336
+ /**
3337
+ * Return the chart hue at a stable index. Cycles modulo `CHART_PALETTE.length`
3338
+ * so the caller doesn't have to range-check.
3339
+ *
3340
+ * @param index - Integer key (node index, leaf index, depth-1 ancestor index, …).
3341
+ * @returns A `hsl(var(...))` string suitable for SVG `fill` / `stroke`.
3342
+ */
3343
+ export declare function pickChartHue(index: number): string;
3344
+
2344
3345
  /** Root container for a popover. */
2345
3346
  declare const Popover: React_2.FC<PopoverPrimitive.PopoverProps>;
2346
3347
  export { Popover }
@@ -2377,6 +3378,119 @@ declare const progressSchema: ComponentSchemaDefinition;
2377
3378
  export { progressSchema }
2378
3379
  export { progressSchema as progressSchema_alias_1 }
2379
3380
 
3381
+ declare function Pyramid({ tiers, shape, width, height, gap, showValues, onTierClick, className, ...rest }: PyramidProps): JSX.Element;
3382
+ export { Pyramid }
3383
+ export { Pyramid as Pyramid_alias_1 }
3384
+
3385
+ declare interface PyramidProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
3386
+ /** Ordered top-to-bottom tiers. The first entry is the apex. */
3387
+ tiers: PyramidTier[];
3388
+ /** Tier-width direction. "widening" grows toward the base; "narrowing" shrinks toward it. Default "widening". */
3389
+ shape?: "widening" | "narrowing";
3390
+ /** Pixel width of the rendered SVG. Default 480. */
3391
+ width?: number;
3392
+ /** Pixel height of the rendered SVG. Default 360. */
3393
+ height?: number;
3394
+ /** Pixel gap between tiers. Default 4. */
3395
+ gap?: number;
3396
+ /** Show each tier's `value` next to its label when present. Default true. */
3397
+ showValues?: boolean;
3398
+ /** Fired when a tier is clicked. */
3399
+ onTierClick?: (tier: PyramidTier) => void;
3400
+ }
3401
+ export { PyramidProps }
3402
+ export { PyramidProps as PyramidProps_alias_1 }
3403
+
3404
+ declare const pyramidSchema: ComponentSchemaDefinition;
3405
+ export { pyramidSchema }
3406
+ export { pyramidSchema as pyramidSchema_alias_1 }
3407
+
3408
+ /**
3409
+ * Ranked-tier pyramid. Tiers stack top-to-bottom; each tier's width can
3410
+ * either grow toward the base ("widening" — Maslow's hierarchy, fewer
3411
+ * elites at the top) or shrink ("narrowing" — population pyramid by age).
3412
+ * Pure SVG; no heavy peer dependency.
3413
+ *
3414
+ * Distinct from Funnel: Pyramid encodes RANK (each tier is a distinct
3415
+ * categorical level), Funnel encodes FLOW (each stage is a subset of the
3416
+ * previous, with a conversion ratio).
3417
+ *
3418
+ * @example
3419
+ * <Pyramid
3420
+ * tiers={[
3421
+ * { id: "self-actualization", label: "Self-actualization" },
3422
+ * { id: "esteem", label: "Esteem" },
3423
+ * { id: "love", label: "Love & belonging" },
3424
+ * { id: "safety", label: "Safety" },
3425
+ * { id: "physiological", label: "Physiological" },
3426
+ * ]}
3427
+ * shape="widening"
3428
+ * />
3429
+ */
3430
+ declare type PyramidTier = {
3431
+ id: string;
3432
+ label: string;
3433
+ value?: number;
3434
+ };
3435
+ export { PyramidTier }
3436
+ export { PyramidTier as PyramidTier_alias_1 }
3437
+
3438
+ declare function Quiz({ question, options, selectionMode, submitLabel, onAnswer, className, ...rest }: QuizProps): JSX.Element;
3439
+ export { Quiz }
3440
+ export { Quiz as Quiz_alias_1 }
3441
+
3442
+ /**
3443
+ * Single-question multiple-choice quiz. Renders the question + options
3444
+ * as native radio (single-select) or checkbox (multi-select) inputs;
3445
+ * after Submit, each option flips to data-state="correct|incorrect|missed"
3446
+ * so consumers can theme right / wrong / unselected-but-correct
3447
+ * differently. Pure HTML; no heavy peer.
3448
+ *
3449
+ * Headless on grading: the schema honors what the consumer passes for
3450
+ * `correct`. Reset between runs by clearing the `selectedIds` you
3451
+ * forwarded as `value` (controlled) or unmounting (uncontrolled).
3452
+ *
3453
+ * @example
3454
+ * <Quiz
3455
+ * question="Which planets are gas giants?"
3456
+ * selectionMode="multi"
3457
+ * options={[
3458
+ * { id: "j", label: "Jupiter", correct: true },
3459
+ * { id: "v", label: "Venus" },
3460
+ * { id: "s", label: "Saturn", correct: true, explanation: "Saturn's atmosphere is mostly hydrogen and helium." },
3461
+ * { id: "m", label: "Mercury" },
3462
+ * ]}
3463
+ * onAnswer={(ids, allCorrect) => track(ids, allCorrect)}
3464
+ * />
3465
+ */
3466
+ declare type QuizOption = {
3467
+ id: string;
3468
+ label: React_2.ReactNode;
3469
+ correct?: boolean;
3470
+ explanation?: React_2.ReactNode;
3471
+ };
3472
+ export { QuizOption }
3473
+ export { QuizOption as QuizOption_alias_1 }
3474
+
3475
+ declare interface QuizProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children"> {
3476
+ /** Question prompt (any ReactNode — supports rich content). */
3477
+ question: React_2.ReactNode;
3478
+ /** Options the learner picks from. */
3479
+ options: QuizOption[];
3480
+ /** "single" — radio inputs (one selection). "multi" — checkboxes. Default "single". */
3481
+ selectionMode?: "single" | "multi";
3482
+ /** Custom Submit button label. Default "Submit". */
3483
+ submitLabel?: string;
3484
+ /** Fired with the selected option ids and a boolean indicating whether the entire selection matches the correct set. */
3485
+ onAnswer?: (selectedIds: string[], allCorrect: boolean) => void;
3486
+ }
3487
+ export { QuizProps }
3488
+ export { QuizProps as QuizProps_alias_1 }
3489
+
3490
+ declare const quizSchema: ComponentSchemaDefinition;
3491
+ export { quizSchema }
3492
+ export { quizSchema as quizSchema_alias_1 }
3493
+
2380
3494
  /** Root container for a radio group. Pair with one or more RadioGroupItem. */
2381
3495
  declare const RadioGroup: React_2.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
2382
3496
  export { RadioGroup }
@@ -2500,6 +3614,75 @@ export { Role }
2500
3614
  export { Role as Role_alias_1 }
2501
3615
  export { Role as Role_alias_2 }
2502
3616
 
3617
+ declare function Sankey({ nodes, links, width, height, nodeAlign, nodeWidth, nodePadding, onLinkHover, onNodeClick, className, ...rest }: SankeyProps): JSX.Element;
3618
+ export { Sankey }
3619
+ export { Sankey as Sankey_alias_1 }
3620
+
3621
+ declare type SankeyLink = {
3622
+ source: string;
3623
+ target: string;
3624
+ value: number;
3625
+ };
3626
+ export { SankeyLink }
3627
+ export { SankeyLink as SankeyLink_alias_1 }
3628
+
3629
+ /**
3630
+ * Weighted-flow diagram. Nodes are arranged in horizontal columns by
3631
+ * topological depth; links between them are drawn as smooth curves whose
3632
+ * thickness encodes the flow value. Common for funnels, energy/material
3633
+ * flows, money flows, or any bipartite/multipartite "value moving from A
3634
+ * to B" visualization.
3635
+ *
3636
+ * Heavy peer: requires `d3-sankey` (~6 KB gzip; pulls in a small slice of
3637
+ * d3-shape too). The hex-core CLI's `add` flow prompts before installing.
3638
+ *
3639
+ * @example
3640
+ * <Sankey
3641
+ * nodes={[
3642
+ * { id: "src-a", label: "Source A" },
3643
+ * { id: "src-b", label: "Source B" },
3644
+ * { id: "sink", label: "Sink" },
3645
+ * ]}
3646
+ * links={[
3647
+ * { source: "src-a", target: "sink", value: 30 },
3648
+ * { source: "src-b", target: "sink", value: 10 },
3649
+ * ]}
3650
+ * />
3651
+ */
3652
+ declare type SankeyNode = {
3653
+ id: string;
3654
+ label: string;
3655
+ };
3656
+ export { SankeyNode }
3657
+ export { SankeyNode as SankeyNode_alias_1 }
3658
+
3659
+ declare interface SankeyProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
3660
+ /** Node definitions. Every link's `source` and `target` MUST match an `id` in this array. */
3661
+ nodes: SankeyNode[];
3662
+ /** Weighted links between nodes. Values must be positive. */
3663
+ links: SankeyLink[];
3664
+ /** Pixel width of the rendered SVG. Default 720. */
3665
+ width?: number;
3666
+ /** Pixel height of the rendered SVG. Default 420. */
3667
+ height?: number;
3668
+ /** How nodes within a column are aligned. Default "justify". */
3669
+ nodeAlign?: "left" | "right" | "center" | "justify";
3670
+ /** Pixel width of each node rectangle. Default 12. */
3671
+ nodeWidth?: number;
3672
+ /** Vertical pixel gap between nodes in the same column. Default 8. */
3673
+ nodePadding?: number;
3674
+ /** Fired when a user hovers a link (or hover ends, with `null`). */
3675
+ onLinkHover?: (link: SankeyLink | null) => void;
3676
+ /** Fired when a node is clicked. */
3677
+ onNodeClick?: (node: SankeyNode) => void;
3678
+ }
3679
+ export { SankeyProps }
3680
+ export { SankeyProps as SankeyProps_alias_1 }
3681
+
3682
+ declare const sankeySchema: ComponentSchemaDefinition;
3683
+ export { sankeySchema }
3684
+ export { sankeySchema as sankeySchema_alias_1 }
3685
+
2503
3686
  /** A scrollable area with custom-styled scrollbars. Content must be explicitly sized. */
2504
3687
  declare const ScrollArea: React_2.ForwardRefExoticComponent<ScrollAreaProps & React_2.RefAttributes<HTMLDivElement>>;
2505
3688
  export { ScrollArea }
@@ -2584,6 +3767,74 @@ declare const separatorSchema: ComponentSchemaDefinition;
2584
3767
  export { separatorSchema }
2585
3768
  export { separatorSchema as separatorSchema_alias_1 }
2586
3769
 
3770
+ declare function Sequence({ actors, messages, width, headerHeight, messageGap, onActorClick, onMessageClick, className, ...rest }: SequenceProps): JSX.Element;
3771
+ export { Sequence }
3772
+ export { Sequence as Sequence_alias_1 }
3773
+
3774
+ /**
3775
+ * UML-style sequence diagram. Actors render as columns with vertical
3776
+ * lifelines; messages render as horizontal arrows between actors,
3777
+ * stacked top-to-bottom in declaration order. Pure SVG; no heavy peer
3778
+ * dependency.
3779
+ *
3780
+ * Distinct from Flowchart (DAG of steps) and TimeAxis (events on a
3781
+ * time axis): Sequence encodes WHO talks to WHO and IN WHAT ORDER.
3782
+ *
3783
+ * @example
3784
+ * <Sequence
3785
+ * actors={[
3786
+ * { id: "user", label: "User" },
3787
+ * { id: "api", label: "API" },
3788
+ * { id: "db", label: "DB" },
3789
+ * ]}
3790
+ * messages={[
3791
+ * { from: "user", to: "api", label: "POST /signup" },
3792
+ * { from: "api", to: "db", label: "INSERT user" },
3793
+ * { from: "db", to: "api", label: "ok", type: "return" },
3794
+ * { from: "api", to: "user", label: "201 Created", type: "return" },
3795
+ * ]}
3796
+ * />
3797
+ */
3798
+ declare type SequenceActor = {
3799
+ id: string;
3800
+ label: string;
3801
+ };
3802
+ export { SequenceActor }
3803
+ export { SequenceActor as SequenceActor_alias_1 }
3804
+
3805
+ declare type SequenceMessage = {
3806
+ from: string;
3807
+ to: string;
3808
+ label?: string;
3809
+ /** "sync" (default) draws a solid arrow; "async" draws a thinner half-head; "return" is dashed. */
3810
+ type?: "sync" | "async" | "return";
3811
+ };
3812
+ export { SequenceMessage }
3813
+ export { SequenceMessage as SequenceMessage_alias_1 }
3814
+
3815
+ declare interface SequenceProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
3816
+ /** Actors in display order (columns left-to-right). */
3817
+ actors: SequenceActor[];
3818
+ /** Messages in chronological order (top-to-bottom). */
3819
+ messages: SequenceMessage[];
3820
+ /** Pixel width of the rendered SVG. Default 720. */
3821
+ width?: number;
3822
+ /** Pixel height of each actor header. Default 40. */
3823
+ headerHeight?: number;
3824
+ /** Pixel vertical gap between consecutive messages. Default 36. */
3825
+ messageGap?: number;
3826
+ /** Fired when an actor header is clicked. */
3827
+ onActorClick?: (actor: SequenceActor) => void;
3828
+ /** Fired when a message arrow is clicked. */
3829
+ onMessageClick?: (message: SequenceMessage) => void;
3830
+ }
3831
+ export { SequenceProps }
3832
+ export { SequenceProps as SequenceProps_alias_1 }
3833
+
3834
+ declare const sequenceSchema: ComponentSchemaDefinition;
3835
+ export { sequenceSchema }
3836
+ export { sequenceSchema as sequenceSchema_alias_1 }
3837
+
2587
3838
  /** Root container controlling open state of a side sheet. */
2588
3839
  declare const Sheet: React_2.FC<DialogPrimitive.DialogProps>;
2589
3840
  export { Sheet }
@@ -2786,6 +4037,25 @@ declare const sonnerSchema: ComponentSchemaDefinition;
2786
4037
  export { sonnerSchema }
2787
4038
  export { sonnerSchema as sonnerSchema_alias_1 }
2788
4039
 
4040
+ declare function SpacedRepetition({ cardId, onRate, labels, className, ...rest }: SpacedRepetitionProps): JSX.Element;
4041
+ export { SpacedRepetition }
4042
+ export { SpacedRepetition as SpacedRepetition_alias_1 }
4043
+
4044
+ declare interface SpacedRepetitionProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children" | "onRate"> {
4045
+ /** Identifier of the card being rated; passed back to onRate. */
4046
+ cardId: string;
4047
+ /** Called with (rating, cardId) when the learner picks a button. */
4048
+ onRate: (rating: SrsRating, cardId: string) => void;
4049
+ /** Override the default button labels. Defaults: "Again" / "Hard" / "Good" / "Easy". */
4050
+ labels?: Partial<Record<SrsRating, string>>;
4051
+ }
4052
+ export { SpacedRepetitionProps }
4053
+ export { SpacedRepetitionProps as SpacedRepetitionProps_alias_1 }
4054
+
4055
+ declare const spacedRepetitionSchema: ComponentSchemaDefinition;
4056
+ export { spacedRepetitionSchema }
4057
+ export { spacedRepetitionSchema as spacedRepetitionSchema_alias_1 }
4058
+
2789
4059
  /**
2790
4060
  * A declarative whitespace block. Use when you want to insert space between two
2791
4061
  * siblings without relying on margin or gap (e.g. inside a flex container that
@@ -2866,6 +4136,29 @@ export { SpeechRecognitionProps as SpeechRecognitionProps_alias_1 }
2866
4136
 
2867
4137
  export declare const speechRecognitionSchema: ComponentSchemaDefinition;
2868
4138
 
4139
+ /**
4140
+ * Anki-style confidence rating row. Four buttons (Again / Hard / Good /
4141
+ * Easy) emit a rating; the consumer applies SM-2 / FSRS / hand-rolled
4142
+ * scheduling to decide when to surface the card again. Headless on
4143
+ * scheduling — this primitive doesn't compute intervals, it just
4144
+ * captures the user's signal.
4145
+ *
4146
+ * @example
4147
+ * <SpacedRepetition
4148
+ * cardId={card.id}
4149
+ * onRate={(rating, id) => scheduler.update(id, rating)}
4150
+ * />
4151
+ *
4152
+ * <SpacedRepetition
4153
+ * cardId={card.id}
4154
+ * onRate={onRate}
4155
+ * labels={{ again: "Forgot", hard: "Tough", good: "Got it", easy: "Easy" }}
4156
+ * />
4157
+ */
4158
+ declare type SrsRating = "again" | "hard" | "good" | "easy";
4159
+ export { SrsRating }
4160
+ export { SrsRating as SrsRating_alias_1 }
4161
+
2869
4162
  /**
2870
4163
  * Vertical flex flow with token-bound gap. Children stack top-to-bottom.
2871
4164
  * @param props - Stack props including `gap`, `align`, and `justify` variant keys.
@@ -3003,6 +4296,60 @@ declare const suggestionSchema: ComponentSchemaDefinition;
3003
4296
  export { suggestionSchema }
3004
4297
  export { suggestionSchema as suggestionSchema_alias_1 }
3005
4298
 
4299
+ declare function Sunburst({ root, drillable, centerLabel, size, onSegmentClick, className, ...rest }: SunburstProps): JSX.Element;
4300
+ export { Sunburst }
4301
+ export { Sunburst as Sunburst_alias_1 }
4302
+
4303
+ /**
4304
+ * Radial hierarchy by value. Each ring out from the center is a deeper level
4305
+ * of the tree; each segment's angular extent is proportional to its summed
4306
+ * value. Click any segment to drill into it (the clicked segment becomes the
4307
+ * new center); click the center to zoom back out.
4308
+ *
4309
+ * Heavy peers: requires `d3-hierarchy` and `d3-shape` (~3 KB + ~6 KB gzip).
4310
+ *
4311
+ * @example
4312
+ * <Sunburst
4313
+ * root={{
4314
+ * id: "root", label: "Total",
4315
+ * children: [
4316
+ * { id: "a", label: "A", value: 60, children: [
4317
+ * { id: "a1", label: "A1", value: 40 },
4318
+ * { id: "a2", label: "A2", value: 20 },
4319
+ * ]},
4320
+ * { id: "b", label: "B", value: 30 },
4321
+ * ],
4322
+ * }}
4323
+ * />
4324
+ */
4325
+ declare type SunburstNode = {
4326
+ id: string;
4327
+ label: string;
4328
+ value?: number;
4329
+ children?: SunburstNode[];
4330
+ };
4331
+ export { SunburstNode }
4332
+ export { SunburstNode as SunburstNode_alias_1 }
4333
+
4334
+ declare interface SunburstProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
4335
+ /** Root of the hierarchy. Leaves require a positive `value`; internal nodes are summed. */
4336
+ root: SunburstNode;
4337
+ /** Allow a click on a segment to zoom into it as the new center. Default true. */
4338
+ drillable?: boolean;
4339
+ /** Optional content rendered at the SVG center (e.g. total). */
4340
+ centerLabel?: React_2.ReactNode;
4341
+ /** Pixel size of the rendered SVG (it's square). Default 400. */
4342
+ size?: number;
4343
+ /** Fired when a segment is clicked. Fires before any internal drill. */
4344
+ onSegmentClick?: (node: SunburstNode) => void;
4345
+ }
4346
+ export { SunburstProps }
4347
+ export { SunburstProps as SunburstProps_alias_1 }
4348
+
4349
+ declare const sunburstSchema: ComponentSchemaDefinition;
4350
+ export { sunburstSchema }
4351
+ export { sunburstSchema as sunburstSchema_alias_1 }
4352
+
3006
4353
  /**
3007
4354
  * Languages we surface in the prop type. Plain literal union of real
3008
4355
  * Shiki grammar IDs — kept literal (not `Extract<BundledLanguage, …>`)
@@ -3155,13 +4502,69 @@ declare const tagVariants: (props?: ({
3155
4502
  export { tagVariants }
3156
4503
  export { tagVariants as tagVariants_alias_1 }
3157
4504
 
4505
+ /**
4506
+ * Renders an xterm.js terminal display.
4507
+ * @param props - Terminal output + input handler + display options
4508
+ * @returns A div containing the xterm grid
4509
+ */
4510
+ declare function Terminal({ output, onInput, cols, rows, theme, cursorBlink, disableInput, className, ...rest }: TerminalProps): JSX.Element;
4511
+ export { Terminal }
4512
+ export { Terminal as Terminal_alias_1 }
4513
+
4514
+ /**
4515
+ * Headless terminal display backed by xterm.js. Renders an xterm grid
4516
+ * inside a div the consumer styles. No PTY, no shell — the consumer
4517
+ * owns the data-flow:
4518
+ *
4519
+ * - Pass `output` (string or string[]) to write to the display. Each
4520
+ * change is diffed against the prior render and only the new tail
4521
+ * is `term.write()`-ed, so feeding a streaming buffer doesn't redraw.
4522
+ * - Pass `onInput` to receive bytes the user typed. Wire it to a
4523
+ * WebSocket / IPC / fetch stream — terminal doesn't care.
4524
+ *
4525
+ * Heavy peer: requires `@xterm/xterm` (~150 KB gzip). The hex-core CLI's
4526
+ * `add` flow prompts before installing.
4527
+ *
4528
+ * @example
4529
+ * <Terminal
4530
+ * output={["$ ls\r\n", "package.json src/\r\n", "$ "]}
4531
+ * onInput={(data) => ws.send(data)}
4532
+ * rows={24}
4533
+ * cols={80}
4534
+ * />
4535
+ */
4536
+ declare interface TerminalProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children" | "onInput"> {
4537
+ /**
4538
+ * Bytes to display. String is written verbatim; string[] is joined.
4539
+ * On change, only the suffix beyond the prior render is emitted, so
4540
+ * appending to a streaming buffer is O(delta).
4541
+ */
4542
+ output?: string | string[];
4543
+ /** Receive bytes the user typed (incl. control sequences). */
4544
+ onInput?: (data: string) => void;
4545
+ /** Initial cols. xterm allows runtime resize via fit-addon (not bundled). Default 80. */
4546
+ cols?: number;
4547
+ /** Initial rows. Default 24. */
4548
+ rows?: number;
4549
+ /** Theme tokens — defaults to neutral light/dark via CSS vars. */
4550
+ theme?: "dark" | "light";
4551
+ /** Enable cursor blink. Default true. */
4552
+ cursorBlink?: boolean;
4553
+ /** Whether the user can type into the terminal. Default true. */
4554
+ disableInput?: boolean;
4555
+ }
4556
+ export { TerminalProps }
4557
+ export { TerminalProps as TerminalProps_alias_1 }
4558
+
4559
+ export declare const terminalSchema: ComponentSchemaDefinition;
4560
+
3158
4561
  declare const Textarea: React_2.ForwardRefExoticComponent<TextareaProps & React_2.RefAttributes<HTMLTextAreaElement>>;
3159
4562
  export { Textarea }
3160
4563
  export { Textarea as Textarea_alias_1 }
3161
4564
 
3162
4565
  /**
3163
4566
  * A styled multi-line text input with smooth focus transitions and shadow effects.
3164
- * Extends the native HTML textarea element with Hex UI styling.
4567
+ * Extends the native HTML textarea element with Hex Core styling.
3165
4568
  */
3166
4569
  declare type TextareaProps = React_2.TextareaHTMLAttributes<HTMLTextAreaElement>;
3167
4570
  export { TextareaProps }
@@ -3171,6 +4574,65 @@ declare const textareaSchema: ComponentSchemaDefinition;
3171
4574
  export { textareaSchema }
3172
4575
  export { textareaSchema as textareaSchema_alias_1 }
3173
4576
 
4577
+ declare function TimeAxis({ events, start, end, width, height, tickCount, onEventClick, className, ...rest }: TimeAxisProps): JSX.Element;
4578
+ export { TimeAxis }
4579
+ export { TimeAxis as TimeAxis_alias_1 }
4580
+
4581
+ /**
4582
+ * Events plotted along a horizontal time axis. Pure SVG; no heavy peer
4583
+ * dependency. Distinct from the existing `<Timeline>` component in
4584
+ * `components/timeline` — that one is an event-list with vertical
4585
+ * status markers; this one is a CHART with a real time axis where
4586
+ * spacing reflects elapsed time.
4587
+ *
4588
+ * Use TimeAxis when the *gap between events* is the message (release
4589
+ * cadence, incident frequency, sparse-then-dense patterns). Use
4590
+ * Timeline when the order of events is the message but the absolute
4591
+ * dates are secondary.
4592
+ *
4593
+ * @example
4594
+ * <TimeAxis
4595
+ * events={[
4596
+ * { id: "v1", label: "v1.0", date: "2025-01-15" },
4597
+ * { id: "v2", label: "v2.0", date: "2025-04-20" },
4598
+ * { id: "v3", label: "v3.0", date: "2025-09-10" },
4599
+ * ]}
4600
+ * />
4601
+ */
4602
+ declare type TimeAxisEvent = {
4603
+ id: string;
4604
+ label: string;
4605
+ /** Accepts Date, ISO string, or epoch ms. */
4606
+ date: Date | string | number;
4607
+ /** Optional category — events with the same `category` share a row band. */
4608
+ category?: string;
4609
+ };
4610
+ export { TimeAxisEvent }
4611
+ export { TimeAxisEvent as TimeAxisEvent_alias_1 }
4612
+
4613
+ declare interface TimeAxisProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children" | "start" | "end"> {
4614
+ /** Events to plot. Order doesn't matter — positions come from `date`. */
4615
+ events: TimeAxisEvent[];
4616
+ /** Optional explicit axis start. Auto-derived from `events` if omitted. */
4617
+ start?: Date | string | number;
4618
+ /** Optional explicit axis end. Auto-derived from `events` if omitted. */
4619
+ end?: Date | string | number;
4620
+ /** Pixel width of the rendered SVG. Default 720. */
4621
+ width?: number;
4622
+ /** Pixel height of the rendered SVG. Default 200. */
4623
+ height?: number;
4624
+ /** Number of axis ticks to show. Default 6. */
4625
+ tickCount?: number;
4626
+ /** Fired when an event is clicked. */
4627
+ onEventClick?: (event: TimeAxisEvent) => void;
4628
+ }
4629
+ export { TimeAxisProps }
4630
+ export { TimeAxisProps as TimeAxisProps_alias_1 }
4631
+
4632
+ declare const timeAxisSchema: ComponentSchemaDefinition;
4633
+ export { timeAxisSchema }
4634
+ export { timeAxisSchema as timeAxisSchema_alias_1 }
4635
+
3174
4636
  /**
3175
4637
  * Vertical chronological event feed (activity log, audit trail, release notes).
3176
4638
  * Pure semantic HTML — `<ol>` of `<li>`. Events expose an optional icon, a
@@ -3270,7 +4732,7 @@ export { toast as toast_alias_1 }
3270
4732
 
3271
4733
  /**
3272
4734
  * The global toast container. Render once in your app root.
3273
- * Re-export of Sonner's Toaster styled to use Hex UI theme tokens.
4735
+ * Re-export of Sonner's Toaster styled to use Hex Core theme tokens.
3274
4736
  * @param props - Sonner Toaster props (position, richColors, etc.)
3275
4737
  * @returns A styled portal container for toast notifications
3276
4738
  */
@@ -3512,6 +4974,62 @@ declare function Tree({ data, defaultExpanded, expanded: expandedProp, onExpande
3512
4974
  export { Tree }
3513
4975
  export { Tree as Tree_alias_1 }
3514
4976
 
4977
+ declare function TreeMap({ root, width, height, padding, tile, colorBy, onLeafClick, className, ...rest }: TreeMapProps): JSX.Element;
4978
+ export { TreeMap }
4979
+ export { TreeMap as TreeMap_alias_1 }
4980
+
4981
+ /**
4982
+ * Typed React TreeMap. Each leaf is rendered as a rectangle whose area is
4983
+ * proportional to its `value`. Internal node values are summed automatically;
4984
+ * d3-hierarchy's squarified treemap layout keeps rectangles close to square
4985
+ * for legibility.
4986
+ *
4987
+ * Heavy peer: requires `d3-hierarchy` (~3 KB gzip).
4988
+ *
4989
+ * @example
4990
+ * <TreeMap
4991
+ * root={{
4992
+ * id: "root",
4993
+ * label: "Files",
4994
+ * children: [
4995
+ * { id: "src", label: "src", value: 240 },
4996
+ * { id: "node_modules", label: "node_modules", value: 980 },
4997
+ * ],
4998
+ * }}
4999
+ * />
5000
+ */
5001
+ declare type TreeMapNode = {
5002
+ id: string;
5003
+ label: string;
5004
+ value?: number;
5005
+ children?: TreeMapNode[];
5006
+ };
5007
+ export { TreeMapNode }
5008
+ export { TreeMapNode as TreeMapNode_alias_1 }
5009
+
5010
+ declare interface TreeMapProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
5011
+ /** Root of the hierarchy. Leaves require a positive `value`. */
5012
+ root: TreeMapNode;
5013
+ /** Pixel width of the rendered SVG. Default 600. */
5014
+ width?: number;
5015
+ /** Pixel height of the rendered SVG. Default 400. */
5016
+ height?: number;
5017
+ /** Inner padding between sibling rectangles, in pixels. Default 2. */
5018
+ padding?: number;
5019
+ /** Tiling algorithm. "squarify" (default) keeps rectangles close to square. */
5020
+ tile?: "squarify" | "binary" | "slice-dice";
5021
+ /** Choose a fill color per leaf. "depth" cycles through theme tokens; "value" interpolates by value; or pass a function. */
5022
+ colorBy?: "depth" | "value" | ((node: TreeMapNode, depth: number) => string);
5023
+ /** Fired when a leaf is clicked. */
5024
+ onLeafClick?: (node: TreeMapNode) => void;
5025
+ }
5026
+ export { TreeMapProps }
5027
+ export { TreeMapProps as TreeMapProps_alias_1 }
5028
+
5029
+ declare const treeMapSchema: ComponentSchemaDefinition;
5030
+ export { treeMapSchema }
5031
+ export { treeMapSchema as treeMapSchema_alias_1 }
5032
+
3515
5033
  /**
3516
5034
  * One node in a Tree. Generic — the shape is content-agnostic so consumers
3517
5035
  * can render org charts, taxonomy pickers, navigation trees, etc.
@@ -3589,4 +5107,47 @@ declare function useSidebar(): SidebarContextValue;
3589
5107
  export { useSidebar }
3590
5108
  export { useSidebar as useSidebar_alias_1 }
3591
5109
 
5110
+ declare function Venn({ sets, size, onSetClick, className, ...rest }: VennProps): JSX.Element;
5111
+ export { Venn }
5112
+ export { Venn as Venn_alias_1 }
5113
+
5114
+ declare interface VennProps extends Omit<React_2.SVGAttributes<SVGSVGElement>, "children"> {
5115
+ /** 2 or 3 sets. More than 3 isn't visually tractable in a strict Venn. */
5116
+ sets: VennSet[];
5117
+ /** Pixel size of the rendered SVG (it's square). Default 360. */
5118
+ size?: number;
5119
+ /** Fired when a set is clicked. */
5120
+ onSetClick?: (set: VennSet) => void;
5121
+ }
5122
+ export { VennProps }
5123
+ export { VennProps as VennProps_alias_1 }
5124
+
5125
+ declare const vennSchema: ComponentSchemaDefinition;
5126
+ export { vennSchema }
5127
+ export { vennSchema as vennSchema_alias_1 }
5128
+
5129
+ /**
5130
+ * Set-overlap (Venn) diagram for 2 or 3 sets. Pure SVG; no heavy peer
5131
+ * dependency. Set positions and radii are fixed at sensible defaults
5132
+ * — Venn is for showing CATEGORICAL overlap (Linux ∩ Mac, paid ∩ active),
5133
+ * not for showing the EXACT cardinality of intersections (that's
5134
+ * Euler-diagram territory and requires a real layout solver).
5135
+ *
5136
+ * @example
5137
+ * <Venn
5138
+ * sets={[
5139
+ * { id: "linux", label: "Linux" },
5140
+ * { id: "mac", label: "Mac" },
5141
+ * { id: "windows", label: "Windows" },
5142
+ * ]}
5143
+ * />
5144
+ */
5145
+ declare type VennSet = {
5146
+ id: string;
5147
+ label: string;
5148
+ value?: number;
5149
+ };
5150
+ export { VennSet }
5151
+ export { VennSet as VennSet_alias_1 }
5152
+
3592
5153
  export { }