diff --git a/docker-compose.yml b/compose.yml similarity index 100% rename from docker-compose.yml rename to compose.yml diff --git a/packages/web/package.json b/packages/web/package.json index 30309fd..1e5e107 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -17,15 +17,19 @@ "dependencies": { "@apollo/client": "^3.6.9", "@headlessui/react": "^1.6.1", + "@ryanke/pandora": "^0.0.9", "@tailwindcss/typography": "^0.5.2", "autoprefixer": "^10.4.7", "classnames": "^2.3.1", + "concurrently": "^7.2.2", "copy-to-clipboard": "^3.3.1", "dayjs": "^1.11.1", + "deepmerge": "^4.2.2", "formik": "^2.2.9", "generate-avatar": "1.4.10", "graphql": "^16.5.0", "http-status-codes": "^2.2.0", + "lodash": "^4.17.21", "nanoid": "^3.3.4", "next": "12.2.0", "postcss": "^8.4.13", @@ -33,14 +37,12 @@ "react": "18.2.0", "react-dom": "^18.1.0", "react-feather": "^2.0.9", + "react-icons": "^4.4.0", "react-markdown": "^8.0.3", "rehype-raw": "^6.1.1", "remark-gfm": "^3.0.1", "swr": "^1.3.0", "tailwindcss": "^3.0.24", - "deepmerge": "^4.2.2", - "concurrently": "^7.2.2", - "lodash": "^4.17.21", "yup": "^0.32.11" }, "devDependencies": { diff --git a/packages/web/src/components/breadcrumbs.tsx b/packages/web/src/components/breadcrumbs.tsx deleted file mode 100644 index 2d66dbb..0000000 --- a/packages/web/src/components/breadcrumbs.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import classNames from 'classnames'; -import type { FC } from 'react'; -import { ArrowLeft } from 'react-feather'; -import { Link } from './link'; - -export const Breadcrumbs: FC<{ to: string; children: string; className?: string }> = ({ to, children, className }) => { - const classes = classNames('text-sm text-gray-500 flex items-center gap-1 hover:underline', className); - return ( - - {children} - - ); -}; diff --git a/packages/web/src/components/button.tsx b/packages/web/src/components/button.tsx deleted file mode 100644 index a1fca9f..0000000 --- a/packages/web/src/components/button.tsx +++ /dev/null @@ -1,64 +0,0 @@ -/* eslint-disable react/button-has-type */ -import classNames from 'classnames'; -import type { HTMLAttributes } from 'react'; -import { forwardRef } from 'react'; -import { Link } from './link'; -import { Spinner } from './spinner'; - -export interface ButtonProps extends Omit, 'prefix' | 'style'> { - href?: string; - disabled?: boolean; - style?: ButtonStyle; - loading?: boolean; - type?: 'submit' | 'reset' | 'button'; -} - -export enum ButtonStyle { - Primary = 'bg-purple-500 hover:bg-purple-400', - Secondary = 'bg-dark-600 hover:bg-dark-900', - Disabled = 'bg-dark-300 hover:bg-dark-400', -} - -export const Button = forwardRef( - ( - { href, disabled, className, type, children, loading, style = ButtonStyle.Primary, onClick, onKeyDown, ...rest }, - ref - ) => { - if (disabled) style = ButtonStyle.Disabled; - const onClickWrap = disabled ? undefined : onClick; - const onKeyDownWrap = disabled ? undefined : onKeyDown; - const classes = classNames( - 'flex items-center justify-center gap-2 w-full px-3 py-2 text-sm font-medium transition rounded truncate max-h-[2.65em]', - disabled && 'cursor-not-allowed', - className, - style - ); - - if (href) { - if (ref) { - throw new Error('Button cannot have ref and href'); - } - - return ( - - {children} {loading && } - - ); - } - - return ( - - ); - } -); diff --git a/packages/web/src/components/card.tsx b/packages/web/src/components/card.tsx deleted file mode 100644 index 404f69b..0000000 --- a/packages/web/src/components/card.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import classNames from 'classnames'; -import type { FC, HTMLAttributes } from 'react'; - -export const Card: FC> = ({ className, children, ...rest }) => { - const classes = classNames(className, 'p-4 bg-dark-200 rounded'); - return ( -
- {children} -
- ); -}; diff --git a/packages/web/src/components/container.tsx b/packages/web/src/components/container.tsx deleted file mode 100644 index 967859f..0000000 --- a/packages/web/src/components/container.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import classNames from 'classnames'; -import type { FC, ReactNode } from 'react'; - -export interface ContainerProps { - centerX?: boolean; - centerY?: boolean; - center?: boolean; - small?: boolean; - className?: string; - children: ReactNode; -} - -export const Container: FC = ({ - center, - centerX = center, - centerY = center, - className, - small, - children, -}) => { - const classes = classNames(className, 'px-4 mx-auto', { - 'sm:max-w-screen-sm md:max-w-screen-md lg:max-w-screen-lg xl:max-w-screen-xl': !small, - 'flex justify-center flex-col': centerX || centerY, - 'absolute top-16 bottom-0 right-0 left-0': centerY, - 'items-center': centerX, - 'max-w-xs': small, - }); - - return
{children}
; -}; diff --git a/packages/web/src/components/header/header.tsx b/packages/web/src/components/header/header.tsx index 3e27569..a877dd9 100644 --- a/packages/web/src/components/header/header.tsx +++ b/packages/web/src/components/header/header.tsx @@ -1,14 +1,11 @@ +import { Button, ButtonStyle, Container, useAsync, useOnClickOutside } from '@ryanke/pandora'; import classNames from 'classnames'; import { Fragment, memo, useRef, useState } from 'react'; import { Crop } from 'react-feather'; import { useResendVerificationEmailMutation } from '../../generated/graphql'; -import { useAsync } from '../../hooks/useAsync'; import { useConfig } from '../../hooks/useConfig'; -import { useOnClickOutside } from '../../hooks/useOnClickOutside'; import { usePaths } from '../../hooks/usePaths'; import { useUser } from '../../hooks/useUser'; -import { Button, ButtonStyle } from '../button'; -import { Container } from '../container'; import { Input } from '../input/input'; import { Link } from '../link'; import { HeaderUser } from './header-user'; @@ -92,7 +89,7 @@ export const Header = memo(() => {