banhaten 0.1.2 → 0.1.3
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 +93 -328
- package/banhaten.config.example.json +1 -1
- package/docs/design-system/README.md +11 -0
- package/docs/design-system/appearance-presets.md +184 -0
- package/docs/design-system/appearances/default.md +94 -0
- package/docs/design-system/appearances/rounded.md +95 -0
- package/docs/design-system/appearances/sharp.md +95 -0
- package/docs/design-system/component-showcase-consistency-report.md +217 -0
- package/docs/design-system/component-token-consistency-audit.md +163 -0
- package/docs/design-system/components/README.md +74 -0
- package/docs/design-system/components/accordion.md +51 -0
- package/docs/design-system/components/activity-feed.md +92 -0
- package/docs/design-system/components/alert-dialog.md +70 -0
- package/docs/design-system/components/alert.md +79 -0
- package/docs/design-system/components/aspect-ratio.md +44 -0
- package/docs/design-system/components/attribute.md +87 -0
- package/docs/design-system/components/autocomplete.md +74 -0
- package/docs/design-system/components/avatar.md +52 -0
- package/docs/design-system/components/badge.md +53 -0
- package/docs/design-system/components/banner.md +85 -0
- package/docs/design-system/components/breadcrumbs.md +174 -0
- package/docs/design-system/components/button-group.md +83 -0
- package/docs/design-system/components/button.md +77 -0
- package/docs/design-system/components/card.md +78 -0
- package/docs/design-system/components/carousel.md +44 -0
- package/docs/design-system/components/catalog-components.md +45 -0
- package/docs/design-system/components/chart.md +43 -0
- package/docs/design-system/components/checkbox.md +52 -0
- package/docs/design-system/components/collapsible.md +48 -0
- package/docs/design-system/components/command-bar.md +57 -0
- package/docs/design-system/components/command.md +60 -0
- package/docs/design-system/components/context-menu.md +44 -0
- package/docs/design-system/components/date-picker.md +77 -0
- package/docs/design-system/components/divider.md +101 -0
- package/docs/design-system/components/empty-state.md +55 -0
- package/docs/design-system/components/field.md +69 -0
- package/docs/design-system/components/file-upload.md +185 -0
- package/docs/design-system/components/hover-card.md +46 -0
- package/docs/design-system/components/icons.md +48 -0
- package/docs/design-system/components/input-group.md +56 -0
- package/docs/design-system/components/input-otp.md +55 -0
- package/docs/design-system/components/input.md +48 -0
- package/docs/design-system/components/kbd.md +44 -0
- package/docs/design-system/components/label.md +48 -0
- package/docs/design-system/components/menu.md +59 -0
- package/docs/design-system/components/menubar.md +45 -0
- package/docs/design-system/components/modal.md +98 -0
- package/docs/design-system/components/native-select.md +52 -0
- package/docs/design-system/components/navigation-menu.md +48 -0
- package/docs/design-system/components/onboarding-step-list-item.md +80 -0
- package/docs/design-system/components/page-header.md +84 -0
- package/docs/design-system/components/pagination.md +49 -0
- package/docs/design-system/components/popover.md +58 -0
- package/docs/design-system/components/progress-slider.md +48 -0
- package/docs/design-system/components/progress.md +75 -0
- package/docs/design-system/components/radio-card.md +49 -0
- package/docs/design-system/components/radio-group.md +55 -0
- package/docs/design-system/components/resizable.md +42 -0
- package/docs/design-system/components/scroll-area.md +45 -0
- package/docs/design-system/components/select.md +50 -0
- package/docs/design-system/components/sheet.md +65 -0
- package/docs/design-system/components/sidebar.md +68 -0
- package/docs/design-system/components/skeleton.md +73 -0
- package/docs/design-system/components/slideout.md +63 -0
- package/docs/design-system/components/slider.md +61 -0
- package/docs/design-system/components/social-button.md +47 -0
- package/docs/design-system/components/spinner.md +61 -0
- package/docs/design-system/components/steps.md +63 -0
- package/docs/design-system/components/table.md +397 -0
- package/docs/design-system/components/tabs.md +52 -0
- package/docs/design-system/components/tag.md +78 -0
- package/docs/design-system/components/textarea.md +48 -0
- package/docs/design-system/components/timeline.md +81 -0
- package/docs/design-system/components/toast.md +56 -0
- package/docs/design-system/components/toggle.md +79 -0
- package/docs/design-system/components/toolbar.md +85 -0
- package/docs/design-system/components/tooltip.md +90 -0
- package/docs/design-system/components/typography.md +18 -0
- package/docs/design-system/design-system-test-missing-items.md +368 -0
- package/docs/design-system/icons.md +69 -0
- package/docs/design-system/registry-and-cli.md +41 -0
- package/docs/design-system/tabs.md +53 -0
- package/docs/design-system/token-governance.md +38 -0
- package/package.json +83 -65
- package/registry/components/alert-dialog.tsx +297 -0
- package/registry/components/aspect-ratio.tsx +30 -0
- package/registry/components/carousel.tsx +234 -0
- package/registry/components/chart.tsx +170 -0
- package/registry/components/collapsible.tsx +69 -0
- package/registry/components/command.tsx +174 -0
- package/registry/components/context-menu.tsx +236 -0
- package/registry/components/date-picker.tsx +1 -1
- package/registry/components/expanded/PageHeader.tsx +1 -1
- package/registry/components/expanded/breadcrumbs.css +139 -139
- package/registry/components/expanded/catalogComponentsShowcase.css +83 -83
- package/registry/components/expanded/steps.css +274 -274
- package/registry/components/expanded/timeline.css +264 -264
- package/registry/components/field.tsx +230 -0
- package/registry/components/hover-card.tsx +48 -0
- package/registry/components/input-group.tsx +130 -0
- package/registry/components/input.tsx +2 -2
- package/registry/components/kbd.tsx +44 -0
- package/registry/components/label.tsx +78 -0
- package/registry/components/menu.tsx +3 -1
- package/registry/components/menubar.tsx +226 -0
- package/registry/components/modal.tsx +109 -76
- package/registry/components/native-select.tsx +205 -0
- package/registry/components/navigation-menu.tsx +171 -0
- package/registry/components/radio-group.tsx +1 -1
- package/registry/components/resizable.tsx +74 -0
- package/registry/components/scroll-area.tsx +67 -0
- package/registry/components/select.tsx +2 -4
- package/registry/components/sheet.tsx +305 -0
- package/registry/components/sidebar.tsx +352 -0
- package/registry/components/social-button.tsx +74 -10
- package/registry/components/{expanded/tabs.css → tabs.css} +127 -106
- package/registry/components/tabs.tsx +242 -0
- package/registry/components/textarea.tsx +1 -1
- package/registry/components/toast.tsx +131 -0
- package/registry/examples/alert-dialog-demo.tsx +42 -0
- package/registry/examples/aspect-ratio-demo.tsx +11 -0
- package/registry/examples/carousel-demo.tsx +25 -0
- package/registry/examples/chart-demo.tsx +33 -0
- package/registry/examples/collapsible-demo.tsx +16 -0
- package/registry/examples/command-demo.tsx +42 -0
- package/registry/examples/context-menu-demo.tsx +29 -0
- package/registry/examples/expanded/tabs-demo.tsx +1 -1
- package/registry/examples/field-demo.tsx +51 -0
- package/registry/examples/hover-card-demo.tsx +23 -0
- package/registry/examples/input-group-demo.tsx +16 -0
- package/registry/examples/kbd-demo.tsx +11 -0
- package/registry/examples/label-demo.tsx +20 -0
- package/registry/examples/menubar-demo.tsx +34 -0
- package/registry/examples/native-select-demo.tsx +16 -0
- package/registry/examples/navigation-menu-demo.tsx +29 -0
- package/registry/examples/resizable-demo.tsx +22 -0
- package/registry/examples/scroll-area-demo.tsx +15 -0
- package/registry/examples/sheet-demo.tsx +47 -0
- package/registry/examples/sidebar-demo.tsx +55 -0
- package/registry/examples/tabs-demo.tsx +13 -0
- package/registry/examples/toast-demo.tsx +35 -0
- package/registry/index.json +655 -11
- package/registry/styles/globals.css +4733 -4690
- package/registry.json +1612 -0
- package/schema/config.schema.json +48 -0
- package/schema/registry.schema.json +85 -0
- package/schema/tokens.schema.json +63 -0
- package/src/cli/index.js +312 -18
- package/tokens/banhaten.tokens.json +1 -1
- package/registry/assets/avatars/avatar-02.jpg +0 -0
- package/registry/assets/avatars/avatar-03.jpg +0 -0
- package/registry/assets/avatars/avatar-04.jpg +0 -0
- package/registry/assets/avatars/avatar-05.jpg +0 -0
- package/registry/assets/avatars/avatar-06.jpg +0 -0
- package/registry/assets/avatars/avatar-07.jpg +0 -0
- package/registry/assets/avatars/avatar-08.jpg +0 -0
- package/registry/assets/avatars/avatar-09.jpg +0 -0
- package/registry/assets/avatars/avatar-10.jpg +0 -0
- package/registry/assets/avatars/avatar-11.jpg +0 -0
- package/registry/assets/avatars/avatar-12.jpg +0 -0
- package/registry/assets/avatars/avatar-13.jpg +0 -0
- package/registry/assets/avatars/avatar-14.jpg +0 -0
- package/registry/assets/avatars/avatar-15.jpg +0 -0
- package/registry/assets/avatars/avatar-16.jpg +0 -0
- package/registry/assets/avatars/avatar-17.jpg +0 -0
- package/registry/assets/avatars/avatar-18.jpg +0 -0
- package/registry/assets/avatars/avatar-19.jpg +0 -0
- package/registry/assets/avatars/avatar-20.jpg +0 -0
- package/registry/assets/avatars/avatar-21.jpg +0 -0
- package/registry/assets/avatars/avatar-22.jpg +0 -0
- package/registry/assets/avatars/avatar-23.jpg +0 -0
- package/registry/assets/avatars/avatar-24.jpg +0 -0
- package/registry/assets/avatars/avatar-25.jpg +0 -0
- package/registry/assets/avatars/avatar-26.jpg +0 -0
- package/registry/assets/avatars/avatar-27.jpg +0 -0
- package/registry/assets/avatars/avatar-28.jpg +0 -0
- package/registry/assets/avatars/avatar-29.jpg +0 -0
- package/registry/assets/avatars/avatar-30.jpg +0 -0
- package/registry/assets/avatars/avatar-31.jpg +0 -0
- package/registry/assets/avatars/avatar-32.jpg +0 -0
- package/registry/assets/avatars/avatar-33.jpg +0 -0
- package/registry/assets/avatars/avatar-34.jpg +0 -0
- package/registry/assets/avatars/avatar-35.jpg +0 -0
- package/registry/assets/image-assets.json +0 -744
- package/registry/assets/images/art-02.jpg +0 -0
- package/registry/assets/images/art-03.jpg +0 -0
- package/registry/assets/images/art-04.jpg +0 -0
- package/registry/assets/images/art-05.jpg +0 -0
- package/registry/assets/images/art-06.jpg +0 -0
- package/registry/assets/images/art-07.jpg +0 -0
- package/registry/assets/images/art-08.jpg +0 -0
- package/registry/assets/images/art-09.jpg +0 -0
- package/registry/assets/images/art-10.jpg +0 -0
- package/registry/assets/images/art-11.jpg +0 -0
- package/registry/assets/images/art-12.jpg +0 -0
- package/registry/assets/images/art-13.jpg +0 -0
- package/registry/assets/images/art-14.jpg +0 -0
- package/registry/assets/images/art-15.jpg +0 -0
- package/registry/assets/images/art-16.jpg +0 -0
- package/registry/assets/images/art-17.jpg +0 -0
- package/registry/assets/images/art-18.jpg +0 -0
- package/registry/assets/images/art-19.jpg +0 -0
- package/registry/assets/images/art-20.jpg +0 -0
- package/registry/assets/images/art-21.jpg +0 -0
- package/registry/assets/images/art-22.jpg +0 -0
- package/registry/assets/images/art-23.jpg +0 -0
- package/registry/assets/images/art-24.jpg +0 -0
- package/registry/assets/images/art-25.jpg +0 -0
- package/registry/assets/images/art-26.jpg +0 -0
- package/registry/assets/images/art-27.jpg +0 -0
- package/registry/assets/images/nature-01.jpg +0 -0
- package/registry/assets/images/nature-02.jpg +0 -0
- package/registry/assets/images/nature-03.jpg +0 -0
- package/registry/assets/images/nature-04.jpg +0 -0
- package/registry/assets/images/nature-05.jpg +0 -0
- package/registry/assets/images/nature-06.jpg +0 -0
- package/registry/assets/images/nature-07.jpg +0 -0
- package/registry/assets/images/nature-08.jpg +0 -0
- package/registry/assets/images/nature-09.jpg +0 -0
- package/registry/assets/images/nature-10.jpg +0 -0
- package/registry/assets/images/nature-11.jpg +0 -0
- package/registry/assets/images/nature-12.jpg +0 -0
- package/registry/assets/images/nature-13.jpg +0 -0
- package/registry/assets/images/nature-14.jpg +0 -0
- package/registry/assets/images/nature-15.jpg +0 -0
- package/registry/assets/images/nature-16.jpg +0 -0
- package/registry/assets/images/nature-17.jpg +0 -0
- package/registry/assets/images/nature-18.jpg +0 -0
- package/registry/assets/images/nature-19.jpg +0 -0
- package/registry/assets/images/nature-20.jpg +0 -0
- package/registry/components/expanded/Tabs.tsx +0 -86
package/registry/index.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
2
|
+
"$schema": "../schema/registry.schema.json",
|
|
3
3
|
"name": "banhaten",
|
|
4
4
|
"base": {
|
|
5
5
|
"dependencies": {
|
|
@@ -48,6 +48,25 @@
|
|
|
48
48
|
],
|
|
49
49
|
"examples": ["examples/accordion-demo.tsx"]
|
|
50
50
|
},
|
|
51
|
+
"aspect-ratio": {
|
|
52
|
+
"description": "Radix AspectRatio wrapper for fixed-format media, screenshots, previews, and product surfaces with Banhaten radius and neutral background tokens.",
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@radix-ui/react-aspect-ratio": "^1.1.11"
|
|
55
|
+
},
|
|
56
|
+
"parts": ["AspectRatio"],
|
|
57
|
+
"features": ["fixed media ratios", "preview surfaces", "responsive sizing"],
|
|
58
|
+
"rtl": {
|
|
59
|
+
"inheritsDirection": false,
|
|
60
|
+
"geometry": "Aspect Ratio controls media geometry and does not alter text direction."
|
|
61
|
+
},
|
|
62
|
+
"files": [
|
|
63
|
+
{
|
|
64
|
+
"source": "components/aspect-ratio.tsx",
|
|
65
|
+
"target": "{{ui}}/aspect-ratio.tsx"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"examples": ["examples/aspect-ratio-demo.tsx"]
|
|
69
|
+
},
|
|
51
70
|
"avatar": {
|
|
52
71
|
"description": "Figma-matched user avatar primitive with image, initials, icon fallback, circular and rounded forms, status dots, call-to-action overlays, stacked group count, size scale, and RTL-safe overlap.",
|
|
53
72
|
"dependencies": {
|
|
@@ -260,6 +279,71 @@
|
|
|
260
279
|
],
|
|
261
280
|
"examples": ["examples/card-demo.tsx"]
|
|
262
281
|
},
|
|
282
|
+
"chart": {
|
|
283
|
+
"description": "Recharts wrapper with Banhaten chart color tokens, responsive container, tooltip content, legend content, and config-driven color variables.",
|
|
284
|
+
"dependencies": {
|
|
285
|
+
"recharts": "^3.9.2"
|
|
286
|
+
},
|
|
287
|
+
"parts": [
|
|
288
|
+
"ChartContainer",
|
|
289
|
+
"ChartTooltip",
|
|
290
|
+
"ChartTooltipContent",
|
|
291
|
+
"ChartLegend",
|
|
292
|
+
"ChartLegendContent"
|
|
293
|
+
],
|
|
294
|
+
"tokens": [
|
|
295
|
+
"--bh-chart-1",
|
|
296
|
+
"--bh-chart-2",
|
|
297
|
+
"--bh-chart-3",
|
|
298
|
+
"--bh-chart-4",
|
|
299
|
+
"--bh-chart-5"
|
|
300
|
+
],
|
|
301
|
+
"features": [
|
|
302
|
+
"responsive container",
|
|
303
|
+
"tooltip content",
|
|
304
|
+
"legend content",
|
|
305
|
+
"config colors"
|
|
306
|
+
],
|
|
307
|
+
"rtl": {
|
|
308
|
+
"inheritsDirection": true,
|
|
309
|
+
"layout": "Chart labels and legends should use logical layout; chart geometry is controlled by Recharts."
|
|
310
|
+
},
|
|
311
|
+
"files": [
|
|
312
|
+
{
|
|
313
|
+
"source": "components/chart.tsx",
|
|
314
|
+
"target": "{{ui}}/chart.tsx"
|
|
315
|
+
}
|
|
316
|
+
],
|
|
317
|
+
"examples": ["examples/chart-demo.tsx"]
|
|
318
|
+
},
|
|
319
|
+
"carousel": {
|
|
320
|
+
"description": "Embla-backed carousel with content, item, previous, and next controls, horizontal or vertical orientation, and RTL-safe directional icons.",
|
|
321
|
+
"dependencies": {
|
|
322
|
+
"embla-carousel-react": "^8.6.0",
|
|
323
|
+
"lucide-react": "^1.17.0"
|
|
324
|
+
},
|
|
325
|
+
"registryDependencies": ["button"],
|
|
326
|
+
"parts": [
|
|
327
|
+
"Carousel",
|
|
328
|
+
"CarouselContent",
|
|
329
|
+
"CarouselItem",
|
|
330
|
+
"CarouselPrevious",
|
|
331
|
+
"CarouselNext"
|
|
332
|
+
],
|
|
333
|
+
"orientations": ["horizontal", "vertical"],
|
|
334
|
+
"features": ["Embla API", "previous and next controls", "plugin support"],
|
|
335
|
+
"rtl": {
|
|
336
|
+
"inheritsDirection": true,
|
|
337
|
+
"directionalIconFlip": "Previous and next arrow icons flip in RTL."
|
|
338
|
+
},
|
|
339
|
+
"files": [
|
|
340
|
+
{
|
|
341
|
+
"source": "components/carousel.tsx",
|
|
342
|
+
"target": "{{ui}}/carousel.tsx"
|
|
343
|
+
}
|
|
344
|
+
],
|
|
345
|
+
"examples": ["examples/carousel-demo.tsx"]
|
|
346
|
+
},
|
|
263
347
|
"button-group": {
|
|
264
348
|
"description": "Connected Button Group primitive with seven-item default and icon-only layouts, md/sm/xs size scale, reusable surface shadow, dividers, RTL-safe content spacing, native hover/focus/pressed styling, and active/disabled states.",
|
|
265
349
|
"dependencies": {
|
|
@@ -355,6 +439,113 @@
|
|
|
355
439
|
],
|
|
356
440
|
"examples": ["examples/menu-demo.tsx"]
|
|
357
441
|
},
|
|
442
|
+
"menubar": {
|
|
443
|
+
"description": "Radix Menubar-backed application menu with trigger, content, item, checkbox, radio, label, separator, shortcut, and keyboard navigation parts.",
|
|
444
|
+
"dependencies": {
|
|
445
|
+
"@radix-ui/react-menubar": "^1.1.19",
|
|
446
|
+
"lucide-react": "^1.17.0"
|
|
447
|
+
},
|
|
448
|
+
"parts": [
|
|
449
|
+
"Menubar",
|
|
450
|
+
"MenubarMenu",
|
|
451
|
+
"MenubarTrigger",
|
|
452
|
+
"MenubarContent",
|
|
453
|
+
"MenubarItem",
|
|
454
|
+
"MenubarCheckboxItem",
|
|
455
|
+
"MenubarRadioItem",
|
|
456
|
+
"MenubarLabel",
|
|
457
|
+
"MenubarSeparator",
|
|
458
|
+
"MenubarShortcut"
|
|
459
|
+
],
|
|
460
|
+
"features": ["top menu", "keyboard navigation", "checkbox items", "radio items", "shortcuts"],
|
|
461
|
+
"rtl": {
|
|
462
|
+
"inheritsDirection": true,
|
|
463
|
+
"spacing": "Triggers, items, and shortcuts use logical spacing."
|
|
464
|
+
},
|
|
465
|
+
"files": [
|
|
466
|
+
{
|
|
467
|
+
"source": "components/menubar.tsx",
|
|
468
|
+
"target": "{{ui}}/menubar.tsx"
|
|
469
|
+
}
|
|
470
|
+
],
|
|
471
|
+
"examples": ["examples/menubar-demo.tsx"]
|
|
472
|
+
},
|
|
473
|
+
"command": {
|
|
474
|
+
"description": "cmdk-backed command menu with search input, grouped results, keyboard navigation, shortcuts, separators, and empty state.",
|
|
475
|
+
"dependencies": {
|
|
476
|
+
"cmdk": "^1.1.1",
|
|
477
|
+
"lucide-react": "^1.17.0"
|
|
478
|
+
},
|
|
479
|
+
"parts": [
|
|
480
|
+
"Command",
|
|
481
|
+
"CommandInput",
|
|
482
|
+
"CommandList",
|
|
483
|
+
"CommandEmpty",
|
|
484
|
+
"CommandGroup",
|
|
485
|
+
"CommandItem",
|
|
486
|
+
"CommandSeparator",
|
|
487
|
+
"CommandShortcut"
|
|
488
|
+
],
|
|
489
|
+
"features": [
|
|
490
|
+
"search filtering",
|
|
491
|
+
"keyboard navigation",
|
|
492
|
+
"grouped results",
|
|
493
|
+
"shortcut slot",
|
|
494
|
+
"empty state"
|
|
495
|
+
],
|
|
496
|
+
"rtl": {
|
|
497
|
+
"inheritsDirection": true,
|
|
498
|
+
"spacing": "Command rows and shortcuts use logical spacing so shortcut placement mirrors naturally.",
|
|
499
|
+
"textDirection": "Command copy inherits document direction; individual row labels can use dir=\"auto\" when needed."
|
|
500
|
+
},
|
|
501
|
+
"files": [
|
|
502
|
+
{
|
|
503
|
+
"source": "components/command.tsx",
|
|
504
|
+
"target": "{{ui}}/command.tsx"
|
|
505
|
+
}
|
|
506
|
+
],
|
|
507
|
+
"examples": ["examples/command-demo.tsx"]
|
|
508
|
+
},
|
|
509
|
+
"context-menu": {
|
|
510
|
+
"description": "Radix ContextMenu-backed right-click menu with item, checkbox, radio, label, separator, shortcut, and submenu parts.",
|
|
511
|
+
"dependencies": {
|
|
512
|
+
"@radix-ui/react-context-menu": "^2.3.2",
|
|
513
|
+
"lucide-react": "^1.17.0"
|
|
514
|
+
},
|
|
515
|
+
"parts": [
|
|
516
|
+
"ContextMenu",
|
|
517
|
+
"ContextMenuTrigger",
|
|
518
|
+
"ContextMenuContent",
|
|
519
|
+
"ContextMenuItem",
|
|
520
|
+
"ContextMenuCheckboxItem",
|
|
521
|
+
"ContextMenuRadioItem",
|
|
522
|
+
"ContextMenuLabel",
|
|
523
|
+
"ContextMenuSeparator",
|
|
524
|
+
"ContextMenuShortcut",
|
|
525
|
+
"ContextMenuSub",
|
|
526
|
+
"ContextMenuSubTrigger",
|
|
527
|
+
"ContextMenuSubContent"
|
|
528
|
+
],
|
|
529
|
+
"features": [
|
|
530
|
+
"right click trigger",
|
|
531
|
+
"submenus",
|
|
532
|
+
"checkbox items",
|
|
533
|
+
"radio items",
|
|
534
|
+
"shortcuts"
|
|
535
|
+
],
|
|
536
|
+
"rtl": {
|
|
537
|
+
"inheritsDirection": true,
|
|
538
|
+
"directionalIconFlip": "Submenu chevrons flip in RTL.",
|
|
539
|
+
"spacing": "Items and shortcuts use logical spacing."
|
|
540
|
+
},
|
|
541
|
+
"files": [
|
|
542
|
+
{
|
|
543
|
+
"source": "components/context-menu.tsx",
|
|
544
|
+
"target": "{{ui}}/context-menu.tsx"
|
|
545
|
+
}
|
|
546
|
+
],
|
|
547
|
+
"examples": ["examples/context-menu-demo.tsx"]
|
|
548
|
+
},
|
|
358
549
|
"tooltip": {
|
|
359
550
|
"description": "Radix Tooltip-backed primitive with Figma-matched dark and default surfaces, small and large sizes, shortcut and close slots, logical pointer positions, tokenized shadows, and RTL-safe layout.",
|
|
360
551
|
"dependencies": {
|
|
@@ -456,6 +647,30 @@
|
|
|
456
647
|
],
|
|
457
648
|
"examples": ["examples/popover-demo.tsx"]
|
|
458
649
|
},
|
|
650
|
+
"hover-card": {
|
|
651
|
+
"description": "Radix HoverCard-backed preview surface for rich hover and focus context with tokenized raised content.",
|
|
652
|
+
"dependencies": {
|
|
653
|
+
"@radix-ui/react-hover-card": "^1.1.18"
|
|
654
|
+
},
|
|
655
|
+
"parts": [
|
|
656
|
+
"HoverCard",
|
|
657
|
+
"HoverCardTrigger",
|
|
658
|
+
"HoverCardContent",
|
|
659
|
+
"HoverCardPortal"
|
|
660
|
+
],
|
|
661
|
+
"features": ["hover preview", "focus preview", "open delay", "close delay"],
|
|
662
|
+
"rtl": {
|
|
663
|
+
"inheritsDirection": true,
|
|
664
|
+
"textDirection": "Content inherits direction and uses logical text alignment."
|
|
665
|
+
},
|
|
666
|
+
"files": [
|
|
667
|
+
{
|
|
668
|
+
"source": "components/hover-card.tsx",
|
|
669
|
+
"target": "{{ui}}/hover-card.tsx"
|
|
670
|
+
}
|
|
671
|
+
],
|
|
672
|
+
"examples": ["examples/hover-card-demo.tsx"]
|
|
673
|
+
},
|
|
459
674
|
"modal": {
|
|
460
675
|
"description": "Radix Dialog-backed modal primitive with Figma Small, Default, and Large sizes, tokenized raised surface, header/body/footer slots, ConfirmModal guardrails, Button actions, Checkbox opt-out, and RTL-safe layout.",
|
|
461
676
|
"dependencies": {
|
|
@@ -463,7 +678,7 @@
|
|
|
463
678
|
"class-variance-authority": "^0.7.1",
|
|
464
679
|
"lucide-react": "^1.17.0"
|
|
465
680
|
},
|
|
466
|
-
"registryDependencies": ["button", "checkbox", "spinner"],
|
|
681
|
+
"registryDependencies": ["alert-dialog", "button", "checkbox", "spinner"],
|
|
467
682
|
"parts": [
|
|
468
683
|
"Modal",
|
|
469
684
|
"ConfirmModal",
|
|
@@ -502,6 +717,52 @@
|
|
|
502
717
|
],
|
|
503
718
|
"examples": ["examples/modal-demo.tsx"]
|
|
504
719
|
},
|
|
720
|
+
"alert-dialog": {
|
|
721
|
+
"description": "Radix AlertDialog-backed confirmation primitive for destructive or consequential actions with tokenized alert surface, semantic intent icon, safe cancel/action buttons, focus management, and RTL-safe layout.",
|
|
722
|
+
"dependencies": {
|
|
723
|
+
"@radix-ui/react-alert-dialog": "^1.1.18",
|
|
724
|
+
"class-variance-authority": "^0.7.1",
|
|
725
|
+
"lucide-react": "^1.17.0"
|
|
726
|
+
},
|
|
727
|
+
"registryDependencies": ["button"],
|
|
728
|
+
"parts": [
|
|
729
|
+
"AlertDialog",
|
|
730
|
+
"AlertDialogTrigger",
|
|
731
|
+
"AlertDialogContent",
|
|
732
|
+
"AlertDialogPortal",
|
|
733
|
+
"AlertDialogOverlay",
|
|
734
|
+
"AlertDialogHeader",
|
|
735
|
+
"AlertDialogIcon",
|
|
736
|
+
"AlertDialogTitle",
|
|
737
|
+
"AlertDialogDescription",
|
|
738
|
+
"AlertDialogBody",
|
|
739
|
+
"AlertDialogFooter",
|
|
740
|
+
"AlertDialogCancel",
|
|
741
|
+
"AlertDialogAction"
|
|
742
|
+
],
|
|
743
|
+
"intents": ["default", "warning", "danger"],
|
|
744
|
+
"sizes": ["sm", "default", "lg"],
|
|
745
|
+
"features": [
|
|
746
|
+
"alert-dialog semantics",
|
|
747
|
+
"cancel focus pattern",
|
|
748
|
+
"safe cancel action",
|
|
749
|
+
"destructive action",
|
|
750
|
+
"semantic intent icon"
|
|
751
|
+
],
|
|
752
|
+
"rtl": {
|
|
753
|
+
"inheritsDirection": true,
|
|
754
|
+
"textDirection": "Title and description use dir=\"auto\" for Arabic and English copy.",
|
|
755
|
+
"spacing": "Header, body, and footer use logical layout and Banhaten spacing tokens so action order and copy mirror naturally.",
|
|
756
|
+
"semantics": "Radix AlertDialog provides the modal alert role, focus trap, and safe cancellation behavior."
|
|
757
|
+
},
|
|
758
|
+
"files": [
|
|
759
|
+
{
|
|
760
|
+
"source": "components/alert-dialog.tsx",
|
|
761
|
+
"target": "{{ui}}/alert-dialog.tsx"
|
|
762
|
+
}
|
|
763
|
+
],
|
|
764
|
+
"examples": ["examples/alert-dialog-demo.tsx"]
|
|
765
|
+
},
|
|
505
766
|
"checkbox": {
|
|
506
767
|
"description": "Figma-matched checkbox primitive and checkbox card composition with 20px root, 16px control, selected and disabled states, native hover styling, component shadow, body text styles, and RTL-safe layout.",
|
|
507
768
|
"dependencies": {
|
|
@@ -524,6 +785,32 @@
|
|
|
524
785
|
],
|
|
525
786
|
"examples": ["examples/checkbox-demo.tsx"]
|
|
526
787
|
},
|
|
788
|
+
"collapsible": {
|
|
789
|
+
"description": "Radix Collapsible wrapper for disclosure sections with tokenized trigger, icon rotation, and content slots.",
|
|
790
|
+
"dependencies": {
|
|
791
|
+
"@radix-ui/react-collapsible": "^1.1.15",
|
|
792
|
+
"lucide-react": "^1.17.0"
|
|
793
|
+
},
|
|
794
|
+
"parts": ["Collapsible", "CollapsibleTrigger", "CollapsibleContent"],
|
|
795
|
+
"features": [
|
|
796
|
+
"controlled state",
|
|
797
|
+
"uncontrolled state",
|
|
798
|
+
"keyboard trigger",
|
|
799
|
+
"RTL"
|
|
800
|
+
],
|
|
801
|
+
"rtl": {
|
|
802
|
+
"inheritsDirection": true,
|
|
803
|
+
"textAlignment": "Trigger and content use logical text alignment and inherit direction.",
|
|
804
|
+
"spacing": "Icon and label spacing uses flex gap so it mirrors with document direction."
|
|
805
|
+
},
|
|
806
|
+
"files": [
|
|
807
|
+
{
|
|
808
|
+
"source": "components/collapsible.tsx",
|
|
809
|
+
"target": "{{ui}}/collapsible.tsx"
|
|
810
|
+
}
|
|
811
|
+
],
|
|
812
|
+
"examples": ["examples/collapsible-demo.tsx"]
|
|
813
|
+
},
|
|
527
814
|
"radio-group": {
|
|
528
815
|
"description": "Native-input radio primitive and group composition with field rows, group label, description, error and disabled states, horizontal and vertical layouts, controlled or uncontrolled value, and RTL-safe tokenized copy.",
|
|
529
816
|
"dependencies": {
|
|
@@ -733,6 +1020,117 @@
|
|
|
733
1020
|
],
|
|
734
1021
|
"examples": ["examples/input-demo.tsx"]
|
|
735
1022
|
},
|
|
1023
|
+
"input-group": {
|
|
1024
|
+
"description": "Grouped input shell for protocol add-ons, inline actions, prefixes, suffixes, compact field rows, and RTL-safe native input composition.",
|
|
1025
|
+
"dependencies": {
|
|
1026
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
1027
|
+
"class-variance-authority": "^0.7.1"
|
|
1028
|
+
},
|
|
1029
|
+
"registryDependencies": ["button"],
|
|
1030
|
+
"parts": [
|
|
1031
|
+
"InputGroup",
|
|
1032
|
+
"InputGroupInput",
|
|
1033
|
+
"InputGroupAddon",
|
|
1034
|
+
"InputGroupButton"
|
|
1035
|
+
],
|
|
1036
|
+
"sizes": ["md", "lg"],
|
|
1037
|
+
"variants": ["default", "soft"],
|
|
1038
|
+
"states": ["default", "error"],
|
|
1039
|
+
"rtl": {
|
|
1040
|
+
"inheritsDirection": true,
|
|
1041
|
+
"spacing": "Add-ons and input segments use logical borders and inherited direction.",
|
|
1042
|
+
"textDirection": "Input text uses text-start so mixed Arabic and English values align naturally."
|
|
1043
|
+
},
|
|
1044
|
+
"files": [
|
|
1045
|
+
{
|
|
1046
|
+
"source": "components/input-group.tsx",
|
|
1047
|
+
"target": "{{ui}}/input-group.tsx"
|
|
1048
|
+
}
|
|
1049
|
+
],
|
|
1050
|
+
"examples": ["examples/input-group-demo.tsx"]
|
|
1051
|
+
},
|
|
1052
|
+
"label": {
|
|
1053
|
+
"description": "Radix Label-backed accessible label primitive with required markers, optional text, tone variants, disabled state styling, and RTL-safe copy.",
|
|
1054
|
+
"dependencies": {
|
|
1055
|
+
"@radix-ui/react-label": "^2.1.11",
|
|
1056
|
+
"class-variance-authority": "^0.7.1"
|
|
1057
|
+
},
|
|
1058
|
+
"parts": ["Label"],
|
|
1059
|
+
"tones": ["default", "subtle", "danger"],
|
|
1060
|
+
"features": ["required marker", "optional text", "disabled styling"],
|
|
1061
|
+
"rtl": {
|
|
1062
|
+
"inheritsDirection": true,
|
|
1063
|
+
"textDirection": "Label and optional text use dir=\"auto\" so Arabic and English labels resolve naturally.",
|
|
1064
|
+
"spacing": "Uses logical inline spacing between label text, required marker, and optional text."
|
|
1065
|
+
},
|
|
1066
|
+
"files": [
|
|
1067
|
+
{
|
|
1068
|
+
"source": "components/label.tsx",
|
|
1069
|
+
"target": "{{ui}}/label.tsx"
|
|
1070
|
+
}
|
|
1071
|
+
],
|
|
1072
|
+
"examples": ["examples/label-demo.tsx"]
|
|
1073
|
+
},
|
|
1074
|
+
"kbd": {
|
|
1075
|
+
"description": "Keyboard hint primitive for shortcuts, command rows, and form help text with tokenized border, soft surface, and body-xs typography.",
|
|
1076
|
+
"dependencies": {
|
|
1077
|
+
"class-variance-authority": "^0.7.1"
|
|
1078
|
+
},
|
|
1079
|
+
"parts": ["Kbd"],
|
|
1080
|
+
"sizes": ["sm", "md"],
|
|
1081
|
+
"rtl": {
|
|
1082
|
+
"inheritsDirection": false,
|
|
1083
|
+
"semantics": "Kbd is direction-neutral and should be paired with surrounding text labels."
|
|
1084
|
+
},
|
|
1085
|
+
"files": [
|
|
1086
|
+
{
|
|
1087
|
+
"source": "components/kbd.tsx",
|
|
1088
|
+
"target": "{{ui}}/kbd.tsx"
|
|
1089
|
+
}
|
|
1090
|
+
],
|
|
1091
|
+
"examples": ["examples/kbd-demo.tsx"]
|
|
1092
|
+
},
|
|
1093
|
+
"field": {
|
|
1094
|
+
"description": "Accessible form field composition with label, control slot, description, error message, grouped fields, fieldsets, validation state, and responsive or horizontal layout.",
|
|
1095
|
+
"dependencies": {
|
|
1096
|
+
"@radix-ui/react-slot": "^1.2.3"
|
|
1097
|
+
},
|
|
1098
|
+
"registryDependencies": ["label"],
|
|
1099
|
+
"parts": [
|
|
1100
|
+
"Field",
|
|
1101
|
+
"FieldLabel",
|
|
1102
|
+
"FieldControl",
|
|
1103
|
+
"FieldDescription",
|
|
1104
|
+
"FieldError",
|
|
1105
|
+
"FieldGroup",
|
|
1106
|
+
"FieldSet",
|
|
1107
|
+
"FieldLegend",
|
|
1108
|
+
"FieldContent"
|
|
1109
|
+
],
|
|
1110
|
+
"orientations": ["vertical", "horizontal", "responsive"],
|
|
1111
|
+
"states": ["default", "invalid", "disabled"],
|
|
1112
|
+
"features": [
|
|
1113
|
+
"generated ids",
|
|
1114
|
+
"control slot",
|
|
1115
|
+
"description text",
|
|
1116
|
+
"error text",
|
|
1117
|
+
"field groups",
|
|
1118
|
+
"validation mapping"
|
|
1119
|
+
],
|
|
1120
|
+
"rtl": {
|
|
1121
|
+
"inheritsDirection": true,
|
|
1122
|
+
"layout": "Vertical, horizontal, and responsive layouts use CSS grid and logical text alignment so field rows mirror naturally.",
|
|
1123
|
+
"textDirection": "Labels, descriptions, and errors use dir=\"auto\" through Label and field text parts.",
|
|
1124
|
+
"semantics": "FieldControl wires the generated control id, invalid state, disabled announcement, and description/error ids into the child control."
|
|
1125
|
+
},
|
|
1126
|
+
"files": [
|
|
1127
|
+
{
|
|
1128
|
+
"source": "components/field.tsx",
|
|
1129
|
+
"target": "{{ui}}/field.tsx"
|
|
1130
|
+
}
|
|
1131
|
+
],
|
|
1132
|
+
"examples": ["examples/field-demo.tsx"]
|
|
1133
|
+
},
|
|
736
1134
|
"input-otp": {
|
|
737
1135
|
"description": "One-time passcode input composed from the Banhaten Input surface, control typography, labels, helper text, tokenized slot gaps, paste handling, grouped slots, masked values, and RTL-aware keyboard navigation.",
|
|
738
1136
|
"dependencies": {
|
|
@@ -816,6 +1214,202 @@
|
|
|
816
1214
|
],
|
|
817
1215
|
"examples": ["examples/select-demo.tsx"]
|
|
818
1216
|
},
|
|
1217
|
+
"native-select": {
|
|
1218
|
+
"description": "Tokenized native select field for platform forms, mobile fallback, lightweight option sets, validation state, helper text, and RTL layout.",
|
|
1219
|
+
"dependencies": {
|
|
1220
|
+
"class-variance-authority": "^0.7.1",
|
|
1221
|
+
"lucide-react": "^1.17.0"
|
|
1222
|
+
},
|
|
1223
|
+
"registryDependencies": ["label"],
|
|
1224
|
+
"parts": ["NativeSelect"],
|
|
1225
|
+
"sizes": ["md", "lg"],
|
|
1226
|
+
"variants": ["default", "soft"],
|
|
1227
|
+
"states": ["default", "filled", "error", "disabled"],
|
|
1228
|
+
"features": [
|
|
1229
|
+
"options array",
|
|
1230
|
+
"native children",
|
|
1231
|
+
"label",
|
|
1232
|
+
"helper text",
|
|
1233
|
+
"error text"
|
|
1234
|
+
],
|
|
1235
|
+
"rtl": {
|
|
1236
|
+
"inheritsDirection": true,
|
|
1237
|
+
"spacing": "Uses logical padding and inline-end chevron placement.",
|
|
1238
|
+
"textDirection": "Label and helper copy use dir=\"auto\" through Label and helper text."
|
|
1239
|
+
},
|
|
1240
|
+
"files": [
|
|
1241
|
+
{
|
|
1242
|
+
"source": "components/native-select.tsx",
|
|
1243
|
+
"target": "{{ui}}/native-select.tsx"
|
|
1244
|
+
}
|
|
1245
|
+
],
|
|
1246
|
+
"examples": ["examples/native-select-demo.tsx"]
|
|
1247
|
+
},
|
|
1248
|
+
"sheet": {
|
|
1249
|
+
"description": "Radix Dialog-based edge panel with logical start/end placement, top and bottom placement, size variants, overlay, close control, header, body, footer, and RTL-safe layout.",
|
|
1250
|
+
"dependencies": {
|
|
1251
|
+
"@radix-ui/react-dialog": "^1.1.16",
|
|
1252
|
+
"class-variance-authority": "^0.7.1",
|
|
1253
|
+
"lucide-react": "^1.17.0"
|
|
1254
|
+
},
|
|
1255
|
+
"registryDependencies": [],
|
|
1256
|
+
"parts": [
|
|
1257
|
+
"Sheet",
|
|
1258
|
+
"SheetTrigger",
|
|
1259
|
+
"SheetContent",
|
|
1260
|
+
"SheetHeader",
|
|
1261
|
+
"SheetTitle",
|
|
1262
|
+
"SheetDescription",
|
|
1263
|
+
"SheetBody",
|
|
1264
|
+
"SheetFooter",
|
|
1265
|
+
"SheetClose",
|
|
1266
|
+
"SheetCloseButton",
|
|
1267
|
+
"SheetOverlay",
|
|
1268
|
+
"SheetPortal"
|
|
1269
|
+
],
|
|
1270
|
+
"sides": ["start", "end", "top", "bottom"],
|
|
1271
|
+
"sizes": ["sm", "default", "lg"],
|
|
1272
|
+
"features": [
|
|
1273
|
+
"focus trap",
|
|
1274
|
+
"outside dismissal",
|
|
1275
|
+
"Escape dismissal",
|
|
1276
|
+
"logical sides",
|
|
1277
|
+
"scrollable body",
|
|
1278
|
+
"footer actions"
|
|
1279
|
+
],
|
|
1280
|
+
"rtl": {
|
|
1281
|
+
"inheritsDirection": true,
|
|
1282
|
+
"placement": "Use side=\"start\" and side=\"end\" for logical placement; CSS start/end edges mirror under RTL.",
|
|
1283
|
+
"textDirection": "Title and description use dir=\"auto\" for Arabic and English copy.",
|
|
1284
|
+
"semantics": "Radix Dialog handles modal semantics, focus trapping, and dismissal."
|
|
1285
|
+
},
|
|
1286
|
+
"files": [
|
|
1287
|
+
{
|
|
1288
|
+
"source": "components/sheet.tsx",
|
|
1289
|
+
"target": "{{ui}}/sheet.tsx"
|
|
1290
|
+
}
|
|
1291
|
+
],
|
|
1292
|
+
"examples": ["examples/sheet-demo.tsx"]
|
|
1293
|
+
},
|
|
1294
|
+
"sidebar": {
|
|
1295
|
+
"description": "Composable app sidebar with controlled or uncontrolled collapse state, grouped menu items, logical start/end placement, RTL mirroring, and generated sidebar tokens.",
|
|
1296
|
+
"dependencies": {
|
|
1297
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
1298
|
+
"lucide-react": "^1.17.0"
|
|
1299
|
+
},
|
|
1300
|
+
"parts": [
|
|
1301
|
+
"SidebarProvider",
|
|
1302
|
+
"Sidebar",
|
|
1303
|
+
"SidebarHeader",
|
|
1304
|
+
"SidebarBody",
|
|
1305
|
+
"SidebarFooter",
|
|
1306
|
+
"SidebarGroup",
|
|
1307
|
+
"SidebarGroupLabel",
|
|
1308
|
+
"SidebarMenu",
|
|
1309
|
+
"SidebarMenuItem",
|
|
1310
|
+
"SidebarMenuButton",
|
|
1311
|
+
"SidebarToggle",
|
|
1312
|
+
"SidebarTrigger",
|
|
1313
|
+
"SidebarInset",
|
|
1314
|
+
"SidebarRail"
|
|
1315
|
+
],
|
|
1316
|
+
"features": [
|
|
1317
|
+
"controlled collapse",
|
|
1318
|
+
"uncontrolled collapse",
|
|
1319
|
+
"group labels",
|
|
1320
|
+
"icon-only collapsed state",
|
|
1321
|
+
"logical side placement"
|
|
1322
|
+
],
|
|
1323
|
+
"tokens": [
|
|
1324
|
+
"--bh-sidebar-width",
|
|
1325
|
+
"--bh-sidebar-width-collapsed",
|
|
1326
|
+
"--bh-sidebar-item-height",
|
|
1327
|
+
"--bh-sidebar-padding",
|
|
1328
|
+
"--bh-sidebar-bg",
|
|
1329
|
+
"--bh-sidebar-border",
|
|
1330
|
+
"--shadow-sidebar"
|
|
1331
|
+
],
|
|
1332
|
+
"rtl": {
|
|
1333
|
+
"inheritsDirection": true,
|
|
1334
|
+
"placement": "Use side=\"start\" or side=\"end\" with dir on SidebarProvider for logical placement.",
|
|
1335
|
+
"spacing": "Menu item icon and label spacing uses flex gaps and logical text alignment."
|
|
1336
|
+
},
|
|
1337
|
+
"files": [
|
|
1338
|
+
{
|
|
1339
|
+
"source": "components/sidebar.tsx",
|
|
1340
|
+
"target": "{{ui}}/sidebar.tsx"
|
|
1341
|
+
}
|
|
1342
|
+
],
|
|
1343
|
+
"examples": ["examples/sidebar-demo.tsx"]
|
|
1344
|
+
},
|
|
1345
|
+
"navigation-menu": {
|
|
1346
|
+
"description": "Radix NavigationMenu-backed top navigation with trigger, content, link, viewport, and indicator parts.",
|
|
1347
|
+
"dependencies": {
|
|
1348
|
+
"@radix-ui/react-navigation-menu": "^1.2.17",
|
|
1349
|
+
"lucide-react": "^1.17.0"
|
|
1350
|
+
},
|
|
1351
|
+
"parts": [
|
|
1352
|
+
"NavigationMenu",
|
|
1353
|
+
"NavigationMenuList",
|
|
1354
|
+
"NavigationMenuItem",
|
|
1355
|
+
"NavigationMenuTrigger",
|
|
1356
|
+
"NavigationMenuContent",
|
|
1357
|
+
"NavigationMenuLink",
|
|
1358
|
+
"NavigationMenuViewport",
|
|
1359
|
+
"NavigationMenuIndicator"
|
|
1360
|
+
],
|
|
1361
|
+
"features": ["top navigation", "viewport", "indicator", "dropdown content"],
|
|
1362
|
+
"rtl": {
|
|
1363
|
+
"inheritsDirection": true,
|
|
1364
|
+
"spacing": "Triggers, links, and content use logical layout and inherited direction."
|
|
1365
|
+
},
|
|
1366
|
+
"files": [
|
|
1367
|
+
{
|
|
1368
|
+
"source": "components/navigation-menu.tsx",
|
|
1369
|
+
"target": "{{ui}}/navigation-menu.tsx"
|
|
1370
|
+
}
|
|
1371
|
+
],
|
|
1372
|
+
"examples": ["examples/navigation-menu-demo.tsx"]
|
|
1373
|
+
},
|
|
1374
|
+
"scroll-area": {
|
|
1375
|
+
"description": "Radix ScrollArea wrapper with tokenized viewport, scrollbar, thumb, and corner styling for bounded panels and menus.",
|
|
1376
|
+
"dependencies": {
|
|
1377
|
+
"@radix-ui/react-scroll-area": "^1.2.13"
|
|
1378
|
+
},
|
|
1379
|
+
"parts": ["ScrollArea", "ScrollBar"],
|
|
1380
|
+
"features": ["vertical scrollbar", "horizontal scrollbar", "viewport clipping"],
|
|
1381
|
+
"rtl": {
|
|
1382
|
+
"inheritsDirection": true,
|
|
1383
|
+
"spacing": "Viewport content should use logical padding so scrollable regions mirror with document direction."
|
|
1384
|
+
},
|
|
1385
|
+
"files": [
|
|
1386
|
+
{
|
|
1387
|
+
"source": "components/scroll-area.tsx",
|
|
1388
|
+
"target": "{{ui}}/scroll-area.tsx"
|
|
1389
|
+
}
|
|
1390
|
+
],
|
|
1391
|
+
"examples": ["examples/scroll-area-demo.tsx"]
|
|
1392
|
+
},
|
|
1393
|
+
"resizable": {
|
|
1394
|
+
"description": "react-resizable-panels-backed split pane primitive with horizontal and vertical panel groups plus tokenized resize handle.",
|
|
1395
|
+
"dependencies": {
|
|
1396
|
+
"lucide-react": "^1.17.0",
|
|
1397
|
+
"react-resizable-panels": "^4.12.1"
|
|
1398
|
+
},
|
|
1399
|
+
"parts": ["ResizablePanelGroup", "ResizablePanel", "ResizableHandle"],
|
|
1400
|
+
"features": ["horizontal panels", "vertical panels", "keyboard resize handle"],
|
|
1401
|
+
"rtl": {
|
|
1402
|
+
"inheritsDirection": true,
|
|
1403
|
+
"layout": "Panel order follows DOM order; use logical shell layout for RTL workspaces."
|
|
1404
|
+
},
|
|
1405
|
+
"files": [
|
|
1406
|
+
{
|
|
1407
|
+
"source": "components/resizable.tsx",
|
|
1408
|
+
"target": "{{ui}}/resizable.tsx"
|
|
1409
|
+
}
|
|
1410
|
+
],
|
|
1411
|
+
"examples": ["examples/resizable-demo.tsx"]
|
|
1412
|
+
},
|
|
819
1413
|
"autocomplete": {
|
|
820
1414
|
"description": "Composable autocomplete and combobox field built from Banhaten Input, Select menu items, and Tag selections with filtering, single or multiple selection, keyboard navigation, error/disabled states, and RTL-safe layout.",
|
|
821
1415
|
"dependencies": {
|
|
@@ -1074,6 +1668,34 @@
|
|
|
1074
1668
|
],
|
|
1075
1669
|
"examples": ["examples/spinner-demo.tsx"]
|
|
1076
1670
|
},
|
|
1671
|
+
"toast": {
|
|
1672
|
+
"description": "Sonner-style transient feedback primitive with Banhaten token styling, success, danger, warning, info, and default intents, action slot support, and logical RTL placement.",
|
|
1673
|
+
"dependencies": {
|
|
1674
|
+
"sonner": "^2.0.7"
|
|
1675
|
+
},
|
|
1676
|
+
"parts": ["Toaster", "toast"],
|
|
1677
|
+
"intents": ["default", "success", "danger", "warning", "info"],
|
|
1678
|
+
"sides": ["start", "end"],
|
|
1679
|
+
"features": [
|
|
1680
|
+
"semantic shortcuts",
|
|
1681
|
+
"action slot",
|
|
1682
|
+
"close button",
|
|
1683
|
+
"logical placement",
|
|
1684
|
+
"toast promise support"
|
|
1685
|
+
],
|
|
1686
|
+
"rtl": {
|
|
1687
|
+
"inheritsDirection": true,
|
|
1688
|
+
"placement": "side=\"end\" resolves to top-right in LTR and top-left in RTL; side=\"start\" resolves to the opposite edge.",
|
|
1689
|
+
"textDirection": "Toast content inherits the Toaster direction and uses tokenized typography classes."
|
|
1690
|
+
},
|
|
1691
|
+
"files": [
|
|
1692
|
+
{
|
|
1693
|
+
"source": "components/toast.tsx",
|
|
1694
|
+
"target": "{{ui}}/toast.tsx"
|
|
1695
|
+
}
|
|
1696
|
+
],
|
|
1697
|
+
"examples": ["examples/toast-demo.tsx"]
|
|
1698
|
+
},
|
|
1077
1699
|
"activity-feed": {
|
|
1078
1700
|
"description": "Expanded activity feed composition with avatar indicators, status dots, captions, action buttons, slot rows, timestamps, links, and RTL copy.",
|
|
1079
1701
|
"status": "expanded",
|
|
@@ -1418,21 +2040,43 @@
|
|
|
1418
2040
|
"examples": ["examples/expanded/steps-demo.tsx"]
|
|
1419
2041
|
},
|
|
1420
2042
|
"tabs": {
|
|
1421
|
-
"description": "
|
|
1422
|
-
"
|
|
1423
|
-
|
|
1424
|
-
|
|
2043
|
+
"description": "Radix Tabs-backed local navigation primitive with underline, segmented, and rounded treatments across size, width behavior, controlled state, LTR, and RTL.",
|
|
2044
|
+
"dependencies": {
|
|
2045
|
+
"@radix-ui/react-tabs": "^1.1.16"
|
|
2046
|
+
},
|
|
2047
|
+
"parts": [
|
|
2048
|
+
"Tabs",
|
|
2049
|
+
"TabsRoot",
|
|
2050
|
+
"TabsList",
|
|
2051
|
+
"TabsTrigger",
|
|
2052
|
+
"TabsContent"
|
|
2053
|
+
],
|
|
2054
|
+
"variants": ["underline", "segment", "rounded"],
|
|
2055
|
+
"sizes": ["md", "sm", "xs"],
|
|
2056
|
+
"features": [
|
|
2057
|
+
"Radix keyboard behavior",
|
|
2058
|
+
"controlled active index",
|
|
2059
|
+
"controlled value",
|
|
2060
|
+
"optional panels",
|
|
2061
|
+
"full-width tabs"
|
|
2062
|
+
],
|
|
2063
|
+
"rtl": {
|
|
2064
|
+
"inheritsDirection": true,
|
|
2065
|
+
"keyboard": "Radix receives dir so arrow-key navigation follows the document direction.",
|
|
2066
|
+
"textDirection": "Trigger labels use dir=\"auto\" by default for Arabic and English tab labels.",
|
|
2067
|
+
"spacing": "Uses inherited direction and logical inline spacing so underline, segmented, and rounded treatments mirror naturally."
|
|
2068
|
+
},
|
|
1425
2069
|
"files": [
|
|
1426
2070
|
{
|
|
1427
|
-
"source": "components/
|
|
1428
|
-
"target": "{{ui}}/
|
|
2071
|
+
"source": "components/tabs.css",
|
|
2072
|
+
"target": "{{ui}}/tabs.css"
|
|
1429
2073
|
},
|
|
1430
2074
|
{
|
|
1431
|
-
"source": "components/
|
|
1432
|
-
"target": "{{ui}}/
|
|
2075
|
+
"source": "components/tabs.tsx",
|
|
2076
|
+
"target": "{{ui}}/tabs.tsx"
|
|
1433
2077
|
}
|
|
1434
2078
|
],
|
|
1435
|
-
"examples": ["examples/
|
|
2079
|
+
"examples": ["examples/tabs-demo.tsx"]
|
|
1436
2080
|
},
|
|
1437
2081
|
"timeline": {
|
|
1438
2082
|
"description": "Expanded timeline composition with vertical and horizontal orientations, dates, captions, active states, finished states, item variants, and RTL layouts.",
|