@voriel_salut/ds 0.1.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.
@@ -0,0 +1,1008 @@
1
+ {
2
+ "v": 0,
3
+ "components": {
4
+ "ui-air-style": {
5
+ "id": "ui-air-style",
6
+ "name": "AirStyle",
7
+ "path": "./src/components/air-style/air-style.stories.tsx",
8
+ "jsDocTags": {},
9
+ "reactDocgen": {
10
+ "description": "",
11
+ "methods": [],
12
+ "displayName": "AirStyle",
13
+ "definedInFile": "src/components/air-style/air-style.tsx",
14
+ "actualName": "AirStyle",
15
+ "exportName": "AirStyle",
16
+ "props": {
17
+ "label": {
18
+ "required": true,
19
+ "tsType": {
20
+ "name": "ReactReactNode",
21
+ "raw": "React.ReactNode"
22
+ },
23
+ "description": "Text under the image. Clamped to two lines."
24
+ },
25
+ "src": {
26
+ "required": true,
27
+ "tsType": {
28
+ "name": "string"
29
+ },
30
+ "description": "Image URL for the tile. Shown square and cropped to fill."
31
+ },
32
+ "sources": {
33
+ "required": false,
34
+ "tsType": {
35
+ "name": "Array",
36
+ "elements": [
37
+ {
38
+ "name": "signature",
39
+ "type": "object",
40
+ "raw": "{\n srcSet: string\n media?: string\n sizes?: string\n}",
41
+ "signature": {
42
+ "properties": [
43
+ {
44
+ "key": "srcSet",
45
+ "value": {
46
+ "name": "string",
47
+ "required": true
48
+ }
49
+ },
50
+ {
51
+ "key": "media",
52
+ "value": {
53
+ "name": "string",
54
+ "required": false
55
+ }
56
+ },
57
+ {
58
+ "key": "sizes",
59
+ "value": {
60
+ "name": "string",
61
+ "required": false
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ ],
68
+ "raw": "AirStyleSource[]"
69
+ },
70
+ "description": "Optional responsive sources, rendered as <source> elements inside <picture>.",
71
+ "defaultValue": {
72
+ "value": "[]",
73
+ "computed": false
74
+ }
75
+ }
76
+ }
77
+ },
78
+ "stories": [
79
+ {
80
+ "id": "ui-air-style--default",
81
+ "name": "Default",
82
+ "snippet": "const Default = () => <AirStyle label=\"Training\" src={training} />;"
83
+ },
84
+ {
85
+ "id": "ui-air-style--long-label",
86
+ "name": "Long label",
87
+ "snippet": "const LongLabel = () => <AirStyle\n label=\"Outdoor strength training and conditioning in the park\"\n src={training} />;"
88
+ },
89
+ {
90
+ "id": "ui-air-style--grid",
91
+ "name": "Grid",
92
+ "snippet": "const Grid = () => (\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-3 md:grid-cols-4\">\n <AirStyle label=\"Training\" src={training} />\n <AirStyle label=\"Cooking\" src={cooking} />\n <AirStyle label=\"Photography\" src={photography} />\n <AirStyle label=\"Art\" src={art} />\n </div>\n);"
93
+ }
94
+ ],
95
+ "import": "import { AirStyle } from '@voriel_salut/ds';"
96
+ },
97
+ "ui-hero": {
98
+ "id": "ui-hero",
99
+ "name": "Hero",
100
+ "path": "./src/components/hero/hero.stories.tsx",
101
+ "jsDocTags": {},
102
+ "reactDocgen": {
103
+ "description": "",
104
+ "methods": [],
105
+ "displayName": "Hero",
106
+ "definedInFile": "src/components/hero/hero.tsx",
107
+ "actualName": "Hero",
108
+ "exportName": "Hero",
109
+ "props": {
110
+ "title": {
111
+ "required": true,
112
+ "tsType": {
113
+ "name": "ReactReactNode",
114
+ "raw": "React.ReactNode"
115
+ },
116
+ "description": "Main heading, rendered as an h1."
117
+ },
118
+ "description": {
119
+ "required": false,
120
+ "tsType": {
121
+ "name": "ReactReactNode",
122
+ "raw": "React.ReactNode"
123
+ },
124
+ "description": "Supporting text under the heading."
125
+ },
126
+ "eyebrow": {
127
+ "required": false,
128
+ "tsType": {
129
+ "name": "ReactReactNode",
130
+ "raw": "React.ReactNode"
131
+ },
132
+ "description": "Small label above the heading, e.g. a Badge."
133
+ },
134
+ "background": {
135
+ "required": false,
136
+ "tsType": {
137
+ "name": "union",
138
+ "raw": "\"mesh\" | \"nebula\"",
139
+ "elements": [
140
+ {
141
+ "name": "literal",
142
+ "value": "\"mesh\""
143
+ },
144
+ {
145
+ "name": "literal",
146
+ "value": "\"nebula\""
147
+ }
148
+ ]
149
+ },
150
+ "description": "\"mesh\" is the calm animated gradient. \"nebula\" is the interactive halftone sky: the pointer\nlights the gas and a click hangs a new star.",
151
+ "defaultValue": {
152
+ "value": "\"mesh\"",
153
+ "computed": false
154
+ }
155
+ },
156
+ "children": {
157
+ "required": false,
158
+ "tsType": {
159
+ "name": "ReactReactNode",
160
+ "raw": "React.ReactNode"
161
+ },
162
+ "description": "Calls to action, usually Buttons."
163
+ }
164
+ }
165
+ },
166
+ "stories": [
167
+ {
168
+ "id": "ui-hero--default",
169
+ "name": "Default",
170
+ "snippet": "const Default = () => <Hero\n title=\"Build bold interfaces, fast\"\n description=\"lets-vibe-ds gives you brutalist components and tokens that work together out of the box.\"\n eyebrow={<Badge variant=\"accent\">New</Badge>}>(<>\n <Button size=\"lg\">Get started</Button>\n <Button size=\"lg\" variant=\"outline\">\n View components\n </Button>\n </>)</Hero>;"
171
+ },
172
+ {
173
+ "id": "ui-hero--interactive",
174
+ "name": "Interactive",
175
+ "snippet": "const Interactive = () => <Hero\n title=\"Lost in the green static\"\n description=\"A nebula printed one dot at a time. Move to light the gas, click to hang a star.\"\n eyebrow={<Badge variant=\"accent\">Interactive</Badge>}\n background=\"nebula\">(<>\n <Button size=\"lg\">Get started</Button>\n <Button size=\"lg\" variant=\"outline\">\n View components\n </Button>\n </>)</Hero>;"
176
+ },
177
+ {
178
+ "id": "ui-hero--title-only",
179
+ "name": "Title only",
180
+ "snippet": "const TitleOnly = () => <Hero title=\"Build bold interfaces, fast\" description={undefined} />;"
181
+ }
182
+ ],
183
+ "import": "import { Badge, Button, Hero } from '@voriel_salut/ds';"
184
+ },
185
+ "ui-badge": {
186
+ "id": "ui-badge",
187
+ "name": "Badge",
188
+ "path": "./src/components/ui/badge.stories.tsx",
189
+ "jsDocTags": {},
190
+ "reactDocgen": {
191
+ "description": "",
192
+ "methods": [],
193
+ "displayName": "Badge",
194
+ "definedInFile": "src/components/ui/badge.tsx",
195
+ "actualName": "Badge",
196
+ "exportName": "Badge",
197
+ "props": {
198
+ "asChild": {
199
+ "required": false,
200
+ "tsType": {
201
+ "name": "boolean"
202
+ },
203
+ "description": "",
204
+ "defaultValue": {
205
+ "value": "false",
206
+ "computed": false
207
+ }
208
+ },
209
+ "variant": {
210
+ "defaultValue": {
211
+ "value": "\"default\"",
212
+ "computed": false
213
+ },
214
+ "required": false
215
+ }
216
+ }
217
+ },
218
+ "stories": [
219
+ {
220
+ "id": "ui-badge--default",
221
+ "name": "Default",
222
+ "snippet": "const Default = () => <Badge variant=\"default\">Badge</Badge>;"
223
+ },
224
+ {
225
+ "id": "ui-badge--secondary",
226
+ "name": "Secondary",
227
+ "snippet": "const Secondary = () => <Badge variant=\"secondary\">Badge</Badge>;"
228
+ },
229
+ {
230
+ "id": "ui-badge--accent",
231
+ "name": "Accent",
232
+ "snippet": "const Accent = () => <Badge variant=\"accent\">Badge</Badge>;"
233
+ },
234
+ {
235
+ "id": "ui-badge--outline",
236
+ "name": "Outline",
237
+ "snippet": "const Outline = () => <Badge variant=\"outline\">Badge</Badge>;"
238
+ },
239
+ {
240
+ "id": "ui-badge--destructive",
241
+ "name": "Destructive",
242
+ "snippet": "const Destructive = () => <Badge variant=\"destructive\">Badge</Badge>;"
243
+ },
244
+ {
245
+ "id": "ui-badge--all-variants",
246
+ "name": "All variants",
247
+ "snippet": "const AllVariants = () => (\n <div className=\"flex flex-wrap gap-2\">\n <Badge>Default</Badge>\n <Badge variant=\"secondary\">Secondary</Badge>\n <Badge variant=\"accent\">Accent</Badge>\n <Badge variant=\"outline\">Outline</Badge>\n <Badge variant=\"ghost\">Ghost</Badge>\n <Badge variant=\"destructive\">Destructive</Badge>\n <Badge variant=\"link\">Link</Badge>\n </div>\n);"
248
+ }
249
+ ],
250
+ "import": "import { Badge } from '@voriel_salut/ds';"
251
+ },
252
+ "ui-button": {
253
+ "id": "ui-button",
254
+ "name": "Button",
255
+ "path": "./src/components/ui/button.stories.tsx",
256
+ "jsDocTags": {},
257
+ "reactDocgen": {
258
+ "description": "",
259
+ "methods": [],
260
+ "displayName": "Button",
261
+ "definedInFile": "src/components/ui/button.tsx",
262
+ "actualName": "Button",
263
+ "exportName": "Button",
264
+ "props": {
265
+ "asChild": {
266
+ "required": false,
267
+ "tsType": {
268
+ "name": "boolean"
269
+ },
270
+ "description": "",
271
+ "defaultValue": {
272
+ "value": "false",
273
+ "computed": false
274
+ }
275
+ },
276
+ "variant": {
277
+ "defaultValue": {
278
+ "value": "\"default\"",
279
+ "computed": false
280
+ },
281
+ "required": false
282
+ },
283
+ "size": {
284
+ "defaultValue": {
285
+ "value": "\"default\"",
286
+ "computed": false
287
+ },
288
+ "required": false
289
+ }
290
+ }
291
+ },
292
+ "stories": [
293
+ {
294
+ "id": "ui-button--default",
295
+ "name": "Default",
296
+ "snippet": "const Default = () => <Button variant=\"default\" size=\"default\" disabled={false}>Button</Button>;"
297
+ },
298
+ {
299
+ "id": "ui-button--outline",
300
+ "name": "Outline",
301
+ "snippet": "const Outline = () => <Button variant=\"outline\" size=\"default\" disabled={false}>Button</Button>;"
302
+ },
303
+ {
304
+ "id": "ui-button--secondary",
305
+ "name": "Secondary",
306
+ "snippet": "const Secondary = () => <Button variant=\"secondary\" size=\"default\" disabled={false}>Button</Button>;"
307
+ },
308
+ {
309
+ "id": "ui-button--accent",
310
+ "name": "Accent",
311
+ "snippet": "const Accent = () => <Button variant=\"accent\" size=\"default\" disabled={false}>Button</Button>;"
312
+ },
313
+ {
314
+ "id": "ui-button--ghost",
315
+ "name": "Ghost",
316
+ "snippet": "const Ghost = () => <Button variant=\"ghost\" size=\"default\" disabled={false}>Button</Button>;"
317
+ },
318
+ {
319
+ "id": "ui-button--destructive",
320
+ "name": "Destructive",
321
+ "snippet": "const Destructive = () => <Button variant=\"destructive\" size=\"default\" disabled={false}>Button</Button>;"
322
+ },
323
+ {
324
+ "id": "ui-button--link",
325
+ "name": "Link",
326
+ "snippet": "const Link = () => <Button variant=\"link\" size=\"default\" disabled={false}>Button</Button>;"
327
+ }
328
+ ],
329
+ "import": "import { Button } from '@voriel_salut/ds';"
330
+ },
331
+ "ui-card": {
332
+ "id": "ui-card",
333
+ "name": "Card",
334
+ "path": "./src/components/ui/card.stories.tsx",
335
+ "jsDocTags": {},
336
+ "reactDocgen": {
337
+ "description": "",
338
+ "methods": [],
339
+ "displayName": "Card",
340
+ "definedInFile": "src/components/ui/card.tsx",
341
+ "actualName": "Card",
342
+ "exportName": "Card",
343
+ "props": {
344
+ "size": {
345
+ "required": false,
346
+ "tsType": {
347
+ "name": "union",
348
+ "raw": "\"default\" | \"sm\"",
349
+ "elements": [
350
+ {
351
+ "name": "literal",
352
+ "value": "\"default\""
353
+ },
354
+ {
355
+ "name": "literal",
356
+ "value": "\"sm\""
357
+ }
358
+ ]
359
+ },
360
+ "description": "",
361
+ "defaultValue": {
362
+ "value": "\"default\"",
363
+ "computed": false
364
+ }
365
+ }
366
+ }
367
+ },
368
+ "stories": [
369
+ {
370
+ "id": "ui-card--default",
371
+ "name": "Default",
372
+ "snippet": "const Default = () => <Card size=\"default\" className=\"w-80\">\n <CardHeader>\n <CardTitle>Sign up</CardTitle>\n <CardDescription>Get updates on the design system.</CardDescription>\n </CardHeader>\n <CardContent className=\"flex flex-col gap-2\">\n <Label htmlFor=\"card-email\">Email</Label>\n <Input id=\"card-email\" type=\"email\" placeholder=\"you@example.com\" />\n </CardContent>\n <CardFooter>\n <Button className=\"w-full\">Subscribe</Button>\n </CardFooter>\n</Card>;"
373
+ },
374
+ {
375
+ "id": "ui-card--with-action",
376
+ "name": "With action",
377
+ "snippet": "const WithAction = () => <Card size=\"default\" className=\"w-80\">\n <CardHeader>\n <CardTitle>Monthly plan</CardTitle>\n <CardDescription>Billed every month.</CardDescription>\n <CardAction>\n <Badge variant=\"accent\">Popular</Badge>\n </CardAction>\n </CardHeader>\n <CardContent>\n <p className=\"text-3xl font-bold\">€12</p>\n </CardContent>\n</Card>;"
378
+ },
379
+ {
380
+ "id": "ui-card--small",
381
+ "name": "Small",
382
+ "snippet": "const Small = () => <Card size=\"sm\" className=\"w-64\">\n <CardHeader>\n <CardTitle>Small card</CardTitle>\n <CardDescription>Tighter spacing for dense layouts.</CardDescription>\n </CardHeader>\n</Card>;"
383
+ }
384
+ ],
385
+ "import": "import {\n Badge,\n Button,\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Input,\n Label,\n} from '@voriel_salut/ds';"
386
+ },
387
+ "ui-dialog": {
388
+ "id": "ui-dialog",
389
+ "name": "Dialog",
390
+ "path": "./src/components/ui/dialog.stories.tsx",
391
+ "jsDocTags": {},
392
+ "reactDocgen": {
393
+ "description": "",
394
+ "methods": [],
395
+ "displayName": "Dialog",
396
+ "definedInFile": "src/components/ui/dialog.tsx",
397
+ "actualName": "Dialog",
398
+ "exportName": "Dialog"
399
+ },
400
+ "stories": [
401
+ {
402
+ "id": "ui-dialog--default",
403
+ "name": "Default",
404
+ "snippet": "const Default = () => <Dialog>\n <DialogTrigger asChild>\n <Button variant=\"outline\">Edit profile</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Edit profile</DialogTitle>\n <DialogDescription>Change your details, then save.</DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"dialog-name\">Name</Label>\n <Input id=\"dialog-name\" defaultValue=\"Oliver\" />\n </div>\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogClose>\n <Button>Save</Button>\n </DialogFooter>\n </DialogContent>\n</Dialog>;"
405
+ },
406
+ {
407
+ "id": "ui-dialog--destructive",
408
+ "name": "Destructive",
409
+ "snippet": "const Destructive = () => <Dialog>\n <DialogTrigger asChild>\n <Button variant=\"destructive\">Delete project</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete this project?</DialogTitle>\n <DialogDescription>This can't be undone.</DialogDescription>\n </DialogHeader>\n <DialogFooter showCloseButton>\n <Button variant=\"destructive\">Delete</Button>\n </DialogFooter>\n </DialogContent>\n</Dialog>;"
410
+ },
411
+ {
412
+ "id": "ui-dialog--open",
413
+ "name": "Open",
414
+ "error": {
415
+ "name": "SyntaxError",
416
+ "message": "Expected render to be an arrow function or function expression\n 70 | export const Open: Story = {\n 71 | args: { defaultOpen: true },\n> 72 | render: Default.render,\n | ^^^^^^^^^^^^^^\n 73 | }\n 74 |"
417
+ }
418
+ }
419
+ ],
420
+ "import": "import {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n Input,\n Label,\n} from '@voriel_salut/ds';"
421
+ },
422
+ "ui-halftone-nebula": {
423
+ "id": "ui-halftone-nebula",
424
+ "name": "HalftoneNebula",
425
+ "path": "./src/components/ui/halftone-nebula.stories.tsx",
426
+ "jsDocTags": {},
427
+ "reactDocgen": {
428
+ "description": "",
429
+ "methods": [],
430
+ "displayName": "HalftoneNebula",
431
+ "definedInFile": "src/components/ui/halftone-nebula.tsx",
432
+ "actualName": "HalftoneNebula",
433
+ "exportName": "HalftoneNebula",
434
+ "props": {
435
+ "height": {
436
+ "required": false,
437
+ "tsType": {
438
+ "name": "string"
439
+ },
440
+ "description": "Explicit height, e.g. \"100svh\". The canvas fills the box, so without it the\nsection needs its height from its content or classes."
441
+ },
442
+ "preset": {
443
+ "required": false,
444
+ "tsType": {
445
+ "name": "union",
446
+ "raw": "keyof typeof NEBULA_PRESETS",
447
+ "elements": [
448
+ {
449
+ "name": "literal",
450
+ "value": "brand"
451
+ },
452
+ {
453
+ "name": "literal",
454
+ "value": "crimson"
455
+ },
456
+ {
457
+ "name": "literal",
458
+ "value": "ultraviolet"
459
+ },
460
+ {
461
+ "name": "literal",
462
+ "value": "abyssal"
463
+ },
464
+ {
465
+ "name": "literal",
466
+ "value": "solar"
467
+ },
468
+ {
469
+ "name": "literal",
470
+ "value": "phosphor"
471
+ }
472
+ ]
473
+ },
474
+ "description": "A named palette + layout, layered over the defaults.",
475
+ "defaultValue": {
476
+ "value": "\"brand\"",
477
+ "computed": false
478
+ }
479
+ },
480
+ "params": {
481
+ "required": false,
482
+ "tsType": {
483
+ "name": "Partial",
484
+ "elements": [
485
+ {
486
+ "name": "signature",
487
+ "type": "object",
488
+ "raw": "{\n // the grid\n /** CSS px per pixel cell. Everything snaps to this. */\n pixel: number\n /** Dot radius, in cells, where the gas is empty / densest. >0.5 merges dots. */\n dotMin: number\n dotMax: number\n /** Quantisation steps before dithering. Fewer reads more like pixel art. */\n levels: number\n // the gas\n scale: number\n warp: number\n drift: number\n density: number\n threshold: number\n softness: number\n /** The luminous river of gas that sweeps across the frame. */\n band: number\n bandAngle: number\n bandOffset: number\n bandWidth: number\n haze: number\n // stars\n stars: number\n twinkle: number\n starDrift: number\n sparkles: number\n seed: number\n spikeWidth: number\n // planet\n planet: boolean\n planetX: number\n planetY: number\n planetRadius: number\n // the pointer\n parallax: number\n lens: number\n lensRadius: number\n lensPush: number\n rippleSpeed: number\n // post\n speed: number\n vignette: number\n grain: number\n // palette, dark to bright. Any CSS colour, including var(--token) and color-mix().\n voidColor: string\n hazeColor: string\n duskColor: string\n wineColor: string\n crimsonColor: string\n hotColor: string\n starColor: string\n}",
489
+ "signature": {
490
+ "properties": [
491
+ {
492
+ "key": "pixel",
493
+ "value": {
494
+ "name": "number",
495
+ "required": true
496
+ },
497
+ "description": "CSS px per pixel cell. Everything snaps to this."
498
+ },
499
+ {
500
+ "key": "dotMin",
501
+ "value": {
502
+ "name": "number",
503
+ "required": true
504
+ },
505
+ "description": "Dot radius, in cells, where the gas is empty / densest. >0.5 merges dots."
506
+ },
507
+ {
508
+ "key": "dotMax",
509
+ "value": {
510
+ "name": "number",
511
+ "required": true
512
+ }
513
+ },
514
+ {
515
+ "key": "levels",
516
+ "value": {
517
+ "name": "number",
518
+ "required": true
519
+ },
520
+ "description": "Quantisation steps before dithering. Fewer reads more like pixel art."
521
+ },
522
+ {
523
+ "key": "scale",
524
+ "value": {
525
+ "name": "number",
526
+ "required": true
527
+ }
528
+ },
529
+ {
530
+ "key": "warp",
531
+ "value": {
532
+ "name": "number",
533
+ "required": true
534
+ }
535
+ },
536
+ {
537
+ "key": "drift",
538
+ "value": {
539
+ "name": "number",
540
+ "required": true
541
+ }
542
+ },
543
+ {
544
+ "key": "density",
545
+ "value": {
546
+ "name": "number",
547
+ "required": true
548
+ }
549
+ },
550
+ {
551
+ "key": "threshold",
552
+ "value": {
553
+ "name": "number",
554
+ "required": true
555
+ }
556
+ },
557
+ {
558
+ "key": "softness",
559
+ "value": {
560
+ "name": "number",
561
+ "required": true
562
+ }
563
+ },
564
+ {
565
+ "key": "band",
566
+ "value": {
567
+ "name": "number",
568
+ "required": true
569
+ },
570
+ "description": "The luminous river of gas that sweeps across the frame."
571
+ },
572
+ {
573
+ "key": "bandAngle",
574
+ "value": {
575
+ "name": "number",
576
+ "required": true
577
+ }
578
+ },
579
+ {
580
+ "key": "bandOffset",
581
+ "value": {
582
+ "name": "number",
583
+ "required": true
584
+ }
585
+ },
586
+ {
587
+ "key": "bandWidth",
588
+ "value": {
589
+ "name": "number",
590
+ "required": true
591
+ }
592
+ },
593
+ {
594
+ "key": "haze",
595
+ "value": {
596
+ "name": "number",
597
+ "required": true
598
+ }
599
+ },
600
+ {
601
+ "key": "stars",
602
+ "value": {
603
+ "name": "number",
604
+ "required": true
605
+ }
606
+ },
607
+ {
608
+ "key": "twinkle",
609
+ "value": {
610
+ "name": "number",
611
+ "required": true
612
+ }
613
+ },
614
+ {
615
+ "key": "starDrift",
616
+ "value": {
617
+ "name": "number",
618
+ "required": true
619
+ }
620
+ },
621
+ {
622
+ "key": "sparkles",
623
+ "value": {
624
+ "name": "number",
625
+ "required": true
626
+ }
627
+ },
628
+ {
629
+ "key": "seed",
630
+ "value": {
631
+ "name": "number",
632
+ "required": true
633
+ }
634
+ },
635
+ {
636
+ "key": "spikeWidth",
637
+ "value": {
638
+ "name": "number",
639
+ "required": true
640
+ }
641
+ },
642
+ {
643
+ "key": "planet",
644
+ "value": {
645
+ "name": "boolean",
646
+ "required": true
647
+ }
648
+ },
649
+ {
650
+ "key": "planetX",
651
+ "value": {
652
+ "name": "number",
653
+ "required": true
654
+ }
655
+ },
656
+ {
657
+ "key": "planetY",
658
+ "value": {
659
+ "name": "number",
660
+ "required": true
661
+ }
662
+ },
663
+ {
664
+ "key": "planetRadius",
665
+ "value": {
666
+ "name": "number",
667
+ "required": true
668
+ }
669
+ },
670
+ {
671
+ "key": "parallax",
672
+ "value": {
673
+ "name": "number",
674
+ "required": true
675
+ }
676
+ },
677
+ {
678
+ "key": "lens",
679
+ "value": {
680
+ "name": "number",
681
+ "required": true
682
+ }
683
+ },
684
+ {
685
+ "key": "lensRadius",
686
+ "value": {
687
+ "name": "number",
688
+ "required": true
689
+ }
690
+ },
691
+ {
692
+ "key": "lensPush",
693
+ "value": {
694
+ "name": "number",
695
+ "required": true
696
+ }
697
+ },
698
+ {
699
+ "key": "rippleSpeed",
700
+ "value": {
701
+ "name": "number",
702
+ "required": true
703
+ }
704
+ },
705
+ {
706
+ "key": "speed",
707
+ "value": {
708
+ "name": "number",
709
+ "required": true
710
+ }
711
+ },
712
+ {
713
+ "key": "vignette",
714
+ "value": {
715
+ "name": "number",
716
+ "required": true
717
+ }
718
+ },
719
+ {
720
+ "key": "grain",
721
+ "value": {
722
+ "name": "number",
723
+ "required": true
724
+ }
725
+ },
726
+ {
727
+ "key": "voidColor",
728
+ "value": {
729
+ "name": "string",
730
+ "required": true
731
+ }
732
+ },
733
+ {
734
+ "key": "hazeColor",
735
+ "value": {
736
+ "name": "string",
737
+ "required": true
738
+ }
739
+ },
740
+ {
741
+ "key": "duskColor",
742
+ "value": {
743
+ "name": "string",
744
+ "required": true
745
+ }
746
+ },
747
+ {
748
+ "key": "wineColor",
749
+ "value": {
750
+ "name": "string",
751
+ "required": true
752
+ }
753
+ },
754
+ {
755
+ "key": "crimsonColor",
756
+ "value": {
757
+ "name": "string",
758
+ "required": true
759
+ }
760
+ },
761
+ {
762
+ "key": "hotColor",
763
+ "value": {
764
+ "name": "string",
765
+ "required": true
766
+ }
767
+ },
768
+ {
769
+ "key": "starColor",
770
+ "value": {
771
+ "name": "string",
772
+ "required": true
773
+ }
774
+ }
775
+ ]
776
+ }
777
+ }
778
+ ],
779
+ "raw": "Partial<NebulaParams>"
780
+ },
781
+ "description": "Overrides layered over the preset."
782
+ },
783
+ "interactive": {
784
+ "required": false,
785
+ "tsType": {
786
+ "name": "boolean"
787
+ },
788
+ "description": "Pointer lights the gas and parallaxes the sky; click drops a sparkle.",
789
+ "defaultValue": {
790
+ "value": "true",
791
+ "computed": false
792
+ }
793
+ },
794
+ "touch": {
795
+ "required": false,
796
+ "tsType": {
797
+ "name": "union",
798
+ "raw": "\"scroll\" | \"draw\"",
799
+ "elements": [
800
+ {
801
+ "name": "literal",
802
+ "value": "\"scroll\""
803
+ },
804
+ {
805
+ "name": "literal",
806
+ "value": "\"draw\""
807
+ }
808
+ ]
809
+ },
810
+ "description": "\"scroll\" keeps page scrolling on touch; \"draw\" takes the gesture.",
811
+ "defaultValue": {
812
+ "value": "\"scroll\"",
813
+ "computed": false
814
+ }
815
+ },
816
+ "maxDpr": {
817
+ "required": false,
818
+ "tsType": {
819
+ "name": "number"
820
+ },
821
+ "description": "Device-pixel-ratio cap. The shader is per-pixel, so 2 is plenty.",
822
+ "defaultValue": {
823
+ "value": "2",
824
+ "computed": false
825
+ }
826
+ },
827
+ "children": {
828
+ "required": false,
829
+ "tsType": {
830
+ "name": "ReactReactNode",
831
+ "raw": "React.ReactNode"
832
+ },
833
+ "description": "Content laid over the sky. Pointer events pass through unless opted in."
834
+ }
835
+ }
836
+ },
837
+ "stories": [
838
+ {
839
+ "id": "ui-halftone-nebula--default",
840
+ "name": "Default",
841
+ "snippet": "const Default = () => <HalftoneNebula height=\"32rem\" preset=\"brand\" interactive />;"
842
+ },
843
+ {
844
+ "id": "ui-halftone-nebula--crimson",
845
+ "name": "Crimson",
846
+ "snippet": "const Crimson = () => <HalftoneNebula height=\"32rem\" preset=\"crimson\" interactive />;"
847
+ },
848
+ {
849
+ "id": "ui-halftone-nebula--static",
850
+ "name": "Static",
851
+ "snippet": "const Static = () => <HalftoneNebula height=\"32rem\" preset=\"brand\" interactive={false} />;"
852
+ }
853
+ ],
854
+ "import": "import { HalftoneNebula } from '@voriel_salut/ds';"
855
+ },
856
+ "ui-input": {
857
+ "id": "ui-input",
858
+ "name": "Input",
859
+ "path": "./src/components/ui/input.stories.tsx",
860
+ "jsDocTags": {},
861
+ "reactDocgen": {
862
+ "description": "",
863
+ "methods": [],
864
+ "displayName": "Input",
865
+ "definedInFile": "src/components/ui/input.tsx",
866
+ "actualName": "Input",
867
+ "exportName": "Input"
868
+ },
869
+ "stories": [
870
+ {
871
+ "id": "ui-input--default",
872
+ "name": "Default",
873
+ "snippet": "const Default = () => <Input placeholder=\"you@example.com\" type=\"email\" disabled={false} />;"
874
+ },
875
+ {
876
+ "id": "ui-input--with-label",
877
+ "name": "With label",
878
+ "snippet": "const WithLabel = () => <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"input-email\">Email</Label>\n <Input\n id=\"input-email\"\n placeholder=\"you@example.com\"\n type=\"email\"\n disabled={false} />\n</div>;"
879
+ },
880
+ {
881
+ "id": "ui-input--disabled",
882
+ "name": "Disabled",
883
+ "snippet": "const Disabled = () => <Input placeholder=\"you@example.com\" type=\"email\" disabled />;"
884
+ },
885
+ {
886
+ "id": "ui-input--invalid",
887
+ "name": "Invalid",
888
+ "snippet": "const Invalid = () => <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"input-invalid\">Email</Label>\n <Input\n id=\"input-invalid\"\n aria-invalid\n defaultValue=\"not-an-email\"\n placeholder=\"you@example.com\"\n type=\"email\"\n disabled={false} />\n <p className=\"text-xs text-destructive\">Enter a valid email address.</p>\n</div>;"
889
+ },
890
+ {
891
+ "id": "ui-input--file",
892
+ "name": "File",
893
+ "snippet": "const File = () => <Input placeholder={undefined} type=\"file\" disabled={false} />;"
894
+ }
895
+ ],
896
+ "import": "import { Input, Label } from '@voriel_salut/ds';"
897
+ },
898
+ "ui-label": {
899
+ "id": "ui-label",
900
+ "name": "Label",
901
+ "path": "./src/components/ui/label.stories.tsx",
902
+ "jsDocTags": {},
903
+ "reactDocgen": {
904
+ "description": "",
905
+ "methods": [],
906
+ "displayName": "Label",
907
+ "definedInFile": "src/components/ui/label.tsx",
908
+ "actualName": "Label",
909
+ "exportName": "Label"
910
+ },
911
+ "stories": [
912
+ {
913
+ "id": "ui-label--default",
914
+ "name": "Default",
915
+ "snippet": "const Default = () => <Label>Email</Label>;"
916
+ },
917
+ {
918
+ "id": "ui-label--with-input",
919
+ "name": "With input",
920
+ "snippet": "const WithInput = () => <div className=\"flex w-72 flex-col gap-2\">\n <Label htmlFor=\"label-email\">Email</Label>\n <Input id=\"label-email\" type=\"email\" placeholder=\"you@example.com\" />\n</div>;"
921
+ }
922
+ ],
923
+ "import": "import { Input, Label } from '@voriel_salut/ds';"
924
+ },
925
+ "ui-tabs": {
926
+ "id": "ui-tabs",
927
+ "name": "Tabs",
928
+ "path": "./src/components/ui/tabs.stories.tsx",
929
+ "jsDocTags": {},
930
+ "reactDocgen": {
931
+ "description": "",
932
+ "methods": [],
933
+ "displayName": "Tabs",
934
+ "definedInFile": "src/components/ui/tabs.tsx",
935
+ "actualName": "Tabs",
936
+ "exportName": "Tabs",
937
+ "props": {
938
+ "orientation": {
939
+ "defaultValue": {
940
+ "value": "\"horizontal\"",
941
+ "computed": false
942
+ },
943
+ "required": false
944
+ }
945
+ }
946
+ },
947
+ "stories": [
948
+ {
949
+ "id": "ui-tabs--default",
950
+ "name": "Default",
951
+ "snippet": "const Default = () => <Tabs defaultValue=\"overview\" className=\"w-96\">\n <Example />\n</Tabs>;"
952
+ },
953
+ {
954
+ "id": "ui-tabs--line",
955
+ "name": "Line",
956
+ "snippet": "const Line = () => <Tabs defaultValue=\"overview\" className=\"w-96\">\n <Example variant=\"line\" />\n</Tabs>;"
957
+ },
958
+ {
959
+ "id": "ui-tabs--vertical",
960
+ "name": "Vertical",
961
+ "snippet": "const Vertical = () => <Tabs defaultValue=\"overview\" orientation=\"vertical\" className=\"w-96\">\n <Example />\n</Tabs>;"
962
+ }
963
+ ],
964
+ "import": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@voriel_salut/ds';"
965
+ },
966
+ "ui-tooltip": {
967
+ "id": "ui-tooltip",
968
+ "name": "Tooltip",
969
+ "path": "./src/components/ui/tooltip.stories.tsx",
970
+ "jsDocTags": {},
971
+ "reactDocgen": {
972
+ "description": "",
973
+ "methods": [],
974
+ "displayName": "Tooltip",
975
+ "definedInFile": "src/components/ui/tooltip.tsx",
976
+ "actualName": "Tooltip",
977
+ "exportName": "Tooltip"
978
+ },
979
+ "stories": [
980
+ {
981
+ "id": "ui-tooltip--default",
982
+ "name": "Default",
983
+ "snippet": "const Default = () => <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"outline\">Hover me</Button>\n </TooltipTrigger>\n <TooltipContent>A tooltip</TooltipContent>\n</Tooltip>;"
984
+ },
985
+ {
986
+ "id": "ui-tooltip--sides",
987
+ "name": "Sides",
988
+ "snippet": "const Sides = () => (\n <div className=\"grid grid-cols-2 gap-4\">\n {([\"top\", \"right\", \"bottom\", \"left\"] as const).map((side) => (\n <Tooltip key={side}>\n <TooltipTrigger asChild>\n <Button variant=\"outline\">{side}</Button>\n </TooltipTrigger>\n <TooltipContent side={side}>Shown on the {side}</TooltipContent>\n </Tooltip>\n ))}\n </div>\n);"
989
+ },
990
+ {
991
+ "id": "ui-tooltip--open",
992
+ "name": "Open",
993
+ "error": {
994
+ "name": "SyntaxError",
995
+ "message": "Expected render to be an arrow function or function expression\n 41 | export const Open: Story = {\n 42 | args: { defaultOpen: true },\n> 43 | render: Default.render,\n | ^^^^^^^^^^^^^^\n 44 | }\n 45 |"
996
+ }
997
+ }
998
+ ],
999
+ "import": "import { Button, Tooltip, TooltipContent, TooltipTrigger } from '@voriel_salut/ds';"
1000
+ }
1001
+ },
1002
+ "meta": {
1003
+ "docgen": "react-docgen",
1004
+ "durationMs": 140
1005
+ },
1006
+ "package": "@voriel_salut/ds",
1007
+ "version": "0.1.0"
1008
+ }