@syscore/ui-library 1.1.13 → 1.2.1

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 (87) hide show
  1. package/client/components/ui/accordion.tsx +6 -9
  2. package/client/components/ui/alert-dialog.tsx +6 -19
  3. package/client/components/ui/alert.tsx +5 -6
  4. package/client/components/ui/avatar.tsx +3 -9
  5. package/client/components/ui/badge.tsx +5 -8
  6. package/client/components/ui/breadcrumb.tsx +7 -16
  7. package/client/components/ui/button.tsx +17 -45
  8. package/client/components/ui/calendar.tsx +24 -28
  9. package/client/components/ui/card.tsx +6 -9
  10. package/client/components/ui/carousel.tsx +14 -14
  11. package/client/components/ui/chart.tsx +25 -28
  12. package/client/components/ui/checkbox.tsx +3 -8
  13. package/client/components/ui/code-badge.tsx +1 -4
  14. package/client/components/ui/command.tsx +12 -48
  15. package/client/components/ui/context-menu.tsx +17 -32
  16. package/client/components/ui/dialog.tsx +9 -18
  17. package/client/components/ui/drawer.tsx +7 -13
  18. package/client/components/ui/dropdown-menu.tsx +17 -29
  19. package/client/components/ui/form.tsx +4 -4
  20. package/client/components/ui/hover-card.tsx +1 -4
  21. package/client/components/ui/input-otp.tsx +7 -10
  22. package/client/components/ui/input.tsx +4 -23
  23. package/client/components/ui/label.tsx +1 -3
  24. package/client/components/ui/menubar.tsx +19 -40
  25. package/client/components/ui/navigation-menu.tsx +10 -27
  26. package/client/components/ui/navigation.tsx +193 -331
  27. package/client/components/ui/pagination.tsx +8 -8
  28. package/client/components/ui/popover.tsx +1 -4
  29. package/client/components/ui/progress.tsx +2 -5
  30. package/client/components/ui/radio-group.tsx +4 -7
  31. package/client/components/ui/resizable.tsx +4 -10
  32. package/client/components/ui/scroll-area.tsx +5 -8
  33. package/client/components/ui/search.tsx +7 -10
  34. package/client/components/ui/select.tsx +11 -36
  35. package/client/components/ui/separator.tsx +2 -2
  36. package/client/components/ui/sheet.tsx +12 -23
  37. package/client/components/ui/sidebar.tsx +55 -82
  38. package/client/components/ui/skeleton.tsx +1 -1
  39. package/client/components/ui/slider.tsx +4 -7
  40. package/client/components/ui/sonner.tsx +5 -8
  41. package/client/components/ui/switch.tsx +2 -9
  42. package/client/components/ui/table.tsx +9 -18
  43. package/client/components/ui/tabs.tsx +19 -28
  44. package/client/components/ui/tag.tsx +6 -66
  45. package/client/components/ui/textarea.tsx +1 -4
  46. package/client/components/ui/toast.tsx +9 -19
  47. package/client/components/ui/toaster.tsx +1 -1
  48. package/client/components/ui/toggle-group.tsx +4 -4
  49. package/client/components/ui/toggle.tsx +13 -13
  50. package/client/components/ui/tooltip.tsx +12 -15
  51. package/client/global.css +5419 -1054
  52. package/client/storybook.css +1164 -0
  53. package/dist/index.cjs.js +1 -0
  54. package/dist/{ui/index.d.ts → index.d.ts} +0 -1
  55. package/dist/index.es.js +4552 -0
  56. package/dist/ui-library.css +1 -0
  57. package/package.json +9 -12
  58. package/client/ui/WELLDashboard/WELLDashboard.stories.tsx +0 -115
  59. package/client/ui/WELLDashboard/index.tsx +0 -317
  60. package/dist/ui/index.cjs.js +0 -1
  61. package/dist/ui/index.es.js +0 -5502
  62. package/tailwind.preset.ts +0 -151
  63. /package/dist/{ui/favicon.ico → favicon.ico} +0 -0
  64. /package/dist/{ui/fonts → fonts}/FT-Made/FTMade-Regular.otf +0 -0
  65. /package/dist/{ui/fonts → fonts}/FT-Made/FTMade-Regular.ttf +0 -0
  66. /package/dist/{ui/fonts → fonts}/FT-Made/FTMade-Regular.woff +0 -0
  67. /package/dist/{ui/fonts → fonts}/FT-Made/FTMade-Regular.woff2 +0 -0
  68. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-black.otf +0 -0
  69. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-blackitalic.otf +0 -0
  70. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-bold.otf +0 -0
  71. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-bolditalic.otf +0 -0
  72. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-extrabold.otf +0 -0
  73. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-extrabolditalic.otf +0 -0
  74. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-extralight.otf +0 -0
  75. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-extralightitalic.otf +0 -0
  76. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-italic.otf +0 -0
  77. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-light.otf +0 -0
  78. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-lightitalic.otf +0 -0
  79. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-medium.otf +0 -0
  80. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-mediumitalic.otf +0 -0
  81. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-regular.otf +0 -0
  82. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-semibold.otf +0 -0
  83. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-semibolditalic.otf +0 -0
  84. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-thin.otf +0 -0
  85. /package/dist/{ui/fonts → fonts}/Mazzard-M/mazzardsoftm-thinitalic.otf +0 -0
  86. /package/dist/{ui/placeholder.svg → placeholder.svg} +0 -0
  87. /package/dist/{ui/robots.txt → robots.txt} +0 -0
@@ -78,7 +78,7 @@ const FormItem = React.forwardRef<
78
78
 
79
79
  return (
80
80
  <FormItemContext.Provider value={{ id }}>
81
- <div ref={ref} className={cn("space-y-2", className)} {...props} />
81
+ <div ref={ref} className={cn("form-item", className)} {...props} />
82
82
  </FormItemContext.Provider>
83
83
  );
84
84
  });
@@ -93,7 +93,7 @@ const FormLabel = React.forwardRef<
93
93
  return (
94
94
  <Label
95
95
  ref={ref}
96
- className={cn(error && "text-destructive", className)}
96
+ className={cn(error && "form-label--error", className)}
97
97
  htmlFor={formItemId}
98
98
  {...props}
99
99
  />
@@ -134,7 +134,7 @@ const FormDescription = React.forwardRef<
134
134
  <p
135
135
  ref={ref}
136
136
  id={formDescriptionId}
137
- className={cn("text-sm text-muted-foreground", className)}
137
+ className={cn("form-description", className)}
138
138
  {...props}
139
139
  />
140
140
  );
@@ -156,7 +156,7 @@ const FormMessage = React.forwardRef<
156
156
  <p
157
157
  ref={ref}
158
158
  id={formMessageId}
159
- className={cn("text-sm font-medium text-destructive", className)}
159
+ className={cn("form-message", className)}
160
160
  {...props}
161
161
  >
162
162
  {body}
@@ -15,10 +15,7 @@ const HoverCardContent = React.forwardRef<
15
15
  ref={ref}
16
16
  align={align}
17
17
  sideOffset={sideOffset}
18
- className={cn(
19
- "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
20
- className,
21
- )}
18
+ className={cn("hover-card-content", className)}
22
19
  {...props}
23
20
  />
24
21
  ));
@@ -10,11 +10,8 @@ const InputOTP = React.forwardRef<
10
10
  >(({ className, containerClassName, ...props }, ref) => (
11
11
  <OTPInput
12
12
  ref={ref}
13
- containerClassName={cn(
14
- "flex items-center gap-2 has-disabled:opacity-50",
15
- containerClassName,
16
- )}
17
- className={cn("disabled:cursor-not-allowed", className)}
13
+ containerClassName={cn("input-otp-container", containerClassName)}
14
+ className={cn("input-otp", className)}
18
15
  {...props}
19
16
  />
20
17
  ));
@@ -24,7 +21,7 @@ const InputOTPGroup = React.forwardRef<
24
21
  React.ElementRef<"div">,
25
22
  React.ComponentPropsWithoutRef<"div">
26
23
  >(({ className, ...props }, ref) => (
27
- <div ref={ref} className={cn("flex items-center", className)} {...props} />
24
+ <div ref={ref} className={cn("input-otp-group", className)} {...props} />
28
25
  ));
29
26
  InputOTPGroup.displayName = "InputOTPGroup";
30
27
 
@@ -39,16 +36,16 @@ const InputOTPSlot = React.forwardRef<
39
36
  <div
40
37
  ref={ref}
