@create-lft-app/cli 1.0.14 → 1.1.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 (61) hide show
  1. package/dist/bin/cli.js +150 -171
  2. package/dist/bin/cli.js.map +1 -1
  3. package/dist/src/index.js +148 -169
  4. package/dist/src/index.js.map +1 -1
  5. package/package.json +1 -1
  6. package/templates/app/auth/login/page.tsx +0 -153
  7. package/templates/app/dashboard/page.tsx +0 -102
  8. package/templates/app/globals.css +0 -249
  9. package/templates/app/layout.tsx +0 -40
  10. package/templates/app/page.tsx +0 -5
  11. package/templates/components/dashboard/widget.tsx +0 -113
  12. package/templates/components/layout/admin-midday-sidebar.tsx +0 -247
  13. package/templates/components/layout/admin-sidebar.tsx +0 -146
  14. package/templates/components/layout/header.tsx +0 -71
  15. package/templates/components/layout/main-content.tsx +0 -28
  16. package/templates/components/layout/midday-sidebar.tsx +0 -381
  17. package/templates/components/layout/nav-user.tsx +0 -108
  18. package/templates/components/layout/page-header.tsx +0 -95
  19. package/templates/components/layout/sidebar-context.tsx +0 -33
  20. package/templates/components/layout/sidebar.tsx +0 -194
  21. package/templates/components/layout/suspension-banner.tsx +0 -21
  22. package/templates/components/ui/accordion.tsx +0 -58
  23. package/templates/components/ui/alert-dialog.tsx +0 -165
  24. package/templates/components/ui/alert.tsx +0 -66
  25. package/templates/components/ui/avatar.tsx +0 -55
  26. package/templates/components/ui/badge.tsx +0 -50
  27. package/templates/components/ui/button.tsx +0 -89
  28. package/templates/components/ui/calendar.tsx +0 -220
  29. package/templates/components/ui/card.tsx +0 -89
  30. package/templates/components/ui/checkbox.tsx +0 -38
  31. package/templates/components/ui/collapsible.tsx +0 -33
  32. package/templates/components/ui/command.tsx +0 -196
  33. package/templates/components/ui/dialog.tsx +0 -153
  34. package/templates/components/ui/dropdown-menu.tsx +0 -280
  35. package/templates/components/ui/form.tsx +0 -171
  36. package/templates/components/ui/icons.tsx +0 -167
  37. package/templates/components/ui/input.tsx +0 -28
  38. package/templates/components/ui/label.tsx +0 -25
  39. package/templates/components/ui/popover.tsx +0 -59
  40. package/templates/components/ui/progress.tsx +0 -32
  41. package/templates/components/ui/radio-group.tsx +0 -45
  42. package/templates/components/ui/scroll-area.tsx +0 -63
  43. package/templates/components/ui/select.tsx +0 -208
  44. package/templates/components/ui/separator.tsx +0 -28
  45. package/templates/components/ui/sheet.tsx +0 -146
  46. package/templates/components/ui/sidebar.tsx +0 -726
  47. package/templates/components/ui/skeleton.tsx +0 -15
  48. package/templates/components/ui/slider.tsx +0 -58
  49. package/templates/components/ui/sonner.tsx +0 -47
  50. package/templates/components/ui/spinner.tsx +0 -27
  51. package/templates/components/ui/submit-button.tsx +0 -47
  52. package/templates/components/ui/switch.tsx +0 -31
  53. package/templates/components/ui/table.tsx +0 -120
  54. package/templates/components/ui/tabs.tsx +0 -75
  55. package/templates/components/ui/textarea.tsx +0 -26
  56. package/templates/components/ui/tooltip.tsx +0 -70
  57. package/templates/hooks/use-mobile.ts +0 -21
  58. package/templates/lib/supabase/client.ts +0 -8
  59. package/templates/lib/supabase/server.ts +0 -29
  60. package/templates/lib/utils.ts +0 -6
  61. package/templates/modules/auth/actions/auth-actions.ts +0 -12
