Spaces:
Running
Running
THE Whole Website is done just testing required to be made
Browse files- components.json +22 -0
- components/magicui/interactive-hover-button.tsx +35 -0
- components/ui/button.tsx +54 -0
- components/ui/checkbox.tsx +23 -0
- components/ui/color-picker.tsx +22 -0
- components/ui/input.tsx +24 -0
- components/ui/label.tsx +20 -0
- components/ui/select.tsx +25 -0
- components/ui/slider.tsx +38 -0
- components/ui/textarea.tsx +23 -0
- lib/utils.ts +6 -0
- public/blazzer.png +3 -0
- public/sukajan.png +3 -0
components.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"$schema": "https://ui.shadcn.com/schema.json",
|
| 3 |
+
"style": "new-york",
|
| 4 |
+
"rsc": true,
|
| 5 |
+
"tsx": true,
|
| 6 |
+
"tailwind": {
|
| 7 |
+
"config": "",
|
| 8 |
+
"css": "app/globals.css",
|
| 9 |
+
"baseColor": "neutral",
|
| 10 |
+
"cssVariables": true,
|
| 11 |
+
"prefix": ""
|
| 12 |
+
},
|
| 13 |
+
"iconLibrary": "lucide",
|
| 14 |
+
"aliases": {
|
| 15 |
+
"components": "@/components",
|
| 16 |
+
"utils": "@/lib/utils",
|
| 17 |
+
"ui": "@/components/ui",
|
| 18 |
+
"lib": "@/lib",
|
| 19 |
+
"hooks": "@/hooks"
|
| 20 |
+
},
|
| 21 |
+
"registries": {}
|
| 22 |
+
}
|
components/magicui/interactive-hover-button.tsx
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React from "react";
|
| 2 |
+
import { ArrowRight } from "lucide-react";
|
| 3 |
+
import { cn } from "@/lib/utils";
|
| 4 |
+
|
| 5 |
+
interface InteractiveHoverButtonProps
|
| 6 |
+
extends React.ButtonHTMLAttributes<HTMLButtonElement> {}
|
| 7 |
+
|
| 8 |
+
export const InteractiveHoverButton = React.forwardRef<
|
| 9 |
+
HTMLButtonElement,
|
| 10 |
+
InteractiveHoverButtonProps
|
| 11 |
+
>(({ children, className, ...props }, ref) => {
|
| 12 |
+
return (
|
| 13 |
+
<button
|
| 14 |
+
ref={ref}
|
| 15 |
+
className={cn(
|
| 16 |
+
"group relative w-auto cursor-pointer overflow-hidden rounded-full border bg-background p-2 px-6 text-center font-semibold",
|
| 17 |
+
className,
|
| 18 |
+
)}
|
| 19 |
+
{...props}
|
| 20 |
+
>
|
| 21 |
+
<div className="flex items-center gap-2">
|
| 22 |
+
<div className="h-2 w-2 rounded-full bg-primary transition-all duration-300 group-hover:scale-[100.8]"></div>
|
| 23 |
+
<span className="inline-block transition-all duration-300 group-hover:translate-x-12 group-hover:opacity-0">
|
| 24 |
+
{children}
|
| 25 |
+
</span>
|
| 26 |
+
</div>
|
| 27 |
+
<div className="absolute top-0 z-10 flex h-full w-full translate-x-12 items-center justify-center gap-2 text-primary-foreground opacity-0 transition-all duration-300 group-hover:-translate-x-5 group-hover:opacity-100">
|
| 28 |
+
<span>{children}</span>
|
| 29 |
+
<ArrowRight />
|
| 30 |
+
</div>
|
| 31 |
+
</button>
|
| 32 |
+
);
|
| 33 |
+
});
|
| 34 |
+
|
| 35 |
+
InteractiveHoverButton.displayName = "InteractiveHoverButton";
|
components/ui/button.tsx
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use client";
|
| 2 |
+
|
| 3 |
+
import * as React from "react";
|
| 4 |
+
import { cva, type VariantProps } from "class-variance-authority";
|
| 5 |
+
import { cn } from "../../lib/utils";
|
| 6 |
+
|
| 7 |
+
const buttonVariants = cva(
|
| 8 |
+
"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",
|
| 9 |
+
{
|
| 10 |
+
variants: {
|
| 11 |
+
variant: {
|
| 12 |
+
default:
|
| 13 |
+
"bg-primary text-primary-foreground hover:bg-primary/90",
|
| 14 |
+
destructive:
|
| 15 |
+
"bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
| 16 |
+
outline:
|
| 17 |
+
"border border-input bg-background hover:bg-accent hover:text-accent-foreground",
|
| 18 |
+
secondary:
|
| 19 |
+
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
| 20 |
+
ghost: "hover:bg-accent hover:text-accent-foreground",
|
| 21 |
+
link: "text-primary underline-offset-4 hover:underline",
|
| 22 |
+
},
|
| 23 |
+
size: {
|
| 24 |
+
default: "h-9 px-4 py-2",
|
| 25 |
+
sm: "h-8 px-3",
|
| 26 |
+
lg: "h-10 px-6",
|
| 27 |
+
icon: "h-9 w-9",
|
| 28 |
+
},
|
| 29 |
+
},
|
| 30 |
+
defaultVariants: {
|
| 31 |
+
variant: "default",
|
| 32 |
+
size: "default",
|
| 33 |
+
},
|
| 34 |
+
}
|
| 35 |
+
);
|
| 36 |
+
|
| 37 |
+
export interface ButtonProps
|
| 38 |
+
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
| 39 |
+
VariantProps<typeof buttonVariants> {}
|
| 40 |
+
|
| 41 |
+
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
| 42 |
+
({ className, variant, size, ...props }, ref) => {
|
| 43 |
+
return (
|
| 44 |
+
<button
|
| 45 |
+
className={cn(buttonVariants({ variant, size }), className)}
|
| 46 |
+
ref={ref}
|
| 47 |
+
{...props}
|
| 48 |
+
/>
|
| 49 |
+
);
|
| 50 |
+
}
|
| 51 |
+
);
|
| 52 |
+
Button.displayName = "Button";
|
| 53 |
+
|
| 54 |
+
export { Button, buttonVariants };
|
components/ui/checkbox.tsx
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from "react";
|
| 2 |
+
import { cn } from "../../lib/utils";
|
| 3 |
+
|
| 4 |
+
export interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {}
|
| 5 |
+
|
| 6 |
+
export const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
| 7 |
+
({ className, ...props }, ref) => {
|
| 8 |
+
return (
|
| 9 |
+
<input
|
| 10 |
+
ref={ref}
|
| 11 |
+
type="checkbox"
|
| 12 |
+
className={cn(
|
| 13 |
+
"h-4 w-4 rounded border border-input bg-background cursor-pointer align-middle",
|
| 14 |
+
className
|
| 15 |
+
)}
|
| 16 |
+
style={{ accentColor: "hsl(var(--primary))" }}
|
| 17 |
+
{...props}
|
| 18 |
+
/>
|
| 19 |
+
);
|
| 20 |
+
}
|
| 21 |
+
);
|
| 22 |
+
Checkbox.displayName = "Checkbox";
|
| 23 |
+
|
components/ui/color-picker.tsx
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from "react";
|
| 2 |
+
import { cn } from "../../lib/utils";
|
| 3 |
+
|
| 4 |
+
export interface ColorPickerProps extends React.InputHTMLAttributes<HTMLInputElement> {}
|
| 5 |
+
|
| 6 |
+
export const ColorPicker = React.forwardRef<HTMLInputElement, ColorPickerProps>(
|
| 7 |
+
({ className, ...props }, ref) => {
|
| 8 |
+
return (
|
| 9 |
+
<input
|
| 10 |
+
ref={ref}
|
| 11 |
+
type="color"
|
| 12 |
+
className={cn(
|
| 13 |
+
"h-9 w-full rounded-md border border-input bg-background p-1 shadow-sm cursor-pointer",
|
| 14 |
+
className
|
| 15 |
+
)}
|
| 16 |
+
{...props}
|
| 17 |
+
/>
|
| 18 |
+
);
|
| 19 |
+
}
|
| 20 |
+
);
|
| 21 |
+
ColorPicker.displayName = "ColorPicker";
|
| 22 |
+
|
components/ui/input.tsx
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from "react";
|
| 2 |
+
import { cn } from "../../lib/utils";
|
| 3 |
+
|
| 4 |
+
export interface InputProps
|
| 5 |
+
extends React.InputHTMLAttributes<HTMLInputElement> {}
|
| 6 |
+
|
| 7 |
+
const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
| 8 |
+
({ className, type, ...props }, ref) => {
|
| 9 |
+
return (
|
| 10 |
+
<input
|
| 11 |
+
type={type}
|
| 12 |
+
className={cn(
|
| 13 |
+
"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm shadow-sm transition-colors 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 disabled:cursor-not-allowed disabled:opacity-50",
|
| 14 |
+
className
|
| 15 |
+
)}
|
| 16 |
+
ref={ref}
|
| 17 |
+
{...props}
|
| 18 |
+
/>
|
| 19 |
+
);
|
| 20 |
+
}
|
| 21 |
+
);
|
| 22 |
+
Input.displayName = "Input";
|
| 23 |
+
|
| 24 |
+
export { Input };
|
components/ui/label.tsx
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from "react";
|
| 2 |
+
import { cn } from "../../lib/utils";
|
| 3 |
+
|
| 4 |
+
export interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {}
|
| 5 |
+
|
| 6 |
+
const Label = React.forwardRef<HTMLLabelElement, LabelProps>(
|
| 7 |
+
({ className, ...props }, ref) => (
|
| 8 |
+
<label
|
| 9 |
+
ref={ref}
|
| 10 |
+
className={cn(
|
| 11 |
+
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
| 12 |
+
className
|
| 13 |
+
)}
|
| 14 |
+
{...props}
|
| 15 |
+
/>
|
| 16 |
+
)
|
| 17 |
+
);
|
| 18 |
+
Label.displayName = "Label";
|
| 19 |
+
|
| 20 |
+
export { Label };
|
components/ui/select.tsx
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from "react";
|
| 2 |
+
import { cn } from "../../lib/utils";
|
| 3 |
+
|
| 4 |
+
export interface SelectProps
|
| 5 |
+
extends React.SelectHTMLAttributes<HTMLSelectElement> {}
|
| 6 |
+
|
| 7 |
+
const Select = React.forwardRef<HTMLSelectElement, SelectProps>(
|
| 8 |
+
({ className, children, ...props }, ref) => {
|
| 9 |
+
return (
|
| 10 |
+
<select
|
| 11 |
+
ref={ref}
|
| 12 |
+
className={cn(
|
| 13 |
+
"h-9 w-full rounded-md border border-input bg-background px-2 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
|
| 14 |
+
className
|
| 15 |
+
)}
|
| 16 |
+
{...props}
|
| 17 |
+
>
|
| 18 |
+
{children}
|
| 19 |
+
</select>
|
| 20 |
+
);
|
| 21 |
+
}
|
| 22 |
+
);
|
| 23 |
+
Select.displayName = "Select";
|
| 24 |
+
|
| 25 |
+
export { Select };
|
components/ui/slider.tsx
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from "react";
|
| 2 |
+
import { cn } from "../../lib/utils";
|
| 3 |
+
|
| 4 |
+
export interface SliderProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
| 5 |
+
label?: string;
|
| 6 |
+
valueLabel?: string;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
export const Slider = React.forwardRef<HTMLInputElement, SliderProps>(
|
| 10 |
+
({ className, label, valueLabel, min = 0, max = 100, step = 1, ...props }, ref) => {
|
| 11 |
+
return (
|
| 12 |
+
<div className={cn("w-full", className)}>
|
| 13 |
+
{(label || valueLabel) && (
|
| 14 |
+
<div className="flex items-center justify-between text-xs text-muted-foreground mb-1">
|
| 15 |
+
<span>{label}</span>
|
| 16 |
+
<span>{valueLabel}</span>
|
| 17 |
+
</div>
|
| 18 |
+
)}
|
| 19 |
+
<input
|
| 20 |
+
ref={ref}
|
| 21 |
+
type="range"
|
| 22 |
+
min={min as number}
|
| 23 |
+
max={max as number}
|
| 24 |
+
step={step as number}
|
| 25 |
+
className={cn(
|
| 26 |
+
"w-full appearance-none h-2 rounded-lg bg-muted outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
| 27 |
+
"[&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:rounded-full",
|
| 28 |
+
"[&::-webkit-slider-thumb]:bg-primary [&::-webkit-slider-thumb]:cursor-pointer",
|
| 29 |
+
"[&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-primary"
|
| 30 |
+
)}
|
| 31 |
+
{...props}
|
| 32 |
+
/>
|
| 33 |
+
</div>
|
| 34 |
+
);
|
| 35 |
+
}
|
| 36 |
+
);
|
| 37 |
+
Slider.displayName = "Slider";
|
| 38 |
+
|
components/ui/textarea.tsx
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from "react";
|
| 2 |
+
import { cn } from "../../lib/utils";
|
| 3 |
+
|
| 4 |
+
export interface TextareaProps
|
| 5 |
+
extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
|
| 6 |
+
|
| 7 |
+
const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
|
| 8 |
+
({ className, ...props }, ref) => {
|
| 9 |
+
return (
|
| 10 |
+
<textarea
|
| 11 |
+
className={cn(
|
| 12 |
+
"flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
|
| 13 |
+
className
|
| 14 |
+
)}
|
| 15 |
+
ref={ref}
|
| 16 |
+
{...props}
|
| 17 |
+
/>
|
| 18 |
+
);
|
| 19 |
+
}
|
| 20 |
+
);
|
| 21 |
+
Textarea.displayName = "Textarea";
|
| 22 |
+
|
| 23 |
+
export { Textarea };
|
lib/utils.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { clsx, type ClassValue } from "clsx"
|
| 2 |
+
import { twMerge } from "tailwind-merge"
|
| 3 |
+
|
| 4 |
+
export function cn(...inputs: ClassValue[]) {
|
| 5 |
+
return twMerge(clsx(inputs))
|
| 6 |
+
}
|
public/blazzer.png
ADDED
|
Git LFS Details
|
public/sukajan.png
ADDED
|
Git LFS Details
|