azamat-ui-kit-cli 0.2.2 → 0.3.4

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 (103) hide show
  1. package/README.md +11 -0
  2. package/dist/index.cjs +452 -0
  3. package/package.json +2 -2
  4. package/vendor/src/components/actions/action-menu.tsx +21 -18
  5. package/vendor/src/components/calendar/calendar.tsx +153 -102
  6. package/vendor/src/components/calendar/date-picker.tsx +24 -14
  7. package/vendor/src/components/calendar/date-range-picker.tsx +137 -58
  8. package/vendor/src/components/charts/charts.tsx +32 -21
  9. package/vendor/src/components/command/command-palette.tsx +68 -57
  10. package/vendor/src/components/data-table/data-table-bulk-actions.tsx +23 -20
  11. package/vendor/src/components/data-table/data-table-column-visibility-menu.tsx +21 -10
  12. package/vendor/src/components/data-table/data-table-pagination.tsx +6 -6
  13. package/vendor/src/components/data-table/data-table-toolbar.tsx +72 -44
  14. package/vendor/src/components/data-table/data-table.tsx +15 -11
  15. package/vendor/src/components/data-table/table-export-menu.tsx +1 -1
  16. package/vendor/src/components/data-table/table-import-button.tsx +1 -1
  17. package/vendor/src/components/display/data-state.tsx +20 -8
  18. package/vendor/src/components/display/index.ts +19 -15
  19. package/vendor/src/components/display/metric-card.tsx +35 -0
  20. package/vendor/src/components/display/progress-circle.tsx +24 -0
  21. package/vendor/src/components/display/smart-card.tsx +49 -27
  22. package/vendor/src/components/display/status-dot.tsx +45 -0
  23. package/vendor/src/components/display/user-card.tsx +30 -0
  24. package/vendor/src/components/feedback/alert.tsx +21 -11
  25. package/vendor/src/components/feedback/empty-state.tsx +2 -2
  26. package/vendor/src/components/feedback/loading-state.tsx +2 -2
  27. package/vendor/src/components/feedback/page-state.tsx +19 -15
  28. package/vendor/src/components/feedback/status-badge.tsx +43 -43
  29. package/vendor/src/components/form/form-app-input.tsx +147 -0
  30. package/vendor/src/components/form/form-date-input.tsx +16 -19
  31. package/vendor/src/components/form/form-field-shell.tsx +11 -8
  32. package/vendor/src/components/form/form-field-utils.ts +76 -0
  33. package/vendor/src/components/form/form-input.tsx +423 -44
  34. package/vendor/src/components/form/form-number-input.tsx +16 -15
  35. package/vendor/src/components/form/form-phone-input.tsx +15 -9
  36. package/vendor/src/components/form/form-search-input.tsx +16 -19
  37. package/vendor/src/components/form/form-select.tsx +4 -3
  38. package/vendor/src/components/form/public.ts +16 -14
  39. package/vendor/src/components/form/smart-form-shell.tsx +13 -12
  40. package/vendor/src/components/inputs/app-input.tsx +27 -0
  41. package/vendor/src/components/inputs/async-select.tsx +113 -84
  42. package/vendor/src/components/inputs/clearable-input.tsx +81 -61
  43. package/vendor/src/components/inputs/date-input.tsx +21 -17
  44. package/vendor/src/components/inputs/date-range-input.tsx +10 -10
  45. package/vendor/src/components/inputs/index.ts +1 -0
  46. package/vendor/src/components/inputs/input-decorator.tsx +101 -57
  47. package/vendor/src/components/inputs/masked-input.tsx +20 -20
  48. package/vendor/src/components/inputs/money-input.tsx +2 -2
  49. package/vendor/src/components/inputs/number-input.tsx +29 -19
  50. package/vendor/src/components/inputs/password-input.tsx +82 -45
  51. package/vendor/src/components/inputs/phone-input.tsx +24 -2
  52. package/vendor/src/components/inputs/quantity-input.tsx +2 -2
  53. package/vendor/src/components/inputs/search-input.tsx +54 -3
  54. package/vendor/src/components/inputs/simple-select.tsx +110 -22
  55. package/vendor/src/components/layout/app-shell.tsx +2 -2
  56. package/vendor/src/components/layout/index.ts +5 -4
  57. package/vendor/src/components/layout/page-header.tsx +79 -35
  58. package/vendor/src/components/layout/public.ts +12 -10
  59. package/vendor/src/components/layout/section-header.tsx +56 -0
  60. package/vendor/src/components/layout/stack.tsx +106 -0
  61. package/vendor/src/components/layout/stat-card.tsx +66 -29
  62. package/vendor/src/components/navigation/index.ts +1 -0
  63. package/vendor/src/components/navigation/nav-tabs.tsx +60 -0
  64. package/vendor/src/components/navigation/page-tabs.tsx +41 -26
  65. package/vendor/src/components/navigation/pagination.tsx +14 -10
  66. package/vendor/src/components/overlay/alert-dialog.tsx +65 -0
  67. package/vendor/src/components/overlay/drawer.tsx +71 -0
  68. package/vendor/src/components/overlay/index.ts +4 -2
  69. package/vendor/src/components/patterns/data-view.tsx +13 -8
  70. package/vendor/src/components/ui/badge.tsx +96 -52
  71. package/vendor/src/components/ui/button.tsx +99 -61
  72. package/vendor/src/components/ui/card.tsx +84 -25
  73. package/vendor/src/components/ui/checkbox.tsx +68 -68
  74. package/vendor/src/components/ui/command.tsx +32 -32
  75. package/vendor/src/components/ui/dialog.tsx +135 -138
  76. package/vendor/src/components/ui/dropdown-menu.tsx +21 -21
  77. package/vendor/src/components/ui/hover-card.tsx +49 -0
  78. package/vendor/src/components/ui/input-primitive.tsx +24 -0
  79. package/vendor/src/components/ui/input.tsx +191 -20
  80. package/vendor/src/components/ui/kbd.tsx +33 -0
  81. package/vendor/src/components/ui/popover.tsx +11 -11
  82. package/vendor/src/components/ui/radio-group.tsx +102 -0
  83. package/vendor/src/components/ui/right-click-menu.tsx +60 -0
  84. package/vendor/src/components/ui/scroll-box.tsx +27 -0
  85. package/vendor/src/components/ui/segmented-control.tsx +21 -17
  86. package/vendor/src/components/ui/select.tsx +187 -189
  87. package/vendor/src/components/ui/skeleton.tsx +2 -2
  88. package/vendor/src/components/ui/switch.tsx +60 -60
  89. package/vendor/src/components/ui/table.tsx +114 -114
  90. package/vendor/src/components/ui/tabs.tsx +2 -2
  91. package/vendor/src/components/ui/textarea.tsx +1 -1
  92. package/vendor/src/components/upload/file-dropzone.tsx +38 -0
  93. package/vendor/src/components/upload/file-upload.tsx +4 -4
  94. package/vendor/src/components/upload/image-upload.tsx +22 -19
  95. package/vendor/src/components/upload/index.ts +2 -0
  96. package/vendor/src/families/catalog.ts +1 -0
  97. package/vendor/src/families/docs-groups.ts +10 -1
  98. package/vendor/src/families/member-metadata.ts +24 -0
  99. package/vendor/src/families/member-snippets.ts +41 -2
  100. package/vendor/src/families/migration-map.ts +3 -0
  101. package/vendor/src/index.ts +23 -18
  102. package/vendor/templates/styles/globals.css +253 -0
  103. package/dist/index.js +0 -432
