Merge branch 'develop' into hooks-migration

This commit is contained in:
marcin mikołajczak 2024-09-28 17:02:20 +02:00
commit ba0fb61374
23 changed files with 259 additions and 244 deletions

View file

@ -7,11 +7,16 @@ yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
/.eslintcache
node_modules
dist
dist-ssr
*.local
.idea
.DS_Store
# Editor directories and files
.vscode/*
!.vscode/extensions.json

View file

@ -26,7 +26,7 @@ const FIREFISH = 'Firefish';
const FRIENDICA = 'Friendica';
/**
* GoToSocial, an ActivityPub server writter in Golang.
* GoToSocial, an ActivityPub server written in Golang.
* @see {@link https://gotosocial.org/}
*/
const GOTOSOCIAL = 'GoToSocial';
@ -518,6 +518,11 @@ const getFeatures = (instance: Instance) => {
v.software === MASTODON,
]),
/**
* TODO
*/
// followAccountLanguages: any([]),
/**
* Ability to follow hashtags.
* @see POST /api/v1/tags/:name/follow

View file

@ -21,7 +21,7 @@ interface FollowAccountParams {
notify?: boolean;
/**
* Array of String (ISO 639-1 language two-letter code). Filter received statuses for these languages. If not provided, you will receive this accounts posts in all languages.
* Requires `features.followAccountLangugaes`.
* Requires `features.followAccountLanguages`.
*/
languages?: string[];
}

View file

@ -15,7 +15,6 @@ yarn-error.log*
/dist/
/static/
/public/
/dist/
/pl-fe.zip
.idea
@ -27,9 +26,3 @@ yarn-error.log*
/custom/*.*
!/custom/.gitkeep
!/custom/**/.gitkeep
# surge.sh
/CNAME
/AUTH
/CORS
/ROUTER

View file

@ -29,7 +29,6 @@
"lint": "${npm_execpath} run lint:js && ${npm_execpath} run lint:sass",
"lint:js": "npx eslint --ext .js,.jsx,.cjs,.mjs,.ts,.tsx . --cache",
"lint:sass": "npx stylelint src/styles/**/*.scss",
"prepare": "husky install",
"precommit": "npx lint-staged"
},
"license": "AGPL-3.0-or-later",
@ -56,7 +55,6 @@
"@lexical/utils": "^0.18.0",
"@mkljczk/lexical-remark": "^0.4.0",
"@mkljczk/react-hotkeys": "^1.2.2",
"@popperjs/core": "^2.11.5",
"@reach/combobox": "^0.18.0",
"@reach/menu-button": "^0.18.0",
"@reach/popover": "^0.18.0",
@ -73,8 +71,7 @@
"@tanstack/react-virtual": "^3.10.8",
"@uidotdev/usehooks": "^2.4.1",
"@vitejs/plugin-react": "^4.3.1",
"@webbtc/webln-types": "^3.0.0",
"autoprefixer": "^10.4.15",
"autoprefixer": "^10.4.20",
"blurhash": "^2.0.0",
"bowser": "^2.11.0",
"browserslist": "^4.16.6",
@ -93,23 +90,22 @@
"fuzzysort": "^3.0.0",
"graphemesplit": "^2.4.4",
"html-react-parser": "^5.0.0",
"http-link-header": "^1.0.2",
"immer": "^10.1.1",
"immutable": "^4.3.7",
"intersection-observer": "^0.12.2",
"intl-messageformat": "10.5.11",
"intl-pluralrules": "^2.0.0",
"intl-messageformat": "^10.5.14",
"intl-pluralrules": "^2.0.1",
"isomorphic-dompurify": "^2.3.0",
"leaflet": "^1.8.0",
"lexical": "^0.18.0",
"line-awesome": "^1.3.0",
"localforage": "^1.10.0",
"lodash": "^4.17.21",
"mini-css-extract-plugin": "^2.6.0",
"mini-css-extract-plugin": "^2.9.1",
"multiselect-react-dropdown": "^2.0.25",
"path-browserify": "^1.0.1",
"pl-api": "^0.0.37",
"postcss": "^8.4.29",
"postcss": "^8.4.47",
"process": "^0.11.10",
"punycode": "^2.1.1",
"qrcode.react": "^4.0.1",
@ -123,9 +119,8 @@
"react-hot-toast": "^2.4.0",
"react-immutable-pure-component": "^2.2.2",
"react-inlinesvg": "^4.0.0",
"react-intl": "^6.0.0",
"react-intl": "^6.7.0",
"react-motion": "^0.5.2",
"react-popper": "^2.3.0",
"react-redux": "^9.0.4",
"react-router-dom": "^5.3.4",
"react-router-dom-v5-compat": "^6.24.1",
@ -159,7 +154,7 @@
"zustand": "^5.0.0-rc.2"
},
"devDependencies": {
"@formatjs/cli": "^6.2.0",
"@formatjs/cli": "^6.2.12",
"@gitbeaker/node": "^35.8.0",
"@jedmao/redux-mock-store": "^3.0.5",
"@stylistic/eslint-plugin": "^2.8.0",
@ -168,7 +163,6 @@
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/user-event": "^14.5.1",
"@types/escape-html": "^1.0.1",
"@types/http-link-header": "^1.0.3",
"@types/leaflet": "^1.8.0",
"@types/lodash": "^4.17.9",
"@types/object-assign": "^4.0.30",

View file

@ -1,5 +1,4 @@
// import MockAdapter from 'axios-mock-adapter';
import LinkHeader from 'http-link-header';
import { vi } from 'vitest';
const api = await vi.importActual('../index') as Record<string, Function>;
@ -15,19 +14,6 @@ const __clear = (): Function[] => mocks = [];
const staticClient = api.staticClient;
const getLinks = (response: Response): LinkHeader =>
new LinkHeader(response.headers?.get('link') || undefined);
const getNextLink = (response: Response) => {
const nextLink = new LinkHeader(response.headers?.get('link') || undefined);
return nextLink.refs.find(link => link.rel === 'next')?.uri;
};
const getPrevLink = (response: Response) => {
const prevLink = new LinkHeader(response.headers?.get('link') || undefined);
return prevLink.refs.find(link => link.rel === 'prev')?.uri;
};
const baseClient = (...params: any[]) => {
const axios = api.baseClient(...params);
// setupMock(axios);
@ -40,4 +26,4 @@ export default (...params: any[]) => {
return axios;
};
export { __stub, __clear, staticClient, getLinks, getNextLink, getPrevLink, baseClient };
export { __stub, __clear, staticClient, baseClient };

View file

@ -1,7 +1,7 @@
import { shift, useFloating, useTransitionStyles } from '@floating-ui/react';
import clsx from 'clsx';
import React, { useEffect, useState } from 'react';
import React, { useEffect } from 'react';
import { useIntl, FormattedMessage } from 'react-intl';
import { usePopper } from 'react-popper';
import { useHistory } from 'react-router-dom';
import { fetchRelationships } from 'pl-fe/actions/accounts';
@ -52,8 +52,6 @@ const ProfileHoverCard: React.FC<IProfileHoverCard> = ({ visible = true }) => {
const history = useHistory();
const intl = useIntl();
const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);
const me = useAppSelector(state => state.me);
const accountId: string | undefined = useAppSelector(state => state.profile_hover_card.accountId || undefined);
const { account } = useAccount(accountId, { withRelationship: true, withScrobble: true });
@ -75,7 +73,29 @@ const ProfileHoverCard: React.FC<IProfileHoverCard> = ({ visible = true }) => {
};
}, []);
const { styles, attributes } = usePopper(targetRef, popperElement);
const { x, y, strategy, refs, context, placement } = useFloating({
open: !!account,
elements: {
reference: targetRef,
},
middleware: [
shift({
padding: 8,
}),
],
});
const { styles } = useTransitionStyles(context, {
initial: {
opacity: 0,
transform: 'scale(0.8)',
transformOrigin: placement === 'bottom' ? 'top' : 'bottom',
},
duration: {
open: 100,
close: 100,
},
});
if (!account) return null;
const accountBio = { __html: account.note_emojified };
@ -89,9 +109,13 @@ const ProfileHoverCard: React.FC<IProfileHoverCard> = ({ visible = true }) => {
'opacity-100': visible,
'opacity-0 pointer-events-none': !visible,
})}
ref={setPopperElement}
style={styles.popper}
{...attributes.popper}
ref={refs.setFloating}
style={{
position: strategy,
top: y ?? 0,
left: x ?? 0,
...styles,
}}
onMouseEnter={handleMouseEnter(dispatch)}
onMouseLeave={handleMouseLeave(dispatch)}
>

