From caef70521256ef6b02d316c091ef2d0818d6cfb9 Mon Sep 17 00:00:00 2001 From: castrogarciajs Date: Wed, 4 Sep 2024 23:04:49 -0500 Subject: [PATCH] feat: create new component examples --- docs/components/banners/hero.tsx | 2 + docs/components/demo.tsx | 71 ++++++++ docs/components/examples.tsx | 155 ------------------ docs/components/examples/alert.tsx | 13 ++ docs/components/examples/dialog.tsx | 47 ++++++ .../examples/multiple-components.tsx | 126 ++++++++++++++ docs/components/examples/progress.tsx | 13 ++ docs/components/examples/table.tsx | 50 ++++++ docs/components/header.tsx | 2 +- docs/components/icons/arrow-left.tsx | 7 + docs/components/icons/arrow-right.tsx | 7 + docs/components/icons/arrow.tsx | 7 + docs/components/icons/chat.tsx | 12 ++ docs/components/icons/check.tsx | 12 ++ docs/components/icons/copy.tsx | 12 ++ docs/components/icons/search.tsx | 7 + docs/components/icons/terminal.tsx | 12 ++ docs/components/install-command.tsx | 10 +- docs/components/main.tsx | 4 +- docs/next.config.mjs | 1 + docs/public/example-gerzon.jpeg | Bin 0 -> 22637 bytes src/components/forms/input/input.tsx | 10 +- .../forms/select/select-trigger.tsx | 2 +- src/plugins/animations.ts | 2 +- src/plugins/components/button.ts | 2 +- src/plugins/components/dialog.ts | 6 +- src/plugins/components/input.ts | 33 ++-- src/plugins/components/progress.ts | 5 +- src/plugins/components/select.ts | 2 +- src/plugins/components/skeleton.ts | 2 +- src/plugins/components/table.ts | 10 +- src/plugins/components/tooltip.ts | 4 +- 32 files changed, 442 insertions(+), 206 deletions(-) create mode 100644 docs/components/demo.tsx delete mode 100644 docs/components/examples.tsx create mode 100644 docs/components/examples/alert.tsx create mode 100644 docs/components/examples/dialog.tsx create mode 100644 docs/components/examples/multiple-components.tsx create mode 100644 docs/components/examples/progress.tsx create mode 100644 docs/components/examples/table.tsx create mode 100644 docs/components/icons/arrow-left.tsx create mode 100644 docs/components/icons/arrow-right.tsx create mode 100644 docs/components/icons/arrow.tsx create mode 100644 docs/components/icons/chat.tsx create mode 100644 docs/components/icons/check.tsx create mode 100644 docs/components/icons/copy.tsx create mode 100644 docs/components/icons/search.tsx create mode 100644 docs/components/icons/terminal.tsx create mode 100644 docs/public/example-gerzon.jpeg diff --git a/docs/components/banners/hero.tsx b/docs/components/banners/hero.tsx index d073385..f6238f9 100644 --- a/docs/components/banners/hero.tsx +++ b/docs/components/banners/hero.tsx @@ -1,6 +1,7 @@ import { Button } from '@openlite/ui' import Link from 'next/link' import InstallCommand from '../install-command' +import { Arrow } from '../icons/arrow' export function Hero() { return ( @@ -23,6 +24,7 @@ export function Hero() { diff --git a/docs/components/demo.tsx b/docs/components/demo.tsx new file mode 100644 index 0000000..b71552d --- /dev/null +++ b/docs/components/demo.tsx @@ -0,0 +1,71 @@ +'use client' + +import { useState } from 'react' +import { + Button, + Card, + CardContent, + Input, + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from '@openlite/ui' +import { AlertDemo } from './examples/alert' +import { MultipleComponentDemo } from './examples/multiple-components' +import { TableDemo } from './examples/table' + +export default function Component() { + const [activeTab, setActiveTab] = useState('account') + + return ( +
+ + +
+ + + + + Account + Password + + +

Login

+

Make changes to your account here. Click save when you're done.

+
+
+ + +
+
+ + +
+ +
+
+ +

Create Account

+

Make changes to your account here. Click save when you're done.

+
+
+ + +
+
+ + +
+ +
+
+
+
+
+ +
+ +
+ ) +} diff --git a/docs/components/examples.tsx b/docs/components/examples.tsx deleted file mode 100644 index d1ff5e8..0000000 --- a/docs/components/examples.tsx +++ /dev/null @@ -1,155 +0,0 @@ -'use client' - -import { useState } from 'react' -import { - Avatar, - AvatarFallback, - AvatarImage, - Badge, - Button, - Card, - CardContent, - CardHeader, - CardTitle, - Checkbox, - Input, - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, - Slider, - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, - Tabs, - TabsContent, - TabsList, - TabsTrigger, -} from '@openlite/ui' - -export default function Component() { - const [activeTab, setActiveTab] = useState('account') - - return ( -
-
- -
-
- -
- - - AC - - - - BC - - +1 -
- - Badge -
- -
-
- -
- - - Notification - - -

This is a notification!

-
-
- - - -
- -
-
-
- - - - - - Account - Password - - -

Account

-

Make changes to your account here. Click save when you're done.

-
-
- - -
-
- - -
- -
-
- -

Password

-

Change your password here.

-
-
-
-
- - - - - - - - Id - Name - Title - Email - Role - - - - {[ - { id: 1, name: 'Lindsay Walton', title: 'Front-end Developer', email: 'lindsay.walton@example.com', role: 'Member' }, - { id: 2, name: 'Courtney Henry', title: 'Designer', email: 'courtney.henry@example.com', role: 'Admin' }, - { id: 3, name: 'Tom Cook', title: 'Director of Product', email: 'tom.cook@example.com', role: 'Member' }, - { id: 4, name: 'Whitney Francis', title: 'Copywriter', email: 'whitney.francis@example.com', role: 'Admin' }, - { id: 5, name: 'Leonard Krasner', title: 'Senior Designer', email: 'leonard.krasner@example.com', role: 'Owner' }, - ].map(person => ( - - - {person.id} - {person.name} - {person.title} - {person.email} - {person.role} - - ))} - -
-
-
-
-
- ) -} diff --git a/docs/components/examples/alert.tsx b/docs/components/examples/alert.tsx new file mode 100644 index 0000000..5bb8367 --- /dev/null +++ b/docs/components/examples/alert.tsx @@ -0,0 +1,13 @@ +import { Alert, AlertDescription, AlertTitle } from '@openlite/ui' +import { Chat } from '../icons/chat' + +export function AlertDemo() { + return ( + + + + You have a notification + Lorem ipsum dolor sit amet consectetur adipisicing elit. Est, asperiores. + + ) +} diff --git a/docs/components/examples/dialog.tsx b/docs/components/examples/dialog.tsx new file mode 100644 index 0000000..3e4fb35 --- /dev/null +++ b/docs/components/examples/dialog.tsx @@ -0,0 +1,47 @@ +import { + Button, + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, + Input, + Label, +} from '@openlite/ui' +import { Copy } from '../icons/copy' + +export function DialogDemo() { + return ( + + + + + + + Share link music + + Anyone who has this link will be able to view this. + + +
+
+ + +
+ +
+ +
+
+ ) +} diff --git a/docs/components/examples/multiple-components.tsx b/docs/components/examples/multiple-components.tsx new file mode 100644 index 0000000..4b92464 --- /dev/null +++ b/docs/components/examples/multiple-components.tsx @@ -0,0 +1,126 @@ +import { + Avatar, + AvatarFallback, + AvatarImage, + Badge, + Button, + Card, + CardContent, + Carousel, + CarouselContent, + CarouselItem, + CarouselNext, + CarouselPrevious, + Input, + + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, + Skeleton, + Slider, + + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@openlite/ui' +import Image from 'next/image' +import { ArrowLeft } from '../icons/arrow-left' +import { ArrowRight } from '../icons/arrow-right' + +import { Search } from '../icons/search' +import { DialogDemo } from './dialog' +import { ProgressDemo } from './progress' + +const items = [ + 'https://picsum.photos/100/100?random=1', + 'https://picsum.photos/100/100?random=2', + 'https://picsum.photos/100/100?random=3', + 'https://picsum.photos/100/100?random=4', + 'https://picsum.photos/100/100?random=5', + 'https://picsum.photos/100/100?random=6', +] + +export function MultipleComponentDemo() { + return ( + + +
+ +
+ + + AC + + + + BC + +
+ + Badge +
+ + +
+
+
+
+ + +
+ + + + + + +

Like a prayer - Maddona

+
+
+
+ + +
+
+ + +
+
+ + + {items.map((_, index) => ( + +
+ Isla bonitas +
+
+ ))} +
+ + + + + + +
+
+
+
+ ) +} diff --git a/docs/components/examples/progress.tsx b/docs/components/examples/progress.tsx new file mode 100644 index 0000000..006c8a4 --- /dev/null +++ b/docs/components/examples/progress.tsx @@ -0,0 +1,13 @@ +import { useEffect, useState } from 'react' +import { Progress } from '@openlite/ui' + +export function ProgressDemo() { + const [progress, setProgress] = useState(13) + + useEffect(() => { + const timer = setTimeout(() => setProgress(66), 500) + return () => clearTimeout(timer) + }, []) + + return +} diff --git a/docs/components/examples/table.tsx b/docs/components/examples/table.tsx new file mode 100644 index 0000000..0329fdb --- /dev/null +++ b/docs/components/examples/table.tsx @@ -0,0 +1,50 @@ +import { + Card, + CardContent, + Checkbox, + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@openlite/ui' + +export function TableDemo() { + return ( + + + + + + + Id + Name + Title + Email + Role + + + + {[ + { id: 1, name: 'Lindsay Walton', title: 'Front-end Developer', email: 'lindsay.walton@example.com', role: 'Member' }, + { id: 2, name: 'Courtney Henry', title: 'Designer', email: 'courtney.henry@example.com', role: 'Admin' }, + { id: 3, name: 'Tom Cook', title: 'Director of Product', email: 'tom.cook@example.com', role: 'Member' }, + { id: 4, name: 'Whitney Francis', title: 'Copywriter', email: 'whitney.francis@example.com', role: 'Admin' }, + { id: 5, name: 'Leonard Krasner', title: 'Senior Designer', email: 'leonard.krasner@example.com', role: 'Owner' }, + ].map(person => ( + + + {person.id} + {person.name} + {person.title} + {person.email} + {person.role} + + ))} + +
+
+
+ ) +} diff --git a/docs/components/header.tsx b/docs/components/header.tsx index 72d71b5..9593d82 100644 --- a/docs/components/header.tsx +++ b/docs/components/header.tsx @@ -25,7 +25,7 @@ function LinkRepo({ classes }: { classes: string }) { return (
-
diff --git a/docs/components/main.tsx b/docs/components/main.tsx index cf16559..1aada97 100644 --- a/docs/components/main.tsx +++ b/docs/components/main.tsx @@ -1,11 +1,11 @@ import { Hero } from './banners/hero' -import Examples from './examples' +import Demos from './demo' export default function Main() { return (
- +
) } diff --git a/docs/next.config.mjs b/docs/next.config.mjs index 74e58aa..4f3b0fd 100644 --- a/docs/next.config.mjs +++ b/docs/next.config.mjs @@ -6,6 +6,7 @@ const withMDX = createMDX() const config = { reactStrictMode: true, eslint: { ignoreDuringBuilds: true }, + images: { remotePatterns: [{ protocol: 'https', hostname: 'picsum.photos' }] }, } export default withMDX(config) diff --git a/docs/public/example-gerzon.jpeg b/docs/public/example-gerzon.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d09307ba0cf4a48abe020f48355f33983b392291 GIT binary patch literal 22637 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 literal 0 HcmV?d00001 diff --git a/src/components/forms/input/input.tsx b/src/components/forms/input/input.tsx index bbc1996..15e1ed4 100644 --- a/src/components/forms/input/input.tsx +++ b/src/components/forms/input/input.tsx @@ -3,21 +3,17 @@ import { cn, input } from '@/tailwind' import type { VariantProps } from '@/tailwind' export interface Comp extends HTMLInputElement {} -export interface Props extends React.InputHTMLAttributes, - VariantProps { - labelText?: string -} +export interface Props extends React.InputHTMLAttributes, VariantProps {} -const Input = React.forwardRef(({ className, rounded, icons, variant, labelText, type, ...props }, ref) => { +const Input = React.forwardRef(({ className, rounded, border, type, ...props }, ref) => { return (
-
) diff --git a/src/components/forms/select/select-trigger.tsx b/src/components/forms/select/select-trigger.tsx index c4eead7..c026f5b 100644 --- a/src/components/forms/select/select-trigger.tsx +++ b/src/components/forms/select/select-trigger.tsx @@ -16,7 +16,7 @@ const SelectTrigger = React.forwardRef(({ className, variant, child > {children} - + diff --git a/src/plugins/animations.ts b/src/plugins/animations.ts index 061a22d..902a64e 100644 --- a/src/plugins/animations.ts +++ b/src/plugins/animations.ts @@ -1,7 +1,7 @@ export const animations = { animation: { 'pulse': 'pulse 1s ease-in-out', - 'pop': 'pop 0.6s ease-out', + 'pop-in': 'pop 0.6s ease-out', 'pulse-fade-in': 'pulse-fade-in 0.3s ease-out', 'dialog-in': 'dialog-in 0.3s ease-out', 'dialog-out': 'dialog-out 0.3s ease-out', diff --git a/src/plugins/components/button.ts b/src/plugins/components/button.ts index 622d10d..68efa5b 100644 --- a/src/plugins/components/button.ts +++ b/src/plugins/components/button.ts @@ -25,7 +25,7 @@ export const button = cva( }, outline: { none: 'border-0', - default: 'border boder-default bg-transparent text-foreground hover:text-default-foreground hover:bg-default', + default: 'border border-default-300 bg-transparent text-foreground hover:bg-default-200', primary: 'border border-primary bg-transparent text-foreground hover:text-primary-foreground hover:bg-primary', error: 'border border-error bg-transparent text-foreground hover:text-error-foreground hover:bg-error', success: 'border border-success bg-transparent text-foreground hover:text-success-foreground hover:bg-success', diff --git a/src/plugins/components/dialog.ts b/src/plugins/components/dialog.ts index 8cea6e4..775dedd 100644 --- a/src/plugins/components/dialog.ts +++ b/src/plugins/components/dialog.ts @@ -34,7 +34,7 @@ export const dialogPortal = cva('') * // button elements * */ -export const dialogOverlay = cva('fixed inset-0 z-50 bg-black/80 data-[state=open]:dialog-in data-[state=closed]:dialog-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0') +export const dialogOverlay = cva('fixed inset-0 z-50 bg-default-200/50 data-[state=open]:animate-dialog-in data-[state=closed]:animate-dialog-out') /** * DialogClose wrapper **Class Variants** component @@ -70,7 +70,7 @@ export const dialogTrigger = cva('') * // button elements * */ -export const dialogContent = cva('fixed left-[50%] top-[50%] z-50 translate-x-[-50%] translate-y-[-50%] w-full max-w-lg p-6 shadow-medium rounded-medium bg-default duration-200') +export const dialogContent = cva('fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-dialog-in data-[state=closed]:animate-dialog-out sm:rounded-lg') /** * DialogHeader wrapper **Class Variants** component @@ -106,7 +106,7 @@ export const dialogFooter = cva('flex flex-col-reverse sm:flex-row sm:justify-en * // button elements * */ -export const dialogTitle = cva('text-large font-medium leading-none tracking-tight') +export const dialogTitle = cva('text-large font-medium leading-none tracking-tight text-foreground') /** * DialogDescription wrapper **Class Variants** component diff --git a/src/plugins/components/input.ts b/src/plugins/components/input.ts index 4f5ad69..d9405c3 100644 --- a/src/plugins/components/input.ts +++ b/src/plugins/components/input.ts @@ -8,31 +8,24 @@ import { cva } from 'class-variance-authority' * @example * */ -export const input = cva('h-10 w-full transition-colors rounded-medium border-2 bg-transparent px-4 py-2 text-medium ring-offset-background file:border-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0', { +export const input = cva('h-10 w-full transition-colors bg-transparent px-4 py-2 text-medium ring-offset-background file:border-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0', { variants: { - variant: { - default: 'border-default/30 focus-visible:border-default transition-border durations-500', - primary: 'border-primary/30 focus-visible:border-primary transition-border durations-500', - success: 'border-success/30 focus-visible:border-success transition-border durations-500', - warn: 'border-warn/30 focus-visible:border-warn transition-border durations-500', - error: 'border-error/30 focus-visible:border-error transition-border durations-500', - }, - icons: { - none: '', - left: 'pl-10', - right: 'pr-10', - both: 'px-10', - }, rounded: { none: 'rounded-none', - small: 'rounded-small', - medium: 'rounded-medium', - large: 'rounded-large', + sm: 'rounded-small', + md: 'rounded-medium', + lg: 'rounded-large', + }, + + border: { + none: 'border-none', + sm: 'border', + md: 'border-2', + lg: 'border-4', }, }, defaultVariants: { - variant: 'default', - icons: 'none', - rounded: 'none', + rounded: 'md', + border: 'sm', }, }) diff --git a/src/plugins/components/progress.ts b/src/plugins/components/progress.ts index 148b87d..1a7f0b3 100644 --- a/src/plugins/components/progress.ts +++ b/src/plugins/components/progress.ts @@ -11,7 +11,7 @@ import { cva } from 'class-variance-authority' *
*/ -export const progress = cva('relative bg-default w-96 overflow-hidden rounded-full', { +export const progress = cva('relative bg-default-300 md:min-w-96 overflow-hidden rounded-full', { variants: { size: { sm: 'h-2', @@ -37,6 +37,7 @@ export const progress = cva('relative bg-default w-96 overflow-hidden rounded-fu export const progressIndicator = cva('h-full relative w-full flex-1 transition-all rounded-full', { variants: { variant: { + default: 'bg-default', primary: 'bg-primary', success: 'bg-success', warn: 'bg-warn', @@ -44,6 +45,6 @@ export const progressIndicator = cva('h-full relative w-full flex-1 transition-a }, }, defaultVariants: { - variant: 'primary', + variant: 'default', }, }) diff --git a/src/plugins/components/select.ts b/src/plugins/components/select.ts index 6a7026a..c7e6202 100644 --- a/src/plugins/components/select.ts +++ b/src/plugins/components/select.ts @@ -46,7 +46,7 @@ export const selectValue = cva('') * // SelectTrigger elements * */ -export const selectTrigger = cva('flex relative h-10 w-64 items-center justify-between rounded-medium px-3 py-2 text-small ring-offset-transparent focus:outline-none focus:ring-2 focus:ring-transparent focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1', { +export const selectTrigger = cva('flex relative w-96 items-center justify-between rounded-medium px-3 py-2 text-small ring-offset-transparent focus:outline-none focus:ring-2 focus:ring-transparent focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1', { variants: { variant: { none: 'border-none', diff --git a/src/plugins/components/skeleton.ts b/src/plugins/components/skeleton.ts index a9c9287..fc02a62 100644 --- a/src/plugins/components/skeleton.ts +++ b/src/plugins/components/skeleton.ts @@ -10,7 +10,7 @@ import { cva } from 'class-variance-authority' * // Skeleton elements * */ -export const skeleton = cva('animate-pulse-infinite bg-default', { +export const skeleton = cva('animate-pulse bg-default-300', { variants: { rounded: { none: 'rounded-none', diff --git a/src/plugins/components/table.ts b/src/plugins/components/table.ts index ea89b21..89fbe15 100644 --- a/src/plugins/components/table.ts +++ b/src/plugins/components/table.ts @@ -22,7 +22,7 @@ export const table = cva('w-full caption-bottom text-small rounded-lg overflow-h * // TableHeader elements * */ -export const tableHeader = cva('[&_tr]:border-b [&_tr]:border-default') +export const tableHeader = cva('[&_tr]:border-b') /** * Table wrapper **Class Variants** component @@ -46,7 +46,7 @@ export const tableBody = cva('&_tr:last-child]:border-0') * // TableFooter elements * */ -export const tableFooter = cva('border-t bg-default/50 font-medium [&>tr]:last:border-b-0') +export const tableFooter = cva('border-t font-medium [&>tr]:last:border-b-0') /** * Table wrapper **Class Variants** component @@ -58,7 +58,7 @@ export const tableFooter = cva('border-t bg-default/50 font-medium [&>tr]:last:b * // TableRow elements * */ -export const tableRow = cva('border-b transition-colors hover:bg-default/30 border-b-default') +export const tableRow = cva('border-b transition-colors hover:bg-default-100') /** * Table wrapper **Class Variants** component @@ -70,7 +70,7 @@ export const tableRow = cva('border-b transition-colors hover:bg-default/30 bord * // TableHead elements * */ -export const tableHead = cva('h-12 px-4 text-left align-middle font-medium text-default-foreground [&:has([role=checkbox])]:pr-0') +export const tableHead = cva('h-12 px-4 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0') /** * Table wrapper **Class Variants** component @@ -94,4 +94,4 @@ export const tableCell = cva('p-4 align-middle [&:has([role=checkbox])]:pr-0') * // TableCaption elements * */ -export const tableCaption = cva('mt-4 text-sm text-default-foreground') +export const tableCaption = cva('mt-4 text-small text-default-foreground') diff --git a/src/plugins/components/tooltip.ts b/src/plugins/components/tooltip.ts index 362fd53..33c651a 100644 --- a/src/plugins/components/tooltip.ts +++ b/src/plugins/components/tooltip.ts @@ -22,7 +22,7 @@ export const tooltip = cva('') * // Tooltip elements * */ -export const tooltipTrigger = cva('px-2 py-1 text-white hover:animate-pop') +export const tooltipTrigger = cva('px-2 py-1 hover:animate-pop-in text-foreground') /** * Tooltip wrapper **Class Variants** component @@ -45,4 +45,4 @@ export const tooltipProvider = cva('') * // Tooltip elements * */ -export const tooltipContent = cva('z-50 w-fit max-w-72 px-2 py-1 !text-foreground bg-background border border-default rounded-medium text-small shadow-small animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2') +export const tooltipContent = cva('z-50 w-fit max-w-72 px-2 py-1 bg-background border rounded-medium text-small')