@majapisoftwares/ui 5.0.0 → 6.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 (66) hide show
  1. package/AGENTS.md +11 -1
  2. package/README.md +19 -11
  3. package/THIRD_PARTY_NOTICES.md +25 -1
  4. package/components.json +1 -1
  5. package/docs/MIGRATION-6.0.md +33 -0
  6. package/docs/STANDARDS.md +11 -6
  7. package/docs/VERSIONING.md +28 -0
  8. package/package.json +19 -10
  9. package/scripts/check-standards.mjs +2 -0
  10. package/src/components/ui/accordion.tsx +82 -0
  11. package/src/components/ui/alert-dialog.tsx +187 -0
  12. package/src/components/ui/alert.tsx +2 -2
  13. package/src/components/ui/avatar.tsx +108 -0
  14. package/src/components/ui/badge.tsx +1 -1
  15. package/src/components/ui/breadcrumb.tsx +125 -0
  16. package/src/components/ui/button-group.tsx +89 -0
  17. package/src/components/ui/button.tsx +12 -16
  18. package/src/components/ui/card.tsx +101 -0
  19. package/src/components/ui/checkbox.tsx +27 -0
  20. package/src/components/ui/collapsible.tsx +21 -0
  21. package/src/components/ui/context-menu.tsx +271 -0
  22. package/src/components/ui/dialog.tsx +161 -0
  23. package/src/components/ui/dropdown-menu.tsx +271 -0
  24. package/src/components/ui/empty.tsx +4 -4
  25. package/src/components/ui/field.tsx +6 -6
  26. package/src/components/ui/hover-card.tsx +50 -0
  27. package/src/components/ui/input-group.tsx +155 -0
  28. package/src/components/ui/input.tsx +1 -1
  29. package/src/components/ui/kbd.tsx +28 -0
  30. package/src/components/ui/orb.css +1002 -0
  31. package/src/components/ui/orb.tsx +752 -0
  32. package/src/components/ui/popover.tsx +89 -0
  33. package/src/components/ui/progress.tsx +82 -0
  34. package/src/components/ui/radio-group.tsx +37 -0
  35. package/src/components/ui/scroll-area.tsx +54 -0
  36. package/src/components/ui/select.tsx +204 -0
  37. package/src/components/ui/sheet.tsx +8 -6
  38. package/src/components/ui/sidebar.tsx +1035 -0
  39. package/src/components/ui/skeleton.tsx +1 -1
  40. package/src/components/ui/slider.tsx +53 -0
  41. package/src/components/ui/sonner.tsx +44 -0
  42. package/src/components/ui/spinner.tsx +32 -0
  43. package/src/components/ui/switch.tsx +31 -0
  44. package/src/components/ui/table.tsx +10 -4
  45. package/src/components/ui/tabs.tsx +2 -2
  46. package/src/components/ui/textarea.tsx +19 -0
  47. package/src/components/ui/toggle-group.tsx +89 -0
  48. package/src/components/ui/toggle.tsx +44 -0
  49. package/src/components/ui/tooltip.tsx +65 -0
  50. package/src/hooks/use-mobile.ts +20 -0
  51. package/src/lib/i18n.tsx +109 -0
  52. package/src/patterns/app-shell.tsx +158 -53
  53. package/src/patterns/data-table.tsx +2441 -180
  54. package/src/patterns/details-sheet.tsx +8 -6
  55. package/src/patterns/filter-tabs.tsx +53 -0
  56. package/src/patterns/majapi-logo.tsx +32 -0
  57. package/src/patterns/page-header.tsx +44 -22
  58. package/src/patterns/preferences.tsx +172 -0
  59. package/src/patterns/status-badge.tsx +4 -3
  60. package/src/styles.css +41 -341
  61. package/src/templates/admin-dashboard.tsx +14 -33
  62. package/src/templates/auth-layout.tsx +18 -24
  63. package/src/templates/login-form.tsx +97 -65
  64. package/src/templates/signup-form.tsx +139 -99
  65. package/src/components/ui/native-select.tsx +0 -66
  66. package/src/vite-env.d.ts +0 -1