@@ -1,171 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import type * as LabelPrimitive from "@radix-ui/react-label"
5
- import { Slot } from "@radix-ui/react-slot"
6
- import {
7
- Controller,
8
- FormProvider,
9
- useFormContext,
10
- useFormState,
11
- type ControllerProps,
12
- type FieldPath,
13
- type FieldValues,
14
- } from "react-hook-form"
15
-
16
- import { cn } from "@/lib/utils"
17
- import { Label } from "@/components/ui/label"
18
-
19
- const Form = FormProvider
20
-
21
- type FormFieldContextValue<
22
- TFieldValues extends FieldValues = FieldValues,
23
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
24
- > = {
25
- name: TName
26
- }
27
-
28
- const FormFieldContext = React.createContext<FormFieldContextValue>(
29
- {} as FormFieldContextValue
30
- )
31
-
32
- const FormField = <
33
- TFieldValues extends FieldValues = FieldValues,
34
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
35
- >({
36
- ...props
37
- }: ControllerProps<TFieldValues, TName>) => {
38
- return (
39
- <FormFieldContext.Provider value={{ name: props.name }}>
40
- <Controller {...props} />
41
- </FormFieldContext.Provider>
42
- )
43
- }
44
-
45
- const useFormField = () => {
46
- const fieldContext = React.useContext(FormFieldContext)
47
- const itemContext = React.useContext(FormItemContext)
48
- const { getFieldState } = useFormContext()
49
- const formState = useFormState({ name: fieldContext.name })
50
- const fieldState = getFieldState(fieldContext.name, formState)
51
-
52
- if (!fieldContext) {
53
- throw new Error("useFormField should be used within <FormField>")
54
- }
55
-
56
- const { id } = itemContext
57
-
58
- return {
59
- id,
60
- name: fieldContext.name,
61
- formItemId: `${id}-form-item`,
62
- formDescriptionId: `${id}-form-item-description`,
63
- formMessageId: `${id}-form-item-message`,
64
- ...fieldState,
65
- }
66
- }
67
-
68
- type FormItemContextValue = {
69
- id: string
70
- }
71
-
72
- const FormItemContext = React.createContext<FormItemContextValue>(
73
- {} as FormItemContextValue
74
- )
75
-
76
- function FormItem({ className, ...props }: React.ComponentProps<"div">) {
77
- const id = React.useId()
78
-
79
- return (
80
- <FormItemContext.Provider value={{ id }}>
81
- <div
82
- data-slot="form-item"
83
- className={cn("grid gap-2", className)}
84
- {...props}
85
- />
86
- </FormItemContext.Provider>
87
- )
88
- }
89
-
90
- function FormLabel({
91
- className,
92
- ...props
93
- }: React.ComponentProps<typeof LabelPrimitive.Root>) {
94
- const { error, formItemId } = useFormField()
95
-
96
- return (
97
- <Label
98
- data-slot="form-label"
99
- data-error={!!error}
100
- className={cn(
101
- "text-xs text-[#878787] font-normal",
102
- "data-[error=true]:text-destructive",
103
- className
104
- )}
105
- htmlFor={formItemId}
106
- {...props}
107
- />
108
- )
109
- }
110
-
111
- function FormControl({ ...props }: React.ComponentProps<typeof Slot>) {
112
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
113
-
114
- return (
115
- <Slot
116
- data-slot="form-control"
117
- id={formItemId}
118
- aria-describedby={
119
- !error
120
- ? `${formDescriptionId}`
121
- : `${formDescriptionId} ${formMessageId}`
122
- }
123
- aria-invalid={!!error}
124
- {...props}
125
- />
126
- )
127
- }
128
-
129
- function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
130
- const { formDescriptionId } = useFormField()
131
-
132
- return (
133
- <p
134
- data-slot="form-description"
135
- id={formDescriptionId}
136
- className={cn("text-[0.8rem] text-muted-foreground", className)}
137
- {...props}
138
- />
139
- )
140
- }
141
-
142
- function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
143
- const { error, formMessageId } = useFormField()
144
- const body = error ? String(error?.message ?? "") : props.children
145
-
146
- if (!body) {
147
- return null
148
- }
149
-
150
- return (
151
- <p
152
- data-slot="form-message"
153
- id={formMessageId}
154
- className={cn("text-[0.8rem] font-medium text-destructive", className)}
155
- {...props}
156
- >
157
- {body}
158
- </p>
159
- )
160
- }
161
-
162
- export {
163
- useFormField,
164
- Form,
165
- FormItem,
166
- FormLabel,
167
- FormControl,
168
- FormDescription,
169
- FormMessage,
170
- FormField,
171
- }
@@ -1,167 +0,0 @@
1
- 'use client'
2
-
3
- import * as React from 'react'
4
- import { cn } from '@/lib/utils'
5
-
6
- interface SVGIconProps extends React.SVGProps<SVGSVGElement> {
7
- size?: number
8
- }
9
-
10
- const SVGIcon = React.forwardRef<SVGSVGElement, SVGIconProps>(
11
- ({ size = 20, className, children, viewBox = '0 0 20 20', ...props }, ref) => (
12
- <svg
13
- ref={ref}
14
- width={size}
15
- height={size}
16
- viewBox={viewBox}
17
- fill="currentColor"
18
- className={cn('shrink-0', className)}
19
- {...props}
20
- >
21
- {children}
22
- </svg>
23
- )
24
- )
25
- SVGIcon.displayName = 'SVGIcon'
26
-
27
- export const Icons = {
28
- Logo: ({ size = 28, className, ...props }: SVGIconProps) => (
29
- <SVGIcon size={size} viewBox="0 0 28 28" className={className} {...props}>
30
- <rect width="28" height="28" rx="6" fill="currentColor" />
31
- <text x="50%" y="55%" dominantBaseline="middle" textAnchor="middle" fill="white" fontSize="14" fontWeight="bold">
32
- R
33
- </text>
34
- </SVGIcon>
35
- ),
36
-
37
- Dashboard: ({ size = 20, className, ...props }: SVGIconProps) => (
38
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
39
- <path strokeLinecap="round" strokeLinejoin="round" d="M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25A2.25 2.25 0 0 1 13.5 18v-2.25Z" />
40
- </SVGIcon>
41
- ),
42
-
43
- Users: ({ size = 20, className, ...props }: SVGIconProps) => (
44
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
45
- <path strokeLinecap="round" strokeLinejoin="round" d="M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z" />
46
- </SVGIcon>
47
- ),
48
-
49
- Documents: ({ size = 20, className, ...props }: SVGIconProps) => (
50
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
51
- <path strokeLinecap="round" strokeLinejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z" />
52
- </SVGIcon>
53
- ),
54
-
55
- Alert: ({ size = 20, className, ...props }: SVGIconProps) => (
56
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
57
- <path strokeLinecap="round" strokeLinejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z" />
58
- </SVGIcon>
59
- ),
60
-
61
- Operations: ({ size = 20, className, ...props }: SVGIconProps) => (
62
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
63
- <path strokeLinecap="round" strokeLinejoin="round" d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z" />
64
- </SVGIcon>
65
- ),
66
-
67
- Calendar: ({ size = 20, className, ...props }: SVGIconProps) => (
68
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
69
- <path strokeLinecap="round" strokeLinejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5" />
70
- </SVGIcon>
71
- ),
72
-
73
- Settings: ({ size = 20, className, ...props }: SVGIconProps) => (
74
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
75
- <path strokeLinecap="round" strokeLinejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z" />
76
- <path strokeLinecap="round" strokeLinejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
77
- </SVGIcon>
78
- ),
79
-
80
- Building: ({ size = 20, className, ...props }: SVGIconProps) => (
81
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
82
- <path strokeLinecap="round" strokeLinejoin="round" d="M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21M6.75 6.75h.75m-.75 3h.75m-.75 3h.75m3-6h.75m-.75 3h.75m-.75 3h.75M6.75 21v-3.375c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21M3 3h12m-.75 4.5H21m-3.75 3H21m-3.75 3H21" />
83
- </SVGIcon>
84
- ),
85
-
86
- Shield: ({ size = 20, className, ...props }: SVGIconProps) => (
87
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
88
- <path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z" />
89
- </SVGIcon>
90
- ),
91
-
92
- ChevronRight: ({ size = 16, className, ...props }: SVGIconProps) => (
93
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} {...props}>
94
- <path strokeLinecap="round" strokeLinejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
95
- </SVGIcon>
96
- ),
97
-
98
- ChevronDown: ({ size = 16, className, ...props }: SVGIconProps) => (
99
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} {...props}>
100
- <path strokeLinecap="round" strokeLinejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" />
101
- </SVGIcon>
102
- ),
103
-
104
- User: ({ size = 20, className, ...props }: SVGIconProps) => (
105
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
106
- <path strokeLinecap="round" strokeLinejoin="round" d="M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z" />
107
- </SVGIcon>
108
- ),
109
-
110
- LogOut: ({ size = 20, className, ...props }: SVGIconProps) => (
111
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
112
- <path strokeLinecap="round" strokeLinejoin="round" d="M8.25 9V5.25A2.25 2.25 0 0 1 10.5 3h6a2.25 2.25 0 0 1 2.25 2.25v13.5A2.25 2.25 0 0 1 16.5 21h-6a2.25 2.25 0 0 1-2.25-2.25V15m-3 0-3-3m0 0 3-3m-3 3H15" />
113
- </SVGIcon>
114
- ),
115
-
116
- Add: ({ size = 16, className, ...props }: SVGIconProps) => (
117
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} {...props}>
118
- <path strokeLinecap="round" strokeLinejoin="round" d="M12 4.5v15m7.5-7.5h-15" />
119
- </SVGIcon>
120
- ),
121
-
122
- Close: ({ size = 16, className, ...props }: SVGIconProps) => (
123
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} {...props}>
124
- <path strokeLinecap="round" strokeLinejoin="round" d="M6 18 18 6M6 6l12 12" />
125
- </SVGIcon>
126
- ),
127
-
128
- Search: ({ size = 20, className, ...props }: SVGIconProps) => (
129
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
130
- <path strokeLinecap="round" strokeLinejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
131
- </SVGIcon>
132
- ),
133
-
134
- MoreVertical: ({ size = 20, className, ...props }: SVGIconProps) => (
135
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
136
- <path strokeLinecap="round" strokeLinejoin="round" d="M12 6.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 12.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 18.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Z" />
137
- </SVGIcon>
138
- ),
139
-
140
- Check: ({ size = 16, className, ...props }: SVGIconProps) => (
141
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} {...props}>
142
- <path strokeLinecap="round" strokeLinejoin="round" d="m4.5 12.75 6 6 9-13.5" />
143
- </SVGIcon>
144
- ),
145
-
146
- Spinner: ({ size = 20, className, ...props }: SVGIconProps) => (
147
- <SVGIcon
148
- size={size}
149
- viewBox="0 0 24 24"
150
- className={cn('animate-spin stroke-[#878787]', className)}
151
- fill="none"
152
- stroke="currentColor"
153
- strokeWidth={1.5}
154
- {...props}
155
- >
156
- <path d="M12 3v3m6.366-.366-2.12 2.12M21 12h-3m.366 6.366-2.12-2.12M12 21v-3m-6.366.366 2.12-2.12M3 12h3m-.366-6.366 2.12 2.12" />
157
- </SVGIcon>
158
- ),
159
-
160
- UserPlus: ({ size = 20, className, ...props }: SVGIconProps) => (
161
- <SVGIcon size={size} viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.5} {...props}>
162
- <path strokeLinecap="round" strokeLinejoin="round" d="M18 7.5v3m0 0v3m0-3h3m-3 0h-3m-2.25-4.125a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0ZM3 19.235v-.11a6.375 6.375 0 0 1 12.75 0v.109A12.318 12.318 0 0 1 9.374 21c-2.331 0-4.512-.645-6.374-1.766Z" />
163
- </SVGIcon>
164
- ),
165
- }
166
-
167
- export type IconName = keyof typeof Icons
@@ -1,28 +0,0 @@
1
- import * as React from "react"
2
-
3
- import { cn } from "@/lib/utils"
4
-
5
- function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
- return (
7
- <input
8
- type={type}
9
- data-slot="input"
10
- className={cn(
11
- "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1",
12
- "text-base md:text-sm",
13
- "transition-colors",
14
- "file:border-0 file:bg-transparent file:text-sm file:font-medium",
15
- "placeholder:text-muted-foreground",
16
- "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
17
- "disabled:cursor-not-allowed disabled:opacity-50",
18
- "[&:-webkit-autofill]:[-webkit-text-fill-color:hsl(var(--foreground))]",
19
- "[&:-webkit-autofill]:[caret-color:hsl(var(--foreground))]",
20
- "[&:-webkit-autofill]:shadow-[inset_0_0_0px_1000px_hsl(var(--background))]",
21
- className
22
- )}
23
- {...props}
24
- />
25
- )
26
- }
27
-
28
- export { Input }
@@ -1,25 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as LabelPrimitive from "@radix-ui/react-label"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- function Label({
9
- className,
10
- ...props
11
- }: React.ComponentProps<typeof LabelPrimitive.Root>) {
12
- return (
13
- <LabelPrimitive.Root
14
- data-slot="label"
15
- className={cn(
16
- "text-sm font-medium leading-none",
17
- "peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
18
- className
19
- )}
20
- {...props}
21
- />
22
- )
23
- }
24
-
25
- export { Label }
@@ -1,59 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as PopoverPrimitive from "@radix-ui/react-popover"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- function Popover({
9
- ...props
10
- }: React.ComponentProps<typeof PopoverPrimitive.Root>) {
11
- return <PopoverPrimitive.Root data-slot="popover" {...props} />
12
- }
13
-
14
- function PopoverTrigger({
15
- ...props
16
- }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {
17
- return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />
18
- }
19
-
20
- function PopoverContent({
21
- className,
22
- align = "center",
23
- sideOffset = 4,
24
- ...props
25
- }: React.ComponentProps<typeof PopoverPrimitive.Content>) {
26
- return (
27
- <PopoverPrimitive.Portal>
28
- <PopoverPrimitive.Content
29
- data-slot="popover-content"
30
- align={align}
31
- sideOffset={sideOffset}
32
- className={cn(
33
- "z-50 w-72 rounded-md p-4",
34
- "border border-border",
35
- "bg-background dark:bg-[#1c1c1c]",
36
- "text-popover-foreground",
37
- "outline-none",
38
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
39
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
40
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
41
- "data-[side=bottom]:slide-in-from-top-2",
42
- "data-[side=left]:slide-in-from-right-2",
43
- "data-[side=right]:slide-in-from-left-2",
44
- "data-[side=top]:slide-in-from-bottom-2",
45
- className
46
- )}
47
- {...props}
48
- />
49
- </PopoverPrimitive.Portal>
50
- )
51
- }
52
-
53
- function PopoverAnchor({
54
- ...props
55
- }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {
56
- return <PopoverPrimitive.Anchor data-slot="popover-anchor" {...props} />
57
- }
58
-
59
- export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }
@@ -1,32 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as ProgressPrimitive from "@radix-ui/react-progress"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- function Progress({
9
- className,
10
- value,
11
- ...props
12
- }: React.ComponentProps<typeof ProgressPrimitive.Root>) {
13
- return (
14
- <ProgressPrimitive.Root
15
- data-slot="progress"
16
- className={cn(
17
- "relative h-1.5 w-full overflow-hidden rounded-full",
18
- "bg-[#e6e6e6] dark:bg-[#2c2c2c]",
19
- className
20
- )}
21
- {...props}
22
- >
23
- <ProgressPrimitive.Indicator
24
- data-slot="progress-indicator"
25
- className="h-full w-full flex-1 bg-primary transition-all duration-300 ease-out"
26
- style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
27
- />
28
- </ProgressPrimitive.Root>
29
- )
30
- }
31
-
32
- export { Progress }
@@ -1,45 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"
5
- import { CircleIcon } from "lucide-react"
6
-
7
- import { cn } from "@/lib/utils"
8
-
9
- function RadioGroup({
10
- className,
11
- ...props
12
- }: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {
13
- return (
14
- <RadioGroupPrimitive.Root
15
- data-slot="radio-group"
16
- className={cn("grid gap-3", className)}
17
- {...props}
18
- />
19
- )
20
- }
21
-
22
- function RadioGroupItem({
23
- className,
24
- ...props
25
- }: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {
26
- return (
27
- <RadioGroupPrimitive.Item
28
- data-slot="radio-group-item"
29
- className={cn(
30
- "border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
31
- className
32
- )}
33
- {...props}
34
- >
35
- <RadioGroupPrimitive.Indicator
36
- data-slot="radio-group-indicator"
37
- className="relative flex items-center justify-center"
38
- >
39
- <CircleIcon className="fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" />
40
- </RadioGroupPrimitive.Indicator>
41
- </RadioGroupPrimitive.Item>
42
- )
43
- }
44
-
45
- export { RadioGroup, RadioGroupItem }
@@ -1,63 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- interface ScrollAreaProps extends React.ComponentProps<typeof ScrollAreaPrimitive.Root> {
9
- hideScrollbar?: boolean
10
- }
11
-
12
- function ScrollArea({
13
- className,
14
- children,
15
- hideScrollbar = false,
16
- ...props
17
- }: ScrollAreaProps) {
18
- return (
19
- <ScrollAreaPrimitive.Root
20
- data-slot="scroll-area"
21
- className={cn("relative overflow-hidden", className)}
22
- {...props}
23
- >
24
- <ScrollAreaPrimitive.Viewport
25
- data-slot="scroll-area-viewport"
26
- className="h-full w-full rounded-[inherit]"
27
- >
28
- {children}
29
- </ScrollAreaPrimitive.Viewport>
30
- {!hideScrollbar && <ScrollBar />}
31
- <ScrollAreaPrimitive.Corner />
32
- </ScrollAreaPrimitive.Root>
33
- )
34
- }
35
-
36
- function ScrollBar({
37
- className,
38
- orientation = "vertical",
39
- ...props
40
- }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {
41
- return (
42
- <ScrollAreaPrimitive.ScrollAreaScrollbar
43
- data-slot="scroll-area-scrollbar"
44
- orientation={orientation}
45
- className={cn(
46
- "flex touch-none select-none transition-colors",
47
- orientation === "vertical" &&
48
- "h-full w-2.5 border-l border-l-transparent p-[1px]",
49
- orientation === "horizontal" &&
50
- "h-2.5 flex-col border-t border-t-transparent p-[1px]",
51
- className
52
- )}
53
- {...props}
54
- >
55
- <ScrollAreaPrimitive.ScrollAreaThumb
56
- data-slot="scroll-area-thumb"
57
- className="relative flex-1 rounded-full bg-border"
58
- />
59
- </ScrollAreaPrimitive.ScrollAreaScrollbar>
60
- )
61
- }
62
-
63
- export { ScrollArea, ScrollBar }