tembro 4.2.1 → 5.0.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/components/patterns/index.d.ts +0 -8
  3. package/dist/components/patterns/public.d.ts +0 -8
  4. package/dist/components/ui/hover-card/index.cjs +1 -0
  5. package/dist/components/ui/hover-card/index.d.ts +11 -0
  6. package/dist/components/ui/hover-card/index.js +1 -0
  7. package/dist/components/ui/menubar/index.cjs +1 -0
  8. package/dist/components/ui/menubar/index.d.ts +42 -0
  9. package/dist/components/ui/menubar/index.js +1 -0
  10. package/dist/components/ui/navigation-menu/index.cjs +1 -0
  11. package/dist/components/ui/navigation-menu/index.d.ts +20 -0
  12. package/dist/components/ui/navigation-menu/index.js +1 -0
  13. package/dist/index.d.ts +4 -0
  14. package/dist/src/components/patterns/index.cjs +1 -1
  15. package/dist/src/components/patterns/index.js +2 -10
  16. package/dist/src/components/patterns/public.cjs +1 -1
  17. package/dist/src/components/patterns/public.js +2 -10
  18. package/dist/src/components/ui/hover-card/index.cjs +1 -0
  19. package/dist/src/components/ui/hover-card/index.js +50 -0
  20. package/dist/src/components/ui/menubar/index.cjs +1 -0
  21. package/dist/src/components/ui/menubar/index.js +132 -0
  22. package/dist/src/components/ui/navigation-menu/index.cjs +1 -0
  23. package/dist/src/components/ui/navigation-menu/index.js +73 -0
  24. package/dist/src/index.cjs +1 -1
  25. package/dist/src/index.js +25 -29
  26. package/dist/src/public-component-surface.cjs +1 -1
  27. package/dist/src/public-component-surface.js +16 -42
  28. package/package.json +1 -1
  29. package/packages/cli/dist/index.cjs +100 -100
  30. package/packages/cli/vendor/src/components/patterns/index.ts +0 -8
  31. package/packages/cli/vendor/src/components/patterns/public.ts +0 -8
  32. package/packages/cli/vendor/src/components/ui/hover-card/index.tsx +72 -0
  33. package/packages/cli/vendor/src/components/ui/menubar/index.tsx +140 -0
  34. package/packages/cli/vendor/src/components/ui/navigation-menu/index.tsx +100 -0
  35. package/packages/cli/vendor/src/index.ts +6 -2
  36. package/packages/cli/vendor/src/public-component-surface.ts +4 -10
  37. package/packages/cli/vendor/templates/showcase/src/showcase/data/registry.ts +10 -10
  38. package/packages/cli/vendor/templates/showcase/src/showcase/layout/HeroSection.tsx +2 -2
  39. package/packages/cli/vendor/templates/showcase/src/showcase/layout/WorkbenchSidebar.tsx +1 -1
  40. package/registry.json +2124 -258
  41. package/dist/components/patterns/bulk-action-bar.cjs +0 -1
  42. package/dist/components/patterns/bulk-action-bar.d.ts +0 -10
  43. package/dist/components/patterns/bulk-action-bar.js +0 -1
  44. package/dist/components/patterns/data-view.cjs +0 -1
  45. package/dist/components/patterns/data-view.d.ts +0 -17
  46. package/dist/components/patterns/data-view.js +0 -1
  47. package/dist/components/patterns/detail-layout.cjs +0 -1
  48. package/dist/components/patterns/detail-layout.d.ts +0 -16
  49. package/dist/components/patterns/detail-layout.js +0 -1
  50. package/dist/components/patterns/form-builder.cjs +0 -1
  51. package/dist/components/patterns/form-builder.d.ts +0 -110
  52. package/dist/components/patterns/form-builder.js +0 -1
  53. package/dist/components/patterns/page-toolbar.cjs +0 -1
  54. package/dist/components/patterns/page-toolbar.d.ts +0 -11
  55. package/dist/components/patterns/page-toolbar.js +0 -1
  56. package/dist/components/patterns/resource-detail-page.cjs +0 -1
  57. package/dist/components/patterns/resource-detail-page.d.ts +0 -39
  58. package/dist/components/patterns/resource-detail-page.js +0 -1
  59. package/dist/components/patterns/resource-page.cjs +0 -1
  60. package/dist/components/patterns/resource-page.d.ts +0 -30
  61. package/dist/components/patterns/resource-page.js +0 -1
  62. package/dist/components/patterns/settings-page.cjs +0 -1
  63. package/dist/components/patterns/settings-page.d.ts +0 -21
  64. package/dist/components/patterns/settings-page.js +0 -1
  65. package/dist/src/components/patterns/bulk-action-bar.cjs +0 -1
  66. package/dist/src/components/patterns/bulk-action-bar.js +0 -34
  67. package/dist/src/components/patterns/data-view.cjs +0 -1
  68. package/dist/src/components/patterns/data-view.js +0 -47
  69. package/dist/src/components/patterns/detail-layout.cjs +0 -1
  70. package/dist/src/components/patterns/detail-layout.js +0 -65
  71. package/dist/src/components/patterns/form-builder.cjs +0 -1
  72. package/dist/src/components/patterns/form-builder.js +0 -263
  73. package/dist/src/components/patterns/page-toolbar.cjs +0 -1
  74. package/dist/src/components/patterns/page-toolbar.js +0 -41
  75. package/dist/src/components/patterns/resource-detail-page.cjs +0 -1
  76. package/dist/src/components/patterns/resource-detail-page.js +0 -100
  77. package/dist/src/components/patterns/resource-page.cjs +0 -1
  78. package/dist/src/components/patterns/resource-page.js +0 -88
  79. package/dist/src/components/patterns/settings-page.cjs +0 -1
  80. package/dist/src/components/patterns/settings-page.js +0 -64
  81. package/packages/cli/vendor/src/components/patterns/bulk-action-bar.tsx +0 -53
  82. package/packages/cli/vendor/src/components/patterns/data-view.tsx +0 -64
  83. package/packages/cli/vendor/src/components/patterns/detail-layout.tsx +0 -75
  84. package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -472
  85. package/packages/cli/vendor/src/components/patterns/page-toolbar.tsx +0 -61
  86. package/packages/cli/vendor/src/components/patterns/resource-detail-page.tsx +0 -164
  87. package/packages/cli/vendor/src/components/patterns/resource-page.tsx +0 -149
  88. package/packages/cli/vendor/src/components/patterns/settings-page.tsx +0 -84
