diff --git a/.gitignore b/.gitignore index 5ef6a52..174f2a6 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# repomix +repomix-output.txt \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 3f7d49f..9d6bd60 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 95e6c02..0443e8d 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@chakra-ui/react": "^3.4.0", - "@emotion/react": "^11.14.0", "next": "15.1.5", - "next-themes": "^0.4.4", "react": "^19.0.0", "react-dom": "^19.0.0", "react-icons": "^5.4.0" diff --git a/src/app/blog/[slug]/page.tsx b/src/app/blog/[slug]/page.tsx deleted file mode 100644 index eea974c..0000000 --- a/src/app/blog/[slug]/page.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export default async function Post({ params }: { params: Promise<{ slug: string }> }) { - const { slug } = await params; - return ( -
-

Post: {slug}

-
- ); -} diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx deleted file mode 100644 index e10b7e9..0000000 --- a/src/app/blog/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Blog() { - return

Blog

; -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index f23d32f..aca5046 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,6 @@ import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; import "./globals.scss"; -import Providers from "./providers"; const geistSans = Geist({ variable: "--font-geist-sans", @@ -25,9 +24,11 @@ export default function RootLayout({ }>) { return ( - - {children} - + + + + + {children} ); } diff --git a/src/app/page.tsx b/src/app/page.tsx index 5b1fdc6..f0615e9 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,18 +1,9 @@ "use client"; -import { Button } from "@/components/ui/button"; -import { useColorMode, useColorModeValue } from "@/components/ui/color-mode"; -import { VStack } from "@chakra-ui/react"; - export default function Home() { - const { toggleColorMode } = useColorMode(); - const color = useColorModeValue("red", "blue"); return ( - - - - +
+

Test

+
); } diff --git a/src/app/providers.tsx b/src/app/providers.tsx deleted file mode 100644 index fdc2ba0..0000000 --- a/src/app/providers.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { Provider } from "@/components/ui/provider"; - -export default function Providers(props: React.PropsWithChildren) { - return {props.children}; -} diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx deleted file mode 100644 index cd84664..0000000 --- a/src/components/ui/avatar.tsx +++ /dev/null @@ -1,74 +0,0 @@ -"use client" - -import type { GroupProps, SlotRecipeProps } from "@chakra-ui/react" -import { Avatar as ChakraAvatar, Group } from "@chakra-ui/react" -import * as React from "react" - -type ImageProps = React.ImgHTMLAttributes - -export interface AvatarProps extends ChakraAvatar.RootProps { - name?: string - src?: string - srcSet?: string - loading?: ImageProps["loading"] - icon?: React.ReactElement - fallback?: React.ReactNode -} - -export const Avatar = React.forwardRef( - function Avatar(props, ref) { - const { name, src, srcSet, loading, icon, fallback, children, ...rest } = - props - return ( - - - {fallback} - - - {children} - - ) - }, -) - -interface AvatarFallbackProps extends ChakraAvatar.FallbackProps { - name?: string - icon?: React.ReactElement -} - -const AvatarFallback = React.forwardRef( - function AvatarFallback(props, ref) { - const { name, icon, children, ...rest } = props - return ( - - {children} - {name != null && children == null && <>{getInitials(name)}} - {name == null && children == null && ( - {icon} - )} - - ) - }, -) - -function getInitials(name: string) { - const names = name.trim().split(" ") - const firstName = names[0] != null ? names[0] : "" - const lastName = names.length > 1 ? names[names.length - 1] : "" - return firstName && lastName - ? `${firstName.charAt(0)}${lastName.charAt(0)}` - : firstName.charAt(0) -} - -interface AvatarGroupProps extends GroupProps, SlotRecipeProps<"avatar"> {} - -export const AvatarGroup = React.forwardRef( - function AvatarGroup(props, ref) { - const { size, variant, borderless, ...rest } = props - return ( - - - - ) - }, -) diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx deleted file mode 100644 index f8d4edb..0000000 --- a/src/components/ui/button.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import type { ButtonProps as ChakraButtonProps } from "@chakra-ui/react"; -import { AbsoluteCenter, Button as ChakraButton, Span, Spinner } from "@chakra-ui/react"; -import * as React from "react"; - -interface ButtonLoadingProps { - loading?: boolean; - loadingText?: React.ReactNode; -} - -export interface ButtonProps extends ChakraButtonProps, ButtonLoadingProps {} - -export const Button = React.forwardRef(function Button(props, ref) { - const { loading, disabled, loadingText, children, ...rest } = props; - return ( - - {loading && !loadingText ? ( - <> - - - - {children} - - ) : loading && loadingText ? ( - <> - - {loadingText} - - ) : ( - children - )} - - ); -}); diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx deleted file mode 100644 index 2a27c2f..0000000 --- a/src/components/ui/checkbox.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Checkbox as ChakraCheckbox } from "@chakra-ui/react" -import * as React from "react" - -export interface CheckboxProps extends ChakraCheckbox.RootProps { - icon?: React.ReactNode - inputProps?: React.InputHTMLAttributes - rootRef?: React.Ref -} - -export const Checkbox = React.forwardRef( - function Checkbox(props, ref) { - const { icon, children, inputProps, rootRef, ...rest } = props - return ( - - - - {icon || } - - {children != null && ( - {children} - )} - - ) - }, -) diff --git a/src/components/ui/close-button.tsx b/src/components/ui/close-button.tsx deleted file mode 100644 index 94af488..0000000 --- a/src/components/ui/close-button.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import type { ButtonProps } from "@chakra-ui/react" -import { IconButton as ChakraIconButton } from "@chakra-ui/react" -import * as React from "react" -import { LuX } from "react-icons/lu" - -export type CloseButtonProps = ButtonProps - -export const CloseButton = React.forwardRef< - HTMLButtonElement, - CloseButtonProps ->(function CloseButton(props, ref) { - return ( - - {props.children ?? } - - ) -}) diff --git a/src/components/ui/color-mode.tsx b/src/components/ui/color-mode.tsx deleted file mode 100644 index 8490e12..0000000 --- a/src/components/ui/color-mode.tsx +++ /dev/null @@ -1,75 +0,0 @@ -"use client"; - -import type { IconButtonProps } from "@chakra-ui/react"; -import { ClientOnly, IconButton, Skeleton } from "@chakra-ui/react"; -import type { ThemeProviderProps } from "next-themes"; -import { ThemeProvider, useTheme } from "next-themes"; -import * as React from "react"; -import { LuMoon, LuSun } from "react-icons/lu"; - -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -export interface ColorModeProviderProps extends ThemeProviderProps {} - -export function ColorModeProvider(props: ColorModeProviderProps) { - return ; -} - -export type ColorMode = "light" | "dark"; - -export interface UseColorModeReturn { - colorMode: ColorMode; - setColorMode: (colorMode: ColorMode) => void; - toggleColorMode: () => void; -} - -export function useColorMode(): UseColorModeReturn { - const { resolvedTheme, setTheme } = useTheme(); - const toggleColorMode = () => { - setTheme(resolvedTheme === "light" ? "dark" : "light"); - }; - return { - colorMode: resolvedTheme as ColorMode, - setColorMode: setTheme, - toggleColorMode, - }; -} - -export function useColorModeValue(light: T, dark: T) { - const { colorMode } = useColorMode(); - return colorMode === "dark" ? dark : light; -} - -export function ColorModeIcon() { - const { colorMode } = useColorMode(); - return colorMode === "dark" ? : ; -} - -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -interface ColorModeButtonProps extends Omit {} - -export const ColorModeButton = React.forwardRef(function ColorModeButton( - props, - ref, -) { - const { toggleColorMode } = useColorMode(); - return ( - }> - - - - - ); -}); diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx deleted file mode 100644 index 89d68a5..0000000 --- a/src/components/ui/dialog.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { Dialog as ChakraDialog, Portal } from "@chakra-ui/react" -import { CloseButton } from "./close-button" -import * as React from "react" - -interface DialogContentProps extends ChakraDialog.ContentProps { - portalled?: boolean - portalRef?: React.RefObject - backdrop?: boolean -} - -export const DialogContent = React.forwardRef< - HTMLDivElement, - DialogContentProps ->(function DialogContent(props, ref) { - const { - children, - portalled = true, - portalRef, - backdrop = true, - ...rest - } = props - - return ( - - {backdrop && } - - - {children} - - - - ) -}) - -export const DialogCloseTrigger = React.forwardRef< - HTMLButtonElement, - ChakraDialog.CloseTriggerProps ->(function DialogCloseTrigger(props, ref) { - return ( - - - {props.children} - - - ) -}) - -export const DialogRoot = ChakraDialog.Root -export const DialogFooter = ChakraDialog.Footer -export const DialogHeader = ChakraDialog.Header -export const DialogBody = ChakraDialog.Body -export const DialogBackdrop = ChakraDialog.Backdrop -export const DialogTitle = ChakraDialog.Title -export const DialogDescription = ChakraDialog.Description -export const DialogTrigger = ChakraDialog.Trigger -export const DialogActionTrigger = ChakraDialog.ActionTrigger diff --git a/src/components/ui/drawer.tsx b/src/components/ui/drawer.tsx deleted file mode 100644 index ccb96c8..0000000 --- a/src/components/ui/drawer.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { Drawer as ChakraDrawer, Portal } from "@chakra-ui/react" -import { CloseButton } from "./close-button" -import * as React from "react" - -interface DrawerContentProps extends ChakraDrawer.ContentProps { - portalled?: boolean - portalRef?: React.RefObject - offset?: ChakraDrawer.ContentProps["padding"] -} - -export const DrawerContent = React.forwardRef< - HTMLDivElement, - DrawerContentProps ->(function DrawerContent(props, ref) { - const { children, portalled = true, portalRef, offset, ...rest } = props - return ( - - - - {children} - - - - ) -}) - -export const DrawerCloseTrigger = React.forwardRef< - HTMLButtonElement, - ChakraDrawer.CloseTriggerProps ->(function DrawerCloseTrigger(props, ref) { - return ( - - - - ) -}) - -export const DrawerTrigger = ChakraDrawer.Trigger -export const DrawerRoot = ChakraDrawer.Root -export const DrawerFooter = ChakraDrawer.Footer -export const DrawerHeader = ChakraDrawer.Header -export const DrawerBody = ChakraDrawer.Body -export const DrawerBackdrop = ChakraDrawer.Backdrop -export const DrawerDescription = ChakraDrawer.Description -export const DrawerTitle = ChakraDrawer.Title -export const DrawerActionTrigger = ChakraDrawer.ActionTrigger diff --git a/src/components/ui/field.tsx b/src/components/ui/field.tsx deleted file mode 100644 index dd3b66f..0000000 --- a/src/components/ui/field.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { Field as ChakraField } from "@chakra-ui/react" -import * as React from "react" - -export interface FieldProps extends Omit { - label?: React.ReactNode - helperText?: React.ReactNode - errorText?: React.ReactNode - optionalText?: React.ReactNode -} - -export const Field = React.forwardRef( - function Field(props, ref) { - const { label, children, helperText, errorText, optionalText, ...rest } = - props - return ( - - {label && ( - - {label} - - - )} - {children} - {helperText && ( - {helperText} - )} - {errorText && ( - {errorText} - )} - - ) - }, -) diff --git a/src/components/ui/input-group.tsx b/src/components/ui/input-group.tsx deleted file mode 100644 index 5d8fb32..0000000 --- a/src/components/ui/input-group.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import type { BoxProps, InputElementProps } from "@chakra-ui/react" -import { Group, InputElement } from "@chakra-ui/react" -import * as React from "react" - -export interface InputGroupProps extends BoxProps { - startElementProps?: InputElementProps - endElementProps?: InputElementProps - startElement?: React.ReactNode - endElement?: React.ReactNode - children: React.ReactElement - startOffset?: InputElementProps["paddingStart"] - endOffset?: InputElementProps["paddingEnd"] -} - -export const InputGroup = React.forwardRef( - function InputGroup(props, ref) { - const { - startElement, - startElementProps, - endElement, - endElementProps, - children, - startOffset = "6px", - endOffset = "6px", - ...rest - } = props - - const child = - React.Children.only>(children) - - return ( - - {startElement && ( - - {startElement} - - )} - {React.cloneElement(child, { - ...(startElement && { - ps: `calc(var(--input-height) - ${startOffset})`, - }), - ...(endElement && { pe: `calc(var(--input-height) - ${endOffset})` }), - ...children.props, - })} - {endElement && ( - - {endElement} - - )} - - ) - }, -) diff --git a/src/components/ui/popover.tsx b/src/components/ui/popover.tsx deleted file mode 100644 index 3320659..0000000 --- a/src/components/ui/popover.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { Popover as ChakraPopover, Portal } from "@chakra-ui/react" -import { CloseButton } from "./close-button" -import * as React from "react" - -interface PopoverContentProps extends ChakraPopover.ContentProps { - portalled?: boolean - portalRef?: React.RefObject -} - -export const PopoverContent = React.forwardRef< - HTMLDivElement, - PopoverContentProps ->(function PopoverContent(props, ref) { - const { portalled = true, portalRef, ...rest } = props - return ( - - - - - - ) -}) - -export const PopoverArrow = React.forwardRef< - HTMLDivElement, - ChakraPopover.ArrowProps ->(function PopoverArrow(props, ref) { - return ( - - - - ) -}) - -export const PopoverCloseTrigger = React.forwardRef< - HTMLButtonElement, - ChakraPopover.CloseTriggerProps ->(function PopoverCloseTrigger(props, ref) { - return ( - - - - ) -}) - -export const PopoverTitle = ChakraPopover.Title -export const PopoverDescription = ChakraPopover.Description -export const PopoverFooter = ChakraPopover.Footer -export const PopoverHeader = ChakraPopover.Header -export const PopoverRoot = ChakraPopover.Root -export const PopoverBody = ChakraPopover.Body -export const PopoverTrigger = ChakraPopover.Trigger diff --git a/src/components/ui/provider.tsx b/src/components/ui/provider.tsx deleted file mode 100644 index fd0331b..0000000 --- a/src/components/ui/provider.tsx +++ /dev/null @@ -1,15 +0,0 @@ -"use client" - -import { ChakraProvider, defaultSystem } from "@chakra-ui/react" -import { - ColorModeProvider, - type ColorModeProviderProps, -} from "./color-mode" - -export function Provider(props: ColorModeProviderProps) { - return ( - - - - ) -} diff --git a/src/components/ui/radio.tsx b/src/components/ui/radio.tsx deleted file mode 100644 index b3919d0..0000000 --- a/src/components/ui/radio.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { RadioGroup as ChakraRadioGroup } from "@chakra-ui/react" -import * as React from "react" - -export interface RadioProps extends ChakraRadioGroup.ItemProps { - rootRef?: React.Ref - inputProps?: React.InputHTMLAttributes -} - -export const Radio = React.forwardRef( - function Radio(props, ref) { - const { children, inputProps, rootRef, ...rest } = props - return ( - - - - {children && ( - {children} - )} - - ) - }, -) - -export const RadioGroup = ChakraRadioGroup.Root diff --git a/src/components/ui/slider.tsx b/src/components/ui/slider.tsx deleted file mode 100644 index 55a7283..0000000 --- a/src/components/ui/slider.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { Slider as ChakraSlider, For, HStack } from "@chakra-ui/react" -import * as React from "react" - -export interface SliderProps extends ChakraSlider.RootProps { - marks?: Array - label?: React.ReactNode - showValue?: boolean -} - -export const Slider = React.forwardRef( - function Slider(props, ref) { - const { marks: marksProp, label, showValue, ...rest } = props - const value = props.defaultValue ?? props.value - - const marks = marksProp?.map((mark) => { - if (typeof mark === "number") return { value: mark, label: undefined } - return mark - }) - - const hasMarkLabel = !!marks?.some((mark) => mark.label) - - return ( - - {label && !showValue && ( - {label} - )} - {label && showValue && ( - - {label} - - - )} - - - - - - - - - ) - }, -) - -function SliderThumbs(props: { value?: number[] }) { - const { value } = props - return ( - - {(_, index) => ( - - - - )} - - ) -} - -interface SliderMarksProps { - marks?: Array -} - -const SliderMarks = React.forwardRef( - function SliderMarks(props, ref) { - const { marks } = props - if (!marks?.length) return null - - return ( - - {marks.map((mark, index) => { - const value = typeof mark === "number" ? mark : mark.value - const label = typeof mark === "number" ? undefined : mark.label - return ( - - - {label} - - ) - })} - - ) - }, -) diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx deleted file mode 100644 index 43a8a6c..0000000 --- a/src/components/ui/tooltip.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Tooltip as ChakraTooltip, Portal } from "@chakra-ui/react" -import * as React from "react" - -export interface TooltipProps extends ChakraTooltip.RootProps { - showArrow?: boolean - portalled?: boolean - portalRef?: React.RefObject - content: React.ReactNode - contentProps?: ChakraTooltip.ContentProps - disabled?: boolean -} - -export const Tooltip = React.forwardRef( - function Tooltip(props, ref) { - const { - showArrow, - children, - disabled, - portalled = true, - content, - contentProps, - portalRef, - ...rest - } = props - - if (disabled) return children - - return ( - - {children} - - - - {showArrow && ( - - - - )} - {content} - - - - - ) - }, -)