@gradeui/ui 0.4.0 → 0.5.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.
package/dist/index.d.mts CHANGED
@@ -614,6 +614,45 @@ interface ShaderPreset {
614
614
  poster?: string;
615
615
  }
616
616
 
617
+ /**
618
+ * Custom fragment shader scene — runs a user-supplied GLSL fragment shader
619
+ * on a fullscreen quad with a standardised uniform set.
620
+ *
621
+ * This is the "write me a shader from a prompt" surface. Instead of asking
622
+ * an LLM to author a full three.js SceneFactory (imports, geometry, etc.),
623
+ * it only has to write `void main()` against a known uniform contract.
624
+ *
625
+ * The uniforms ARE the design contract — mirror the same palette slots
626
+ * that presets use, so custom shaders pick up theming for free.
627
+ */
628
+
629
+ /**
630
+ * Auto-injected prelude — defines every uniform and varying the user's
631
+ * fragment can reference. Users should NOT redeclare these. Their shader
632
+ * source is appended verbatim to this header.
633
+ *
634
+ * Kept as glsl100 (varying / gl_FragColor) since that's the syntax
635
+ * dominant in LLM training data; three.js auto-upgrades it for WebGL2.
636
+ */
637
+ declare const FRAGMENT_HEADER = "\n precision highp float;\n varying vec2 vUv;\n uniform float uTime;\n uniform vec2 uResolution;\n uniform vec2 uMouse;\n uniform vec3 uPrimary;\n uniform vec3 uSecondary;\n uniform vec3 uAccent;\n uniform vec3 uBackground;\n";
638
+ /**
639
+ * Thrown when the user's fragment shader fails to compile. Carries both the
640
+ * GL info log and the original source so callers can surface it or fall back.
641
+ */
642
+ declare class ShaderCompileError extends Error {
643
+ readonly log: string;
644
+ readonly source: string;
645
+ constructor(log: string, source: string);
646
+ }
647
+ /**
648
+ * Build a SceneFactory from a user-supplied fragment shader body.
649
+ *
650
+ * Throws `ShaderCompileError` synchronously (from the SceneContext call) if
651
+ * the GLSL doesn't compile. ThreeScene catches this and falls back to
652
+ * `preset="space"` so the UI stays populated.
653
+ */
654
+ declare function buildFragmentShaderScene(userFragment: string): SceneFactory;
655
+
617
656
  /**
618
657
  * ThreeScene — the WebGL media primitive.
619
658
  *
@@ -630,13 +669,26 @@ interface ShaderPreset {
630
669
  interface ThreeSceneProps extends Omit<BaseMediaProps, "src" | "poster"> {
631
670
  /** Preset id from the shader preset registry. */
632
671
  preset?: string;
672
+ /**
673
+ * User-authored GLSL fragment shader body. Runs on a fullscreen quad with
674
+ * a standardised uniform contract (uTime, uResolution, uMouse, uPrimary,
675
+ * uSecondary, uAccent, uBackground + varying vUv). Header is auto-injected
676
+ * — DO NOT redeclare the uniforms. Write `void main()` only.
677
+ *
678
+ * Precedence: `createScene` > `fragmentShader` > `preset`. On compile
679
+ * failure the component falls back to `preset="space"` and fires
680
+ * `onShaderError`.
681
+ */
682
+ fragmentShader?: string;
683
+ /** Called when a supplied `fragmentShader` fails to compile. */
684
+ onShaderError?: (error: ShaderCompileError) => void;
633
685
  /** Post-FX preset id. Defaults to the preset's `defaultPostPreset` or "vhs". */
634
686
  postPreset?: string;
635
687
  /** Palette overrides. Unset slots fall back to `DEFAULT_PALETTE`. */
636
688
  palette?: Partial<Palette>;
637
689
  /**
638
- * Custom scene factory. Takes precedence over `preset`.
639
- * Use for bespoke three.js scenes that don't fit a preset.
690
+ * Custom scene factory. Takes precedence over `preset` and `fragmentShader`.
691
+ * Use for bespoke three.js scenes that don't fit a preset or fullscreen quad.
640
692
  */
641
693
  createScene?: SceneFactory;
642
694
  /** Static poster to show while the GL context warms up. */
