From c6424e3bff5b1f97758ca088f6418fd4469b302a Mon Sep 17 00:00:00 2001 From: Mauro Balades Date: Sun, 11 Aug 2024 18:51:59 +0200 Subject: [PATCH] feat: Add Table component for displaying tabular data --- public/floorp.png | Bin 0 -> 22075 bytes public/librewolf.png | Bin 0 -> 11385 bytes src/components/features.tsx | 174 +++++++++++------------ src/components/ui/neon-gradient-card.tsx | 144 +++++++++++++++++++ src/components/ui/table.tsx | 120 ++++++++++++++++ 5 files changed, 348 insertions(+), 90 deletions(-) create mode 100644 public/floorp.png create mode 100644 public/librewolf.png create mode 100644 src/components/ui/neon-gradient-card.tsx create mode 100644 src/components/ui/table.tsx diff --git a/public/floorp.png b/public/floorp.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0f295ca4a68996cf6fd546bce7581562f60c7b GIT binary patch literal 22075 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 CeIece literal 0 HcmV?d00001 diff --git a/public/librewolf.png b/public/librewolf.png new file mode 100644 index 0000000000000000000000000000000000000000..186866b6bc875b5d820c64a81cf9fe8fd6080a3e GIT binary patch literal 11385 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 Hu0mjfMaR`A literal 0 HcmV?d00001 diff --git a/src/components/features.tsx b/src/components/features.tsx index 3b0f377..473d670 100644 --- a/src/components/features.tsx +++ b/src/components/features.tsx @@ -4,104 +4,98 @@ import Feature, { FeatureCard } from "./feature"; import { Button } from "./ui/button"; import TextReveal from "./ui/text-reveal"; import styled, { css, keyframes } from "styled-components"; -import BlurFade from "./ui/blur-fade"; +import { + Table, + TableBody, + TableCaption, + TableCell, + TableFooter, + TableHead, + TableHeader, + TableRow, +} from './ui/table'; +import { CheckIcon, XIcon } from "lucide-react"; +import { QuestionMarkIcon } from "@radix-ui/react-icons"; -const profileColors = [ - "#e8cd7d", - "#C2E3B7", - "#EEDBF9", -]; +function Checkmark() { + return +} -const enterAnimation = keyframes` - from { - opacity: 0; - transform: translate(-50%, -50%) scale(0.5); - left: 100%; - } +function Cross() { + return +} - to { - opacity: 1; - transform: translate(-50%, -50%) scale(1); - left: 50%; - } -`; - -const exitAnimation = keyframes` - from { - opacity: 1; - transform: translate(-50%, -50%) scale(1); - left: 50%; - } - - to { - opacity: 0; - transform: translate(-50%, -50%) scale(0.5); - left: 0; - } -`; - -const ProfileImage = styled.img<{ enter: boolean }>` - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - width: 75%; - animation: ${({ enter }: any) => enter ? css`${enterAnimation} 0.5s` : css`${exitAnimation} 0.5s`} forwards; -`; +function Question() { + return +} export default function Features() { - const [currentProfileColor, setCurrentProfileColor] = useState(profileColors[0]); - const [profile1Enter, setProfile1Enter] = useState(false); - const [profile2Enter, setProfile2Enter] = useState(false); - const [profile3Enter, setProfile3Enter] = useState(false); - - useEffect(() => { - let currentProfile = 0; - setProfile1Enter(true); - setCurrentProfileColor(profileColors[currentProfile]); - - const profiles = document.querySelectorAll("#profile-1, #profile-2, #profile-3"); - setInterval(() => { - currentProfile = (currentProfile + 1) % profiles.length; - setProfile1Enter(currentProfile === 0); - setProfile2Enter(currentProfile === 1); - setProfile3Enter(currentProfile === 2); - setCurrentProfileColor(profileColors[currentProfile]); - }, 2500); - }, []); return (
{/**/} - - - Split Views - - - - - Split Views - - - - - - - - - +
+
+
+
+
+
+
+
+
+
+
+

Packed with features

+
+ + + + How Zen differs from other browsers + Zen + Floorp + LibreWolf + + + + + Contain fine-grained security measures like sandboxing + + + + + + Optimized for peak performance + + + + + + Customizable with cutting-edge features + + + + + + Based on the latest version of Firefox + + + + + + Updated regularly with new features and latest security patches + + + + + + Open-source + + + + + +
+
+

Want more?

Zen Browser is packed with features that will change the way you browse the web. Download it today and experience a new way to browse the web.

diff --git a/src/components/ui/neon-gradient-card.tsx b/src/components/ui/neon-gradient-card.tsx new file mode 100644 index 0000000..1d6a15c --- /dev/null +++ b/src/components/ui/neon-gradient-card.tsx @@ -0,0 +1,144 @@ +'use client' + +import type { CSSProperties, ReactElement, ReactNode } from 'react' +import { useEffect, useRef, useState } from 'react' +import { ny } from '@/lib/utils' + +interface NeonColorsProps { + firstColor: string + secondColor: string +} + +interface NeonGradientCardProps { + /** + * @default
+ * @type ReactElement + * @description + * The component to be rendered as the card + */ + as?: ReactElement + /** + * @default "" + * @type string + * @description + * The className of the card + */ + className?: string + + /** + * @default "" + * @type ReactNode + * @description + * The children of the card + */ + children?: ReactNode + + /** + * @default 5 + * @type number + * @description + * The size of the border in pixels + */ + borderSize?: number + + /** + * @default 20 + * @type number + * @description + * The size of the radius in pixels + */ + borderRadius?: number + + /** + * @default "{ firstColor: '#ff00aa', secondColor: '#00FFF1' }" + * @type string + * @description + * The colors of the neon gradient + */ + neonColors?: NeonColorsProps + + [key: string]: any +} + +const NeonGradientCard: React.FC = ({ + className, + children, + borderSize = 2, + borderRadius = 20, + neonColors = { + firstColor: '#ff00aa', + secondColor: '#00FFF1', + }, + ...props +}) => { + const containerRef = useRef(null) + const [dimensions, setDimensions] = useState({ width: 0, height: 0 }) + + useEffect(() => { + const updateDimensions = () => { + if (containerRef.current) { + const { offsetWidth, offsetHeight } = containerRef.current + setDimensions({ width: offsetWidth, height: offsetHeight }) + } + } + + updateDimensions() + window.addEventListener('resize', updateDimensions) + + return () => { + window.removeEventListener('resize', updateDimensions) + } + }, []) + + useEffect(() => { + if (containerRef.current) { + const { offsetWidth, offsetHeight } = containerRef.current + setDimensions({ width: offsetWidth, height: offsetHeight }) + } + }, [children]) + + return ( +
+
+ {children} +
+
+ ) +} + +export { NeonGradientCard } diff --git a/src/components/ui/table.tsx b/src/components/ui/table.tsx new file mode 100644 index 0000000..cd2454f --- /dev/null +++ b/src/components/ui/table.tsx @@ -0,0 +1,120 @@ +import * as React from 'react' + +import { ny } from '@/lib/utils' + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)) +Table.displayName = 'Table' + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableHeader.displayName = 'TableHeader' + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableBody.displayName = 'TableBody' + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0', + className, + )} + {...props} + /> +)) +TableFooter.displayName = 'TableFooter' + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableRow.displayName = 'TableRow' + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
[role=checkbox]]:translate-y-[2px]', + className, + )} + {...props} + /> +)) +TableHead.displayName = 'TableHead' + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + [role=checkbox]]:translate-y-[2px]', + className, + )} + {...props} + /> +)) +TableCell.displayName = 'TableCell' + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableCaption.displayName = 'TableCaption' + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +}