diff --git a/apps/web/index.html b/apps/web/index.html index ef4d4065309f84f55011e0f2ae1b6a05e03e4df1..1f53c36c99a343b00e20aab44339eda4e15c765c 100644 --- a/apps/web/index.html +++ b/apps/web/index.html @@ -1,13 +1,19 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="UTF-8" /> - <link rel="icon" type="image/svg+xml" href="/vite.svg" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Vite + React + TS</title> - </head> - <body> - <div id="root"></div> - <script type="module" src="./src/main.tsx"></script> - </body> -</html> +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <title>Graphpolaris</title> + <base href="/" /> + <meta name="description" content="Graphpolaris" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vite + React + TS</title> + <link rel="preconnect" href="https://fonts.googleapis.com" /> + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> + <link href="https://fonts.googleapis.com/css2?family=Inter&display=swap" rel="stylesheet" /> + </head> + <body> + <div id="root" data-theme="graphpolaris"></div> + <script type="module" src="./src/main.tsx"></script> + </body> +</html> diff --git a/apps/web/package.json b/apps/web/package.json index 24c4e5bfc0da9e8dc4326f8cf8e9f0efe279d257..9b3f0a9d08fb88dd13e586dd3caa0d0c53a501da 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,49 +1,55 @@ -{ - "name": "web", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev2": "vite --host local.graphpolaris.com --port 4200", - "dev": "vite --port 4200", - "build": "tsc && vite build", - "build-dev": "tsc && vite build --mode development", - "preview": "vite preview", - "lint": "eslint *.ts*", - "test": "vitest run" - }, - "dependencies": { - "@graphpolaris/shared": "workspace:*", - "@mui/base": "5.0.0-alpha.118", - "@mui/icons-material": "^5.11.11", - "@mui/material": "^5.11.13", - "@reduxjs/toolkit": "^1.9.2", - "graphology": "^0.25.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-grid-layout": "^1.3.4", - "react-redux": "^8.0.5", - "react-router-dom": "^6.8.1", - "reactflow": "11.4.0-next.1", - "styled-components": "^5.3.6" - }, - "devDependencies": { - "@storybook/react": "7.0.0-rc.5", - "@testing-library/react": "14.0.0", - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", - "@types/react-grid-layout": "^1.3.2", - "@types/styled-components": "^5.1.26", - "@vitejs/plugin-basic-ssl": "^1.0.1", - "@vitejs/plugin-react-swc": "^3.0.0", - "autoprefixer": "^10.4.14", - "graphology-types": "^0.24.7", - "postcss": "^8.4.21", - "react-is": "^18.2.0", - "tailwindcss": "^3.3.1", - "typescript": "^4.9.3", - "vite": "^4.2.0", - "vite-plugin-dts": "^2.1.0", - "vitest": "^0.29.2" - } -} +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev2": "vite --host local.graphpolaris.com --port 4200", + "dev": "vite --port 4200", + "build": "tsc && vite build", + "build-dev": "tsc && vite build --mode development", + "preview": "vite preview", + "lint": "eslint *.ts*", + "test": "vitest run" + }, + "dependencies": { + "@graphpolaris/shared": "workspace:*", + "@mui/base": "5.0.0-alpha.118", + "@mui/icons-material": "^5.11.11", + "@mui/material": "^5.11.13", + "@reduxjs/toolkit": "^1.9.2", + "graphology": "^0.25.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-grid-layout": "^1.3.4", + "react-redux": "^8.0.5", + "react-router-dom": "^6.8.1", + "reactflow": "11.4.0-next.1", + "styled-components": "^5.3.6" + }, + "devDependencies": { + "@iconify/json": "^2.2.95", + "@storybook/react": "7.0.0-rc.5", + "@svgr/core": "^8.0.0", + "@svgr/plugin-jsx": "^8.0.1", + "@tailwindcss/typography": "^0.5.9", + "@testing-library/react": "14.0.0", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@types/react-grid-layout": "^1.3.2", + "@types/styled-components": "^5.1.26", + "@vitejs/plugin-basic-ssl": "^1.0.1", + "@vitejs/plugin-react-swc": "^3.0.0", + "autoprefixer": "^10.4.14", + "daisyui": "^3.5.0", + "graphology-types": "^0.24.7", + "postcss": "^8.4.21", + "react-is": "^18.2.0", + "tailwindcss": "^3.3.1", + "typescript": "^4.9.3", + "unplugin-icons": "^0.16.5", + "vite": "^4.2.0", + "vite-plugin-dts": "^2.1.0", + "vitest": "^0.29.2" + } +} diff --git a/apps/web/src/app/app.tsx b/apps/web/src/app/app.tsx index c616b6452aca9754acfd38ccee16dcc4f3e84364..6e10743933cb5a7af4b86c354428f86a1d149d78 100644 --- a/apps/web/src/app/app.tsx +++ b/apps/web/src/app/app.tsx @@ -97,7 +97,7 @@ export function App(props: App) { return ( <div className="h-screen w-screen"> <div className={'flex h-screen w-screen overflow-hidden ' + (!auth.authorized ? 'blur-sm pointer-events-none ' : '')}> - <div className="h-full relative flex flex-col flex-1 overflow-y-auto overflow-x-hidden"> + <div className="h-full relative flex flex-col flex-1 overflow-y-hidden overflow-x-hidden bg-base-content"> <div className="h-fit flex-grow-0"> <Navbar /> </div> diff --git a/apps/web/src/components/navbar/AddDatabaseForm/index.tsx b/apps/web/src/components/navbar/AddDatabaseForm/index.tsx index 8df366cd416b8e49c60c86a967121b9175cf05ed..51cd9c181d7bffaed81453f6ff1b98981e8aeb51 100644 --- a/apps/web/src/components/navbar/AddDatabaseForm/index.tsx +++ b/apps/web/src/components/navbar/AddDatabaseForm/index.tsx @@ -15,7 +15,6 @@ import { AddDatabaseRequest, DatabaseType, databaseNameMapping, databaseProtocol /** AddDatabaseFormProps is an interface containing the AuthViewModel. */ export interface AddDatabaseFormProps { - styles: any; open: boolean; onClose(): void; onSubmit(data: AddDatabaseRequest): void; diff --git a/apps/web/src/components/navbar/navbar.module.scss b/apps/web/src/components/navbar/navbar.module.scss index 339c62c0bdcfd45e3d48f1e0b69cde6fb1519d08..6504cf40b1b320ad2cf1ce7b1feeb8cc807859ba 100644 --- a/apps/web/src/components/navbar/navbar.module.scss +++ b/apps/web/src/components/navbar/navbar.module.scss @@ -1,44 +1,42 @@ -.root { - display: flex; - overflow: hidden; - height: 50px; -} - -.appBar { - display: flex; - flex-direction: column; - justify-content: center; - background-color: #fff; - height: 50px; -} - -.menubox { - display: flex; - flex-direction: row; - justify-content: flex-end; - width: 100%; -} - -.menuText { - margin: 5px; - color: #181520; - font-family: Poppins, sans-serif; - font-weight: 400; - font-size: 15px; - align-self: flex-end; - text-transform: none; -} - -.logo { - margin: auto; - display: block; -} - -.loginButton { - margin: 6px; -} - -.loginButtonText { - color: black; - font-weight: bold; -} +// .root { +// display: flex; +// overflow: hidden; +// height: 50px; +// } + +// .appBar { +// display: flex; +// flex-direction: column; +// justify-content: center; +// height: 50px; +// } + +// .menubox { +// display: flex; +// flex-direction: row; +// justify-content: flex-end; +// width: 100%; +// } + +// .menuText { +// margin: 5px; +// color: #181520; +// font-weight: 400; +// font-size: 15px; +// align-self: flex-end; +// text-transform: none; +// } + +// .logo { +// margin: auto; +// display: block; +// } + +// .loginButton { +// margin: 6px; +// } + +// .loginButtonText { +// color: black; +// font-weight: bold; +// } diff --git a/apps/web/src/components/navbar/navbar.tsx b/apps/web/src/components/navbar/navbar.tsx index 9e1fe77168fcb8d28e5cbf22a98d7a16da8281ef..f11b22774fa3512ac2fae838c1b2f92d19b2b061 100644 --- a/apps/web/src/components/navbar/navbar.tsx +++ b/apps/web/src/components/navbar/navbar.tsx @@ -9,13 +9,12 @@ * We do not test components/renderfunctions/styling files. * See testing plan for more details.*/ import React, { useEffect, useState } from 'react'; -import { AppBar, Toolbar, CssBaseline, Typography, MenuItem, ListItemText, Menu, IconButton, Button } from '@mui/material'; -import { AccountCircle } from '@mui/icons-material'; +import { Toolbar, MenuItem, ListItemText, Menu, Button } from '@mui/material'; +import IconAccountCircle from '~icons/mdi/account-circle'; import logo from './logogp.png'; import logo_white from './logogpwhite.png'; import AddDatabaseForm from './AddDatabaseForm'; import { useTheme } from '@mui/material/styles'; -import styles from './navbar.module.scss'; import { updateCurrentDatabase, updateDatabaseList } from '@graphpolaris/shared/lib/data-access/store/sessionSlice'; import { @@ -121,212 +120,156 @@ export const Navbar = (props: NavbarComponentProps) => { }); } - const currentLogo = theme.palette.custom.logo == 'white' ? logo_white : logo; + const currentLogo = !'dark' ? logo_white : logo; // TODO: support dark mode return ( - <div className={styles.root}> - <CssBaseline /> - <AppBar - title="GraphPolaris" - style={{ - backgroundColor: theme.palette.custom.background, - }} - sx={{ - zIndex: 9999, - }} - position="fixed" - className={styles.appBar} - > - <Toolbar style={{ marginLeft: -5 }}> - <a href="https://graphpolaris.com/" className={styles.logo}> - <img src={currentLogo} className={styles.logo} /> - </a> - <div className={styles.menubox}> - {/* <Button - className={styles.menuText} - style={{ color: theme.palette.custom.menuText }} - onClick={changeColourPalette} - > - Change Palette - </Button> */} - <Button href="https://graphpolaris.com/" className={styles.menuText} style={{ color: theme.palette.custom.menuText }}> - Home - </Button> - <Button - href="https://graphpolaris.com/index.php/products/" - className={styles.menuText} - style={{ color: theme.palette.custom.menuText }} - > - Products - </Button> - <Button href="https://graphpolaris.com#usecases" className={styles.menuText} style={{ color: theme.palette.custom.menuText }}> - Use Cases - </Button> - <Button - href="https://graphpolaris.com#earlyadoption" - className={styles.menuText} - style={{ color: theme.palette.custom.menuText }} - > - Contact - </Button> - {auth.authorized ? ( - <div> - <IconButton - color="inherit" + <div className="w-full px-5"> + <div title="GraphPolaris" className={'navbar w-full'}> + <a href="https://graphpolaris.com/" className="w-full"> + <img src={currentLogo} /> + </a> + <div className="w-fit"> + {auth.authorized ? ( + <div> + <button + className="btn btn-circle btn-ghost hover:bg-gray-200" + onClick={(event) => + setState({ + ...state, + userMenuAnchor: event.currentTarget, + }) + } + > + <IconAccountCircle htmlColor={theme.palette.custom.menuText} /> + </button> + <Menu + id="user-menus" + anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }} + transformOrigin={{ vertical: 'top', horizontal: 'left' }} + anchorEl={state.userMenuAnchor} + keepMounted + open={Boolean(state.userMenuAnchor)} + onClose={() => closeUserMenu()} + > + <MenuItem> + <ListItemText primary={'userID: ' + auth.userID} /> + </MenuItem> + <MenuItem> + <ListItemText primary={'sessionID: ' + auth.sessionID} /> + </MenuItem> + <MenuItem + onClick={() => + setState({ + ...state, + userMenuAnchor: undefined, + showAddDatabaseForm: true, + }) + } + > + <ListItemText primary={'Add database'} /> + </MenuItem> + <MenuItem onClick={(event) => setState({ ...state, - userMenuAnchor: event.currentTarget, + selectDatabaseMenuAnchor: event.currentTarget, }) } > - <AccountCircle htmlColor={theme.palette.custom.menuText} /> - </IconButton> + <ListItemText onClick={() => openChangeSubMenu()} primary={'Change database'} /> + </MenuItem> <Menu - id="user-menus" - anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }} - transformOrigin={{ vertical: 'top', horizontal: 'left' }} - anchorEl={state.userMenuAnchor} + id="databases-menus" + anchorOrigin={{ vertical: 'top', horizontal: 'left' }} + transformOrigin={{ vertical: 'top', horizontal: 'right' }} + anchorEl={state.selectDatabaseMenuAnchor} keepMounted - open={Boolean(state.userMenuAnchor)} - onClose={() => closeUserMenu()} + disableAutoFocusItem + open={Boolean(state.selectDatabaseMenuAnchor)} + sx={{ display: subMenuChangeDisplay }} + onClose={() => closeChangeSubMenu()} > - <MenuItem> - <ListItemText primary={'userID: ' + auth.userID} /> - </MenuItem> - <MenuItem> - <ListItemText primary={'sessionID: ' + auth.sessionID} /> - </MenuItem> - {/* <MenuItem - onClick={() => - navbarViewModel.handleLoginButtonClicked('google') - } - > - <ListItemText primary={'request new'} /> - </MenuItem> */} - {/*<MenuItem onClick={() => LocalStorage.instance().Reset()}>*/} - {/* <ListItemText primary={'Empty localstorage'} />*/} - {/*</MenuItem>*/} - <MenuItem - onClick={() => - setState({ - ...state, - userMenuAnchor: undefined, - showAddDatabaseForm: true, - }) - } - > - <ListItemText primary={'Add database'} /> - </MenuItem> - <MenuItem - onClick={(event) => - setState({ - ...state, - selectDatabaseMenuAnchor: event.currentTarget, - }) - } - > - <ListItemText onClick={() => openChangeSubMenu()} primary={'Change database'} /> - </MenuItem> - <Menu - id="databases-menus" - anchorOrigin={{ vertical: 'top', horizontal: 'left' }} - transformOrigin={{ vertical: 'top', horizontal: 'right' }} - anchorEl={state.selectDatabaseMenuAnchor} - keepMounted - disableAutoFocusItem - open={Boolean(state.selectDatabaseMenuAnchor)} - sx={{ display: subMenuChangeDisplay }} - onClose={() => closeChangeSubMenu()} - > - {session.databases.length > 0 ? ( - session.databases.map((database) => ( - <MenuItem - key={database} - selected={database == session.currentDatabase} - sx={{ display: subMenuChangeDisplay }} - onClick={() => { - if (session.currentDatabase != database) { - dispatch(updateCurrentDatabase(database)); - } - closeChangeSubMenu(); - }} - > - <ListItemText primary={database} /> - </MenuItem> - )) - ) : ( - <MenuItem key="placeholder" value="" disabled> - no databases connected - </MenuItem> - )} - </Menu> - <MenuItem - onClick={(event) => - setState({ - ...state, - deleteDatabaseMenuAnchor: event.currentTarget, - }) - } - > - <ListItemText onClick={() => openDeleteSubMenu()} primary={'Delete database'} /> - </MenuItem> - <Menu - id="delete-databases-menus" - anchorOrigin={{ vertical: 'top', horizontal: 'left' }} - transformOrigin={{ vertical: 'top', horizontal: 'right' }} - anchorEl={state.deleteDatabaseMenuAnchor} - keepMounted - disableAutoFocusItem - open={Boolean(state?.deleteDatabaseMenuAnchor)} - sx={{ display: subMenuDeleteDisplay }} - onClose={() => closeDeleteSubMenu()} - > - {session.databases.length > 0 ? ( - session.databases.map((database) => ( - <MenuItem - key={database} - selected={database == session.currentDatabase} - onClick={() => { - if (session.currentDatabase === database) { - dispatch(updateCurrentDatabase('')); - } - api.DeleteDatabase(database); - closeDeleteSubMenu(); - }} - > - <ListItemText primary={database} /> - </MenuItem> - )) - ) : ( - <MenuItem key="placeholder" value="" disabled> - no databases connected + {session.databases.length > 0 ? ( + session.databases.map((database) => ( + <MenuItem + key={database} + selected={database == session.currentDatabase} + sx={{ display: subMenuChangeDisplay }} + onClick={() => { + if (session.currentDatabase != database) { + dispatch(updateCurrentDatabase(database)); + } + closeChangeSubMenu(); + }} + > + <ListItemText primary={database} /> </MenuItem> - )} - </Menu> + )) + ) : ( + <MenuItem key="placeholder" value="" disabled> + no databases connected + </MenuItem> + )} </Menu> - </div> - ) : ( - <div> - <Button - className={styles.loginButton} + <MenuItem onClick={(event) => setState({ ...state, - userMenuAnchor: event.currentTarget, + deleteDatabaseMenuAnchor: event.currentTarget, }) } > - <span - className={styles.loginButtonText} - style={{ - color: theme.palette.custom.menuText, - }} - > - Login - </span> - </Button> - {/* <Menu + <ListItemText onClick={() => openDeleteSubMenu()} primary={'Delete database'} /> + </MenuItem> + <Menu + id="delete-databases-menus" + anchorOrigin={{ vertical: 'top', horizontal: 'left' }} + transformOrigin={{ vertical: 'top', horizontal: 'right' }} + anchorEl={state.deleteDatabaseMenuAnchor} + keepMounted + disableAutoFocusItem + open={Boolean(state?.deleteDatabaseMenuAnchor)} + sx={{ display: subMenuDeleteDisplay }} + onClose={() => closeDeleteSubMenu()} + > + {session.databases.length > 0 ? ( + session.databases.map((database) => ( + <MenuItem + key={database} + selected={database == session.currentDatabase} + onClick={() => { + if (session.currentDatabase === database) { + dispatch(updateCurrentDatabase('')); + } + api.DeleteDatabase(database); + closeDeleteSubMenu(); + }} + > + <ListItemText primary={database} /> + </MenuItem> + )) + ) : ( + <MenuItem key="placeholder" value="" disabled> + no databases connected + </MenuItem> + )} + </Menu> + </Menu> + </div> + ) : ( + <div> + <button + className="btn btn-ghost" + onClick={(event) => + setState({ + ...state, + userMenuAnchor: event.currentTarget, + }) + } + > + <span>Login</span> + </button> + {/* <Menu id="user-menus" getContentAnchorEl={null} anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }} @@ -358,11 +301,10 @@ export const Navbar = (props: NavbarComponentProps) => { <ListItemText primary={'Login with free (debug)'} /> </MenuItem> </Menu> */} - </div> - )} - </div> - </Toolbar> - </AppBar> + </div> + )} + </div> + </div> <AddDatabaseForm open={state.showAddDatabaseForm} onClose={() => setState({ ...state, showAddDatabaseForm: false })} @@ -370,7 +312,6 @@ export const Navbar = (props: NavbarComponentProps) => { onAddDatabaseFormSubmit(...params); setState({ ...state, showAddDatabaseForm: false }); }} - styles={undefined} /> </div> ); diff --git a/apps/web/src/index.html b/apps/web/src/index.html deleted file mode 100644 index fb97c0641cfe83e26fb2990ce93e8ffbb585f198..0000000000000000000000000000000000000000 --- a/apps/web/src/index.html +++ /dev/null @@ -1,15 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <title>Graphpolaris</title> - <base href="/" /> - - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <link rel="icon" type="image/x-icon" href="favicon.ico" /> - </head> - - <body> - <div id="root"></div> - </body> -</html> diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css index b5c61c956711f981a41e95f7fcf0038436cfbb22..d1f14bdfc15ff18d02f909253306857d1323c577 100644 --- a/apps/web/src/styles.css +++ b/apps/web/src/styles.css @@ -1,3 +1,7 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@tailwind base; +@tailwind components; +@tailwind utilities; + +* { + font-family: 'Inter', ubuntu, sans-serif; +} diff --git a/apps/web/tailwind.config.js b/apps/web/tailwind.config.js index d21f1cdae70ca548855964467cc032c21ce5c1bb..1339b4d16963a1233868ea5f83c1654cbac37beb 100644 --- a/apps/web/tailwind.config.js +++ b/apps/web/tailwind.config.js @@ -1,8 +1,57 @@ /** @type {import('tailwindcss').Config} */ +const defaultTheme = require('tailwindcss/defaultTheme'); + export default { content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], theme: { - extend: {}, + extend: { + fontFamily: { + inter: ['"Inter"', ...defaultTheme.fontFamily.sans], + }, + }, + }, + plugins: [require('@tailwindcss/typography'), require('daisyui')], + // daisyUI config (optional - here are the default values) + daisyui: { + themes: [ + { + graphpolarisWhite: { + ...require('daisyui/src/theming/themes')['[data-theme=corporate]'], + fontFamily: 'inter,ubuntu,courier,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace', + primary: '#112646', + secondary: '#B0B8C2', + accent: '#FF7D00', + neutral: '#1c1917', + 'base-100': '#FFFFFF', + 'base-content': '#F7F9FA', + // 'base-200': '#F9FBFC', + info: '#99622E', + success: '#2DC177', + warning: '#eab308', + error: '#dc2626', + + // "--rounded-box": "0rem", // border radius rounded-box utility class, used in card and other large boxes + // "--rounded-btn": "0.5rem", // border radius rounded-btn utility class, used in buttons and similar element + // "--rounded-badge": "1.9rem", // border radius rounded-badge utility class, used in badges and similar + // "--animation-btn": "0.25s", // duration of animation when you click on button + // "--animation-input": "0.2s", // duration of animation for inputs like checkbox, toggle, radio, etc + // "--btn-text-case": "uppercase", // set default text transform for buttons + // "--btn-focus-scale": "0.95", // scale transform of button when you focus on it + // "--border-btn": "1px", // border width of buttons + // "--tab-border": "1px", // border width of tabs + // "--tab-radius": "0.5rem", // border radius of tabs + }, + }, + 'dark', + 'corporate', + ], // true: all themes | false: only light + dark | array: specific themes like this ["light", "dark", "cupcake"] + darkTheme: false, // disabled for now + // darkTheme: 'dark', // name of one of the included themes for dark mode + base: true, // applies background color and foreground color for root element by default + styled: true, // include daisyUI colors and design decisions for all components + utils: true, // adds responsive and modifier utility classes + rtl: false, // rotate style direction from left-to-right to right-to-left. You also need to add dir="rtl" to your html tag and install `tailwindcss-flip` plugin for Tailwind CSS. + prefix: '', // prefix for daisyUI classnames (components, modifiers and responsive class names. Not colors) + logs: true, // Shows info about daisyUI version and used config in the console when building your CSS }, - plugins: [], }; diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index e3f42121eadfdee5dbebd030346e1e78f3fa4b7d..12b0482d9b502eafa2ebe41a737b43571063a1c5 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -21,7 +21,8 @@ "baseUrl": ".", "paths": { "@graphpolaris/shared/lib/*": ["../../libs/shared/lib/*"] - } + }, + "types": ["unplugin-icons/types/react"] }, "exclude": ["node_modules", "public"], "include": ["src", "../../libs/shared/lib/querybuilder/panel/attributepill"], diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 44c0c7d6058d86b6955579f13e00a5a6f9872b99..d2f39ea117deb60ba9c92e5fafc75986860c7752 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react-swc'; import path from 'path'; import dts from 'vite-plugin-dts'; +import Icons from 'unplugin-icons/vite'; // https://vitejs.dev/config/ export default defineConfig({ @@ -12,6 +13,7 @@ export default defineConfig({ dts({ insertTypesEntry: true, }), + Icons({ compiler: 'jsx', jsx: 'react' }), ], resolve: { alias: { diff --git a/libs/shared/package.json b/libs/shared/package.json index 221adab0f26c255ac9acce3f4b3ecc0e87ef98e8..2d31edd55afbc0ce147e52510a3e7bdd4436a0b3 100644 --- a/libs/shared/package.json +++ b/libs/shared/package.json @@ -65,6 +65,7 @@ "web-worker": "^1.2.0" }, "devDependencies": { + "@iconify/json": "^2.2.95", "@storybook/addon-styling": "^0.3.2", "@storybook/preset-scss": "^1.0.3", "@storybook/react": "7.0.22", @@ -86,6 +87,7 @@ "cytoscape-elk": "^2.1.0", "cytoscape-fcose": "^2.2.0", "cytoscape-klay": "^3.1.4", + "daisyui": "^3.5.0", "eslint": "^7.32.0", "eslint-config-next": "13.0.0", "eslint-config-prettier": "^8.3.0", @@ -116,6 +118,7 @@ "require-from-string": "^2.0.2", "ts-node": "10.9.1", "typescript": "^4.5.2", + "unplugin-icons": "^0.16.5", "url-loader": "^4.1.1", "vite": "^4.1.0", "vite-plugin-dts": "^2.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 73e36f4b94ecb26a651ddce45fb071acf7c5eb96..6d3c054d9f136edfe9854f07dafbf88782e5deae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,9 +112,21 @@ importers: specifier: ^5.3.6 version: 5.3.9(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) devDependencies: + '@iconify/json': + specifier: ^2.2.95 + version: 2.2.95 '@storybook/react': specifier: 7.0.0-rc.5 version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) + '@svgr/core': + specifier: ^8.0.0 + version: 8.0.0 + '@svgr/plugin-jsx': + specifier: ^8.0.1 + version: 8.0.1(@svgr/core@8.0.0) + '@tailwindcss/typography': + specifier: ^0.5.9 + version: 0.5.9(tailwindcss@3.3.1) '@testing-library/react': specifier: 14.0.0 version: 14.0.0(react-dom@18.2.0)(react@18.2.0) @@ -139,6 +151,9 @@ importers: autoprefixer: specifier: ^10.4.14 version: 10.4.14(postcss@8.4.21) + daisyui: + specifier: ^3.5.0 + version: 3.5.0(ts-node@10.9.1) graphology-types: specifier: ^0.24.7 version: 0.24.7 @@ -154,6 +169,9 @@ importers: typescript: specifier: ^4.9.3 version: 4.9.5 + unplugin-icons: + specifier: ^0.16.5 + version: 0.16.5(@svgr/core@8.0.0) vite: specifier: ^4.2.0 version: 4.2.1(@types/node@17.0.12)(sass@1.59.3) @@ -308,6 +326,9 @@ importers: specifier: ^1.2.0 version: 1.2.0 devDependencies: + '@iconify/json': + specifier: ^2.2.95 + version: 2.2.95 '@storybook/addon-styling': specifier: ^0.3.2 version: 0.3.2(@storybook/addons@6.5.16)(@storybook/api@6.5.16)(@storybook/components@6.5.16)(@storybook/core-events@6.5.16)(@storybook/manager-api@7.0.22)(@storybook/theming@6.5.16)(react-dom@18.2.0)(react@18.2.0)(sass-loader@13.2.2) @@ -368,6 +389,9 @@ importers: cytoscape-klay: specifier: ^3.1.4 version: 3.1.4(cytoscape@3.23.0) + daisyui: + specifier: ^3.5.0 + version: 3.5.0(ts-node@10.9.1) eslint: specifier: ^7.32.0 version: 7.32.0 @@ -379,7 +403,7 @@ importers: version: 8.7.0(eslint@7.32.0) eslint-config-turbo: specifier: latest - version: 1.10.9(eslint@7.32.0) + version: 1.10.12(eslint@7.32.0) eslint-plugin-import: specifier: 2.27.5 version: 2.27.5(@typescript-eslint/parser@5.52.0)(eslint-import-resolver-typescript@2.7.1)(eslint@7.32.0) @@ -443,6 +467,9 @@ importers: typescript: specifier: ^4.5.2 version: 4.9.5 + unplugin-icons: + specifier: ^0.16.5 + version: 0.16.5(@svgr/core@8.0.0) url-loader: specifier: ^4.1.1 version: 4.1.1(webpack@5.77.0) @@ -569,7 +596,7 @@ importers: version: 8.7.0(eslint@7.32.0) eslint-config-turbo: specifier: latest - version: 1.10.9(eslint@7.32.0) + version: 1.10.12(eslint@7.32.0) eslint-plugin-react: specifier: 7.31.8 version: 7.31.8(eslint@7.32.0) @@ -589,6 +616,17 @@ packages: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.17 + /@antfu/install-pkg@0.1.1: + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + dev: true + + /@antfu/utils@0.7.5: + resolution: {integrity: sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==} + dev: true + /@aw-web-design/x-default-browser@1.4.88: resolution: {integrity: sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==} hasBin: true @@ -2845,6 +2883,30 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@iconify/json@2.2.95: + resolution: {integrity: sha512-54c4P8Z2Zuvgd3EEhAGV/byNPJ1sjVHO+Sd94376//6heUW73x04TjtNAnYviFdypI8S7SdYCn+ncyW4JhOmiA==} + dependencies: + '@iconify/types': 2.0.0 + pathe: 1.1.0 + dev: true + + /@iconify/types@2.0.0: + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + dev: true + + /@iconify/utils@2.1.7: + resolution: {integrity: sha512-P8S3z/L1LcV4Qem9AoCfVAaTFGySEMzFEY4CHZLkfRj0Fv9LiR+AwjDgrDrzyI93U2L2mg9JHsbTJ52mF8suNw==} + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.5 + '@iconify/types': 2.0.0 + debug: 4.3.4(supports-color@5.5.0) + kolorist: 1.8.0 + local-pkg: 0.4.3 + transitivePeerDependencies: + - supports-color + dev: true + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -5931,6 +5993,131 @@ packages: file-system-cache: 2.0.2 dev: true + /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-plugin-transform-react-native-svg@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + + /@svgr/babel-preset@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-transform-react-native-svg': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.21.3) + dev: true + + /@svgr/core@8.0.0: + resolution: {integrity: sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==} + engines: {node: '>=14'} + dependencies: + '@babel/core': 7.21.3 + '@svgr/babel-preset': 8.0.0(@babel/core@7.21.3) + camelcase: 6.3.0 + cosmiconfig: 8.1.3 + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@svgr/hast-util-to-babel-ast@8.0.0: + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} + dependencies: + '@babel/types': 7.22.5 + entities: 4.4.0 + dev: true + + /@svgr/plugin-jsx@8.0.1(@svgr/core@8.0.0): + resolution: {integrity: sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + dependencies: + '@babel/core': 7.21.3 + '@svgr/babel-preset': 8.0.0(@babel/core@7.21.3) + '@svgr/core': 8.0.0 + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /@swc/core-darwin-arm64@1.3.42: resolution: {integrity: sha512-hM6RrZFyoCM9mX3cj/zM5oXwhAqjUdOCLXJx7KTQps7NIkv/Qjvobgvyf2gAb89j3ARNo9NdIoLjTjJ6oALtiA==} engines: {node: '>=10'} @@ -6044,6 +6231,18 @@ packages: tslib: 2.5.0 dev: false + /@tailwindcss/typography@0.5.9(tailwindcss@3.3.1): + resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + dev: true + /@testing-library/dom@8.20.0: resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} engines: {node: '>=12'} @@ -7063,16 +7262,16 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.2): + /acorn-import-assertions@1.8.0(acorn@8.10.0): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true /acorn-jsx@5.3.2(acorn@7.4.1): @@ -7097,6 +7296,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -7682,6 +7887,11 @@ packages: engines: {node: '>=6'} dev: true + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: false @@ -7905,7 +8115,6 @@ packages: /colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: false /colorette@2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} @@ -8186,6 +8395,13 @@ packages: webpack: 5.77.0(esbuild@0.17.12) dev: true + /css-selector-tokenizer@0.8.0: + resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} + dependencies: + cssesc: 3.0.0 + fastparse: 1.1.2 + dev: true + /css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} dependencies: @@ -8601,6 +8817,19 @@ packages: lodash: 4.17.21 dev: true + /daisyui@3.5.0(ts-node@10.9.1): + resolution: {integrity: sha512-wSaeXwaYdMv4yURv9wj7kKQQN9Jyumfh/skIpZfCNkCb2jLf/so+iNKSM8l4rDN0TRvB5OccMlAvsf2UAtk2gg==} + engines: {node: '>=16.9.0'} + dependencies: + colord: 2.9.3 + css-selector-tokenizer: 0.8.0 + postcss: 8.4.21 + postcss-js: 4.0.1(postcss@8.4.21) + tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + transitivePeerDependencies: + - ts-node + dev: true + /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -8896,6 +9125,13 @@ packages: dev: false optional: true + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.5.0 + dev: true + /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -9241,13 +9477,13 @@ packages: dependencies: eslint: 7.32.0 - /eslint-config-turbo@1.10.9(eslint@7.32.0): - resolution: {integrity: sha512-YA5QWxWte/NiRJL0/Cv7aATfIvS5sUAuyD6ZuyTZEzwyU7E6FUXGo44amjf9INkyj96HrJ2nYWoFkCRx3vs6Ag==} + /eslint-config-turbo@1.10.12(eslint@7.32.0): + resolution: {integrity: sha512-z3jfh+D7UGYlzMWGh+Kqz++hf8LOE96q3o5R8X4HTjmxaBWlLAWG+0Ounr38h+JLR2TJno0hU9zfzoPNkR9BdA==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 7.32.0 - eslint-plugin-turbo: 1.10.9(eslint@7.32.0) + eslint-plugin-turbo: 1.10.12(eslint@7.32.0) /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} @@ -9390,8 +9626,8 @@ packages: semver: 6.3.0 string.prototype.matchall: 4.0.8 - /eslint-plugin-turbo@1.10.9(eslint@7.32.0): - resolution: {integrity: sha512-o8Nga4WFMvzF0lo3d3UyjGli2JOUn/4SRtRdvcf4EA9/TPotU/NUHqO16Cp0SHZJG/tGYIy5LY1O/EO7Mxbd1A==} + /eslint-plugin-turbo@1.10.12(eslint@7.32.0): + resolution: {integrity: sha512-uNbdj+ohZaYo4tFJ6dStRXu2FZigwulR1b3URPXe0Q8YaE7thuekKNP+54CHtZPH9Zey9dmDx5btAQl9mfzGOw==} peerDependencies: eslint: '>6.6.0' dependencies: @@ -9649,6 +9885,10 @@ packages: strnum: 1.0.5 dev: false + /fastparse@1.1.2: + resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + dev: true + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -11209,6 +11449,10 @@ packages: resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==} dev: true + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + dev: true + /ktx-parse@0.0.4: resolution: {integrity: sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==} dev: false @@ -11347,6 +11591,10 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true + /lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + dev: true + /lodash.curry@4.1.1: resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} dev: false @@ -11436,6 +11684,12 @@ packages: get-func-name: 2.0.0 dev: true + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.5.0 + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -11698,7 +11952,7 @@ packages: /mlly@1.2.0: resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 pathe: 1.1.0 pkg-types: 1.0.2 ufo: 1.1.1 @@ -11825,6 +12079,13 @@ packages: - babel-plugin-macros dev: false + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.5.0 + dev: true + /node-dir@0.1.17: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} @@ -12469,6 +12730,14 @@ packages: dependencies: postcss: 8.4.21 + /postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + /postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} @@ -13637,6 +13906,13 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.5.0 + dev: true + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -13842,7 +14118,7 @@ packages: /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true /strnum@1.0.5: @@ -13946,6 +14222,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: true + /svg-pathdata@6.0.3: resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} engines: {node: '>=12.0.0'} @@ -14115,7 +14395,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.8.2 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -14601,15 +14881,56 @@ packages: engines: {node: '>= 0.8'} dev: true + /unplugin-icons@0.16.5(@svgr/core@8.0.0): + resolution: {integrity: sha512-laCCqMWfng1XZgB9yowGfjBdDhtmz8t8zVnhzRNEMhBNdy26QrVewVmdXk/zsiAQYnEWvIxTjvW1nQXrxdd2+w==} + peerDependencies: + '@svgr/core': '>=7.0.0' + '@svgx/core': ^1.0.1 + '@vue/compiler-sfc': ^3.0.2 || ^2.7.0 + vue-template-compiler: ^2.6.12 + vue-template-es2015-compiler: ^1.9.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@svgx/core': + optional: true + '@vue/compiler-sfc': + optional: true + vue-template-compiler: + optional: true + vue-template-es2015-compiler: + optional: true + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.5 + '@iconify/utils': 2.1.7 + '@svgr/core': 8.0.0 + debug: 4.3.4(supports-color@5.5.0) + kolorist: 1.8.0 + local-pkg: 0.4.3 + unplugin: 1.4.0 + transitivePeerDependencies: + - supports-color + dev: true + /unplugin@0.10.2: resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.6 dev: true + /unplugin@1.4.0: + resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} + dependencies: + acorn: 8.10.0 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + dev: true + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -15085,6 +15406,10 @@ packages: resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} dev: true + /webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: true + /webpack@5.77.0(esbuild@0.17.12): resolution: {integrity: sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==} engines: {node: '>=10.13.0'} @@ -15100,8 +15425,8 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.8.2 - acorn-import-assertions: 1.8.0(acorn@8.8.2) + acorn: 8.10.0 + acorn-import-assertions: 1.8.0(acorn@8.10.0) browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0