@@ -1,9 +1 @@
1
- export * from './form-builder'
2
- export * from './resource-page'
3
- export * from './resource-detail-page'
4
1
  export * from "./empty-state"
5
- export * from "./page-toolbar"
6
- export * from "./bulk-action-bar"
7
- export * from "./detail-layout"
8
- export * from "./settings-page"
9
- export * from "./data-view"
@@ -1,9 +1 @@
1
- export * from "./form-builder"
2
- export * from "./resource-page"
3
- export * from "./resource-detail-page"
4
1
  export * from "./empty-state"
5
- export * from "./page-toolbar"
6
- export * from "./bulk-action-bar"
7
- export * from "./detail-layout"
8
- export * from "./settings-page"
9
- export * from "./data-view"
@@ -0,0 +1,72 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card"
5
+
6
+ import { cn } from "@/lib/utils"
7
+
8
+ export type HoverCardProps = PreviewCardPrimitive.Root.Props
9
+ export type HoverCardTriggerProps = PreviewCardPrimitive.Trigger.Props
10
+ export type HoverCardContentProps = PreviewCardPrimitive.Popup.Props &
11
+ Pick<
12
+ PreviewCardPrimitive.Positioner.Props,
13
+ "align" | "alignOffset" | "collisionBoundary" | "collisionPadding" | "side" | "sideOffset"
14
+ >
15
+ export type HoverCardArrowProps = PreviewCardPrimitive.Arrow.Props
16
+
17
+ function HoverCard({ ...props }: HoverCardProps) {
18
+ return <PreviewCardPrimitive.Root data-slot="hover-card" {...props} />
19
+ }
20
+
21
+ function HoverCardTrigger({ ...props }: HoverCardTriggerProps) {
22
+ if (!("render" in props) && React.isValidElement(props.children)) {
23
+ const { children, ...rest } = props
24
+ return <PreviewCardPrimitive.Trigger data-slot="hover-card-trigger" render={children} {...rest} />
25
+ }
26
+
27
+ return <PreviewCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />
28
+ }
29
+
30
+ function HoverCardContent({
31
+ className,
32
+ align = "center",
33
+ alignOffset = 0,
34
+ collisionPadding = 12,
35
+ side = "bottom",
36
+ sideOffset = 8,
37
+ ...props
38
+ }: HoverCardContentProps) {
39
+ return (
40
+ <PreviewCardPrimitive.Portal>
41
+ <PreviewCardPrimitive.Positioner
42
+ align={align}
43
+ alignOffset={alignOffset}
44
+ collisionPadding={collisionPadding}
45
+ side={side}
46
+ sideOffset={sideOffset}
47
+ className="isolate z-50 outline-none"
48
+ >
49
+ <PreviewCardPrimitive.Popup
50
+ data-slot="hover-card-content"
51
+ className={cn(
52
+ "z-50 grid max-h-[min(var(--available-height),calc(100dvh-1rem))] w-80 max-w-[calc(100vw-1rem)] origin-(--transform-origin) gap-3 overflow-y-auto rounded-[var(--radius-lg)] border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
53
+ className
54
+ )}
55
+ {...props}
56
+ />
57
+ </PreviewCardPrimitive.Positioner>
58
+ </PreviewCardPrimitive.Portal>
59
+ )
60
+ }
61
+
62
+ function HoverCardArrow({ className, ...props }: HoverCardArrowProps) {
63
+ return (
64
+ <PreviewCardPrimitive.Arrow
65
+ data-slot="hover-card-arrow"
66
+ className={cn("z-50 flex size-3 rotate-45 border border-border bg-popover", className)}
67
+ {...props}
68
+ />
69
+ )
70
+ }
71
+
72
+ export { HoverCard, HoverCardArrow, HoverCardContent, HoverCardTrigger }
@@ -0,0 +1,140 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Menubar as MenubarPrimitive } from "@base-ui/react/menubar"
5
+ import { Menu as MenuPrimitive } from "@base-ui/react/menu"
6
+ import { CheckIcon, ChevronRightIcon } from "lucide-react"
7
+
8
+ import { cn } from "@/lib/utils"
9
+
10
+ export type MenubarProps = MenubarPrimitive.Props
11
+ export type MenubarMenuProps = MenuPrimitive.Root.Props
12
+ export type MenubarTriggerProps = MenuPrimitive.Trigger.Props
13
+ export type MenubarContentProps = MenuPrimitive.Popup.Props &
14
+ Pick<MenuPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">
15
+ export type MenubarItemProps = MenuPrimitive.Item.Props & { inset?: boolean; variant?: "default" | "destructive" }
16
+ export type MenubarCheckboxItemProps = MenuPrimitive.CheckboxItem.Props & { inset?: boolean }
17
+ export type MenubarRadioGroupProps = MenuPrimitive.RadioGroup.Props
18
+ export type MenubarRadioItemProps = MenuPrimitive.RadioItem.Props & { inset?: boolean }
19
+ export type MenubarSubProps = MenuPrimitive.SubmenuRoot.Props
20
+ export type MenubarSubTriggerProps = MenuPrimitive.SubmenuTrigger.Props & { inset?: boolean }
21
+ export type MenubarSeparatorProps = MenuPrimitive.Separator.Props
22
+ export type MenubarLabelProps = React.ComponentProps<"div"> & { inset?: boolean }
23
+ export type MenubarShortcutProps = React.ComponentProps<"span">
24
+
25
+ const itemClassName =
26
+ "relative flex min-h-8 cursor-default select-none items-center gap-2 rounded-[var(--radius-md)] px-2.5 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset=true]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus-visible:bg-destructive/10 data-[variant=destructive]:hover:bg-destructive/10"
27
+
28
+ function Menubar({ className, ...props }: MenubarProps) {
29
+ return (
30
+ <MenubarPrimitive
31
+ data-slot="menubar"
32
+ className={cn("flex h-10 items-center gap-1 rounded-[var(--radius-lg)] border border-border bg-card p-1 text-card-foreground shadow-sm", className)}
33
+ {...props}
34
+ />
35
+ )
36
+ }
37
+
38
+ function MenubarMenu({ ...props }: MenubarMenuProps) {
39
+ return <MenuPrimitive.Root data-slot="menubar-menu" {...props} />
40
+ }
41
+
42
+ function MenubarTrigger({ className, ...props }: MenubarTriggerProps) {
43
+ return (
44
+ <MenuPrimitive.Trigger
45
+ data-slot="menubar-trigger"
46
+ className={cn("inline-flex h-8 items-center justify-center rounded-[var(--radius-md)] px-3 text-sm font-medium outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground data-[popup-open]:bg-accent data-[popup-open]:text-accent-foreground disabled:pointer-events-none disabled:opacity-50", className)}
47
+ {...props}
48
+ />
49
+ )
50
+ }
51
+
52
+ function MenubarContent({ className, align = "start", alignOffset = 0, side = "bottom", sideOffset = 6, ...props }: MenubarContentProps) {
53
+ return (
54
+ <MenuPrimitive.Portal>
55
+ <MenuPrimitive.Positioner align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset} className="isolate z-50 outline-none">
56
+ <MenuPrimitive.Popup
57
+ data-slot="menubar-content"
58
+ className={cn("z-50 min-w-48 origin-(--transform-origin) overflow-hidden rounded-[var(--radius-lg)] border border-border bg-popover p-1 text-popover-foreground shadow-lg outline-none duration-100 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className)}
59
+ {...props}
60
+ />
61
+ </MenuPrimitive.Positioner>
62
+ </MenuPrimitive.Portal>
63
+ )
64
+ }
65
+
66
+ function MenubarItem({ className, inset, variant = "default", ...props }: MenubarItemProps) {
67
+ return <MenuPrimitive.Item data-slot="menubar-item" data-inset={inset || undefined} data-variant={variant} className={cn(itemClassName, className)} {...props} />
68
+ }
69
+
70
+ function MenubarCheckboxItem({ className, children, checked, inset, ...props }: MenubarCheckboxItemProps) {
71
+ return (
72
+ <MenuPrimitive.CheckboxItem data-slot="menubar-checkbox-item" data-inset={inset || undefined} className={cn(itemClassName, "pl-8", className)} checked={checked} {...props}>
73
+ <span className="absolute left-2 inline-flex size-4 items-center justify-center">
74
+ <MenuPrimitive.CheckboxItemIndicator><CheckIcon className="size-4" /></MenuPrimitive.CheckboxItemIndicator>
75
+ </span>
76
+ {children}
77
+ </MenuPrimitive.CheckboxItem>
78
+ )
79
+ }
80
+
81
+ function MenubarRadioGroup({ ...props }: MenubarRadioGroupProps) {
82
+ return <MenuPrimitive.RadioGroup data-slot="menubar-radio-group" {...props} />
83
+ }
84
+
85
+ function MenubarRadioItem({ className, children, inset, ...props }: MenubarRadioItemProps) {
86
+ return (
87
+ <MenuPrimitive.RadioItem data-slot="menubar-radio-item" data-inset={inset || undefined} className={cn(itemClassName, "pl-8", className)} {...props}>
88
+ <span className="absolute left-2 inline-flex size-4 items-center justify-center">
89
+ <MenuPrimitive.RadioItemIndicator><CheckIcon className="size-4" /></MenuPrimitive.RadioItemIndicator>
90
+ </span>
91
+ {children}
92
+ </MenuPrimitive.RadioItem>
93
+ )
94
+ }
95
+
96
+ function MenubarSub({ ...props }: MenubarSubProps) {
97
+ return <MenuPrimitive.SubmenuRoot data-slot="menubar-sub" {...props} />
98
+ }
99
+
100
+ function MenubarSubTrigger({ className, children, inset, ...props }: MenubarSubTriggerProps) {
101
+ return (
102
+ <MenuPrimitive.SubmenuTrigger data-slot="menubar-sub-trigger" data-inset={inset || undefined} className={cn(itemClassName, className)} {...props}>
103
+ {children}
104
+ <ChevronRightIcon className="ml-auto size-4" />
105
+ </MenuPrimitive.SubmenuTrigger>
106
+ )
107
+ }
108
+
109
+ function MenubarSubContent(props: MenubarContentProps) {
110
+ return <MenubarContent data-slot="menubar-sub-content" side="right" align="start" alignOffset={-4} sideOffset={0} {...props} />
111
+ }
112
+
113
+ function MenubarSeparator({ className, ...props }: MenubarSeparatorProps) {
114
+ return <MenuPrimitive.Separator data-slot="menubar-separator" className={cn("-mx-1 my-1 h-px bg-border", className)} {...props} />
115
+ }
116
+
117
+ function MenubarLabel({ className, inset, ...props }: MenubarLabelProps) {
118
+ return <div data-slot="menubar-label" data-inset={inset || undefined} className={cn("px-2.5 py-1.5 text-xs font-semibold text-muted-foreground data-[inset=true]:pl-8", className)} {...props} />
119
+ }
120
+
121
+ function MenubarShortcut({ className, ...props }: MenubarShortcutProps) {
122
+ return <span data-slot="menubar-shortcut" className={cn("ml-auto text-xs tracking-widest text-muted-foreground", className)} {...props} />
123
+ }
124
+
125
+ export {
126
+ Menubar,
127
+ MenubarCheckboxItem,
128
+ MenubarContent,
129
+ MenubarItem,
130
+ MenubarLabel,
131
+ MenubarMenu,
132
+ MenubarRadioGroup,
133
+ MenubarRadioItem,
134
+ MenubarSeparator,
135
+ MenubarShortcut,
136
+ MenubarSub,
137
+ MenubarSubContent,
138
+ MenubarSubTrigger,
139
+ MenubarTrigger,
140
+ }
@@ -0,0 +1,100 @@
1
+ "use client"
2
+
3
+ import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu"
4
+ import { ChevronDownIcon } from "lucide-react"
5
+
6
+ import { cn } from "@/lib/utils"
7
+
8
+ export type NavigationMenuProps = NavigationMenuPrimitive.Root.Props
9
+ export type NavigationMenuListProps = NavigationMenuPrimitive.List.Props
10
+ export type NavigationMenuItemProps = NavigationMenuPrimitive.Item.Props
11
+ export type NavigationMenuTriggerProps = NavigationMenuPrimitive.Trigger.Props
12
+ export type NavigationMenuContentProps = NavigationMenuPrimitive.Content.Props
13
+ export type NavigationMenuLinkProps = NavigationMenuPrimitive.Link.Props
14
+ export type NavigationMenuViewportProps = NavigationMenuPrimitive.Viewport.Props
15
+ export type NavigationMenuPositionerProps = NavigationMenuPrimitive.Positioner.Props
16
+ export type NavigationMenuArrowProps = NavigationMenuPrimitive.Arrow.Props
17
+
18
+ function NavigationMenu({ className, ...props }: NavigationMenuProps) {
19
+ return <NavigationMenuPrimitive.Root data-slot="navigation-menu" className={cn("relative z-10 flex max-w-max flex-1 items-center justify-center", className)} {...props} />
20
+ }
21
+
22
+ function NavigationMenuList({ className, ...props }: NavigationMenuListProps) {
23
+ return <NavigationMenuPrimitive.List data-slot="navigation-menu-list" className={cn("flex flex-1 list-none items-center justify-center gap-1", className)} {...props} />
24
+ }
25
+
26
+ function NavigationMenuItem({ className, ...props }: NavigationMenuItemProps) {
27
+ return <NavigationMenuPrimitive.Item data-slot="navigation-menu-item" className={cn("relative", className)} {...props} />
28
+ }
29
+
30
+ function NavigationMenuTrigger({ className, children, ...props }: NavigationMenuTriggerProps) {
31
+ return (
32
+ <NavigationMenuPrimitive.Trigger
33
+ data-slot="navigation-menu-trigger"
34
+ className={cn("group inline-flex h-10 items-center justify-center gap-1 rounded-[var(--radius-md)] px-4 py-2 text-sm font-medium outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground data-[popup-open]:bg-accent data-[popup-open]:text-accent-foreground disabled:pointer-events-none disabled:opacity-50", className)}
35
+ {...props}
36
+ >
37
+ {children}
38
+ <ChevronDownIcon className="size-4 shrink-0 transition-transform duration-200 group-data-[popup-open]:rotate-180" />
39
+ </NavigationMenuPrimitive.Trigger>
40
+ )
41
+ }
42
+
43
+ function NavigationMenuContent({ className, ...props }: NavigationMenuContentProps) {
44
+ return (
45
+ <NavigationMenuPrimitive.Content
46
+ data-slot="navigation-menu-content"
47
+ className={cn("left-0 top-0 w-full p-4 md:absolute md:w-auto", className)}
48
+ {...props}
49
+ />
50
+ )
51
+ }
52
+
53
+ function NavigationMenuLink({ className, ...props }: NavigationMenuLinkProps) {
54
+ return (
55
+ <NavigationMenuPrimitive.Link
56
+ data-slot="navigation-menu-link"
57
+ className={cn("block select-none rounded-[var(--radius-md)] p-3 text-sm leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground data-[active]:bg-accent data-[active]:text-accent-foreground", className)}
58
+ {...props}
59
+ />
60
+ )
61
+ }
62
+
63
+ function NavigationMenuPositioner({ className, sideOffset = 8, ...props }: NavigationMenuPositionerProps) {
64
+ return (
65
+ <NavigationMenuPrimitive.Portal>
66
+ <NavigationMenuPrimitive.Positioner
67
+ data-slot="navigation-menu-positioner"
68
+ sideOffset={sideOffset}
69
+ className={cn("isolate z-50 flex justify-center", className)}
70
+ {...props}
71
+ />
72
+ </NavigationMenuPrimitive.Portal>
73
+ )
74
+ }
75
+
76
+ function NavigationMenuViewport({ className, ...props }: NavigationMenuViewportProps) {
77
+ return (
78
+ <NavigationMenuPrimitive.Viewport
79
+ data-slot="navigation-menu-viewport"
80
+ className={cn("relative h-(--height) w-full min-w-80 origin-(--transform-origin) overflow-hidden rounded-[var(--radius-lg)] border border-border bg-popover text-popover-foreground shadow-lg duration-100 md:w-(--width) data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className)}
81
+ {...props}
82
+ />
83
+ )
84
+ }
85
+
86
+ function NavigationMenuArrow({ className, ...props }: NavigationMenuArrowProps) {
87
+ return <NavigationMenuPrimitive.Arrow data-slot="navigation-menu-arrow" className={cn("z-50 flex size-3 rotate-45 border border-border bg-popover", className)} {...props} />
88
+ }
89
+
90
+ export {
91
+ NavigationMenu,
92
+ NavigationMenuArrow,
93
+ NavigationMenuContent,
94
+ NavigationMenuItem,
95
+ NavigationMenuLink,
96
+ NavigationMenuList,
97
+ NavigationMenuPositioner,
98
+ NavigationMenuTrigger,
99
+ NavigationMenuViewport,
100
+ }
@@ -9,12 +9,16 @@ export * from './components/ui/badge'
9
9
  export * from './components/ui/tabs'
10
10
  export * from './components/ui/dialog'
11
11
  export * from './components/ui/dropdown-menu'
12
- export * from './components/ui/popover'
12
+ export * from './components/ui/popover'
13
+ export * from './components/ui/hover-card'
14
+ export * from './components/ui/menubar'
15
+ export * from './components/ui/navigation-menu'
13
16
  export * from './components/ui/select'
14
17
  export * from './components/ui/table'
15
18
  export * from './components/ui/accordion'
16
19
  export * from './components/ui/collapse'
17
- export * from './components/ui/skeleton'
20
+ export * from './components/ui/command'
21
+ export * from './components/ui/skeleton'
18
22
  export * from './components/ui/divider'
19
23
  export * from './components/ui/segmented-control'
20
24
  export * from './components/ui/spinner'
@@ -19,6 +19,9 @@ export const documentedPublicComponentSurfaces: readonly PublicComponentSurfaceE
19
19
  { slug: "overlay", registryName: "dialog", surface: "documented" },
20
20
  { slug: "dropdown-menu", registryName: "dropdown-menu", surface: "documented" },
21
21
  { slug: "popover", registryName: "popover", surface: "documented" },
22
+ { slug: "hover-card", registryName: "hover-card", surface: "documented" },
23
+ { slug: "menubar", registryName: "menubar", surface: "documented" },
24
+ { slug: "navigation-menu", registryName: "navigation-menu", surface: "documented" },
22
25
  { slug: "tooltip", registryName: "tooltip", surface: "documented" },
23
26
  { slug: "data-table", registryName: "data-table", surface: "documented" },
24
27
  { slug: "pagination", registryName: "pagination", surface: "documented" },
@@ -71,16 +74,7 @@ export const documentedPublicComponentSurfaces: readonly PublicComponentSurfaceE
71
74
  { slug: "image-cropper", registryName: "image-cropper", surface: "documented" },
72
75
  ] as const
73
76
 
74
- export const standalonePublicComponentSurfaces: readonly PublicComponentSurfaceEntry[] = [
75
- { slug: "form-builder", registryName: "form-builder", surface: "standalone" },
76
- { slug: "page-toolbar", registryName: "page-toolbar", surface: "standalone" },
77
- { slug: "bulk-action-bar", registryName: "bulk-action-bar", surface: "standalone" },
78
- { slug: "detail-layout", registryName: "detail-layout", surface: "standalone" },
79
- { slug: "settings-page", registryName: "settings-page", surface: "standalone" },
80
- { slug: "data-view", registryName: "data-view", surface: "standalone" },
81
- { slug: "resource-page", registryName: "resource-page", surface: "standalone" },
82
- { slug: "resource-detail-page", registryName: "resource-detail-page", surface: "standalone" },
83
- ] as const
77
+ export const standalonePublicComponentSurfaces: readonly PublicComponentSurfaceEntry[] = [] as const
84
78
 
85
79
  export const publicComponentSurfaceEntries = [
86
80
  ...documentedPublicComponentSurfaces,
@@ -42,6 +42,8 @@ export const registryGroups: RegistryGroup[] = [
42
42
  component("dropdown-menu", "stable", "src/components/ui/dropdown-menu"),
43
43
  component("popover", "stable", "src/components/ui/popover"),
44
44
  component("tooltip", "preview", "src/components/ui/tooltip"),
45
+ component("hover-card", "stable", "src/components/ui/hover-card"),
46
+ component("menubar", "preview", "src/components/ui/menubar"),
45
47
  component("select", "stable", "src/components/ui/select"),
46
48
  component("table", "stable", "src/components/ui/table"),
47
49
  component("segmented-control", "preview", "src/components/ui/segmented-control"),
@@ -153,15 +155,7 @@ export const registryGroups: RegistryGroup[] = [
153
155
  {
154
156
  name: "patterns",
155
157
  components: [
156
- component("bulk-action-bar", "preview", "src/components/patterns/bulk-action-bar.tsx"),
157
- component("data-view", "preview", "src/components/patterns/data-view.tsx"),
158
- component("detail-layout", "preview", "src/components/patterns/detail-layout.tsx"),
159
158
  component("empty-state", "preview", "src/components/patterns/empty-state.tsx"),
160
- component("form-builder", "preview", "src/components/patterns/form-builder.tsx"),
161
- component("resource-detail-page", "preview", "src/components/patterns/resource-detail-page.tsx"),
162
- component("resource-page", "preview", "src/components/patterns/resource-page.tsx"),
163
- component("page-toolbar", "preview", "src/components/patterns/page-toolbar.tsx"),
164
- component("settings-page", "preview", "src/components/patterns/settings-page.tsx"),
165
159
  ],
166
160
  },
167
161
  {
@@ -188,7 +182,13 @@ export const registryGroups: RegistryGroup[] = [
188
182
  component("saved-filter-select", "preview", "src/components/filters/saved-filter-select.tsx"),
189
183
  ],
190
184
  },
191
- { name: "navigation", components: [component("pagination", "stable", "src/components/navigation/pagination.tsx")] },
185
+ {
186
+ name: "navigation",
187
+ components: [
188
+ component("navigation-menu", "preview", "src/components/ui/navigation-menu"),
189
+ component("pagination", "stable", "src/components/navigation/pagination.tsx"),
190
+ ],
191
+ },
192
192
  { name: "charts", components: [component("progress-circle", "stable", "src/components/charts/progress-circle.tsx")] },
193
193
  {
194
194
  name: "wizard",
@@ -221,7 +221,7 @@ export const componentRows: ComponentRow[] = [
221
221
 
222
222
  export const wizardSteps = [
223
223
  { id: "setup", title: "Setup", description: "init + theme", completed: true },
224
- { id: "add", title: "Add", description: "105 registry components", completed: true },
224
+ { id: "add", title: "Add", description: "registry components", completed: true },
225
225
  { id: "test", title: "Test", description: "visible workbench" },
226
226
  ]
227
227
 
@@ -25,7 +25,7 @@ export function HeroSection() {
25
25
  <div className="flex flex-wrap gap-2">
26
26
  <Button leftIcon={<PlusIcon className="size-4" />}>Create</Button>
27
27
  <Button variant="outline" leftIcon={<SettingsIcon className="size-4" />}>Settings</Button>
28
- <CopyButton value="npx tembro@4.2.1 list --json">Copy list command</CopyButton>
28
+ <CopyButton value="npx tembro@5.0.0 list --json">Copy list command</CopyButton>
29
29
  </div>
30
30
  </div>
31
31
 
@@ -33,7 +33,7 @@ export function HeroSection() {
33
33
  <StatisticCard label="Registry components" value={moduleCount} change="visible below" trend="up" description="tembro add <name>" />
34
34
  <StatisticCard label="Local source files" value="152" change="with hooks/lib" trend="up" description="installed by CLI" />
35
35
  <StatisticCard label="Categories" value={registryGroups.length} change="all shown" trend="up" description="actions to wizard" />
36
- <StatisticCard label="Build" value="Pass" change="doctor pass" trend="up" description="tembro@4.2.1" />
36
+ <StatisticCard label="Build" value="Pass" change="doctor pass" trend="up" description="tembro@5.0.0" />
37
37
  </StatisticGrid>
38
38
  </div>
39
39
  </section>
@@ -72,7 +72,7 @@ export function WorkbenchSidebar({ selectedKey, onSelect }: WorkbenchSidebarProp
72
72
  }),
73
73
  ]}
74
74
  footerAccount={{
75
- label: "tembro@4.2.1",
75
+ label: "tembro@5.0.0",
76
76
  description: `${moduleCount} registry components`,
77
77
  }}
78
78
  activeIndicator="bar"