@cloudvoyant/vortex-ui 0.17.0-rc.202609040136.45c8986

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 (61) hide show
  1. package/dist/index.cjs +1675 -0
  2. package/dist/index.d.cts +723 -0
  3. package/dist/index.d.ts +723 -0
  4. package/dist/index.js +1383 -0
  5. package/package.json +67 -0
  6. package/src/components.css +36 -0
  7. package/src/theme.css +189 -0
  8. package/src/themes/amber-minimal.css +83 -0
  9. package/src/themes/amethyst-haze.css +83 -0
  10. package/src/themes/anthropic.css +60 -0
  11. package/src/themes/anyscale.css +73 -0
  12. package/src/themes/bold-tech.css +82 -0
  13. package/src/themes/bubblegum.css +85 -0
  14. package/src/themes/caffeine.css +73 -0
  15. package/src/themes/candyland.css +75 -0
  16. package/src/themes/catppuccin.css +81 -0
  17. package/src/themes/claude.css +81 -0
  18. package/src/themes/claymorphism.css +83 -0
  19. package/src/themes/clean-slate.css +82 -0
  20. package/src/themes/cosmic-night.css +82 -0
  21. package/src/themes/cyberpunk.css +81 -0
  22. package/src/themes/darkmatter.css +84 -0
  23. package/src/themes/default.css +62 -0
  24. package/src/themes/doom-64.css +95 -0
  25. package/src/themes/elegant-luxury.css +82 -0
  26. package/src/themes/graphite.css +59 -0
  27. package/src/themes/green.css +57 -0
  28. package/src/themes/kodama-grove.css +81 -0
  29. package/src/themes/lambda.css +63 -0
  30. package/src/themes/mdbook.css +108 -0
  31. package/src/themes/midnight-bloom.css +82 -0
  32. package/src/themes/mocha-mousse.css +82 -0
  33. package/src/themes/modern-minimal.css +76 -0
  34. package/src/themes/mono.css +81 -0
  35. package/src/themes/nature.css +76 -0
  36. package/src/themes/neo-brutalism.css +81 -0
  37. package/src/themes/northern-lights.css +76 -0
  38. package/src/themes/notebook.css +95 -0
  39. package/src/themes/ocean-breeze.css +82 -0
  40. package/src/themes/openai.css +59 -0
  41. package/src/themes/pastel-dreams.css +82 -0
  42. package/src/themes/perpetuity.css +91 -0
  43. package/src/themes/quantum-rose.css +85 -0
  44. package/src/themes/retro-arcade.css +81 -0
  45. package/src/themes/rose.css +57 -0
  46. package/src/themes/sage-garden.css +84 -0
  47. package/src/themes/slate.css +57 -0
  48. package/src/themes/soft-pop.css +95 -0
  49. package/src/themes/solar-dusk.css +83 -0
  50. package/src/themes/starry-night.css +74 -0
  51. package/src/themes/sunset-horizon.css +82 -0
  52. package/src/themes/supabase.css +83 -0
  53. package/src/themes/t3-chat.css +72 -0
  54. package/src/themes/tangerine.css +81 -0
  55. package/src/themes/twitter.css +82 -0
  56. package/src/themes/vercel.css +85 -0
  57. package/src/themes/vintage-paper.css +82 -0
  58. package/src/themes/violet-bloom.css +95 -0
  59. package/src/themes/vitepress.css +60 -0
  60. package/src/themes/vortex-ui.css +88 -0
  61. package/src/themes.css +4184 -0
