|
1 | | -<!-- @dsCard group="Components" viewport="700x430" subtitle="Button · IconButton · SegmentedControl · Switch · Slider · Select · TextField" name="Forms" --> |
| 1 | +<!-- @dsCard group="Components" viewport="700x520" subtitle="Button · IconButton · SegmentedControl · ChoiceRow · Switch · Slider · Select · TextField" name="Forms" --> |
2 | 2 | <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"> |
3 | 3 | <link rel="stylesheet" href="../../styles.css"> |
4 | 4 | <script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script> |
|
23 | 23 | } |
24 | 24 | const Button = pick('Button'), IconButton = pick('IconButton'), |
25 | 25 | SegmentedControl = pick('SegmentedControl'), Switch = pick('Switch'), |
26 | | - Slider = pick('Slider'), Select = pick('Select'), TextField = pick('TextField'); |
| 26 | + Slider = pick('Slider'), Select = pick('Select'), TextField = pick('TextField'), |
| 27 | + ChoiceRow = pick('ChoiceRow'); |
27 | 28 | const I = (n, s=15) => <i data-lucide={n} style={{width:s,height:s}}></i>; |
28 | 29 |
|
29 | 30 | function Demo(){ |
30 | 31 | const [mode,setMode] = React.useState('Edit'); |
31 | 32 | const [on,setOn] = React.useState(true); |
32 | | - const [sh,setSh] = React.useState(24); |
| 33 | + const [pad,setPad] = React.useState(24); |
| 34 | + const [sh,setSh] = React.useState(0.6); |
| 35 | + const [fmt,setFmt] = React.useState('16:9'); |
33 | 36 | const [q,setQ] = React.useState(''); |
34 | 37 | React.useEffect(()=>{ window.lucide && window.lucide.createIcons(); }); |
35 | 38 | return ( |
|
50 | 53 | <SegmentedControl options={['Media','Edit','Rec']} value={mode} onChange={setMode} /> |
51 | 54 | <SegmentedControl size="sm" options={['Screen','Window']} value={mode==='Rec'?'Window':'Screen'} onChange={()=>{}} /> |
52 | 55 | </div> |
| 56 | + <div className="grp"><span className="cap">CHOICEROW · a fixed choice, one click</span> |
| 57 | + <div className="col"><ChoiceRow label="Format" options={['Auto','16:9','9:16','1:1']} value={fmt} onChange={setFmt} /></div> |
| 58 | + <div className="col"><ChoiceRow label="Shadow" value={sh} onChange={setSh} |
| 59 | + options={[{value:0,label:'None'},{value:0.3,label:'Light'},{value:0.6,label:'Medium'},{value:0.9,label:'Strong'}]} /></div> |
| 60 | + </div> |
53 | 61 | <div className="grp"><span className="cap">SWITCH</span> |
54 | 62 | <Switch checked={on} onChange={setOn} /> |
55 | 63 | <Switch checked={!on} onChange={()=>setOn(!on)} /> |
56 | 64 | <span style={{fontSize:13,color:'var(--fg-2)'}}>Blur background</span> |
57 | 65 | </div> |
58 | 66 | <div className="grp"> |
59 | 67 | <div className="col"><span className="cap">SLIDER</span> |
60 | | - <Slider label="Shadow" value={sh} onChange={setSh} format={v=>`${v}%`} /> |
| 68 | + <Slider label="Padding" value={pad} onChange={setPad} format={v=>`${v}%`} /> |
61 | 69 | </div> |
62 | | - <div className="col"><span className="cap">SELECT</span> |
63 | | - <Select options={['Bold Center','Minimal Bottom','Karaoke','Boxed']} value="Bold Center" onChange={()=>{}} /> |
| 70 | + <div className="col"><span className="cap">SELECT · long lists only</span> |
| 71 | + <Select options={['English','French','German','Spanish','Italian','Portuguese','Japanese']} value="French" onChange={()=>{}} /> |
64 | 72 | </div> |
65 | 73 | <div className="col"><span className="cap">TEXTFIELD</span> |
66 | 74 | <TextField leadingIcon={I('search')} placeholder="Search media…" value={q} onChange={setQ} /> |
|
0 commit comments