88} from "@/components/ui/select" ;
99import { Input } from "@/components/ui/input" ;
1010import { Label } from "@/components/ui/label" ;
11- import { cn } from "@/lib/shadcn-utils" ;
1211import { Info } from "lucide-react" ;
1312import { Border , ThemeStyle } from "@courselit/page-models" ;
1413import {
@@ -25,6 +24,8 @@ import {
2524 PageCard ,
2625 PageCardContent ,
2726 PageCardHeader ,
27+ Input as PageInput ,
28+ Link as PageLink ,
2829} from "@courselit/page-primitives" ;
2930import {
3031 Dialog ,
@@ -72,9 +73,7 @@ function InteractiveSelector({
7273 < Label className = "text-xs text-muted-foreground" >
7374 Preview
7475 </ Label >
75- < a href = "#" className = { cn ( value ?. hover || "" ) } >
76- Demo Link
77- </ a >
76+ < PageLink theme = { theme } > Demo Link</ PageLink >
7877 </ div >
7978 ) ;
8079 case "card" :
@@ -99,17 +98,10 @@ function InteractiveSelector({
9998 < Label className = "text-xs text-muted-foreground" >
10099 Preview
101100 </ Label >
102- < Input
101+ < PageInput
102+ theme = { theme }
103103 type = "text"
104104 placeholder = "Demo Input"
105- className = { cn (
106- value ?. padding ?. x || "" ,
107- value ?. padding ?. y || "" ,
108- value ?. borderRadius || "" ,
109- value ?. border ?. style || "" ,
110- value ?. shadow || "" ,
111- value ?. hover || "" ,
112- ) }
113105 />
114106 </ div >
115107 ) ;
@@ -549,12 +541,71 @@ function InteractiveSelector({
549541 </ div >
550542 ) ;
551543
544+ const renderBoxShadowConfig = ( ) => (
545+ < div className = "space-y-2" >
546+ < div className = "space-y-2" >
547+ < Label > Shadow</ Label >
548+ < Select
549+ value = { value ?. shadow || "" }
550+ onValueChange = { ( newValue ) => {
551+ onChange ( {
552+ ...theme ,
553+ interactives : {
554+ ...theme . interactives ,
555+ [ type ] : {
556+ ...value ,
557+ shadow : newValue ,
558+ } ,
559+ } ,
560+ } ) ;
561+ } }
562+ >
563+ < SelectTrigger >
564+ < SelectValue placeholder = "Select shadow" />
565+ </ SelectTrigger >
566+ < SelectContent >
567+ { shadowOptions . map ( ( option ) => (
568+ < SelectItem
569+ key = { option . value }
570+ value = { option . value }
571+ >
572+ { option . label }
573+ </ SelectItem >
574+ ) ) }
575+ </ SelectContent >
576+ </ Select >
577+ </ div >
578+ { value ?. shadow === "shadow-custom" && (
579+ < div className = "space-y-2" >
580+ < Label > Custom Shadow</ Label >
581+ < Input
582+ value = { value ?. customShadow || "" }
583+ placeholder = "0px 0px 0px 0px rgba(0, 0, 0, 0.1)"
584+ onChange = { ( e ) =>
585+ onChange ( {
586+ ...theme ,
587+ interactives : {
588+ ...theme . interactives ,
589+ [ type ] : {
590+ ...value ,
591+ customShadow : e . target . value ,
592+ } ,
593+ } ,
594+ } )
595+ }
596+ />
597+ </ div >
598+ ) }
599+ </ div >
600+ ) ;
601+
552602 switch ( type ) {
553603 case "button" :
554604 return (
555605 < div className = "space-y-6" >
556606 { renderPaddingConfig ( ) }
557607 { renderBorderConfig ( ) }
608+ { renderBoxShadowConfig ( ) }
558609 < div className = "grid grid-cols-2 gap-4" >
559610 < div className = "space-y-2" >
560611 < Label > Border Radius</ Label >
@@ -602,7 +653,7 @@ function InteractiveSelector({
602653 ...theme . interactives ,
603654 [ type ] : {
604655 ...value ,
605- shadow : newValue ,
656+ shadow : newValue as ThemeStyle [ "interactives" ] [ "button" ] [ "shadow" ] ,
606657 } ,
607658 } ,
608659 } ) ;
@@ -628,11 +679,36 @@ function InteractiveSelector({
628679 </ div >
629680 ) ;
630681 case "link" :
631- return < div className = "space-y-6" > { renderHoverInput ( ) } </ div > ;
682+ return (
683+ < div className = "space-y-6" >
684+ { renderHoverInput ( ) }
685+ < div className = "space-y-2" >
686+ < Label > Text Shadow</ Label >
687+ < Input
688+ value = { value ?. textShadow || "" }
689+ placeholder = "0px 0px 0px 0px rgba(0, 0, 0, 0.1)"
690+ onChange = { ( e ) =>
691+ onChange ( {
692+ ...theme ,
693+ interactives : {
694+ ...theme . interactives ,
695+ [ type ] : {
696+ ...value ,
697+ textShadow : e . target
698+ . value as ThemeStyle [ "interactives" ] [ "link" ] [ "textShadow" ] ,
699+ } ,
700+ } ,
701+ } )
702+ }
703+ />
704+ </ div >
705+ </ div >
706+ ) ;
632707 case "card" :
633708 return (
634709 < div className = "space-y-6" >
635710 { renderPaddingConfig ( ) }
711+ { renderBoxShadowConfig ( ) }
636712 < div className = "grid grid-cols-2 gap-4" >
637713 < div className = "space-y-2" >
638714 < Label > Border Radius</ Label >
@@ -781,6 +857,7 @@ function InteractiveSelector({
781857 return (
782858 < div className = "space-y-6" >
783859 { renderPaddingConfig ( ) }
860+ { renderBoxShadowConfig ( ) }
784861 < div className = "grid grid-cols-2 gap-4" >
785862 < div className = "space-y-2" >
786863 < Label > Border Radius</ Label >
0 commit comments