41
38
  className={cn(
42
- "relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md",
43
- isActive && "z-10 ring-2 ring-ring ring-offset-background",
39
+ "input-otp-slot",
40
+ isActive && "input-otp-slot--active",
44
41
  className,
45
42
  )}
46
43
  {...props}
47
44
  >
48
45
  {char}
49
46
  {hasFakeCaret && (
50
- <div className="pointer-events-none absolute inset-0 flex items-center justify-center">
51
- <div className="h-4 w-px animate-caret-blink bg-foreground duration-1000" />
47
+ <div className="input-otp-caret">
48
+ <div className="input-otp-caret-line" />
52
49
  </div>
53
50
  )}
54
51
  </div>
@@ -14,38 +14,19 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
14
14
  return (
15
15
  <div
16
16
  className={cn(
17
- // Base wrapper styles (visual input)
18
- "flex h-12 w-full items-center rounded-[6px] border border-gray-200 bg-white px-4 transition-shadow",
19
- // Typography inheritance
20
- "body-base font-medium font-mazzard text-gray-800",
21
- // Focus states (focus-within matches input focus)
22
- "focus-within:border-cyan-300",
23
- // Disabled states
24
- isDisabled && "opacity-50 cursor-not-allowed",
25
- // Read-only states
26
- isReadOnly &&
27
- "bg-gray-50 border-blue-200 text-gray-600 focus-within:border-blue-200 cursor-default",
17
+ "input-wrapper body-base font-mazzard",
28
18
  className,
29
19
  )}
30
20
  >
31
21
  {startIcon ? (
32
- <div className="mr-3 flex items-center text-muted-foreground">
22
+ <div className="input-icon-start">
33
23
  {startIcon}
34
24
  </div>
35
25
  ) : null}
36
26
 
37
27
  <input
38
28
  type={type}
39
- className={cn(
40
- // Reset styles to be transparent inside wrapper
41
- "flex-1 w-full bg-transparent outline-none placeholder:text-gray-500",
42
- // File input specific overrides
43
- type === "file" &&
44
- "p-0 italic text-muted-foreground/70 file:me-3 file:h-full file:border-0 file:border-r file:border-solid file:border-gray-200 file:bg-transparent file:px-3 file:text-base file:font-medium file:not-italic file:text-gray-800",
45
- // Search input specific overrides
46
- type === "search" &&
47
- "[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-webkit-search-results-button]:appearance-none [&::-webkit-search-results-decoration]:appearance-none",
48
- )}
29
+ className="input"
49
30
  ref={ref}
50
31
  disabled={isDisabled}
51
32
  readOnly={isReadOnly}
@@ -53,7 +34,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
53
34
  />
54
35
 
55
36
  {endIcon ? (
56
- <div className="ml-3 flex items-center text-muted-foreground">
37
+ <div className="input-icon-end">
57
38
  {endIcon}
58
39
  </div>
59
40
  ) : null}
@@ -4,9 +4,7 @@ import { cva, type VariantProps } from "class-variance-authority";
4
4
 
5
5
  import { cn } from "@/lib/utils";
6
6
 
7
- const labelVariants = cva(
8
- "peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-gray-600 px-2",
9
- );
7
+ const labelVariants = cva("label");
10
8
 
11
9
  const Label = React.forwardRef<
12
10
  React.ElementRef<typeof LabelPrimitive.Root>,
@@ -20,10 +20,7 @@ const Menubar = React.forwardRef<
20
20
  >(({ className, ...props }, ref) => (
21
21
  <MenubarPrimitive.Root
22
22
  ref={ref}
23
- className={cn(
24
- "flex h-10 items-center space-x-1 rounded-md border bg-background p-1",
25
- className,
26
- )}
23
+ className={cn("menubar", className)}
27
24
  {...props}
28
25
  />
29
26
  ));
@@ -35,10 +32,7 @@ const MenubarTrigger = React.forwardRef<
35
32
  >(({ className, ...props }, ref) => (
36
33
  <MenubarPrimitive.Trigger
37
34
  ref={ref}
38
- className={cn(
39
- "flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-hidden focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
40
- className,
41
- )}
35
+ className={cn("menubar-trigger", className)}
42
36
  {...props}
43
37
  />
44
38
  ));
@@ -53,14 +47,14 @@ const MenubarSubTrigger = React.forwardRef<
53
47
  <MenubarPrimitive.SubTrigger
54
48
  ref={ref}
55
49
  className={cn(
56
- "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
57
- inset && "pl-8",
50
+ "menubar-sub-trigger",
51
+ inset && "menubar-sub-trigger--inset",
58
52
  className,
59
53
  )}
60
54
  {...props}
61
55
  >
62
56
  {children}
63
- <ChevronRight className="ml-auto h-4 w-4" />
57
+ <ChevronRight className="icon-4" />
64
58
  </MenubarPrimitive.SubTrigger>
65
59
  ));
