@hex-core/components 1.8.1 → 1.10.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 (158) hide show
  1. package/dist/_tsup-dts-rollup.d.ts +855 -18
  2. package/dist/accordion.js.map +1 -1
  3. package/dist/alert-dialog.js.map +1 -1
  4. package/dist/alert.js.map +1 -1
  5. package/dist/arc.js.map +1 -1
  6. package/dist/attachment.js.map +1 -1
  7. package/dist/audio-player.js.map +1 -1
  8. package/dist/audio-waveform.js.map +1 -1
  9. package/dist/auth-forgot-password.d.ts +2 -0
  10. package/dist/auth-forgot-password.js +400 -0
  11. package/dist/auth-forgot-password.js.map +1 -0
  12. package/dist/auth-reset-password.d.ts +2 -0
  13. package/dist/auth-reset-password.js +323 -0
  14. package/dist/auth-reset-password.js.map +1 -0
  15. package/dist/auth-sign-in-split.d.ts +3 -0
  16. package/dist/auth-sign-in-split.js +443 -0
  17. package/dist/auth-sign-in-split.js.map +1 -0
  18. package/dist/auth-sign-up-card.d.ts +3 -0
  19. package/dist/auth-sign-up-card.js +590 -0
  20. package/dist/auth-sign-up-card.js.map +1 -0
  21. package/dist/auth-verify-email.d.ts +2 -0
  22. package/dist/auth-verify-email.js +339 -0
  23. package/dist/auth-verify-email.js.map +1 -0
  24. package/dist/auth-verify-otp.d.ts +2 -0
  25. package/dist/auth-verify-otp.js +349 -0
  26. package/dist/auth-verify-otp.js.map +1 -0
  27. package/dist/avatar.js.map +1 -1
  28. package/dist/badge.js.map +1 -1
  29. package/dist/branch.d.ts +2 -0
  30. package/dist/branch.js +136 -0
  31. package/dist/branch.js.map +1 -0
  32. package/dist/breadcrumb.js.map +1 -1
  33. package/dist/button.js.map +1 -1
  34. package/dist/calendar.js.map +1 -1
  35. package/dist/canvas.js.map +1 -1
  36. package/dist/card.js.map +1 -1
  37. package/dist/chain-of-thought.d.ts +3 -0
  38. package/dist/chain-of-thought.js +119 -0
  39. package/dist/chain-of-thought.js.map +1 -0
  40. package/dist/checkbox.js.map +1 -1
  41. package/dist/chord.js.map +1 -1
  42. package/dist/citation.js.map +1 -1
  43. package/dist/cloze.js.map +1 -1
  44. package/dist/cluster.js.map +1 -1
  45. package/dist/code-block-copy.js.map +1 -1
  46. package/dist/code-block.js.map +1 -1
  47. package/dist/color-picker.js.map +1 -1
  48. package/dist/combobox.js.map +1 -1
  49. package/dist/command.js.map +1 -1
  50. package/dist/compare-table.js.map +1 -1
  51. package/dist/composer.js.map +1 -1
  52. package/dist/container.js.map +1 -1
  53. package/dist/context-menu.js.map +1 -1
  54. package/dist/conversation.d.ts +3 -0
  55. package/dist/conversation.js +358 -0
  56. package/dist/conversation.js.map +1 -0
  57. package/dist/data-table.js.map +1 -1
  58. package/dist/date-picker.js.map +1 -1
  59. package/dist/deck.js.map +1 -1
  60. package/dist/dendrogram.js.map +1 -1
  61. package/dist/diagram.js.map +1 -1
  62. package/dist/dialog.js.map +1 -1
  63. package/dist/drawer.js.map +1 -1
  64. package/dist/dropdown-menu.js.map +1 -1
  65. package/dist/dropzone.js.map +1 -1
  66. package/dist/empty.js.map +1 -1
  67. package/dist/error-state.js.map +1 -1
  68. package/dist/file-tree.js.map +1 -1
  69. package/dist/flashcard.js.map +1 -1
  70. package/dist/flowchart.js.map +1 -1
  71. package/dist/form.js.map +1 -1
  72. package/dist/funnel.js.map +1 -1
  73. package/dist/gantt.js.map +1 -1
  74. package/dist/grid.js.map +1 -1
  75. package/dist/hover-card.js.map +1 -1
  76. package/dist/image-occlusion.js.map +1 -1
  77. package/dist/index.d.ts +40 -0
  78. package/dist/index.js +4839 -2813
  79. package/dist/index.js.map +1 -1
  80. package/dist/inline-citation.d.ts +2 -0
  81. package/dist/inline-citation.js +108 -0
  82. package/dist/inline-citation.js.map +1 -0
  83. package/dist/input-otp.js.map +1 -1
  84. package/dist/input.js.map +1 -1
  85. package/dist/label.js.map +1 -1
  86. package/dist/loading-indicator.js.map +1 -1
  87. package/dist/loading.js.map +1 -1
  88. package/dist/markdown.d.ts +1 -0
  89. package/dist/markdown.js +784 -4
  90. package/dist/markdown.js.map +1 -1
  91. package/dist/matrix.js.map +1 -1
  92. package/dist/menubar.js.map +1 -1
  93. package/dist/message-actions.js.map +1 -1
  94. package/dist/message-list.js.map +1 -1
  95. package/dist/message.js.map +1 -1
  96. package/dist/mind-map.js.map +1 -1
  97. package/dist/multi-combobox.js.map +1 -1
  98. package/dist/navigation-menu.js.map +1 -1
  99. package/dist/org-chart.js.map +1 -1
  100. package/dist/pagination.js.map +1 -1
  101. package/dist/plan.d.ts +3 -0
  102. package/dist/plan.js +183 -0
  103. package/dist/plan.js.map +1 -0
  104. package/dist/popover.js.map +1 -1
  105. package/dist/progress.js.map +1 -1
  106. package/dist/pyramid.js.map +1 -1
  107. package/dist/quiz.js.map +1 -1
  108. package/dist/radio-group.js.map +1 -1
  109. package/dist/reasoning.js.map +1 -1
  110. package/dist/resizable.js.map +1 -1
  111. package/dist/sankey.js.map +1 -1
  112. package/dist/schemas.d.ts +8 -0
  113. package/dist/schemas.js +774 -17
  114. package/dist/schemas.js.map +1 -1
  115. package/dist/scroll-area.js.map +1 -1
  116. package/dist/select.js.map +1 -1
  117. package/dist/separator.js.map +1 -1
  118. package/dist/sequence.js.map +1 -1
  119. package/dist/sheet.js.map +1 -1
  120. package/dist/shimmer.d.ts +2 -0
  121. package/dist/shimmer.js +39 -0
  122. package/dist/shimmer.js.map +1 -0
  123. package/dist/sidebar.js.map +1 -1
  124. package/dist/skeleton.js.map +1 -1
  125. package/dist/slider.js.map +1 -1
  126. package/dist/sources.d.ts +3 -0
  127. package/dist/sources.js +164 -0
  128. package/dist/sources.js.map +1 -0
  129. package/dist/spaced-repetition.js.map +1 -1
  130. package/dist/spacer.js.map +1 -1
  131. package/dist/speech-recognition.js.map +1 -1
  132. package/dist/stack.js.map +1 -1
  133. package/dist/stepper.js.map +1 -1
  134. package/dist/suggestion.js.map +1 -1
  135. package/dist/sunburst.js.map +1 -1
  136. package/dist/switch.js.map +1 -1
  137. package/dist/table.js.map +1 -1
  138. package/dist/tabs.js.map +1 -1
  139. package/dist/tag.js.map +1 -1
  140. package/dist/task.d.ts +3 -0
  141. package/dist/task.js +189 -0
  142. package/dist/task.js.map +1 -0
  143. package/dist/terminal.js +11 -0
  144. package/dist/terminal.js.map +1 -1
  145. package/dist/textarea.js.map +1 -1
  146. package/dist/time-axis.js.map +1 -1
  147. package/dist/time-picker.js.map +1 -1
  148. package/dist/timeline.js.map +1 -1
  149. package/dist/toggle-group.js.map +1 -1
  150. package/dist/toggle.js.map +1 -1
  151. package/dist/tool-call.js +5 -6
  152. package/dist/tool-call.js.map +1 -1
  153. package/dist/toolbar.js.map +1 -1
  154. package/dist/tooltip.js.map +1 -1
  155. package/dist/tree-map.js.map +1 -1
  156. package/dist/tree.js.map +1 -1
  157. package/dist/venn.js.map +1 -1
  158. package/package.json +9 -4
