diff --git a/src/components/Loader/index.stories.tsx b/src/components/Loader/index.stories.tsx new file mode 100644 index 00000000..adc04d85 --- /dev/null +++ b/src/components/Loader/index.stories.tsx @@ -0,0 +1,25 @@ +import { Meta, StoryObj } from '@storybook/react/*' +import { Loader } from '.' + +const meta: Meta = { + component: Loader, + decorators: [ + (Story) => ( +
+ +
+ ), + ], +} + +export default meta + +type Story = StoryObj + +export const Default: Story = { + render: () => , +} + +export const WithClassName: Story = { + render: () => , +} diff --git a/src/components/Loader/index.tsx b/src/components/Loader/index.tsx new file mode 100644 index 00000000..a98aa8a9 --- /dev/null +++ b/src/components/Loader/index.tsx @@ -0,0 +1,119 @@ +import { useTheme } from '@/hooks/useTheme' +import { cn } from '@/lib/utils' +import { motion, MotionProps } from 'framer-motion' + +const animateProps: MotionProps['animate'] = { + rotateY: [0, 30, -30, 0], + scale: [1, 1.08, 1.08, 1], + y: [0, -2, -2, 0], +} + +export interface LoaderProps { + className?: string +} + +export function Loader({ className }: LoaderProps) { + const theme = useTheme() + + const createLayerTransition = (delay: number): MotionProps['transition'] => ({ + duration: 2.5, + delay: delay, + repeat: Number.POSITIVE_INFINITY, + repeatDelay: 0.5, + ease: 'easeInOut', + }) + + return ( + + {theme === 'dark' ? ( + // White logo for dark mode + <> + + + + + + + ) : ( + // Black logo for light mode + <> + + + + + + + )} + + ) +} diff --git a/src/index.ts b/src/index.ts index 51efc9e6..748345d3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -180,6 +180,8 @@ export { ContextDropdown } from '@/components/ContextDropdown' export { ContextDropdownProvider as ContextDropdownProvider } from '@/components/ContextDropdown/provider' export { useModal as useContextDropdown } from '@/components/ContextDropdown/useModal' +export { Loader, type LoaderProps } from '@/components/Loader' + /** START BETA COMPONENTS */ import { CLIWizard } from '@/components/__beta__/CLIWizard' import { Timeline } from '@/components/__beta__/Timeline'