@@ -1,201 +1,199 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import { Select as SelectPrimitive } from "@base-ui/react/select"
5
-
6
- import { cn } from "@/lib/utils"
7
- import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
8
-
9
- const Select = SelectPrimitive.Root
10
-
11
- function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
12
- return (
13
- <SelectPrimitive.Group
14
- data-slot="select-group"
15
- className={cn("scroll-my-1 p-1", className)}
16
- {...props}
17
- />
18
- )
19
- }
20
-
21
- function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
22
- return (
23
- <SelectPrimitive.Value
24
- data-slot="select-value"
25
- className={cn("flex flex-1 text-left", className)}
26
- {...props}
27
- />
28
- )
29
- }
30
-
31
- function SelectTrigger({
32
- className,
33
- size = "default",
34
- children,
35
- ...props
36
- }: SelectPrimitive.Trigger.Props & {
37
- size?: "sm" | "default"
38
- }) {
39
- return (
40
- <SelectPrimitive.Trigger
41
- data-slot="select-trigger"
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Select as SelectPrimitive } from "@base-ui/react/select"
5
+
6
+ import { cn } from "@/lib/utils"
7
+ import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
8
+
9
+ const Select = SelectPrimitive.Root
10
+
11
+ function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
12
+ return (
13
+ <SelectPrimitive.Group
14
+ data-slot="select-group"
15
+ className={cn("scroll-my-1 p-1", className)}
16
+ {...props}
17
+ />
18
+ )
19
+ }
20
+
21
+ function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
22
+ return (
23
+ <SelectPrimitive.Value
24
+ data-slot="select-value"
25
+ className={cn("flex flex-1 text-left", className)}
26
+ {...props}
27
+ />
28
+ )
29
+ }
30
+
31
+ function SelectTrigger({
32
+ className,
33
+ size = "default",
34
+ children,
35
+ ...props
36
+ }: SelectPrimitive.Trigger.Props & {
37
+ size?: "sm" | "default"
38
+ }) {
39
+ return (
40
+ <SelectPrimitive.Trigger
41
+ data-slot="select-trigger"
42
42
  data-size={size}
43
43
  className={cn(
44
- "flex w-fit items-center justify-between gap-1.5 rounded-xl border border-input/85 bg-background/92 py-2 pr-3 pl-3 text-sm whitespace-nowrap shadow-sm transition-[background-color,border-color,box-shadow,color] outline-none select-none hover:border-border focus-visible:border-ring focus-visible:bg-background focus-visible:ring-3 focus-visible:ring-ring/45 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-[size=sm]:rounded-[min(var(--radius-lg),12px)] *: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:bg-input/30 dark:hover:bg-input/50 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
+ "flex w-fit items-center justify-between gap-2 rounded-[min(var(--radius-xl),16px)] border border-input/90 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--background),white_14%),var(--background))] py-2 pr-3 pl-3 text-sm whitespace-nowrap text-foreground shadow-[inset_0_1px_0_rgba(255,255,255,0.18),0_1px_0_rgba(255,255,255,0.06)] transition-[background-color,border-color,box-shadow,color] outline-none select-none hover:border-ring/30 hover:bg-background focus-visible:border-ring focus-visible:bg-background focus-visible:shadow-[0_0_0_1px_color-mix(in_oklch,var(--ring),transparent_45%),0_10px_24px_rgba(15,23,42,0.08)] focus-visible:ring-3 focus-visible:ring-ring/45 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-10 data-[size=sm]:h-9 data-[size=sm]:rounded-[min(var(--radius-lg),12px)] *: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:border-white/12 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.08),rgba(255,255,255,0.05))] dark:hover:bg-white/8 dark:focus-visible:bg-white/8 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",
45
45
  className
46
46
  )}
47
- {...props}
48
- >
49
- {children}
50
- <SelectPrimitive.Icon
51
- render={
52
- <ChevronDownIcon className="pointer-events-none size-4 text-muted-foreground" />
53
- }
54
- />
55
- </SelectPrimitive.Trigger>
56
- )
57
- }
58
-
59
- function SelectContent({
60
- className,
61
- children,
62
- side = "bottom",
63
- sideOffset = 4,
64
- align = "center",
65
- alignOffset = 0,
66
- alignItemWithTrigger = true,
67
- ...props
68
- }: SelectPrimitive.Popup.Props &
69
- Pick<
70
- SelectPrimitive.Positioner.Props,
71
- "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
72
- >) {
73
- return (
74
- <SelectPrimitive.Portal>
75
- <SelectPrimitive.Positioner
76
- side={side}
77
- sideOffset={sideOffset}
78
- align={align}
79
- alignOffset={alignOffset}
80
- alignItemWithTrigger={alignItemWithTrigger}
81
- className="isolate z-50"
82
- >
83
- <SelectPrimitive.Popup
84
- data-slot="select-content"
85
- data-align-trigger={alignItemWithTrigger}
86
- className={cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-40 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-[var(--radius-2xl)] border border-border/75 bg-popover/98 p-1 text-popover-foreground shadow-xl ring-1 ring-foreground/8 backdrop-blur 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 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 )}
47
+ {...props}
48
+ >
49
+ {children}
50
+ <SelectPrimitive.Icon
51
+ render={
52
+ <ChevronDownIcon className="pointer-events-none size-4 text-muted-foreground" />
53
+ }
54
+ />
55
+ </SelectPrimitive.Trigger>
56
+ )
57
+ }
58
+
59
+ function SelectContent({
60
+ className,
61
+ children,
62
+ side = "bottom",
63
+ sideOffset = 4,
64
+ align = "center",
65
+ alignOffset = 0,
66
+ alignItemWithTrigger = true,
67
+ ...props
68
+ }: SelectPrimitive.Popup.Props &
69
+ Pick<
70
+ SelectPrimitive.Positioner.Props,
71
+ "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
72
+ >) {
73
+ return (
74
+ <SelectPrimitive.Portal>
75
+ <SelectPrimitive.Positioner
76
+ side={side}
77
+ sideOffset={sideOffset}
78
+ align={align}
79
+ alignOffset={alignOffset}
80
+ alignItemWithTrigger={alignItemWithTrigger}
81
+ className="isolate z-50"
82
+ >
83
+ <SelectPrimitive.Popup
84
+ data-slot="select-content"
85
+ data-align-trigger={alignItemWithTrigger}
86
+ className={cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-44 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-[var(--radius-2xl)] border border-border/80 bg-popover/98 p-1.5 text-popover-foreground shadow-xl ring-1 ring-foreground/8 backdrop-blur 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 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)}
87
87
  {...props}
88
88
  >
89
- <SelectScrollUpButton />
90
- <SelectPrimitive.List>{children}</SelectPrimitive.List>
91
- <SelectScrollDownButton />
92
- </SelectPrimitive.Popup>
93
- </SelectPrimitive.Positioner>
94
- </SelectPrimitive.Portal>
95
- )
96
- }
97
-
98
- function SelectLabel({
99
- className,
100
- ...props
101
- }: SelectPrimitive.GroupLabel.Props) {
102
- return (
103
- <SelectPrimitive.GroupLabel
104
- data-slot="select-label"
89
+ <SelectScrollUpButton />
90
+ <SelectPrimitive.List>{children}</SelectPrimitive.List>
91
+ <SelectScrollDownButton />
92
+ </SelectPrimitive.Popup>
93
+ </SelectPrimitive.Positioner>
94
+ </SelectPrimitive.Portal>
95
+ )
96
+ }
97
+
98
+ function SelectLabel({
99
+ className,
100
+ ...props
101
+ }: SelectPrimitive.GroupLabel.Props) {
102
+ return (
103
+ <SelectPrimitive.GroupLabel
104
+ data-slot="select-label"
105
105
  className={cn("px-2 py-1.5 text-[11px] font-semibold tracking-[0.14em] uppercase text-muted-foreground/90", className)}
106
- {...props}
107
- />
108
- )
109
- }
110
-
111
- function SelectItem({
112
- className,
113
- children,
114
- ...props
115
- }: SelectPrimitive.Item.Props) {
116
- return (
117
- <SelectPrimitive.Item
118
- data-slot="select-item"
119
- className={cn(
120
- "relative flex w-full cursor-default items-center gap-1.5 rounded-xl py-2 pr-9 pl-2.5 text-sm outline-hidden select-none transition-colors focus:bg-accent/80 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",
106
+ {...props}
107
+ />
108
+ )
109
+ }
110
+
111
+ function SelectItem({
112
+ className,
113
+ children,
114
+ ...props
115
+ }: SelectPrimitive.Item.Props) {
116
+ return (
117
+ <SelectPrimitive.Item
118
+ data-slot="select-item"
119
+ className={cn(
120
+ "relative flex w-full cursor-default items-center gap-1.5 rounded-[min(var(--radius-xl),16px)] border border-transparent py-2.5 pr-9 pl-3 text-sm outline-hidden select-none transition-[background-color,border-color,color,box-shadow,transform] focus:border-border/80 focus:bg-accent/80 focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[selected]:border-primary/20 data-[selected]:bg-primary/9 data-[selected]:text-foreground data-[selected]:shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] data-disabled:pointer-events-none data-disabled:opacity-50 dark:data-[selected]:border-white/8 dark:data-[selected]:bg-white/6 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
121
121
  className
122
122
  )}
123
- {...props}
124
- >
125
- <SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
126
- {children}
127
- </SelectPrimitive.ItemText>
128
- <SelectPrimitive.ItemIndicator
129
- render={
130
- <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
131
- }
132
- >
133
- <CheckIcon className="pointer-events-none" />
134
- </SelectPrimitive.ItemIndicator>
135
- </SelectPrimitive.Item>
136
- )
137
- }
138
-
139
- function SelectSeparator({
140
- className,
141
- ...props
142
- }: SelectPrimitive.Separator.Props) {
143
- return (
144
- <SelectPrimitive.Separator
145
- data-slot="select-separator"
123
+ {...props}
124
+ >
125
+ <SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
126
+ {children}
127
+ </SelectPrimitive.ItemText>
128
+ <SelectPrimitive.ItemIndicator
129
+ render={
130
+ <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
131
+ }
132
+ >
133
+ <CheckIcon className="pointer-events-none" />
134
+ </SelectPrimitive.ItemIndicator>
135
+ </SelectPrimitive.Item>
136
+ )
137
+ }
138
+
139
+ function SelectSeparator({
140
+ className,
141
+ ...props
142
+ }: SelectPrimitive.Separator.Props) {
143
+ return (
144
+ <SelectPrimitive.Separator
145
+ data-slot="select-separator"
146
146
  className={cn("pointer-events-none -mx-1 my-1.5 h-px bg-border/80", className)}
147
- {...props}
148
- />
149
- )
150
- }
151
-
152
- function SelectScrollUpButton({
153
- className,
154
- ...props
155
- }: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
156
- return (
157
- <SelectPrimitive.ScrollUpArrow
158
- data-slot="select-scroll-up-button"
159
- className={cn(
147
+ {...props}
148
+ />
149
+ )
150
+ }
151
+
152
+ function SelectScrollUpButton({
153
+ className,
154
+ ...props
155
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
156
+ return (
157
+ <SelectPrimitive.ScrollUpArrow
158
+ data-slot="select-scroll-up-button"
159
+ className={cn(
160
160
  "top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1.5 [&_svg:not([class*='size-'])]:size-4",
161
- className
162
- )}
163
- {...props}
164
- >
165
- <ChevronUpIcon
166
- />
167
- </SelectPrimitive.ScrollUpArrow>
168
- )
169
- }
170
-
171
- function SelectScrollDownButton({
172
- className,
173
- ...props
174
- }: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {
175
- return (
176
- <SelectPrimitive.ScrollDownArrow
177
- data-slot="select-scroll-down-button"
178
- className={cn(
161
+ className
162
+ )}
163
+ {...props}
164
+ >
165
+ <ChevronUpIcon />
166
+ </SelectPrimitive.ScrollUpArrow>
167
+ )
168
+ }
169
+
170
+ function SelectScrollDownButton({
171
+ className,
172
+ ...props
173
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {
174
+ return (
175
+ <SelectPrimitive.ScrollDownArrow
176
+ data-slot="select-scroll-down-button"
177
+ className={cn(
179
178
  "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1.5 [&_svg:not([class*='size-'])]:size-4",
180
- className
181
- )}
182
- {...props}
183
- >
184
- <ChevronDownIcon
185
- />
186
- </SelectPrimitive.ScrollDownArrow>
187
- )
188
- }
189
-
190
- export {
191
- Select,
192
- SelectContent,
193
- SelectGroup,
194
- SelectItem,
195
- SelectLabel,
196
- SelectScrollDownButton,
197
- SelectScrollUpButton,
198
- SelectSeparator,
199
- SelectTrigger,
200
- SelectValue,
201
- }
179
+ className
180
+ )}
181
+ {...props}
182
+ >
183
+ <ChevronDownIcon />
184
+ </SelectPrimitive.ScrollDownArrow>
185
+ )
186
+ }
187
+
188
+ export {
189
+ Select,
190
+ SelectContent,
191
+ SelectGroup,
192
+ SelectItem,
193
+ SelectLabel,
194
+ SelectScrollDownButton,
195
+ SelectScrollUpButton,
196
+ SelectSeparator,
197
+ SelectTrigger,
198
+ SelectValue,
199
+ }
@@ -20,7 +20,7 @@ function Skeleton({ rounded = "md", animated = true, className, ...props }: Skel
20
20
  data-slot="skeleton"
21
21
  aria-hidden="true"
22
22
  className={cn(
23
- "bg-[linear-gradient(135deg,color-mix(in_oklch,var(--muted),white_38%)_0%,color-mix(in_oklch,var(--muted),transparent_6%)_48%,color-mix(in_oklch,var(--muted),white_28%)_100%)]",
23
+ "bg-[linear-gradient(135deg,color-mix(in_oklch,var(--muted),white_38%)_0%,color-mix(in_oklch,var(--muted),transparent_6%)_48%,color-mix(in_oklch,var(--muted),white_28%)_100%)] ring-1 ring-foreground/4",
24
24
  animated && "animate-pulse",
25
25
  roundedClassName[rounded],
26
26
  className
@@ -58,7 +58,7 @@ function SkeletonCard({ avatar = false, rows = 3, className, ...props }: Skeleto
58
58
  return (
59
59
  <div
60
60
  data-slot="skeleton-card"
61
- className={cn("rounded-[var(--radius-2xl)] border border-border/75 bg-card/96 p-5 shadow-sm", className)}
61
+ className={cn("rounded-[var(--radius-2xl)] border border-border/80 bg-card/96 p-5 shadow-sm ring-1 ring-foreground/5", className)}
62
62
  {...props}
63
63
  >
64
64
  <div className="flex gap-3">
@@ -1,71 +1,71 @@
1
- import * as React from "react"
2
-
3
- import { cn } from "@/lib/utils"
4
-
5
- export type SwitchProps = Omit<
6
- React.ComponentPropsWithoutRef<"button">,
7
- "onChange" | "value"
8
- > & {
9
- checked?: boolean
10
- defaultChecked?: boolean
11
- onCheckedChange?: (checked: boolean) => void
12
- }
13
-
14
- const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
15
- (
16
- {
17
- className,
18
- checked,
19
- defaultChecked = false,
20
- onCheckedChange,
21
- disabled,
22
- onClick,
23
- ...props
24
- },
25
- ref
26
- ) => {
27
- const isControlled = checked !== undefined
28
- const [internalChecked, setInternalChecked] = React.useState(defaultChecked)
29
- const currentChecked = isControlled ? checked : internalChecked
30
-
31
- const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
32
- const nextChecked = !currentChecked
33
-
34
- if (!isControlled) {
35
- setInternalChecked(nextChecked)
36
- }
37
-
38
- onCheckedChange?.(nextChecked)
39
- onClick?.(event)
40
- }
41
-
42
- return (
43
- <button
44
- ref={ref}
45
- type="button"
46
- role="switch"
47
- aria-checked={currentChecked}
48
- data-state={currentChecked ? "checked" : "unchecked"}
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ export type SwitchProps = Omit<
6
+ React.ComponentPropsWithoutRef<"button">,
7
+ "onChange" | "value"
8
+ > & {
9
+ checked?: boolean
10
+ defaultChecked?: boolean
11
+ onCheckedChange?: (checked: boolean) => void
12
+ }
13
+
14
+ const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
15
+ (
16
+ {
17
+ className,
18
+ checked,
19
+ defaultChecked = false,
20
+ onCheckedChange,
21
+ disabled,
22
+ onClick,
23
+ ...props
24
+ },
25
+ ref
26
+ ) => {
27
+ const isControlled = checked !== undefined
28
+ const [internalChecked, setInternalChecked] = React.useState(defaultChecked)
29
+ const currentChecked = isControlled ? checked : internalChecked
30
+
31
+ const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
32
+ const nextChecked = !currentChecked
33
+
34
+ if (!isControlled) {
35
+ setInternalChecked(nextChecked)
36
+ }
37
+
38
+ onCheckedChange?.(nextChecked)
39
+ onClick?.(event)
40
+ }
41
+
42
+ return (
43
+ <button
44
+ ref={ref}
45
+ type="button"
46
+ role="switch"
47
+ aria-checked={currentChecked}
48
+ data-state={currentChecked ? "checked" : "unchecked"}
49
49
  data-slot="switch"
50
50
  disabled={disabled}
51
51
  className={cn(
52
- "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border border-border/70 bg-input/85 shadow-sm transition-[background-color,border-color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/45 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary/50 data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_10px_22px_color-mix(in_oklch,var(--primary),transparent_82%)] dark:bg-input/80",
52
+ "peer inline-flex h-6.5 w-11.5 shrink-0 cursor-pointer items-center rounded-full border border-border/75 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--input),white_18%),var(--input))] shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] transition-[background-color,border-color,box-shadow] outline-none hover:border-ring/30 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/45 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary/55 data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_10px_22px_color-mix(in_oklch,var(--primary),transparent_82%)] dark:border-white/10 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.11),rgba(255,255,255,0.08))]",
53
53
  className
54
54
  )}
55
- onClick={handleClick}
56
- {...props}
57
- >
55
+ onClick={handleClick}
56
+ {...props}
57
+ >
58
58
  <span
59
59
  data-slot="switch-thumb"
60
60
  data-state={currentChecked ? "checked" : "unchecked"}
61
61
  className={cn(
62
- "pointer-events-none block size-5 rounded-full bg-background shadow-[0_2px_10px_color-mix(in_oklch,var(--foreground),transparent_86%)] ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5"
62
+ "pointer-events-none block size-5 rounded-full bg-[linear-gradient(180deg,white,color-mix(in_oklch,var(--background),white_18%))] shadow-[0_2px_10px_color-mix(in_oklch,var(--foreground),transparent_86%)] ring-1 ring-foreground/6 transition-transform data-[state=checked]:translate-x-5.5 data-[state=unchecked]:translate-x-0.5 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.98),rgba(255,255,255,0.88))]"
63
63
  )}
64
64
  />
65
- </button>
66
- )
67
- }
68
- )
69
- Switch.displayName = "Switch"
70
-
71
- export { Switch }
65
+ </button>
66
+ )
67
+ }
68
+ )
69
+ Switch.displayName = "Switch"
70
+
71
+ export { Switch }