package/dist/venn.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/chart-palette.ts","../src/lib/utils.ts","../src/artifacts/venn/venn.tsx"],"names":[],"mappings":"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","file":"venn.js","sourcesContent":["/**\n * Categorical chart palette for diagram primitives that encode categorical\n * data (sunburst, treemap, sankey, chord, funnel, pyramid, venn, matrix).\n * Cycled by an integer key — node index, leaf index, depth-1 ancestor, etc.\n *\n * The values reach into `--chart-1` through `--chart-6`, the dedicated\n * diagram-encoding tokens added in `@hex-core/tokens` 1.4. Each token has a\n * `var(--primary)` fallback so consumers on theme presets that haven't been\n * updated to ship `--chart-N` (or who run a custom theme without the chart\n * family) still see a coherent monochrome rendering instead of black SVG\n * fills.\n *\n * Why a chart palette and not the semantic tokens: `--primary`, `--accent`,\n * `--secondary`, and `--muted` collapse to a single hue family in the\n * default monochrome theme — adjacent segments of a chart end up\n * indistinguishable. Chart tokens are tuned for perceptual differentiation.\n */\nexport const CHART_PALETTE = [\n\t\"hsl(var(--chart-1, var(--primary)))\",\n\t\"hsl(var(--chart-2, var(--primary)))\",\n\t\"hsl(var(--chart-3, var(--primary)))\",\n\t\"hsl(var(--chart-4, var(--primary)))\",\n\t\"hsl(var(--chart-5, var(--primary)))\",\n\t\"hsl(var(--chart-6, var(--primary)))\",\n] as const;\n\n/**\n * Return the chart hue at a stable index. Cycles modulo `CHART_PALETTE.length`\n * so the caller doesn't have to range-check.\n *\n * @param index - Integer key (node index, leaf index, depth-1 ancestor index, …).\n * @returns A `hsl(var(...))` string suitable for SVG `fill` / `stroke`.\n */\nexport function pickChartHue(index: number): string {\n\tconst safe = ((index % CHART_PALETTE.length) + CHART_PALETTE.length) % CHART_PALETTE.length;\n\t// `safe` is provably 0..CHART_PALETTE.length-1 — the assertion documents that.\n\treturn CHART_PALETTE[safe] as string;\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names with Tailwind CSS conflict resolution.\n * @param inputs - Class values (strings, arrays, objects) to merge\n * @returns A single merged class string with Tailwind conflicts resolved\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { pickChartHue } from \"../../lib/chart-palette.js\";\nimport { cn } from \"../../lib/utils.js\";\n\n/**\n * Set-overlap (Venn) diagram for 2 or 3 sets. Pure SVG; no heavy peer\n * dependency. Set positions and radii are fixed at sensible defaults\n * — Venn is for showing CATEGORICAL overlap (Linux ∩ Mac, paid ∩ active),\n * not for showing the EXACT cardinality of intersections (that's\n * Euler-diagram territory and requires a real layout solver).\n *\n * @example\n * <Venn\n * sets={[\n * { id: \"linux\", label: \"Linux\" },\n * { id: \"mac\", label: \"Mac\" },\n * { id: \"windows\", label: \"Windows\" },\n * ]}\n * />\n */\nexport type VennSet = {\n\tid: string;\n\tlabel: string;\n\tvalue?: number;\n};\n\nexport interface VennProps extends Omit<React.SVGAttributes<SVGSVGElement>, \"children\"> {\n\t/** 2 or 3 sets. More than 3 isn't visually tractable in a strict Venn. */\n\tsets: VennSet[];\n\t/** Pixel size of the rendered SVG (it's square). Default 360. */\n\tsize?: number;\n\t/** Fired when a set is clicked. */\n\tonSetClick?: (set: VennSet) => void;\n}\n\ninterface LaidOutCircle {\n\tset: VennSet;\n\tcx: number;\n\tcy: number;\n\tr: number;\n\tlabelX: number;\n\tlabelY: number;\n\tdepth: number;\n}\n\n// Venn supports 2 or 3 sets only — picks the first 2-3 categorical hues\n// from the shared chart palette via `pickChartHue` (which falls back to\n// `--primary` if a consumer's theme is missing the chart family).\n\nfunction Venn({\n\tsets,\n\tsize = 360,\n\tonSetClick,\n\tclassName,\n\t...rest\n}: VennProps) {\n\tconst circles = React.useMemo(() => layout(sets, size), [sets, size]);\n\tconst desc = `Venn diagram with ${sets.length} set${sets.length === 1 ? \"\" : \"s\"}: ${sets.map((s) => s.label).join(\", \") || \"(empty)\"}`;\n\n\t// Surface unsupported set counts in dev so an LLM-generated artifact with\n\t// the wrong shape isn't silently degraded to the fallback message. The\n\t// ref guard fires once per mount, not per render. Reads NODE_ENV via\n\t// globalThis to avoid pulling `@types/node` into the components package.\n\tconst warnedRef = React.useRef(false);\n\tconst nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n\tif (\n\t\tnodeEnv !== \"production\" &&\n\t\t!warnedRef.current &&\n\t\t(sets.length === 0 || sets.length > 3)\n\t) {\n\t\twarnedRef.current = true;\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`[hex-core/Venn] Got ${sets.length} sets — Venn supports 2 or 3. Use TreeMap or Matrix for higher-arity overlaps.`,\n\t\t);\n\t}\n\n\tif (sets.length === 0 || sets.length > 3) {\n\t\treturn (\n\t\t\t<svg\n\t\t\t\t{...rest}\n\t\t\t\tdata-hex-venn\n\t\t\t\tdata-set-count={sets.length}\n\t\t\t\trole=\"img\"\n\t\t\t\twidth={size}\n\t\t\t\theight={size}\n\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\tclassName={cn(\"block\", className)}\n\t\t\t>\n\t\t\t\t<title>Venn diagram</title>\n\t\t\t\t<desc>{desc}</desc>\n\t\t\t\t<text\n\t\t\t\t\tx={size / 2}\n\t\t\t\t\ty={size / 2}\n\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\tdy=\"0.35em\"\n\t\t\t\t\tfontSize={12}\n\t\t\t\t\tfill=\"hsl(var(--muted-foreground))\"\n\t\t\t\t>\n\t\t\t\t\t{sets.length === 0 ? \"No sets\" : `Venn supports 2–3 sets (got ${sets.length})`}\n\t\t\t\t</text>\n\t\t\t</svg>\n\t\t);\n\t}\n\n\treturn (\n\t\t<svg\n\t\t\t{...rest}\n\t\t\tdata-hex-venn\n\t\t\tdata-set-count={sets.length}\n\t\t\trole=\"img\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\tclassName={cn(\"block\", className)}\n\t\t>\n\t\t\t<title>Venn diagram</title>\n\t\t\t<desc>{desc}</desc>\n\t\t\t<g data-hex-venn-sets>\n\t\t\t\t{circles.map((c) => {\n\t\t\t\t\tconst interactive = Boolean(onSetClick);\n\t\t\t\t\tconst handleActivate = () => onSetClick?.(c.set);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g\n\t\t\t\t\t\t\tkey={c.set.id}\n\t\t\t\t\t\t\tdata-hex-venn-set\n\t\t\t\t\t\t\tdata-depth={c.depth}\n\t\t\t\t\t\t\trole={interactive ? \"button\" : undefined}\n\t\t\t\t\t\t\ttabIndex={interactive ? 0 : undefined}\n\t\t\t\t\t\t\taria-label={interactive ? c.set.label : undefined}\n\t\t\t\t\t\t\tstyle={interactive ? { cursor: \"pointer\" } : undefined}\n\t\t\t\t\t\t\tonClick={interactive ? handleActivate : undefined}\n\t\t\t\t\t\t\tonKeyDown={interactive ? (e) => activateOnKey(e, handleActivate) : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\tcx={c.cx}\n\t\t\t\t\t\t\t\tcy={c.cy}\n\t\t\t\t\t\t\t\tr={c.r}\n\t\t\t\t\t\t\t\tfill={pickChartHue(c.depth)}\n\t\t\t\t\t\t\t\tfillOpacity={0.45}\n\t\t\t\t\t\t\t\tstroke=\"hsl(var(--background))\"\n\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</g>\n\t\t\t<g data-hex-venn-labels>\n\t\t\t\t{circles.map((c) => (\n\t\t\t\t\t<text\n\t\t\t\t\t\tkey={`label-${c.set.id}`}\n\t\t\t\t\t\tdata-hex-venn-label\n\t\t\t\t\t\tx={c.labelX}\n\t\t\t\t\t\ty={c.labelY}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tdy=\"0.35em\"\n\t\t\t\t\t\tfontSize={12}\n\t\t\t\t\t\tfontWeight={600}\n\t\t\t\t\t\tfill=\"hsl(var(--foreground))\"\n\t\t\t\t\t\tstyle={{ paintOrder: \"stroke\", pointerEvents: \"none\" }}\n\t\t\t\t\t\tstroke=\"hsl(var(--background))\"\n\t\t\t\t\t\tstrokeWidth={3}\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{`${c.set.label}${c.set.value != null ? ` (${c.set.value})` : \"\"}`}\n\t\t\t\t\t</text>\n\t\t\t\t))}\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n\nfunction layout(sets: VennSet[], size: number): LaidOutCircle[] {\n\tif (sets.length === 0 || sets.length > 3) return [];\n\tconst cx = size / 2;\n\tconst cy = size / 2;\n\tconst r = size * 0.22; // circle radius\n\tconst sep = size * 0.12; // half-distance between centers\n\n\tif (sets.length === 1) {\n\t\treturn [{ set: sets[0], cx, cy, r, labelX: cx, labelY: cy - r - 8, depth: 0 }];\n\t}\n\n\tif (sets.length === 2) {\n\t\treturn sets.map((s, i) => {\n\t\t\tconst dx = i === 0 ? -sep : sep;\n\t\t\treturn {\n\t\t\t\tset: s,\n\t\t\t\tcx: cx + dx,\n\t\t\t\tcy,\n\t\t\t\tr,\n\t\t\t\tlabelX: cx + dx + (i === 0 ? -r * 0.6 : r * 0.6),\n\t\t\t\tlabelY: cy - r - 8,\n\t\t\t\tdepth: i,\n\t\t\t};\n\t\t});\n\t}\n\n\t// 3 sets — equilateral triangle of centers (60° apart). Bottom-left,\n\t// bottom-right, top. Label position pushes outward along the radial\n\t// direction from the centroid so labels don't overlap the circles.\n\tconst verticalOffset = sep * 0.866; // sin(60°)\n\tconst triangle: Array<{ dx: number; dy: number }> = [\n\t\t{ dx: -sep, dy: verticalOffset }, // bottom-left\n\t\t{ dx: sep, dy: verticalOffset }, // bottom-right\n\t\t{ dx: 0, dy: -verticalOffset }, // top\n\t];\n\tconst LABEL_PUSH = 1.7;\n\tconst TOP_LABEL_NUDGE = -8; // top label sits above its circle; pull up\n\tconst BOTTOM_LABEL_NUDGE = 16; // bottom labels sit below; push down\n\treturn sets.map((s, i) => {\n\t\tconst { dx, dy } = triangle[i] ?? triangle[0];\n\t\tconst isTop = i === 2;\n\t\treturn {\n\t\t\tset: s,\n\t\t\tcx: cx + dx,\n\t\t\tcy: cy + dy,\n\t\t\tr,\n\t\t\tlabelX: cx + dx * LABEL_PUSH,\n\t\t\tlabelY: cy + dy * LABEL_PUSH + (isTop ? TOP_LABEL_NUDGE : BOTTOM_LABEL_NUDGE),\n\t\t\tdepth: i,\n\t\t};\n\t});\n}\n\nfunction activateOnKey(e: React.KeyboardEvent, fn: () => void): void {\n\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\te.preventDefault();\n\t\tfn();\n\t}\n}\n\nexport { Venn };\n"]}
1
+ {"version":3,"sources":["../src/lib/chart-palette.ts","../src/lib/utils.ts","../src/artifacts/venn/venn.tsx"],"names":[],"mappings":"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","file":"venn.js","sourcesContent":["/**\n * Categorical chart palette for diagram primitives that encode categorical\n * data (sunburst, treemap, sankey, chord, funnel, pyramid, venn, matrix).\n * Cycled by an integer key — node index, leaf index, depth-1 ancestor, etc.\n *\n * The values reach into `--chart-1` through `--chart-6`, the dedicated\n * diagram-encoding tokens added in `@hex-core/tokens` 1.4. Each token has a\n * `var(--primary)` fallback so consumers on theme presets that haven't been\n * updated to ship `--chart-N` (or who run a custom theme without the chart\n * family) still see a coherent monochrome rendering instead of black SVG\n * fills.\n *\n * Why a chart palette and not the semantic tokens: `--primary`, `--accent`,\n * `--secondary`, and `--muted` collapse to a single hue family in the\n * default monochrome theme — adjacent segments of a chart end up\n * indistinguishable. Chart tokens are tuned for perceptual differentiation.\n */\nexport const CHART_PALETTE = [\n\t\"hsl(var(--chart-1, var(--primary)))\",\n\t\"hsl(var(--chart-2, var(--primary)))\",\n\t\"hsl(var(--chart-3, var(--primary)))\",\n\t\"hsl(var(--chart-4, var(--primary)))\",\n\t\"hsl(var(--chart-5, var(--primary)))\",\n\t\"hsl(var(--chart-6, var(--primary)))\",\n] as const;\n\n/**\n * Return the chart hue at a stable index. Cycles modulo `CHART_PALETTE.length`\n * so the caller doesn't have to range-check.\n *\n * @param index - Integer key (node index, leaf index, depth-1 ancestor index, …).\n * @returns A `hsl(var(...))` string suitable for SVG `fill` / `stroke`.\n */\nexport function pickChartHue(index: number): string {\n\tconst safe = ((index % CHART_PALETTE.length) + CHART_PALETTE.length) % CHART_PALETTE.length;\n\t// `safe` is provably 0..CHART_PALETTE.length-1 — the assertion documents that.\n\treturn CHART_PALETTE[safe] as string;\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names with Tailwind CSS conflict resolution.\n * @param inputs - Class values (strings, arrays, objects) to merge\n * @returns A single merged class string with Tailwind conflicts resolved\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n\nconst SAFE_URL_SCHEMES = [\"http:\", \"https:\", \"mailto:\"] as const;\n\n/**\n * Allowlist a URL for use as an `<a href>` against untrusted input.\n *\n * Returns the raw string when it's `http(s):` / `mailto:` / a relative\n * URL (no scheme); returns `undefined` otherwise. Defends against\n * `javascript:` / `data:` / `vbscript:` injection from streamed model\n * output or third-party JSON payloads that flow into citation chips.\n *\n * Inside a Markdown render path, `rehype-sanitize` already strips\n * `javascript:` from inline-link hrefs — but it does NOT introspect\n * JSON nested inside attribute values (e.g. `<sources data='[…]'/>`),\n * so the components that consume that data must guard themselves.\n *\n * @param raw - The candidate URL, or `undefined` when none was supplied.\n * @returns The URL when safe to render, otherwise `undefined`.\n */\nexport function safeUrl(raw: string | undefined): string | undefined {\n\tif (raw === undefined || raw === \"\") return undefined;\n\t// Relative URLs have no scheme — `new URL(relative)` throws without a base,\n\t// so a thrown URL means either malformed input OR a relative path. Treat\n\t// \"throws + does not contain a colon\" as a relative path (safe).\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(raw);\n\t} catch {\n\t\treturn raw.includes(\":\") ? undefined : raw;\n\t}\n\treturn SAFE_URL_SCHEMES.some((scheme) => scheme === parsed.protocol) ? raw : undefined;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { pickChartHue } from \"../../lib/chart-palette.js\";\nimport { cn } from \"../../lib/utils.js\";\n\n/**\n * Set-overlap (Venn) diagram for 2 or 3 sets. Pure SVG; no heavy peer\n * dependency. Set positions and radii are fixed at sensible defaults\n * — Venn is for showing CATEGORICAL overlap (Linux ∩ Mac, paid ∩ active),\n * not for showing the EXACT cardinality of intersections (that's\n * Euler-diagram territory and requires a real layout solver).\n *\n * @example\n * <Venn\n * sets={[\n * { id: \"linux\", label: \"Linux\" },\n * { id: \"mac\", label: \"Mac\" },\n * { id: \"windows\", label: \"Windows\" },\n * ]}\n * />\n */\nexport type VennSet = {\n\tid: string;\n\tlabel: string;\n\tvalue?: number;\n};\n\nexport interface VennProps extends Omit<React.SVGAttributes<SVGSVGElement>, \"children\"> {\n\t/** 2 or 3 sets. More than 3 isn't visually tractable in a strict Venn. */\n\tsets: VennSet[];\n\t/** Pixel size of the rendered SVG (it's square). Default 360. */\n\tsize?: number;\n\t/** Fired when a set is clicked. */\n\tonSetClick?: (set: VennSet) => void;\n}\n\ninterface LaidOutCircle {\n\tset: VennSet;\n\tcx: number;\n\tcy: number;\n\tr: number;\n\tlabelX: number;\n\tlabelY: number;\n\tdepth: number;\n}\n\n// Venn supports 2 or 3 sets only — picks the first 2-3 categorical hues\n// from the shared chart palette via `pickChartHue` (which falls back to\n// `--primary` if a consumer's theme is missing the chart family).\n\nfunction Venn({\n\tsets,\n\tsize = 360,\n\tonSetClick,\n\tclassName,\n\t...rest\n}: VennProps) {\n\tconst circles = React.useMemo(() => layout(sets, size), [sets, size]);\n\tconst desc = `Venn diagram with ${sets.length} set${sets.length === 1 ? \"\" : \"s\"}: ${sets.map((s) => s.label).join(\", \") || \"(empty)\"}`;\n\n\t// Surface unsupported set counts in dev so an LLM-generated artifact with\n\t// the wrong shape isn't silently degraded to the fallback message. The\n\t// ref guard fires once per mount, not per render. Reads NODE_ENV via\n\t// globalThis to avoid pulling `@types/node` into the components package.\n\tconst warnedRef = React.useRef(false);\n\tconst nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n\tif (\n\t\tnodeEnv !== \"production\" &&\n\t\t!warnedRef.current &&\n\t\t(sets.length === 0 || sets.length > 3)\n\t) {\n\t\twarnedRef.current = true;\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`[hex-core/Venn] Got ${sets.length} sets — Venn supports 2 or 3. Use TreeMap or Matrix for higher-arity overlaps.`,\n\t\t);\n\t}\n\n\tif (sets.length === 0 || sets.length > 3) {\n\t\treturn (\n\t\t\t<svg\n\t\t\t\t{...rest}\n\t\t\t\tdata-hex-venn\n\t\t\t\tdata-set-count={sets.length}\n\t\t\t\trole=\"img\"\n\t\t\t\twidth={size}\n\t\t\t\theight={size}\n\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\tclassName={cn(\"block\", className)}\n\t\t\t>\n\t\t\t\t<title>Venn diagram</title>\n\t\t\t\t<desc>{desc}</desc>\n\t\t\t\t<text\n\t\t\t\t\tx={size / 2}\n\t\t\t\t\ty={size / 2}\n\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\tdy=\"0.35em\"\n\t\t\t\t\tfontSize={12}\n\t\t\t\t\tfill=\"hsl(var(--muted-foreground))\"\n\t\t\t\t>\n\t\t\t\t\t{sets.length === 0 ? \"No sets\" : `Venn supports 2–3 sets (got ${sets.length})`}\n\t\t\t\t</text>\n\t\t\t</svg>\n\t\t);\n\t}\n\n\treturn (\n\t\t<svg\n\t\t\t{...rest}\n\t\t\tdata-hex-venn\n\t\t\tdata-set-count={sets.length}\n\t\t\trole=\"img\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\tclassName={cn(\"block\", className)}\n\t\t>\n\t\t\t<title>Venn diagram</title>\n\t\t\t<desc>{desc}</desc>\n\t\t\t<g data-hex-venn-sets>\n\t\t\t\t{circles.map((c) => {\n\t\t\t\t\tconst interactive = Boolean(onSetClick);\n\t\t\t\t\tconst handleActivate = () => onSetClick?.(c.set);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g\n\t\t\t\t\t\t\tkey={c.set.id}\n\t\t\t\t\t\t\tdata-hex-venn-set\n\t\t\t\t\t\t\tdata-depth={c.depth}\n\t\t\t\t\t\t\trole={interactive ? \"button\" : undefined}\n\t\t\t\t\t\t\ttabIndex={interactive ? 0 : undefined}\n\t\t\t\t\t\t\taria-label={interactive ? c.set.label : undefined}\n\t\t\t\t\t\t\tstyle={interactive ? { cursor: \"pointer\" } : undefined}\n\t\t\t\t\t\t\tonClick={interactive ? handleActivate : undefined}\n\t\t\t\t\t\t\tonKeyDown={interactive ? (e) => activateOnKey(e, handleActivate) : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\tcx={c.cx}\n\t\t\t\t\t\t\t\tcy={c.cy}\n\t\t\t\t\t\t\t\tr={c.r}\n\t\t\t\t\t\t\t\tfill={pickChartHue(c.depth)}\n\t\t\t\t\t\t\t\tfillOpacity={0.45}\n\t\t\t\t\t\t\t\tstroke=\"hsl(var(--background))\"\n\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</g>\n\t\t\t<g data-hex-venn-labels>\n\t\t\t\t{circles.map((c) => (\n\t\t\t\t\t<text\n\t\t\t\t\t\tkey={`label-${c.set.id}`}\n\t\t\t\t\t\tdata-hex-venn-label\n\t\t\t\t\t\tx={c.labelX}\n\t\t\t\t\t\ty={c.labelY}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tdy=\"0.35em\"\n\t\t\t\t\t\tfontSize={12}\n\t\t\t\t\t\tfontWeight={600}\n\t\t\t\t\t\tfill=\"hsl(var(--foreground))\"\n\t\t\t\t\t\tstyle={{ paintOrder: \"stroke\", pointerEvents: \"none\" }}\n\t\t\t\t\t\tstroke=\"hsl(var(--background))\"\n\t\t\t\t\t\tstrokeWidth={3}\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{`${c.set.label}${c.set.value != null ? ` (${c.set.value})` : \"\"}`}\n\t\t\t\t\t</text>\n\t\t\t\t))}\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n\nfunction layout(sets: VennSet[], size: number): LaidOutCircle[] {\n\tif (sets.length === 0 || sets.length > 3) return [];\n\tconst cx = size / 2;\n\tconst cy = size / 2;\n\tconst r = size * 0.22; // circle radius\n\tconst sep = size * 0.12; // half-distance between centers\n\n\tif (sets.length === 1) {\n\t\treturn [{ set: sets[0], cx, cy, r, labelX: cx, labelY: cy - r - 8, depth: 0 }];\n\t}\n\n\tif (sets.length === 2) {\n\t\treturn sets.map((s, i) => {\n\t\t\tconst dx = i === 0 ? -sep : sep;\n\t\t\treturn {\n\t\t\t\tset: s,\n\t\t\t\tcx: cx + dx,\n\t\t\t\tcy,\n\t\t\t\tr,\n\t\t\t\tlabelX: cx + dx + (i === 0 ? -r * 0.6 : r * 0.6),\n\t\t\t\tlabelY: cy - r - 8,\n\t\t\t\tdepth: i,\n\t\t\t};\n\t\t});\n\t}\n\n\t// 3 sets — equilateral triangle of centers (60° apart). Bottom-left,\n\t// bottom-right, top. Label position pushes outward along the radial\n\t// direction from the centroid so labels don't overlap the circles.\n\tconst verticalOffset = sep * 0.866; // sin(60°)\n\tconst triangle: Array<{ dx: number; dy: number }> = [\n\t\t{ dx: -sep, dy: verticalOffset }, // bottom-left\n\t\t{ dx: sep, dy: verticalOffset }, // bottom-right\n\t\t{ dx: 0, dy: -verticalOffset }, // top\n\t];\n\tconst LABEL_PUSH = 1.7;\n\tconst TOP_LABEL_NUDGE = -8; // top label sits above its circle; pull up\n\tconst BOTTOM_LABEL_NUDGE = 16; // bottom labels sit below; push down\n\treturn sets.map((s, i) => {\n\t\tconst { dx, dy } = triangle[i] ?? triangle[0];\n\t\tconst isTop = i === 2;\n\t\treturn {\n\t\t\tset: s,\n\t\t\tcx: cx + dx,\n\t\t\tcy: cy + dy,\n\t\t\tr,\n\t\t\tlabelX: cx + dx * LABEL_PUSH,\n\t\t\tlabelY: cy + dy * LABEL_PUSH + (isTop ? TOP_LABEL_NUDGE : BOTTOM_LABEL_NUDGE),\n\t\t\tdepth: i,\n\t\t};\n\t});\n}\n\nfunction activateOnKey(e: React.KeyboardEvent, fn: () => void): void {\n\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\te.preventDefault();\n\t\tfn();\n\t}\n}\n\nexport { Venn };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hex-core/components",
3
- "version": "1.8.1",
3
+ "version": "1.10.0",
4
4
  "description": "AI-native React components for Hex Core — Radix UI + Tailwind CSS with machine-readable schemas. RSC-aware per-component bundles + tree-shakable.",
5
5
  "keywords": [
6
6
  "react",
@@ -81,9 +81,13 @@
81
81
  "@radix-ui/react-tooltip": "^1.2.8",
82
82
  "class-variance-authority": "^0.7.0",
83
83
  "clsx": "^2.1.0",
84
+ "react-markdown": "^10.1.0",
85
+ "rehype-raw": "^7.0.0",
86
+ "rehype-sanitize": "^6.0.0",
87
+ "remark-gfm": "^4.0.1",
84
88
  "shiki": "^4.0.2",
85
- "streamdown": "^2.5.0",
86
- "tailwind-merge": "^3.5.0"
89
+ "tailwind-merge": "^3.5.0",
90
+ "unist-util-visit": "^5.1.0"
87
91
  },
88
92
  "devDependencies": {
89
93
  "@microsoft/api-extractor": "^7.58.7",
@@ -92,6 +96,7 @@
92
96
  "@types/d3-hierarchy": "^3.1.7",
93
97
  "@types/d3-sankey": "^0.12.4",
94
98
  "@types/d3-shape": "^3.1.6",
99
+ "@types/mdast": "^4.0.4",
95
100
  "@types/react": "^19.0.0",
96
101
  "@types/react-dom": "^19.0.0",
97
102
  "@xterm/xterm": "^5.5.0",
@@ -113,7 +118,7 @@
113
118
  "typescript": "^6.0.3",
114
119
  "vaul": "^1.1.2",
115
120
  "wavesurfer.js": "^7.8.0",
116
- "@hex-core/registry": "^0.3.5"
121
+ "@hex-core/registry": "^0.4.0"
117
122
  },
118
123
  "peerDependencies": {
119
124
  "@hex-core/registry": "*",