@loworbitstudio/visor 0.7.0 → 0.9.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/README.md +99 -0
- package/dist/CHANGELOG.json +37 -1
- package/dist/index.js +1365 -300
- package/dist/registry.json +183 -2
- package/dist/visor-manifest.json +741 -5
- package/package.json +2 -2
package/dist/visor-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "0.4.0",
|
|
3
|
-
"generated_at": "2026-05-
|
|
3
|
+
"generated_at": "2026-05-12T02:11:40.675Z",
|
|
4
4
|
"components": {
|
|
5
5
|
"accessibility-specimen": {
|
|
6
6
|
"category": "specimen",
|
|
@@ -469,6 +469,226 @@
|
|
|
469
469
|
],
|
|
470
470
|
"example": "<Banner intent=\"warning\" position=\"sticky\">\n <BannerTitle>Scheduled maintenance</BannerTitle>\n <BannerDescription>The system will be down Saturday 2am-4am EST.</BannerDescription>\n <BannerAction>\n <Button variant=\"outline\" size=\"sm\">Learn more</Button>\n </BannerAction>\n</Banner>\n"
|
|
471
471
|
},
|
|
472
|
+
"bento-grid": {
|
|
473
|
+
"category": "data-display",
|
|
474
|
+
"description": "An asymmetric tile grid primitive with full/half span variants, per-tile aspect ratios, and contain/cover media fit modes. Designed for portfolio, case-study, and showcase layouts.",
|
|
475
|
+
"when_to_use": [
|
|
476
|
+
"Asymmetric portfolio or case-study grids where tiles have different visual weights",
|
|
477
|
+
"Hero-style layouts mixing full-width feature tiles with paired half-width tiles",
|
|
478
|
+
"Showcase grids with varied aspect ratios (21:9, 2:1, 4:3) and image fit modes",
|
|
479
|
+
"Marketing pages using Apple-style \"bento\" layouts",
|
|
480
|
+
"Any grid where tiles intentionally have different sizes or spans"
|
|
481
|
+
],
|
|
482
|
+
"when_not_to_use": [
|
|
483
|
+
"Symmetric uniform grids where all tiles are the same size (use card-grid instead)",
|
|
484
|
+
"Simple two-column content layouts (use CSS grid or flexbox directly)",
|
|
485
|
+
"List-style data displays (use Table or DataTable)",
|
|
486
|
+
"Pinterest-style masonry layouts where tile heights vary based on content"
|
|
487
|
+
],
|
|
488
|
+
"props": [
|
|
489
|
+
{
|
|
490
|
+
"name": "cols",
|
|
491
|
+
"type": "number | { base: number; sm?: number; md?: number; lg?: number; xl?: number }",
|
|
492
|
+
"default": "2",
|
|
493
|
+
"description": "Number of grid columns. Accepts a plain number or a responsive breakpoint map."
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"name": "gap",
|
|
497
|
+
"type": "string",
|
|
498
|
+
"default": "\"4\"",
|
|
499
|
+
"description": "Gap between tiles as a spacing token suffix. E.g. '4' resolves to var(--spacing-4)."
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
"name": "reveal",
|
|
503
|
+
"type": "boolean",
|
|
504
|
+
"default": "false",
|
|
505
|
+
"description": "Fade + rise each tile on viewport entry, staggered by DOM order. Suppressed under prefers-reduced-motion."
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"name": "revealStepMs",
|
|
509
|
+
"type": "number",
|
|
510
|
+
"default": "110",
|
|
511
|
+
"description": "Per-tile delay in milliseconds. Each tile's actual delay is revealStepMs × index."
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"name": "revealThreshold",
|
|
515
|
+
"type": "number",
|
|
516
|
+
"default": "0.2",
|
|
517
|
+
"description": "IntersectionObserver threshold for the entrance trigger."
|
|
518
|
+
}
|
|
519
|
+
],
|
|
520
|
+
"sub_components": [
|
|
521
|
+
{
|
|
522
|
+
"name": "BentoTile",
|
|
523
|
+
"description": "Individual grid tile. Renders as <article> by default, or <a> when href is provided.",
|
|
524
|
+
"props": [
|
|
525
|
+
{
|
|
526
|
+
"name": "layout",
|
|
527
|
+
"type": "\"stacked\" | \"overlay\"",
|
|
528
|
+
"default": "\"stacked\"",
|
|
529
|
+
"description": "Visual layout. stacked (default): media on top with its own aspect ratio, body below as a sibling. overlay: media fills the tile (which carries the aspect ratio), body floats over the lower portion."
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"name": "span",
|
|
533
|
+
"type": "\"full\" | \"half\" | number",
|
|
534
|
+
"default": "\"half\"",
|
|
535
|
+
"description": "Column span: full (1/-1), half (1 col), or a numeric span count."
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"name": "aspect",
|
|
539
|
+
"type": "\"21/9\" | \"2/1\" | \"4/3\" | \"1/1\" | string",
|
|
540
|
+
"description": "Aspect ratio. In stacked mode it shapes the media; in overlay mode it shapes the entire tile root."
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
"name": "fit",
|
|
544
|
+
"type": "\"cover\" | \"contain\"",
|
|
545
|
+
"default": "\"cover\"",
|
|
546
|
+
"description": "Media fit mode. contain adds a surface-card background plate for logos/portraits."
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"name": "href",
|
|
550
|
+
"type": "string",
|
|
551
|
+
"description": "When provided, renders the tile root as an anchor element."
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"name": "target",
|
|
555
|
+
"type": "string",
|
|
556
|
+
"description": "Link target (e.g. _blank). Only relevant when href is set."
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"name": "rel",
|
|
560
|
+
"type": "string",
|
|
561
|
+
"description": "Link rel attribute. Defaults to 'noopener noreferrer' when target is _blank."
|
|
562
|
+
}
|
|
563
|
+
]
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
"name": "BentoTileMedia",
|
|
567
|
+
"description": "Image element. Zooms 1.04× on tile hover (suppressed in fit=\"contain\" mode).",
|
|
568
|
+
"props": [
|
|
569
|
+
{
|
|
570
|
+
"name": "src",
|
|
571
|
+
"type": "string",
|
|
572
|
+
"required": true,
|
|
573
|
+
"description": "Image source URL."
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
"name": "alt",
|
|
577
|
+
"type": "string",
|
|
578
|
+
"required": true,
|
|
579
|
+
"description": "Image alt text for accessibility."
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
"name": "loading",
|
|
583
|
+
"type": "\"lazy\" | \"eager\"",
|
|
584
|
+
"default": "\"lazy\"",
|
|
585
|
+
"description": "Native image loading strategy."
|
|
586
|
+
}
|
|
587
|
+
]
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"name": "BentoTileBody",
|
|
591
|
+
"description": "Body container. Stretches to fill the tile in stacked mode so tiles in the same row share height."
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"name": "BentoTileMeta",
|
|
595
|
+
"description": "Eyebrow row — uppercase, tracked, with · separators between items. Accepts an `items` array shorthand or arbitrary children.",
|
|
596
|
+
"props": [
|
|
597
|
+
{
|
|
598
|
+
"name": "items",
|
|
599
|
+
"type": "ReactNode[]",
|
|
600
|
+
"description": "Array of items rendered as spans with `·` separators between siblings. When omitted, children are used as-is."
|
|
601
|
+
}
|
|
602
|
+
]
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"name": "BentoTileTitle",
|
|
606
|
+
"description": "Display heading with optional hover arrow that nudges on tile hover.",
|
|
607
|
+
"props": [
|
|
608
|
+
{
|
|
609
|
+
"name": "as",
|
|
610
|
+
"type": "\"h2\" | \"h3\" | \"h4\"",
|
|
611
|
+
"default": "\"h3\"",
|
|
612
|
+
"description": "Heading element."
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"name": "showArrow",
|
|
616
|
+
"type": "boolean",
|
|
617
|
+
"default": "false",
|
|
618
|
+
"description": "Render a ↗ arrow after the title; nudges on tile hover."
|
|
619
|
+
}
|
|
620
|
+
]
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
"name": "BentoTileDescription",
|
|
624
|
+
"description": "Muted body text with max-width 56ch for comfortable reading. Renders as <div> (not <p>) so MDX-authored multi-line children don't create invalid <p>-in-<p> nesting."
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
"name": "BentoTileFigure",
|
|
628
|
+
"description": "Non-image hero slot — drop-in replacement for BentoTileMedia when the tile's hero is a chart, large number, or custom JSX. Inherits the same hover scale + layout-mode positioning as the media slot."
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"name": "BentoTileHeadline",
|
|
632
|
+
"description": "Larger display heading (clamp 2rem → 3.5rem) for tiles where the heading is the primary content (manifesto / statement / headline tiles).",
|
|
633
|
+
"props": [
|
|
634
|
+
{
|
|
635
|
+
"name": "as",
|
|
636
|
+
"type": "\"h1\" | \"h2\" | \"h3\"",
|
|
637
|
+
"default": "\"h2\"",
|
|
638
|
+
"description": "Heading element."
|
|
639
|
+
}
|
|
640
|
+
]
|
|
641
|
+
}
|
|
642
|
+
],
|
|
643
|
+
"dependencies": [
|
|
644
|
+
"@loworbitstudio/visor-core"
|
|
645
|
+
],
|
|
646
|
+
"tokens_used": [
|
|
647
|
+
"--bento-cols",
|
|
648
|
+
"--bento-cols-lg",
|
|
649
|
+
"--bento-cols-md",
|
|
650
|
+
"--bento-cols-sm",
|
|
651
|
+
"--bento-cols-xl",
|
|
652
|
+
"--bento-gap",
|
|
653
|
+
"--bento-reveal-step",
|
|
654
|
+
"--bento-tile-aspect",
|
|
655
|
+
"--bento-tile-body-gap",
|
|
656
|
+
"--bento-tile-body-padding-x",
|
|
657
|
+
"--bento-tile-body-padding-y",
|
|
658
|
+
"--bento-tile-lift-hover",
|
|
659
|
+
"--bento-tile-media-scale-hover",
|
|
660
|
+
"--bento-tile-radius",
|
|
661
|
+
"--bento-tile-span",
|
|
662
|
+
"--border-focus",
|
|
663
|
+
"--focus-ring-offset",
|
|
664
|
+
"--focus-ring-width",
|
|
665
|
+
"--font-size-sm",
|
|
666
|
+
"--font-weight-bold",
|
|
667
|
+
"--font-weight-medium",
|
|
668
|
+
"--font-weight-normal",
|
|
669
|
+
"--line-height-tight",
|
|
670
|
+
"--motion-duration-normal",
|
|
671
|
+
"--motion-duration-slow",
|
|
672
|
+
"--motion-easing-default",
|
|
673
|
+
"--motion-easing-enter",
|
|
674
|
+
"--overlay-bg",
|
|
675
|
+
"--radius-lg",
|
|
676
|
+
"--reveal-index",
|
|
677
|
+
"--shadow-md",
|
|
678
|
+
"--shadow-sm",
|
|
679
|
+
"--spacing-1",
|
|
680
|
+
"--spacing-2",
|
|
681
|
+
"--spacing-3",
|
|
682
|
+
"--spacing-4",
|
|
683
|
+
"--spacing-5",
|
|
684
|
+
"--surface-card",
|
|
685
|
+
"--surface-subtle",
|
|
686
|
+
"--text-primary",
|
|
687
|
+
"--text-secondary",
|
|
688
|
+
"--text-tertiary"
|
|
689
|
+
],
|
|
690
|
+
"example": "<BentoGrid cols={{ base: 1, md: 2 }} gap=\"4\">\n <BentoTile span=\"full\" aspect=\"21/9\">\n <BentoTileMedia src=\"/projects/knowmentum.jpg\" alt=\"Knowmentum project hero\" />\n <BentoTileBody>\n <h3>Knowmentum</h3>\n <p>Knowledge platform for high-performers.</p>\n </BentoTileBody>\n </BentoTile>\n\n <BentoTile span=\"half\" aspect=\"2/1\" href=\"https://animal.nyc/\" target=\"_blank\">\n <BentoTileMedia src=\"/projects/animal-nyc.jpg\" alt=\"Animal NYC\" />\n <BentoTileBody>\n <h3>Animal NYC</h3>\n </BentoTileBody>\n </BentoTile>\n\n <BentoTile span=\"half\" aspect=\"2/1\" href=\"https://animal.la/\" target=\"_blank\">\n <BentoTileMedia src=\"/projects/animal-la.jpg\" alt=\"Animal LA\" />\n <BentoTileBody>\n <h3>Animal LA</h3>\n </BentoTileBody>\n </BentoTile>\n\n <BentoTile span=\"half\" aspect=\"4/3\" fit=\"contain\">\n <BentoTileMedia src=\"/logos/client-logo.png\" alt=\"Client logo\" />\n <BentoTileBody>\n <p>Natural-fit logo tile</p>\n </BentoTileBody>\n </BentoTile>\n</BentoGrid>\n"
|
|
691
|
+
},
|
|
472
692
|
"breadcrumb": {
|
|
473
693
|
"category": "navigation",
|
|
474
694
|
"description": "A breadcrumb navigation component showing the user's location within a page hierarchy.",
|
|
@@ -1061,6 +1281,154 @@
|
|
|
1061
1281
|
],
|
|
1062
1282
|
"example": "<div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n <Checkbox id=\"terms\" />\n <Label htmlFor=\"terms\">Accept terms and conditions</Label>\n</div>\n"
|
|
1063
1283
|
},
|
|
1284
|
+
"chip": {
|
|
1285
|
+
"category": "form",
|
|
1286
|
+
"description": "Selectable chip primitive for suggestion, tag, and filter patterns with selected/unselected states and size variants. Maps to React ToggleGroup.",
|
|
1287
|
+
"when_to_use": [
|
|
1288
|
+
"Displaying filterable tag or category options the user can toggle on/off",
|
|
1289
|
+
"Suggestion rows (search autocomplete, style recommendations)",
|
|
1290
|
+
"Multi-select filter bars where individual options are toggled independently",
|
|
1291
|
+
"Any UI pattern that maps to a \"toggle group\" of labelled options"
|
|
1292
|
+
],
|
|
1293
|
+
"when_not_to_use": [
|
|
1294
|
+
"Single binary toggle (use Switch or Checkbox)",
|
|
1295
|
+
"Navigation tabs or route selectors (use TabBar)",
|
|
1296
|
+
"Dismissible labels that can be removed from a list (use a deletable tag/badge)",
|
|
1297
|
+
"Triggering an action rather than selecting a state (use Button)"
|
|
1298
|
+
],
|
|
1299
|
+
"variants": {
|
|
1300
|
+
"variant": [
|
|
1301
|
+
"default",
|
|
1302
|
+
"outlined"
|
|
1303
|
+
],
|
|
1304
|
+
"size": [
|
|
1305
|
+
"sm",
|
|
1306
|
+
"md",
|
|
1307
|
+
"lg"
|
|
1308
|
+
]
|
|
1309
|
+
},
|
|
1310
|
+
"props": [
|
|
1311
|
+
{
|
|
1312
|
+
"name": "variant",
|
|
1313
|
+
"type": "\"default\" | \"outlined\"",
|
|
1314
|
+
"default": "\"default\""
|
|
1315
|
+
},
|
|
1316
|
+
{
|
|
1317
|
+
"name": "size",
|
|
1318
|
+
"type": "\"sm\" | \"md\" | \"lg\"",
|
|
1319
|
+
"default": "\"md\""
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
"name": "avatar",
|
|
1323
|
+
"type": "React.ReactNode",
|
|
1324
|
+
"optional": true
|
|
1325
|
+
},
|
|
1326
|
+
{
|
|
1327
|
+
"name": "leadingIcon",
|
|
1328
|
+
"type": "React.ReactNode",
|
|
1329
|
+
"optional": true
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"name": "label",
|
|
1333
|
+
"type": "React.ReactNode",
|
|
1334
|
+
"optional": true
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"name": "onDeleted",
|
|
1338
|
+
"type": "() => void",
|
|
1339
|
+
"optional": true
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
"name": "deleteIcon",
|
|
1343
|
+
"type": "React.ReactNode",
|
|
1344
|
+
"optional": true
|
|
1345
|
+
},
|
|
1346
|
+
{
|
|
1347
|
+
"name": "deleteLabel",
|
|
1348
|
+
"type": "string",
|
|
1349
|
+
"default": "\"Remove\""
|
|
1350
|
+
}
|
|
1351
|
+
],
|
|
1352
|
+
"sub_components": [
|
|
1353
|
+
{
|
|
1354
|
+
"name": "ChoiceChip",
|
|
1355
|
+
"element": "button",
|
|
1356
|
+
"description": "Radio-style single-select chip. Renders with role=\"radio\" and aria-checked. Use inside a ChipGroup with type=\"single\".",
|
|
1357
|
+
"props": [
|
|
1358
|
+
{
|
|
1359
|
+
"name": "selected",
|
|
1360
|
+
"type": "boolean",
|
|
1361
|
+
"default": "false"
|
|
1362
|
+
},
|
|
1363
|
+
{
|
|
1364
|
+
"name": "onPressed",
|
|
1365
|
+
"type": "() => void",
|
|
1366
|
+
"optional": true
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
"name": "value",
|
|
1370
|
+
"type": "string",
|
|
1371
|
+
"optional": true
|
|
1372
|
+
}
|
|
1373
|
+
]
|
|
1374
|
+
},
|
|
1375
|
+
{
|
|
1376
|
+
"name": "FilterChip",
|
|
1377
|
+
"element": "button",
|
|
1378
|
+
"description": "Toggle-style multi-select chip. Renders with role=\"checkbox\" and aria-checked. Use inside a ChipGroup with type=\"multiple\".",
|
|
1379
|
+
"props": [
|
|
1380
|
+
{
|
|
1381
|
+
"name": "selected",
|
|
1382
|
+
"type": "boolean",
|
|
1383
|
+
"default": "false"
|
|
1384
|
+
},
|
|
1385
|
+
{
|
|
1386
|
+
"name": "onPressed",
|
|
1387
|
+
"type": "() => void",
|
|
1388
|
+
"optional": true
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
"name": "value",
|
|
1392
|
+
"type": "string",
|
|
1393
|
+
"optional": true
|
|
1394
|
+
}
|
|
1395
|
+
]
|
|
1396
|
+
}
|
|
1397
|
+
],
|
|
1398
|
+
"dependencies": [
|
|
1399
|
+
"class-variance-authority",
|
|
1400
|
+
"@phosphor-icons/react"
|
|
1401
|
+
],
|
|
1402
|
+
"tokens_used": [
|
|
1403
|
+
"--border-default",
|
|
1404
|
+
"--border-focus",
|
|
1405
|
+
"--focus-ring-offset",
|
|
1406
|
+
"--focus-ring-width",
|
|
1407
|
+
"--font-body",
|
|
1408
|
+
"--font-size-base",
|
|
1409
|
+
"--font-size-sm",
|
|
1410
|
+
"--font-size-xs",
|
|
1411
|
+
"--font-weight-medium",
|
|
1412
|
+
"--motion-duration-150",
|
|
1413
|
+
"--motion-easing-default",
|
|
1414
|
+
"--opacity-40",
|
|
1415
|
+
"--radius-full",
|
|
1416
|
+
"--spacing-1",
|
|
1417
|
+
"--spacing-2",
|
|
1418
|
+
"--spacing-3",
|
|
1419
|
+
"--spacing-4",
|
|
1420
|
+
"--stroke-width-thin",
|
|
1421
|
+
"--surface-accent-default",
|
|
1422
|
+
"--surface-accent-subtle",
|
|
1423
|
+
"--surface-card",
|
|
1424
|
+
"--surface-interactive-hover",
|
|
1425
|
+
"--surface-muted",
|
|
1426
|
+
"--text-link",
|
|
1427
|
+
"--text-primary",
|
|
1428
|
+
"--text-secondary"
|
|
1429
|
+
],
|
|
1430
|
+
"example": "<Chip label=\"React\" />\n<Chip label=\"Featured\" onDeleted={() => removeTag(\"featured\")} />\n<ChoiceChip label=\"Compact\" selected={density === \"compact\"} onPressed={() => setDensity(\"compact\")} />\n<FilterChip label=\"Events\" selected={filters.includes(\"events\")} onPressed={() => toggleFilter(\"events\")} />\n"
|
|
1431
|
+
},
|
|
1064
1432
|
"code-block": {
|
|
1065
1433
|
"category": "typography",
|
|
1066
1434
|
"description": "A lightweight code display component with optional line numbers, copy-to-clipboard, and language badge.",
|
|
@@ -2755,7 +3123,7 @@
|
|
|
2755
3123
|
"--surface-card",
|
|
2756
3124
|
"--surface-muted",
|
|
2757
3125
|
"--text-primary",
|
|
2758
|
-
"--text-
|
|
3126
|
+
"--text-secondary"
|
|
2759
3127
|
],
|
|
2760
3128
|
"example": "<FontShowcase\n token=\"--font-heading\"\n role=\"Heading & Body\"\n familyName=\"Satoshi\"\n weights={[{ label: \"Regular\", value: 400 }, { label: \"Bold\", value: 700 }]}\n/>\n"
|
|
2761
3129
|
},
|
|
@@ -3364,6 +3732,98 @@
|
|
|
3364
3732
|
],
|
|
3365
3733
|
"example": "<Lightbox\n images={[\n { src: \"/photo-1.jpg\", alt: \"Beach sunset\" },\n { src: \"/photo-2.jpg\", alt: \"Mountain view\" },\n ]}\n open={isOpen}\n onOpenChange={setIsOpen}\n>\n <LightboxTrigger>\n <button>View gallery</button>\n </LightboxTrigger>\n <LightboxContent />\n</Lightbox>\n"
|
|
3366
3734
|
},
|
|
3735
|
+
"marquee": {
|
|
3736
|
+
"category": "data-display",
|
|
3737
|
+
"description": "A multi-band counter-flow infinite-scroll primitive for continuous animated content strips.",
|
|
3738
|
+
"when_to_use": [
|
|
3739
|
+
"Trusted-by logo strips on marketing / landing pages",
|
|
3740
|
+
"News tickers or announcement banners that cycle continuously",
|
|
3741
|
+
"Tag clouds or label lists that benefit from animated browsing",
|
|
3742
|
+
"Feature highlights that need ambient motion without user interaction",
|
|
3743
|
+
"Counter-flow dual-band patterns that convey momentum and volume"
|
|
3744
|
+
],
|
|
3745
|
+
"when_not_to_use": [
|
|
3746
|
+
"Paginated or interactive content browsing (use Carousel)",
|
|
3747
|
+
"Content that users need to read or click (pause-on-hover helps, but prefer static lists)",
|
|
3748
|
+
"Environments where animation is not appropriate (prefers-reduced-motion renders static)",
|
|
3749
|
+
"Primary navigation or critical actions (animation reduces discoverability)"
|
|
3750
|
+
],
|
|
3751
|
+
"props": [
|
|
3752
|
+
{
|
|
3753
|
+
"name": "bands",
|
|
3754
|
+
"type": "MarqueeBand[]",
|
|
3755
|
+
"description": "Multi-band configuration array. When provided, top-level items/durationSec/separator are ignored.",
|
|
3756
|
+
"default": "undefined"
|
|
3757
|
+
},
|
|
3758
|
+
{
|
|
3759
|
+
"name": "items",
|
|
3760
|
+
"type": "ReactNode[]",
|
|
3761
|
+
"description": "Single-band shorthand: items to scroll. Used when bands is not provided.",
|
|
3762
|
+
"default": "undefined"
|
|
3763
|
+
},
|
|
3764
|
+
{
|
|
3765
|
+
"name": "durationSec",
|
|
3766
|
+
"type": "number",
|
|
3767
|
+
"description": "Duration of one full scroll cycle in seconds (single-band shorthand). Defaults to 40s so descender-rich items at marketing-display sizes have a calm, readable scroll. For ticker-style strips at body-text size, pass a lower value (e.g. 20).",
|
|
3768
|
+
"default": 40
|
|
3769
|
+
},
|
|
3770
|
+
{
|
|
3771
|
+
"name": "separator",
|
|
3772
|
+
"type": "ReactNode | string",
|
|
3773
|
+
"description": "Separator rendered between items (single-band shorthand).",
|
|
3774
|
+
"default": "undefined"
|
|
3775
|
+
},
|
|
3776
|
+
{
|
|
3777
|
+
"name": "pauseOnHover",
|
|
3778
|
+
"type": "boolean",
|
|
3779
|
+
"description": "When true, scrolling pauses on hover.",
|
|
3780
|
+
"default": true
|
|
3781
|
+
},
|
|
3782
|
+
{
|
|
3783
|
+
"name": "gap",
|
|
3784
|
+
"type": "CSSProperties['gap']",
|
|
3785
|
+
"description": "Gap between items. Accepts any CSS gap value.",
|
|
3786
|
+
"default": "var(--spacing-6, 1.5rem)"
|
|
3787
|
+
},
|
|
3788
|
+
{
|
|
3789
|
+
"name": "renderItem",
|
|
3790
|
+
"type": "(item, index) => ReactNode",
|
|
3791
|
+
"description": "Custom render function for each item.",
|
|
3792
|
+
"default": "undefined"
|
|
3793
|
+
},
|
|
3794
|
+
{
|
|
3795
|
+
"name": "renderSeparator",
|
|
3796
|
+
"type": "(separator, index) => ReactNode",
|
|
3797
|
+
"description": "Custom render function for the separator.",
|
|
3798
|
+
"default": "undefined"
|
|
3799
|
+
}
|
|
3800
|
+
],
|
|
3801
|
+
"dependencies": [
|
|
3802
|
+
"@loworbitstudio/visor-core"
|
|
3803
|
+
],
|
|
3804
|
+
"tokens_used": [
|
|
3805
|
+
"--font-size-sm",
|
|
3806
|
+
"--font-weight-medium",
|
|
3807
|
+
"--line-height-normal",
|
|
3808
|
+
"--marquee-duration",
|
|
3809
|
+
"--marquee-fade-width",
|
|
3810
|
+
"--marquee-gap",
|
|
3811
|
+
"--marquee-item-color",
|
|
3812
|
+
"--marquee-item-font-size",
|
|
3813
|
+
"--marquee-item-font-weight",
|
|
3814
|
+
"--marquee-item-letter-spacing",
|
|
3815
|
+
"--marquee-item-line-height",
|
|
3816
|
+
"--marquee-separator-color",
|
|
3817
|
+
"--marquee-separator-font-size",
|
|
3818
|
+
"--motion-easing-linear",
|
|
3819
|
+
"--spacing-12",
|
|
3820
|
+
"--spacing-4",
|
|
3821
|
+
"--spacing-6",
|
|
3822
|
+
"--text-primary",
|
|
3823
|
+
"--text-tertiary"
|
|
3824
|
+
],
|
|
3825
|
+
"example": "<Marquee\n items={['Acme Corp', 'Vercel', 'Low Orbit Studio', 'Figma', 'Notion']}\n durationSec={20}\n separator=\"·\"\n/>\n\n<Marquee\n bands={[\n { items: clients, direction: 'left', durationSec: 40, separator: '●' },\n { items: clientsReversed, direction: 'right', durationSec: 50, separator: '○' },\n ]}\n pauseOnHover\n gap=\"2.5rem\"\n/>\n"
|
|
3826
|
+
},
|
|
3367
3827
|
"menubar": {
|
|
3368
3828
|
"category": "overlay",
|
|
3369
3829
|
"description": "Horizontal menu bar with dropdown menus, keyboard navigation, and full a11y support.",
|
|
@@ -3528,6 +3988,94 @@
|
|
|
3528
3988
|
],
|
|
3529
3989
|
"example": "<MotionDuration durations={[\n { token: \"--motion-duration-200\", name: \"200\", ms: 200 },\n { token: \"--motion-duration-300\", name: \"300\", ms: 300 },\n]} />\n<MotionEasing easings={[\n { token: \"--motion-easing-ease-out\", name: \"ease-out\", value: \"cubic-bezier(0, 0, 0.2, 1)\" },\n]} />\n"
|
|
3530
3990
|
},
|
|
3991
|
+
"name-roster": {
|
|
3992
|
+
"category": "data-display",
|
|
3993
|
+
"description": "A column-flow alphabetical list of named items with a dot-prefix indicator and a highlighted-row variant for featured or owned entries.",
|
|
3994
|
+
"when_to_use": [
|
|
3995
|
+
"Displaying a flat list of clients, contributors, alumni, or team members",
|
|
3996
|
+
"Marketing pages where names need to flow across responsive column counts (1→2→3→4)",
|
|
3997
|
+
"Any list where some entries should be visually distinguished (e.g. LO-owned products, featured clients)",
|
|
3998
|
+
"Directory-style lists where column-flow balance is preferred over strict grid alignment"
|
|
3999
|
+
],
|
|
4000
|
+
"when_not_to_use": [
|
|
4001
|
+
"Lists that require click handlers, selection, or filter/search (different primitive)",
|
|
4002
|
+
"Grouped lists with alphabetical separators (extend with a heading layer)",
|
|
4003
|
+
"Lists that need two-letter avatars or icons next to names",
|
|
4004
|
+
"Short single-item or two-item lists where layout overhead isn't worth it"
|
|
4005
|
+
],
|
|
4006
|
+
"props": [
|
|
4007
|
+
{
|
|
4008
|
+
"name": "columns",
|
|
4009
|
+
"type": "number | { base?: number; sm?: number; md?: number; lg?: number; xl?: number }",
|
|
4010
|
+
"default": "1",
|
|
4011
|
+
"description": "Number of CSS columns. Pass a plain number or a breakpoint map for responsive layouts."
|
|
4012
|
+
},
|
|
4013
|
+
{
|
|
4014
|
+
"name": "sort",
|
|
4015
|
+
"type": "\"alpha\" | \"none\"",
|
|
4016
|
+
"default": "\"none\"",
|
|
4017
|
+
"description": "Sort order. \"alpha\" applies localeCompare client-side; \"none\" preserves insertion order."
|
|
4018
|
+
},
|
|
4019
|
+
{
|
|
4020
|
+
"name": "items",
|
|
4021
|
+
"type": "NameRosterItemData[]",
|
|
4022
|
+
"default": "undefined",
|
|
4023
|
+
"description": "Shorthand array of { name, highlighted? } items. Takes precedence over children when provided."
|
|
4024
|
+
},
|
|
4025
|
+
{
|
|
4026
|
+
"name": "dot",
|
|
4027
|
+
"type": "boolean",
|
|
4028
|
+
"default": "true",
|
|
4029
|
+
"description": "Show the dot-prefix indicator on each item."
|
|
4030
|
+
},
|
|
4031
|
+
{
|
|
4032
|
+
"name": "as",
|
|
4033
|
+
"type": "\"ul\" | \"ol\"",
|
|
4034
|
+
"default": "\"ul\"",
|
|
4035
|
+
"description": "HTML list element to render."
|
|
4036
|
+
}
|
|
4037
|
+
],
|
|
4038
|
+
"dependencies": [
|
|
4039
|
+
"@loworbitstudio/visor-core"
|
|
4040
|
+
],
|
|
4041
|
+
"tokens_used": [
|
|
4042
|
+
"--font-size-sm",
|
|
4043
|
+
"--font-weight-medium",
|
|
4044
|
+
"--font-weight-normal",
|
|
4045
|
+
"--line-height-normal",
|
|
4046
|
+
"--motion-duration-150",
|
|
4047
|
+
"--motion-duration-300",
|
|
4048
|
+
"--motion-easing-default",
|
|
4049
|
+
"--radius-full",
|
|
4050
|
+
"--roster-columns",
|
|
4051
|
+
"--roster-columns-lg",
|
|
4052
|
+
"--roster-columns-md",
|
|
4053
|
+
"--roster-columns-sm",
|
|
4054
|
+
"--roster-columns-xl",
|
|
4055
|
+
"--roster-dot-color",
|
|
4056
|
+
"--roster-dot-color-highlighted",
|
|
4057
|
+
"--roster-dot-color-hover",
|
|
4058
|
+
"--roster-dot-glow-hover",
|
|
4059
|
+
"--roster-dot-size",
|
|
4060
|
+
"--roster-item-color",
|
|
4061
|
+
"--roster-item-color-highlighted",
|
|
4062
|
+
"--roster-item-color-hover",
|
|
4063
|
+
"--roster-item-font-size",
|
|
4064
|
+
"--roster-item-font-weight",
|
|
4065
|
+
"--roster-item-font-weight-highlighted",
|
|
4066
|
+
"--roster-item-hover-transform",
|
|
4067
|
+
"--roster-item-letter-spacing",
|
|
4068
|
+
"--roster-item-line-height",
|
|
4069
|
+
"--spacing-1",
|
|
4070
|
+
"--spacing-2",
|
|
4071
|
+
"--spacing-8",
|
|
4072
|
+
"--surface-accent-default",
|
|
4073
|
+
"--surface-accent-strong",
|
|
4074
|
+
"--text-primary",
|
|
4075
|
+
"--text-secondary"
|
|
4076
|
+
],
|
|
4077
|
+
"example": "{/* Shorthand with responsive columns and highlighted rows */}\n<NameRoster\n columns={{ base: 1, sm: 2, md: 3, lg: 4 }}\n sort=\"alpha\"\n items={[\n { name: 'ANIMAL' },\n { name: 'Blacklight', highlighted: true },\n { name: 'Knowmentum', highlighted: true },\n { name: 'SCRUFF' },\n { name: 'Visor', highlighted: true },\n ]}\n/>\n\n{/* Children mode with anchor nodes */}\n<NameRoster columns={{ base: 1, md: 3 }}>\n <NameRosterItem><a href=\"/clients/scruff\">SCRUFF</a></NameRosterItem>\n <NameRosterItem highlighted><a href=\"/products/visor\">Visor</a></NameRosterItem>\n</NameRoster>\n"
|
|
4078
|
+
},
|
|
3531
4079
|
"navbar": {
|
|
3532
4080
|
"category": "navigation",
|
|
3533
4081
|
"description": "A top navigation bar with brand, content areas, links, and style variants.",
|
|
@@ -5067,6 +5615,172 @@
|
|
|
5067
5615
|
],
|
|
5068
5616
|
"example": "<StatCard\n label=\"Total Revenue\"\n value=\"$48,120\"\n delta={{ value: \"+12.4%\", direction: \"up\", label: \"vs last month\" }}\n/>\n"
|
|
5069
5617
|
},
|
|
5618
|
+
"stat-hero": {
|
|
5619
|
+
"category": "admin",
|
|
5620
|
+
"description": "Hero-scale animated metric banner for flagship KPI display on admin dashboards. A 35/65 grid banner with a large headline value on the left and a full-height animated trendline on the right.",
|
|
5621
|
+
"when_to_use": [
|
|
5622
|
+
"Displaying a single flagship KPI at the top of an admin dashboard",
|
|
5623
|
+
"Showing a headline metric (e.g. total revenue, active users) with an animated trendline",
|
|
5624
|
+
"Anchoring a dashboard page with a visually dominant, brand-colored data visualization",
|
|
5625
|
+
"Providing a \"marquee\" number that sets the tone for the rest of the dashboard"
|
|
5626
|
+
],
|
|
5627
|
+
"when_not_to_use": [
|
|
5628
|
+
"Dense metric grids where multiple KPIs share equal visual weight (use stat-card instead)",
|
|
5629
|
+
"Narrow sidebars or compact panels where the 35/65 layout cannot breathe",
|
|
5630
|
+
"Marketing or landing pages (use a marketing hero pattern instead)",
|
|
5631
|
+
"When you need more than one metric in the same banner (compose multiple stat-cards instead)"
|
|
5632
|
+
],
|
|
5633
|
+
"props": [
|
|
5634
|
+
{
|
|
5635
|
+
"name": "label",
|
|
5636
|
+
"type": "React.ReactNode",
|
|
5637
|
+
"required": true,
|
|
5638
|
+
"description": "Small uppercase label describing the metric, e.g. \"Monthly Recurring Revenue\"."
|
|
5639
|
+
},
|
|
5640
|
+
{
|
|
5641
|
+
"name": "value",
|
|
5642
|
+
"type": "React.ReactNode",
|
|
5643
|
+
"required": true,
|
|
5644
|
+
"description": "Hero-scale metric value, e.g. \"$1,240,000\"."
|
|
5645
|
+
},
|
|
5646
|
+
{
|
|
5647
|
+
"name": "delta",
|
|
5648
|
+
"type": "StatHeroDelta",
|
|
5649
|
+
"description": "Change indicator with value and direction. Drives color and accessible glyph."
|
|
5650
|
+
},
|
|
5651
|
+
{
|
|
5652
|
+
"name": "values",
|
|
5653
|
+
"type": "number[]",
|
|
5654
|
+
"required": true,
|
|
5655
|
+
"description": "Array of numeric data points (min 2) driving the animated trendline SVG."
|
|
5656
|
+
},
|
|
5657
|
+
{
|
|
5658
|
+
"name": "caption",
|
|
5659
|
+
"type": "React.ReactNode",
|
|
5660
|
+
"description": "Optional caption rendered beneath the delta row, e.g. \"vs same period last year\"."
|
|
5661
|
+
}
|
|
5662
|
+
],
|
|
5663
|
+
"dependencies": [],
|
|
5664
|
+
"tokens_used": [
|
|
5665
|
+
"--border-default",
|
|
5666
|
+
"--font-family-heading",
|
|
5667
|
+
"--font-size-lg",
|
|
5668
|
+
"--font-size-sm",
|
|
5669
|
+
"--font-size-xs",
|
|
5670
|
+
"--font-weight-medium",
|
|
5671
|
+
"--font-weight-semibold",
|
|
5672
|
+
"--interactive-primary-bg",
|
|
5673
|
+
"--letter-spacing-tight",
|
|
5674
|
+
"--letter-spacing-wide",
|
|
5675
|
+
"--line-height-normal",
|
|
5676
|
+
"--line-height-tight",
|
|
5677
|
+
"--motion-duration-800",
|
|
5678
|
+
"--motion-easing-ease-out",
|
|
5679
|
+
"--radius-lg",
|
|
5680
|
+
"--shadow-sm",
|
|
5681
|
+
"--spacing-1",
|
|
5682
|
+
"--spacing-20",
|
|
5683
|
+
"--spacing-3",
|
|
5684
|
+
"--spacing-8",
|
|
5685
|
+
"--stat-hero-value-size",
|
|
5686
|
+
"--stroke-width-medium",
|
|
5687
|
+
"--surface-card",
|
|
5688
|
+
"--text-danger",
|
|
5689
|
+
"--text-primary",
|
|
5690
|
+
"--text-secondary",
|
|
5691
|
+
"--text-success",
|
|
5692
|
+
"--text-tertiary"
|
|
5693
|
+
],
|
|
5694
|
+
"example": "<StatHero\n label=\"Monthly Recurring Revenue\"\n value=\"$1,240,000\"\n delta={{ value: \"+18.2%\", direction: \"up\" }}\n values={[820000, 910000, 870000, 980000, 1050000, 1120000, 1240000]}\n caption=\"vs same period last year\"\n/>\n"
|
|
5695
|
+
},
|
|
5696
|
+
"station-spectrum": {
|
|
5697
|
+
"category": "visual-elements",
|
|
5698
|
+
"description": "Animated N-station progress diagram with a hairline rail that draws on scroll-entry and dots that illuminate sequentially via CSS transition delays. Designed for \"process / phases / pipeline\" marketing diagrams.",
|
|
5699
|
+
"when_to_use": [
|
|
5700
|
+
"Illustrating a multi-step process, pipeline, or phased journey on marketing or landing pages",
|
|
5701
|
+
"Showing the stages of an engagement model (e.g. discovery → brand → engineering → infrastructure)",
|
|
5702
|
+
"Animating a sequential workflow diagram that reveals on scroll",
|
|
5703
|
+
"Decorating a section header with a visual representation of sequential phases"
|
|
5704
|
+
],
|
|
5705
|
+
"when_not_to_use": [
|
|
5706
|
+
"When the user needs to navigate between steps — use `stepper` instead",
|
|
5707
|
+
"When stations need icons or custom rendering per dot — extend the component for that use case",
|
|
5708
|
+
"In compact admin layouts where the horizontal rail cannot breathe (use a text list or timeline instead)",
|
|
5709
|
+
"For vertical orientation — this component is horizontal-only in v1"
|
|
5710
|
+
],
|
|
5711
|
+
"props": [
|
|
5712
|
+
{
|
|
5713
|
+
"name": "stations",
|
|
5714
|
+
"type": "Station[]",
|
|
5715
|
+
"required": true,
|
|
5716
|
+
"description": "Array of station objects. Each station has `num` (string label, e.g. \"01\"), `title` (string), and optional `description` (string). Minimum 2 stations recommended.\n"
|
|
5717
|
+
},
|
|
5718
|
+
{
|
|
5719
|
+
"name": "density",
|
|
5720
|
+
"type": "'compact' | 'default'",
|
|
5721
|
+
"required": false,
|
|
5722
|
+
"default": "'default'",
|
|
5723
|
+
"description": "Visual density of the diagram. `compact` reduces dot size and hides descriptions for tighter horizontal spaces.\n"
|
|
5724
|
+
},
|
|
5725
|
+
{
|
|
5726
|
+
"name": "inView",
|
|
5727
|
+
"type": "boolean",
|
|
5728
|
+
"required": false,
|
|
5729
|
+
"description": "When `autoTrigger` is false, this prop drives the animation. Set to `true` to activate the rail draw and dot illumination.\n"
|
|
5730
|
+
},
|
|
5731
|
+
{
|
|
5732
|
+
"name": "autoTrigger",
|
|
5733
|
+
"type": "boolean",
|
|
5734
|
+
"required": false,
|
|
5735
|
+
"default": "true",
|
|
5736
|
+
"description": "When true (default), the component auto-wires an IntersectionObserver to trigger the animation when the component enters the viewport. Set to false to control the trigger manually via the `inView` prop and your own ref/hook.\n"
|
|
5737
|
+
}
|
|
5738
|
+
],
|
|
5739
|
+
"dependencies": [
|
|
5740
|
+
"@loworbitstudio/visor-core"
|
|
5741
|
+
],
|
|
5742
|
+
"tokens_used": [
|
|
5743
|
+
"--border-default",
|
|
5744
|
+
"--dot-delay-step",
|
|
5745
|
+
"--font-size-sm",
|
|
5746
|
+
"--font-size-xs",
|
|
5747
|
+
"--font-weight-semibold",
|
|
5748
|
+
"--idx",
|
|
5749
|
+
"--interactive-primary-bg",
|
|
5750
|
+
"--letter-spacing-wide",
|
|
5751
|
+
"--line-height-normal",
|
|
5752
|
+
"--line-height-tight",
|
|
5753
|
+
"--motion-duration-normal",
|
|
5754
|
+
"--motion-duration-slow",
|
|
5755
|
+
"--motion-easing-default",
|
|
5756
|
+
"--motion-easing-enter",
|
|
5757
|
+
"--rail-delay",
|
|
5758
|
+
"--rail-duration",
|
|
5759
|
+
"--rail-easing",
|
|
5760
|
+
"--spacing-1",
|
|
5761
|
+
"--spacing-2",
|
|
5762
|
+
"--spacing-3",
|
|
5763
|
+
"--spacing-4",
|
|
5764
|
+
"--station-count",
|
|
5765
|
+
"--station-spectrum-desc-color",
|
|
5766
|
+
"--station-spectrum-dot-border-color",
|
|
5767
|
+
"--station-spectrum-dot-border-color-on",
|
|
5768
|
+
"--station-spectrum-dot-color-off",
|
|
5769
|
+
"--station-spectrum-dot-color-on",
|
|
5770
|
+
"--station-spectrum-dot-size",
|
|
5771
|
+
"--station-spectrum-dot-size-compact",
|
|
5772
|
+
"--station-spectrum-num-color",
|
|
5773
|
+
"--station-spectrum-rail-color",
|
|
5774
|
+
"--station-spectrum-rail-thickness",
|
|
5775
|
+
"--station-spectrum-title-color",
|
|
5776
|
+
"--stroke-width-thin",
|
|
5777
|
+
"--surface-card",
|
|
5778
|
+
"--text-primary",
|
|
5779
|
+
"--text-secondary",
|
|
5780
|
+
"--text-tertiary"
|
|
5781
|
+
],
|
|
5782
|
+
"example": "<StationSpectrum\n stations={[\n { num: '01', title: 'Discovery', description: 'Goals, audience, constraints, what success looks like.' },\n { num: '02', title: 'Brand', description: 'Name, identity, voice, and a design system that scales.' },\n { num: '03', title: 'Product design', description: 'Wireframes, screens, interactions, prototypes you can hold.' },\n { num: '04', title: 'Engineering', description: 'Apps, websites, APIs. Built, shipped, and live in production.' },\n { num: '05', title: 'Infrastructure', description: 'Logs, metrics, deploys, on-call. The boring parts.' },\n ]}\n/>\n"
|
|
5783
|
+
},
|
|
5070
5784
|
"status-badge": {
|
|
5071
5785
|
"category": "admin",
|
|
5072
5786
|
"description": "Semantic wrapper over Badge that maps admin status names to visual variants with an optional colored indicator dot.",
|
|
@@ -6963,6 +7677,22 @@
|
|
|
6963
7677
|
"Single-record inline edits (use admin-detail-drawer)"
|
|
6964
7678
|
]
|
|
6965
7679
|
},
|
|
7680
|
+
"chip-group": {
|
|
7681
|
+
"category": "form",
|
|
7682
|
+
"description": "A composable container managing selection state for ChoiceChip (single-select) and FilterChip (multi-select) chips. Mirrors Flutter Material's chip selection model.",
|
|
7683
|
+
"components_used": [
|
|
7684
|
+
"chip"
|
|
7685
|
+
],
|
|
7686
|
+
"when_to_use": [
|
|
7687
|
+
"Filter bars where users toggle multiple category chips",
|
|
7688
|
+
"Settings pickers for density, theme, or display preferences (radio-style)",
|
|
7689
|
+
"Tag filters on events, content, or data list pages"
|
|
7690
|
+
],
|
|
7691
|
+
"when_not_to_use": [
|
|
7692
|
+
"Plain visual chip lists without selection (use Chip directly)",
|
|
7693
|
+
"Large option lists with search (use Select or Combobox)"
|
|
7694
|
+
]
|
|
7695
|
+
},
|
|
6966
7696
|
"configuration-panel": {
|
|
6967
7697
|
"category": "configuration",
|
|
6968
7698
|
"description": "A floating, glassmorphic configuration panel for organizing controls into labeled sections. Supports collapse animation, positional anchoring, and responsive stacking. Composed from Visor form components.",
|
|
@@ -7941,8 +8671,11 @@
|
|
|
7941
8671
|
"accordion",
|
|
7942
8672
|
"avatar",
|
|
7943
8673
|
"badge",
|
|
8674
|
+
"bento-grid",
|
|
7944
8675
|
"card",
|
|
7945
8676
|
"chart",
|
|
8677
|
+
"marquee",
|
|
8678
|
+
"name-roster",
|
|
7946
8679
|
"table",
|
|
7947
8680
|
"timeline"
|
|
7948
8681
|
],
|
|
@@ -7955,6 +8688,7 @@
|
|
|
7955
8688
|
"filter-bar",
|
|
7956
8689
|
"kbd",
|
|
7957
8690
|
"stat-card",
|
|
8691
|
+
"stat-hero",
|
|
7958
8692
|
"status-badge"
|
|
7959
8693
|
],
|
|
7960
8694
|
"feedback": [
|
|
@@ -7979,6 +8713,7 @@
|
|
|
7979
8713
|
"button",
|
|
7980
8714
|
"calendar",
|
|
7981
8715
|
"checkbox",
|
|
8716
|
+
"chip",
|
|
7982
8717
|
"combobox",
|
|
7983
8718
|
"date-picker",
|
|
7984
8719
|
"date-range-picker",
|
|
@@ -8027,6 +8762,10 @@
|
|
|
8027
8762
|
"menubar",
|
|
8028
8763
|
"sheet"
|
|
8029
8764
|
],
|
|
8765
|
+
"visual-elements": [
|
|
8766
|
+
"sphere",
|
|
8767
|
+
"station-spectrum"
|
|
8768
|
+
],
|
|
8030
8769
|
"general": [
|
|
8031
8770
|
"theme-switcher"
|
|
8032
8771
|
],
|
|
@@ -8045,9 +8784,6 @@
|
|
|
8045
8784
|
"deck-toc-slide",
|
|
8046
8785
|
"slide",
|
|
8047
8786
|
"slide-theme-context"
|
|
8048
|
-
],
|
|
8049
|
-
"visual-elements": [
|
|
8050
|
-
"sphere"
|
|
8051
8787
|
]
|
|
8052
8788
|
},
|
|
8053
8789
|
"tokens": {
|