@@ -0,0 +1,723 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ import { ClassValue } from 'clsx';
4
+ import * as ManimWeb from 'manim-web';
5
+ import { DomChartDefinition } from '@tanstack/charts';
6
+
7
+ declare const buttonVariants: (props?: ({
8
+ variant?: "solid" | "outline" | "text" | null | undefined;
9
+ color?: "primary" | "secondary" | "success" | "danger" | "warn" | "info" | null | undefined;
10
+ size?: "sm" | "md" | "lg" | "icon" | null | undefined;
11
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
12
+ type ButtonVariants = VariantProps<typeof buttonVariants>;
13
+ interface ButtonProps {
14
+ variant?: ButtonVariants['variant'];
15
+ color?: ButtonVariants['color'];
16
+ size?: ButtonVariants['size'];
17
+ className?: string;
18
+ }
19
+
20
+ declare const toggleButtonVariants: (props?: ({
21
+ variant?: "outline" | "default" | null | undefined;
22
+ size?: "sm" | "lg" | "default" | null | undefined;
23
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
24
+ type ToggleButtonVariants = VariantProps<typeof toggleButtonVariants>;
25
+ interface ToggleButtonProps {
26
+ variant?: ToggleButtonVariants['variant'];
27
+ size?: ToggleButtonVariants['size'];
28
+ className?: string;
29
+ }
30
+
31
+ declare const tooltipPositionerBase = "z-50 [--z-index:50]!";
32
+ declare const tooltipArrowBase = "[--arrow-size:0.5rem] [--arrow-background:var(--color-popover)] z-[60]! [--arrow-size-half:calc(var(--arrow-size)/2_+_1px)]!";
33
+ declare const tooltipContentBase = "relative z-50 max-w-xs rounded-md border bg-popover px-3 py-1.5 text-xs text-popover-foreground shadow-md outline-none";
34
+
35
+ declare const popoverPositionerBase = "z-50 [--z-index:50]!";
36
+ declare const popoverArrowBase = "[--arrow-size:0.5rem] [--arrow-background:var(--color-popover)] z-[60]! [--arrow-size-half:calc(var(--arrow-size)/2_+_1px)]!";
37
+ declare const popoverContentBase = "relative z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none";
38
+ declare const popoverTitleBase = "text-sm font-semibold leading-none";
39
+ declare const popoverDescriptionBase = "text-sm text-muted-foreground";
40
+ declare const popoverCloseTriggerBase = "absolute end-3.5 top-3.5 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-[3px] focus:ring-ring/30 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0";
41
+ declare const popoverIndicatorBase = "transition-transform data-[state=open]:rotate-180";
42
+
43
+ declare const dialogBackdropBase = "bg-black/50";
44
+ declare const dialogPositionerBase = "fixed inset-0 z-50 [--z-index:50]! flex items-start justify-center overflow-y-auto p-4";
45
+ declare const dialogContentBase = "relative z-50 my-auto grid w-full max-w-lg gap-4 border bg-background p-6 shadow-lg sm:rounded-lg outline-none";
46
+ declare const dialogTitleBase = "text-lg font-semibold leading-none tracking-tight";
47
+ declare const dialogDescriptionBase = "text-sm text-muted-foreground";
48
+ declare const dialogHeaderBase = "flex flex-col gap-2";
49
+ declare const dialogFooterBase = "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end";
50
+ declare const dialogHeaderStickyBase = "sticky top-0 z-10 bg-background";
51
+ declare const dialogFooterStickyBase = "sticky bottom-0 z-10 bg-background";
52
+ declare const dialogFullscreenContentBase = "h-dvh w-full max-w-none rounded-none border-0 p-0 sm:rounded-none";
53
+ declare const dialogCloseTriggerBase = "absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-[3px] focus:ring-ring/30 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0";
54
+
55
+ declare const windowPositionerBase = "z-50 [--z-index:50]!";
56
+ declare const windowContentBase = "relative z-50 flex w-80 flex-col overflow-hidden rounded-lg border bg-popover text-popover-foreground shadow-lg";
57
+ declare const windowDragTriggerBase = "flex flex-col";
58
+ declare const windowHeaderBase = "flex cursor-move items-center justify-between gap-2 border-b px-4 py-2.5";
59
+ declare const windowTitleBase = "text-sm font-semibold leading-none";
60
+ declare const windowControlBase = "flex items-center gap-1";
61
+ declare const windowStageTriggerBase = "inline-flex size-6 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus:ring-[3px] focus:ring-ring/30 [&_svg]:size-3.5 [&_svg]:shrink-0";
62
+ declare const windowCloseTriggerBase = "inline-flex size-6 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus:ring-[3px] focus:ring-ring/30 [&_svg]:size-3.5 [&_svg]:shrink-0";
63
+ declare const windowBodyBase = "flex flex-1 flex-col gap-4 overflow-auto p-4 text-sm";
64
+ declare const windowResizeTriggerBase = "absolute bottom-0 right-0 size-4 cursor-se-resize";
65
+
66
+ declare const badgeVariants: (props?: ({
67
+ variant?: "solid" | "outline" | "subtle" | "surface" | "plain" | null | undefined;
68
+ color?: "primary" | "secondary" | "success" | "danger" | "warn" | "info" | null | undefined;
69
+ size?: "sm" | "md" | "lg" | "xs" | null | undefined;
70
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
71
+ type BadgeVariants = VariantProps<typeof badgeVariants>;
72
+ interface BadgeProps {
73
+ variant?: BadgeVariants['variant'];
74
+ color?: BadgeVariants['color'];
75
+ size?: BadgeVariants['size'];
76
+ className?: string;
77
+ }
78
+
79
+ declare const containerBase = "relative mx-auto w-full max-w-[90rem] px-4 md:px-6 lg:px-8";
80
+ declare const rowBase = "flex flex-row";
81
+ declare const colBase = "flex flex-col";
82
+ declare const stackBase = "flex flex-col gap-1";
83
+ declare const hstackBase = "flex flex-row gap-1";
84
+ declare const vstackBase = "flex flex-col gap-1";
85
+ declare const centerBase = "flex items-center justify-center";
86
+
87
+ declare const itemVariants: (props?: ({
88
+ variant?: "surface" | "plain" | null | undefined;
89
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
90
+ type ItemVariants = VariantProps<typeof itemVariants>;
91
+ interface ItemProps {
92
+ variant?: ItemVariants['variant'];
93
+ className?: string;
94
+ }
95
+
96
+ declare const cardVariants: (props?: ({
97
+ variant?: "outline" | "subtle" | "elevated" | null | undefined;
98
+ size?: "sm" | "md" | "lg" | null | undefined;
99
+ orientation?: "vertical" | "horizontal" | null | undefined;
100
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
101
+ type CardVariants = VariantProps<typeof cardVariants>;
102
+ interface CardProps {
103
+ variant?: CardVariants['variant'];
104
+ size?: CardVariants['size'];
105
+ orientation?: CardVariants['orientation'];
106
+ className?: string;
107
+ }
108
+ declare const cardCoverVariants: (props?: ({
109
+ variant?: "flush" | "inset" | null | undefined;
110
+ orientation?: "vertical" | "horizontal" | null | undefined;
111
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
112
+ type CardCoverVariants = VariantProps<typeof cardCoverVariants>;
113
+ interface CardCoverProps {
114
+ variant?: CardCoverVariants['variant'];
115
+ orientation?: CardCoverVariants['orientation'];
116
+ className?: string;
117
+ }
118
+ declare const cardHeaderBase = "flex flex-col gap-1";
119
+ declare const cardBodyBase = "";
120
+ declare const cardFooterBase = "flex items-center gap-2";
121
+ declare const cardTitleBase = "font-semibold leading-tight";
122
+ declare const cardDescriptionBase = "text-sm text-muted-foreground";
123
+
124
+ declare const scrollRootBase = "relative flex h-full w-full flex-col overflow-hidden [--scrollbar-size:0.5rem] [--scrollbar-margin:2px]";
125
+ declare const scrollViewportBase = "flex h-full w-full flex-col rounded-[inherit] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
126
+ declare const scrollContentBase = "min-w-full";
127
+ declare const scrollScrollbarBase = "relative m-[var(--scrollbar-margin)] flex touch-none select-none rounded-full bg-border/10 opacity-0 transition-opacity duration-150 data-[hover]:opacity-100 data-[scrolling]:opacity-100 data-[orientation=vertical]:w-[var(--scrollbar-size)] data-[orientation=vertical]:flex-col data-[orientation=horizontal]:h-[var(--scrollbar-size)] data-[orientation=horizontal]:flex-row [&:not([data-overflow-x],[data-overflow-y])]:hidden";
128
+ declare const scrollThumbBase = "rounded-[inherit] bg-border/40 transition-colors data-[orientation=vertical]:w-full data-[orientation=horizontal]:h-full";
129
+ declare const scrollCornerBase = "m-[var(--scrollbar-margin)] bg-muted opacity-0 transition-opacity duration-150 data-[hover]:opacity-100";
130
+
131
+ declare const pageVariants: (props?: ({
132
+ variant?: "default" | "landing" | null | undefined;
133
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
134
+ declare const pageGutterAreaBase = "h-full min-w-0 [grid-area:left]";
135
+ declare const pageGutterVariants: (props?: ({
136
+ side?: "left" | "right" | null | undefined;
137
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
138
+ declare const pageGutterContentVariants: (props?: ({
139
+ align?: "start" | "center" | "end" | null | undefined;
140
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
141
+ declare const pageContentBase = "min-w-0 [grid-area:content]";
142
+ declare const pageFooterBase = "w-full shrink-0 [grid-area:footer]";
143
+ declare const pageSectionBase: string;
144
+ type PageVariants = VariantProps<typeof pageVariants>;
145
+ type PageGutterVariants = VariantProps<typeof pageGutterVariants>;
146
+ type PageGutterContentVariants = VariantProps<typeof pageGutterContentVariants>;
147
+
148
+ /**
149
+ * Intentionally empty: Ark UI sets `display`/`flex-direction` on the root and
150
+ * the panel's `height`/`width: 100%`, `overflow`, and flex sizing inline.
151
+ * Exported so React/Svelte wrappers share one class-merge call site; consumers
152
+ * should pass overrides through `className` rather than reference this constant.
153
+ */
154
+ declare const splitterRootBase = "";
155
+ /**
156
+ * Intentionally empty, for the same reason as {@link splitterRootBase}: Ark UI
157
+ * owns the panel's box model. Kept exported to mirror `splitterRootBase`.
158
+ */
159
+ declare const splitterPanelBase = "";
160
+ declare const splitterResizeTriggerBase = "group relative grid place-items-center outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 data-[orientation=horizontal]:-mx-1 data-[orientation=horizontal]:min-w-2 data-[orientation=vertical]:-my-1 data-[orientation=vertical]:min-h-2";
161
+ declare const splitterResizeTriggerSeparatorBase = "absolute bg-border group-data-[orientation=horizontal]:inset-y-0 group-data-[orientation=horizontal]:right-1 group-data-[orientation=horizontal]:w-px group-data-[orientation=vertical]:inset-x-0 group-data-[orientation=vertical]:bottom-1 group-data-[orientation=vertical]:h-px";
162
+ declare const splitterResizeTriggerIndicatorBase = "relative z-10 rounded-full border border-border bg-muted shadow-xs data-[dragging]:bg-muted-foreground data-[focus]:bg-accent data-[disabled]:hidden data-[orientation=horizontal]:h-6 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-6";
163
+
164
+ declare const SIDEBAR_WIDTH = "16rem";
165
+ declare const SIDEBAR_WIDTH_MOBILE = "18rem";
166
+ declare const SIDEBAR_WIDTH_ICON = "3rem";
167
+ declare const SIDEBAR_KEYBOARD_SHORTCUT = "b";
168
+ declare const sidebarMenuButtonVariants: (props?: ({
169
+ variant?: "outline" | "default" | null | undefined;
170
+ size?: "sm" | "lg" | "default" | null | undefined;
171
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
172
+ type SidebarMenuButtonVariants = VariantProps<typeof sidebarMenuButtonVariants>;
173
+ interface SidebarContextProps {
174
+ state: 'expanded' | 'collapsed';
175
+ open: boolean;
176
+ setOpen: (open: boolean) => void;
177
+ openMobile: boolean;
178
+ setOpenMobile: (open: boolean) => void;
179
+ isMobile: boolean;
180
+ toggleSidebar: () => void;
181
+ }
182
+ declare const sidebarStyles: {
183
+ readonly wrapperClass: "group/sidebar-wrapper min-h-svh w-full has-data-[variant=inset]:bg-sidebar";
184
+ readonly containerClass: "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex";
185
+ readonly gapClass: "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear group-data-[collapsible=offcanvas]:w-0";
186
+ readonly innerClass: "flex h-full w-full flex-col bg-sidebar data-[variant=floating]:rounded-lg data-[variant=floating]:border data-[variant=floating]:border-sidebar-border data-[variant=floating]:shadow-sm";
187
+ readonly headerClass: "gap-2 p-2";
188
+ readonly footerClass: "gap-2 p-2";
189
+ readonly separatorClass: "mx-2 w-auto bg-sidebar-border";
190
+ readonly contentClass: "min-h-0 flex-1 gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden";
191
+ readonly groupClass: "relative w-full min-w-0 p-2";
192
+ readonly groupLabelClass: "flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0 group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0";
193
+ readonly groupActionClass: "absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden";
194
+ readonly groupContentClass: "w-full text-sm";
195
+ readonly menuClass: "flex w-full min-w-0 flex-col gap-1";
196
+ readonly menuItemClass: "group/menu-item relative";
197
+ readonly menuActionClass: "absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 group-data-[collapsible=icon]:hidden";
198
+ readonly menuBadgeClass: "pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 group-data-[collapsible=icon]:hidden";
199
+ readonly menuSkeletonClass: "flex h-8 items-center gap-2 rounded-md px-2";
200
+ readonly menuSubClass: "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden";
201
+ readonly menuSubItemClass: "group/menu-sub-item relative";
202
+ readonly menuSubButtonClass: "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-[size=sm]:text-xs data-[size=md]:text-sm group-data-[collapsible=icon]:hidden";
203
+ readonly triggerClass: "flex size-7 shrink-0 items-center justify-center rounded-md text-sidebar-foreground ring-sidebar-ring outline-hidden transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0";
204
+ readonly railClass: "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[side=left]:cursor-w-resize group-data-[side=right]:cursor-e-resize [[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize [[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=right][data-collapsible=offcanvas]_&]:-left-2";
205
+ readonly insetClass: "relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2";
206
+ readonly inputClass: "h-8 w-full bg-background shadow-none";
207
+ readonly tooltipContentClass: "z-50 w-auto rounded-md bg-sidebar-primary px-2 py-1.5 text-xs text-sidebar-primary-foreground";
208
+ };
209
+
210
+ declare const navbarMenuRootBase = "group/nav-menu relative flex max-w-max flex-1 items-center justify-center";
211
+ declare const navbarMenuListBase = "group flex flex-1 list-none items-center justify-center gap-1";
212
+ declare const navbarMenuItemBase = "relative";
213
+ type NavbarMenuDensity = 'relaxed' | 'compact';
214
+ type NavbarMenuVariant = 'default' | 'link';
215
+ declare const navbarMenuTriggerStyle: (props?: ({
216
+ density?: "relaxed" | "compact" | null | undefined;
217
+ variant?: "default" | "link" | null | undefined;
218
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
219
+ declare const navbarMenuContentBase = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95 left-0 top-0 w-full min-w-44 bg-popover p-2 text-popover-foreground md:absolute md:w-auto";
220
+ declare const navbarMenuLinkBase = "data-[active=true]:bg-accent data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring";
221
+ declare const navbarMobileMenuContentBase = "flex flex-col gap-1 py-1";
222
+ declare const navbarMobileMenuTriggerBase = "flex w-full items-center justify-between rounded-md px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
223
+ declare const navbarMenuViewportPositionerBase = "absolute left-0 top-full z-50 w-full";
224
+ declare const navbarMenuViewportBase = "absolute left-(--viewport-x) top-0 mt-1.5 h-(--viewport-height) w-(--viewport-width) overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md transition-[width,height] duration-200";
225
+ declare const navbarMenuIndicatorBase = "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-50 flex h-1.5 items-end justify-center overflow-hidden";
226
+
227
+ declare const tabsRootBase = "flex flex-col gap-2 data-[orientation=vertical]:flex-row";
228
+ declare const tabsListBase = "relative z-0 flex w-fit items-center justify-center gap-x-0.5 text-muted-foreground data-[orientation=vertical]:flex-col";
229
+ declare const tabsListVariants: (props?: ({
230
+ variant?: "default" | "underline" | null | undefined;
231
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
232
+ declare const tabsIndicatorBase = "absolute inset-x-0 bottom-0 h-(--height) w-(--width) transition-[width,translate] duration-200 ease-in-out motion-reduce:transition-none";
233
+ declare const tabsIndicatorVariants: (props?: ({
234
+ variant?: "default" | "underline" | null | undefined;
235
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
236
+ declare const tabsTriggerBase = "relative flex h-9 shrink-0 grow items-center justify-center gap-1.5 rounded-lg border border-transparent px-[calc(--spacing(2.5)-1px)] text-sm font-medium whitespace-nowrap transition-[color,background-color,box-shadow] data-[orientation=vertical]:w-full data-[orientation=vertical]:justify-start hover:text-foreground/72 aria-selected:text-foreground outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-ring/30 data-disabled:pointer-events-none data-disabled:opacity-50 motion-reduce:transition-none sm:h-8 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0";
237
+ declare const tabsContentBase = "flex-1 outline-none";
238
+ type TabsListVariants = VariantProps<typeof tabsListVariants>;
239
+ type TabsIndicatorVariants = VariantProps<typeof tabsIndicatorVariants>;
240
+
241
+ declare const paginationRootBase = "mx-auto flex w-full justify-center gap-1";
242
+ declare const paginationTriggerBase = "inline-flex h-9 items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 text-sm font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0";
243
+ declare const paginationItemBase = "inline-flex h-9 min-w-9 items-center justify-center whitespace-nowrap rounded-md px-3 text-sm font-medium tabular-nums text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[selected]:bg-accent data-[selected]:text-accent-foreground";
244
+ declare const paginationEllipsisBase = "flex h-8 w-12 items-end justify-center text-muted-foreground pointer-events-none select-none [&_svg]:size-4";
245
+
246
+ type NavbarVariant = 'scroll' | 'sticky' | 'shrink' | 'hide';
247
+ type NavbarDensity = 'relaxed' | 'compact';
248
+ declare const navbarVariants: (props?: ({
249
+ variant?: "scroll" | "sticky" | "shrink" | "hide" | null | undefined;
250
+ floating?: boolean | null | undefined;
251
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
252
+ declare const navbarContainerBase = "flex items-center justify-between transition-[height,gap,padding] duration-300";
253
+ declare const navbarDensityVariants: (props?: ({
254
+ density?: "relaxed" | "compact" | null | undefined;
255
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
256
+ declare const navbarShrunkBase = "h-12";
257
+ declare const navbarBrandBase = "flex shrink-0 items-center gap-2";
258
+ declare const navbarMenuBase = "hidden items-center md:flex";
259
+ declare const navbarMenuPlacementVariants: (props?: ({
260
+ placement?: "left" | "right" | "center" | null | undefined;
261
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
262
+ declare const navbarActionsBase = "ml-auto hidden items-center gap-2 md:flex";
263
+ declare const navbarTriggerVariants: (props?: ({
264
+ floating?: boolean | null | undefined;
265
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
266
+ declare const navbarMobileBase = "md:hidden";
267
+ declare const navbarActivationAreaBase = "fixed inset-x-0 top-0 z-40 h-12";
268
+ declare const navbarMobileContentBase = "flex h-full flex-col bg-background";
269
+ declare const navbarMobileHeaderBase = "flex items-center justify-between gap-2 px-4 py-3";
270
+ declare const navbarMobileMenuBase = "flex flex-1 flex-col gap-1 overflow-y-auto px-4 py-2";
271
+ declare const navbarMobileActionsBase = "flex items-center gap-2 border-t border-border px-4 py-4";
272
+
273
+ interface ThemeMeta {
274
+ name: string;
275
+ label: string;
276
+ }
277
+ declare const THEMES: ThemeMeta[];
278
+ declare const THEME_NAMES: string[];
279
+
280
+ declare function cn(...inputs: ClassValue[]): string;
281
+
282
+ declare const fieldRootBase = "flex w-full flex-col gap-2 data-invalid:text-destructive";
283
+ declare const fieldLabelBase = "flex w-fit select-none items-center gap-1 text-sm font-medium leading-none text-foreground";
284
+ declare const fieldHelperBase = "text-sm text-muted-foreground";
285
+ declare const fieldErrorBase = "text-sm text-destructive";
286
+ declare const fieldRequiredIndicatorBase = "text-destructive";
287
+ declare const fieldsetRootBase = "flex flex-col gap-6";
288
+ declare const fieldsetLegendBase = "mb-3 text-base font-medium";
289
+ declare const fieldsetHelperBase = "text-sm text-muted-foreground";
290
+ declare const fieldsetErrorBase = "text-sm text-destructive";
291
+
292
+ declare const inputVariants: (props?: ({
293
+ size?: "sm" | "md" | "lg" | null | undefined;
294
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
295
+ type InputVariants = VariantProps<typeof inputVariants>;
296
+ interface InputProps {
297
+ size?: InputVariants['size'];
298
+ className?: string;
299
+ }
300
+
301
+ declare const textareaBase = "field-sizing-content flex min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/30 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/24 data-invalid:border-destructive data-invalid:ring-[3px] data-invalid:ring-destructive/24";
302
+ interface TextareaProps {
303
+ className?: string;
304
+ }
305
+
306
+ declare const numberInputRootBase = "flex w-full flex-col items-start gap-2";
307
+ declare const numberInputControlBase = "flex w-full items-center justify-between rounded-md border border-input bg-transparent shadow-xs transition-[box-shadow] outline-none focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/24 data-invalid:border-destructive data-invalid:ring-[3px] data-invalid:ring-destructive/24";
308
+ declare const numberInputInputBase = "h-9 w-full min-w-0 flex-1 border-0 bg-transparent px-3 text-center text-sm tabular-nums shadow-none outline-none ring-0 focus-visible:ring-0 disabled:cursor-not-allowed disabled:opacity-50";
309
+ declare const numberInputTriggerBase = "flex size-9 shrink-0 items-center justify-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0";
310
+ interface NumberInputProps {
311
+ className?: string;
312
+ }
313
+
314
+ declare const checkboxVariants: (props?: ({
315
+ size?: "sm" | "md" | "lg" | null | undefined;
316
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
317
+ type CheckboxVariants = VariantProps<typeof checkboxVariants>;
318
+ interface CheckboxProps {
319
+ size?: CheckboxVariants['size'];
320
+ className?: string;
321
+ }
322
+ declare const checkboxIndicatorBase = "flex size-full items-center justify-center text-primary-foreground data-[state=unchecked]:hidden [&_svg]:pointer-events-none [&_svg]:size-3 [&_svg]:shrink-0";
323
+ declare const checkboxLabelBase = "select-none text-sm font-medium leading-none";
324
+ declare const checkboxGroupBase = "flex flex-col gap-2";
325
+
326
+ declare const switchVariants: (props?: ({
327
+ size?: "sm" | "md" | "lg" | null | undefined;
328
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
329
+ type SwitchVariants = VariantProps<typeof switchVariants>;
330
+ interface SwitchProps {
331
+ size?: SwitchVariants['size'];
332
+ className?: string;
333
+ }
334
+ declare const switchControlBase = "flex size-full items-center";
335
+ declare const switchThumbBase = "pointer-events-none block aspect-square h-full w-auto rounded-full bg-background shadow-sm transition-transform data-[state=checked]:translate-x-[calc(100%-1px)] data-[state=unchecked]:translate-x-0 dark:data-[state=unchecked]:bg-foreground";
336
+ declare const switchLabelBase = "select-none text-sm font-medium leading-none";
337
+
338
+ interface SelectItemData {
339
+ value: string;
340
+ label: string;
341
+ disabled?: boolean;
342
+ }
343
+ declare const selectTriggerBase = "flex w-fit cursor-default items-center gap-2 whitespace-nowrap data-[placeholder-shown]:text-muted-foreground data-[state=open]:border-ring data-[state=open]:ring-[3px] data-[state=open]:ring-ring/30 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground";
344
+ declare const selectValueBase = "flex min-w-0 items-center gap-2 truncate";
345
+ declare const selectIndicatorBase = "flex items-center justify-center text-muted-foreground";
346
+ declare const selectClearTriggerBase = "flex items-center justify-center text-muted-foreground opacity-60 transition-opacity hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none [&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0";
347
+ declare const selectPositionerBase = "z-50 [--z-index:50]!";
348
+ declare const selectContentBase = "relative z-50 max-h-96 min-w-(--reference-width) overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-none";
349
+ declare const selectItemGroupLabelBase = "px-2 py-1.5 text-xs font-semibold text-muted-foreground";
350
+ declare const selectItemBase = "relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 pe-8 text-sm outline-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground";
351
+ declare const selectItemTextBase = "flex w-full flex-1 items-center gap-2";
352
+ declare const selectItemIndicatorBase = "absolute inset-y-0 end-2 flex items-center justify-center text-foreground";
353
+ declare const nativeSelectVariants: (props?: ({
354
+ size?: "sm" | "md" | "lg" | null | undefined;
355
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
356
+ type NativeSelectVariants = VariantProps<typeof nativeSelectVariants>;
357
+ declare const nativeSelectWrapperBase = "relative w-fit [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground";
358
+ declare const nativeSelectIconBase = "pointer-events-none absolute inset-y-0 end-2.5 flex items-center justify-center text-muted-foreground";
359
+ interface SelectProps {
360
+ className?: string;
361
+ }
362
+
363
+ declare const comboboxControlBase = "relative flex w-full flex-wrap items-center gap-1";
364
+ declare const comboboxInputBase = "pe-8";
365
+ declare const comboboxTriggerBase = "absolute inset-y-0 end-1 flex w-8 items-center justify-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0";
366
+ declare const comboboxClearTriggerBase = "absolute inset-y-0 end-9 flex items-center justify-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none [&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0";
367
+ declare const comboboxPositionerBase = "z-50 [--z-index:50]!";
368
+ declare const comboboxContentBase = "relative z-50 max-h-96 min-w-48 overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-none";
369
+ declare const comboboxItemGroupLabelBase = "px-2 py-1.5 text-xs font-semibold text-muted-foreground";
370
+ declare const comboboxItemVariants: (props?: ({
371
+ showIndicator?: boolean | null | undefined;
372
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
373
+ type ComboboxItemVariants = VariantProps<typeof comboboxItemVariants>;
374
+ declare const comboboxItemIndicatorBase = "absolute inset-y-0 end-2 flex items-center justify-center text-foreground";
375
+ declare const comboboxListBase = "flex flex-col";
376
+ declare const comboboxEmptyBase = "px-2 py-1.5 text-center text-sm text-muted-foreground";
377
+ interface ComboboxProps {
378
+ className?: string;
379
+ }
380
+
381
+ declare const tagsInputRootBase = "flex w-full flex-col gap-2";
382
+ declare const tagsInputControlBase = "flex w-full flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent p-1.5 shadow-xs transition-[box-shadow] outline-none focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/30 data-invalid:border-destructive data-invalid:ring-[3px] data-invalid:ring-destructive/24 data-disabled:pointer-events-none data-disabled:opacity-50";
383
+ declare const tagsInputInputBase = "min-w-12 flex-1 border-0 bg-transparent px-1 text-sm outline-none ring-0 placeholder:text-muted-foreground focus-visible:ring-0";
384
+ declare const tagsInputItemBase = "inline-flex h-6 max-w-full shrink-0 items-center gap-1 rounded-md border bg-secondary px-1.5 text-xs text-secondary-foreground outline-none data-[highlighted]:border-primary/30 data-[highlighted]:bg-primary/10";
385
+ declare const tagsInputItemTextBase = "truncate";
386
+ declare const tagsInputItemInputBase = "w-16 border-0 bg-transparent text-xs outline-none";
387
+ declare const tagsInputItemDeleteTriggerBase = "flex size-4 shrink-0 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none [&_svg]:pointer-events-none [&_svg]:size-3 [&_svg]:shrink-0";
388
+ declare const tagsInputClearTriggerBase = "ms-auto flex shrink-0 items-center justify-center self-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none [&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0";
389
+ interface TagsInputProps {
390
+ className?: string;
391
+ }
392
+
393
+ /** Root container: escapes prose margins, keeps wide diagrams scrollable. Height is driven by
394
+ * the diagram's own content (the SVG's natural size, or the prerendered `viewBox` `aspect-ratio`
395
+ * layered via inline style) — never a fixed minimum, so a short diagram is not left sitting in a
396
+ * taller empty container. */
397
+ declare const mermaidRootBase = "not-prose my-4 overflow-x-auto";
398
+ /** Placeholder `<pre>` showing the raw diagram source until (or instead of) rendering.
399
+ * No border or rounded corners — it must look identical to the rendered SVG. */
400
+ declare const mermaidSourceBase = "w-full overflow-x-auto bg-muted p-4 font-mono text-sm whitespace-pre";
401
+ /** Wrapper around the rendered SVG: centered both axes, scaled down to the container width. */
402
+ declare const mermaidSvgBase = "flex w-full items-center justify-center [&>svg]:max-w-full";
403
+ /** Loading state shown while the client-side mermaid render is in flight: a centered spinner +
404
+ * label. Chrome-free so it matches the rendered SVG. Reserves a minimum footprint (`min-h-40`)
405
+ * so the swap doesn't collapse the layout for short diagrams; the rendered SVG takes its natural
406
+ * height (root has no fixed minimum). */
407
+ declare const mermaidLoadingBase = "flex min-h-40 w-full items-center justify-center gap-3";
408
+ /** Props shared by the React and Svelte Mermaid wrappers; framework wrappers intersect
409
+ * these with their host element's HTML attributes. */
410
+ interface MermaidProps {
411
+ /** Mermaid diagram source. */
412
+ code: string;
413
+ /** Pre-rendered SVG markup. When provided the component renders it immediately and never
414
+ * imports `mermaid` client-side — the server-side rendering path. The SVG should carry a
415
+ * `viewBox` so its aspect ratio can be reserved (no layout shift). */
416
+ svg?: string;
417
+ /** Extra classes for the root container. */
418
+ className?: string;
419
+ }
420
+ /** Resolves mermaid `themeVariables` from the shadcn CSS custom properties currently set
421
+ * on `<html>` (so the active color mode and any brand-theme overrides are picked up).
422
+ * Tokens that are undefined are omitted, leaving mermaid's own theme defaults in place. */
423
+ declare function resolveMermaidThemeVariables(): Record<string, string>;
424
+ /** Extracts the width/height ratio from an SVG `viewBox` (e.g. `0 0 800 450` → `800 / 450`).
425
+ * Used to reserve the diagram's aspect ratio on the root container so the client-rendered
426
+ * SVG swap never shifts the layout. Returns `undefined` when the SVG has no parseable viewBox. */
427
+ declare function mermaidSvgAspectRatio(svg: string): string | undefined;
428
+ /**
429
+ * Dynamically import mermaid and render `code` to an SVG string. The import stays
430
+ * client-only and lazy, so mermaid never enters the SSR/initial bundle.
431
+ *
432
+ * Diagrams render with `securityLevel: 'strict'` (mermaid sanitizes the output with
433
+ * DOMPurify and strips click bindings, so untrusted sources cannot execute scripts) and
434
+ * `suppressErrorRendering: true` (without it, mermaid appends a "Syntax error in text"
435
+ * SVG to `document.body` on every failed render). The render-id counter is module-scoped
436
+ * so concurrent renders from any number of components never collide.
437
+ */
438
+ declare function renderMermaidSource(code: string): Promise<string>;
439
+
440
+ /** Ghost icon-button styling for a copy trigger, reused by the code-block family. */
441
+ declare const clipboardTriggerBase = "inline-flex h-7 w-7 shrink-0 items-center justify-center gap-1.5 rounded-md text-xs text-muted-foreground transition-colors hover:bg-background hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&_svg]:size-3.5 [&_svg]:shrink-0";
442
+
443
+ declare const radioGroupRootBase = "flex flex-col gap-2";
444
+ declare const radioGroupItemControlBase = "relative inline-flex size-4 shrink-0 items-center justify-center rounded-full border border-input bg-transparent shadow-xs transition-shadow focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/30 focus-visible:ring-offset-1 focus-visible:ring-offset-background data-invalid:border-destructive data-invalid:ring-[3px] data-invalid:ring-destructive/24 data-[state=checked]:border-primary data-[state=checked]:text-primary disabled:pointer-events-none disabled:opacity-50";
445
+ declare const radioGroupItemTextBase = "select-none text-sm font-medium leading-none";
446
+
447
+ declare const noticeVariants: (props?: ({
448
+ variant?: "success" | "info" | "none" | "warning" | "error" | null | undefined;
449
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
450
+ type NoticeVariants = VariantProps<typeof noticeVariants>;
451
+ declare const noticeTitleBase = "col-start-2 min-h-4 font-semibold tracking-tight";
452
+ declare const noticeDescriptionBase = "col-start-2 text-sm text-foreground [&_p]:leading-relaxed";
453
+ interface NoticeProps {
454
+ variant?: NoticeVariants['variant'];
455
+ title?: string;
456
+ className?: string;
457
+ }
458
+
459
+ declare const figureRootBase = "not-prose my-4 flex flex-col items-center";
460
+ declare const figureImageBase = "rounded-lg border border-border";
461
+ declare const figureCaptionBase = "mt-2 text-center text-sm text-muted-foreground";
462
+ interface FigureProps {
463
+ src?: string;
464
+ alt?: string;
465
+ caption?: string;
466
+ className?: string;
467
+ }
468
+
469
+ declare const revealRootBase = "not-prose my-4 overflow-hidden rounded-lg border border-border bg-muted/40";
470
+ declare const revealTriggerBase = "flex w-full cursor-pointer items-center gap-2 px-3 py-2.5 text-sm font-semibold";
471
+ declare const revealChevronBase = "size-4 shrink-0 text-muted-foreground transition-transform duration-200 data-[state=open]:rotate-90";
472
+ declare const revealContentBase = "border-t border-border px-3 py-2.5 text-sm text-foreground";
473
+ interface RevealProps {
474
+ question: string;
475
+ className?: string;
476
+ }
477
+
478
+ declare const prevNextRootBase = "not-prose mt-8 flex flex-col gap-3 border-t border-border pt-6 sm:flex-row sm:justify-between";
479
+ declare const prevNextLinkBase = "group flex min-w-0 flex-1 flex-col rounded-lg border border-border px-4 py-3 no-underline transition-colors hover:border-primary";
480
+ declare const prevNextLinkNextBase = "items-end text-right";
481
+ declare const prevNextDirectionBase = "text-xs font-medium text-muted-foreground";
482
+ declare const prevNextTitleBase = "truncate text-sm font-medium text-foreground transition-colors group-hover:text-primary";
483
+ declare const prevNextSpacerBase = "flex-1";
484
+ interface PrevNextProps {
485
+ prev?: {
486
+ title: string;
487
+ href: string;
488
+ };
489
+ next?: {
490
+ title: string;
491
+ href: string;
492
+ };
493
+ className?: string;
494
+ }
495
+
496
+ declare const latexRootBase = "not-prose";
497
+ declare const latexDisplayBase = "my-4 block w-full overflow-x-auto py-1";
498
+ declare const latexInlineBase = "inline-block align-middle";
499
+ declare const latexErrorBase = "font-mono text-sm text-destructive";
500
+ interface LaTeXProps {
501
+ /** LaTeX source. */
502
+ latex: string;
503
+ /** Pre-rendered KaTeX HTML for the static/server path. When provided the component renders it
504
+ * immediately and never calls `katex` — a rehype-katex-style plugin can pass its output here. */
505
+ html?: string;
506
+ /** Extra classes for the root container. */
507
+ className?: string;
508
+ }
509
+ /**
510
+ * Render LaTeX to KaTeX HTML synchronously. `katex` is a hard dependency, so this works at
511
+ * build/SSR time (a rehype plugin or `renderToStaticMarkup` path) and on the client alike —
512
+ * no lazy import, no placeholder, no double render.
513
+ *
514
+ * `throwOnError` and `strict` are disabled so a malformed expression renders best-effort
515
+ * output instead of throwing.
516
+ */
517
+ declare function toLaTeX(latex: string, opts?: {
518
+ displayMode?: boolean;
519
+ }): string;
520
+
521
+ declare const codeBlockRootBase = "not-prose my-4 overflow-hidden rounded-lg border";
522
+ declare const codeBlockHeaderBase = "flex h-10 items-center justify-between gap-2 border-b bg-muted/50 px-4";
523
+ declare const codeBlockHeaderInfoBase = "flex min-w-0 items-center gap-2 text-muted-foreground";
524
+ declare const codeBlockTitleBase = "min-w-0 truncate font-mono text-xs";
525
+ declare const codeBlockBodyBase = "hx-cb relative overflow-x-auto bg-background";
526
+ declare const codeBlockBodyScrollableBase = "overflow-y-auto";
527
+ declare const codeBlockContentBase = "text-sm [&>pre]:p-4 [&_.line]:leading-[1.7]";
528
+ declare const codeBlockLineNumbersBase = "cbln";
529
+ declare const codeBlockHighlightBase = "cbhl";
530
+ declare const codeBlockLoadingBase = "flex h-16 items-center justify-center";
531
+ declare const codeBlockSpinnerBase = "h-4 w-4 animate-spin rounded-full border-2 border-muted-foreground border-t-transparent";
532
+ /** Floating copy button anchored to the code body's top-right corner (multi-language block). */
533
+ declare const codeBlockCopyFloatBase = "absolute right-2 top-2";
534
+ interface FileEntry {
535
+ filename: string;
536
+ code: string;
537
+ language?: string;
538
+ /** Pre-rendered shiki HTML for the static/server path. */
539
+ html?: string;
540
+ }
541
+ interface LanguageTab {
542
+ label: string;
543
+ filename: string;
544
+ code: string;
545
+ language?: string;
546
+ /** Pre-rendered shiki HTML for the static/server path. */
547
+ html?: string;
548
+ }
549
+ interface CodeBlockProps {
550
+ code: string;
551
+ /** Shiki language id (default `tsx`). */
552
+ language?: string;
553
+ filename?: string;
554
+ /** Pre-rendered shiki HTML for the static/server path. */
555
+ html?: string;
556
+ showLineNumbers?: boolean;
557
+ scrollable?: boolean;
558
+ maxHeight?: number;
559
+ /** 1-based line numbers to highlight. */
560
+ highlightLines?: number[];
561
+ className?: string;
562
+ }
563
+ declare function injectCodeBlockStyles(): void;
564
+ /**
565
+ * Dynamically import shiki and highlight `code` to an HTML string. The import stays
566
+ * client-only and lazy, so shiki never enters the SSR/initial bundle. Unknown languages
567
+ * or any highlight failure fall back to escaped plaintext — never throws.
568
+ */
569
+ declare function renderCodeToHtml(code: string, language: string, highlightLines?: number[]): Promise<string>;
570
+
571
+ declare const manimRootBase = "not-prose my-4";
572
+ declare const manimContainerBase = "relative w-full overflow-hidden rounded-lg border border-border [&_canvas]:!h-auto [&_canvas]:!max-w-full";
573
+ declare const manimPlaceholderBase = "flex w-full items-center justify-center bg-muted/40";
574
+ declare const manimPlaceholderLabelBase = "text-sm text-muted-foreground";
575
+ declare const manimErrorBase = "flex items-center justify-center border-destructive/50 bg-destructive/5 p-6 text-sm text-destructive";
576
+ declare const manimCaptionBase = "mt-2 text-center text-sm text-muted-foreground";
577
+ /** The recording proxy `manim-web` hands to a scene builder — records `play`/`wait` calls. */
578
+ interface ManimRecordingScene {
579
+ play(...animations: unknown[]): Promise<void>;
580
+ wait(duration?: number): Promise<void>;
581
+ }
582
+ type ManimModule = typeof ManimWeb;
583
+ interface ManimProps {
584
+ /** Scene builder — receives the `manim-web` module (imported internally by the component) and
585
+ * the recording proxy. Define the animation with `manim`'s primitives (`Circle`, `Create`, …)
586
+ * without importing `manim-web` yourself. */
587
+ build: (manim: ManimModule, scene: ManimRecordingScene) => Promise<void> | void;
588
+ /** Aspect-ratio width component (default 800). */
589
+ width?: number;
590
+ /** Aspect-ratio height component (default 450). */
591
+ height?: number;
592
+ caption?: string;
593
+ className?: string;
594
+ }
595
+
596
+ declare const youtubeRootBase = "not-prose my-4";
597
+ declare const youtubeTitleBase = "mb-2 text-lg font-semibold text-foreground";
598
+ declare const youtubeFacadeBase = "group relative aspect-video w-full cursor-pointer overflow-hidden rounded-md border border-border bg-muted/40";
599
+ declare const youtubePlayButtonBase = "absolute inset-0 flex items-center justify-center";
600
+ declare const youtubePlayButtonInnerBase = "flex items-center justify-center rounded-xl bg-red-600 px-4 py-2 text-white shadow-lg transition-transform group-hover:scale-105";
601
+ declare const youtubeDescriptionBase = "mt-2 text-sm text-muted-foreground";
602
+ declare const youtubeChaptersBase = "group mt-3 rounded-lg border border-border bg-muted/40";
603
+ declare const youtubeChaptersSummaryBase = "flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-sm font-medium [&::-webkit-details-marker]:hidden";
604
+ declare const youtubeChaptersChevronBase = "size-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-90";
605
+ declare const youtubeChaptersListBase = "border-t border-border px-2 py-2";
606
+ declare const youtubeChapterButtonBase = "inline-flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
607
+ declare const youtubeChapterTimeBase = "font-mono text-xs text-primary";
608
+ declare const youtubeChapterLabelBase = "text-foreground";
609
+ interface YouTubeChapter {
610
+ /** Timestamp in seconds. */
611
+ t: number;
612
+ label: string;
613
+ }
614
+ interface YouTubeProps {
615
+ /** YouTube video URL (`youtube.com/watch?v=…`, `youtu.be/…`, or a short URL). */
616
+ url: string;
617
+ title?: string;
618
+ description?: string;
619
+ /** Custom poster URL (defaults to YouTube's hqdefault thumbnail). */
620
+ poster?: string;
621
+ className?: string;
622
+ }
623
+ /** Extract a bare video ID from either a full YouTube URL or a plain ID. */
624
+ declare function extractYouTubeId(raw: string): string;
625
+ /** Format seconds to `mm:ss` (or `h:mm:ss`). */
626
+ declare function formatTime(seconds: number): string;
627
+ /** Parse a chapter list from a YouTube description: one `mm:ss Description` (or `h:mm:ss`)
628
+ * per line. Returns `[]` when none parse. */
629
+ declare function parseYouTubeChapters(description: string): YouTubeChapter[];
630
+ /** Fetch a video's title/description from a CORS-friendly oEmbed proxy (noembed.com).
631
+ * Used by `YoutubeTimestamps` to auto-infer chapters from the video's web metadata. */
632
+ declare function fetchYouTubeMetadata(url: string): Promise<{
633
+ title?: string;
634
+ description?: string;
635
+ }>;
636
+
637
+ declare const chartRootBase = "not-prose my-4";
638
+ declare const chartPlaceholderBase = "flex items-center justify-center rounded-md border border-border bg-muted/40";
639
+ declare const chartPlaceholderLabelBase = "text-sm text-muted-foreground";
640
+ interface ChartSeries {
641
+ key: string;
642
+ label?: string;
643
+ color?: string;
644
+ }
645
+ interface ChartProps {
646
+ type: 'line' | 'bar' | 'area' | 'pie';
647
+ data: Record<string, string | number>[];
648
+ series: ChartSeries[];
649
+ xKey?: string;
650
+ nameKey?: string;
651
+ height?: number;
652
+ showLegend?: boolean;
653
+ showGrid?: boolean;
654
+ showAxis?: boolean;
655
+ className?: string;
656
+ }
657
+ /** Return `var(--chart-N)` cycling through the five chart tokens. */
658
+ declare function defaultChartColor(index: number): string;
659
+ /**
660
+ * Build a framework-agnostic TanStack Charts definition from the vortex-ui `ChartProps`. The
661
+ * React and Svelte adapters both render this same definition, so the chart is identical
662
+ * across frameworks and can be server-rendered with `renderChartSvgString`.
663
+ *
664
+ * Channels (`x`, `y`, `z`, `color`) are runtime string keys, so they are cast through
665
+ * `as never` at the boundary — TanStack's literal-key typing cannot express dynamic keys.
666
+ */
667
+ declare function buildChartDefinition(props: ChartProps): DomChartDefinition;
668
+ /** Render a chart to an SVG string on the server (SSR / prerendered path). */
669
+ declare function renderChartSvgString(props: ChartProps, opts?: {
670
+ width?: number;
671
+ height?: number;
672
+ ariaLabel?: string;
673
+ }): string;
674
+
675
+ interface SingleChoiceQuestionData {
676
+ id: string;
677
+ type: 'single';
678
+ prompt: string;
679
+ choices: string[];
680
+ correct: number;
681
+ explanation?: string;
682
+ }
683
+ interface MultipleChoiceQuestionData {
684
+ id: string;
685
+ type: 'multiple';
686
+ prompt: string;
687
+ choices: string[];
688
+ correct: number[];
689
+ explanation?: string;
690
+ }
691
+ interface NumericQuestionData {
692
+ id: string;
693
+ type: 'numeric';
694
+ prompt: string;
695
+ answer: number;
696
+ tolerance?: number;
697
+ unit?: string;
698
+ explanation?: string;
699
+ }
700
+ type Question = SingleChoiceQuestionData | MultipleChoiceQuestionData | NumericQuestionData;
701
+ declare const questionCardBase = "not-prose my-4 rounded-lg border border-border bg-card p-4";
702
+ declare const questionPromptBase = "mb-3 text-sm font-medium text-foreground";
703
+ declare const questionGroupBase = "grid gap-2";
704
+ declare const questionOptionBase = "rounded-md px-3 py-2 transition-colors hover:bg-muted/60";
705
+ declare const questionOptionCorrectBase = "bg-success/10";
706
+ declare const questionOptionIncorrectBase = "bg-destructive/10";
707
+ declare const questionCheckButtonBase = "mt-3 rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50";
708
+ declare const questionInputBase = "h-9 w-32 rounded-md border border-input bg-background px-3 text-sm text-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50";
709
+ declare const questionUnitBase = "text-sm text-muted-foreground";
710
+ declare const feedbackCorrectBase = "text-success";
711
+ declare const feedbackIncorrectBase = "text-destructive";
712
+ declare const feedbackExplanationBase = "mt-1.5 text-sm text-muted-foreground";
713
+ declare const quizRootBase = "not-prose my-6 rounded-lg border border-border bg-card/50 p-4";
714
+ declare const quizHeaderBase = "mb-4 flex items-center justify-between gap-3";
715
+ declare const quizTitleBase = "text-base font-semibold text-foreground";
716
+ declare const quizScoreBase = "inline-flex items-center rounded-full bg-muted px-2.5 py-0.5 text-xs font-medium text-muted-foreground";
717
+ declare const quizResultBase = "mt-4 rounded-lg border border-border bg-muted/40 p-4";
718
+ declare const quizResultTitleBase = "text-lg font-semibold text-foreground";
719
+ declare const quizResultTextBase = "mt-1 text-sm text-muted-foreground";
720
+ declare const quizSubmitButtonBase = "rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50";
721
+ declare const quizResetButtonBase = "inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2";
722
+
723
+ export { type BadgeProps, type BadgeVariants, type ButtonProps, type ButtonVariants, type CardCoverProps, type CardProps, type CardVariants, type ChartProps, type ChartSeries, type CheckboxProps, type CheckboxVariants, type CodeBlockProps, type ComboboxItemVariants, type ComboboxProps, type FigureProps, type FileEntry, type InputProps, type InputVariants, type ItemProps, type ItemVariants, type LaTeXProps, type LanguageTab, type ManimModule, type ManimProps, type ManimRecordingScene, type MermaidProps, type MultipleChoiceQuestionData, type NativeSelectVariants, type NavbarDensity, type NavbarMenuDensity, type NavbarMenuVariant, type NavbarVariant, type NoticeProps, type NoticeVariants, type NumberInputProps, type NumericQuestionData, type PageGutterContentVariants, type PageGutterVariants, type PageVariants, type PrevNextProps, type Question, type RevealProps, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, type SelectItemData, type SelectProps, type SidebarContextProps, type SidebarMenuButtonVariants, type SingleChoiceQuestionData, type SwitchProps, type SwitchVariants, THEMES, THEME_NAMES, type TabsIndicatorVariants, type TabsListVariants, type TagsInputProps, type TextareaProps, type ThemeMeta, type ToggleButtonProps, type ToggleButtonVariants, type YouTubeChapter, type YouTubeProps, badgeVariants, buildChartDefinition, buttonVariants, cardBodyBase, cardCoverVariants, cardDescriptionBase, cardFooterBase, cardHeaderBase, cardTitleBase, cardVariants, centerBase, chartPlaceholderBase, chartPlaceholderLabelBase, chartRootBase, checkboxGroupBase, checkboxIndicatorBase, checkboxLabelBase, checkboxVariants, clipboardTriggerBase, cn, codeBlockBodyBase, codeBlockBodyScrollableBase, codeBlockContentBase, codeBlockCopyFloatBase, codeBlockHeaderBase, codeBlockHeaderInfoBase, codeBlockHighlightBase, codeBlockLineNumbersBase, codeBlockLoadingBase, codeBlockRootBase, codeBlockSpinnerBase, codeBlockTitleBase, colBase, comboboxClearTriggerBase, comboboxContentBase, comboboxControlBase, comboboxEmptyBase, comboboxInputBase, comboboxItemGroupLabelBase, comboboxItemIndicatorBase, comboboxItemVariants, comboboxListBase, comboboxPositionerBase, comboboxTriggerBase, containerBase, defaultChartColor, dialogBackdropBase, dialogCloseTriggerBase, dialogContentBase, dialogDescriptionBase, dialogFooterBase, dialogFooterStickyBase, dialogFullscreenContentBase, dialogHeaderBase, dialogHeaderStickyBase, dialogPositionerBase, dialogTitleBase, extractYouTubeId, feedbackCorrectBase, feedbackExplanationBase, feedbackIncorrectBase, fetchYouTubeMetadata, fieldErrorBase, fieldHelperBase, fieldLabelBase, fieldRequiredIndicatorBase, fieldRootBase, fieldsetErrorBase, fieldsetHelperBase, fieldsetLegendBase, fieldsetRootBase, figureCaptionBase, figureImageBase, figureRootBase, formatTime, hstackBase, injectCodeBlockStyles, inputVariants, itemVariants, latexDisplayBase, latexErrorBase, latexInlineBase, latexRootBase, manimCaptionBase, manimContainerBase, manimErrorBase, manimPlaceholderBase, manimPlaceholderLabelBase, manimRootBase, mermaidLoadingBase, mermaidRootBase, mermaidSourceBase, mermaidSvgAspectRatio, mermaidSvgBase, nativeSelectIconBase, nativeSelectVariants, nativeSelectWrapperBase, navbarActionsBase, navbarActivationAreaBase, navbarBrandBase, navbarContainerBase, navbarDensityVariants, navbarMenuBase, navbarMenuContentBase, navbarMenuIndicatorBase, navbarMenuItemBase, navbarMenuLinkBase, navbarMenuListBase, navbarMenuPlacementVariants, navbarMenuRootBase, navbarMenuTriggerStyle, navbarMenuViewportBase, navbarMenuViewportPositionerBase, navbarMobileActionsBase, navbarMobileBase, navbarMobileContentBase, navbarMobileHeaderBase, navbarMobileMenuBase, navbarMobileMenuContentBase, navbarMobileMenuTriggerBase, navbarShrunkBase, navbarTriggerVariants, navbarVariants, noticeDescriptionBase, noticeTitleBase, noticeVariants, numberInputControlBase, numberInputInputBase, numberInputRootBase, numberInputTriggerBase, pageContentBase, pageFooterBase, pageGutterAreaBase, pageGutterContentVariants, pageGutterVariants, pageSectionBase, pageVariants, paginationEllipsisBase, paginationItemBase, paginationRootBase, paginationTriggerBase, parseYouTubeChapters, popoverArrowBase, popoverCloseTriggerBase, popoverContentBase, popoverDescriptionBase, popoverIndicatorBase, popoverPositionerBase, popoverTitleBase, prevNextDirectionBase, prevNextLinkBase, prevNextLinkNextBase, prevNextRootBase, prevNextSpacerBase, prevNextTitleBase, questionCardBase, questionCheckButtonBase, questionGroupBase, questionInputBase, questionOptionBase, questionOptionCorrectBase, questionOptionIncorrectBase, questionPromptBase, questionUnitBase, quizHeaderBase, quizResetButtonBase, quizResultBase, quizResultTextBase, quizResultTitleBase, quizRootBase, quizScoreBase, quizSubmitButtonBase, quizTitleBase, radioGroupItemControlBase, radioGroupItemTextBase, radioGroupRootBase, renderChartSvgString, renderCodeToHtml, renderMermaidSource, resolveMermaidThemeVariables, revealChevronBase, revealContentBase, revealRootBase, revealTriggerBase, rowBase, scrollContentBase, scrollCornerBase, scrollRootBase, scrollScrollbarBase, scrollThumbBase, scrollViewportBase, selectClearTriggerBase, selectContentBase, selectIndicatorBase, selectItemBase, selectItemGroupLabelBase, selectItemIndicatorBase, selectItemTextBase, selectPositionerBase, selectTriggerBase, selectValueBase, sidebarMenuButtonVariants, sidebarStyles, splitterPanelBase, splitterResizeTriggerBase, splitterResizeTriggerIndicatorBase, splitterResizeTriggerSeparatorBase, splitterRootBase, stackBase, switchControlBase, switchLabelBase, switchThumbBase, switchVariants, tabsContentBase, tabsIndicatorBase, tabsIndicatorVariants, tabsListBase, tabsListVariants, tabsRootBase, tabsTriggerBase, tagsInputClearTriggerBase, tagsInputControlBase, tagsInputInputBase, tagsInputItemBase, tagsInputItemDeleteTriggerBase, tagsInputItemInputBase, tagsInputItemTextBase, tagsInputRootBase, textareaBase, toLaTeX, toggleButtonVariants, tooltipArrowBase, tooltipContentBase, tooltipPositionerBase, vstackBase, windowBodyBase, windowCloseTriggerBase, windowContentBase, windowControlBase, windowDragTriggerBase, windowHeaderBase, windowPositionerBase, windowResizeTriggerBase, windowStageTriggerBase, windowTitleBase, youtubeChapterButtonBase, youtubeChapterLabelBase, youtubeChapterTimeBase, youtubeChaptersBase, youtubeChaptersChevronBase, youtubeChaptersListBase, youtubeChaptersSummaryBase, youtubeDescriptionBase, youtubeFacadeBase, youtubePlayButtonBase, youtubePlayButtonInnerBase, youtubeRootBase, youtubeTitleBase };