diff --git a/src/app/Components/SaleArtworkTileRailCard/UrgencyInfo.tests.tsx b/src/app/Components/SaleArtworkTileRailCard/UrgencyInfo.tests.tsx index bc7d4825c33..c68610eb8ed 100644 --- a/src/app/Components/SaleArtworkTileRailCard/UrgencyInfo.tests.tsx +++ b/src/app/Components/SaleArtworkTileRailCard/UrgencyInfo.tests.tsx @@ -75,7 +75,7 @@ describe("UrgencyInfo", () => { ) jest.advanceTimersByTime(2000) - expect(getByText("58m 59s left")).toHaveStyle({ color: "#C82400" }) + expect(getByText("58m 59s left")).toHaveStyle({ color: "#D71023" }) }) it("text color is blue when time is greater than 1 hour", () => { const start = new Date(new Date().getTime() - 10).toISOString() diff --git a/src/app/Navigation/utils/useBottomTabsBadges.tests.ts b/src/app/Navigation/utils/useBottomTabsBadges.tests.ts index 44870aed2a1..2b947230d5f 100644 --- a/src/app/Navigation/utils/useBottomTabsBadges.tests.ts +++ b/src/app/Navigation/utils/useBottomTabsBadges.tests.ts @@ -12,7 +12,9 @@ jest.mock("@artsy/palette-mobile", () => ({ jest.mock("app/utils/hooks/useVisualClue", () => ({ useVisualClue: jest.fn(), })) - +jest.mock("app/utils/experiments/useActivityDotExperiment", () => ({ + useActivityDotExperiment: jest.fn(() => ({ forceDots: false, color: "blue100" })), +})) jest.mock("app/utils/useTabBarBadge", () => ({ useTabBarBadge: jest.fn(), })) diff --git a/src/app/Navigation/utils/useBottomTabsBadges.ts b/src/app/Navigation/utils/useBottomTabsBadges.ts index a8602c4fac9..5ed4423b58a 100644 --- a/src/app/Navigation/utils/useBottomTabsBadges.ts +++ b/src/app/Navigation/utils/useBottomTabsBadges.ts @@ -1,6 +1,7 @@ import { useColor, useSpace } from "@artsy/palette-mobile" import { BottomTabType } from "app/Scenes/BottomTabs/BottomTabType" import { bottomTabsConfig } from "app/Scenes/BottomTabs/bottomTabsConfig" +import { useActivityDotExperiment } from "app/utils/experiments/useActivityDotExperiment" import { useVisualClue } from "app/utils/hooks/useVisualClue" import { useTabBarBadge } from "app/utils/useTabBarBadge" import { StyleProp, TextStyle } from "react-native" @@ -18,13 +19,14 @@ export const useBottomTabsBadges = () => { const space = useSpace() const { showVisualClue } = useVisualClue() - const { unreadConversationsCount, hasUnseenNotifications } = useTabBarBadge() + const { forceDots, color: backgroundColor } = useActivityDotExperiment() + const tabsBadges: Record = {} const visualClueStyles = { - backgroundColor: color("blue100"), + backgroundColor: color(backgroundColor), top: space(1), minWidth: VISUAL_CLUE_HEIGHT, maxHeight: VISUAL_CLUE_HEIGHT, @@ -61,7 +63,7 @@ export const useBottomTabsBadges = () => { switch (tab) { case "home": { - if (hasUnseenNotifications) { + if (hasUnseenNotifications || forceDots) { tabsBadges[tab] = { tabBarBadge: "", tabBarBadgeStyle: { @@ -73,11 +75,23 @@ export const useBottomTabsBadges = () => { } case "inbox": { - if (unreadConversationsCount) { + if (unreadConversationsCount || forceDots) { + tabsBadges[tab] = { + tabBarBadge: unreadConversationsCount || (forceDots ? 42 : 0), + tabBarBadgeStyle: { + backgroundColor: color("red50"), + }, + } + } + return + } + + case "profile": { + if (forceDots) { tabsBadges[tab] = { - tabBarBadge: unreadConversationsCount, + tabBarBadge: "", tabBarBadgeStyle: { - backgroundColor: color("red100"), + ...visualClueStyles, }, } } diff --git a/src/app/Scenes/HomeView/Components/ActivityIndicator.tsx b/src/app/Scenes/HomeView/Components/ActivityIndicator.tsx index 63c8c61a0f3..9969e7578bb 100644 --- a/src/app/Scenes/HomeView/Components/ActivityIndicator.tsx +++ b/src/app/Scenes/HomeView/Components/ActivityIndicator.tsx @@ -1,15 +1,25 @@ import { BellIcon, Box, DEFAULT_HIT_SLOP, VisualClueDot } from "@artsy/palette-mobile" import { useHomeViewTracking } from "app/Scenes/HomeView/hooks/useHomeViewTracking" import { navigate } from "app/system/navigation/navigate" +import { useActivityDotExperiment } from "app/utils/experiments/useActivityDotExperiment" +import React from "react" import { TouchableOpacity } from "react-native" interface ActivityIndicatorProps { hasUnseenNotifications: boolean } -export const ActivityIndicator: React.FC = ({ hasUnseenNotifications }) => { +export const ActivityIndicator: React.FC = (props) => { + const { hasUnseenNotifications } = props const tracking = useHomeViewTracking() + const { enabled, variant, forceDots } = useActivityDotExperiment() + + let BellVariant = BellWithSmallDot + if (enabled && variant !== "control") BellVariant = BellWithLargeDot + + const displayUnseenNotifications = hasUnseenNotifications || forceDots + const navigateToActivityPanel = () => { tracking.tappedNotificationBell() @@ -23,19 +33,52 @@ export const ActivityIndicator: React.FC = ({ hasUnseenN onPress={navigateToActivityPanel} hitSlop={DEFAULT_HIT_SLOP} > - - - {!!hasUnseenNotifications && ( - - - - )} + ) } + +const BellWithSmallDot: React.FC<{ hasUnseenNotifications: boolean }> = (props) => { + const { hasUnseenNotifications } = props + const { color } = useActivityDotExperiment() + + return ( + <> + + + {!!hasUnseenNotifications && ( + + + + )} + + ) +} + +const BellWithLargeDot: React.FC<{ hasUnseenNotifications: boolean }> = (props) => { + const { hasUnseenNotifications } = props + const { color } = useActivityDotExperiment() + + return ( + <> + + + {!!hasUnseenNotifications && ( + + + + )} + + ) +} diff --git a/src/app/Scenes/HomeView/HomeView.tsx b/src/app/Scenes/HomeView/HomeView.tsx index eecf34c1583..5bf938059e8 100644 --- a/src/app/Scenes/HomeView/HomeView.tsx +++ b/src/app/Scenes/HomeView/HomeView.tsx @@ -23,6 +23,7 @@ import { navigate } from "app/system/navigation/navigate" import { getRelayEnvironment } from "app/system/relay/defaultEnvironment" import { useBottomTabsScrollToTop } from "app/utils/bottomTabsHelper" import { useExperimentVariant } from "app/utils/experiments/hooks" +import { useActivityDotExperiment } from "app/utils/experiments/useActivityDotExperiment" import { extractNodes } from "app/utils/extractNodes" import { useDevToggle } from "app/utils/hooks/useDevToggle" import { useIsDeepLink } from "app/utils/hooks/useIsDeepLink" @@ -60,14 +61,22 @@ export const HomeView: React.FC = memo(() => { const trackedSectionTypes = HomeViewStore.useStoreState((state) => state.trackedSectionTypes) - const { trackExperiment } = useExperimentVariant("onyx_artwork-card-save-and-follow-cta-redesign") + const { trackExperiment: trackCardRedesignExperiment } = useExperimentVariant( + "onyx_artwork-card-save-and-follow-cta-redesign" + ) useEffect(() => { if (trackedSectionTypes.includes("HomeViewSectionArtworks")) { - trackExperiment() + trackCardRedesignExperiment() } }, [trackedSectionTypes.includes("HomeViewSectionArtworks")]) + const { trackExperiment: trackActvityDotExperiment } = useActivityDotExperiment() + + useEffect(() => { + trackActvityDotExperiment() + }, []) + const { data, loadNext, hasNext } = usePaginationFragment< HomeViewQuery, HomeViewSectionsConnection_viewer$key diff --git a/src/app/utils/experiments/experiments.ts b/src/app/utils/experiments/experiments.ts index 97dd55ea7a4..b8d00e3c833 100644 --- a/src/app/utils/experiments/experiments.ts +++ b/src/app/utils/experiments/experiments.ts @@ -29,6 +29,13 @@ export const experiments = { payloadSuggestions: ["variant-a", "variant-b", "variant-c"], variantSuggestions: ["variant-a", "variant-b", "variant-c"], }, + "onyx_activity-dot-experiment": { + description: "Replace current visual clue dot with a larger or red variant", + fallbackEnabled: true, + fallbackVariant: "control", + variantSuggestions: ["control", "variant-b", "variant-c"], + payloadSuggestions: ['{"forceDots": "true"}', '{"forceDots": "false"}'], + }, } satisfies { [key: string]: ExperimentDescriptor } export type EXPERIMENT_NAME = keyof typeof experiments diff --git a/src/app/utils/experiments/useActivityDotExperiment.ts b/src/app/utils/experiments/useActivityDotExperiment.ts new file mode 100644 index 00000000000..564d569cef4 --- /dev/null +++ b/src/app/utils/experiments/useActivityDotExperiment.ts @@ -0,0 +1,23 @@ +import { useExperimentVariant } from "app/utils/experiments/hooks" + +type Variant = "control" | "variant-b" | "variant-c" +type Color = "red50" | "blue100" + +export function useActivityDotExperiment() { + const { enabled, trackExperiment, variant, payload } = useExperimentVariant( + "onyx_activity-dot-experiment" + ) + + // Dev Menu helper to force visible dots for testing during QA + const forceDots = Boolean(payload && JSON.parse(payload)?.forceDots === "true") + + const color: Color = enabled ? (variant === "variant-b" ? "red50" : "blue100") : "blue100" + + return { + enabled, + variant: variant as Variant, + color, + trackExperiment, + forceDots, + } +} diff --git a/yarn.lock b/yarn.lock index 14a7a6a2507..e7276ed892d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,9 +39,9 @@ styled-system "^5.1.5" "@artsy/palette-tokens@^6.0.3": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-6.0.3.tgz#48b5854039e7f494fdef75e2d84682447f447f2d" - integrity sha512-Iuq3hjvx6O2d1glmuoo1kFnMLOBJFW2OuQ4Q5fXS1Q/DMAvjwrBmmzZE6HVzwR5BwX5Xy6knRiD8FuPrldeo0Q== + version "6.2.0" + resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-6.2.0.tgz#189d6dcf8280407c38bfe0fef5153b6b112c70da" + integrity sha512-cKsVAO+6Ze78us49yh/VxJ7NmkggPnaPajj0qom3DkxqaTrbJrrWWWtAZkkcMs+3wG3FdI9P2Ro/2XHBUhbnkw== "@artsy/to-title-case@1.1.0": version "1.1.0" @@ -1782,7 +1782,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.23.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== @@ -1803,6 +1803,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.3.1": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -2729,13 +2736,13 @@ eventemitter3 "4.0.7" "@motionone/animation@^10.12.0": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" - integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.18.0.tgz#868d00b447191816d5d5cf24b1cafa144017922b" + integrity sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw== dependencies: - "@motionone/easing" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" + "@motionone/easing" "^10.18.0" + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" tslib "^2.3.1" "@motionone/dom@10.12.0": @@ -2750,34 +2757,34 @@ hey-listen "^1.0.8" tslib "^2.3.1" -"@motionone/easing@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693" - integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== +"@motionone/easing@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.18.0.tgz#7b82f6010dfee3a1bb0ee83abfbaff6edae0c708" + integrity sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg== dependencies: - "@motionone/utils" "^10.15.1" + "@motionone/utils" "^10.18.0" tslib "^2.3.1" "@motionone/generators@^10.12.0": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c" - integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.18.0.tgz#fe09ab5cfa0fb9a8884097feb7eb60abeb600762" + integrity sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg== dependencies: - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" tslib "^2.3.1" -"@motionone/types@^10.12.0", "@motionone/types@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb" - integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== +"@motionone/types@^10.12.0", "@motionone/types@^10.17.1": + version "10.17.1" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.17.1.tgz#cf487badbbdc9da0c2cb86ffc1e5d11147c6e6fb" + integrity sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A== -"@motionone/utils@^10.12.0", "@motionone/utils@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438" - integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== +"@motionone/utils@^10.12.0", "@motionone/utils@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.18.0.tgz#a59ff8932ed9009624bca07c56b28ef2bb2f885e" + integrity sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw== dependencies: - "@motionone/types" "^10.15.1" + "@motionone/types" "^10.17.1" hey-listen "^1.0.8" tslib "^2.3.1" @@ -7551,10 +7558,10 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -dequal@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-1.0.0.tgz#41c6065e70de738541c82cdbedea5292277a017e" - integrity sha512-/Nd1EQbQbI9UbSHrMiKZjFLrXSnU328iQdZKPQf78XQI6C+gutkFUeoHpG5J08Ioa6HeRbRNFpSIclh1xyG0mw== +dequal@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== destroy@1.2.0: version "1.2.0" @@ -12187,7 +12194,7 @@ ob1@0.81.0: object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" @@ -13316,9 +13323,9 @@ react-native-permissions@3.8.4: pkg-dir "^5.0.0" react-native-popover-view@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/react-native-popover-view/-/react-native-popover-view-5.1.7.tgz#12f1df9b7c142ab8fa1a3ded2919a4164823be45" - integrity sha512-Xa+zKYp9x62UNezT8o9SnqQaBQEHdGwGHZnFnA2bsXLneVRvvlBopNwMNj+p7N65qnPf3mmzWj+57ThtM1qFuw== + version "5.1.9" + resolved "https://registry.yarnpkg.com/react-native-popover-view/-/react-native-popover-view-5.1.9.tgz#5106240e561ad133e6bbf83ca404ecdd2d721f42" + integrity sha512-jjcVfH6hUN2bnB8wwtiELyb5184K90L3qZ+h0u6dSfVdyxgDbbkPS336a9JmNoaUGIrQYwZpRUd5Cgai35Am2w== dependencies: deprecated-react-native-prop-types "^2.3.0" prop-types "^15.8.1" @@ -13748,9 +13755,9 @@ regenerator-runtime@^0.13.9: integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -15370,15 +15377,15 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.1.0: +tslib@^2.0.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.1.0, tslib@^2.3.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tslib@^2.4.0: version "2.4.1" @@ -15663,11 +15670,11 @@ url@0.11.3: qs "^6.11.2" use-deep-compare@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/use-deep-compare/-/use-deep-compare-1.1.0.tgz#85580dde751f68400bf6ef7e043c7f986595cef8" - integrity sha512-6yY3zmKNCJ1jjIivfZMZMReZjr8e6iC6Uqtp701jvWJ6ejC/usXD+JjmslZDPJQgX8P4B1Oi5XSLHkOLeYSJsA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-deep-compare/-/use-deep-compare-1.3.0.tgz#b36d304072d306e6bf27ca5653f3277dd66d2c0d" + integrity sha512-94iG+dEdEP/Sl3WWde+w9StIunlV8Dgj+vkt5wTwMoFQLaijiEZSXXy8KtcStpmEDtIptRJiNeD4ACTtVvnIKA== dependencies: - dequal "1.0.0" + dequal "2.0.3" use-sync-external-store@^1.2.0: version "1.2.0"