diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..55712c1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} \ No newline at end of file diff --git a/packages/buitar/package.json b/packages/buitar/package.json index 132ea6a..2b84f03 100644 --- a/packages/buitar/package.json +++ b/packages/buitar/package.json @@ -23,6 +23,7 @@ "eslint": "^8.45.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", + "postcss-preset-env": "^9.3.0", "sass": "^1.49.9", "typescript": "^5.0.2", "vite": "^4.4.5", diff --git a/packages/buitar/src/app.scss b/packages/buitar/src/app.scss index 280e8d7..9dfbd43 100644 --- a/packages/buitar/src/app.scss +++ b/packages/buitar/src/app.scss @@ -37,7 +37,6 @@ body { height: 100%; overflow-x: hidden; padding-left: 10vw; - padding-top: 5vh; } @media #{$pcLayout} { diff --git a/packages/buitar/src/app.tsx b/packages/buitar/src/app.tsx index d697c07..61a6e8e 100644 --- a/packages/buitar/src/app.tsx +++ b/packages/buitar/src/app.tsx @@ -1,5 +1,5 @@ import { BrowserRouter, useRoutes } from 'react-router-dom' -import { ConfigProvider, SlideMenu, AudioBtn, BoardProvider } from '@/components' +import { ConfigProvider, SlideMenu, FixedBtns, BoardProvider, PageHeader } from '@/components' import { routeConfig } from '@/pages/router' import { Suspense } from 'react' import { HelmetProvider } from 'react-helmet-async' @@ -11,9 +11,13 @@ export const App = () => { - - - + + + + + + + @@ -23,12 +27,9 @@ export const App = () => { const Board = () => { const element = useRoutes(routeConfig) return ( - - -
- Loading...}>{element} -
-
-
+
+ + Loading...}>{element} +
) } diff --git a/packages/buitar/src/components/audio-btn/index.ts b/packages/buitar/src/components/audio-btn/index.ts deleted file mode 100644 index bd6259f..0000000 --- a/packages/buitar/src/components/audio-btn/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './audio-btn' \ No newline at end of file diff --git a/packages/buitar/src/components/audio-btn/audio-btn.module.scss b/packages/buitar/src/components/fixed-btn/audio-btn.module.scss similarity index 71% rename from packages/buitar/src/components/audio-btn/audio-btn.module.scss rename to packages/buitar/src/components/fixed-btn/audio-btn.module.scss index cd7b594..f4e9ae6 100644 --- a/packages/buitar/src/components/audio-btn/audio-btn.module.scss +++ b/packages/buitar/src/components/fixed-btn/audio-btn.module.scss @@ -1,9 +1,6 @@ .audio-btn { - position: fixed; - right: 20px; - top: 20px; - width: 32px !important; - height: 32px !important; + width: 32px; + height: 32px; cursor: pointer; background: none; border: none; diff --git a/packages/buitar/src/components/audio-btn/audio-btn.tsx b/packages/buitar/src/components/fixed-btn/audio-btn.tsx similarity index 89% rename from packages/buitar/src/components/audio-btn/audio-btn.tsx rename to packages/buitar/src/components/fixed-btn/audio-btn.tsx index 26d920e..99ef285 100644 --- a/packages/buitar/src/components/audio-btn/audio-btn.tsx +++ b/packages/buitar/src/components/fixed-btn/audio-btn.tsx @@ -2,15 +2,15 @@ import { FC, memo, useEffect, useState } from 'react' import { Icon } from '@/components/icon' import cx from 'classnames' import * as Tone from 'tone' - -import styles from './audio-btn.module.scss' import { TonePlayer } from '@buitar/tone-player' import { waitAudioContext } from '@/utils/audio-play' +import styles from './audio-btn.module.scss' + /** * audioContext状态开关 */ -export const AudioBtn: FC = memo(() => { +export const AudioBtn: FC> = memo((props) => { const [mute, setMute] = useState(Tone.context.state !== 'running') const context = (window.tonePlayer as TonePlayer).context || Tone.context @@ -28,7 +28,7 @@ export const AudioBtn: FC = memo(() => { return ( + ) +}) diff --git a/packages/buitar/src/components/index.ts b/packages/buitar/src/components/index.ts index 5619227..d4f6a17 100644 --- a/packages/buitar/src/components/index.ts +++ b/packages/buitar/src/components/index.ts @@ -4,11 +4,11 @@ export * from './drum-board' export * from './sound-board' export * from './sequencer' export * from './guitar-player' -export * from './pages-intro' +export * from './pages-info' export * from './ui' export * from './slide-menu' export * from './portal' export * from './icon' export * from './svg-chord' -export * from './audio-btn' +export * from './fixed-btn' diff --git a/packages/buitar/src/components/pages-info/index.ts b/packages/buitar/src/components/pages-info/index.ts new file mode 100644 index 0000000..7ce49f6 --- /dev/null +++ b/packages/buitar/src/components/pages-info/index.ts @@ -0,0 +1,3 @@ +export { PagesIntro } from './pages-intro.component' +export { PageHeader } from './page-header.component' +export { PagesMeta } from './pages-meta' diff --git a/packages/buitar/src/components/pages-info/page-header.component.tsx b/packages/buitar/src/components/pages-info/page-header.component.tsx new file mode 100644 index 0000000..7fe3a4d --- /dev/null +++ b/packages/buitar/src/components/pages-info/page-header.component.tsx @@ -0,0 +1,24 @@ +import { useMemo, memo } from 'react' +import { useRouteMatch } from '@/utils/hooks/use-routers' +import { Icon } from '@/components/icon' +import { useNavigate } from 'react-router-dom' + +import styles from './page-header.module.scss' + +export const PageHeader = memo(() => { + const curRoute = useRouteMatch() + const navigate = useNavigate() + const showBack = useMemo(() => !!curRoute?.meta?.back, [curRoute]) + + if(showBack){ + return ( +
navigate(-1)}> + +

{curRoute.name}

+
+ ) + } + + return null + +}) \ No newline at end of file diff --git a/packages/buitar/src/components/pages-info/page-header.module.scss b/packages/buitar/src/components/pages-info/page-header.module.scss new file mode 100644 index 0000000..f0a1ae2 --- /dev/null +++ b/packages/buitar/src/components/pages-info/page-header.module.scss @@ -0,0 +1,10 @@ +.page-header { + display: flex; + align-items: center; + cursor: pointer; + + > h2 { + margin: $font-16 $font-10; + font-size: $font-20; + } +} diff --git a/packages/buitar/src/components/pages-intro/index.tsx b/packages/buitar/src/components/pages-info/pages-intro.component.tsx similarity index 73% rename from packages/buitar/src/components/pages-intro/index.tsx rename to packages/buitar/src/components/pages-info/pages-intro.component.tsx index 71db25d..dcb4da0 100644 --- a/packages/buitar/src/components/pages-intro/index.tsx +++ b/packages/buitar/src/components/pages-info/pages-intro.component.tsx @@ -1,4 +1,4 @@ -import { FC } from 'react' +import { memo } from 'react' import { pagesIntroConfig } from '@/pages/pages.config' import { useTopRoute } from '@/utils/hooks/use-routers' @@ -7,7 +7,7 @@ import styles from './pages-intro.module.scss' /** * 页面介绍 */ -const PagesIntro: FC = () => { +export const PagesIntro = memo(() => { const curTopRoute = useTopRoute() if (!curTopRoute?.id) { return null @@ -22,14 +22,11 @@ const PagesIntro: FC = () => { const { title, content } = pageInfo return ( -
+

{title}

{content.map((item, index) => (

{item}

))} -
+ ) -} - -export { PagesIntro } -export { PagesMeta } from './pages-meta' +}) diff --git a/packages/buitar/src/components/pages-intro/pages-intro.module.scss b/packages/buitar/src/components/pages-info/pages-intro.module.scss similarity index 90% rename from packages/buitar/src/components/pages-intro/pages-intro.module.scss rename to packages/buitar/src/components/pages-info/pages-intro.module.scss index c739b51..337a0b4 100644 --- a/packages/buitar/src/components/pages-intro/pages-intro.module.scss +++ b/packages/buitar/src/components/pages-info/pages-intro.module.scss @@ -1,7 +1,7 @@ .pages-intro { padding-right: 10%; opacity: 0.7; - margin-bottom: 5%; + margin-bottom: 5vh; h2 { letter-spacing: 0.5px; diff --git a/packages/buitar/src/components/pages-intro/pages-meta.tsx b/packages/buitar/src/components/pages-info/pages-meta.tsx similarity index 100% rename from packages/buitar/src/components/pages-intro/pages-meta.tsx rename to packages/buitar/src/components/pages-info/pages-meta.tsx diff --git a/packages/buitar/src/components/portal/portal-modal.component.tsx b/packages/buitar/src/components/portal/portal-modal.component.tsx index 46f7fb9..d33a8d3 100644 --- a/packages/buitar/src/components/portal/portal-modal.component.tsx +++ b/packages/buitar/src/components/portal/portal-modal.component.tsx @@ -31,7 +31,7 @@ export const Modal: FC = ({ visible, pure, title, children, onConfir return ( -
+
{pure ? ( children ) : ( @@ -41,7 +41,7 @@ export const Modal: FC = ({ visible, pure, title, children, onConfir ) : ( title )} - + {children}
diff --git a/packages/buitar/src/components/portal/portal-modal.module.scss b/packages/buitar/src/components/portal/portal-modal.module.scss index 04afb15..0d36936 100644 --- a/packages/buitar/src/components/portal/portal-modal.module.scss +++ b/packages/buitar/src/components/portal/portal-modal.module.scss @@ -4,7 +4,8 @@ max-height: 92vh; overflow-y: scroll; background: $gray-01; - padding: $btn-margin; + padding: calc($btn-margin * 2); + border-radius: calc($btn-margin * 4); .modal-options { display: flex; @@ -13,6 +14,7 @@ :global(.primary-button) { height: calc($btn-size); flex: 1; + border-radius: calc($btn-margin * 3); } } diff --git a/packages/buitar/src/components/slide-menu/slide-item.component.tsx b/packages/buitar/src/components/slide-menu/slide-item.component.tsx index da9967c..8a35e42 100644 --- a/packages/buitar/src/components/slide-menu/slide-item.component.tsx +++ b/packages/buitar/src/components/slide-menu/slide-item.component.tsx @@ -1,31 +1,32 @@ -import { useCallback, useMemo, useState } from 'react' -import { Link, useLocation, useNavigate } from 'react-router-dom' -import { Icon } from '@/components/icon' -import { useConfigContext } from './index' +import { useCallback, useState, memo } from 'react' +import { Link, useLocation } from 'react-router-dom' +import { Icon, Modal, toast } from '@/components' import { routeConfig } from '@/pages/router' -import { menuConfig } from './config-provider/menu-config' -import { Switch } from '../index' +// import { useConfigContext } from './index' +// import { menuConfig } from './config-provider/menu-config' import { clearStore } from '@/utils/hooks/use-store' -import { useRouteFind, useRouteMatch } from '@/utils/hooks/use-routers' +import { useRouteFind } from '@/utils/hooks/use-routers' import { useIsMobile } from '@/utils/hooks/use-device' import cx from 'classnames' import styles from './slide-item.module.scss' -export const SlideMenu = () => { - const { menus, dispatchMenus } = useConfigContext() +export const SlideMenu = memo(() => { + // const { menus, dispatchMenus } = useConfigContext() const { pathname } = useLocation() - const navigate = useNavigate() const [extend, setExtend] = useState(false) - const curRoute = useRouteMatch() + const [cleanStoreVisible, setCleanStoreVisible] = useState(false) const homeRoute = useRouteFind('Home') - const showBack = useMemo(() => !!curRoute?.meta?.back, [curRoute]) const isMobile = useIsMobile() const toggleExtend = useCallback(() => { setExtend(!extend) }, [extend]) + const toggleCleanStoreVisible = useCallback(() => { + setCleanStoreVisible(!cleanStoreVisible) + }, [cleanStoreVisible]) + const header = ( Buitar @@ -44,7 +45,7 @@ export const SlideMenu = () => { )} > {route.meta?.icon && } - {extend &&
{route.name}
} +
{route.name}
)) @@ -61,83 +62,72 @@ export const SlideMenu = () => { )} onClick={() => setExtend(false)} > - {route.meta?.icon && } + {route.meta?.icon && }
{route.name}
)) - // 侧边栏设置项 - // const options = menuConfig.map((item, index) => { - // const checked = !!menus[item.key] - // return ( - //
- // {item.name} - // { - // dispatchMenus({ type: 'set', payload: { [item.key]: value } }) - // }} - // /> - //
- // ) - // }) - // options.push( - //
- // 重置 - // 清理缓存 - //
- // ) - // options.unshift(
) - - const footer = ( -
-
, + , + + +
Github
+
, + ] + + const pcTrigger = ( +
+ +
+ ) + + const mobileTrigger = ( +
+
) return ( -
- {/* {showBack ? ( -
{ - navigate(-1) - }} - > - -
- ) : ( -
- -
- )} */} -
- -
- -
+
+ ) -} +}) diff --git a/packages/buitar/src/components/slide-menu/slide-item.module.scss b/packages/buitar/src/components/slide-menu/slide-item.module.scss index 6febf12..cd62696 100644 --- a/packages/buitar/src/components/slide-menu/slide-item.module.scss +++ b/packages/buitar/src/components/slide-menu/slide-item.module.scss @@ -11,6 +11,9 @@ $tab-height: 60px; &.slide-menu__extend { margin-left: 0; + .slide-menu-nav-item-name { + display: block; + } } &-nav { @@ -54,6 +57,7 @@ $tab-height: 60px; &-name { margin-left: 12px; flex: 1; + display: none; } } @@ -90,7 +94,7 @@ $tab-height: 60px; padding-bottom: env(safe-area-inset-bottom); &.slide-menu__extend { - height: $tab-height * 2; + height: $tab-height * 3; } &-nav { @@ -98,7 +102,7 @@ $tab-height: 60px; height: inherit; width: inherit; display: flex; - justify-content: space-between; + justify-content: flex-start; flex-wrap: wrap; &-item { width: 20%; @@ -107,10 +111,16 @@ $tab-height: 60px; align-items: center; justify-content: center; padding: 0; + + &:hover { + padding-left: unset; + } + &-name { font-size: $font-10; margin: 4px 0 0; flex: unset; + display: block; } } @@ -120,12 +130,6 @@ $tab-height: 60px; } } - &-trigger, - &-nav-title, - &-nav-footer { - display: none; - } - &-tab-trigger { display: flex; justify-content: center; diff --git a/packages/buitar/src/pages/abc-editor/index.tsx b/packages/buitar/src/pages/abc-editor/index.tsx index 2479cc9..1341a8e 100644 --- a/packages/buitar/src/pages/abc-editor/index.tsx +++ b/packages/buitar/src/pages/abc-editor/index.tsx @@ -3,7 +3,7 @@ import { lazy } from 'react' const BuitarEditor = lazy(() => import('@buitar/abc-editor')) export const AbcEditor = () => ( -
+
) diff --git a/packages/buitar/src/pages/router.ts b/packages/buitar/src/pages/router.ts index 2ca1bc7..12f096b 100644 --- a/packages/buitar/src/pages/router.ts +++ b/packages/buitar/src/pages/router.ts @@ -155,7 +155,7 @@ export const routeConfig: Array = [ name: '乐器', id: 'Instrument', path: `${baseUrl}instrument`, - meta: { menu: true, icon: 'icon-synth' }, + meta: { menu: true, icon: 'icon-play-piano' }, Component: InstrumentPlayer, }, { @@ -183,7 +183,6 @@ export const routeConfig: Array = [ name: '404', id: 'NotFound', path: `${baseUrl}*`, - type: '', Component: NotFound, }, ] diff --git a/packages/buitar/src/style/global.scss b/packages/buitar/src/style/global.scss index a96f81d..e3e868d 100644 --- a/packages/buitar/src/style/global.scss +++ b/packages/buitar/src/style/global.scss @@ -114,10 +114,11 @@ left: 50%; transform: translateX(-50%); z-index: 199; - background-color: rgba($gray-third, 0.8); + background-color: rgba($gray-03, 0.8); padding: calc($btn-margin * 5) calc($btn-margin * 10); border-radius: calc($btn-margin * 2); pointer-events: none; + font-size: $font-14; } .text-input { diff --git a/packages/buitar/vite.config.ts b/packages/buitar/vite.config.ts index a8d3ad7..50db522 100644 --- a/packages/buitar/vite.config.ts +++ b/packages/buitar/vite.config.ts @@ -3,6 +3,7 @@ import { resolve } from 'path' import react from '@vitejs/plugin-react' import { VitePWA as pwa } from 'vite-plugin-pwa' import { viteStaticCopy as copy } from 'vite-plugin-static-copy' +import postcssPresetEnv from 'postcss-preset-env' const baseUrl = process.env.BASE_URL || '/' @@ -89,9 +90,12 @@ export default defineConfig({ }, preprocessorOptions: { scss: { - additionalData: '@import "src/style/definitions/index.scss";', + additionalData: '@import "src/style/definitions/index.scss";', // 预处理 }, }, + postcss: { + plugins: [postcssPresetEnv()], // css 前缀补全兼容 + }, }, build: { outDir: 'dist', @@ -106,8 +110,8 @@ export default defineConfig({ */ manualChunks: { tone: ['tone'], - 'vexflow/core':['vexflow/core'], - 'vexflow/bravura':['vexflow/bravura'], + 'vexflow/core': ['vexflow/core'], + 'vexflow/bravura': ['vexflow/bravura'], 'react-libs': ['react', 'react-dom', 'react-router-dom'], '@buitar/abc-editor': ['@buitar/abc-editor'], '@buitar/to-guitar': ['@buitar/to-guitar'], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f8f9c95..cb97bed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,6 +90,9 @@ importers: eslint-plugin-react-refresh: specifier: ^0.4.3 version: 0.4.3(eslint@8.45.0) + postcss-preset-env: + specifier: ^9.3.0 + version: 9.3.0 sass: specifier: ^1.49.9 version: 1.64.1 @@ -1423,6 +1426,356 @@ packages: resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==} dev: true + /@csstools/cascade-layer-name-parser@1.0.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3): + resolution: {integrity: sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.5.0 + '@csstools/css-tokenizer': ^2.2.3 + dependencies: + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/color-helpers@4.0.0: + resolution: {integrity: sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/css-calc@1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3): + resolution: {integrity: sha512-YHPAuFg5iA4qZGzMzvrQwzkvJpesXXyIUyaONflQrjtHB+BcFFbgltJkIkb31dMGO4SE9iZFA4HYpdk7+hnYew==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.5.0 + '@csstools/css-tokenizer': ^2.2.3 + dependencies: + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/css-color-parser@1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3): + resolution: {integrity: sha512-x+SajGB2paGrTjPOUorGi8iCztF008YMKXTn+XzGVDBEIVJ/W1121pPerpneJYGOe1m6zWLPLnzOPaznmQxKFw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.5.0 + '@csstools/css-tokenizer': ^2.2.3 + dependencies: + '@csstools/color-helpers': 4.0.0 + '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/css-parser-algorithms@2.5.0(@csstools/css-tokenizer@2.2.3): + resolution: {integrity: sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.2.3 + dependencies: + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/css-tokenizer@2.2.3: + resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/media-query-list-parser@2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3): + resolution: {integrity: sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.5.0 + '@csstools/css-tokenizer': ^2.2.3 + dependencies: + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/postcss-cascade-layers@4.0.2: + resolution: {integrity: sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) + postcss-selector-parser: 6.0.15 + dev: true + + /@csstools/postcss-color-function@3.0.9: + resolution: {integrity: sha512-6Hbkw/4k73UH121l4LG+LNLKSvrfHqk3GHHH0A6/iFlD0xGmsWAr80Jd0VqXjfYbUTOGmJTOMMoxv3jvNxt1uw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + dev: true + + /@csstools/postcss-color-mix-function@2.0.9: + resolution: {integrity: sha512-fs1SOWJ/44DQSsDeJP+rxAkP2MYkCg6K4ZB8qJwFku2EjurgCAPiPZJvC6w94T1hBBinJwuMfT9qvvvniXyVgw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + dev: true + + /@csstools/postcss-exponential-functions@1.0.3: + resolution: {integrity: sha512-IfGtEg3eC4b8Nd/kPgO3SxgKb33YwhHVsL0eJ3UYihx6fzzAiZwNbWmVW9MZTQjZ5GacgKxa4iAHikGvpwuIjw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/postcss-font-format-keywords@3.0.1: + resolution: {integrity: sha512-D1lcG2sfotTq6yBEOMV3myFxJLT10F3DLYZJMbiny5YToqzHWodZen8WId3UTimm0mEHitXqAUNL5jdd6RzVdA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-gamut-mapping@1.0.2: + resolution: {integrity: sha512-zf9KHGM2PTuJEm4ZYg4DTmzCir38EbZBzlMPMbA4jbhLDqXHkqwnQ+Z5+UNrU8y6seVu5B4vzZmZarTFQwe+Ig==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/postcss-gradients-interpolation-method@4.0.9: + resolution: {integrity: sha512-PSqR6QH7h3ggOl8TsoH73kbwYTKVQjAJauGg6nDKwaGfi5IL5StV//ehrv1C7HuPsHixMTc9YoAuuv1ocT20EQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + dev: true + + /@csstools/postcss-hwb-function@3.0.8: + resolution: {integrity: sha512-CRQEG372Hivmt17rm/Ho22hBQI9K/a6grzGQ21Zwc7dyspmyG0ibmPIW8hn15vJmXqWGeNq7S+L2b8/OrU7O5A==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/postcss-ic-unit@3.0.3: + resolution: {integrity: sha512-MpcmIL0/uMm/cFWh5V/9nbKKJ7jRr2qTYW5Q6zoE6HZ6uzOBJr2KRERv5/x8xzEBQ1MthDT7iP1EBp9luSQy7g==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 3.0.3 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-initial@1.0.1: + resolution: {integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dev: true + + /@csstools/postcss-is-pseudo-class@4.0.4: + resolution: {integrity: sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) + postcss-selector-parser: 6.0.15 + dev: true + + /@csstools/postcss-logical-float-and-clear@2.0.1: + resolution: {integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dev: true + + /@csstools/postcss-logical-overflow@1.0.1: + resolution: {integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dev: true + + /@csstools/postcss-logical-overscroll-behavior@1.0.1: + resolution: {integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dev: true + + /@csstools/postcss-logical-resize@2.0.1: + resolution: {integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-logical-viewport-units@2.0.5: + resolution: {integrity: sha512-2fjSamKN635DSW6fEoyNd2Bkpv3FVblUpgk5cpghIgPW1aDHZE2SYfZK5xQALvjMYZVjfqsD5EbXA7uDVBQVQA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/postcss-media-minmax@1.1.2: + resolution: {integrity: sha512-7qTRTJxW96u2yiEaTep1+8nto1O/rEDacewKqH+Riq5E6EsHTOmGHxkB4Se5Ic5xgDC4I05lLZxzzxnlnSypxA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + dev: true + + /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.5: + resolution: {integrity: sha512-XHMPasWYPWa9XaUHXU6Iq0RLfoAI+nvGTPj51hOizNsHaAyFiq2SL4JvF1DU8lM6B70+HVzKM09Isbyrr755Bw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + dev: true + + /@csstools/postcss-nested-calc@3.0.1: + resolution: {integrity: sha512-bwwababZpWRm0ByHaWBxTsDGTMhZKmtUNl3Wt0Eom8AY7ORgXx5qF9SSk1vEFrCi+HOfJT6M6W5KPgzXuQNRwQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-normalize-display-values@3.0.2: + resolution: {integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-oklab-function@3.0.9: + resolution: {integrity: sha512-l639gpcBfL3ogJe+og1M5FixQn8iGX8+29V7VtTSCUB37VzpzOC05URfde7INIdiJT65DkHzgdJ64/QeYggU8A==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + dev: true + + /@csstools/postcss-progressive-custom-properties@3.0.3: + resolution: {integrity: sha512-WipTVh6JTMQfeIrzDV4wEPsV9NTzMK2jwXxyH6CGBktuWdivHnkioP/smp1x/0QDPQyx7NTS14RB+GV3zZZYEw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-relative-color-syntax@2.0.9: + resolution: {integrity: sha512-2UoaRd2iIuzUGtYgteN5fJ0s+OfCiV7PvCnw8MCh3om8+SeVinfG8D5sqBOvImxFVfrp6k60XF5RFlH6oc//fg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + dev: true + + /@csstools/postcss-scope-pseudo-class@3.0.1: + resolution: {integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /@csstools/postcss-stepped-value-functions@3.0.4: + resolution: {integrity: sha512-gyNQ2YaOVXPqLR737XtReRPVu7DGKBr9JBDLoiH1T+N1ggV3r4HotRCOC1l6rxVC0zOuU1KiOzUn9Z5W838/rg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/postcss-text-decoration-shorthand@3.0.4: + resolution: {integrity: sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/color-helpers': 4.0.0 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-trigonometric-functions@3.0.4: + resolution: {integrity: sha512-qj4Cxth6c38iNYzfJJWAxt8jsLrZaMVmbfGDDLOlI2YJeZoC3A5Su6/Kr7oXaPFRuspUu+4EQHngOktqVHWfVg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/postcss-unset-value@3.0.1: + resolution: {integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dev: true + + /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.15): + resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + /@esbuild/android-arm64@0.18.17: resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} engines: {node: '>=12'} @@ -2677,6 +3030,21 @@ packages: tslib: 2.6.0 dev: false + /autoprefixer@10.4.17: + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001579 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -2851,6 +3219,17 @@ packages: update-browserslist-db: 1.0.11(browserslist@4.21.9) dev: true + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001579 + electron-to-chromium: 1.4.639 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -2911,6 +3290,10 @@ packages: resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} dev: true + /caniuse-lite@1.0.30001579: + resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3079,12 +3462,49 @@ packages: engines: {node: '>=8'} dev: true + /css-blank-pseudo@6.0.1: + resolution: {integrity: sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + /css-box-model@1.2.1: resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} dependencies: tiny-invariant: 1.3.1 dev: false + /css-has-pseudo@6.0.1: + resolution: {integrity: sha512-WwoVKqNxApfEI7dWFyaHoeFCcUPD+lPyjL6lNpRUNX7IyIUuVpawOTwwA5D0ZR6V2xQZonNPVj8kEcxzEaAQfQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) + postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 + dev: true + + /css-prefers-color-scheme@9.0.1: + resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dev: true + + /cssdb@7.10.0: + resolution: {integrity: sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA==} + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true @@ -3235,6 +3655,10 @@ packages: resolution: {integrity: sha512-HRN9XQjElxJBrdDky5iiUUr3eDwXGTg6Cp4IV8MuNc8VqMkYSneSnIe6poFKx9PsNzkudCgaWCBVxwDqirwQWQ==} dev: true + /electron-to-chromium@1.4.639: + resolution: {integrity: sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==} + dev: true + /emittery@0.8.1: resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} engines: {node: '>=10'} @@ -3653,6 +4077,10 @@ packages: mime-types: 2.1.35 dev: true + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true @@ -5061,11 +5489,20 @@ packages: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -5225,6 +5662,315 @@ packages: find-up: 4.1.0 dev: true + /postcss-attribute-case-insensitive@6.0.2: + resolution: {integrity: sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-clamp@4.1.0: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-functional-notation@6.0.4: + resolution: {integrity: sha512-YBzfVvVUNR4U3N0imzU1NPKCuwxzfHJkEP6imJxzsJ8LozRKeej9mWmg9Ef1ovJdb0xrGTRVzUxgTrMun5iw/Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + dev: true + + /postcss-color-hex-alpha@9.0.3: + resolution: {integrity: sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-rebeccapurple@9.0.2: + resolution: {integrity: sha512-f+RDEAPW2m8UbJWkSpRfV+QxhSaQhDMihI75DVGJJh4oRIoegjheeRtINFJum9D8BqGJcvD4GLjggTvCwZ4zuA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-media@10.0.2: + resolution: {integrity: sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + dev: true + + /postcss-custom-properties@13.3.4: + resolution: {integrity: sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-selectors@7.1.6: + resolution: {integrity: sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-dir-pseudo-class@8.0.1: + resolution: {integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-double-position-gradients@5.0.3: + resolution: {integrity: sha512-QKYpwmaSm6HcdS0ndAuWSNNMv78R1oSySoh3mYBmctHWr2KWcwPJVakdOyU4lvFVW0GRu9wfIQwGeM4p3xU9ow==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 3.0.3 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-focus-visible@9.0.1: + resolution: {integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-focus-within@8.0.1: + resolution: {integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-font-variant@5.0.0: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dev: true + + /postcss-gap-properties@5.0.1: + resolution: {integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dev: true + + /postcss-image-set-function@6.0.2: + resolution: {integrity: sha512-/O1xwqpJiz/apxGQi7UUfv1xUcorvkHZfvCYHPpRxxZj2WvjD0rg0+/+c+u5/Do5CpUg3XvfYxMrhcnjW1ArDQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /postcss-lab-function@6.0.9: + resolution: {integrity: sha512-PKFAVTBEWJYsoSTD7Kp/OzeiMsXaLX39Pv75XgUyF5VrbMfeTw+JqCGsvDP3dPhclh6BemdCFHcjXBG9gO4UCg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + dev: true + + /postcss-logical@7.0.1: + resolution: {integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /postcss-nesting@12.0.2: + resolution: {integrity: sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-opacity-percentage@2.0.0: + resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.2 + dev: true + + /postcss-overflow-shorthand@5.0.1: + resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /postcss-page-break@3.0.4: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dev: true + + /postcss-place@9.0.1: + resolution: {integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-value-parser: 4.2.0 + dev: true + + /postcss-preset-env@9.3.0: + resolution: {integrity: sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-cascade-layers': 4.0.2 + '@csstools/postcss-color-function': 3.0.9 + '@csstools/postcss-color-mix-function': 2.0.9 + '@csstools/postcss-exponential-functions': 1.0.3 + '@csstools/postcss-font-format-keywords': 3.0.1 + '@csstools/postcss-gamut-mapping': 1.0.2 + '@csstools/postcss-gradients-interpolation-method': 4.0.9 + '@csstools/postcss-hwb-function': 3.0.8 + '@csstools/postcss-ic-unit': 3.0.3 + '@csstools/postcss-initial': 1.0.1 + '@csstools/postcss-is-pseudo-class': 4.0.4 + '@csstools/postcss-logical-float-and-clear': 2.0.1 + '@csstools/postcss-logical-overflow': 1.0.1 + '@csstools/postcss-logical-overscroll-behavior': 1.0.1 + '@csstools/postcss-logical-resize': 2.0.1 + '@csstools/postcss-logical-viewport-units': 2.0.5 + '@csstools/postcss-media-minmax': 1.1.2 + '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.5 + '@csstools/postcss-nested-calc': 3.0.1 + '@csstools/postcss-normalize-display-values': 3.0.2 + '@csstools/postcss-oklab-function': 3.0.9 + '@csstools/postcss-progressive-custom-properties': 3.0.3 + '@csstools/postcss-relative-color-syntax': 2.0.9 + '@csstools/postcss-scope-pseudo-class': 3.0.1 + '@csstools/postcss-stepped-value-functions': 3.0.4 + '@csstools/postcss-text-decoration-shorthand': 3.0.4 + '@csstools/postcss-trigonometric-functions': 3.0.4 + '@csstools/postcss-unset-value': 3.0.1 + autoprefixer: 10.4.17 + browserslist: 4.22.2 + css-blank-pseudo: 6.0.1 + css-has-pseudo: 6.0.1 + css-prefers-color-scheme: 9.0.1 + cssdb: 7.10.0 + postcss-attribute-case-insensitive: 6.0.2 + postcss-clamp: 4.1.0 + postcss-color-functional-notation: 6.0.4 + postcss-color-hex-alpha: 9.0.3 + postcss-color-rebeccapurple: 9.0.2 + postcss-custom-media: 10.0.2 + postcss-custom-properties: 13.3.4 + postcss-custom-selectors: 7.1.6 + postcss-dir-pseudo-class: 8.0.1 + postcss-double-position-gradients: 5.0.3 + postcss-focus-visible: 9.0.1 + postcss-focus-within: 8.0.1 + postcss-font-variant: 5.0.0 + postcss-gap-properties: 5.0.1 + postcss-image-set-function: 6.0.2 + postcss-lab-function: 6.0.9 + postcss-logical: 7.0.1 + postcss-nesting: 12.0.2 + postcss-opacity-percentage: 2.0.0 + postcss-overflow-shorthand: 5.0.1 + postcss-page-break: 3.0.4 + postcss-place: 9.0.1 + postcss-pseudo-class-any-link: 9.0.1 + postcss-replace-overflow-wrap: 4.0.0 + postcss-selector-not: 7.0.1 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-pseudo-class-any-link@9.0.1: + resolution: {integrity: sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-replace-overflow-wrap@4.0.0: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dev: true + + /postcss-selector-not@7.0.1: + resolution: {integrity: sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + /postcss@8.4.27: resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} engines: {node: ^10 || ^12 || >=14} @@ -6384,6 +7130,17 @@ packages: picocolors: 1.0.0 dev: true + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: