From 6a2a9ffd4fd7a5bf3ea0cccf4dea657a71797744 Mon Sep 17 00:00:00 2001 From: kyranjamie Date: Thu, 29 Feb 2024 15:24:04 +0100 Subject: [PATCH] feat: approver pattern component --- package.json | 9 +- src/app/common/has-children.ts | 2 +- .../hooks/use-element-height-listener.ts | 22 ++ src/app/common/hooks/use-register-children.ts | 19 ++ src/app/features/approver/approver-demo.tsx | 101 ++++++ src/app/features/approver/approver.context.ts | 21 ++ .../features/approver/approver.stories.tsx | 116 +++++++ src/app/features/approver/approver.tsx | 58 ++++ .../approver/components/animate-height.tsx | 24 ++ .../approver/components/approver-actions.tsx | 26 ++ .../approver/components/approver-advanced.tsx | 62 ++++ .../approver/components/approver-header.tsx | 18 + .../approver/components/approver-section.tsx | 18 + .../components/approver-subheader.tsx | 7 + src/app/pages/home/home.tsx | 14 + src/app/routes/app-routes.tsx | 3 + src/app/ui/components/button/button.tsx | 7 +- src/app/ui/components/flag/flag.stories.tsx | 16 +- src/app/ui/components/input/input.tsx | 12 +- yarn.lock | 315 +++++++++--------- 20 files changed, 700 insertions(+), 170 deletions(-) create mode 100644 src/app/common/hooks/use-element-height-listener.ts create mode 100644 src/app/common/hooks/use-register-children.ts create mode 100644 src/app/features/approver/approver-demo.tsx create mode 100644 src/app/features/approver/approver.context.ts create mode 100644 src/app/features/approver/approver.stories.tsx create mode 100644 src/app/features/approver/approver.tsx create mode 100644 src/app/features/approver/components/animate-height.tsx create mode 100644 src/app/features/approver/components/approver-actions.tsx create mode 100644 src/app/features/approver/components/approver-advanced.tsx create mode 100644 src/app/features/approver/components/approver-header.tsx create mode 100644 src/app/features/approver/components/approver-section.tsx create mode 100644 src/app/features/approver/components/approver-subheader.tsx diff --git a/package.json b/package.json index 97cf8396508..ece904c62d3 100644 --- a/package.json +++ b/package.json @@ -197,6 +197,7 @@ "ecdsa-sig-formatter": "1.0.11", "ecpair": "2.1.0", "formik": "2.4.5", + "framer-motion": "11.0.8", "jotai": "2.2.1", "jotai-redux": "0.2.1", "jsontokens": "4.0.1", @@ -224,7 +225,7 @@ "react-intersection-observer": "9.5.2", "react-lottie": "1.2.4", "react-redux": "8.1.3", - "react-router-dom": "6.22.1", + "react-router-dom": "6.22.2", "react-virtuoso": "4.7.1", "redux-persist": "6.0.0", "rxjs": "7.8.1", @@ -246,7 +247,7 @@ "@leather-wallet/prettier-config": "0.0.1", "@ls-lint/ls-lint": "2.2.2", "@mdx-js/loader": "3.0.0", - "@pandacss/dev": "0.32.0", + "@pandacss/dev": "0.33.0", "@playwright/test": "1.40.1", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", "@redux-devtools/cli": "4.0.0", @@ -293,7 +294,7 @@ "bip32": "4.0.0", "blns": "2.0.4", "browserslist": "4.23.0", - "chromatic": "10.9.6", + "chromatic": "11.0.0", "chrome-webstore-upload-cli": "2.2.2", "clean-webpack-plugin": "4.0.0", "concurrently": "8.2.2", @@ -316,7 +317,7 @@ "html-webpack-plugin": "5.6.0", "jsdom": "22.1.0", "postcss": "8.4.35", - "postcss-loader": "8.1.0", + "postcss-loader": "8.1.1", "prettier": "3.2.5", "process": "0.11.10", "progress-bar-webpack-plugin": "2.1.0", diff --git a/src/app/common/has-children.ts b/src/app/common/has-children.ts index cbaf7c24d42..dbe5bcafff1 100644 --- a/src/app/common/has-children.ts +++ b/src/app/common/has-children.ts @@ -1,5 +1,5 @@ import { ReactNode } from 'react'; export interface HasChildren { - children: ReactNode; + children?: ReactNode; } diff --git a/src/app/common/hooks/use-element-height-listener.ts b/src/app/common/hooks/use-element-height-listener.ts new file mode 100644 index 00000000000..006e1a68c72 --- /dev/null +++ b/src/app/common/hooks/use-element-height-listener.ts @@ -0,0 +1,22 @@ +import { useEffect } from 'react'; + +export function useElementHeightListener( + ref: React.RefObject, + listener: (height: number) => void +) { + useEffect(() => { + if (!ref.current) return; + + const resizeObserver = new ResizeObserver(entries => { + const observedHeight = entries[0].contentRect.height; + listener(observedHeight); + }); + + resizeObserver.observe(ref.current); + + return () => { + // Cleanup the observer when the component is unmounted + resizeObserver.disconnect(); + }; + }, [listener, ref]); +} diff --git a/src/app/common/hooks/use-register-children.ts b/src/app/common/hooks/use-register-children.ts new file mode 100644 index 00000000000..3e0f5d8ec23 --- /dev/null +++ b/src/app/common/hooks/use-register-children.ts @@ -0,0 +1,19 @@ +import { useState } from 'react'; + +export function useRegisterChildren() { + const [children, setChildren] = useState>({} as Record); + + function registerChild(child: T) { + setChildren(children => ({ ...children, [child]: (children[child] || 0) + 1 })); + } + + function deregisterChild(child: T) { + setChildren(children => ({ ...children, [child]: (children[child] || 0) - 1 })); + } + + function hasChild(child: T) { + return children[child] > 0; + } + + return { children: Object.keys(children) as T[], registerChild, deregisterChild, hasChild }; +} diff --git a/src/app/features/approver/approver-demo.tsx b/src/app/features/approver/approver-demo.tsx new file mode 100644 index 00000000000..80f9e6124cc --- /dev/null +++ b/src/app/features/approver/approver-demo.tsx @@ -0,0 +1,101 @@ +import { Box, Circle, styled } from 'leather-styles/jsx'; + +import { Button } from '@app/ui/components/button/button'; +import { Callout } from '@app/ui/components/callout/callout'; +import { Flag } from '@app/ui/components/flag/flag'; +import { ItemInteractive } from '@app/ui/components/item/item-interactive'; +import { ItemLayout } from '@app/ui/components/item/item.layout'; + +import { Approver } from './approver'; + +export function ApproverDemo() { + return ( + + + + Hey watch out for this sketchy app + + Demo section 1 + } align="top"> + + + + + + Demo section 2 + } + /> + + + + Section 3 + {}} mt="space.03"> + } + titleLeft="Example" + titleRight="Example" + /> + + + + Demo section 1 + }> + + + + + Demo section 1 + }> + + + + + Demo section 1 + }> + + + + + Demo section 1 + }> + + + + + Demo section 1 + }> + + + + + Demo section 1 + }> + + + + + Demo section 1 + }> + + + + + + + + + } + /> + + + ); +} diff --git a/src/app/features/approver/approver.context.ts b/src/app/features/approver/approver.context.ts new file mode 100644 index 00000000000..8beecc77a5e --- /dev/null +++ b/src/app/features/approver/approver.context.ts @@ -0,0 +1,21 @@ +import { createContext, useContext } from 'react'; + +export type ApproverChildren = 'header' | 'actions' | 'advanced' | 'section' | 'subheader'; + +interface ApproverContext { + isDisplayingAdvancedView: boolean; + setIsDisplayingAdvancedView(val: boolean): void; + registerChild(child: ApproverChildren): void; + deregisterChild(child: ApproverChildren): void; + hasChild(child: ApproverChildren): boolean; +} + +const approverContext = createContext(null); + +export const ApproverProvider = approverContext.Provider; + +export function useApproverContext() { + const context = useContext(approverContext); + if (!context) throw new Error('`useApproverContext` must be used within a `ApproverProvider`'); + return context; +} diff --git a/src/app/features/approver/approver.stories.tsx b/src/app/features/approver/approver.stories.tsx new file mode 100644 index 00000000000..fd946f2c66c --- /dev/null +++ b/src/app/features/approver/approver.stories.tsx @@ -0,0 +1,116 @@ +import { Meta, StoryObj } from '@storybook/react'; +import { Box, Circle, Flex } from 'leather-styles/jsx'; + +import { Button } from '@app/ui/components/button/button'; +import { Callout } from '@app/ui/components/callout/callout'; +import { Flag } from '@app/ui/components/flag/flag'; +import { ItemInteractive } from '@app/ui/components/item/item-interactive'; +import { ItemLayout } from '@app/ui/components/item/item.layout'; + +import { Approver } from './approver'; + +const meta: Meta = { + component: Approver, + tags: ['autodocs'], + title: 'Feature/Approver', + + render: ({ children, ...args }) => ( + + {children} + + ), +}; + +export default meta; + +type Story = StoryObj; + +export const ExampleOne: Story = { + args: { + children: ( + <> + + Hey watch out for this sketchy app + + Example flag content + } align="top"> + + + + + + Example rich content with avatar + } + /> + + + + In the advanced section + {}} mt="space.03" mb="space.03"> + } + /> + + + + Inputs & Outputs + }> + + + + + Transaction raw data + }> + + + + + Additional info + }> + + + + + + + + + + } + /> + + ), + }, +}; + +export const ActionsAlignToBottom: Story = { + args: { + children: ( + <> + + + + + + } + /> + + ), + }, +}; diff --git a/src/app/features/approver/approver.tsx b/src/app/features/approver/approver.tsx new file mode 100644 index 00000000000..b27d1f3f5af --- /dev/null +++ b/src/app/features/approver/approver.tsx @@ -0,0 +1,58 @@ +import { useState } from 'react'; + +import { css } from 'leather-styles/css'; +import { Flex, styled } from 'leather-styles/jsx'; + +import type { HasChildren } from '@app/common/has-children'; +import { useRegisterChildren } from '@app/common/hooks/use-register-children'; + +import { type ApproverChildren, ApproverProvider } from './approver.context'; +import { ApproverActions } from './components/approver-actions'; +import { ApproverAdvanced } from './components/approver-advanced'; +import { ApproverHeader } from './components/approver-header'; +import { ApproverSection } from './components/approver-section'; +import { ApproverSubheader } from './components/approver-subheader'; + +const applyMarginsToLastApproverSection = css({ + '& .approver-section:last-child': { mb: 'space.03' }, +}); + +function Approver({ children }: HasChildren) { + const { registerChild, deregisterChild, hasChild } = useRegisterChildren(); + const [isDisplayingAdvancedView, setIsDisplayingAdvancedView] = useState(false); + + return ( + + + + {children} + + + + ); +} + +Approver.Header = ApproverHeader; +Approver.Subheader = ApproverSubheader; +Approver.Section = ApproverSection; +Approver.Advanced = ApproverAdvanced; +Approver.Actions = ApproverActions; + +export { Approver }; diff --git a/src/app/features/approver/components/animate-height.tsx b/src/app/features/approver/components/animate-height.tsx new file mode 100644 index 00000000000..7d7beaf84d0 --- /dev/null +++ b/src/app/features/approver/components/animate-height.tsx @@ -0,0 +1,24 @@ +import { useRef, useState } from 'react'; + +import { motion } from 'framer-motion'; + +import type { HasChildren } from '@app/common/has-children'; +import { useElementHeightListener } from '@app/common/hooks/use-element-height-listener'; + +// https://github.com/framer/motion/discussions/1884#discussioncomment-5861808 + +export function AnimateChangeInHeight({ children }: HasChildren) { + const containerRef = useRef(null); + const [height, setHeight] = useState('auto'); + useElementHeightListener(containerRef, height => setHeight(height)); + + return ( + +
{children}
+
+ ); +} diff --git a/src/app/features/approver/components/approver-actions.tsx b/src/app/features/approver/components/approver-actions.tsx new file mode 100644 index 00000000000..d0c83a25d66 --- /dev/null +++ b/src/app/features/approver/components/approver-actions.tsx @@ -0,0 +1,26 @@ +import { css } from 'leather-styles/css'; +import { Flex, styled } from 'leather-styles/jsx'; + +import type { HasChildren } from '@app/common/has-children'; + +const stretchChildrenStyles = css({ '& > *': { flex: 1 } }); + +interface ApproverActionsProps extends HasChildren { + actions: React.ReactNode; +} +export function ApproverActions({ children, actions }: ApproverActionsProps) { + return ( + + {children} + + {actions} + + + ); +} diff --git a/src/app/features/approver/components/approver-advanced.tsx b/src/app/features/approver/components/approver-advanced.tsx new file mode 100644 index 00000000000..2f36105a2c8 --- /dev/null +++ b/src/app/features/approver/components/approver-advanced.tsx @@ -0,0 +1,62 @@ +import { useRef } from 'react'; + +import { AnimatePresence, motion } from 'framer-motion'; +import { Flex } from 'leather-styles/jsx'; + +import type { HasChildren } from '@app/common/has-children'; +import { useOnMount } from '@app/common/hooks/use-on-mount'; +import { createDelay } from '@app/common/utils'; +import { Button } from '@app/ui/components/button/button'; +import { Flag } from '@app/ui/components/flag/flag'; +import { ChevronDownIcon } from '@app/ui/icons'; + +import { useApproverContext } from '../approver.context'; +import { AnimateChangeInHeight } from './animate-height'; + +const slightPauseForContentEnterAnimation = createDelay(120); + +export function ApproverAdvanced({ children }: HasChildren) { + const { isDisplayingAdvancedView, setIsDisplayingAdvancedView, registerChild } = + useApproverContext(); + + useOnMount(() => registerChild('advanced')); + + const ref = useRef(null); + + async function handleToggleAdvancedView() { + setIsDisplayingAdvancedView(!isDisplayingAdvancedView); + if (ref.current && !isDisplayingAdvancedView) { + await slightPauseForContentEnterAnimation(); + ref.current.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + } + + return ( + <> + + + + + {isDisplayingAdvancedView && ( + + {children} + + )} + + + + + ); +} diff --git a/src/app/features/approver/components/approver-header.tsx b/src/app/features/approver/components/approver-header.tsx new file mode 100644 index 00000000000..7dc586c2944 --- /dev/null +++ b/src/app/features/approver/components/approver-header.tsx @@ -0,0 +1,18 @@ +import type { ReactNode } from 'react'; + +import { styled } from 'leather-styles/jsx'; + +interface ApproverHeaderProps { + title: ReactNode; + requester: ReactNode; +} +export function ApproverHeader({ title, requester }: ApproverHeaderProps) { + return ( + + {title} + + Requested by {requester} + + + ); +} diff --git a/src/app/features/approver/components/approver-section.tsx b/src/app/features/approver/components/approver-section.tsx new file mode 100644 index 00000000000..7c597adf902 --- /dev/null +++ b/src/app/features/approver/components/approver-section.tsx @@ -0,0 +1,18 @@ +import { styled } from 'leather-styles/jsx'; + +import type { HasChildren } from '@app/common/has-children'; + +export function ApproverSection(props: HasChildren) { + return ( + + ); +} diff --git a/src/app/features/approver/components/approver-subheader.tsx b/src/app/features/approver/components/approver-subheader.tsx new file mode 100644 index 00000000000..6ce419de6c9 --- /dev/null +++ b/src/app/features/approver/components/approver-subheader.tsx @@ -0,0 +1,7 @@ +import { type HTMLStyledProps, styled } from 'leather-styles/jsx'; + +type ApproverSubheaderProps = HTMLStyledProps<'h2'>; + +export function ApproverSubheader(props: ApproverSubheaderProps) { + return ; +} diff --git a/src/app/pages/home/home.tsx b/src/app/pages/home/home.tsx index d6187512d63..b4fb28f7ebb 100644 --- a/src/app/pages/home/home.tsx +++ b/src/app/pages/home/home.tsx @@ -36,6 +36,20 @@ export function Home() { return ( }> + + } /> diff --git a/src/app/routes/app-routes.tsx b/src/app/routes/app-routes.tsx index d53359792b8..ddd63254cc2 100644 --- a/src/app/routes/app-routes.tsx +++ b/src/app/routes/app-routes.tsx @@ -11,6 +11,7 @@ import { RouteUrls } from '@shared/route-urls'; import { LoadingSpinner } from '@app/components/loading-spinner'; import { AddNetwork } from '@app/features/add-network/add-network'; +import { ApproverDemo } from '@app/features/approver/approver-demo'; import { Container } from '@app/features/container/container'; import { EditNonceDrawer } from '@app/features/edit-nonce-drawer/edit-nonce-drawer'; import { IncreaseBtcFeeDrawer } from '@app/features/increase-fee-drawer/increase-btc-fee-drawer'; @@ -91,6 +92,8 @@ function useAppRoutes() { {homePageModalRoutes} + } /> + } /> }> {ledgerStacksTxSigningRoutes} diff --git a/src/app/ui/components/button/button.tsx b/src/app/ui/components/button/button.tsx index e7bd05cb093..9afe6cacfc4 100644 --- a/src/app/ui/components/button/button.tsx +++ b/src/app/ui/components/button/button.tsx @@ -1,3 +1,5 @@ +import { forwardRef } from 'react'; + import { styled } from 'leather-styles/jsx'; import { type ButtonVariantProps, button as buttonRecipe } from 'leather-styles/recipes'; @@ -6,15 +8,16 @@ const StyledButton = styled('button'); type ButtonProps = Omit, keyof ButtonVariantProps> & ButtonVariantProps; -export function Button(props: ButtonProps) { +export const Button = forwardRef((props, ref) => { const { children, fullWidth, invert, size, trigger, type = 'button', variant, ...rest } = props; return ( {children} ); -} +}); diff --git a/src/app/ui/components/flag/flag.stories.tsx b/src/app/ui/components/flag/flag.stories.tsx index b1f80906d52..fafc79e1a13 100644 --- a/src/app/ui/components/flag/flag.stories.tsx +++ b/src/app/ui/components/flag/flag.stories.tsx @@ -8,6 +8,10 @@ const meta: Meta = { tags: ['autodocs'], title: 'Layout/Flag', argTypes: { + reverse: { + control: { type: 'boolean' }, + defaultValue: false, + }, align: { options: ['top', 'middle', 'bottom'], control: { type: 'radio' }, @@ -15,12 +19,14 @@ const meta: Meta = { }, }, parameters: { - controls: { include: ['align'] }, + controls: { include: ['align', 'reverse'] }, }, render: ({ children, ...args }) => ( - }> - {children} - + + }> + {children} + + ), }; @@ -30,6 +36,6 @@ type Story = StoryObj; export const Flag: Story = { args: { - children: , + children: , }, }; diff --git a/src/app/ui/components/input/input.tsx b/src/app/ui/components/input/input.tsx index 2ed6bc93ba1..3a647680a3e 100644 --- a/src/app/ui/components/input/input.tsx +++ b/src/app/ui/components/input/input.tsx @@ -13,6 +13,7 @@ import { sva } from 'leather-styles/css'; import { SystemStyleObject } from 'leather-styles/types'; import { useOnMount } from '@app/common/hooks/use-on-mount'; +import { useRegisterChildren } from '@app/common/hooks/use-register-children'; import { propIfDefined } from '@app/common/utils'; import { createStyleContext } from '@app/ui/utils/style-context'; @@ -105,7 +106,7 @@ const input = sva({ }, }); -type InputChldren = 'root' | 'label' | 'input'; +type InputChildren = 'root' | 'label' | 'input'; const { withProvider, withContext } = createStyleContext(input); @@ -113,7 +114,7 @@ interface InputContextProps { hasValue: boolean; setHasValue(hasValue: boolean): void; registerChild(child: string): void; - children: InputChldren[]; + children: InputChildren[]; } const InputContext = createContext(null); @@ -137,16 +138,13 @@ interface RootProps extends ComponentProps<'div'> { } function Root({ hasError, shrink, ...props }: RootProps) { const [hasValue, setHasValue] = useState(false); - const [children, setChildren] = useState(['root']); - function registerChild(child: InputChldren) { - setChildren(children => [...children, child]); - } + const { registerChild, children, hasChild } = useRegisterChildren(); const dataAttrs = { ...propIfDefined('data-has-error', hasError), ...propIfDefined('data-shrink', shrink), - 'data-has-label': children.includes('label'), + 'data-has-label': hasChild('label'), }; return ( diff --git a/yarn.lock b/yarn.lock index 5028e95db80..f7c8f85cdba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1494,15 +1494,7 @@ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz#36157fbe54ea30d5f2b1767c69fcdf92048a7b1d" integrity sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g== -"@csstools/postcss-cascade-layers@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.2.tgz#1a9212b150bc6106bcb1dfd4fc03f6fb42240037" - integrity sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ== - dependencies: - "@csstools/selector-specificity" "^3.0.1" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-cascade-layers@^4.0.3": +"@csstools/postcss-cascade-layers@4.0.3", "@csstools/postcss-cascade-layers@^4.0.3": version "4.0.3" resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.3.tgz#2805dbb8dec661101928298b2e16599edf3c2bea" integrity sha512-RbkQoOH23yGhWVetgBTwFgIOHEyU2tKMN7blTz/YAKKabR6tr9pP7mYS23Q9snFY2hr8WSaV8Le64KdM9BtUSA== @@ -1743,7 +1735,7 @@ resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz#598a25630fd9ab0edf066d235916f7441404942a" integrity sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg== -"@csstools/selector-specificity@^3.0.1", "@csstools/selector-specificity@^3.0.2": +"@csstools/selector-specificity@^3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz#ea61ba7bb24be3502c6aaa3190ed231f4633a81e" integrity sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg== @@ -1873,6 +1865,13 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== +"@emotion/is-prop-valid@^0.8.2": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + "@emotion/is-prop-valid@^1.1.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" @@ -1880,6 +1879,11 @@ dependencies: "@emotion/memoize" "^0.8.1" +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + "@emotion/memoize@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" @@ -2850,33 +2854,33 @@ dependencies: "@octokit/openapi-types" "^19.1.0" -"@pandacss/config@0.32.0", "@pandacss/config@^0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/config/-/config-0.32.0.tgz#a2ea363907c041726f5d4eec56358645966af421" - integrity sha512-clf6DrtBvIEyztvdgAQc8Hq6RpdAwY5MTsune0Ka1iX4B5DjLyL38dIdV2DPCWSZkGx+oBHTgG9bmeGn7MYDpg== +"@pandacss/config@0.33.0", "@pandacss/config@^0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/config/-/config-0.33.0.tgz#294e43325c3f80e22cf1e3ce176d734780eb3820" + integrity sha512-ztSmI/Y0AQuRH0CfuwG3T6C1wdVcC/uxv+ODh56r9EE7w/F3ncp1TAXiAiVFqSK5f9eyr1vwt6L0cfdS+uO8Dg== dependencies: - "@pandacss/logger" "0.32.0" - "@pandacss/preset-base" "0.32.0" - "@pandacss/preset-panda" "0.32.0" - "@pandacss/shared" "0.32.0" - "@pandacss/types" "0.32.0" + "@pandacss/logger" "0.33.0" + "@pandacss/preset-base" "0.33.0" + "@pandacss/preset-panda" "0.33.0" + "@pandacss/shared" "0.33.0" + "@pandacss/types" "0.33.0" bundle-n-require "1.1.1" escalade "3.1.2" merge-anything "5.1.7" microdiff "1.3.2" typescript "5.3.3" -"@pandacss/core@0.32.0", "@pandacss/core@^0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/core/-/core-0.32.0.tgz#c2af72f3a3f16d1d0336f1e3c68db0561d1a9b9c" - integrity sha512-o6eptw6Wf5df424N5Mmv8yqv/ySb/5+4M76gQUgDp/MrKUhMHnz7JAmREL94XZzVZI8T4RDu+XPMdZWzCjz0Ow== - dependencies: - "@csstools/postcss-cascade-layers" "4.0.2" - "@pandacss/is-valid-prop" "^0.32.0" - "@pandacss/logger" "0.32.0" - "@pandacss/shared" "0.32.0" - "@pandacss/token-dictionary" "0.32.0" - "@pandacss/types" "0.32.0" +"@pandacss/core@0.33.0", "@pandacss/core@^0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/core/-/core-0.33.0.tgz#cdd380656434f12d52b051eb087490a582d71a05" + integrity sha512-8XvAWsGovRGMNIotpIlEp3VwOhvc6n65FV+a6VdaidruPl1yLXRqXCcO0cJWEeohy3VWPc6/bAgeW3m2nzSkPg== + dependencies: + "@csstools/postcss-cascade-layers" "4.0.3" + "@pandacss/is-valid-prop" "^0.33.0" + "@pandacss/logger" "0.33.0" + "@pandacss/shared" "0.33.0" + "@pandacss/token-dictionary" "0.33.0" + "@pandacss/types" "0.33.0" autoprefixer "10.4.17" browserslist "4.23.0" hookable "5.5.3" @@ -2893,75 +2897,75 @@ postcss-selector-parser "6.0.15" ts-pattern "5.0.8" -"@pandacss/dev@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/dev/-/dev-0.32.0.tgz#c861cf8353b80dbd6853f11a940abd3ea219f6c2" - integrity sha512-v2F3l7GcE4ufF1dEZeamrBIZ2OX/6Pywj8+HxBiDTxMHkG5vEyO7I9P5aI3kiHb4YlDYtunlVhmX1JyX+8b4jg== +"@pandacss/dev@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/dev/-/dev-0.33.0.tgz#d7e28d102412a067969d1a5c5dcc1d5025ea02a0" + integrity sha512-TBohWjDFHLzfGo/DwPDkoM2fG7bgTqKGaau1MqpnGL02AJDi+qnMU7+LAJNw2FdAzEHZR4652mtUmidZwWCmIg== dependencies: "@clack/prompts" "0.7.0" - "@pandacss/config" "0.32.0" - "@pandacss/logger" "0.32.0" - "@pandacss/node" "0.32.0" - "@pandacss/postcss" "0.32.0" - "@pandacss/preset-panda" "0.32.0" - "@pandacss/shared" "0.32.0" - "@pandacss/token-dictionary" "0.32.0" - "@pandacss/types" "0.32.0" + "@pandacss/config" "0.33.0" + "@pandacss/logger" "0.33.0" + "@pandacss/node" "0.33.0" + "@pandacss/postcss" "0.33.0" + "@pandacss/preset-panda" "0.33.0" + "@pandacss/shared" "0.33.0" + "@pandacss/token-dictionary" "0.33.0" + "@pandacss/types" "0.33.0" cac "6.7.14" -"@pandacss/extractor@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/extractor/-/extractor-0.32.0.tgz#18c5c48049d977eaa7b47d757e57ba6e6f954a90" - integrity sha512-aKyIVk4JPlMptGfs73JtF6w0EJeZMVzz3MbU/glvcoSNhNDpnV6t0fswq0IWMVV/gmnxinSDvQ7wJwjHeRpOzg== +"@pandacss/extractor@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/extractor/-/extractor-0.33.0.tgz#5dc21cc98383906ba405eb6ffdc09e9a92df0eb1" + integrity sha512-nvu5YA/U622E6yT1n+Nh54L9IguPjIeNLN12QQEuL2XWgJlxbyZlKn8uPawKG8U5QokEQT6qG/hagWYuJ/NtnQ== dependencies: - "@pandacss/shared" "0.32.0" + "@pandacss/shared" "0.33.0" ts-evaluator "1.2.0" ts-morph "21.0.1" -"@pandacss/generator@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/generator/-/generator-0.32.0.tgz#7e8c8e4e33ffeb83dd49b24a5ee7540089433bab" - integrity sha512-DxMnoXhsmk3xwJ0GTI8WioN9Bf+U93I0bAluSpV7HLeLBqTRpbFfsLhM0Fzsfk/h5urrnFFQMS+4cX/KUP8iZA== - dependencies: - "@pandacss/core" "0.32.0" - "@pandacss/is-valid-prop" "^0.32.0" - "@pandacss/logger" "0.32.0" - "@pandacss/shared" "0.32.0" - "@pandacss/token-dictionary" "0.32.0" - "@pandacss/types" "0.32.0" +"@pandacss/generator@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/generator/-/generator-0.33.0.tgz#451ec9105afb15da592b6fab4e3bf69a49c0680d" + integrity sha512-Uta5rUd4w2pMmTgn3zNb5ApjBaCGnt9NtwiI7O2pZup0wJb8nEbtVSrZRGcZrMSkvwAy67+9PE4Ei9iTLr2b8w== + dependencies: + "@pandacss/core" "0.33.0" + "@pandacss/is-valid-prop" "^0.33.0" + "@pandacss/logger" "0.33.0" + "@pandacss/shared" "0.33.0" + "@pandacss/token-dictionary" "0.33.0" + "@pandacss/types" "0.33.0" javascript-stringify "2.1.0" outdent " ^0.8.0" pluralize "8.0.0" postcss "8.4.35" ts-pattern "5.0.8" -"@pandacss/is-valid-prop@^0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-0.32.0.tgz#363cff7deda660fac252c694f610a40a36a9ee40" - integrity sha512-IFI8S++hjP6Q2bIBamJV8BS1X+y5RPoTGu5VIkUPitF4zuesR5orfPIYFyixo4CweLCZce2rFng3yim/Cam9jA== +"@pandacss/is-valid-prop@^0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-0.33.0.tgz#0697d3e7477f7ec8c636f7d31a901b27cdd18a91" + integrity sha512-P7lvmlH3idILBIBM651dVDecSlRLNpAuxIJltypw5tX5IdRfigouu2h+5n2vQRYThm3fgKp4boH6PA2gXt+kkA== -"@pandacss/logger@0.32.0", "@pandacss/logger@^0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/logger/-/logger-0.32.0.tgz#7eadede845c2d186fe6b053515de7752db955628" - integrity sha512-8TaHKkqBPqB8+bpeEPghHtPRyhHVLIoSTl4dziEUQIgf4s6HXYLIfeXKtw2d7zfNnTIoS+Oc0ZJp5KzEn5p7JQ== +"@pandacss/logger@0.33.0", "@pandacss/logger@^0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/logger/-/logger-0.33.0.tgz#f4e0d607b85e25827bd62416c88aa52f6c8a42f7" + integrity sha512-UfZ6Aza579qT3LbX/I2AkphuVxgXEd/lZfQrmEZJ4n1WOIW0E47k10e4q0SVU988pwhMLInnJDskvurSOrirbw== dependencies: - "@pandacss/types" "0.32.0" + "@pandacss/types" "0.33.0" kleur "4.1.5" -"@pandacss/node@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/node/-/node-0.32.0.tgz#783777e2ec741fecafb973403c66245cfc09fbbf" - integrity sha512-GpfXZBn54jVHNyJp/K67bhrjjmQdXlSq8K1ExBMwZjsMJkMMCWoYi3L+9nLC0Jxxr2T/7MGpYISwPefOK6Y7GA== - dependencies: - "@pandacss/config" "0.32.0" - "@pandacss/core" "0.32.0" - "@pandacss/extractor" "0.32.0" - "@pandacss/generator" "0.32.0" - "@pandacss/logger" "0.32.0" - "@pandacss/parser" "0.32.0" - "@pandacss/shared" "0.32.0" - "@pandacss/token-dictionary" "0.32.0" - "@pandacss/types" "0.32.0" +"@pandacss/node@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/node/-/node-0.33.0.tgz#b601e34376db0adf65d2bd1a42aa5922005d1d17" + integrity sha512-q0xXE0xEdkfpvGHCWk6188pbUcnwQLt4HoFsEPv0DkMUxqlQCCnyparNsydducBExzYS2dwujMyXFZ2TIxqa2Q== + dependencies: + "@pandacss/config" "0.33.0" + "@pandacss/core" "0.33.0" + "@pandacss/extractor" "0.33.0" + "@pandacss/generator" "0.33.0" + "@pandacss/logger" "0.33.0" + "@pandacss/parser" "0.33.0" + "@pandacss/shared" "0.33.0" + "@pandacss/token-dictionary" "0.33.0" + "@pandacss/types" "0.33.0" browserslist "4.23.0" chokidar "3.6.0" fast-glob "3.3.2" @@ -2978,68 +2982,68 @@ pluralize "8.0.0" postcss "8.4.35" preferred-pm "3.1.2" - prettier "2.8.8" + prettier "3.2.5" ts-morph "21.0.1" ts-pattern "5.0.8" tsconfck "3.0.2" -"@pandacss/parser@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/parser/-/parser-0.32.0.tgz#c1406165a992de5072d0ec9708e7f5b9291d1ebb" - integrity sha512-PDjdhqzAh8Ax4q9/+KUUSDk7mVlQMP0QEWxx/l9t8bCZwi/GLXxeMytDXNqwBFQsHkhbGIL0To5P5143o+dF2Q== - dependencies: - "@pandacss/config" "^0.32.0" - "@pandacss/core" "^0.32.0" - "@pandacss/extractor" "0.32.0" - "@pandacss/logger" "0.32.0" - "@pandacss/shared" "0.32.0" - "@pandacss/types" "0.32.0" +"@pandacss/parser@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/parser/-/parser-0.33.0.tgz#19ed1be1de5cbbbc22f37aa1146a1643c3da7eec" + integrity sha512-AxKQQFLd9ShOTeMG3Vceok6p1VxWRZqNNcGy7uAWUlZBzPeoLZ/DhCG8eXh4DZ/lPyMCsBh7/JSmUj95yXdbOA== + dependencies: + "@pandacss/config" "^0.33.0" + "@pandacss/core" "^0.33.0" + "@pandacss/extractor" "0.33.0" + "@pandacss/logger" "0.33.0" + "@pandacss/shared" "0.33.0" + "@pandacss/types" "0.33.0" "@vue/compiler-sfc" "3.4.19" magic-string "0.30.7" ts-morph "21.0.1" ts-pattern "5.0.8" -"@pandacss/postcss@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/postcss/-/postcss-0.32.0.tgz#eb346b3ec54e5047cec2ac90dfe6fa21556f905f" - integrity sha512-bre7iPV8U6gai25gqzW+OQjHoPTcibNTeGWc+Zp4mAAQhYFJWeiHqOLfU+9Hx0wIY6pAkj5V+zBNLECXb3SfBA== +"@pandacss/postcss@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/postcss/-/postcss-0.33.0.tgz#a71588f13f9acb359fe00eea1ef2124be05ce160" + integrity sha512-3uXELMnkNUNwTbzZrc+yNZEigSHmpMTu01wsXb4QaDtePj3cyusi0ocViK9/NYeYc7DXrwFaedGZ3j74NZKU6A== dependencies: - "@pandacss/node" "0.32.0" + "@pandacss/node" "0.33.0" postcss "8.4.35" -"@pandacss/preset-base@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/preset-base/-/preset-base-0.32.0.tgz#397ddd47bdc4f0ef70808dc30fbd164e5a681301" - integrity sha512-yDFcPYwTRWGwcR5ka++mG9bShulr1KjtGpeJBZXrOGvgjUM0WlMRhcq44/o4qtJe375OcDXEZqCYrY32NTkGWA== +"@pandacss/preset-base@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/preset-base/-/preset-base-0.33.0.tgz#1ac89bdf269d1567dc77927abbc00f87630e0df3" + integrity sha512-k57gdZ/Wj1D3hVZOSpjG5ye+G6pMIn8C0cDTgOIVrzO+uJRRhManecBd92ErNnb7iBTnlvfyyKCPBXk0r74N+g== dependencies: - "@pandacss/types" "0.32.0" + "@pandacss/types" "0.33.0" -"@pandacss/preset-panda@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/preset-panda/-/preset-panda-0.32.0.tgz#cb11618c5120262a045ec252feed3d79c66dd7f3" - integrity sha512-gVhjnmRJ/EcIEUeHNJocFCWKKgA/wUam39Nwd57KR3AO3iDUgWp3w9t/tv/rTXGVgZzJyLEnR2thBz9keZz7sA== +"@pandacss/preset-panda@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/preset-panda/-/preset-panda-0.33.0.tgz#09fa0b4bec56d2ae65634dbd3c523fa8cd6607fa" + integrity sha512-ezu74WZnvmQBHmIgMgty+zYryeTlPVmQkkBwPP3ywCv4eBTGOObKbIL8CzB1xc7NOHBIudxEEGToaAQYMAWbbA== dependencies: - "@pandacss/types" "0.32.0" + "@pandacss/types" "0.33.0" -"@pandacss/shared@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/shared/-/shared-0.32.0.tgz#953b398b30b1e2df5e8c57fd28941eeaa622dae4" - integrity sha512-mdMEp8gkCyCKyCq4NRkmSHIddReN3a+Su0/5tV6U8Lqh80yU92nQYlot9xVk8HQV4VsqG/StBImGNn0TPb5Irg== +"@pandacss/shared@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/shared/-/shared-0.33.0.tgz#464d8560ca13506c6782edf4cc4661ad6ff668b4" + integrity sha512-OMOOyAp3UAemySerbfx0hZKwnmIEiWg3ao9ugxyFnWZ4lUpqfEkVg7JICV0RoExnDmRA8gUAT8xxWMiJ2OPzbg== -"@pandacss/token-dictionary@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/token-dictionary/-/token-dictionary-0.32.0.tgz#a4b6d35d6bb01889da51cd293779f919c222cf1a" - integrity sha512-44iw5fmStdkj5lDLzwSMLmcQyD5JZOVub+28f5TGGxduS/7f5Ds3Z3NGgdCnmNS/j2OajOeBFqJoIZISzlHxLQ== +"@pandacss/token-dictionary@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/token-dictionary/-/token-dictionary-0.33.0.tgz#77fe04eb34050c488ebddb948f91044dbf8887a7" + integrity sha512-rfVFak3bx2IWEcMXKM+THFy5HxW6ZnPLYLB9VnynYFfsvkehfVc7C7pOyfI/V8yvV9G54Cozd1NkFrbsH0Nogw== dependencies: - "@pandacss/logger" "^0.32.0" - "@pandacss/shared" "0.32.0" - "@pandacss/types" "0.32.0" + "@pandacss/logger" "^0.33.0" + "@pandacss/shared" "0.33.0" + "@pandacss/types" "0.33.0" ts-pattern "5.0.8" -"@pandacss/types@0.32.0": - version "0.32.0" - resolved "https://registry.yarnpkg.com/@pandacss/types/-/types-0.32.0.tgz#790ef64395d32a9a40169bc40dfea52bd7b4f419" - integrity sha512-jzEQrp/UYco2bIlU30DglBKJ7Ytnduy7JCrVVgb3pcNJy0LhVOLfMLb9m9605PcG2dPRZ0RU2a1DpqZgYSpayw== +"@pandacss/types@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@pandacss/types/-/types-0.33.0.tgz#266e90b06d87aa32082e101b80cfc5d894d58e4f" + integrity sha512-44tlDreSHaDW5medtCCiecgzihzm27mq3YabtHtDiJRUuyIl4+NmzlZZzETWziRmZjtw1jH1oMoGTOKM6+j/Hw== "@pkgjs/parseargs@^0.11.0": version "0.11.0" @@ -4105,10 +4109,10 @@ redux-thunk "^2.4.2" reselect "^4.1.8" -"@remix-run/router@1.15.1": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.1.tgz#221fd31a65186b9bc027b74573485fb3226dff7f" - integrity sha512-zcU0gM3z+3iqj8UX45AmWY810l3oUmXM7uH4dt5xtzvMhRtYVhKGOmgOd1877dOPPepfCjUv57w+syamWIYe7w== +"@remix-run/router@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.2.tgz#35726510d332ba5349c6398d13259d5da184553d" + integrity sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q== "@rjsf/core@^4.2.3": version "4.2.3" @@ -9940,10 +9944,10 @@ chroma-js@2.4.2: resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.4.2.tgz#dffc214ed0c11fa8eefca2c36651d8e57cbfb2b0" integrity sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A== -chromatic@10.9.6: - version "10.9.6" - resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-10.9.6.tgz#0dd9c82fbbf1f5a7aa73b96b5b7e066fe5408be3" - integrity sha512-1MoT+/U+vQwEiq2GuehPyStbqhxqHmM1B9pdpVU1dKh26userQg1FyOFYifkTgy+9reo2w2p7sAbc0JRd2kzlA== +chromatic@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.0.0.tgz#3fcd5129a01c9b6bbd5ed46a11795ad5ac0731d3" + integrity sha512-utzRVqdMrpzYwZNf7dHWU0z0/rx6SH/FUVNozQxYHDtQfYUdEj+Ro4OSch5+Wsk2FoUmznJyLkaC2J839z1N7A== chrome-launcher@0.15.1: version "0.15.1" @@ -13012,6 +13016,15 @@ fraction.js@^4.3.7: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== +framer-motion@11.0.8: + version "11.0.8" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.0.8.tgz#8f97a18cbad5858d85b53bc325c40a03d0a5c203" + integrity sha512-1KSGNuqe1qZkS/SWQlDnqK2VCVzRVEoval379j0FiUBJAZoqgwyvqFkfvJbgW2IPFo4wX16K+M0k5jO23lCIjA== + dependencies: + tslib "^2.4.0" + optionalDependencies: + "@emotion/is-prop-valid" "^0.8.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -17955,10 +17968,10 @@ postcss-lab-function@^6.0.10: "@csstools/postcss-progressive-custom-properties" "^3.1.0" "@csstools/utilities" "^1.0.0" -postcss-loader@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.1.0.tgz#590e8bd872d7cdf53c486cbcd40c4c94789f1216" - integrity sha512-AbperNcX3rlob7Ay7A/HQcrofug1caABBkopoFeOQMspZBqcqj6giYn1Bwey/0uiOPAcR+NQD0I2HC7rXzk91w== +postcss-loader@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.1.1.tgz#2822589e7522927344954acb55bbf26e8b195dfe" + integrity sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ== dependencies: cosmiconfig "^9.0.0" jiti "^1.20.0" @@ -18218,16 +18231,16 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@2.8.8, prettier@^2.8.0: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - prettier@3.2.5, prettier@^3.0.3: version "3.2.5" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +prettier@^2.8.0: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -18798,20 +18811,20 @@ react-remove-scroll@2.5.5: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-router-dom@6.22.1: - version "6.22.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.1.tgz#cfa109d4b6b0a4d00bac179bc0ad2a6469455282" - integrity sha512-iwMyyyrbL7zkKY7MRjOVRy+TMnS/OPusaFVxM2P11x9dzSzGmLsebkCvYirGq0DWB9K9hOspHYYtDz33gE5Duw== +react-router-dom@6.22.2: + version "6.22.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.2.tgz#8233968a8a576f3006e5549c80f3527d2598fc9c" + integrity sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ== dependencies: - "@remix-run/router" "1.15.1" - react-router "6.22.1" + "@remix-run/router" "1.15.2" + react-router "6.22.2" -react-router@6.22.1: - version "6.22.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.22.1.tgz#a5ff849bfe709438f7e139421bb28138209662c7" - integrity sha512-0pdoRGwLtemnJqn1K0XHUbnKiX0S4X8CgvVVmHGOWmofESj31msHo/1YiqcJWK7Wxfq2a4uvvtS01KAQyWK/CQ== +react-router@6.22.2: + version "6.22.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.22.2.tgz#27e77e4c635a5697693b922d131d773451c98a5b" + integrity sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw== dependencies: - "@remix-run/router" "1.15.1" + "@remix-run/router" "1.15.2" react-select@^5.8.0: version "5.8.0"