@alkimi.org/ui-kit 0.1.8 → 0.1.10
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/README.github.md +63 -11
- package/README.md +2 -33
- package/README.npm.md +2 -33
- package/dist/components/GlitchLink.d.mts +12 -0
- package/dist/components/GlitchLink.d.ts +12 -0
- package/dist/components/GlitchLink.js +74 -0
- package/dist/components/GlitchLink.js.map +1 -0
- package/dist/components/GlitchLink.mjs +44 -0
- package/dist/components/GlitchLink.mjs.map +1 -0
- package/dist/components/PixelLoad.d.mts +20 -0
- package/dist/components/PixelLoad.d.ts +20 -0
- package/dist/components/PixelLoad.js +182 -0
- package/dist/components/PixelLoad.js.map +1 -0
- package/dist/components/PixelLoad.mjs +148 -0
- package/dist/components/PixelLoad.mjs.map +1 -0
- package/dist/components/TextDecoder.d.mts +15 -0
- package/dist/components/TextDecoder.d.ts +15 -0
- package/dist/components/TextDecoder.js +293 -0
- package/dist/components/TextDecoder.js.map +1 -0
- package/dist/components/TextDecoder.mjs +265 -0
- package/dist/components/TextDecoder.mjs.map +1 -0
- package/dist/components/button.d.mts +16 -0
- package/dist/components/button.d.ts +16 -0
- package/dist/components/button.js +109 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/button.mjs +74 -0
- package/dist/components/button.mjs.map +1 -0
- package/dist/components/card.d.mts +10 -0
- package/dist/components/card.d.ts +10 -0
- package/dist/components/card.js +115 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/card.mjs +76 -0
- package/dist/components/card.mjs.map +1 -0
- package/dist/index.css +250 -11
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +16 -21
- package/dist/index.d.ts +16 -21
- package/dist/index.js +467 -52
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +467 -47
- package/dist/index.mjs.map +1 -1
- package/dist/lib/utils.d.mts +5 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +36 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/utils.mjs +12 -0
- package/dist/lib/utils.mjs.map +1 -0
- package/dist/styles.css +250 -11
- package/dist/styles.css.map +1 -1
- package/package.json +48 -12
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/button.tsx","../src/lib/utils.ts","../src/components/card.tsx"],"sourcesContent":["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 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\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n"],"mappings":";;;AAAA,YAAY,WAAW;AACvB,SAAS,YAAY;AACrB,SAAS,WAA8B;;;ACFvC,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADwCM;AAvCN,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAQA,IAAM,SAAe;AAAA,EACnB,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,OAAO,GAAG,MAAM,GAAG,QAAQ;AAChE,UAAM,OAAO,UAAU,OAAO;AAC9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC1D;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;;;AErDrB,YAAYA,YAAW;AAQrB,gBAAAC,YAAA;AAJF,IAAM,OAAa,kBAGjB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,KAAK,cAAc;AAEnB,IAAM,aAAmB,kBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,WAAW,cAAc;AAEzB,IAAM,YAAkB,kBAGtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,UAAU,cAAc;AAExB,IAAM,kBAAwB,kBAG5B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,gBAAgB,cAAc;AAE9B,IAAM,cAAoB,kBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA,KAAC,SAAI,KAAU,WAAW,GAAG,YAAY,SAAS,GAAI,GAAG,OAAO,CACjE;AACD,YAAY,cAAc;AAE1B,IAAM,aAAmB,kBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,8BAA8B,SAAS;AAAA,IACpD,GAAG;AAAA;AACN,CACD;AACD,WAAW,cAAc;","names":["React","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/button.tsx","../src/lib/utils.ts","../src/components/tabs.tsx","../src/components/TextDecoder.tsx","../src/components/GlitchLink.tsx","../src/components/PixelLoad.tsx"],"sourcesContent":["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 whitespace-nowrap rounded-[3.75rem] text-[0.875rem] 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\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary/80 text-secondary-foreground hover:bg-secondary\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 text-[0.75rem] px-3 py-2\",\n lg: \"h-10 px-8 py-2\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n loading?: boolean\n icon?: React.ReactNode\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n icon,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n disabled={loading || props.disabled}\n {...props}\n >\n {loading && (\n <div className=\"mr-2 h-4 w-4 animate-spin rounded-full border-[1.33px] border-primary-foreground border-t-transparent\" />\n )}\n {!loading && icon && <span className=\"mr-2\">{icon}</span>}\n {props.children}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center rounded-[3.75rem] bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-[3.75rem] px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\nimport React, {\n useState,\n useEffect,\n useMemo,\n useRef,\n Suspense,\n ReactNode,\n} from \"react\"\nimport { cn } from \"../lib/utils\"\n\n// The symbols to use for the scrambling effect (moved outside to avoid recreation)\nconst SYMBOLS = [\"\\\\\", \"-\", \"?\", \"/\", \"#\", \"!\", \"_\", \"+\", \"<\", \">\"]\nconst MAX_ITERATIONS = 3 // How many times to scramble\nconst SPEED = 400 // Speed in milliseconds between scrambles\n\n// Helper function moved outside component to avoid recreation\nconst scrambleText = (input: string, symbols: string[]): string => {\n if (!input) return \"\"\n\n return input\n .split(\" \")\n .map((word: string) => {\n if (!word) return \"\"\n const randomSymbol = symbols[Math.floor(Math.random() * symbols.length)]\n return randomSymbol.repeat(word.length)\n })\n .join(\" \")\n}\n\n// Extract text content from React nodes recursively\n// Also checks common text props like 'text', 'label', 'title', etc.\nconst extractText = (node: ReactNode): string => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node)\n }\n\n if (Array.isArray(node)) {\n return node.map(extractText).join(\"\")\n }\n\n if (React.isValidElement(node)) {\n const props = node.props as {\n children?: ReactNode\n text?: string\n label?: string\n title?: string\n [key: string]: unknown\n }\n\n let result = \"\"\n\n // Extract text from props first (in order: text, label, title)\n if (typeof props.text === \"string\") {\n result += props.text\n }\n if (typeof props.label === \"string\") {\n result += props.label\n }\n if (typeof props.title === \"string\") {\n result += props.title\n }\n\n // Then extract from children\n if (props.children) {\n result += extractText(props.children)\n }\n\n return result\n }\n\n return \"\"\n}\n\n// Clone React nodes and replace text content with scrambled text\n// This function maps scrambled text back to the original structure\nconst scrambleReactNode = (\n node: ReactNode,\n scrambledText: string,\n textStartIndex: { current: number }\n): ReactNode => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n const text = String(node)\n // For each character in the original text, take the corresponding scrambled character\n // This preserves the length and structure\n let scrambled = \"\"\n for (let i = 0; i < text.length; i++) {\n if (textStartIndex.current < scrambledText.length) {\n scrambled += scrambledText[textStartIndex.current]\n textStartIndex.current++\n } else {\n // Fallback if scrambled text is shorter (shouldn't happen, but safety check)\n scrambled += text[i]\n }\n }\n return scrambled\n }\n\n if (Array.isArray(node)) {\n return node.map((child, index) => {\n const scrambledChild = scrambleReactNode(\n child,\n scrambledText,\n textStartIndex\n )\n // Preserve original key if it exists, otherwise add one for React elements\n if (React.isValidElement(scrambledChild)) {\n const originalKey = React.isValidElement(child) ? child.key : null\n if (scrambledChild.key == null && originalKey == null) {\n return React.cloneElement(scrambledChild, { key: `decoded-${index}` })\n }\n // If original had a key but scrambled doesn't, preserve it\n if (scrambledChild.key == null && originalKey != null) {\n return React.cloneElement(scrambledChild, { key: originalKey })\n }\n }\n return scrambledChild\n })\n }\n\n if (React.isValidElement(node)) {\n // Regular element handling - works for all components\n const props = node.props as {\n children?: ReactNode\n text?: string\n label?: string\n title?: string\n [key: string]: unknown\n }\n const newProps = { ...props }\n\n // Handle text props in the same order as extraction (text, label, title)\n if (typeof props.text === \"string\") {\n const text = props.text\n let scrambled = \"\"\n for (let i = 0; i < text.length; i++) {\n if (textStartIndex.current < scrambledText.length) {\n scrambled += scrambledText[textStartIndex.current]\n textStartIndex.current++\n } else {\n scrambled += text[i]\n }\n }\n newProps.text = scrambled\n }\n\n if (typeof props.label === \"string\") {\n const label = props.label\n let scrambled = \"\"\n for (let i = 0; i < label.length; i++) {\n if (textStartIndex.current < scrambledText.length) {\n scrambled += scrambledText[textStartIndex.current]\n textStartIndex.current++\n } else {\n scrambled += label[i]\n }\n }\n newProps.label = scrambled\n }\n\n if (typeof props.title === \"string\") {\n const title = props.title\n let scrambled = \"\"\n for (let i = 0; i < title.length; i++) {\n if (textStartIndex.current < scrambledText.length) {\n scrambled += scrambledText[textStartIndex.current]\n textStartIndex.current++\n } else {\n scrambled += title[i]\n }\n }\n newProps.title = scrambled\n }\n\n // Handle children after props\n if (props.children) {\n newProps.children = scrambleReactNode(\n props.children,\n scrambledText,\n textStartIndex\n )\n }\n return React.cloneElement(node, newProps)\n }\n\n return node\n}\n\nexport interface TextDecoderProps {\n children: ReactNode\n className?: string\n delay?: number // Delay in milliseconds before starting animation\n symbols?: string[] // Symbols to use for scrambling effect\n maxIterations?: number // How many times to scramble\n speed?: number // Speed in milliseconds between scrambles\n}\n\nconst TextDecoder = ({\n children,\n className,\n delay = 0,\n symbols = SYMBOLS,\n maxIterations = MAX_ITERATIONS,\n speed = SPEED,\n}: TextDecoderProps) => {\n const [displayContent, setDisplayContent] = useState<ReactNode>(null)\n const [hasAnimated, setHasAnimated] = useState(false)\n const elementRef = useRef<HTMLSpanElement>(null)\n\n // Extract full text for scrambling\n const fullText = useMemo(() => extractText(children), [children])\n\n // Memoize initial scrambled text\n const initialScrambled = useMemo(\n () => scrambleText(fullText, symbols),\n [fullText, symbols]\n )\n\n // Initialize with scrambled content to prevent layout shift\n useEffect(() => {\n if (!hasAnimated && fullText) {\n const textStartIndex = { current: 0 }\n const scrambledContent = scrambleReactNode(\n children,\n initialScrambled,\n textStartIndex\n )\n setDisplayContent(scrambledContent)\n }\n }, [children, initialScrambled, hasAnimated, fullText])\n\n useEffect(() => {\n if (!fullText) {\n setDisplayContent(null)\n return\n }\n\n // If already animated, show the final content\n if (hasAnimated) {\n setDisplayContent(children)\n return\n }\n\n const element = elementRef.current\n if (!element) return\n\n let iteration = 0\n let intervalId: NodeJS.Timeout | null = null\n let delayTimeoutId: NodeJS.Timeout | null = null\n\n // Intersection Observer to detect when element is visible\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0]\n if (entry.isIntersecting && !hasAnimated) {\n // Start animation after delay\n delayTimeoutId = setTimeout(() => {\n // 1. Initial scramble\n const textStartIndex = { current: 0 }\n const scrambledContent = scrambleReactNode(\n children,\n initialScrambled,\n textStartIndex\n )\n setDisplayContent(scrambledContent)\n\n // 2. Set up the interval\n intervalId = setInterval(() => {\n iteration++\n\n if (iteration >= maxIterations) {\n // Stop scrambling and show the real content\n setDisplayContent(children)\n setHasAnimated(true)\n if (intervalId) clearInterval(intervalId)\n } else {\n // Continue scrambling\n const newScrambled = scrambleText(fullText, symbols)\n const textStartIndex = { current: 0 }\n const scrambledContent = scrambleReactNode(\n children,\n newScrambled,\n textStartIndex\n )\n setDisplayContent(scrambledContent)\n }\n }, speed)\n }, delay)\n\n // Disconnect observer once animation starts\n observer.disconnect()\n }\n },\n {\n threshold: 0.1, // Trigger when 10% of the element is visible\n }\n )\n\n observer.observe(element)\n\n // Cleanup function\n return () => {\n observer.disconnect()\n if (intervalId) clearInterval(intervalId)\n if (delayTimeoutId) clearTimeout(delayTimeoutId)\n }\n }, [\n children,\n fullText,\n initialScrambled,\n hasAnimated,\n delay,\n symbols,\n maxIterations,\n speed,\n ])\n\n const ariaLabel = useMemo(() => extractText(children), [children])\n\n return (\n <span\n ref={elementRef}\n aria-label={ariaLabel} // Accessibility: Screen readers read the real text\n className={className}\n >\n {displayContent}\n </span>\n )\n}\n\nconst SuspenseDecodedText = (props: TextDecoderProps) => {\n return (\n <Suspense\n fallback={\n <span className={cn(\"opacity-0\", props.className)}>\n {props.children}\n </span>\n }\n >\n <TextDecoder {...props} />\n </Suspense>\n )\n}\n\nexport { SuspenseDecodedText }\nexport default TextDecoder\n","\"use client\"\nimport Link from \"next/link\"\nimport { RefAttributes, useState, ReactNode } from \"react\"\n\ntype GlitchLinkProps = RefAttributes<HTMLAnchorElement> & {\n href: string\n children: ReactNode\n symbols?: string[]\n className?: string\n}\n\nconst DEFAULT_SYMBOLS = [\"/\", \"#\", \"*\"]\n\nconst GlitchLink = ({\n href,\n children,\n symbols = DEFAULT_SYMBOLS,\n className = \"underline\",\n ...props\n}: GlitchLinkProps) => {\n const [isHovering, setIsHovering] = useState(false)\n\n const text = typeof children === \"string\" ? children : \"\"\n\n const getRandomGlitch = () => {\n if (!isHovering || !text) return children\n return text\n .split(\" \")\n .map((word: string) => {\n // take one random letter from the word\n const randomLetterIndex = Math.floor(Math.random() * word.length)\n\n // replace the letter with a random symbol\n return word.replace(\n word[randomLetterIndex],\n symbols[Math.floor(Math.random() * symbols.length)]\n )\n })\n .join(\" \")\n }\n\n return (\n <Link\n href={href}\n className={className}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n {...props}\n >\n {text ? (isHovering ? getRandomGlitch() : children) : children}\n </Link>\n )\n}\n\nexport default GlitchLink\n","\"use client\"\n\nimport Image, { type StaticImageData } from \"next/image\"\nimport { JSX, useCallback, useEffect, useRef, useState } from \"react\"\n\ntype PixelLoadStatus = \"loading\" | \"animating\" | \"complete\"\n\ntype ImageSrc = string | StaticImageData\n\nexport interface PixelLoadProps {\n src: ImageSrc\n alt: string\n duration?: number\n steps?: number\n className?: string\n onAnimationComplete?: () => void\n priority?: boolean\n quality?: number\n placeholder?: \"blur\" | \"empty\"\n blurDataURL?: string\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\"\n}\n\nfunction isStaticImageData(src: ImageSrc): src is StaticImageData {\n return typeof src === \"object\" && \"src\" in src\n}\n\nfunction getImageSrc(src: ImageSrc): string {\n return isStaticImageData(src) ? src.src : src\n}\n\nexport function PixelLoad({\n src,\n alt,\n duration = 600,\n steps = 15,\n className,\n onAnimationComplete,\n priority,\n quality,\n placeholder = \"empty\",\n blurDataURL,\n objectFit = \"cover\",\n}: PixelLoadProps): JSX.Element {\n const containerRef = useRef<HTMLDivElement>(null)\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const [status, setStatus] = useState<PixelLoadStatus>(\"loading\")\n const [dimensions, setDimensions] = useState<{\n width: number\n height: number\n } | null>(null)\n\n const imageSrc = getImageSrc(src)\n\n const drawPixelated = useCallback(\n (\n ctx: CanvasRenderingContext2D,\n img: HTMLImageElement,\n pixelSize: number,\n w: number,\n h: number\n ): void => {\n ctx.imageSmoothingEnabled = false\n\n const sw = Math.max(1, Math.floor(w / pixelSize))\n const sh = Math.max(1, Math.floor(h / pixelSize))\n\n ctx.clearRect(0, 0, w, h)\n ctx.drawImage(img, 0, 0, sw, sh)\n ctx.drawImage(canvasRef.current!, 0, 0, sw, sh, 0, 0, w, h)\n },\n []\n )\n\n const runAnimation = useCallback(\n (\n ctx: CanvasRenderingContext2D,\n img: HTMLImageElement,\n w: number,\n h: number\n ): void => {\n const minPixelSize = Math.max(w, h) / 4\n const intervalMs = duration / steps\n let currentStep = 0\n\n setStatus(\"animating\")\n\n const animate = (): void => {\n const progress = currentStep / steps\n const pixelSize = Math.max(1, Math.floor(minPixelSize * (1 - progress)))\n\n drawPixelated(ctx, img, pixelSize, w, h)\n\n currentStep++\n\n if (currentStep <= steps) {\n window.setTimeout(animate, intervalMs)\n } else {\n setStatus(\"complete\")\n onAnimationComplete?.()\n }\n }\n\n animate()\n },\n [duration, steps, drawPixelated, onAnimationComplete]\n )\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const updateDimensions = (): void => {\n const { width, height } = container.getBoundingClientRect()\n setDimensions({ width: Math.floor(width), height: Math.floor(height) })\n }\n\n const resizeObserver = new ResizeObserver(updateDimensions)\n resizeObserver.observe(container)\n updateDimensions()\n\n return (): void => {\n resizeObserver.disconnect()\n }\n }, [])\n\n useEffect(() => {\n if (!dimensions) return\n\n // Guard against invalid dimensions\n if (dimensions.width <= 0 || dimensions.height <= 0) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n // Set canvas dimensions immediately to ensure it covers the area\n canvas.width = dimensions.width\n canvas.height = dimensions.height\n\n const img = new window.Image()\n img.crossOrigin = \"anonymous\"\n\n img.onload = (): void => {\n // Draw first frame immediately to prevent original image from showing\n const minPixelSize = Math.max(dimensions.width, dimensions.height) / 4\n drawPixelated(ctx, img, minPixelSize, dimensions.width, dimensions.height)\n // Then start animation\n runAnimation(ctx, img, dimensions.width, dimensions.height)\n }\n\n img.onerror = (): void => {\n console.error(\"PixelLoad: Failed to load image\")\n }\n\n img.src = imageSrc\n\n return (): void => {\n img.onload = null\n img.onerror = null\n }\n }, [imageSrc, dimensions, runAnimation, drawPixelated])\n\n const isComplete = status === \"complete\"\n const isAnimating = status === \"animating\" || status === \"loading\"\n\n return (\n <div\n ref={containerRef}\n className={`relative w-full h-full ${className || \"\"}`}\n >\n <canvas\n ref={canvasRef}\n className=\"absolute top-0 left-0 w-full h-full\"\n style={{\n objectFit,\n opacity: isComplete ? 0 : 1,\n zIndex: isAnimating ? 2 : 1,\n }}\n aria-hidden={isComplete}\n />\n {isComplete && (\n <Image\n src={src}\n alt={alt}\n fill\n priority={priority}\n quality={quality}\n placeholder={placeholder}\n blurDataURL={blurDataURL}\n className=\"opacity-100 transition-opacity duration-150 ease-out z-[1]\"\n style={{\n objectFit,\n }}\n />\n )}\n </div>\n )\n}\n"],"mappings":"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","names":["React","jsx","React","jsx","React","textStartIndex","scrambledContent","useState","jsx","useEffect","useRef","useState","jsx","jsxs"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/lib/utils.ts
|
|
22
|
+
var utils_exports = {};
|
|
23
|
+
__export(utils_exports, {
|
|
24
|
+
cn: () => cn
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(utils_exports);
|
|
27
|
+
var import_clsx = require("clsx");
|
|
28
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
29
|
+
function cn(...inputs) {
|
|
30
|
+
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
31
|
+
}
|
|
32
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
+
0 && (module.exports = {
|
|
34
|
+
cn
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;AAAA,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;","names":[]}
|
package/dist/styles.css
CHANGED
|
@@ -361,6 +361,52 @@ body {
|
|
|
361
361
|
background-color: hsl(var(--background));
|
|
362
362
|
color: hsl(var(--foreground));
|
|
363
363
|
}
|
|
364
|
+
.\!container {
|
|
365
|
+
width: 100% !important;
|
|
366
|
+
margin-right: auto !important;
|
|
367
|
+
margin-left: auto !important;
|
|
368
|
+
padding-right: 2rem !important;
|
|
369
|
+
padding-left: 2rem !important;
|
|
370
|
+
}
|
|
371
|
+
.container {
|
|
372
|
+
width: 100%;
|
|
373
|
+
margin-right: auto;
|
|
374
|
+
margin-left: auto;
|
|
375
|
+
padding-right: 2rem;
|
|
376
|
+
padding-left: 2rem;
|
|
377
|
+
}
|
|
378
|
+
@media (min-width: 1400px) {
|
|
379
|
+
.\!container {
|
|
380
|
+
max-width: 1400px !important;
|
|
381
|
+
}
|
|
382
|
+
.container {
|
|
383
|
+
max-width: 1400px;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
.visible {
|
|
387
|
+
visibility: visible;
|
|
388
|
+
}
|
|
389
|
+
.absolute {
|
|
390
|
+
position: absolute;
|
|
391
|
+
}
|
|
392
|
+
.relative {
|
|
393
|
+
position: relative;
|
|
394
|
+
}
|
|
395
|
+
.left-0 {
|
|
396
|
+
left: 0px;
|
|
397
|
+
}
|
|
398
|
+
.top-0 {
|
|
399
|
+
top: 0px;
|
|
400
|
+
}
|
|
401
|
+
.z-\[1\] {
|
|
402
|
+
z-index: 1;
|
|
403
|
+
}
|
|
404
|
+
.mr-2 {
|
|
405
|
+
margin-right: 0.5rem;
|
|
406
|
+
}
|
|
407
|
+
.mt-2 {
|
|
408
|
+
margin-top: 0.5rem;
|
|
409
|
+
}
|
|
364
410
|
.flex {
|
|
365
411
|
display: flex;
|
|
366
412
|
}
|
|
@@ -370,44 +416,117 @@ body {
|
|
|
370
416
|
.h-10 {
|
|
371
417
|
height: 2.5rem;
|
|
372
418
|
}
|
|
373
|
-
.h-
|
|
374
|
-
height:
|
|
419
|
+
.h-4 {
|
|
420
|
+
height: 1rem;
|
|
421
|
+
}
|
|
422
|
+
.h-8 {
|
|
423
|
+
height: 2rem;
|
|
375
424
|
}
|
|
376
425
|
.h-9 {
|
|
377
426
|
height: 2.25rem;
|
|
378
427
|
}
|
|
379
|
-
.
|
|
380
|
-
|
|
428
|
+
.h-\[150px\] {
|
|
429
|
+
height: 150px;
|
|
430
|
+
}
|
|
431
|
+
.h-\[300px\] {
|
|
432
|
+
height: 300px;
|
|
433
|
+
}
|
|
434
|
+
.h-\[400px\] {
|
|
435
|
+
height: 400px;
|
|
436
|
+
}
|
|
437
|
+
.h-full {
|
|
438
|
+
height: 100%;
|
|
439
|
+
}
|
|
440
|
+
.w-4 {
|
|
441
|
+
width: 1rem;
|
|
442
|
+
}
|
|
443
|
+
.w-9 {
|
|
444
|
+
width: 2.25rem;
|
|
445
|
+
}
|
|
446
|
+
.w-\[200px\] {
|
|
447
|
+
width: 200px;
|
|
448
|
+
}
|
|
449
|
+
.w-\[300px\] {
|
|
450
|
+
width: 300px;
|
|
451
|
+
}
|
|
452
|
+
.w-\[350px\] {
|
|
453
|
+
width: 350px;
|
|
454
|
+
}
|
|
455
|
+
.w-\[400px\] {
|
|
456
|
+
width: 400px;
|
|
457
|
+
}
|
|
458
|
+
.w-full {
|
|
459
|
+
width: 100%;
|
|
460
|
+
}
|
|
461
|
+
.max-w-md {
|
|
462
|
+
max-width: 28rem;
|
|
463
|
+
}
|
|
464
|
+
@keyframes spin {
|
|
465
|
+
to {
|
|
466
|
+
transform: rotate(360deg);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
.animate-spin {
|
|
470
|
+
animation: spin 1s linear infinite;
|
|
381
471
|
}
|
|
382
472
|
.flex-col {
|
|
383
473
|
flex-direction: column;
|
|
384
474
|
}
|
|
475
|
+
.flex-wrap {
|
|
476
|
+
flex-wrap: wrap;
|
|
477
|
+
}
|
|
385
478
|
.items-center {
|
|
386
479
|
align-items: center;
|
|
387
480
|
}
|
|
388
481
|
.justify-center {
|
|
389
482
|
justify-content: center;
|
|
390
483
|
}
|
|
484
|
+
.gap-2 {
|
|
485
|
+
gap: 0.5rem;
|
|
486
|
+
}
|
|
487
|
+
.gap-4 {
|
|
488
|
+
gap: 1rem;
|
|
489
|
+
}
|
|
391
490
|
.space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
|
|
392
491
|
--tw-space-y-reverse: 0;
|
|
393
492
|
margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
|
|
394
493
|
margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
|
|
395
494
|
}
|
|
495
|
+
.space-y-4 > :not([hidden]) ~ :not([hidden]) {
|
|
496
|
+
--tw-space-y-reverse: 0;
|
|
497
|
+
margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
|
|
498
|
+
margin-bottom: calc(1rem * var(--tw-space-y-reverse));
|
|
499
|
+
}
|
|
500
|
+
.overflow-hidden {
|
|
501
|
+
overflow: hidden;
|
|
502
|
+
}
|
|
396
503
|
.whitespace-nowrap {
|
|
397
504
|
white-space: nowrap;
|
|
398
505
|
}
|
|
506
|
+
.rounded-\[3\.75rem\] {
|
|
507
|
+
border-radius: 3.75rem;
|
|
508
|
+
}
|
|
509
|
+
.rounded-full {
|
|
510
|
+
border-radius: 9999px;
|
|
511
|
+
}
|
|
399
512
|
.rounded-lg {
|
|
400
513
|
border-radius: var(--radius);
|
|
401
514
|
}
|
|
402
|
-
.rounded-md {
|
|
403
|
-
border-radius: calc(var(--radius) - 2px);
|
|
404
|
-
}
|
|
405
515
|
.border {
|
|
406
516
|
border-width: 1px;
|
|
407
517
|
}
|
|
518
|
+
.border-\[1\.33px\] {
|
|
519
|
+
border-width: 1.33px;
|
|
520
|
+
}
|
|
408
521
|
.border-input {
|
|
409
522
|
border-color: hsl(var(--input));
|
|
410
523
|
}
|
|
524
|
+
.border-primary-foreground {
|
|
525
|
+
border-color: hsl(var(--primary-foreground));
|
|
526
|
+
}
|
|
527
|
+
.border-t-transparent {
|
|
528
|
+
border-top-color: transparent;
|
|
529
|
+
}
|
|
411
530
|
.bg-background {
|
|
412
531
|
background-color: hsl(var(--background));
|
|
413
532
|
}
|
|
@@ -417,11 +536,21 @@ body {
|
|
|
417
536
|
.bg-destructive {
|
|
418
537
|
background-color: hsl(var(--destructive));
|
|
419
538
|
}
|
|
539
|
+
.bg-gray-100 {
|
|
540
|
+
--tw-bg-opacity: 1;
|
|
541
|
+
background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
|
|
542
|
+
}
|
|
543
|
+
.bg-muted {
|
|
544
|
+
background-color: hsl(var(--muted));
|
|
545
|
+
}
|
|
420
546
|
.bg-primary {
|
|
421
547
|
background-color: hsl(var(--primary));
|
|
422
548
|
}
|
|
423
|
-
.bg-secondary {
|
|
424
|
-
background-color: hsl(var(--secondary));
|
|
549
|
+
.bg-secondary\/80 {
|
|
550
|
+
background-color: hsl(var(--secondary) / 0.8);
|
|
551
|
+
}
|
|
552
|
+
.p-1 {
|
|
553
|
+
padding: 0.25rem;
|
|
425
554
|
}
|
|
426
555
|
.p-6 {
|
|
427
556
|
padding: 1.5rem;
|
|
@@ -438,6 +567,10 @@ body {
|
|
|
438
567
|
padding-left: 2rem;
|
|
439
568
|
padding-right: 2rem;
|
|
440
569
|
}
|
|
570
|
+
.py-1 {
|
|
571
|
+
padding-top: 0.25rem;
|
|
572
|
+
padding-bottom: 0.25rem;
|
|
573
|
+
}
|
|
441
574
|
.py-2 {
|
|
442
575
|
padding-top: 0.5rem;
|
|
443
576
|
padding-bottom: 0.5rem;
|
|
@@ -445,32 +578,82 @@ body {
|
|
|
445
578
|
.pt-0 {
|
|
446
579
|
padding-top: 0px;
|
|
447
580
|
}
|
|
581
|
+
.text-center {
|
|
582
|
+
text-align: center;
|
|
583
|
+
}
|
|
584
|
+
.font-mono {
|
|
585
|
+
font-family:
|
|
586
|
+
ui-monospace,
|
|
587
|
+
SFMono-Regular,
|
|
588
|
+
Menlo,
|
|
589
|
+
Monaco,
|
|
590
|
+
Consolas,
|
|
591
|
+
"Liberation Mono",
|
|
592
|
+
"Courier New",
|
|
593
|
+
monospace;
|
|
594
|
+
}
|
|
448
595
|
.text-2xl {
|
|
449
596
|
font-size: 1.5rem;
|
|
450
597
|
line-height: 2rem;
|
|
451
598
|
}
|
|
599
|
+
.text-3xl {
|
|
600
|
+
font-size: 1.875rem;
|
|
601
|
+
line-height: 2.25rem;
|
|
602
|
+
}
|
|
603
|
+
.text-4xl {
|
|
604
|
+
font-size: 2.25rem;
|
|
605
|
+
line-height: 2.5rem;
|
|
606
|
+
}
|
|
607
|
+
.text-\[0\.75rem\] {
|
|
608
|
+
font-size: 0.75rem;
|
|
609
|
+
}
|
|
610
|
+
.text-\[0\.875rem\] {
|
|
611
|
+
font-size: 0.875rem;
|
|
612
|
+
}
|
|
613
|
+
.text-lg {
|
|
614
|
+
font-size: 1.125rem;
|
|
615
|
+
line-height: 1.75rem;
|
|
616
|
+
}
|
|
452
617
|
.text-sm {
|
|
453
618
|
font-size: 0.875rem;
|
|
454
619
|
line-height: 1.25rem;
|
|
455
620
|
}
|
|
621
|
+
.text-xl {
|
|
622
|
+
font-size: 1.25rem;
|
|
623
|
+
line-height: 1.75rem;
|
|
624
|
+
}
|
|
625
|
+
.font-bold {
|
|
626
|
+
font-weight: 700;
|
|
627
|
+
}
|
|
456
628
|
.font-medium {
|
|
457
629
|
font-weight: 500;
|
|
458
630
|
}
|
|
459
631
|
.font-semibold {
|
|
460
632
|
font-weight: 600;
|
|
461
633
|
}
|
|
634
|
+
.italic {
|
|
635
|
+
font-style: italic;
|
|
636
|
+
}
|
|
462
637
|
.leading-none {
|
|
463
638
|
line-height: 1;
|
|
464
639
|
}
|
|
465
640
|
.tracking-tight {
|
|
466
641
|
letter-spacing: -0.025em;
|
|
467
642
|
}
|
|
643
|
+
.text-blue-600 {
|
|
644
|
+
--tw-text-opacity: 1;
|
|
645
|
+
color: rgb(37 99 235 / var(--tw-text-opacity, 1));
|
|
646
|
+
}
|
|
468
647
|
.text-card-foreground {
|
|
469
648
|
color: hsl(var(--card-foreground));
|
|
470
649
|
}
|
|
471
650
|
.text-destructive-foreground {
|
|
472
651
|
color: hsl(var(--destructive-foreground));
|
|
473
652
|
}
|
|
653
|
+
.text-green-500 {
|
|
654
|
+
--tw-text-opacity: 1;
|
|
655
|
+
color: rgb(34 197 94 / var(--tw-text-opacity, 1));
|
|
656
|
+
}
|
|
474
657
|
.text-muted-foreground {
|
|
475
658
|
color: hsl(var(--muted-foreground));
|
|
476
659
|
}
|
|
@@ -480,12 +663,28 @@ body {
|
|
|
480
663
|
.text-primary-foreground {
|
|
481
664
|
color: hsl(var(--primary-foreground));
|
|
482
665
|
}
|
|
666
|
+
.text-purple-600 {
|
|
667
|
+
--tw-text-opacity: 1;
|
|
668
|
+
color: rgb(147 51 234 / var(--tw-text-opacity, 1));
|
|
669
|
+
}
|
|
483
670
|
.text-secondary-foreground {
|
|
484
671
|
color: hsl(var(--secondary-foreground));
|
|
485
672
|
}
|
|
673
|
+
.underline {
|
|
674
|
+
text-decoration-line: underline;
|
|
675
|
+
}
|
|
676
|
+
.no-underline {
|
|
677
|
+
text-decoration-line: none;
|
|
678
|
+
}
|
|
486
679
|
.underline-offset-4 {
|
|
487
680
|
text-underline-offset: 4px;
|
|
488
681
|
}
|
|
682
|
+
.opacity-0 {
|
|
683
|
+
opacity: 0;
|
|
684
|
+
}
|
|
685
|
+
.opacity-100 {
|
|
686
|
+
opacity: 1;
|
|
687
|
+
}
|
|
489
688
|
.shadow-sm {
|
|
490
689
|
--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
491
690
|
--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
|
|
@@ -500,6 +699,15 @@ body {
|
|
|
500
699
|
.ring-offset-background {
|
|
501
700
|
--tw-ring-offset-color: hsl(var(--background));
|
|
502
701
|
}
|
|
702
|
+
.blur {
|
|
703
|
+
--tw-blur: blur(8px);
|
|
704
|
+
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
|
705
|
+
}
|
|
706
|
+
.transition-all {
|
|
707
|
+
transition-property: all;
|
|
708
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
709
|
+
transition-duration: 150ms;
|
|
710
|
+
}
|
|
503
711
|
.transition-colors {
|
|
504
712
|
transition-property:
|
|
505
713
|
color,
|
|
@@ -511,6 +719,17 @@ body {
|
|
|
511
719
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
512
720
|
transition-duration: 150ms;
|
|
513
721
|
}
|
|
722
|
+
.transition-opacity {
|
|
723
|
+
transition-property: opacity;
|
|
724
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
725
|
+
transition-duration: 150ms;
|
|
726
|
+
}
|
|
727
|
+
.duration-150 {
|
|
728
|
+
transition-duration: 150ms;
|
|
729
|
+
}
|
|
730
|
+
.ease-out {
|
|
731
|
+
transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
|
|
732
|
+
}
|
|
514
733
|
@keyframes enter {
|
|
515
734
|
from {
|
|
516
735
|
opacity: var(--tw-enter-opacity, 1);
|
|
@@ -523,6 +742,12 @@ body {
|
|
|
523
742
|
transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));
|
|
524
743
|
}
|
|
525
744
|
}
|
|
745
|
+
.duration-150 {
|
|
746
|
+
animation-duration: 150ms;
|
|
747
|
+
}
|
|
748
|
+
.ease-out {
|
|
749
|
+
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
|
|
750
|
+
}
|
|
526
751
|
.hover\:bg-accent:hover {
|
|
527
752
|
background-color: hsl(var(--accent));
|
|
528
753
|
}
|
|
@@ -532,8 +757,8 @@ body {
|
|
|
532
757
|
.hover\:bg-primary\/90:hover {
|
|
533
758
|
background-color: hsl(var(--primary) / 0.9);
|
|
534
759
|
}
|
|
535
|
-
.hover\:bg-secondary
|
|
536
|
-
background-color: hsl(var(--secondary)
|
|
760
|
+
.hover\:bg-secondary:hover {
|
|
761
|
+
background-color: hsl(var(--secondary));
|
|
537
762
|
}
|
|
538
763
|
.hover\:text-accent-foreground:hover {
|
|
539
764
|
color: hsl(var(--accent-foreground));
|
|
@@ -565,4 +790,18 @@ body {
|
|
|
565
790
|
.disabled\:opacity-50:disabled {
|
|
566
791
|
opacity: 0.5;
|
|
567
792
|
}
|
|
793
|
+
.data-\[state\=active\]\:bg-background[data-state=active] {
|
|
794
|
+
background-color: hsl(var(--background));
|
|
795
|
+
}
|
|
796
|
+
.data-\[state\=active\]\:text-foreground[data-state=active] {
|
|
797
|
+
color: hsl(var(--foreground));
|
|
798
|
+
}
|
|
799
|
+
.data-\[state\=active\]\:shadow-sm[data-state=active] {
|
|
800
|
+
--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
801
|
+
--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
|
|
802
|
+
box-shadow:
|
|
803
|
+
var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
804
|
+
var(--tw-ring-shadow, 0 0 #0000),
|
|
805
|
+
var(--tw-shadow);
|
|
806
|
+
}
|
|
568
807
|
/*# sourceMappingURL=index.css.map */
|