@@ -0,0 +1,89 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
5
+ import { cn } from "cn";
6
+
7
+ function Popover({ ...props }: PopoverPrimitive.Root.Props) {
8
+ return <PopoverPrimitive.Root data-slot="popover" {...props} />;
9
+ }
10
+
11
+ function PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) {
12
+ return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
13
+ }
14
+
15
+ function PopoverContent({
16
+ className,
17
+ align = "center",
18
+ alignOffset = 0,
19
+ side = "bottom",
20
+ sideOffset = 4,
21
+ ...props
22
+ }: PopoverPrimitive.Popup.Props &
23
+ Pick<
24
+ PopoverPrimitive.Positioner.Props,
25
+ "align" | "alignOffset" | "side" | "sideOffset"
26
+ >) {
27
+ return (
28
+ <PopoverPrimitive.Portal>
29
+ <PopoverPrimitive.Positioner
30
+ align={align}
31
+ alignOffset={alignOffset}
32
+ side={side}
33
+ sideOffset={sideOffset}
34
+ className="isolate z-50"
35
+ >
36
+ <PopoverPrimitive.Popup
37
+ data-slot="popover-content"
38
+ className={cn(
39
+ "z-50 flex w-72 origin-(--transform-origin) flex-col gap-4 rounded-3xl bg-popover p-4 text-sm text-popover-foreground shadow-lg ring-1 ring-foreground/5 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 dark:ring-foreground/10 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",
40
+ className,
41
+ )}
42
+ {...props}
43
+ />
44
+ </PopoverPrimitive.Positioner>
45
+ </PopoverPrimitive.Portal>
46
+ );
47
+ }
48
+
49
+ function PopoverHeader({ className, ...props }: React.ComponentProps<"div">) {
50
+ return (
51
+ <div
52
+ data-slot="popover-header"
53
+ className={cn("flex flex-col gap-1 text-sm", className)}
54
+ {...props}
55
+ />
56
+ );
57
+ }
58
+
59
+ function PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {
60
+ return (
61
+ <PopoverPrimitive.Title
62
+ data-slot="popover-title"
63
+ className={cn("text-base font-medium", className)}
64
+ {...props}
65
+ />
66
+ );
67
+ }
68
+
69
+ function PopoverDescription({
70
+ className,
71
+ ...props
72
+ }: PopoverPrimitive.Description.Props) {
73
+ return (
74
+ <PopoverPrimitive.Description
75
+ data-slot="popover-description"
76
+ className={cn("text-muted-foreground", className)}
77
+ {...props}
78
+ />
79
+ );
80
+ }
81
+
82
+ export {
83
+ Popover,
84
+ PopoverContent,
85
+ PopoverDescription,
86
+ PopoverHeader,
87
+ PopoverTitle,
88
+ PopoverTrigger,
89
+ };
@@ -0,0 +1,82 @@
1
+ "use client";
2
+
3
+ import { Progress as ProgressPrimitive } from "@base-ui/react/progress";
4
+ import { cn } from "cn";
5
+
6
+ function Progress({
7
+ className,
8
+ children,
9
+ value,
10
+ ...props
11
+ }: ProgressPrimitive.Root.Props) {
12
+ return (
13
+ <ProgressPrimitive.Root
14
+ value={value}
15
+ data-slot="progress"
16
+ className={cn("flex flex-wrap gap-3", className)}
17
+ {...props}
18
+ >
19
+ {children}
20
+ <ProgressTrack>
21
+ <ProgressIndicator />
22
+ </ProgressTrack>
23
+ </ProgressPrimitive.Root>
24
+ );
25
+ }
26
+
27
+ function ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {
28
+ return (
29
+ <ProgressPrimitive.Track
30
+ className={cn(
31
+ "relative flex h-3 w-full items-center overflow-x-hidden rounded-full bg-muted",
32
+ className,
33
+ )}
34
+ data-slot="progress-track"
35
+ {...props}
36
+ />
37
+ );
38
+ }
39
+
40
+ function ProgressIndicator({
41
+ className,
42
+ ...props
43
+ }: ProgressPrimitive.Indicator.Props) {
44
+ return (
45
+ <ProgressPrimitive.Indicator
46
+ data-slot="progress-indicator"
47
+ className={cn("h-full bg-primary transition-all", className)}
48
+ {...props}
49
+ />
50
+ );
51
+ }
52
+
53
+ function ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {
54
+ return (
55
+ <ProgressPrimitive.Label
56
+ className={cn("text-sm font-medium", className)}
57
+ data-slot="progress-label"
58
+ {...props}
59
+ />
60
+ );
61
+ }
62
+
63
+ function ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {
64
+ return (
65
+ <ProgressPrimitive.Value
66
+ className={cn(
67
+ "ml-auto text-sm text-muted-foreground tabular-nums",
68
+ className,
69
+ )}
70
+ data-slot="progress-value"
71
+ {...props}
72
+ />
73
+ );
74
+ }
75
+
76
+ export {
77
+ Progress,
78
+ ProgressTrack,
79
+ ProgressIndicator,
80
+ ProgressLabel,
81
+ ProgressValue,
82
+ };
@@ -0,0 +1,37 @@
1
+ "use client";
2
+
3
+ import { Radio as RadioPrimitive } from "@base-ui/react/radio";
4
+ import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
5
+ import { cn } from "cn";
6
+
7
+ function RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {
8
+ return (
9
+ <RadioGroupPrimitive
10
+ data-slot="radio-group"
11
+ className={cn("grid w-full gap-3", className)}
12
+ {...props}
13
+ />
14
+ );
15
+ }
16
+
17
+ function RadioGroupItem({ className, ...props }: RadioPrimitive.Root.Props) {
18
+ return (
19
+ <RadioPrimitive.Root
20
+ data-slot="radio-group-item"
21
+ className={cn(
22
+ "group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-transparent bg-input/90 outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
23
+ className,
24
+ )}
25
+ {...props}
26
+ >
27
+ <RadioPrimitive.Indicator
28
+ data-slot="radio-group-indicator"
29
+ className="flex size-4 items-center justify-center"
30
+ >
31
+ <span className="absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground dark:size-2.5" />
32
+ </RadioPrimitive.Indicator>
33
+ </RadioPrimitive.Root>
34
+ );
35
+ }
36
+
37
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,54 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
5
+ import { cn } from "cn";
6
+
7
+ function ScrollArea({
8
+ className,
9
+ children,
10
+ ...props
11
+ }: ScrollAreaPrimitive.Root.Props) {
12
+ return (
13
+ <ScrollAreaPrimitive.Root
14
+ data-slot="scroll-area"
15
+ className={cn("relative", className)}
16
+ {...props}
17
+ >
18
+ <ScrollAreaPrimitive.Viewport
19
+ data-slot="scroll-area-viewport"
20
+ className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1"
21
+ >
22
+ {children}
23
+ </ScrollAreaPrimitive.Viewport>
24
+ <ScrollBar />
25
+ <ScrollAreaPrimitive.Corner />
26
+ </ScrollAreaPrimitive.Root>
27
+ );
28
+ }
29
+
30
+ function ScrollBar({
31
+ className,
32
+ orientation = "vertical",
33
+ ...props
34
+ }: ScrollAreaPrimitive.Scrollbar.Props) {
35
+ return (
36
+ <ScrollAreaPrimitive.Scrollbar
37
+ data-slot="scroll-area-scrollbar"
38
+ data-orientation={orientation}
39
+ orientation={orientation}
40
+ className={cn(
41
+ "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
42
+ className,
43
+ )}
44
+ {...props}
45
+ >
46
+ <ScrollAreaPrimitive.Thumb
47
+ data-slot="scroll-area-thumb"
48
+ className="relative flex-1 rounded-full bg-border"
49
+ />
50
+ </ScrollAreaPrimitive.Scrollbar>
51
+ );
52
+ }
53
+
54
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,204 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { Select as SelectPrimitive } from "@base-ui/react/select";
5
+ import { cn } from "cn";
6
+ import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react";
7
+
8
+ const Select = SelectPrimitive.Root;
9
+
10
+ function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
11
+ return (
12
+ <SelectPrimitive.Group
13
+ data-slot="select-group"
14
+ className={cn("scroll-my-1.5 p-1.5", className)}
15
+ {...props}
16
+ />
17
+ );
18
+ }
19
+
20
+ function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
21
+ return (
22
+ <SelectPrimitive.Value
23
+ data-slot="select-value"
24
+ className={cn("flex flex-1 text-left", className)}
25
+ {...props}
26
+ />
27
+ );
28
+ }
29
+
30
+ function SelectTrigger({
31
+ className,
32
+ size = "default",
33
+ children,
34
+ ...props
35
+ }: SelectPrimitive.Trigger.Props & {
36
+ size?: "sm" | "default";
37
+ }) {
38
+ return (
39
+ <SelectPrimitive.Trigger
40
+ data-slot="select-trigger"
41
+ data-size={size}
42
+ className={cn(
43
+ "flex w-fit items-center justify-between gap-1.5 rounded-3xl border border-transparent bg-input/50 px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow,background-color] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
44
+ className,
45
+ )}
46
+ {...props}
47
+ >
48
+ {children}
49
+ <SelectPrimitive.Icon
50
+ render={
51
+ <ChevronDownIcon className="pointer-events-none size-4 text-muted-foreground" />
52
+ }
53
+ />
54
+ </SelectPrimitive.Trigger>
55
+ );
56
+ }
57
+
58
+ function SelectContent({
59
+ className,
60
+ children,
61
+ side = "bottom",
62
+ sideOffset = 4,
63
+ align = "center",
64
+ alignOffset = 0,
65
+ alignItemWithTrigger = true,
66
+ ...props
67
+ }: SelectPrimitive.Popup.Props &
68
+ Pick<
69
+ SelectPrimitive.Positioner.Props,
70
+ "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
71
+ >) {
72
+ return (
73
+ <SelectPrimitive.Portal>
74
+ <SelectPrimitive.Positioner
75
+ side={side}
76
+ sideOffset={sideOffset}
77
+ align={align}
78
+ alignOffset={alignOffset}
79
+ alignItemWithTrigger={alignItemWithTrigger}
80
+ className="isolate z-50"
81
+ >
82
+ <SelectPrimitive.Popup
83
+ data-slot="select-content"
84
+ data-align-trigger={alignItemWithTrigger}
85
+ className={cn(
86
+ "relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl bg-popover text-popover-foreground shadow-lg ring-1 ring-foreground/5 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 dark:ring-foreground/10 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",
87
+ className,
88
+ )}
89
+ {...props}
90
+ >
91
+ <SelectScrollUpButton />
92
+ <SelectPrimitive.List>{children}</SelectPrimitive.List>
93
+ <SelectScrollDownButton />
94
+ </SelectPrimitive.Popup>
95
+ </SelectPrimitive.Positioner>
96
+ </SelectPrimitive.Portal>
97
+ );
98
+ }
99
+
100
+ function SelectLabel({
101
+ className,
102
+ ...props
103
+ }: SelectPrimitive.GroupLabel.Props) {
104
+ return (
105
+ <SelectPrimitive.GroupLabel
106
+ data-slot="select-label"
107
+ className={cn("px-3 py-2.5 text-xs text-muted-foreground", className)}
108
+ {...props}
109
+ />
110
+ );
111
+ }
112
+
113
+ function SelectItem({
114
+ className,
115
+ children,
116
+ ...props
117
+ }: SelectPrimitive.Item.Props) {
118
+ return (
119
+ <SelectPrimitive.Item
120
+ data-slot="select-item"
121
+ className={cn(
122
+ "relative flex w-full cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
123
+ className,
124
+ )}
125
+ {...props}
126
+ >
127
+ <SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
128
+ {children}
129
+ </SelectPrimitive.ItemText>
130
+ <SelectPrimitive.ItemIndicator
131
+ render={
132
+ <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
133
+ }
134
+ >
135
+ <CheckIcon className="pointer-events-none" />
136
+ </SelectPrimitive.ItemIndicator>
137
+ </SelectPrimitive.Item>
138
+ );
139
+ }
140
+
141
+ function SelectSeparator({
142
+ className,
143
+ ...props
144
+ }: SelectPrimitive.Separator.Props) {
145
+ return (
146
+ <SelectPrimitive.Separator
147
+ data-slot="select-separator"
148
+ className={cn(
149
+ "pointer-events-none -mx-1.5 my-1.5 h-px bg-border",
150
+ className,
151
+ )}
152
+ {...props}
153
+ />
154
+ );
155
+ }
156
+
157
+ function SelectScrollUpButton({
158
+ className,
159
+ ...props
160
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
161
+ return (
162
+ <SelectPrimitive.ScrollUpArrow
163
+ data-slot="select-scroll-up-button"
164
+ className={cn(
165
+ "top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
166
+ className,
167
+ )}
168
+ {...props}
169
+ >
170
+ <ChevronUpIcon />
171
+ </SelectPrimitive.ScrollUpArrow>
172
+ );
173
+ }
174
+
175
+ function SelectScrollDownButton({
176
+ className,
177
+ ...props
178
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {
179
+ return (
180
+ <SelectPrimitive.ScrollDownArrow
181
+ data-slot="select-scroll-down-button"
182
+ className={cn(
183
+ "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
184
+ className,
185
+ )}
186
+ {...props}
187
+ >
188
+ <ChevronDownIcon />
189
+ </SelectPrimitive.ScrollDownArrow>
190
+ );
191
+ }
192
+
193
+ export {
194
+ Select,
195
+ SelectContent,
196
+ SelectGroup,
197
+ SelectItem,
198
+ SelectLabel,
199
+ SelectScrollDownButton,
200
+ SelectScrollUpButton,
201
+ SelectSeparator,
202
+ SelectTrigger,
203
+ SelectValue,
204
+ };
@@ -6,6 +6,7 @@ import { cn } from "cn";
6
6
 
7
7
  import { Button } from "./button";
8
8
  import { XIcon } from "lucide-react";
9
+ import { useUiMessages } from "../../lib/i18n";
9
10
 
10
11
  function Sheet({ ...props }: SheetPrimitive.Root.Props) {
11
12
  return <SheetPrimitive.Root data-slot="sheet" {...props} />;
@@ -28,7 +29,7 @@ function SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {
28
29
  <SheetPrimitive.Backdrop
29
30
  data-slot="sheet-overlay"
30
31
  className={cn(
31
- "fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",
32
+ "fixed inset-0 z-50 bg-black/30 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-sm",
32
33
  className,
33
34
  )}
34
35
  {...props}
@@ -46,6 +47,7 @@ function SheetContent({
46
47
  side?: "top" | "right" | "bottom" | "left";
47
48
  showCloseButton?: boolean;
48
49
  }) {
50
+ const messages = useUiMessages();
49
51
  return (
50
52
  <SheetPortal>
51
53
  <SheetOverlay />
@@ -53,7 +55,7 @@ function SheetContent({
53
55
  data-slot="sheet-content"
54
56
  data-side={side}
55
57
  className={cn(
56
- "fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
58
+ "fixed z-50 flex flex-col bg-popover bg-clip-padding text-sm text-popover-foreground shadow-xl transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
57
59
  className,
58
60
  )}
59
61
  {...props}
@@ -65,13 +67,13 @@ function SheetContent({
65
67
  render={
66
68
  <Button
67
69
  variant="ghost"
68
- className="absolute top-3 right-3"
70
+ className="absolute top-4 right-4 bg-secondary"
69
71
  size="icon-sm"
70
72
  />
71
73
  }
72
74
  >
73
75
  <XIcon />
74
- <span className="sr-only">Fechar</span>
76
+ <span className="sr-only">{messages.close}</span>
75
77
  </SheetPrimitive.Close>
76
78
  )}
77
79
  </SheetPrimitive.Popup>
@@ -83,7 +85,7 @@ function SheetHeader({ className, ...props }: React.ComponentProps<"div">) {
83
85
  return (
84
86
  <div
85
87
  data-slot="sheet-header"
86
- className={cn("flex flex-col gap-0.5 p-4", className)}
88
+ className={cn("flex flex-col gap-1.5 p-6", className)}
87
89
  {...props}
88
90
  />
89
91
  );
@@ -93,7 +95,7 @@ function SheetFooter({ className, ...props }: React.ComponentProps<"div">) {
93
95
  return (
94
96
  <div
95
97
  data-slot="sheet-footer"
96
- className={cn("mt-auto flex flex-col gap-2 p-4", className)}
98
+ className={cn("mt-auto flex flex-col gap-2 p-6", className)}
97
99
  {...props}
98
100
  />
99
101
  );