diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js
index 02b7b80f..c3eb3c40 100644
--- a/frontend/.eslintrc.js
+++ b/frontend/.eslintrc.js
@@ -12,7 +12,7 @@ module.exports = {
node: true,
jest: true
},
- ignorePatterns: ['.eslintrc.js'],
+ ignorePatterns: ['.eslintrc.js', '*.config.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
diff --git a/frontend/.storybook/preview.js b/frontend/.storybook/preview.js
index 10f222ba..0f41f691 100644
--- a/frontend/.storybook/preview.js
+++ b/frontend/.storybook/preview.js
@@ -1,4 +1,4 @@
-import { darkTheme, lightTheme } from '../src/theme/theme'
+import { darkTheme, lightTheme } from '../src/theme'
import { ThemeProvider, CssBaseline } from '@mui/material'
export const parameters = {
diff --git a/frontend/package.json b/frontend/package.json
index dc916ec4..a7ba6413 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -7,6 +7,7 @@
"dependencies": {
"@emotion/react": "^11.9.0",
"@emotion/styled": "^11.8.1",
+ "@heroicons/react": "^2.0.12",
"@hookform/error-message": "^2.0.0",
"@kalidao/hooks": "^0.0.5",
"@mui/icons-material": "^5.6.2",
@@ -99,10 +100,13 @@
"@storybook/preset-create-react-app": "^4.1.2",
"@storybook/react": "^6.5.12",
"@storybook/testing-library": "^0.0.13",
+ "autoprefixer": "^10.4.12",
"babel-plugin-named-exports-order": "^0.0.2",
"eslint-plugin-storybook": "^0.6.4",
"husky": "^8.0.1",
+ "postcss": "^8.4.18",
"prop-types": "^15.8.1",
+ "tailwindcss": "^3.1.8",
"webpack": "^5.74.0"
},
"husky": {
diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js
new file mode 100644
index 00000000..33ad091d
--- /dev/null
+++ b/frontend/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 18bab9d1..5906ead4 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -1,3 +1,4 @@
+import './styles/tailwind.css'
import { Route, Routes } from 'react-router-dom'
import Landing from './pages/Landing'
import NotFound from './pages/NotFound'
diff --git a/frontend/src/layout/Page/index.tsx b/frontend/src/layout/Page/index.tsx
index 33d143c8..1701d613 100644
--- a/frontend/src/layout/Page/index.tsx
+++ b/frontend/src/layout/Page/index.tsx
@@ -1,183 +1,121 @@
-import ChevronLeftIcon from '@mui/icons-material/ChevronLeft'
-import MenuIcon from '@mui/icons-material/Menu'
-import { Avatar, Box, CssBaseline, IconButton, Toolbar, useMediaQuery, useTheme } from '@mui/material'
-import MuiAppBar, { AppBarProps as MuiAppBarProps } from '@mui/material/AppBar'
-import Container from '@mui/material/Container'
-import Divider from '@mui/material/Divider'
-import MuiDrawer from '@mui/material/Drawer'
-import Link from '@mui/material/Link'
-import List from '@mui/material/List'
-import { styled } from '@mui/material/styles'
-import Typography from '@mui/material/Typography'
-import { ReactNode, useState } from 'react'
-import { useParams } from 'react-router-dom'
-import { OWNER } from '../../constants'
-import { MainMenuItems, DaoMenuItems, SecondaryMenuItems } from '../../context/PageContext'
+import { ReactNode } from 'react'
import { ConnectButton } from '@rainbow-me/rainbowkit'
-import { useGetDAO } from '../../graph/getDAO'
-function Copyright(props: any) {
- return (
-
- {'Copyright © '}
-
- {OWNER.name}
- {' '}
- {new Date().getFullYear()}
- {'.'}
-
- )
+import { FolderIcon, HomeIcon, HandThumbUpIcon, UsersIcon } from '@heroicons/react/24/outline'
+
+function classNames(...classes: string[]) {
+ return classes.filter(Boolean).join(' ')
}
-const drawerWidth = 240
+export const PageLayout: React.FC<{ withDrawer?: boolean; children: ReactNode }> = (props) => {
+ return (
+
+
+
+
+
+
+
+
+
-interface AppBarProps extends MuiAppBarProps {
- open?: boolean
+
{props.children}
+
+
+ )
}
-const AppBar = styled(MuiAppBar, {
- shouldForwardProp: (prop) => prop !== 'open'
-})(({ theme, open }) => ({
- zIndex: theme.zIndex.drawer + 1,
- transition: theme.transitions.create(['width', 'margin'], {
- easing: theme.transitions.easing.sharp,
- duration: theme.transitions.duration.leavingScreen
- }),
- ...(open && {
- marginLeft: drawerWidth,
- width: `calc(100% - ${drawerWidth}px)`,
- transition: theme.transitions.create(['width', 'margin'], {
- easing: theme.transitions.easing.sharp,
- duration: theme.transitions.duration.enteringScreen
- })
- })
-}))
+const TopNav = () => {
+ return (
+
+ )
}
-export function PageLayout(props: PageLayoutProps) {
- const theme = useTheme()
+const TopNavLink: React.FC<{ children: ReactNode; href: string }> = (props) => {
+ // TODO
+ const isActive = false
- const isMobile = useMediaQuery(theme.breakpoints.down('md'))
- const [open, setOpen] = useState(props.withDrawer !== false && !isMobile)
+ return (
+
+ {props.children}
+
+ )
+}
+
+const SideNav = () => {
+ return (
+
+ )
+}
- const toggleDrawer = () => {
- setOpen(!open)
- }
+const SideNavLink: React.FC<{ children: ReactNode; href: string; icon: typeof HomeIcon }> = (props) => {
+ // TODO
+ const isActive = false
return (
-
-
-
-
-
- {props.withDrawer !== false ? (
-
-
-
- ) : (
- <>>
- )}
-
- Sporos DAO
-
-
- {isMyDaoLoaded && myDao?.token && `${myDao?.token?.name} (${myDao?.token?.symbol})`}
-
-
- {/*
-
- */}
-
-
-
-
- {props.withDrawer !== false ? (
-
-
-
-
-
-
-
-
- {MainMenuItems()}
-
- {DaoMenuItems()}
-
- {SecondaryMenuItems()}
-
-
- ) : (
- <>>
+
- theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[900],
- flexGrow: 1,
- height: '100vh',
- overflow: 'auto'
- }}
- >
-
-
- {props.children}
-
-
-
-
+ >
+
+
+ {props.children}
+
)
}
diff --git a/frontend/src/stories/Alert.stories.tsx b/frontend/src/stories/Alert.stories.tsx
new file mode 100644
index 00000000..00d3807e
--- /dev/null
+++ b/frontend/src/stories/Alert.stories.tsx
@@ -0,0 +1,29 @@
+import React from 'react'
+import { ComponentMeta } from '@storybook/react'
+import { Alert } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'Components/Alert',
+ component: Alert,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+export const Default = () => (
+ <>
+ This is an error alert — check it out!
+
+ This is a warning alert — check it out!
+
+ This is an info alert — check it out!
+
+ This is a success alert — check it out!
+ >
+)
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/Slider.stories.tsx b/frontend/src/stories/Slider.stories.tsx
new file mode 100644
index 00000000..637e453a
--- /dev/null
+++ b/frontend/src/stories/Slider.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Slider } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'Components/Slider',
+ component: Slider,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/Table.stories.tsx b/frontend/src/stories/Table.stories.tsx
new file mode 100644
index 00000000..3ec3a76b
--- /dev/null
+++ b/frontend/src/stories/Table.stories.tsx
@@ -0,0 +1,56 @@
+import React from 'react'
+import { ComponentMeta } from '@storybook/react'
+import { Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'Components/Table',
+ component: Table,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+function createData(name: string, calories: number, fat: number, carbs: number, protein: number) {
+ return { name, calories, fat, carbs, protein }
+}
+
+const rows = [
+ createData('Frozen yoghurt', 159, 6.0, 24, 4.0),
+ createData('Ice cream sandwich', 237, 9.0, 37, 4.3),
+ createData('Eclair', 262, 16.0, 24, 6.0),
+ createData('Cupcake', 305, 3.7, 67, 4.3),
+ createData('Gingerbread', 356, 16.0, 49, 3.9)
+]
+
+export const Default = () => (
+
+
+
+
+ Dessert (100g serving)
+ Calories
+ Fat (g)
+ Carbs (g)
+ Protein (g)
+
+
+
+ {rows.map((row) => (
+
+
+ {row.name}
+
+ {row.calories}
+ {row.fat}
+ {row.carbs}
+ {row.protein}
+
+ ))}
+
+
+
+)
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Accordion.stories.tsx b/frontend/src/stories/wip/Accordion.stories.tsx
new file mode 100644
index 00000000..79deb701
--- /dev/null
+++ b/frontend/src/stories/wip/Accordion.stories.tsx
@@ -0,0 +1,52 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Accordion, AccordionDetails, AccordionSummary, Typography } from '@mui/material'
+import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Accordion',
+ component: Accordion,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = () => (
+
+
+ } aria-controls="panel1a-content" id="panel1a-header">
+ Accordion 1
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit leo
+ lobortis eget.
+
+
+
+
+ } aria-controls="panel2a-content" id="panel2a-header">
+ Accordion 2
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit leo
+ lobortis eget.
+
+
+
+
+ } aria-controls="panel3a-content" id="panel3a-header">
+ Disabled Accordion
+
+
+
+)
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Autocomplete.stories.tsx b/frontend/src/stories/wip/Autocomplete.stories.tsx
new file mode 100644
index 00000000..cb01e155
--- /dev/null
+++ b/frontend/src/stories/wip/Autocomplete.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Autocomplete } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Autocomplete',
+ component: Autocomplete,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Avatar.stories.tsx b/frontend/src/stories/wip/Avatar.stories.tsx
new file mode 100644
index 00000000..515241e7
--- /dev/null
+++ b/frontend/src/stories/wip/Avatar.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Avatar } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Avatar',
+ component: Avatar,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Badge.stories.tsx b/frontend/src/stories/wip/Badge.stories.tsx
new file mode 100644
index 00000000..b5ca052f
--- /dev/null
+++ b/frontend/src/stories/wip/Badge.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Badge } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Badge',
+ component: Badge,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/BottonNavigation.stories.tsx b/frontend/src/stories/wip/BottonNavigation.stories.tsx
new file mode 100644
index 00000000..f28b24d8
--- /dev/null
+++ b/frontend/src/stories/wip/BottonNavigation.stories.tsx
@@ -0,0 +1,30 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { BottomNavigation, BottomNavigationAction } from '@mui/material'
+import RestoreIcon from '@mui/icons-material/Restore'
+import FavoriteIcon from '@mui/icons-material/Favorite'
+import LocationOnIcon from '@mui/icons-material/LocationOn'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/BottomNavigation',
+ component: BottomNavigation,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = () => (
+
+ } />
+ } />
+ } />
+
+)
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Breadcrumbs.stories.tsx b/frontend/src/stories/wip/Breadcrumbs.stories.tsx
new file mode 100644
index 00000000..7a3369ec
--- /dev/null
+++ b/frontend/src/stories/wip/Breadcrumbs.stories.tsx
@@ -0,0 +1,32 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Breadcrumbs } from '@mui/material'
+import { Link, Typography } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Breadcrumbs',
+ component: Breadcrumbs,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = () => (
+
+
+ MUI
+
+
+ Core
+
+ Breadcrumbs
+
+)
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/ButtonGroup.stories.tsx b/frontend/src/stories/wip/ButtonGroup.stories.tsx
new file mode 100644
index 00000000..cf86d948
--- /dev/null
+++ b/frontend/src/stories/wip/ButtonGroup.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { ButtonGroup } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/ButtonGroup',
+ component: ButtonGroup,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Checkbox.stories.tsx b/frontend/src/stories/wip/Checkbox.stories.tsx
new file mode 100644
index 00000000..4cc6b127
--- /dev/null
+++ b/frontend/src/stories/wip/Checkbox.stories.tsx
@@ -0,0 +1,20 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Checkbox } from '@mui/material'
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Checkbox',
+ component: Checkbox,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/CircularProgress.stories.tsx b/frontend/src/stories/wip/CircularProgress.stories.tsx
new file mode 100644
index 00000000..832c3a6b
--- /dev/null
+++ b/frontend/src/stories/wip/CircularProgress.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { CircularProgress } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/CircularProgress',
+ component: CircularProgress,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Divider.stories.tsx b/frontend/src/stories/wip/Divider.stories.tsx
new file mode 100644
index 00000000..f97bc926
--- /dev/null
+++ b/frontend/src/stories/wip/Divider.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Divider } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Divider',
+ component: Divider,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Fab.stories.tsx b/frontend/src/stories/wip/Fab.stories.tsx
new file mode 100644
index 00000000..31be4bf0
--- /dev/null
+++ b/frontend/src/stories/wip/Fab.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Fab } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Fab',
+ component: Fab,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Link.stories.tsx b/frontend/src/stories/wip/Link.stories.tsx
new file mode 100644
index 00000000..4e481fbd
--- /dev/null
+++ b/frontend/src/stories/wip/Link.stories.tsx
@@ -0,0 +1,31 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Link } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Link',
+ component: Link,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = () => (
+ <>
+ Link
+
+ {'color="inherit"'}
+
+
+ {'variant="body2"'}
+
+ >
+)
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Paper.stories.tsx b/frontend/src/stories/wip/Paper.stories.tsx
new file mode 100644
index 00000000..e4897c9e
--- /dev/null
+++ b/frontend/src/stories/wip/Paper.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Paper } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Paper',
+ component: Paper,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/RadioGroup.stories.tsx b/frontend/src/stories/wip/RadioGroup.stories.tsx
new file mode 100644
index 00000000..30e788b6
--- /dev/null
+++ b/frontend/src/stories/wip/RadioGroup.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { RadioGroup } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/RadioGroup',
+ component: RadioGroup,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Rating.stories.tsx b/frontend/src/stories/wip/Rating.stories.tsx
new file mode 100644
index 00000000..72173f49
--- /dev/null
+++ b/frontend/src/stories/wip/Rating.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Rating } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Rating',
+ component: Rating,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Select.stories.tsx b/frontend/src/stories/wip/Select.stories.tsx
new file mode 100644
index 00000000..3683385e
--- /dev/null
+++ b/frontend/src/stories/wip/Select.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Select } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Select',
+ component: Select,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Stepper.stories.tsx b/frontend/src/stories/wip/Stepper.stories.tsx
new file mode 100644
index 00000000..02c86849
--- /dev/null
+++ b/frontend/src/stories/wip/Stepper.stories.tsx
@@ -0,0 +1,31 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Box, Step, StepLabel, Stepper } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Stepper',
+ component: Stepper,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+const steps = ['Select master blaster campaign settings', 'Create an ad group', 'Create an ad']
+
+export const Default = () => (
+
+
+ {steps.map((label) => (
+
+ {label}
+
+ ))}
+
+
+)
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Switch.stories.tsx b/frontend/src/stories/wip/Switch.stories.tsx
new file mode 100644
index 00000000..70ab10bf
--- /dev/null
+++ b/frontend/src/stories/wip/Switch.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Switch } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Switch',
+ component: Switch,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Tabs.stories.tsx b/frontend/src/stories/wip/Tabs.stories.tsx
new file mode 100644
index 00000000..c2b186ba
--- /dev/null
+++ b/frontend/src/stories/wip/Tabs.stories.tsx
@@ -0,0 +1,79 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { Box, Tab, Tabs, Typography } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Tabs',
+ component: Tabs,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+interface TabPanelProps {
+ children?: React.ReactNode
+ index: number
+ value: number
+}
+
+function TabPanel(props: TabPanelProps) {
+ const { children, value, index, ...other } = props
+
+ return (
+
+ {value === index && (
+
+ {children}
+
+ )}
+
+ )
+}
+
+function a11yProps(index: number) {
+ return {
+ id: `simple-tab-${index}`,
+ 'aria-controls': `simple-tabpanel-${index}`
+ }
+}
+
+export const Default = () => {
+ const [value, setValue] = React.useState(0)
+ const handleChange = (event: React.SyntheticEvent, newValue: number) => {
+ setValue(newValue)
+ }
+ return (
+ <>
+
+
+
+
+
+
+
+
+ Item One
+
+
+ Item Two
+
+
+ Item Three
+
+ >
+ )
+}
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/ToggleButton.stories.tsx b/frontend/src/stories/wip/ToggleButton.stories.tsx
new file mode 100644
index 00000000..592bf573
--- /dev/null
+++ b/frontend/src/stories/wip/ToggleButton.stories.tsx
@@ -0,0 +1,21 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { ToggleButton } from '@mui/material'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/ToggleButton',
+ component: ToggleButton,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = Template.bind({})
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/stories/wip/Tooltip.stories.tsx b/frontend/src/stories/wip/Tooltip.stories.tsx
new file mode 100644
index 00000000..00efc7bb
--- /dev/null
+++ b/frontend/src/stories/wip/Tooltip.stories.tsx
@@ -0,0 +1,28 @@
+import React from 'react'
+import { ComponentMeta, ComponentStory } from '@storybook/react'
+import { IconButton, Tooltip } from '@mui/material'
+import DeleteIcon from '@mui/icons-material/Delete'
+
+// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
+export default {
+ title: 'WIP/Tooltip',
+ component: Tooltip,
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
+ parameters: {}
+} as ComponentMeta
+
+// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+
+const Template: ComponentStory = (args) =>
+
+export const Default = () => (
+
+
+
+
+
+)
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
+Default.args = {}
+
+// More on args: https://storybook.js.org/docs/react/writing-stories/args
diff --git a/frontend/src/styles/tailwind.css b/frontend/src/styles/tailwind.css
new file mode 100644
index 00000000..bd6213e1
--- /dev/null
+++ b/frontend/src/styles/tailwind.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
\ No newline at end of file
diff --git a/frontend/src/theme/colorPalette.ts b/frontend/src/theme/colorPalette.ts
index e808f9a0..60906323 100644
--- a/frontend/src/theme/colorPalette.ts
+++ b/frontend/src/theme/colorPalette.ts
@@ -39,10 +39,16 @@ export const colors = {
},
success: {
700: '#027A48',
- 50: '#ECFDF3'
+ 600: '#039855',
+ 300: '#6CE9A6',
+ 50: '#ECFDF3',
+ 25: '#F6FEF9'
},
warning: {
700: '#B54708',
- 50: '#FFFAEB'
+ 600: '#DC6803',
+ 300: '#FEC84B',
+ 50: '#FFFAEB',
+ 25: '#FFFCF5'
}
}
diff --git a/frontend/src/theme/index.tsx b/frontend/src/theme/index.tsx
index 86c25397..606e1a86 100644
--- a/frontend/src/theme/index.tsx
+++ b/frontend/src/theme/index.tsx
@@ -47,6 +47,11 @@ export const lightTheme = createTheme({
MuiTextField: MuiComponentConfig.TextField,
MuiPagination: MuiComponentConfig.Pagination,
MuiModal: MuiComponentConfig.Modal,
- MuiDialog: MuiComponentConfig.Dialog
+ MuiDialog: MuiComponentConfig.Dialog,
+ MuiSlider: MuiComponentConfig.Slider,
+ MuiAlert: MuiComponentConfig.Alert,
+ MuiTable: MuiComponentConfig.Table,
+ MuiTableHead: MuiComponentConfig.TableHead,
+ MuiTableCell: MuiComponentConfig.TableCell
}
})
diff --git a/frontend/src/theme/muiComponentConfig/MuiAlert.ts b/frontend/src/theme/muiComponentConfig/MuiAlert.ts
new file mode 100644
index 00000000..5c445027
--- /dev/null
+++ b/frontend/src/theme/muiComponentConfig/MuiAlert.ts
@@ -0,0 +1,56 @@
+import { Components } from '@mui/material'
+import { colors } from '../colorPalette'
+
+export const MuiAlert: Components['MuiAlert'] = {
+ styleOverrides: {
+ root: {
+ '& .MuiAlert-message': {
+ fontSize: '14px'
+ }
+ },
+ standardError: {
+ backgroundColor: colors.error[25],
+ border: `1px solid ${colors.error[300]}`,
+ borderRadius: '8px',
+ '& .MuiAlert-message': {
+ color: colors.error[600]
+ },
+ '& .MuiAlert-icon': {
+ color: colors.error[600]
+ }
+ },
+ standardWarning: {
+ backgroundColor: colors.warning[25],
+ border: `1px solid ${colors.warning[300]}`,
+ borderRadius: '8px',
+ '& .MuiAlert-message': {
+ color: colors.warning[600]
+ },
+ '& .MuiAlert-icon': {
+ color: colors.warning[600]
+ }
+ },
+ standardInfo: {
+ backgroundColor: colors.gray[25],
+ border: `1px solid ${colors.gray[300]}`,
+ borderRadius: '8px',
+ '& .MuiAlert-message': {
+ color: colors.gray[700]
+ },
+ '& .MuiAlert-icon': {
+ color: colors.gray[700]
+ }
+ },
+ standardSuccess: {
+ backgroundColor: colors.success[25],
+ border: `1px solid ${colors.success[300]}`,
+ borderRadius: '8px',
+ '& .MuiAlert-message': {
+ color: colors.success[600]
+ },
+ '& .MuiAlert-icon': {
+ color: colors.success[600]
+ }
+ }
+ }
+}
diff --git a/frontend/src/theme/muiComponentConfig/MuiSlider.ts b/frontend/src/theme/muiComponentConfig/MuiSlider.ts
new file mode 100644
index 00000000..c7b75740
--- /dev/null
+++ b/frontend/src/theme/muiComponentConfig/MuiSlider.ts
@@ -0,0 +1,25 @@
+import { Components } from '@mui/material'
+import { colors } from '../colorPalette'
+export const MuiSliderConfig: Components['MuiSlider'] = {
+ styleOverrides: {
+ root: {
+ height: '8px'
+ },
+ thumbColorPrimary: {
+ height: '24px',
+ width: '24px',
+ backgroundColor: '#fff',
+ border: `2px solid ${colors.primary[600]}`,
+ '&:hover': {
+ boxShadow: 'none'
+ },
+ '&.Mui-focusVisible': {
+ boxShadow: 'none'
+ }
+ },
+ rail: {
+ backgroundColor: colors.gray[200],
+ opacity: 1
+ }
+ }
+}
diff --git a/frontend/src/theme/muiComponentConfig/MuiTable.ts b/frontend/src/theme/muiComponentConfig/MuiTable.ts
new file mode 100644
index 00000000..8896fc9b
--- /dev/null
+++ b/frontend/src/theme/muiComponentConfig/MuiTable.ts
@@ -0,0 +1,10 @@
+import { Components } from '@mui/material'
+import { colors } from '../colorPalette'
+export const MuiTable: Components['MuiTable'] = {
+ styleOverrides: {
+ root: {
+ border: `1px solid ${colors.gray[200]}`,
+ borderRadius: '8px'
+ }
+ }
+}
diff --git a/frontend/src/theme/muiComponentConfig/MuiTableCell.ts b/frontend/src/theme/muiComponentConfig/MuiTableCell.ts
new file mode 100644
index 00000000..559ee170
--- /dev/null
+++ b/frontend/src/theme/muiComponentConfig/MuiTableCell.ts
@@ -0,0 +1,18 @@
+import { Components } from '@mui/material'
+import { colors } from '../colorPalette'
+export const MuiTableCell: Components['MuiTableCell'] = {
+ styleOverrides: {
+ root: {
+ padding: '16px 24px',
+ fontSize: '14px',
+ lineHeight: '20px'
+ },
+ head: {
+ color: colors.gray[500],
+ fontSize: '12px',
+ padding: '13px 24px',
+ fontWeight: 500,
+ lineHeight: '16px'
+ }
+ }
+}
diff --git a/frontend/src/theme/muiComponentConfig/MuiTableHead.ts b/frontend/src/theme/muiComponentConfig/MuiTableHead.ts
new file mode 100644
index 00000000..92a9b13c
--- /dev/null
+++ b/frontend/src/theme/muiComponentConfig/MuiTableHead.ts
@@ -0,0 +1,9 @@
+import { Components } from '@mui/material'
+import { colors } from '../colorPalette'
+export const MuiTableHead: Components['MuiTableHead'] = {
+ styleOverrides: {
+ root: {
+ backgroundColor: colors.gray[100]
+ }
+ }
+}
diff --git a/frontend/src/theme/muiComponentConfig/index.ts b/frontend/src/theme/muiComponentConfig/index.ts
index 6c1ad2cf..72a7821a 100644
--- a/frontend/src/theme/muiComponentConfig/index.ts
+++ b/frontend/src/theme/muiComponentConfig/index.ts
@@ -9,6 +9,11 @@ import { MuiToolbarConfig } from './MuiToolbar'
import { MuiDialogConfig } from './MuiDialog'
import { MuiModalConfig } from './MuiModal'
import { MuiPaginationConfig } from './MuiPagination'
+import { MuiSliderConfig } from './MuiSlider'
+import { MuiAlert } from './MuiAlert'
+import { MuiTable } from './MuiTable'
+import { MuiTableCell } from './MuiTableCell'
+import { MuiTableHead } from './MuiTableHead'
export const MuiComponentConfig = {
Button: MuiButtonConfig,
@@ -21,5 +26,10 @@ export const MuiComponentConfig = {
Toolbar: MuiToolbarConfig,
Dialog: MuiDialogConfig,
Modal: MuiModalConfig,
- Pagination: MuiPaginationConfig
+ Pagination: MuiPaginationConfig,
+ Slider: MuiSliderConfig,
+ Alert: MuiAlert,
+ Table: MuiTable,
+ TableCell: MuiTableCell,
+ TableHead: MuiTableHead
}
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
new file mode 100644
index 00000000..115da8ea
--- /dev/null
+++ b/frontend/tailwind.config.js
@@ -0,0 +1,9 @@
+module.exports = {
+ content: [
+ "./src/**/*.{js,jsx,ts,tsx}",
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index bbe28594..7b0a61d5 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -2813,6 +2813,11 @@
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
+"@heroicons/react@^2.0.12":
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.12.tgz#7e5a16c82512f89a30266dd36f8b8465b3e3e216"
+ integrity sha512-FZxKh3i9aKIDxyALTgIpSF2t6V6/eZfF5mRu41QlwkX3Oxzecdm1u6dpft6PQGxIBwO7TKYWaMAYYL8mp/EaOg==
+
"@hookform/error-message@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@hookform/error-message/-/error-message-2.0.0.tgz#9b1b037fd816ea9b1531c06aa7fab5f5154aa740"
@@ -6205,7 +6210,7 @@ are-we-there-yet@^2.0.0:
delegates "^1.0.0"
readable-stream "^3.6.0"
-arg@^5.0.1:
+arg@^5.0.1, arg@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
@@ -6417,6 +6422,18 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+autoprefixer@^10.4.12:
+ version "10.4.12"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.12.tgz#183f30bf0b0722af54ee5ef257f7d4320bb33129"
+ integrity sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==
+ dependencies:
+ browserslist "^4.21.4"
+ caniuse-lite "^1.0.30001407"
+ fraction.js "^4.2.0"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
autoprefixer@^10.4.7:
version "10.4.7"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf"
@@ -7010,7 +7027,7 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4
node-releases "^2.0.5"
picocolors "^1.0.0"
-browserslist@^4.12.0, browserslist@^4.21.3:
+browserslist@^4.12.0, browserslist@^4.21.3, browserslist@^4.21.4:
version "4.21.4"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987"
integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==
@@ -7280,6 +7297,11 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001400:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001402.tgz#aa29e1f47f5055b0d0c07696a67b8b08023d14c8"
integrity sha512-Mx4MlhXO5NwuvXGgVb+hg65HZ+bhUYsz8QtDGDo2QmaJS2GBX47Xfi2koL86lc8K+l+htXeTEB/Aeqvezoo6Ew==
+caniuse-lite@^1.0.30001407:
+ version "1.0.30001418"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz#5f459215192a024c99e3e3a53aac310fc7cf24e6"
+ integrity sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==
+
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@@ -12367,6 +12389,11 @@ lilconfig@^2.0.3, lilconfig@^2.0.5:
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25"
integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==
+lilconfig@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4"
+ integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==
+
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -14472,6 +14499,15 @@ postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.4, postcss@^8.4.7:
picocolors "^1.0.0"
source-map-js "^1.0.2"
+postcss@^8.4.18:
+ version "8.4.18"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.18.tgz#6d50046ea7d3d66a85e0e782074e7203bc7fbca2"
+ integrity sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==
+ dependencies:
+ nanoid "^3.3.4"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
preact@10.4.1:
version "10.4.1"
resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431"
@@ -15493,7 +15529,7 @@ resolve@^1.1.7, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-resolve@^1.10.0, resolve@^1.3.2:
+resolve@^1.10.0, resolve@^1.22.1, resolve@^1.3.2:
version "1.22.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
@@ -16631,6 +16667,34 @@ tailwindcss@^3.0.2:
quick-lru "^5.1.1"
resolve "^1.22.0"
+tailwindcss@^3.1.8:
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.8.tgz#4f8520550d67a835d32f2f4021580f9fddb7b741"
+ integrity sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==
+ dependencies:
+ arg "^5.0.2"
+ chokidar "^3.5.3"
+ color-name "^1.1.4"
+ detective "^5.2.1"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.2.11"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ lilconfig "^2.0.6"
+ normalize-path "^3.0.0"
+ object-hash "^3.0.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.14"
+ postcss-import "^14.1.0"
+ postcss-js "^4.0.0"
+ postcss-load-config "^3.1.4"
+ postcss-nested "5.0.6"
+ postcss-selector-parser "^6.0.10"
+ postcss-value-parser "^4.2.0"
+ quick-lru "^5.1.1"
+ resolve "^1.22.1"
+
tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"