@@ -1217,4 +1269,4 @@ declare function GradeModeSwitcher({ className, variant }: GradeModeSwitcherProp
1217
1269
  */
1218
1270
  declare function ThemeToggle(): React$1.JSX.Element;
1219
1271
 
1220
- export { ALL_MODES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, BUILT_IN_INPUTS, Badge, type BaseMediaProps, type BreadcrumbItem, Button, type ButtonShape, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardStyle, CardTitle, type ChartPalette, Checkbox, type ColorIntensity, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type FontKey, GRADE_PRE_HYDRATION_SCRIPT, type GeneratedTheme, GradeModeSwitcher, GradeThemeProvider, type GradeThemeProviderProps, GradeThemeSwitcher, Input, type InputStyle, Label, LenisProvider, type MediaAspect, type MediaRadius, MediaSurface, type MediaSurfaceProps, type ModeName, type OKLCHTriplet, type Palette, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostPreset, Progress, RadioGroup, RadioGroupItem, type RadiusStyle, type Ramp, RivePlayer, type RivePlayerProps, type SceneContext, type SceneFactory, type SceneHandle, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type ShaderPreset, ShaderPresetPicker, type ShaderPresetPickerProps, ShaderPresetPreview, type ShaderPresetPreviewProps, type ShadowIntensity, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SideMenu, type SideMenuItem, type SideMenuProps, type SideMenuSection, type SimpleTab, SimpleTabs, SimpleTabsContent, SimpleTabsList, type SimpleTabsListProps, SimpleTabsPanel, type SimpleTabsPanelProps, type SimpleTabsProps, SimpleTabsRoot, type SimpleTabsRootProps, SimpleTabsTrigger, type SimpleTabsTriggerProps, Skeleton, Slider, type SpacingDensity, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type ThemeInput, ThemeToggle, ThreeScene, type ThreeSceneProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopMenu, type TopMenuProps, TopMenuUser, TopMenuUserItem, type TopMenuUserItemProps, type TopMenuUserProps, TopMenuUserSection, type TypeScalePreset, VideoPlayer, type VideoPlayerProps, applyThemeToRoot, badgeVariants, builtInThemes, buttonVariants, calmInput, cn, defaultPostPreset, defaultThemeId, deleteUserTheme, duplicateTheme, energyInput, generateTheme, getTheme, listThemes, listUserThemes, loadUserThemeInput, postPresets, saveUserTheme, sceneRegistry, shaderPresetById, shaderPresets, themeToCSSVars, useGradeTheme, useMaybeGradeTheme, usePrefersReducedMotion };
1272
+ export { ALL_MODES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, BUILT_IN_INPUTS, Badge, type BaseMediaProps, type BreadcrumbItem, Button, type ButtonShape, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardStyle, CardTitle, type ChartPalette, Checkbox, type ColorIntensity, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FRAGMENT_HEADER, type FontKey, GRADE_PRE_HYDRATION_SCRIPT, type GeneratedTheme, GradeModeSwitcher, GradeThemeProvider, type GradeThemeProviderProps, GradeThemeSwitcher, Input, type InputStyle, Label, LenisProvider, type MediaAspect, type MediaRadius, MediaSurface, type MediaSurfaceProps, type ModeName, type OKLCHTriplet, type Palette, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostPreset, Progress, RadioGroup, RadioGroupItem, type RadiusStyle, type Ramp, RivePlayer, type RivePlayerProps, type SceneContext, type SceneFactory, type SceneHandle, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShaderCompileError, type ShaderPreset, ShaderPresetPicker, type ShaderPresetPickerProps, ShaderPresetPreview, type ShaderPresetPreviewProps, type ShadowIntensity, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SideMenu, type SideMenuItem, type SideMenuProps, type SideMenuSection, type SimpleTab, SimpleTabs, SimpleTabsContent, SimpleTabsList, type SimpleTabsListProps, SimpleTabsPanel, type SimpleTabsPanelProps, type SimpleTabsProps, SimpleTabsRoot, type SimpleTabsRootProps, SimpleTabsTrigger, type SimpleTabsTriggerProps, Skeleton, Slider, type SpacingDensity, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type ThemeInput, ThemeToggle, ThreeScene, type ThreeSceneProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopMenu, type TopMenuProps, TopMenuUser, TopMenuUserItem, type TopMenuUserItemProps, type TopMenuUserProps, TopMenuUserSection, type TypeScalePreset, VideoPlayer, type VideoPlayerProps, applyThemeToRoot, badgeVariants, buildFragmentShaderScene, builtInThemes, buttonVariants, calmInput, cn, defaultPostPreset, defaultThemeId, deleteUserTheme, duplicateTheme, energyInput, generateTheme, getTheme, listThemes, listUserThemes, loadUserThemeInput, postPresets, saveUserTheme, sceneRegistry, shaderPresetById, shaderPresets, themeToCSSVars, useGradeTheme, useMaybeGradeTheme, usePrefersReducedMotion };
package/dist/index.d.ts CHANGED
@@ -614,6 +614,45 @@ interface ShaderPreset {
614
614
  poster?: string;
615
615
  }
616
616
 
617
+ /**
618
+ * Custom fragment shader scene — runs a user-supplied GLSL fragment shader
619
+ * on a fullscreen quad with a standardised uniform set.
620
+ *
621
+ * This is the "write me a shader from a prompt" surface. Instead of asking
622
+ * an LLM to author a full three.js SceneFactory (imports, geometry, etc.),
623
+ * it only has to write `void main()` against a known uniform contract.
624
+ *
625
+ * The uniforms ARE the design contract — mirror the same palette slots
626
+ * that presets use, so custom shaders pick up theming for free.
627
+ */
628
+
629
+ /**
630
+ * Auto-injected prelude — defines every uniform and varying the user's
631
+ * fragment can reference. Users should NOT redeclare these. Their shader
632
+ * source is appended verbatim to this header.
633
+ *
634
+ * Kept as glsl100 (varying / gl_FragColor) since that's the syntax
635
+ * dominant in LLM training data; three.js auto-upgrades it for WebGL2.
636
+ */
637
+ declare const FRAGMENT_HEADER = "\n precision highp float;\n varying vec2 vUv;\n uniform float uTime;\n uniform vec2 uResolution;\n uniform vec2 uMouse;\n uniform vec3 uPrimary;\n uniform vec3 uSecondary;\n uniform vec3 uAccent;\n uniform vec3 uBackground;\n";
638
+ /**
639
+ * Thrown when the user's fragment shader fails to compile. Carries both the
640
+ * GL info log and the original source so callers can surface it or fall back.
641
+ */
642
+ declare class ShaderCompileError extends Error {
643
+ readonly log: string;
644
+ readonly source: string;
645
+ constructor(log: string, source: string);
646
+ }
647
+ /**
648
+ * Build a SceneFactory from a user-supplied fragment shader body.
649
+ *
650
+ * Throws `ShaderCompileError` synchronously (from the SceneContext call) if
651
+ * the GLSL doesn't compile. ThreeScene catches this and falls back to
652
+ * `preset="space"` so the UI stays populated.
653
+ */
654
+ declare function buildFragmentShaderScene(userFragment: string): SceneFactory;
655
+
617
656
  /**
618
657
  * ThreeScene — the WebGL media primitive.
619
658
  *
@@ -630,13 +669,26 @@ interface ShaderPreset {
630
669
  interface ThreeSceneProps extends Omit<BaseMediaProps, "src" | "poster"> {
631
670
  /** Preset id from the shader preset registry. */
632
671
  preset?: string;
672
+ /**
673
+ * User-authored GLSL fragment shader body. Runs on a fullscreen quad with
674
+ * a standardised uniform contract (uTime, uResolution, uMouse, uPrimary,
675
+ * uSecondary, uAccent, uBackground + varying vUv). Header is auto-injected
676
+ * — DO NOT redeclare the uniforms. Write `void main()` only.
677
+ *
678
+ * Precedence: `createScene` > `fragmentShader` > `preset`. On compile
679
+ * failure the component falls back to `preset="space"` and fires
680
+ * `onShaderError`.
681
+ */
682
+ fragmentShader?: string;
683
+ /** Called when a supplied `fragmentShader` fails to compile. */
684
+ onShaderError?: (error: ShaderCompileError) => void;
633
685
  /** Post-FX preset id. Defaults to the preset's `defaultPostPreset` or "vhs". */
634
686
  postPreset?: string;
635
687
  /** Palette overrides. Unset slots fall back to `DEFAULT_PALETTE`. */
636
688
  palette?: Partial<Palette>;
637
689
  /**
638
- * Custom scene factory. Takes precedence over `preset`.
639
- * Use for bespoke three.js scenes that don't fit a preset.
690
+ * Custom scene factory. Takes precedence over `preset` and `fragmentShader`.
691
+ * Use for bespoke three.js scenes that don't fit a preset or fullscreen quad.
640
692
  */
641
693
  createScene?: SceneFactory;
642
694
  /** Static poster to show while the GL context warms up. */
@@ -1217,4 +1269,4 @@ declare function GradeModeSwitcher({ className, variant }: GradeModeSwitcherProp
1217
1269
  */
1218
1270
  declare function ThemeToggle(): React$1.JSX.Element;
1219
1271
 
1220
- export { ALL_MODES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, BUILT_IN_INPUTS, Badge, type BaseMediaProps, type BreadcrumbItem, Button, type ButtonShape, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardStyle, CardTitle, type ChartPalette, Checkbox, type ColorIntensity, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type FontKey, GRADE_PRE_HYDRATION_SCRIPT, type GeneratedTheme, GradeModeSwitcher, GradeThemeProvider, type GradeThemeProviderProps, GradeThemeSwitcher, Input, type InputStyle, Label, LenisProvider, type MediaAspect, type MediaRadius, MediaSurface, type MediaSurfaceProps, type ModeName, type OKLCHTriplet, type Palette, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostPreset, Progress, RadioGroup, RadioGroupItem, type RadiusStyle, type Ramp, RivePlayer, type RivePlayerProps, type SceneContext, type SceneFactory, type SceneHandle, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type ShaderPreset, ShaderPresetPicker, type ShaderPresetPickerProps, ShaderPresetPreview, type ShaderPresetPreviewProps, type ShadowIntensity, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SideMenu, type SideMenuItem, type SideMenuProps, type SideMenuSection, type SimpleTab, SimpleTabs, SimpleTabsContent, SimpleTabsList, type SimpleTabsListProps, SimpleTabsPanel, type SimpleTabsPanelProps, type SimpleTabsProps, SimpleTabsRoot, type SimpleTabsRootProps, SimpleTabsTrigger, type SimpleTabsTriggerProps, Skeleton, Slider, type SpacingDensity, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type ThemeInput, ThemeToggle, ThreeScene, type ThreeSceneProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopMenu, type TopMenuProps, TopMenuUser, TopMenuUserItem, type TopMenuUserItemProps, type TopMenuUserProps, TopMenuUserSection, type TypeScalePreset, VideoPlayer, type VideoPlayerProps, applyThemeToRoot, badgeVariants, builtInThemes, buttonVariants, calmInput, cn, defaultPostPreset, defaultThemeId, deleteUserTheme, duplicateTheme, energyInput, generateTheme, getTheme, listThemes, listUserThemes, loadUserThemeInput, postPresets, saveUserTheme, sceneRegistry, shaderPresetById, shaderPresets, themeToCSSVars, useGradeTheme, useMaybeGradeTheme, usePrefersReducedMotion };
1272
+ export { ALL_MODES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, BUILT_IN_INPUTS, Badge, type BaseMediaProps, type BreadcrumbItem, Button, type ButtonShape, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardStyle, CardTitle, type ChartPalette, Checkbox, type ColorIntensity, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FRAGMENT_HEADER, type FontKey, GRADE_PRE_HYDRATION_SCRIPT, type GeneratedTheme, GradeModeSwitcher, GradeThemeProvider, type GradeThemeProviderProps, GradeThemeSwitcher, Input, type InputStyle, Label, LenisProvider, type MediaAspect, type MediaRadius, MediaSurface, type MediaSurfaceProps, type ModeName, type OKLCHTriplet, type Palette, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostPreset, Progress, RadioGroup, RadioGroupItem, type RadiusStyle, type Ramp, RivePlayer, type RivePlayerProps, type SceneContext, type SceneFactory, type SceneHandle, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShaderCompileError, type ShaderPreset, ShaderPresetPicker, type ShaderPresetPickerProps, ShaderPresetPreview, type ShaderPresetPreviewProps, type ShadowIntensity, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SideMenu, type SideMenuItem, type SideMenuProps, type SideMenuSection, type SimpleTab, SimpleTabs, SimpleTabsContent, SimpleTabsList, type SimpleTabsListProps, SimpleTabsPanel, type SimpleTabsPanelProps, type SimpleTabsProps, SimpleTabsRoot, type SimpleTabsRootProps, SimpleTabsTrigger, type SimpleTabsTriggerProps, Skeleton, Slider, type SpacingDensity, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type ThemeInput, ThemeToggle, ThreeScene, type ThreeSceneProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopMenu, type TopMenuProps, TopMenuUser, TopMenuUserItem, type TopMenuUserItemProps, type TopMenuUserProps, TopMenuUserSection, type TypeScalePreset, VideoPlayer, type VideoPlayerProps, applyThemeToRoot, badgeVariants, buildFragmentShaderScene, builtInThemes, buttonVariants, calmInput, cn, defaultPostPreset, defaultThemeId, deleteUserTheme, duplicateTheme, energyInput, generateTheme, getTheme, listThemes, listUserThemes, loadUserThemeInput, postPresets, saveUserTheme, sceneRegistry, shaderPresetById, shaderPresets, themeToCSSVars, useGradeTheme, useMaybeGradeTheme, usePrefersReducedMotion };