View file

@ -190,6 +190,10 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
}
};
const handleFavouriteLongPress = status.favourites_count ? () => {
openModal('FAVOURITES', { statusId: status.id });
} : undefined;
const handleDislikeClick: React.EventHandler<React.MouseEvent> = (e) => {
if (me) {
dispatch(toggleDislike(status));
@ -198,6 +202,10 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
}
};
const handleDislikeLongPress = status.dislikes_count ? () => {
openModal('DISLIKES', { statusId: status.id });
} : undefined;
const handlePickEmoji = (emoji: EmojiType) => {
dispatch(emojiReact(status, emoji.custom ? emoji.id : emoji.native, emoji.custom ? emoji.imageUrl : undefined));
};
@ -225,6 +233,10 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
}
};
const handleReblogLongPress = status.reblogs_count ? () => {
openModal('REBLOGS', { statusId: status.id });
} : undefined;
const handleQuoteClick: React.EventHandler<React.MouseEvent> = (e) => {
if (me) {
dispatch(quoteCompose(status));
@ -670,6 +682,7 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
title={!publicStatus ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)}
active={status.reblogged}
onClick={handleReblogClick}
onLongPress={handleReblogLongPress}
count={reblogCount + quoteCount}
text={withLabels ? intl.formatMessage(messages.reblog) : undefined}
theme={statusActionButtonTheme}
@ -734,6 +747,7 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
color='accent'
filled
onClick={handleFavouriteClick}
onLongPress={handleFavouriteLongPress}
active={status.favourited}
count={favouriteCount}
text={withLabels ? intl.formatMessage(messages.favourite) : undefined}
@ -747,6 +761,7 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
color='accent'
filled
onClick={handleDislikeClick}
onLongPress={handleDislikeLongPress}
active={status.disliked}
count={status.dislikes_count}
text={withLabels ? intl.formatMessage(messages.disfavourite) : undefined}

View file

@ -1,3 +1,4 @@
import { useLongPress } from '@uidotdev/usehooks';
import clsx from 'clsx';
import React from 'react';
@ -40,10 +41,20 @@ interface IStatusActionButton extends React.ButtonHTMLAttributes<HTMLButtonEleme
emoji?: EmojiReaction;
text?: React.ReactNode;
theme?: 'default' | 'inverse';
onLongPress?: (event: Event) => void;
}
const StatusActionButton = React.forwardRef<HTMLButtonElement, IStatusActionButton>((props, ref): JSX.Element => {
const { icon, className, iconClassName, active, color, filled = false, count = 0, emoji, text, theme = 'default', ...filteredProps } = props;
const { icon, className, iconClassName, active, color, filled = false, count = 0, emoji, text, theme = 'default', onLongPress, ...filteredProps } = props;
const longPressBind = useLongPress((e) => {
if (!onLongPress || e.type !== 'touchstart') return;
e.stopPropagation();
if ('vibrate' in navigator) navigator.vibrate(1);
onLongPress(e);
});
const renderIcon = () => {
if (emoji) {
@ -100,6 +111,7 @@ const StatusActionButton = React.forwardRef<HTMLButtonElement, IStatusActionButt
},
className,
)}
{...longPressBind}
{...filteredProps}
>
{renderIcon()}

View file

@ -1,7 +1,7 @@
import { shift, useFloating, useTransitionStyles } from '@floating-ui/react';
import clsx from 'clsx';
import React, { useEffect, useState, useCallback } from 'react';
import React, { useEffect, useCallback } from 'react';
import { useIntl } from 'react-intl';
import { usePopper } from 'react-popper';
import { useHistory } from 'react-router-dom';
import { closeStatusHoverCard, updateStatusHoverCard } from 'pl-fe/actions/status-hover-card';
@ -22,8 +22,6 @@ const StatusHoverCard: React.FC<IStatusHoverCard> = ({ visible = true }) => {
const intl = useIntl();
const history = useHistory();
const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);
const statusId: string | undefined = useAppSelector(state => state.status_hover_card.statusId || undefined);
const status = useAppSelector(state => state.statuses.get(statusId!));
const targetRef = useAppSelector(state => state.status_hover_card.ref?.current);
@ -45,8 +43,29 @@ const StatusHoverCard: React.FC<IStatusHoverCard> = ({ visible = true }) => {
};
}, []);
const { styles, attributes } = usePopper(targetRef, popperElement, {
const { x, y, strategy, refs, context, placement } = useFloating({
open: !!statusId,
elements: {
reference: targetRef,
},
placement: 'top',
middleware: [
shift({
padding: 8,
}),
],
});
const { styles } = useTransitionStyles(context, {
initial: {
opacity: 0,
transform: 'scale(0.8)',
transformOrigin: placement === 'bottom' ? 'top' : 'bottom',
},
duration: {
open: 100,
close: 100,
},
});
const handleMouseEnter = useCallback((): React.MouseEventHandler => () => {
@ -77,9 +96,13 @@ const StatusHoverCard: React.FC<IStatusHoverCard> = ({ visible = true }) => {
'opacity-100': visible,
'opacity-0 pointer-events-none': !visible,
})}
ref={setPopperElement}
style={styles.popper}
{...attributes.popper}
ref={refs.setFloating}
style={{
position: strategy,
top: y ?? 0,
left: x ?? 0,
...styles,
}}
onMouseEnter={handleMouseEnter()}
onMouseLeave={handleMouseLeave()}
>

View file

@ -31,7 +31,10 @@ const spaces = {
8: 'gap-8',
};
interface IHStack extends Pick<React.HTMLAttributes<HTMLDivElement>, 'children' | 'className' | 'onClick' | 'style' | 'title'> {
interface IHStack extends Pick<
React.HTMLAttributes<HTMLDivElement>,
'children' | 'className' | 'draggable' | 'onClick' | 'onDragEnd' | 'onDragEnter' | 'onDragStart' | 'style' | 'title'
> {
/** Vertical alignment of children. */
alignItems?: keyof typeof alignItemsOptions;
/** Horizontal alignment of children. */

View file

@ -1,4 +1,4 @@
import React from 'react';
import React, { useRef } from 'react';
import { useIntl, defineMessages } from 'react-intl';
import Button from '../button/button';
@ -39,6 +39,8 @@ interface IStreamfield {
minItems?: number;
/** Maximum number of allowed inputs. */
maxItems?: number;
/** Allow changing order of the items. */
draggable?: boolean;
}
/** List of inputs that can be added or removed. */
@ -52,9 +54,29 @@ const Streamfield: React.FC<IStreamfield> = ({
component: Component,
maxItems = Infinity,
minItems = 0,
draggable,
}) => {
const intl = useIntl();
const dragItem = useRef<number | null>();
const dragOverItem = useRef<number | null>();
const handleDragStart = (i: number) => () => {
dragItem.current = i;
};
const handleDragEnter = (i: number) => () => {
dragOverItem.current = i;
};
const handleDragEnd = () => {
const newData = [...values];
const item = newData.splice(dragItem.current!, 1)[0];
newData.splice(dragOverItem.current!, 0, item);
onChange(newData);
};
const handleChange = (i: number) => (value: any) => {
const newData = [...values];
newData[i] = value;
@ -71,7 +93,15 @@ const Streamfield: React.FC<IStreamfield> = ({
{(values.length > 0) && (
<Stack space={1}>
{values.map((value, i) => value?._destroy ? null : (
<HStack key={i} space={2} alignItems='center'>
<HStack
key={i}
space={2}
alignItems='center'
draggable={draggable}
onDragStart={handleDragStart(i)}
onDragEnter={handleDragEnter(i)}
onDragEnd={handleDragEnd}
>
<Component
key={i}
index={i}

View file

@ -26,7 +26,7 @@ const WidgetBody: React.FC<IWidgetBody> = ({ children }): JSX.Element => (
interface IWidget {
/** Widget title text. */
title: React.ReactNode;
title?: React.ReactNode;
/** Callback when the widget action is clicked. */
onActionClick?: () => void;
/** URL to the svg icon for the widget action. */
@ -47,17 +47,19 @@ const Widget: React.FC<IWidget> = ({
action,
}): JSX.Element => (
<Stack space={4}>
<HStack space={2} alignItems='center' justifyContent='between'>
<WidgetTitle title={title} />
{action || (onActionClick && (
<IconButton
className='ml-2 size-6 text-black dark:text-white rtl:rotate-180'
src={actionIcon}
onClick={onActionClick}
title={actionTitle}
/>
))}
</HStack>
{title || action || onActionClick && (
<HStack space={2} alignItems='center' justifyContent='between'>
{title && <WidgetTitle title={title} />}
{action || (onActionClick && (
<IconButton
className='ml-2 size-6 text-black dark:text-white rtl:rotate-180'
src={actionIcon}
onClick={onActionClick}
title={actionTitle}
/>
))}
</HStack>
)}
<WidgetBody>{children}</WidgetBody>
</Stack>
);

View file

@ -70,7 +70,7 @@ const AccountCard: React.FC<IAccountCard> = ({ id }) => {
<Text
truncate
align='left'
className='line-clamp-2 [&_br]:hidden [&_p:first-child]:inline [&_p:first-child]:truncate [&_p]:hidden'
className='line-clamp-2 inline text-ellipsis [&_br]:hidden [&_p:first-child]:inline [&_p:first-child]:truncate [&_p]:hidden'
dangerouslySetInnerHTML={{ __html: account.note_emojified || '&nbsp;' }}
/>
</Stack>

View file

@ -54,8 +54,6 @@ const DraftStatus: React.FC<IDraftStatus> = ({ draftStatus, ...other }) => {
<Account
key={account.id}
account={account}
timestamp={status.created_at}
futureTimestamp
action={<DraftStatusActionBar source={draftStatus} status={status} {...other} />}
/>
</HStack>

View file

@ -452,6 +452,7 @@ const EditProfile: React.FC = () => {
onRemoveItem={handleRemoveField}
component={ProfileField}
maxItems={maxFields}
draggable
/>
)}

View file

@ -288,6 +288,7 @@ const PlFeConfig: React.FC = () => {
onChange={handleStreamItemChange(['promoPanel', 'items'])}
onAddItem={addStreamItem(['promoPanel', 'items'], templates.promoPanel)}
onRemoveItem={deleteStreamItem(['promoPanel', 'items'])}
draggable
/>
<Streamfield
@ -298,6 +299,7 @@ const PlFeConfig: React.FC = () => {
onChange={handleStreamItemChange(['navlinks', 'homeFooter'])}
onAddItem={addStreamItem(['navlinks', 'homeFooter'], templates.footerItem)}
onRemoveItem={deleteStreamItem(['navlinks', 'homeFooter'])}
draggable
/>
<FormGroup labelText={intl.formatMessage(messages.copyrightFooterLabel)}>
@ -347,6 +349,7 @@ const PlFeConfig: React.FC = () => {
onChange={handleStreamItemChange(['cryptoAddresses'])}
onAddItem={addStreamItem(['cryptoAddresses'], templates.cryptoAddress)}
onRemoveItem={deleteStreamItem(['cryptoAddresses'])}
draggable
/>
<FormGroup labelText={intl.formatMessage(messages.cryptoDonatePanelLimitLabel)}>

View file

@ -20,15 +20,15 @@ const StatusInteractionBar: React.FC<IStatusInteractionBar> = ({ status }): JSX.
if (!account || typeof account !== 'object') return null;
const onOpenReblogsModal = (username: string, statusId: string): void => {
const onOpenReblogsModal = (statusId: string): void => {
openModal('REBLOGS', { statusId });
};
const onOpenFavouritesModal = (username: string, statusId: string): void => {
const onOpenFavouritesModal = (statusId: string): void => {
openModal('FAVOURITES', { statusId });
};
const onOpenDislikesModal = (username: string, statusId: string): void => {
const onOpenDislikesModal = (statusId: string): void => {
openModal('DISLIKES', { statusId });
};
@ -36,7 +36,7 @@ const StatusInteractionBar: React.FC<IStatusInteractionBar> = ({ status }): JSX.
e.preventDefault();
// if (!me) onOpenUnauthorizedModal();
onOpenReblogsModal(account.acct, status.id);
onOpenReblogsModal(status.id);
};
const getReposts = () => {
@ -75,14 +75,14 @@ const StatusInteractionBar: React.FC<IStatusInteractionBar> = ({ status }): JSX.
e.preventDefault();
// if (!me) onOpenUnauthorizedModal();
onOpenFavouritesModal(account.acct, status.id);
onOpenFavouritesModal(status.id);
};
const handleOpenDislikesModal: React.EventHandler<React.MouseEvent<HTMLButtonElement>> = (e) => {
e.preventDefault();
// if (!me) onOpenUnauthorizedModal();
onOpenDislikesModal(account.acct, status.id);
onOpenDislikesModal(status.id);
};
const getFavourites = () => {

View file

@ -1,5 +1,4 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
import { Widget, Stack } from 'pl-fe/components/ui';
@ -13,7 +12,7 @@ interface IProfileFieldsPanel {
/** Custom profile fields for sidebar. */
const ProfileFieldsPanel: React.FC<IProfileFieldsPanel> = ({ account }) => (
<Widget title={<FormattedMessage id='profile_fields_panel.title' defaultMessage='Profile fields' />}>
<Widget>
<Stack space={4}>
{account.fields.map((field, i) => (
<ProfileField field={field} key={i} />

View file

@ -1288,7 +1288,6 @@
"profile_dropdown.logout": "Log out @{acct}",
"profile_dropdown.switch_account": "Switch accounts",
"profile_dropdown.theme": "Theme",
"profile_fields_panel.title": "Profile fields",
"reactions.all": "All",
"regeneration_indicator.label": "Loading…",
"regeneration_indicator.sublabel": "Your home feed is being prepared!",

View file

@ -1,6 +1,6 @@
.detailed,
.fullscreen {
.video-player__volume__currnt,
.video-player__volume__current,
.video-player__volume::before {
bottom: 27px;
}

View file

@ -24,8 +24,7 @@
"types": [
"vite/client",
"vitest/globals",
"vite-plugin-compile-time/client",
"@webbtc/webln-types"
"vite-plugin-compile-time/client"
],
},
"exclude": ["src/**/*.test.ts", "src/**/*.test.tsx"]

View file

@ -1488,26 +1488,10 @@
resolved "https://registry.yarnpkg.com/@fontsource/tajawal/-/tajawal-5.0.8.tgz#cd8a593ec5062b283b093b56ee5d38b6b97fa93d"
integrity sha512-KILlXB6B8YYcssz3pccPs/4s1XcXwTWogCtE4Ag3oTpK+81DIQLc2b9o77UiBP4yC17MmqeOp1lvoaJQP80RoA==
"@formatjs/cli@^6.2.0":
version "6.2.0"
resolved "https://registry.yarnpkg.com/@formatjs/cli/-/cli-6.2.0.tgz#17fbd40753eeb1f6e79c3caf25845c3a9c044d90"
integrity sha512-sP04UpocRHYwSovUnunAZHYvCTVbNcaLtWKnr1lETGRUnRRQqnXy/3d2Ce271ELXmNUSde2eHRdu4rv2XaVaiQ==
"@formatjs/ecma402-abstract@1.17.2":
version "1.17.2"
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.2.tgz#d197c6e26b9fd96ff7ba3b3a0cc2f25f1f2dcac3"
integrity sha512-k2mTh0m+IV1HRdU0xXM617tSQTi53tVR2muvYOsBeYcUgEAyxV1FOC7Qj279th3fBVQ+Dj6muvNJZcHSPNdbKg==
dependencies:
"@formatjs/intl-localematcher" "0.4.2"
tslib "^2.4.0"
"@formatjs/ecma402-abstract@1.18.2":
version "1.18.2"
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz#bf103712a406874eb1e387858d5be2371ab3aa14"
integrity sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==
dependencies:
"@formatjs/intl-localematcher" "0.5.4"
tslib "^2.4.0"
"@formatjs/cli@^6.2.12":
version "6.2.12"
resolved "https://registry.yarnpkg.com/@formatjs/cli/-/cli-6.2.12.tgz#5295e4f6351ed563bcd49fb6479905165098bcd4"
integrity sha512-bt1NEgkeYN8N9zWcpsPu3fZ57vv+biA+NtIQBlyOZnCp1bcvh+vNTXvmwF4C5qxqDtCylpOIb3yi3Ktgp4v0JQ==
"@formatjs/ecma402-abstract@2.0.0":
version "2.0.0"
@ -1524,24 +1508,6 @@
dependencies:
tslib "^2.4.0"
"@formatjs/icu-messageformat-parser@2.6.2":
version "2.6.2"
resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.6.2.tgz#9bbb29099416e4ce2c7df50029c48985d4f901b3"
integrity sha512-nF/Iww7sc5h+1MBCDRm68qpHTCG4xvGzYs/x9HFcDETSGScaJ1Fcadk5U/NXjXeCtzD+DhN4BAwKFVclHfKMdA==
dependencies:
"@formatjs/ecma402-abstract" "1.17.2"
"@formatjs/icu-skeleton-parser" "1.6.2"
tslib "^2.4.0"
"@formatjs/icu-messageformat-parser@2.7.6":
version "2.7.6"
resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.6.tgz#3d69806de056d2919d53dad895a5ff4851e4e9ff"
integrity sha512-etVau26po9+eewJKYoiBKP6743I1br0/Ie00Pb/S/PtmYfmjTcOn2YCh2yNkSZI12h6Rg+BOgQYborXk46BvkA==
dependencies:
"@formatjs/ecma402-abstract" "1.18.2"
"@formatjs/icu-skeleton-parser" "1.8.0"
tslib "^2.4.0"
"@formatjs/icu-messageformat-parser@2.7.8":
version "2.7.8"
resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz#f6d7643001e9bb5930d812f1f9a9856f30fa0343"
@ -1551,22 +1517,6 @@
"@formatjs/icu-skeleton-parser" "1.8.2"
tslib "^2.4.0"
"@formatjs/icu-skeleton-parser@1.6.2":
version "1.6.2"
resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.6.2.tgz#00303034dc08583973c8aa67b96534c49c0bad8d"
integrity sha512-VtB9Slo4ZL6QgtDFJ8Injvscf0xiDd4bIV93SOJTBjUF4xe2nAWOoSjLEtqIG+hlIs1sNrVKAaFo3nuTI4r5ZA==
dependencies:
"@formatjs/ecma402-abstract" "1.17.2"
tslib "^2.4.0"
"@formatjs/icu-skeleton-parser@1.8.0":
version "1.8.0"
resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.0.tgz#5f3d3a620c687d6f8c180d80d1241e8f213acf79"
integrity sha512-QWLAYvM0n8hv7Nq5BEs4LKIjevpVpbGLAJgOaYzg9wABEoX1j0JO1q2/jVkO6CVlq0dbsxZCngS5aXbysYueqA==
dependencies:
"@formatjs/ecma402-abstract" "1.18.2"
tslib "^2.4.0"
"@formatjs/icu-skeleton-parser@1.8.2":
version "1.8.2"
resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz#2252c949ae84ee66930e726130ea66731a123c9f"
@ -1575,29 +1525,22 @@
"@formatjs/ecma402-abstract" "2.0.0"
tslib "^2.4.0"
"@formatjs/intl-displaynames@6.5.2":
version "6.5.2"
resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.5.2.tgz#b14ffd0962d5b5cfd71457efc389f0bca83a00db"
integrity sha512-uC2VBlz+WydGTDDpJwMTQuPH3CUpTricr91WH1QMfz5oEHg2sB7mUERcZONE/lu8MOe1jREIx4vBciZEVTqkmA==
"@formatjs/intl-displaynames@6.6.8":
version "6.6.8"
resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz#2f5afac8df83167f5a6ef8543600eaf1ef99c885"
integrity sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==
dependencies:
"@formatjs/ecma402-abstract" "1.17.2"
"@formatjs/intl-localematcher" "0.4.2"
"@formatjs/ecma402-abstract" "2.0.0"
"@formatjs/intl-localematcher" "0.5.4"
tslib "^2.4.0"
"@formatjs/intl-listformat@7.4.2":
version "7.4.2"
resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.4.2.tgz#c8d86d3b15eead41f74748d1c79d6450fd1bad82"
integrity sha512-+6bSVudEQkf12Hh7kuKt8Xv/MyFlqdwA4V4NLnTZW8uYdF9RxlOELDD0rPaOc2++TMKIzI5o6XXwHPvpL6VrPA==
dependencies:
"@formatjs/ecma402-abstract" "1.17.2"
"@formatjs/intl-localematcher" "0.4.2"
tslib "^2.4.0"
"@formatjs/intl-localematcher@0.4.2":
version "0.4.2"
resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.4.2.tgz#7e6e596dbaf2f0c5a7c22da5a01d5c55f4c37e9a"
integrity sha512-BGdtJFmaNJy5An/Zan4OId/yR9Ih1OojFjcduX/xOvq798OgWSyDtd6Qd5jqJXwJs1ipe4Fxu9+cshic5Ox2tA==
"@formatjs/intl-listformat@7.5.7":
version "7.5.7"
resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz#125e05105fabd1ae5f11881d6ab74484f2098ee4"
integrity sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==
dependencies:
"@formatjs/ecma402-abstract" "2.0.0"
"@formatjs/intl-localematcher" "0.5.4"
tslib "^2.4.0"
"@formatjs/intl-localematcher@0.5.4":
@ -1607,17 +1550,17 @@
dependencies:
tslib "^2.4.0"
"@formatjs/intl@2.9.3":
version "2.9.3"
resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.9.3.tgz#e570c4b1afb173dfb1f80a42624425dde9841329"
integrity sha512-hclPdyCF1zk2XmhgdXfl5Sd30QEdRBnIijH7Vc1AWz2K0/saVRrxuL3UYn+m3xEyfOa4yDbTWVbmXDL0XEzlsQ==
"@formatjs/intl@2.10.5":
version "2.10.5"
resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.5.tgz#1a83960fc1871f476385e006f2fee23cc439f416"
integrity sha512-f9qPNNgLrh2KvoFvHGIfcPTmNGbyy7lyyV4/P6JioDqtTE7Akdmgt+ZzVndr+yMLZnssUShyTMXxM/6aV9eVuQ==
dependencies:
"@formatjs/ecma402-abstract" "1.17.2"
"@formatjs/ecma402-abstract" "2.0.0"
"@formatjs/fast-memoize" "2.2.0"
"@formatjs/icu-messageformat-parser" "2.6.2"
"@formatjs/intl-displaynames" "6.5.2"
"@formatjs/intl-listformat" "7.4.2"
intl-messageformat "10.5.3"
"@formatjs/icu-messageformat-parser" "2.7.8"
"@formatjs/intl-displaynames" "6.6.8"
"@formatjs/intl-listformat" "7.5.7"
intl-messageformat "10.5.14"
tslib "^2.4.0"
"@formatjs/ts-transformer@3.13.14":
@ -2103,11 +2046,6 @@
resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31"
integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
"@popperjs/core@^2.11.5":
version "2.11.5"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
"@prettier/eslint@npm:prettier-eslint@^15.0.1":
version "15.0.1"
resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-15.0.1.tgz#2543a43e9acec2a9767ad6458165ce81f353db9c"
@ -2813,13 +2751,6 @@
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
"@types/http-link-header@^1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.3.tgz#899adf1d8d2036074514f3dbd148fb901ceff920"
integrity sha512-y8HkoD/vyid+5MrJ3aas0FvU3/BVBGcyG9kgxL0Zn4JwstA8CglFPnrR0RuzOjRCXwqzL5uxWC2IO7Ub0rMU2A==
dependencies:
"@types/node" "*"
"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.13"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85"
@ -3504,11 +3435,6 @@
"@webassemblyjs/ast" "1.11.6"
"@xtuc/long" "4.2.2"
"@webbtc/webln-types@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@webbtc/webln-types/-/webln-types-3.0.0.tgz#448b2138423865087ba8859e9e6430fc2463b864"
integrity sha512-aXfTHLKz5lysd+6xTeWl+qHNh/p3qVYbeLo+yDN5cUDmhie2ZoGvkppfWxzbGkcFBzb6dJyQ2/i2cbmDHas+zQ==
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
@ -3964,16 +3890,16 @@ at-least-node@^1.0.0:
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
autoprefixer@^10.4.15:
version "10.4.15"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530"
integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==
autoprefixer@^10.4.20:
version "10.4.20"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b"
integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==
dependencies:
browserslist "^4.21.10"
caniuse-lite "^1.0.30001520"
fraction.js "^4.2.0"
browserslist "^4.23.3"
caniuse-lite "^1.0.30001646"
fraction.js "^4.3.7"
normalize-range "^0.1.2"
picocolors "^1.0.0"
picocolors "^1.0.1"
postcss-value-parser "^4.2.0"
available-typed-arrays@^1.0.5:
@ -4169,6 +4095,16 @@ browserslist@^4.23.1:
node-releases "^2.0.18"
update-browserslist-db "^1.1.0"
browserslist@^4.23.3:
version "4.24.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4"
integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==
dependencies:
caniuse-lite "^1.0.30001663"
electron-to-chromium "^1.5.28"
node-releases "^2.0.18"
update-browserslist-db "^1.1.0"
buffer-equal-constant-time@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
@ -4291,7 +4227,7 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520:
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517:
version "1.0.30001660"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz"
integrity sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==
@ -4301,6 +4237,11 @@ caniuse-lite@^1.0.30001639, caniuse-lite@^1.0.30001646:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz#3574b22dfec54a3f3b6787331da1040fe8e763ec"
integrity sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==
caniuse-lite@^1.0.30001663:
version "1.0.30001664"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz#d588d75c9682d3301956b05a3749652a80677df4"
integrity sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==
chai@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.1.tgz#f035d9792a22b481ead1c65908d14bb62ec1c82c"
@ -5228,6 +5169,11 @@ electron-to-chromium@^1.4.477:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.519.tgz#01b9bc3f1bb50c4971bdd1eeca6d9a73575bd581"
integrity sha512-kqs9oGYL4UFVkLKhqCTgBCYZv+wZ374yABDMqlDda9HvlkQxvSr7kgf4hfWVjMieDbX+1MwPHFBsOGCMIBaFKg==
electron-to-chromium@^1.5.28:
version "1.5.29"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz#aa592a3caa95d07cc26a66563accf99fa573a1ee"
integrity sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==
electron-to-chromium@^1.5.4:
version "1.5.27"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz#5203ce5d6054857d84ba84d3681cbe59132ade78"
@ -6505,10 +6451,10 @@ forwarded@0.2.0:
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
fraction.js@^4.2.0:
version "4.3.6"
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d"
integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==
fraction.js@^4.3.7:
version "4.3.7"
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
fresh@0.5.2:
version "0.5.2"
@ -7022,11 +6968,6 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
setprototypeof "1.1.0"
statuses ">= 1.4.0 < 2"
http-link-header@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.3.tgz#abbc2cdc5e06dd7e196a4983adac08a2d085ec90"
integrity sha512-nARK1wSKoBBrtcoESlHBx36c1Ln/gnbNQi1eB6MeTUefJIT3NvUOsV15bClga0k38f0q/kN5xxrGSDS3EFnm9w==
http-link-header@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.1.3.tgz#b367b7a0ad1cf14027953f31aa1df40bb433da2a"
@ -7194,27 +7135,17 @@ intersection-observer@^0.12.2:
resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.2.tgz#4a45349cc0cd91916682b1f44c28d7ec737dc375"
integrity sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==
intl-messageformat@10.5.11:
version "10.5.11"
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.11.tgz#95d6a3b0b303f924d5d8c3f8d3ad057d1dc73c64"
integrity sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==
intl-messageformat@10.5.14, intl-messageformat@^10.5.14:
version "10.5.14"
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.14.tgz#e5bb373f8a37b88fbe647d7b941f3ab2a37ed00a"
integrity sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==
dependencies:
"@formatjs/ecma402-abstract" "1.18.2"
"@formatjs/ecma402-abstract" "2.0.0"
"@formatjs/fast-memoize" "2.2.0"
"@formatjs/icu-messageformat-parser" "2.7.6"
"@formatjs/icu-messageformat-parser" "2.7.8"
tslib "^2.4.0"
intl-messageformat@10.5.3:
version "10.5.3"
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.3.tgz#db0779d4a1988faa2977d76574489b7a25f0d5d0"
integrity sha512-TzKn1uhJBMyuKTO4zUX47SU+d66fu1W9tVzIiZrQ6hBqQQeYscBMIzKL/qEXnFbJrH9uU5VV3+T5fWib4SIcKA==
dependencies:
"@formatjs/ecma402-abstract" "1.17.2"
"@formatjs/fast-memoize" "2.2.0"
"@formatjs/icu-messageformat-parser" "2.6.2"
tslib "^2.4.0"
intl-pluralrules@^2.0.0:
intl-pluralrules@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/intl-pluralrules/-/intl-pluralrules-2.0.1.tgz#de16c3df1e09437635829725e88ea70c9ad79569"
integrity sha512-astxTLzIdXPeN0K9Rumi6LfMpm3rvNO0iJE+h/k8Kr/is+wPbRe4ikyDjlLr6VTh/mEfNv8RjN+gu3KwDiuhqg==
@ -8529,12 +8460,13 @@ min-indent@^1.0.0:
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
mini-css-extract-plugin@^2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz#578aebc7fc14d32c0ad304c2c34f08af44673f5e"
integrity sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==
mini-css-extract-plugin@^2.9.1:
version "2.9.1"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz#4d184f12ce90582e983ccef0f6f9db637b4be758"
integrity sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==
dependencies:
schema-utils "^4.0.0"
tapable "^2.2.1"
mini-svg-data-uri@^1.2.3:
version "1.4.3"
@ -9425,7 +9357,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@^8.4.23, postcss@^8.4.29, postcss@^8.4.32, postcss@^8.4.4:
postcss@^8.4.23, postcss@^8.4.32, postcss@^8.4.4:
version "8.4.32"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
@ -9702,7 +9634,7 @@ react-event-listener@^0.6.0:
prop-types "^15.6.0"
warning "^4.0.1"
react-fast-compare@^3.0.1, react-fast-compare@^3.1.1:
react-fast-compare@^3.1.1:
version "3.2.0"
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
@ -9741,20 +9673,20 @@ react-inlinesvg@^4.0.0:
dependencies:
react-from-dom "^0.6.2"
react-intl@^6.0.0:
version "6.4.7"
resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.4.7.tgz#28ec40350ff791a6a773f5e76b9e12835ae17e19"
integrity sha512-0hnOHAZhxTFqD1hGTxrF40qNyZJPPYiGhWIIxIz0Udz+3e3c7sdN80qlxArR+AbJ+jb5ALXZkJYH20+GPFCM0Q==
react-intl@^6.7.0:
version "6.7.0"
resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.7.0.tgz#e84c20424017004f99e1af4e2cbc098f1eaace2e"
integrity sha512-f5QhjuKb+WEqiAbL5hDqUs2+sSRkF0vxkTbJ4A8ompt55XTyOHcrDlCXGq4o73ywFFrpgz+78C9IXegSLlya2A==
dependencies:
"@formatjs/ecma402-abstract" "1.17.2"
"@formatjs/icu-messageformat-parser" "2.6.2"
"@formatjs/intl" "2.9.3"
"@formatjs/intl-displaynames" "6.5.2"
"@formatjs/intl-listformat" "7.4.2"
"@formatjs/ecma402-abstract" "2.0.0"
"@formatjs/icu-messageformat-parser" "2.7.8"
"@formatjs/intl" "2.10.5"
"@formatjs/intl-displaynames" "6.6.8"
"@formatjs/intl-listformat" "7.5.7"
"@types/hoist-non-react-statics" "^3.3.1"
"@types/react" "16 || 17 || 18"
hoist-non-react-statics "^3.3.2"
intl-messageformat "10.5.3"
intl-messageformat "10.5.14"
tslib "^2.4.0"
react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0:
@ -9776,14 +9708,6 @@ react-motion@^0.5.2:
prop-types "^15.5.8"
raf "^3.1.0"
react-popper@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba"
integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==
dependencies:
react-fast-compare "^3.0.1"
warning "^4.0.2"
react-property@2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.2.tgz#d5ac9e244cef564880a610bc8d868bd6f60fdda6"
@ -11209,7 +11133,7 @@ tailwindcss@^3.4.12:
resolve "^1.22.2"
sucrase "^3.32.0"
tapable@^2.1.1, tapable@^2.2.0:
tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
@ -12067,7 +11991,7 @@ warning@^3.0.0:
dependencies:
loose-envify "^1.0.0"
warning@^4.0.1, warning@^4.0.2:
warning@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==