@saptanshuwanjari/react-component-library 0.1.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.
- package/LICENSE +21 -0
- package/README.md +56 -0
- package/dist/index.d.mts +171 -0
- package/dist/index.d.ts +171 -0
- package/dist/index.js +1241 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1215 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/form/context.ts","../src/components/form/root.tsx","../src/components/form/use-form-ctx.ts","../src/components/form/field.tsx","../src/components/form/input-field.tsx","../src/components/form/password-field.tsx","../src/components/form/textarea-field.tsx","../src/components/form/select-field.tsx","../src/components/form/checkbox-field.tsx","../src/components/form/date-field.tsx","../src/components/form/file-field.tsx","../src/lib/utils.ts","../src/components/form/profile-picture-field.tsx","../src/components/form/submit.tsx","../src/components/form/edit-button.tsx","../src/components/form/cancel-button.tsx","../src/components/form/link-field.tsx","../src/components/form/field-group.tsx","../src/components/form/index.ts","../src/components/data-table/context.tsx","../src/components/data-table/root.tsx","../src/components/ui/input.tsx","../src/components/ui/button.tsx","../src/components/ui/select.tsx","../src/components/ui/popover.tsx","../src/components/ui/checkbox.tsx","../src/components/data-table/toolbar.tsx","../src/components/ui/table.tsx","../src/components/data-table/table-view.tsx","../src/components/data-table/grid-view.tsx","../src/components/data-table/content.tsx","../src/components/data-table/pagination.tsx","../src/components/data-table/index.tsx"],"names":["jsx","jsxs","InputField","memo","PasswordField","useState","TextareaField","Input","SelectField","ShadField","FieldError","CheckboxField","Controller","DateField","FileField","Button","ProfilePictureField","Upload","useContext","Fragment","createContext","Root","root_default","Select","SelectValue","ChevronDownIcon","SelectItem","Checkbox","CheckIcon","Eye","TableIcon","Content"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext } from \"react\";\r\nimport type { FieldValues } from \"react-hook-form\";\r\nimport type { useForm } from \"react-hook-form\";\r\nimport type * as z from \"zod\";\r\n\r\nexport type ZodSchema = z.ZodTypeAny;\r\n\r\nexport type FormContextValue<T extends FieldValues> = ReturnType<\r\n typeof useForm<T>\r\n> & {\r\n schema?: ZodSchema | undefined;\r\n isPending?: boolean;\r\n isEditing?: boolean;\r\n setIsEditing?: (editing: boolean) => void;\r\n};\r\n\r\nexport const FormContext = createContext<FormContextValue<any> | null>(null);\r\n\r\nexport const DEFAULT_FORM_KEY = \"__default_form__\";\r\nexport const formRegistry = new Map<string, (editing: boolean) => void>();\r\n","'use client';\r\n\r\nimport { useEffect, useState, useTransition, type ReactNode } from 'react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm } from 'react-hook-form';\r\nimport type { FieldValues } from 'react-hook-form';\r\nimport { FormContext, DEFAULT_FORM_KEY, formRegistry, type ZodSchema } from './context';\r\n\r\ntype RootProps<T extends FieldValues> = {\r\n schema?: ZodSchema;\r\n defaultValues?: Partial<T>;\r\n onSubmit: (values: any) => void | Promise<void>;\r\n children: React.ReactNode;\r\n enableOptimistic?: boolean;\r\n title?: string;\r\n description?: string;\r\n enableEditMode?: boolean;\r\n formId?: string;\r\n};\r\n\r\nfunction Root<T extends FieldValues = FieldValues>({\r\n schema,\r\n defaultValues,\r\n onSubmit,\r\n children,\r\n enableOptimistic = false,\r\n title,\r\n description,\r\n enableEditMode = false,\r\n formId,\r\n}: RootProps<T>) {\r\n const resolver: any = schema ? zodResolver(schema as any) : undefined;\r\n const [isPending, startTransition] = useTransition();\r\n const [isEditing, setIsEditing] = useState(!enableEditMode);\r\n\r\n const methods = useForm<T>({\r\n resolver,\r\n defaultValues: defaultValues as any,\r\n });\r\n\r\n const handleFormSubmit = methods.handleSubmit((data) => {\r\n if (enableOptimistic) {\r\n startTransition(() => {\r\n void onSubmit(data);\r\n });\r\n return;\r\n }\r\n return onSubmit(data);\r\n });\r\n\r\n useEffect(() => {\r\n const key = formId ?? DEFAULT_FORM_KEY;\r\n formRegistry.set(key, setIsEditing);\r\n return () => {\r\n formRegistry.delete(key);\r\n };\r\n }, [formId, setIsEditing]);\r\n\r\n return (\r\n <FormContext.Provider value={{ ...methods, schema, isPending, isEditing, setIsEditing } as any}>\r\n <form\r\n onSubmit={handleFormSubmit}\r\n className=\"bg-card text-card-foreground rounded-xl border shadow-sm p-6 space-y-6\"\r\n >\r\n {(title || description) && (\r\n <div className=\"space-y-2\">\r\n {title && (\r\n <h2 className=\"text-2xl font-semibold tracking-tight\">{title}</h2>\r\n )}\r\n {description && (\r\n <p className=\"text-sm text-muted-foreground\">{description}</p>\r\n )}\r\n </div>\r\n )}\r\n {children}\r\n </form>\r\n </FormContext.Provider>\r\n );\r\n}\r\n\r\nexport default Root;\r\n","import { useContext } from \"react\";\r\nimport type { FieldValues } from \"react-hook-form\";\r\nimport { FormContext, type FormContextValue } from \"./context\";\r\n\r\nexport function useFormCtx<T extends FieldValues>() {\r\n const ctx = useContext<FormContextValue<T> | null>(FormContext);\r\n if (!ctx) throw new Error(\"Form components must be used inside Form.Root\");\r\n return ctx;\r\n}\r\n","'use client';\r\n\r\nimport { Controller } from 'react-hook-form';\r\nimport type { FieldValues, Path, ControllerRenderProps } from 'react-hook-form';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder UI components - user will add shadcn components\r\nconst ShadField = ({ children }: { children: React.ReactNode }) => <div className=\"space-y-2\">{children}</div>;\r\nconst FieldLabel = ({ htmlFor, children }: { htmlFor?: string; children: React.ReactNode }) => (\r\n <label htmlFor={htmlFor} className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\r\n {children}\r\n </label>\r\n);\r\nconst FieldError = ({ children }: { children?: React.ReactNode }) => (\r\n children ? <p className=\"text-sm font-medium text-destructive\">{children}</p> : null\r\n);\r\n\r\ntype FieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n children: (\r\n field: ControllerRenderProps<TFieldValues, Path<TFieldValues>>\r\n ) => React.ReactNode;\r\n};\r\n\r\nfunction Field<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n children,\r\n}: FieldProps<TFieldValues>) {\r\n const form = useFormCtx<TFieldValues>();\r\n\r\n return (\r\n <ShadField>\r\n {label ? <FieldLabel htmlFor={String(name)}>{label}</FieldLabel> : null}\r\n <Controller\r\n control={form.control}\r\n name={name}\r\n render={({ field }) => <>{children(field)}</>}\r\n />\r\n <FieldError>\r\n {(form.formState.errors as any)[name]?.message as React.ReactNode}\r\n </FieldError>\r\n </ShadField>\r\n );\r\n}\r\n\r\nexport default Field;\r\n","'use client';\r\n\r\nimport { memo, type ReactNode } from 'react';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport Field from './field';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder Input component\r\nconst Input = ({ className = '', ...props }: React.ComponentProps<'input'>) => (\r\n <input\r\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${className}`}\r\n {...props}\r\n />\r\n);\r\n\r\ntype InputFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n placeholder?: string;\r\n type?: React.HTMLInputTypeAttribute;\r\n icon?: React.ReactNode;\r\n iconAlign?: 'inline-start' | 'inline-end' | 'block-start' | 'block-end';\r\n startAddon?: React.ReactNode;\r\n endAddon?: React.ReactNode;\r\n useGroup?: boolean;\r\n};\r\n\r\nconst InputField = memo(function InputField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n placeholder,\r\n type = 'text',\r\n icon,\r\n iconAlign = 'inline-start',\r\n startAddon,\r\n endAddon,\r\n useGroup,\r\n}: InputFieldProps<TFieldValues>) {\r\n const { isEditing } = useFormCtx<TFieldValues>();\r\n\r\n return (\r\n <Field name={name} label={label}>\r\n {(field) => (\r\n <Input\r\n id={String(name)}\r\n type={type}\r\n {...field}\r\n value={field.value ?? ''}\r\n placeholder={placeholder}\r\n disabled={!isEditing}\r\n />\r\n )}\r\n </Field>\r\n );\r\n}) as <TFieldValues extends FieldValues>(\r\n props: InputFieldProps<TFieldValues>\r\n) => ReactNode;\r\n\r\nexport default InputField;\r\n","'use client';\r\n\r\nimport { memo, useState } from 'react';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport Field from './field';\r\nimport { Eye, EyeOff, Lock } from 'lucide-react';\r\n\r\ntype PasswordFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n placeholder?: string;\r\n};\r\n\r\nconst PasswordField = memo(function PasswordField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n placeholder,\r\n}: PasswordFieldProps<TFieldValues>) {\r\n const [show, setShow] = useState(false);\r\n\r\n return (\r\n <Field name={name} label={label}>\r\n {(field) => (\r\n <div className=\"relative\">\r\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none\">\r\n <Lock className=\"h-4 w-4 text-muted-foreground\" />\r\n </div>\r\n <input\r\n id={String(name)}\r\n type={show ? 'text' : 'password'}\r\n {...field}\r\n value={field.value ?? ''}\r\n placeholder={placeholder}\r\n className=\"flex h-10 w-full rounded-md border border-input bg-background pl-10 pr-10 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\r\n />\r\n <button\r\n type=\"button\"\r\n onClick={() => setShow(!show)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors\"\r\n >\r\n {show ? <EyeOff className=\"h-4 w-4\" /> : <Eye className=\"h-4 w-4\" />}\r\n </button>\r\n </div>\r\n )}\r\n </Field>\r\n );\r\n});\r\n\r\nexport default PasswordField;\r\n","'use client';\r\n\r\nimport { memo, type ReactNode } from 'react';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport Field from './field';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder Textarea component\r\nconst Textarea = ({ className = '', ...props }: React.ComponentProps<'textarea'>) => (\r\n <textarea\r\n className={`flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${className}`}\r\n {...props}\r\n />\r\n);\r\n\r\ntype TextareaFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n placeholder?: string;\r\n rows?: number;\r\n};\r\n\r\nconst TextareaField = memo(function TextareaField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n placeholder,\r\n rows = 4,\r\n}: TextareaFieldProps<TFieldValues>) {\r\n const { isEditing } = useFormCtx<TFieldValues>();\r\n\r\n return (\r\n <Field name={name} label={label}>\r\n {(field) => (\r\n <Textarea\r\n id={String(name)}\r\n {...field}\r\n value={field.value ?? ''}\r\n placeholder={placeholder}\r\n rows={rows}\r\n disabled={!isEditing}\r\n className={!isEditing ? 'bg-background/50 opacity-80' : ''}\r\n />\r\n )}\r\n </Field>\r\n );\r\n}) as <TFieldValues extends FieldValues>(\r\n props: TextareaFieldProps<TFieldValues>\r\n) => ReactNode;\r\n\r\nexport default TextareaField;\r\n","'use client';\r\n\r\nimport { memo, type ReactNode } from 'react';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport Field from './field';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder components - these will be replaced with actual shadcn components\r\nconst Select = ({ children, onValueChange, value }: any) => (\r\n <select\r\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\r\n onChange={(e) => onValueChange(e.target.value)}\r\n value={value}\r\n >\r\n {children}\r\n </select>\r\n);\r\nconst SelectTrigger = ({ children }: any) => <>{children}</>;\r\nconst SelectValue = ({ placeholder }: any) => <option value=\"\">{placeholder}</option>;\r\nconst SelectContent = ({ children }: any) => <>{children}</>;\r\nconst SelectItem = ({ value, children }: any) => <option value={value}>{children}</option>;\r\nconst Input = ({ className = '', ...props }: React.ComponentProps<'input'>) => (\r\n <input\r\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ${className}`}\r\n {...props}\r\n />\r\n);\r\n\r\ntype SelectFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n placeholder?: string;\r\n options: Array<{ label: string; value: string }>;\r\n};\r\n\r\nconst SelectField = memo(function SelectField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n placeholder = 'Select an option',\r\n options,\r\n}: SelectFieldProps<TFieldValues>) {\r\n const { isEditing } = useFormCtx<TFieldValues>();\r\n\r\n return (\r\n <Field name={name} label={label}>\r\n {(field) =>\r\n !isEditing ? (\r\n <Input\r\n id={String(name)}\r\n value={options.find((opt) => opt.value === field.value)?.label ?? ''}\r\n placeholder={placeholder}\r\n disabled\r\n className=\"bg-background/50 opacity-80\"\r\n />\r\n ) : (\r\n <Select onValueChange={field.onChange} value={field.value ?? ''}>\r\n <SelectValue placeholder={placeholder} />\r\n {options.map((option) => (\r\n <SelectItem key={option.value} value={option.value}>\r\n {option.label}\r\n </SelectItem>\r\n ))}\r\n </Select>\r\n )\r\n }\r\n </Field>\r\n );\r\n}) as <TFieldValues extends FieldValues>(\r\n props: SelectFieldProps<TFieldValues>\r\n) => ReactNode;\r\n\r\nexport default SelectField;\r\n","'use client';\r\n\r\nimport { memo, type ReactNode } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder components\r\nconst ShadField = ({ children }: { children: React.ReactNode }) => <div className=\"space-y-2\">{children}</div>;\r\nconst FieldError = ({ children }: { children?: React.ReactNode }) => (\r\n children ? <p className=\"text-sm font-medium text-destructive\">{children}</p> : null\r\n);\r\nconst Checkbox = ({ checked, onCheckedChange, disabled, id }: any) => (\r\n <input\r\n type=\"checkbox\"\r\n id={id}\r\n checked={checked}\r\n onChange={(e) => onCheckedChange?.(e.target.checked)}\r\n disabled={disabled}\r\n className=\"h-4 w-4 rounded border-gray-300\"\r\n />\r\n);\r\n\r\ntype CheckboxFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n description?: string;\r\n};\r\n\r\nconst CheckboxField = memo(function CheckboxField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n description,\r\n}: CheckboxFieldProps<TFieldValues>) {\r\n const form = useFormCtx<TFieldValues>();\r\n\r\n return (\r\n <ShadField>\r\n <Controller\r\n control={form.control}\r\n name={name}\r\n render={({ field }) => (\r\n <div className=\"flex items-start gap-2\">\r\n <Checkbox\r\n id={String(name)}\r\n checked={!!field.value}\r\n onCheckedChange={form.isEditing ? field.onChange : undefined}\r\n disabled={!form.isEditing}\r\n />\r\n <div className=\"grid gap-1.5 leading-none\">\r\n {label && (\r\n <label\r\n htmlFor={String(name)}\r\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 cursor-pointer\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n {description && (\r\n <p className=\"text-sm text-muted-foreground\">{description}</p>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n />\r\n <FieldError>\r\n {(form.formState.errors as any)[name]?.message as React.ReactNode}\r\n </FieldError>\r\n </ShadField>\r\n );\r\n}) as <TFieldValues extends FieldValues>(\r\n props: CheckboxFieldProps<TFieldValues>\r\n) => ReactNode;\r\n\r\nexport default CheckboxField;\r\n","'use client';\r\n\r\nimport { memo, useState, type ReactNode } from 'react';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport Field from './field';\r\nimport { ChevronDownIcon } from 'lucide-react';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder components\r\nconst Button = ({ children, className = '', ...props }: React.ComponentProps<'button'>) => (\r\n <button\r\n className={`inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium h-10 px-4 py-2 border ${className}`}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n);\r\n\r\ntype DateFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n placeholder?: string;\r\n};\r\n\r\nconst DateField = memo(function DateField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n placeholder = 'Select date',\r\n}: DateFieldProps<TFieldValues>) {\r\n const [open, setOpen] = useState(false);\r\n const { isEditing } = useFormCtx<TFieldValues>();\r\n\r\n return (\r\n <Field name={name} label={label}>\r\n {(field) =>\r\n !isEditing ? (\r\n <Button\r\n type=\"button\"\r\n id={String(name)}\r\n className=\"w-full justify-between font-normal bg-background/50 border-border/50\"\r\n disabled\r\n >\r\n {field.value ? new Date(field.value).toLocaleDateString() : placeholder}\r\n <ChevronDownIcon className=\"h-4 w-4 text-muted-foreground\" />\r\n </Button>\r\n ) : (\r\n <input\r\n type=\"date\"\r\n id={String(name)}\r\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\r\n value={field.value ? new Date(field.value).toISOString().split('T')[0] : ''}\r\n onChange={(e) => field.onChange(e.target.value ? new Date(e.target.value) : null)}\r\n />\r\n )\r\n }\r\n </Field>\r\n );\r\n}) as <TFieldValues extends FieldValues>(\r\n props: DateFieldProps<TFieldValues>\r\n) => ReactNode;\r\n\r\nexport default DateField;\r\n","'use client';\r\n\r\nimport { memo, type ReactNode } from 'react';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport Field from './field';\r\nimport { Upload } from 'lucide-react';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder components\r\nconst Input = ({ className = '', ...props }: React.ComponentProps<'input'>) => (\r\n <input\r\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ${className}`}\r\n {...props}\r\n />\r\n);\r\nconst InputGroup = ({ children }: { children: React.ReactNode }) => (\r\n <div className=\"relative flex items-center\">{children}</div>\r\n);\r\nconst InputGroupAddon = ({ children }: { children: React.ReactNode }) => (\r\n <div className=\"absolute left-3 flex items-center\">\r\n {children}\r\n </div>\r\n);\r\nconst InputGroupInput = (props: React.ComponentProps<'input'>) => <Input className=\"pl-10\" {...props} />;\r\n\r\ntype FileFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n accept?: string;\r\n multiple?: boolean;\r\n};\r\n\r\nconst FileField = memo(function FileField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n accept,\r\n multiple,\r\n}: FileFieldProps<TFieldValues>) {\r\n const { isEditing } = useFormCtx<TFieldValues>();\r\n\r\n return (\r\n <Field name={name} label={label}>\r\n {(field) => {\r\n const files = field.value as FileList | null | undefined;\r\n const filename = files && files.length ? files[0].name : '';\r\n\r\n if (!isEditing) {\r\n return (\r\n <InputGroup>\r\n <Input\r\n id={`${String(name)}_display`}\r\n type=\"text\"\r\n value={filename}\r\n placeholder={accept ? `Accepts ${accept}` : 'No file selected'}\r\n disabled\r\n className=\"bg-background/50 opacity-80 pl-10\"\r\n />\r\n <InputGroupAddon>\r\n <Upload className=\"text-muted-foreground h-4 w-4\" />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n );\r\n }\r\n\r\n return (\r\n <InputGroup>\r\n <InputGroupInput\r\n id={String(name)}\r\n type=\"file\"\r\n accept={accept}\r\n multiple={multiple}\r\n onChange={(e) => field.onChange(e.target.files)}\r\n onBlur={field.onBlur}\r\n name={field.name}\r\n ref={field.ref}\r\n />\r\n <InputGroupAddon>\r\n <Upload className=\"text-muted-foreground h-4 w-4\" />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n );\r\n }}\r\n </Field>\r\n );\r\n}) as <TFieldValues extends FieldValues>(\r\n props: FileFieldProps<TFieldValues>\r\n) => ReactNode;\r\n\r\nexport default FileField;\r\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","'use client';\r\n\r\nimport { memo, useState, type ReactNode } from 'react';\r\nimport type { FieldValues, Path } from 'react-hook-form';\r\nimport Field from './field';\r\nimport { Upload } from 'lucide-react';\r\nimport { useFormCtx } from './use-form-ctx';\r\nimport { cn } from '../../lib/utils';\r\n\r\n// Placeholder components\r\nconst Avatar = ({ className, children }: { className?: string; children: React.ReactNode }) => (\r\n <div className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)}>\r\n {children}\r\n </div>\r\n);\r\nconst AvatarImage = ({ src, alt }: { src?: string; alt?: string }) => (\r\n src ? <img src={src} alt={alt} className=\"aspect-square h-full w-full\" /> : null\r\n);\r\nconst AvatarFallback = ({ children }: { children: React.ReactNode }) => (\r\n <div className=\"flex h-full w-full items-center justify-center rounded-full bg-muted\">\r\n {children}\r\n </div>\r\n);\r\nconst Label = ({ htmlFor, children, className }: any) => (\r\n <label htmlFor={htmlFor} className={className}>{children}</label>\r\n);\r\nconst Input = (props: React.ComponentProps<'input'>) => <input {...props} />;\r\nconst Button = ({ children, ...props }: React.ComponentProps<'button'>) => (\r\n <button className=\"px-3 py-1 text-sm rounded hover:bg-accent\" {...props}>\r\n {children}\r\n </button>\r\n);\r\n\r\ntype ProfilePictureFieldProps<TFieldValues extends FieldValues> = {\r\n name: Path<TFieldValues>;\r\n label?: string;\r\n className?: string;\r\n avatarClassName?: string;\r\n fallback?: string;\r\n};\r\n\r\nconst ProfilePictureField = memo(function ProfilePictureField<TFieldValues extends FieldValues>({\r\n name,\r\n label,\r\n className,\r\n avatarClassName,\r\n fallback = 'User',\r\n}: ProfilePictureFieldProps<TFieldValues>) {\r\n const { isEditing } = useFormCtx<TFieldValues>();\r\n const [preview, setPreview] = useState<string | null>(null);\r\n\r\n return (\r\n <Field name={name} label={label}>\r\n {(field) => {\r\n const currentValue = field.value;\r\n const displayUrl = preview || (typeof currentValue === 'string' ? currentValue : null);\r\n\r\n return (\r\n <div className={cn('flex flex-col items-center gap-4', className)}>\r\n <Avatar className={cn('h-24 w-24', avatarClassName)}>\r\n <AvatarImage src={displayUrl || ''} alt=\"Profile picture\" />\r\n <AvatarFallback>{fallback}</AvatarFallback>\r\n </Avatar>\r\n {isEditing && (\r\n <div className=\"flex flex-col items-center gap-2\">\r\n <Label\r\n htmlFor={String(name)}\r\n className=\"cursor-pointer inline-flex items-center gap-2 rounded-md border border-input bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground\"\r\n >\r\n <Upload className=\"h-4 w-4\" />\r\n Upload Picture\r\n </Label>\r\n <Input\r\n id={String(name)}\r\n type=\"file\"\r\n accept=\"image/*\"\r\n className=\"hidden\"\r\n onChange={(e) => {\r\n const file = e.target.files?.[0];\r\n if (file) {\r\n field.onChange(file);\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n setPreview(reader.result as string);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }}\r\n onBlur={field.onBlur}\r\n name={field.name}\r\n ref={field.ref}\r\n />\r\n {displayUrl && (\r\n <Button\r\n type=\"button\"\r\n onClick={() => {\r\n field.onChange(null);\r\n setPreview(null);\r\n }}\r\n >\r\n Remove\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }}\r\n </Field>\r\n );\r\n}) as <TFieldValues extends FieldValues>(\r\n props: ProfilePictureFieldProps<TFieldValues>\r\n) => ReactNode;\r\n\r\nexport default ProfilePictureField;\r\n","'use client';\r\n\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder Button component\r\nconst Button = ({ children, ...props }: React.ComponentProps<'button'>) => (\r\n <button\r\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n);\r\n\r\nfunction Submit({ children, ...props }: React.ComponentProps<typeof Button>) {\r\n const form = useFormCtx();\r\n const isPending = form.isPending || form.formState.isSubmitting;\r\n const { isEditing } = form;\r\n\r\n if (!isEditing) return null;\r\n\r\n return (\r\n <Button type=\"submit\" disabled={isPending || props.disabled} {...props}>\r\n {isPending ? 'Submitting...' : children}\r\n </Button>\r\n );\r\n}\r\n\r\nexport default Submit;\r\n","'use client';\r\n\r\nimport { useContext } from 'react';\r\nimport { Pencil } from 'lucide-react';\r\nimport { FormContext, DEFAULT_FORM_KEY, formRegistry, type FormContextValue } from './context';\r\n\r\n// Placeholder Button\r\nconst Button = ({ children, ...props }: React.ComponentProps<'button'>) => (\r\n <button\r\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n);\r\n\r\ntype EditButtonProps = React.ComponentProps<typeof Button> & { formId?: string };\r\n\r\nfunction EditButton({ children, formId, ...props }: EditButtonProps) {\r\n const ctx = useContext(FormContext) as FormContextValue<any> | null;\r\n\r\n // If inside a Form, prefer using the form context\r\n if (ctx) {\r\n const { isEditing, setIsEditing } = ctx;\r\n if (isEditing) return null;\r\n return (\r\n <Button type=\"button\" onClick={() => setIsEditing?.(true)} {...props}>\r\n {children || (\r\n <>\r\n <Pencil className=\"h-4 w-4 mr-2\" />\r\n Edit Profile\r\n </>\r\n )}\r\n </Button>\r\n );\r\n }\r\n\r\n // Not inside a Form: render a button even if the form hasn't registered yet.\r\n // Resolve the registry at click time so transient registration/unregistration\r\n // doesn't make the button disappear. If no setter exists yet, render the\r\n // button disabled to avoid a broken UX.\r\n // Always render the button enabled so the user can click it immediately.\r\n // If the form hasn't registered yet, retry the registry lookup for a short\r\n // period (2 seconds) and call the setter once it appears. This handles\r\n // cases where the Edit button is rendered before the client form mounts.\r\n const handleClick = () => {\r\n const key = formId ?? DEFAULT_FORM_KEY;\r\n\r\n // Try immediate call first\r\n const immediate = formRegistry.get(key);\r\n if (immediate) return immediate(true);\r\n\r\n // Otherwise, poll for a short time\r\n let attempts = 0;\r\n const maxAttempts = 20; // ~2s at 100ms intervals\r\n const interval = setInterval(() => {\r\n attempts += 1;\r\n const setter = formRegistry.get(key);\r\n if (setter) {\r\n setter(true);\r\n clearInterval(interval);\r\n } else if (attempts >= maxAttempts) {\r\n clearInterval(interval);\r\n // If desired, we could surface a UI notification here. For now,\r\n // silently fail so we don't introduce a dependency on the toast lib.\r\n // console.warn(`Form with id ${key} did not register in time.`);\r\n }\r\n }, 100);\r\n };\r\n\r\n return (\r\n <Button type=\"button\" onClick={handleClick} {...props}>\r\n {children || (\r\n <>\r\n <Pencil className=\"h-4 w-4 mr-2\" />\r\n Edit Profile\r\n </>\r\n )}\r\n </Button>\r\n );\r\n}\r\n\r\nexport default EditButton;\r\n","'use client';\r\n\r\nimport { X } from 'lucide-react';\r\nimport { useFormCtx } from './use-form-ctx';\r\n\r\n// Placeholder Button\r\nconst Button = ({ children, className = '', ...props }: React.ComponentProps<'button'>) => (\r\n <button\r\n className={`inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2 ${className}`}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n);\r\n\r\nfunction CancelButton({ children, ...props }: React.ComponentProps<typeof Button>) {\r\n const { isEditing, setIsEditing, reset } = useFormCtx();\r\n\r\n if (!isEditing) return null;\r\n\r\n return (\r\n <Button\r\n type=\"button\"\r\n onClick={() => {\r\n reset();\r\n setIsEditing?.(false);\r\n }}\r\n {...props}\r\n >\r\n {children || (\r\n <>\r\n <X className=\"h-4 w-4 mr-2\" />\r\n Cancel\r\n </>\r\n )}\r\n </Button>\r\n );\r\n}\r\n\r\nexport default CancelButton;\r\n","type LinkFieldProps = {\r\n label?: string;\r\n link: string;\r\n LinkComponent?: React.ComponentType<{ href: string; className?: string; children: React.ReactNode }>;\r\n};\r\n\r\nfunction LinkField({ label, link, LinkComponent }: LinkFieldProps) {\r\n // Use provided Link component or fallback to anchor tag\r\n const LinkTag = LinkComponent || 'a';\r\n const linkProps = LinkComponent ? { href: link } : { href: link };\r\n\r\n return (\r\n <LinkTag {...linkProps} className=\"text-sm text-primary hover:underline\">\r\n {label}\r\n </LinkTag>\r\n );\r\n}\r\n\r\nexport default LinkField;\r\n","// Placeholder FieldGroup component\r\nconst FieldGroup = ({ children }: { children: React.ReactNode }) => (\r\n <div className=\"space-y-4\">{children}</div>\r\n);\r\n\r\nexport default FieldGroup;\r\n","import Root from \"./root\";\r\nimport Field from \"./field\";\r\nimport InputField from \"./input-field\";\r\nimport PasswordField from \"./password-field\";\r\nimport TextareaField from \"./textarea-field\";\r\nimport SelectField from \"./select-field\";\r\nimport CheckboxField from \"./checkbox-field\";\r\nimport DateField from \"./date-field\";\r\nimport FileField from \"./file-field\";\r\nimport ProfilePictureField from \"./profile-picture-field\";\r\nimport Submit from \"./submit\";\r\nimport EditButton from \"./edit-button\";\r\nimport CancelButton from \"./cancel-button\";\r\nimport LinkField from \"./link-field\";\r\nimport FieldGroup from \"./field-group\";\r\n\r\nconst Form = Object.assign(Root, {\r\n Field,\r\n InputField,\r\n PasswordField,\r\n TextareaField,\r\n SelectField,\r\n CheckboxField,\r\n DateField,\r\n FileField,\r\n ProfilePictureField,\r\n Submit,\r\n EditButton,\r\n CancelButton,\r\n Group: FieldGroup,\r\n LinkField,\r\n});\r\n\r\nexport default Form;\r\n\r\n// Export individual components for tree-shaking\r\nexport {\r\n Root,\r\n Field,\r\n InputField,\r\n PasswordField,\r\n TextareaField,\r\n SelectField,\r\n CheckboxField,\r\n DateField,\r\n FileField,\r\n ProfilePictureField,\r\n Submit,\r\n EditButton,\r\n CancelButton,\r\n FieldGroup,\r\n LinkField,\r\n};\r\n","'use client';\r\n\r\nimport { createContext, useContext } from 'react';\r\nimport type { Table as ReactTable } from '@tanstack/react-table';\r\n\r\nexport type ViewMode = 'table' | 'grid';\r\n\r\nexport interface FilterOption {\r\n id: string;\r\n label: string;\r\n options: { value: string; label: string }[];\r\n placeholder?: string;\r\n multiSelect?: boolean;\r\n}\r\n\r\nexport interface DataTableContextValue<TData = any> {\r\n table: ReactTable<TData>;\r\n viewMode: ViewMode;\r\n setViewMode: (mode: ViewMode) => void;\r\n filters: FilterOption[];\r\n activeFilters: Record<string, string | string[]>;\r\n setActiveFilters: React.Dispatch<React.SetStateAction<Record<string, string | string[]>>>;\r\n}\r\n\r\nexport const DataTableContext = createContext<DataTableContextValue | null>(null);\r\n\r\nexport function useDataTable<TData = any>() {\r\n const context = useContext(DataTableContext);\r\n if (!context) {\r\n throw new Error('DataTable components must be used within DataTable.Root');\r\n }\r\n return context as DataTableContextValue<TData>;\r\n}\r\n","'use client';\r\n\r\nimport { useState, useMemo } from 'react';\r\nimport {\r\n useReactTable,\r\n getCoreRowModel,\r\n getFilteredRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n type ColumnDef,\r\n type SortingState,\r\n type ColumnFiltersState,\r\n type VisibilityState,\r\n} from '@tanstack/react-table';\r\nimport { DataTableContext, type ViewMode, type FilterOption } from './context';\r\n\r\ninterface RootProps<TData, TValue> {\r\n columns: ColumnDef<TData, TValue>[];\r\n data: TData[];\r\n filters?: FilterOption[];\r\n defaultViewMode?: ViewMode;\r\n defaultPageSize?: number;\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction Root<TData, TValue>({\r\n columns,\r\n data,\r\n filters = [],\r\n defaultViewMode = 'table',\r\n defaultPageSize = 10,\r\n children,\r\n}: RootProps<TData, TValue>) {\r\n const [viewMode, setViewMode] = useState<ViewMode>(defaultViewMode);\r\n const [sorting, setSorting] = useState<SortingState>([]);\r\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\r\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\r\n const [globalFilter, setGlobalFilter] = useState('');\r\n const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: defaultPageSize });\r\n const [activeFilters, setActiveFilters] = useState<Record<string, string | string[]>>({});\r\n\r\n // Apply custom filters to data\r\n const filteredData = useMemo(() => {\r\n if (Object.keys(activeFilters).length === 0) return data;\r\n\r\n return data.filter((row: any) => {\r\n return Object.entries(activeFilters).every(([filterId, filterValue]) => {\r\n if (!filterValue || (Array.isArray(filterValue) && filterValue.length === 0)) {\r\n return true;\r\n }\r\n\r\n const rowValue = row[filterId];\r\n if (Array.isArray(filterValue)) {\r\n return filterValue.includes(String(rowValue));\r\n }\r\n return String(rowValue) === String(filterValue);\r\n });\r\n });\r\n }, [data, activeFilters]);\r\n\r\n const table = useReactTable({\r\n data: filteredData,\r\n columns,\r\n state: {\r\n sorting,\r\n columnFilters,\r\n columnVisibility,\r\n globalFilter,\r\n pagination,\r\n },\r\n onSortingChange: setSorting,\r\n onColumnFiltersChange: setColumnFilters,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n onGlobalFilterChange: setGlobalFilter,\r\n onPaginationChange: setPagination,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n });\r\n\r\n return (\r\n <DataTableContext.Provider\r\n value={{\r\n table,\r\n viewMode,\r\n setViewMode,\r\n filters,\r\n activeFilters,\r\n setActiveFilters,\r\n }}\r\n >\r\n <div className=\"space-y-4\">{children}</div>\r\n </DataTableContext.Provider>\r\n );\r\n}\r\n\r\nexport default Root;\r\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground 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 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 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-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none 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\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-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 size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","'use client';\r\n\r\nimport { Input } from '../ui/input';\r\nimport { Button } from '../ui/button';\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\r\nimport { LayoutGrid, Table as TableIcon, SlidersHorizontal, Eye } from 'lucide-react';\r\nimport { useDataTable } from './context';\r\nimport { Checkbox } from '../ui/checkbox';\r\n\r\nexport function Toolbar() {\r\n const { table, viewMode, setViewMode, filters, activeFilters, setActiveFilters } = useDataTable();\r\n\r\n const handleFilterChange = (filterId: string, value: string) => {\r\n setActiveFilters((prev) => ({\r\n ...prev,\r\n [filterId]: value === 'all' ? '' : value,\r\n }));\r\n };\r\n\r\n const handleMultiFilterToggle = (filterId: string, value: string) => {\r\n setActiveFilters((prev) => {\r\n const current = prev[filterId] as string[] | undefined;\r\n if (!current || !Array.isArray(current)) {\r\n return { ...prev, [filterId]: [value] };\r\n }\r\n const newValues = current.includes(value)\r\n ? current.filter((v) => v !== value)\r\n : [...current, value];\r\n return { ...prev, [filterId]: newValues };\r\n });\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\r\n {/* Search */}\r\n <div className=\"flex-1 max-w-sm\">\r\n <Input\r\n placeholder=\"Search...\"\r\n value={table.getState().globalFilter ?? ''}\r\n onChange={(e) => table.setGlobalFilter(e.target.value)}\r\n className=\"w-full\"\r\n />\r\n </div>\r\n\r\n {/* Controls */}\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n {/* Filters */}\r\n {filters.length > 0 && (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <SlidersHorizontal className=\"h-4 w-4 mr-2\" />\r\n Filters\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-80\">\r\n <div className=\"space-y-4\">\r\n <h4 className=\"font-medium text-sm\">Filters</h4>\r\n {filters.map((filter) => (\r\n <div key={filter.id} className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{filter.label}</label>\r\n {filter.multiSelect ? (\r\n <div className=\"space-y-2\">\r\n {filter.options.map((option) => (\r\n <div key={option.value} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n id={`${filter.id}-${option.value}`}\r\n checked={\r\n Array.isArray(activeFilters[filter.id]) &&\r\n (activeFilters[filter.id] as string[]).includes(option.value)\r\n }\r\n onCheckedChange={() => handleMultiFilterToggle(filter.id, option.value)}\r\n />\r\n <label\r\n htmlFor={`${filter.id}-${option.value}`}\r\n className=\"text-sm cursor-pointer\"\r\n >\r\n {option.label}\r\n </label>\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <Select\r\n value={(activeFilters[filter.id] as string) || 'all'}\r\n onValueChange={(value: string) => handleFilterChange(filter.id, value)}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder={filter.placeholder || 'Select...'} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">All</SelectItem>\r\n {filter.options.map((option) => (\r\n <SelectItem key={option.value} value={option.value}>\r\n {option.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n\r\n {/* Column Visibility */}\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <Eye className=\"h-4 w-4 mr-2\" />\r\n Columns\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-56\">\r\n <div className=\"space-y-2\">\r\n <h4 className=\"font-medium text-sm\">Toggle Columns</h4>\r\n {table\r\n .getAllColumns()\r\n .filter((column) => column.getCanHide())\r\n .map((column) => (\r\n <div key={column.id} className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n id={column.id}\r\n checked={column.getIsVisible()}\r\n onCheckedChange={(value: boolean) => column.toggleVisibility(!!value)}\r\n />\r\n <label htmlFor={column.id} className=\"text-sm cursor-pointer\">\r\n {column.id}\r\n </label>\r\n </div>\r\n ))}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n\r\n {/* View Mode Toggle */}\r\n <div className=\"flex items-center border rounded-md\">\r\n <Button\r\n variant={viewMode === 'table' ? 'default' : 'ghost'}\r\n size=\"sm\"\r\n onClick={() => setViewMode('table')}\r\n className=\"rounded-r-none\"\r\n >\r\n <TableIcon className=\"h-4 w-4\" />\r\n </Button>\r\n <Button\r\n variant={viewMode === 'grid' ? 'default' : 'ghost'}\r\n size=\"sm\"\r\n onClick={() => setViewMode('grid')}\r\n className=\"rounded-l-none\"\r\n >\r\n <LayoutGrid className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n\r\n {/* Rows per page */}\r\n <div className=\"flex items-center gap-2\">\r\n <label className=\"text-sm text-muted-foreground\">Rows</label>\r\n <Select\r\n value={String(table.getState().pagination.pageSize)}\r\n onValueChange={(value: string) => table.setPageSize(Number(value))}\r\n >\r\n <SelectTrigger className=\"w-20\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {[10, 20, 30, 40, 50].map((size) => (\r\n <SelectItem key={size} value={String(size)}>\r\n {size}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Toolbar;\r\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","'use client';\r\n\r\nimport { flexRender } from '@tanstack/react-table';\r\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../ui/table';\r\nimport { ArrowUpDown, ArrowUp, ArrowDown } from 'lucide-react';\r\nimport { useDataTable } from './context';\r\n\r\nexport function TableView() {\r\n const { table } = useDataTable();\r\n\r\n return (\r\n <div className=\"overflow-hidden rounded-md border\">\r\n <Table>\r\n <TableHeader>\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <TableRow key={headerGroup.id}>\r\n {headerGroup.headers.map((header) => {\r\n const canSort = header.column.getCanSort();\r\n const sortState = header.column.getIsSorted();\r\n return (\r\n <TableHead key={header.id}>\r\n {header.isPlaceholder ? null : (\r\n <button\r\n className=\"flex items-center gap-2\"\r\n onClick={() => canSort && header.column.toggleSorting()}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {canSort && (\r\n <span className=\"ml-2\">\r\n {sortState === 'asc' ? (\r\n <ArrowUp className=\"h-3 w-3\" />\r\n ) : sortState === 'desc' ? (\r\n <ArrowDown className=\"h-3 w-3\" />\r\n ) : (\r\n <ArrowUpDown className=\"h-3 w-3 opacity-50\" />\r\n )}\r\n </span>\r\n )}\r\n </button>\r\n )}\r\n </TableHead>\r\n );\r\n })}\r\n </TableRow>\r\n ))}\r\n </TableHeader>\r\n <TableBody>\r\n {table.getRowModel().rows?.length ? (\r\n table.getRowModel().rows.map((row) => (\r\n <TableRow key={row.id} data-state={row.getIsSelected() && 'selected'}>\r\n {row.getVisibleCells().map((cell) => (\r\n <TableCell key={cell.id}>\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))\r\n ) : (\r\n <TableRow>\r\n <TableCell colSpan={table.getAllColumns().length} className=\"h-24 text-center\">\r\n No results.\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TableView;\r\n","'use client';\r\n\r\nimport { useDataTable } from './context';\r\n\r\ninterface GridViewProps<TData = any> {\r\n renderCard?: (item: TData, index: number) => React.ReactNode;\r\n columns?: number;\r\n gap?: number;\r\n}\r\n\r\nexport function GridView<TData = any>({ renderCard, columns = 3, gap = 16 }: GridViewProps<TData>) {\r\n const { table } = useDataTable<TData>();\r\n const rows = table.getRowModel().rows;\r\n\r\n if (!rows.length) {\r\n return (\r\n <div className=\"flex items-center justify-center h-64 text-muted-foreground\">\r\n No results.\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className=\"grid\"\r\n style={{\r\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\r\n gap: `${gap}px`,\r\n }}\r\n >\r\n {rows.map((row, index) => {\r\n const item = row.original;\r\n return (\r\n <div key={row.id} className=\"rounded-lg border bg-card p-4 shadow-sm\">\r\n {renderCard ? renderCard(item, index) : <DefaultCard item={item} />}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n\r\nfunction DefaultCard({ item }: { item: any }) {\r\n return (\r\n <div className=\"space-y-2\">\r\n {Object.entries(item).map(([key, value]) => (\r\n <div key={key}>\r\n <span className=\"text-sm font-medium\">{key}: </span>\r\n <span className=\"text-sm text-muted-foreground\">{String(value)}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default GridView;\r\n","'use client';\r\n\r\nimport { useDataTable } from './context';\r\nimport TableView from './table-view';\r\nimport GridView from './grid-view';\r\n\r\ninterface ContentProps {\r\n renderCard?: (item: any, index: number) => React.ReactNode;\r\n gridColumns?: number;\r\n gridGap?: number;\r\n}\r\n\r\nexport function Content({ renderCard, gridColumns, gridGap }: ContentProps) {\r\n const { viewMode } = useDataTable();\r\n\r\n if (viewMode === 'grid') {\r\n return <GridView renderCard={renderCard} columns={gridColumns} gap={gridGap} />;\r\n }\r\n\r\n return <TableView />;\r\n}\r\n\r\nexport default Content;\r\n","'use client';\r\n\r\nimport { Button } from '../ui/button';\r\nimport { useDataTable } from './context';\r\n\r\nexport function Pagination() {\r\n const { table } = useDataTable();\r\n\r\n return (\r\n <div className=\"flex items-center justify-between py-4\">\r\n <div className=\"text-sm text-muted-foreground\">\r\n Showing{' '}\r\n {table.getState().pagination.pageIndex * table.getState().pagination.pageSize + 1} -{' '}\r\n {Math.min(\r\n (table.getState().pagination.pageIndex + 1) * table.getState().pagination.pageSize,\r\n table.getFilteredRowModel().rows.length\r\n )}{' '}\r\n of {table.getFilteredRowModel().rows.length}\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => table.previousPage()}\r\n disabled={!table.getCanPreviousPage()}\r\n >\r\n Prev\r\n </Button>\r\n <div className=\"px-3 text-sm\">\r\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\r\n </div>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => table.nextPage()}\r\n disabled={!table.getCanNextPage()}\r\n >\r\n Next\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Pagination;\r\n","import Root from './root';\r\nimport Toolbar from './toolbar';\r\nimport Content from './content';\r\nimport TableView from './table-view';\r\nimport GridView from './grid-view';\r\nimport Pagination from './pagination';\r\n\r\n// Export compound component\r\nconst DataTable = Object.assign(Root, {\r\n Toolbar,\r\n Content,\r\n TableView,\r\n GridView,\r\n Pagination,\r\n});\r\n\r\nexport default DataTable;\r\n\r\n// Export individual components for tree-shaking\r\nexport { Root, Toolbar, Content, TableView, GridView, Pagination };\r\n\r\n// Export types\r\nexport type { ViewMode, FilterOption } from './context';\r\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@saptanshuwanjari/react-component-library",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A modern React component library with DataTable and Form components",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"dev": "tsup --watch",
|
|
14
|
+
"build": "tsup",
|
|
15
|
+
"lint": "eslint src --ext .ts,.tsx"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"react",
|
|
19
|
+
"components",
|
|
20
|
+
"datatable",
|
|
21
|
+
"form",
|
|
22
|
+
"ui"
|
|
23
|
+
],
|
|
24
|
+
"author": "",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"react": "^19.0.0",
|
|
28
|
+
"react-dom": "^19.0.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/react": "^19.0.0",
|
|
32
|
+
"@types/react-dom": "^19.0.0",
|
|
33
|
+
"autoprefixer": "^10.4.0",
|
|
34
|
+
"eslint": "^8.0.0",
|
|
35
|
+
"postcss": "^8.4.0",
|
|
36
|
+
"tailwindcss": "^3.4.0",
|
|
37
|
+
"tsup": "^8.0.0",
|
|
38
|
+
"typescript": "^5.3.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@hookform/resolvers": "^3.3.0",
|
|
42
|
+
"@radix-ui/react-avatar": "^1.0.0",
|
|
43
|
+
"@radix-ui/react-checkbox": "^1.0.0",
|
|
44
|
+
"@radix-ui/react-label": "^2.0.0",
|
|
45
|
+
"@radix-ui/react-popover": "^1.0.0",
|
|
46
|
+
"@radix-ui/react-select": "^2.0.0",
|
|
47
|
+
"@tanstack/react-table": "^8.21.3",
|
|
48
|
+
"class-variance-authority": "^0.7.0",
|
|
49
|
+
"clsx": "^2.1.0",
|
|
50
|
+
"date-fns": "^3.0.0",
|
|
51
|
+
"lucide-react": "^0.303.0",
|
|
52
|
+
"react-day-picker": "^9.0.0",
|
|
53
|
+
"react-hook-form": "^7.49.0",
|
|
54
|
+
"tailwind-merge": "^2.2.0",
|
|
55
|
+
"zod": "^3.22.0"
|
|
56
|
+
}
|
|
57
|
+
}
|