66
60
  MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
@@ -71,10 +65,7 @@ const MenubarSubContent = React.forwardRef<
71
65
  >(({ className, ...props }, ref) => (
72
66
  <MenubarPrimitive.SubContent
73
67
  ref={ref}
74
- className={cn(
75
- "z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
76
- className,
77
- )}
68
+ className={cn("menubar-sub-content", className)}
78
69
  {...props}
79
70
  />
80
71
  ));
@@ -94,10 +85,7 @@ const MenubarContent = React.forwardRef<
94
85
  align={align}
95
86
  alignOffset={alignOffset}
96
87
  sideOffset={sideOffset}
97
- className={cn(
98
- "z-50 min-w-48 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
99
- className,
100
- )}
88
+ className={cn("menubar-content", className)}
101
89
  {...props}
102
90
  />
103
91
  </MenubarPrimitive.Portal>
@@ -114,8 +102,8 @@ const MenubarItem = React.forwardRef<
114
102
  <MenubarPrimitive.Item
115
103
  ref={ref}
116
104
  className={cn(
117
- "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
118
- inset && "pl-8",
105
+ "menubar-item",
106
+ inset && "menubar-item--inset",
119
107
  className,
120
108
  )}
121
109
  {...props}
@@ -129,16 +117,13 @@ const MenubarCheckboxItem = React.forwardRef<
129
117
  >(({ className, children, checked, ...props }, ref) => (
130
118
  <MenubarPrimitive.CheckboxItem
131
119
  ref={ref}
132
- className={cn(
133
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
134
- className,
135
- )}
120
+ className={cn("menubar-checkbox-item", className)}
136
121
  checked={checked}
137
122
  {...props}
138
123
  >
139
- <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
124
+ <span className="menubar-item-indicator">
140
125
  <MenubarPrimitive.ItemIndicator>
141
- <Check className="h-4 w-4" />
126
+ <Check className="icon-4" />
142
127
  </MenubarPrimitive.ItemIndicator>
143
128
  </span>
144
129
  {children}
@@ -152,15 +137,12 @@ const MenubarRadioItem = React.forwardRef<
152
137
  >(({ className, children, ...props }, ref) => (
153
138
  <MenubarPrimitive.RadioItem
154
139
  ref={ref}
155
- className={cn(
156
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
157
- className,
158
- )}
140
+ className={cn("menubar-radio-item", className)}
159
141
  {...props}
160
142
  >
161
- <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
143
+ <span className="menubar-item-indicator">
162
144
  <MenubarPrimitive.ItemIndicator>
163
- <Circle className="h-2 w-2 fill-current" />
145
+ <Circle className="icon-2 fill-current" />
164
146
  </MenubarPrimitive.ItemIndicator>
165
147
  </span>
166
148
  {children}
@@ -177,8 +159,8 @@ const MenubarLabel = React.forwardRef<
177
159
  <MenubarPrimitive.Label
178
160
  ref={ref}
179
161
  className={cn(
180
- "px-2 py-1.5 text-sm font-semibold",
181
- inset && "pl-8",
162
+ "menubar-label",
163
+ inset && "menubar-label--inset",
182
164
  className,
183
165
  )}
184
166
  {...props}
@@ -192,7 +174,7 @@ const MenubarSeparator = React.forwardRef<
192
174
  >(({ className, ...props }, ref) => (
193
175
  <MenubarPrimitive.Separator
194
176
  ref={ref}
195
- className={cn("-mx-1 my-1 h-px bg-muted", className)}
177
+ className={cn("menubar-separator", className)}
196
178
  {...props}
197
179
  />
198
180
  ));
@@ -204,10 +186,7 @@ const MenubarShortcut = ({
204
186
  }: React.HTMLAttributes<HTMLSpanElement>) => {
205
187
  return (
206
188
  <span
207
- className={cn(
208
- "ml-auto text-xs tracking-widest text-muted-foreground",
209
- className,
210
- )}
189
+ className={cn("menubar-shortcut", className)}
211
190
  {...props}
212
191
  />
213
192
  );
@@ -11,10 +11,7 @@ const NavigationMenu = React.forwardRef<
11
11
  >(({ className, children, ...props }, ref) => (
12
12
  <NavigationMenuPrimitive.Root
13
13
  ref={ref}
14
- className={cn(
15
- "relative z-10 flex max-w-max flex-1 items-center justify-center",
16
- className,
17
- )}
14
+ className={cn("navigation-menu", className)}
18
15
  {...props}
19
16
  >
20
17
  {children}
@@ -29,10 +26,7 @@ const NavigationMenuList = React.forwardRef<
29
26
  >(({ className, ...props }, ref) => (
30
27
  <NavigationMenuPrimitive.List
31
28
  ref={ref}
32
- className={cn(
33
- "group flex flex-1 list-none items-center justify-center space-x-1",
34
- className,
35
- )}
29
+ className={cn("navigation-menu-list", className)}
36
30
  {...props}
37
31
  />
38
32
  ));
@@ -40,9 +34,7 @@ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
40
34
 
41
35
  const NavigationMenuItem = NavigationMenuPrimitive.Item;
42
36
 
43
- const navigationMenuTriggerStyle = cva(
44
- "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-hidden disabled:pointer-events-none disabled:opacity-50 data-active:bg-accent/50 data-[state=open]:bg-accent/50",
45
- );
37
+ const navigationMenuTriggerStyle = cva("navigation-menu-trigger");
46
38
 
47
39
  const NavigationMenuTrigger = React.forwardRef<
48
40
  React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,
@@ -50,12 +42,12 @@ const NavigationMenuTrigger = React.forwardRef<
50
42
  >(({ className, children, ...props }, ref) => (
51
43
  <NavigationMenuPrimitive.Trigger
52
44
  ref={ref}
53
- className={cn(navigationMenuTriggerStyle(), "group", className)}
45
+ className={cn(navigationMenuTriggerStyle(), className)}
54
46
  {...props}
55
47
  >
56
48
  {children}{" "}
57
49
  <ChevronDown
58
- className="relative top-px ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180"
50
+ className="navigation-menu-trigger-icon"
59
51
  aria-hidden="true"
60
52
  />
61
53
  </NavigationMenuPrimitive.Trigger>
@@ -68,10 +60,7 @@ const NavigationMenuContent = React.forwardRef<
68
60
  >(({ className, ...props }, ref) => (
69
61
  <NavigationMenuPrimitive.Content
70
62
  ref={ref}
71
- className={cn(
72
- "left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto ",
73
- className,
74
- )}
63
+ className={cn("navigation-menu-content", className)}
75
64
  {...props}
76
65
  />
77
66
  ));
@@ -83,12 +72,9 @@ const NavigationMenuViewport = React.forwardRef<
83
72
  React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,
84
73
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>
85
74
  >(({ className, ...props }, ref) => (
86
- <div className={cn("absolute left-0 top-full flex justify-center")}>
75
+ <div className="navigation-menu-viewport-wrapper">
87
76
  <NavigationMenuPrimitive.Viewport
88
- className={cn(
89
- "origin-top-center relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-(--radix-navigation-menu-viewport-width)",
90
- className,
91
- )}
77
+ className={cn("navigation-menu-viewport", className)}
92
78
  ref={ref}
93
79
  {...props}
94
80
  />
@@ -103,13 +89,10 @@ const NavigationMenuIndicator = React.forwardRef<
103
89
  >(({ className, ...props }, ref) => (
104
90
  <NavigationMenuPrimitive.Indicator
105
91
  ref={ref}
106
- className={cn(
107
- "top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
108
- className,
109
- )}
92
+ className={cn("navigation-menu-indicator", className)}
110
93
  {...props}
111
94
  >
112
- <div className="relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" />
95
+ {/* Indicator arrow is handled by CSS ::after pseudo-element */}
113
96
  </NavigationMenuPrimitive.Indicator>
114
97
  ));
115
98
  NavigationMenuIndicator.displayName =